From 033d1c1f4f8709086658cb7d74e5c0049086928d Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 16:04:49 +0530 Subject: [PATCH 001/751] Intial code and test for client API We are using pipenv for setup. --- Pipfile | 15 ++++++ Pipfile.lock | 108 +++++++++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 110 ++++++++++++++++++++++++++++++++++++++++ tests/test_api.py | 49 ++++++++++++++++++ 4 files changed, 282 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 sdclientapi/__init__.py create mode 100644 tests/test_api.py diff --git a/Pipfile b/Pipfile new file mode 100644 index 000000000..3d916b7bb --- /dev/null +++ b/Pipfile @@ -0,0 +1,15 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[requires] +python_version = "3.5" + +[dev-packages] + +[packages] +requests = "*" +mypy-extensions = "*" +mypy = "*" +pyotp = "*" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 000000000..4f44b844f --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,108 @@ +{ + "_meta": { + "hash": { + "sha256": "1d86a9013741ee61197c4b58e35791e10f1bd59d3b1dbac030080178989c5bd1" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.5" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", + "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0" + ], + "version": "==2018.4.16" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "version": "==2.7" + }, + "mypy": { + "hashes": [ + "sha256:673ea75fb750289b7d1da1331c125dc62fc1c3a8db9129bb372ae7b7d5bf300a", + "sha256:c770605a579fdd4a014e9f0a34b6c7a36ce69b08100ff728e96e27445cef3b3c" + ], + "index": "pypi", + "version": "==0.620" + }, + "mypy-extensions": { + "hashes": [ + "sha256:c4553f2475996c912658d3c2f398766cd47a65e0c2c6bb27ac8dea94a21640f4" + ], + "index": "pypi", + "version": "==0.3.0" + }, + "pyotp": { + "hashes": [ + "sha256:8f0df1fcf9e86cec41f0a31c91212b1a04fca6dd353426917222b21864b9310b", + "sha256:dd9130dd91a0340d89a0f06f887dbd76dd07fb95a8886dc4bc401239f2eebd69" + ], + "index": "pypi", + "version": "==2.2.6" + }, + "requests": { + "hashes": [ + "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", + "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + ], + "index": "pypi", + "version": "==2.19.1" + }, + "typed-ast": { + "hashes": [ + "sha256:0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", + "sha256:10703d3cec8dcd9eef5a630a04056bbc898abc19bac5691612acba7d1325b66d", + "sha256:1f6c4bd0bdc0f14246fd41262df7dfc018d65bb05f6e16390b7ea26ca454a291", + "sha256:25d8feefe27eb0303b73545416b13d108c6067b846b543738a25ff304824ed9a", + "sha256:29464a177d56e4e055b5f7b629935af7f49c196be47528cc94e0a7bf83fbc2b9", + "sha256:2e214b72168ea0275efd6c884b114ab42e316de3ffa125b267e732ed2abda892", + "sha256:3e0d5e48e3a23e9a4d1a9f698e32a542a4a288c871d33ed8df1b092a40f3a0f9", + "sha256:519425deca5c2b2bdac49f77b2c5625781abbaf9a809d727d3a5596b30bb4ded", + "sha256:57fe287f0cdd9ceaf69e7b71a2e94a24b5d268b35df251a88fef5cc241bf73aa", + "sha256:668d0cec391d9aed1c6a388b0d5b97cd22e6073eaa5fbaa6d2946603b4871efe", + "sha256:68ba70684990f59497680ff90d18e756a47bf4863c604098f10de9716b2c0bdd", + "sha256:6de012d2b166fe7a4cdf505eee3aaa12192f7ba365beeefaca4ec10e31241a85", + "sha256:79b91ebe5a28d349b6d0d323023350133e927b4de5b651a8aa2db69c761420c6", + "sha256:8550177fa5d4c1f09b5e5f524411c44633c80ec69b24e0e98906dd761941ca46", + "sha256:898f818399cafcdb93cbbe15fc83a33d05f18e29fb498ddc09b0214cdfc7cd51", + "sha256:94b091dc0f19291adcb279a108f5d38de2430411068b219f41b343c03b28fb1f", + "sha256:a26863198902cda15ab4503991e8cf1ca874219e0118cbf07c126bce7c4db129", + "sha256:a8034021801bc0440f2e027c354b4eafd95891b573e12ff0418dec385c76785c", + "sha256:bc978ac17468fe868ee589c795d06777f75496b1ed576d308002c8a5756fb9ea", + "sha256:c05b41bc1deade9f90ddc5d988fe506208019ebba9f2578c622516fd201f5863", + "sha256:c9b060bd1e5a26ab6e8267fd46fc9e02b54eb15fffb16d112d4c7b1c12987559", + "sha256:edb04bdd45bfd76c8292c4d9654568efaedf76fe78eb246dde69bdb13b2dad87", + "sha256:f19f2a4f547505fe9072e15f6f4ae714af51b5a681a97f187971f50c283193b6" + ], + "version": "==1.1.0" + }, + "urllib3": { + "hashes": [ + "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", + "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + ], + "version": "==1.23" + } + }, + "develop": {} +} diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py new file mode 100644 index 000000000..9558c02eb --- /dev/null +++ b/sdclientapi/__init__.py @@ -0,0 +1,110 @@ +import json +import requests + +from typing import Optional, Dict, List +from mypy_extensions import TypedDict + +T_token = TypedDict("T_token", {"expiration": str, "token": str}) + + +class BaseError(Exception): + pass + + +class AuthError(BaseError): + "For Authentication errors" + + def __init__(self, message): + self.message = message + + +class AttributeError(BaseError): + def __init__(self, message): + self.message = message + + +class Source: + def __init__(self, **kargs): + self.add_star_url = "" # type: str + self.interaction_count = 0 # type: int + self.is_flagged = False # type: bool + self.is_starred = False # type: bool + self.journalist_designation = "" # type: str + self.key = {} # type: Dict + self.last_updated = "" # type: str + self.number_of_documents = 0 # type: int + self.number_of_messages = 0 # type: int + self.remove_star_url = "" # type: str + self.reply_url = "" # type: str + self.submissions_url = "" # type: str + self.url = "" # type: str + self.uuid = "" # type: str + + for key in [ + "add_star_url", + "interaction_count", + "is_flagged", + "is_starred", + "journalist_designation", + "key", + "last_updated", + "number_of_documents", + "number_of_messages", + "remove_star_url", + "reply_url", + "submissions_url", + "url", + "uuid", + ]: + if not key in kargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kargs[key]) + + +class API: + def __init__(self, address, username, passphrase, totp) -> None: + + self.server = address + self.username = username # type: str + self.passphrase = passphrase # type: str + self.totp = totp # type: int + self.token = {"token": "", "expiration": ""} # type: T_token + + def authenticate(self) -> bool: + user_data = { + "username": self.username, + "passphrase": self.passphrase, + "one_time_code": self.totp, + } + + token = requests.post(self.server + "api/v1/token", data=json.dumps(user_data)) + try: + token_data = token.json() # type: T_token + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + if not "expiration" in token_data: + raise AuthError("Authentication error") + self.token = token_data + + return True + + def get_sources(self) -> List[Source]: + url = self.server + "api/v1/sources" + auth_header = {"Authorization": "token " + self.token["token"]} + + try: + res = requests.get( + "http://localhost:8081/api/v1/sources", headers=auth_header + ) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + sources = data["sources"] + result = [] # type: List[Source] + + for source in sources: + s = Source(**source) + result.append(s) + + return result diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 000000000..fb47b0518 --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,49 @@ +from pprint import pprint +import os +import time +import json +import unittest +from sdclientapi import * + +import pyotp + + +def load_auth(): + "Helper function to load token" + if os.path.exists("testtoken.json"): + with open("testtoken.json") as fobj: + return json.load(fobj) + return None + + +def save_auth(token): + with open("testtoken.json", "w") as fobj: + json.dump(token, fobj) + + +class TestAPI(unittest.TestCase): + def setUp(self): + self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") + self.username = "journalist" + self.password = "correct horse battery staple profanity oil chewy" + self.server = "http://localhost:8081/" + self.api = API(self.server, self.username, self.password, str(self.totp.now())) + for i in range(3): + try: + self.api.authenticate() + except BaseError: + token = load_auth() + if token: + self.api.token = token + continue + time.sleep(31) + + save_auth(self.api.token) + break + + def test_api_auth(self): + assert self.api.token + + def test_get_sources(self): + sources = self.api.get_sources() + assert (len(sources), 2) From 24cc4688e659b35a4a887995856fa55b4398e100 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 16:05:45 +0530 Subject: [PATCH 002/751] Adds a dockerfile to run Black on the codebase The code is formatted using Black https://black.readthedocs.io/en/stable/ --- Dockerfile.black | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Dockerfile.black diff --git a/Dockerfile.black b/Dockerfile.black new file mode 100644 index 000000000..a17927e1c --- /dev/null +++ b/Dockerfile.black @@ -0,0 +1,14 @@ +FROM fedora:28 +LABEL MAINTAINER kushaldas@gmail.com + +RUN pip3 install black + +ENV HOME /home/kdas +RUN useradd --create-home --home-dir $HOME kdas \ + && mkdir $HOME/workplace \ + && chown -R kdas:kdas $HOME + + +WORKDIR $HOME/workplace +VOLUME $HOME/workplace +USER kdas From 73d5caf5666b744884dabe83e50e6f5bbb8d9881 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:09:06 +0530 Subject: [PATCH 003/751] Adds add_star method and cleaner auth retry option --- sdclientapi/__init__.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 9558c02eb..dd91838be 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,3 +1,4 @@ +from pprint import pprint import json import requests @@ -69,6 +70,7 @@ def __init__(self, address, username, passphrase, totp) -> None: self.passphrase = passphrase # type: str self.totp = totp # type: int self.token = {"token": "", "expiration": ""} # type: T_token + self.auth_header = {"Authorization": ""} # type: Dict def authenticate(self) -> bool: user_data = { @@ -85,21 +87,25 @@ def authenticate(self) -> bool: if not "expiration" in token_data: raise AuthError("Authentication error") self.token = token_data + self.update_auth_header() return True + def update_auth_header(self): + self.auth_header = {"Authorization": "token " + self.token["token"]} + def get_sources(self) -> List[Source]: url = self.server + "api/v1/sources" - auth_header = {"Authorization": "token " + self.token["token"]} try: - res = requests.get( - "http://localhost:8081/api/v1/sources", headers=auth_header - ) + res = requests.get(url, headers=self.auth_header) data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") + if "error" in data: + raise AuthError(data["error"]) + sources = data["sources"] result = [] # type: List[Source] @@ -108,3 +114,17 @@ def get_sources(self) -> List[Source]: result.append(s) return result + + def add_star(self, source: Source) -> bool: + url = self.server.rstrip("/") + source.add_star_url + + try: + res = requests.post(url, headers=self.auth_header) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "message" in data and data["message"] == "Star added": + return True + + return False From 18895f2632621226aca11b8a291b3fe4b485eeb7 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:16:14 +0530 Subject: [PATCH 004/751] Adds a remove_star method to the API --- sdclientapi/__init__.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index dd91838be..c1ff0eb20 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -128,3 +128,18 @@ def add_star(self, source: Source) -> bool: return True return False + + def remove_star(self, source: Source) -> bool: + "Removes star from a given Source" + url = self.server.rstrip("/") + source.remove_star_url + + try: + res = requests.delete(url, headers=self.auth_header) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "message" in data and data["message"] == "Star removed": + return True + + return False From 5bbcc1ea4da08aa622357914b42b400e4842d165 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:17:26 +0530 Subject: [PATCH 005/751] Adds tests to add and then remove star --- tests/test_api.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index fb47b0518..c02a5f322 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -35,7 +35,8 @@ def setUp(self): token = load_auth() if token: self.api.token = token - continue + self.api.update_auth_header() + break time.sleep(31) save_auth(self.api.token) @@ -46,4 +47,12 @@ def test_api_auth(self): def test_get_sources(self): sources = self.api.get_sources() - assert (len(sources), 2) + assert len(sources) == 2 + + def test_star_add_remove(self): + s = self.api.get_sources()[0] + assert self.api.add_star(s) + assert self.api.remove_star(s) + for source in self.api.get_sources(): + if source.uuid == s.uuid: + assert not source.is_starred From 430d1ab09f738e92f6c5764ef618cb0368f68330 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:34:39 +0530 Subject: [PATCH 006/751] Adds get_source function and WrongSourceError --- sdclientapi/__init__.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index c1ff0eb20..fb2b0b588 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -12,6 +12,13 @@ class BaseError(Exception): pass +class WrongSourceError(BaseError): + "For missing source" + + def __init__(self, message): + self.message = message + + class AuthError(BaseError): "For Authentication errors" @@ -115,6 +122,25 @@ def get_sources(self) -> List[Source]: return result + def get_source(self, uuid: str) -> Source: + "This will return a single Source based on UUID" + url = self.server + "api/v1/sources/{}".format(uuid) + + try: + res = requests.get(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongSourceError("Missing source {}".format(uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return Source(**data) + def add_star(self, source: Source) -> bool: url = self.server.rstrip("/") + source.add_star_url From 222f1099142b7cd97d256cbc10c225908ac55638 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:35:15 +0530 Subject: [PATCH 007/751] Adds tests for single source --- tests/test_api.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_api.py b/tests/test_api.py index c02a5f322..837a64fc9 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -56,3 +56,15 @@ def test_star_add_remove(self): for source in self.api.get_sources(): if source.uuid == s.uuid: assert not source.is_starred + + def test_get_single_source(self): + s = self.api.get_sources()[0] + # Now we will try to get the same source again + s2 = self.api.get_source(s.uuid) + + assert s.journalist_designation == s2.journalist_designation + assert s.uuid == s2.uuid + + def test_failed_single_source(self): + with self.assertRaises(WrongSourceError): + self.api.get_source("not there") From 6b6b0f44d5b44bda9cb5ce3537dbde276be339dd Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:54:39 +0530 Subject: [PATCH 008/751] Adds Submission and get_submission We now have Submission class for each submission from a source and also a method to get all of them for a particular source. --- sdclientapi/__init__.py | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index fb2b0b588..c1d831d3b 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -31,6 +31,30 @@ def __init__(self, message): self.message = message +class Submission: + def __init__(self, **kargs) -> None: + self.download_url = "" # type: str + self.filename = "" # type: str + self.is_read = False # type: bool + self.size = 0 # type: int + self.source_url = "" # type: str + self.submission_url = "" # type: str + self.uuid = "" # type: str + + for key in [ + "download_url", + "filename", + "is_read", + "size", + "source_url", + "submission_url", + "uuid", + ]: + if not key in kargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kargs[key]) + + class Source: def __init__(self, **kargs): self.add_star_url = "" # type: str @@ -71,6 +95,9 @@ def __init__(self, **kargs): class API: def __init__(self, address, username, passphrase, totp) -> None: + """ + Primary API class, this is the only thing which will make network call. + """ self.server = address self.username = username # type: str @@ -169,3 +196,28 @@ def remove_star(self, source: Source) -> bool: return True return False + + def get_submissions(self, source: Source) -> List[Submission]: + url = self.server.rstrip("/") + source.submissions_url + + try: + res = requests.get(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongSourceError("Missing source {}".format(source.uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] # type: List[Submission] + values = data["submissions"] + + for val in values: + s = Submission(**val) + result.append(s) + + return result From 28dccb4944b3fb9a8ddd738b4d5695224068876d Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 17:55:40 +0530 Subject: [PATCH 009/751] Tests for get_submissions method --- tests/test_api.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_api.py b/tests/test_api.py index 837a64fc9..ec7dee43e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -68,3 +68,15 @@ def test_get_single_source(self): def test_failed_single_source(self): with self.assertRaises(WrongSourceError): self.api.get_source("not there") + + def test_get_submissions(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + assert len(subs) == 2 + + def test_get_wroung_submissions(self): + s = self.api.get_sources()[0] + s.submissions_url = "/api/v1/sources/rofl-missing/submissions" + with self.assertRaises(WrongSourceError): + self.api.get_submissions(s) From 7024146e3331a1e95dea7d68914fba99e88b98a0 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 18:10:12 +0530 Subject: [PATCH 010/751] Adds get_submission and WrongUUIDError For any missing source or submission, we now raise WrongUUIDError --- sdclientapi/__init__.py | 26 ++++++++++++++++++++++---- tests/test_api.py | 6 +++--- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index c1d831d3b..58e5b51a2 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -12,8 +12,8 @@ class BaseError(Exception): pass -class WrongSourceError(BaseError): - "For missing source" +class WrongUUIDError(BaseError): + "For missing UUID, can be for source or submission" def __init__(self, message): self.message = message @@ -157,7 +157,7 @@ def get_source(self, uuid: str) -> Source: res = requests.get(url, headers=self.auth_header) if res.status_code == 404: - raise WrongSourceError("Missing source {}".format(uuid)) + raise WrongUUIDError("Missing source {}".format(uuid)) data = res.json() except json.decoder.JSONDecodeError: @@ -204,7 +204,7 @@ def get_submissions(self, source: Source) -> List[Submission]: res = requests.get(url, headers=self.auth_header) if res.status_code == 404: - raise WrongSourceError("Missing source {}".format(source.uuid)) + raise WrongUUIDError("Missing submission {}".format(source.uuid)) data = res.json() except json.decoder.JSONDecodeError: @@ -221,3 +221,21 @@ def get_submissions(self, source: Source) -> List[Submission]: result.append(s) return result + + def get_submission(self, submission: Submission) -> Submission: + url = self.server.rstrip("/") + submission.submission_url + + try: + res = requests.get(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return Submission(**data) diff --git a/tests/test_api.py b/tests/test_api.py index ec7dee43e..f6face767 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -66,7 +66,7 @@ def test_get_single_source(self): assert s.uuid == s2.uuid def test_failed_single_source(self): - with self.assertRaises(WrongSourceError): + with self.assertRaises(WrongUUIDError): self.api.get_source("not there") def test_get_submissions(self): @@ -77,6 +77,6 @@ def test_get_submissions(self): def test_get_wroung_submissions(self): s = self.api.get_sources()[0] - s.submissions_url = "/api/v1/sources/rofl-missing/submissions" - with self.assertRaises(WrongSourceError): + s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" + with self.assertRaises(WrongUUIDError): self.api.get_submissions(s) From ec932f9a21c99ba2d58c7c0c115f7cf2ae856b7d Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 18:19:59 +0530 Subject: [PATCH 011/751] Adds get_all_submissions We have a method to get all the submissions from the server. Remember, you will have to download each submission one by one. The download method is yet to be written. --- sdclientapi/__init__.py | 21 +++++++++++++++++++++ tests/test_api.py | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 58e5b51a2..152eeff3c 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -239,3 +239,24 @@ def get_submission(self, submission: Submission) -> Submission: raise AuthError(data["error"]) return Submission(**data) + + def get_all_submissions(self) -> List[Submission]: + url = self.server.rstrip("/") + "/api/v1/submissions" + + try: + res = requests.get(url, headers=self.auth_header) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] # type: List[Submission] + values = data["submissions"] + + for val in values: + s = Submission(**val) + result.append(s) + + return result diff --git a/tests/test_api.py b/tests/test_api.py index f6face767..e2c318dae 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -80,3 +80,7 @@ def test_get_wroung_submissions(self): s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" with self.assertRaises(WrongUUIDError): self.api.get_submissions(s) + + def test_get_all_submissions(self): + subs = self.api.get_all_submissions() + assert len(subs) == 4 From 930787ab7d2e2b540041bb7e10963d72aacac7f1 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 18:21:33 +0530 Subject: [PATCH 012/751] Adds GPLv3+ License --- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 674 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From c88ae2c11e80e2b6eec9f90c0439a60f7528677f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 1 Aug 2018 18:30:34 +0530 Subject: [PATCH 013/751] Adds readme file --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..cc93a1f59 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +## Python Client for SecureDrop + +Note: This is not an official recommended project. + +### Development + +This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. +This is a Python3 project. + +We are using [mypy](http://mypy-lang.org) for type annotation checks. + +### Code formatting + +We are using [Black](https://black.readthedocs.io/en/stable/) tool for code formatting. There is a dockerfile +in the repository, which can be used to run Black on the code. + + +Note: The dockerfile still needs work. + + +We are yet to have all the available API for SecureDrop. This is work in progress. + + +### Testing + +To test the code, you will need to run the SecureDrop `make dev` command in the same system. The test suite for +this project will test against that development container. + +### License: GPLv3+ \ No newline at end of file From 40f18c360b3fa5d6fbe71863bcd0f1d183f2f288 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:10:53 +0530 Subject: [PATCH 014/751] totp value is actually str in our API --- sdclientapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 152eeff3c..4bd5175f3 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -102,7 +102,7 @@ def __init__(self, address, username, passphrase, totp) -> None: self.server = address self.username = username # type: str self.passphrase = passphrase # type: str - self.totp = totp # type: int + self.totp = totp # type: str self.token = {"token": "", "expiration": ""} # type: T_token self.auth_header = {"Authorization": ""} # type: Dict From 01bea0729c63ccd7b66e8428d488a48c00610a0e Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:11:34 +0530 Subject: [PATCH 015/751] Adds vcrpy as dependency for tests --- Pipfile | 1 + Pipfile.lock | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index 3d916b7bb..261e2d5de 100644 --- a/Pipfile +++ b/Pipfile @@ -13,3 +13,4 @@ requests = "*" mypy-extensions = "*" mypy = "*" pyotp = "*" +vcrpy = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 4f44b844f..c13091eab 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "1d86a9013741ee61197c4b58e35791e10f1bd59d3b1dbac030080178989c5bd1" + "sha256": "dbeab12f128bb469b817dd6c043a0361106d9960f24eaf3b0f49e0e0f81ae072" }, "pipfile-spec": 6, "requires": { @@ -37,6 +37,24 @@ ], "version": "==2.7" }, + "multidict": { + "hashes": [ + "sha256:1a1d76374a1e7fe93acef96b354a03c1d7f83e7512e225a527d283da0d7ba5e0", + "sha256:1d6e191965505652f194bc4c40270a842922685918a4f45e6936a6b15cc5816d", + "sha256:295961a6a88f1199e19968e15d9b42f3a191c89ec13034dbc212bf9c394c3c82", + "sha256:2be5af084de6c3b8e20d6421cb0346378a9c867dcf7c86030d6b0b550f9888e4", + "sha256:2eb99617c7a0e9f2b90b64bc1fb742611718618572747d6f3d6532b7b78755ab", + "sha256:4ba654c6b5ad1ae4a4d792abeb695b29ce981bb0f157a41d0fd227b385f2bef0", + "sha256:5ba766433c30d703f6b2c17eb0b6826c6f898e5f58d89373e235f07764952314", + "sha256:a59d58ee85b11f337b54933e8d758b2356fcdcc493248e004c9c5e5d11eedbe4", + "sha256:a6e35d28900cf87bcc11e6ca9e474db0099b78f0be0a41d95bef02d49101b5b2", + "sha256:b4df7ca9c01018a51e43937eaa41f2f5dce17a6382fda0086403bcb1f5c2cf8e", + "sha256:bbd5a6bffd3ba8bfe75b16b5e28af15265538e8be011b0b9fddc7d86a453fd4a", + "sha256:d870f399fcd58a1889e93008762a3b9a27cf7ea512818fc6e689f59495648355", + "sha256:e9404e2e19e901121c3c5c6cffd5a8ae0d1d67919c970e3b3262231175713068" + ], + "version": "==4.3.1" + }, "mypy": { "hashes": [ "sha256:673ea75fb750289b7d1da1331c125dc62fc1c3a8db9129bb372ae7b7d5bf300a", @@ -60,6 +78,22 @@ "index": "pypi", "version": "==2.2.6" }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "version": "==3.13" + }, "requests": { "hashes": [ "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", @@ -68,6 +102,13 @@ "index": "pypi", "version": "==2.19.1" }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, "typed-ast": { "hashes": [ "sha256:0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", @@ -102,6 +143,35 @@ "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" ], "version": "==1.23" + }, + "vcrpy": { + "hashes": [ + "sha256:7031f9c78a70b9586d2db4a2ec135c4e04194cabff58695ef0cc95e7cd66bc01", + "sha256:dadb4b2798a44bdce5301ec01380351ab798a468fc7ee5a34271bdd8527d8f99" + ], + "index": "pypi", + "version": "==1.13.0" + }, + "wrapt": { + "hashes": [ + "sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6" + ], + "version": "==1.10.11" + }, + "yarl": { + "hashes": [ + "sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9", + "sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee", + "sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308", + "sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357", + "sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78", + "sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8", + "sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1", + "sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4", + "sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7" + ], + "markers": "python_version >= '3.4'", + "version": "==1.2.6" } }, "develop": {} From 4699bfc3c42c3c0878f30a53d293afd8652e2dba Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:13:21 +0530 Subject: [PATCH 016/751] Adds vcr cassettes for API call Now we are using vcrpy to mock out the API calls. This commit also includes the data files. --- data/test-failed-single-source.yml | 24 ++++ data/test-get-all-submissions.yml | 42 +++++++ data/test-get-single-source.yml | 115 ++++++++++++++++++ data/test-get-sources.yml | 72 +++++++++++ data/test-setup.yml | 25 ++++ data/test-star-add-remove.yml | 184 +++++++++++++++++++++++++++++ tests/test_api.py | 12 +- 7 files changed, 473 insertions(+), 1 deletion(-) create mode 100644 data/test-failed-single-source.yml create mode 100644 data/test-get-all-submissions.yml create mode 100644 data/test-get-single-source.yml create mode 100644 data/test-get-sources.yml create mode 100644 data/test-setup.yml create mode 100644 data/test-star-add-remove.yml diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml new file mode 100644 index 000000000..ad80ed448 --- /dev/null +++ b/data/test-failed-single-source.yml @@ -0,0 +1,24 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/not%20there + response: + body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested\ + \ URL was not found on the server. If you entered the URL manually please\ + \ check your spelling and try again.\"\n}\n"} + headers: + Content-Length: ['166'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + HttpOnly; Path=/] + status: {code: 404, message: NOT FOUND} +version: 1 diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml new file mode 100644 index 000000000..e6ba2a885 --- /dev/null +++ b/data/test-get-all-submissions.yml @@ -0,0 +1,42 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef/download\"\ + , \n \"filename\": \"1-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef\"\ + , \n \"uuid\": \"8f437890-dbab-442f-b608-50be3872c9ef\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782/download\"\ + , \n \"filename\": \"2-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782\"\ + , \n \"uuid\": \"20046355-6e1a-4b98-86dc-30d216569782\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/e2813920-0973-440b-ba03-bc4417317ff0/download\"\ + , \n \"filename\": \"1-contagious_evolution-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"submission_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/e2813920-0973-440b-ba03-bc4417317ff0\"\ + , \n \"uuid\": \"e2813920-0973-440b-ba03-bc4417317ff0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/87e59b3c-c913-4b88-85e2-3efeacbf02e0/download\"\ + , \n \"filename\": \"2-contagious_evolution-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"submission_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/87e59b3c-c913-4b88-85e2-3efeacbf02e0\"\ + , \n \"uuid\": \"87e59b3c-c913-4b88-85e2-3efeacbf02e0\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['2065'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml new file mode 100644 index 000000000..3ce16641c --- /dev/null +++ b/data/test-get-single-source.yml @@ -0,0 +1,115 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:39:59.723890Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:39:59.753240Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04 + response: + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"indigestible shorebird\", \n \"\ + key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:39:59.802049Z\", \n \"number_of_documents\": 0, \n \"\ + number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\", \n\ + \ \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n}\n"} + headers: + Content-Length: ['2531'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml new file mode 100644 index 000000000..281a51411 --- /dev/null +++ b/data/test-get-sources.yml @@ -0,0 +1,72 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:39:59.902794Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:39:59.929120Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-setup.yml b/data/test-setup.yml new file mode 100644 index 000000000..9221f3cd1 --- /dev/null +++ b/data/test-setup.yml @@ -0,0 +1,25 @@ +interactions: +- request: + body: '{"one_time_code": "983893", "username": "journalist", "passphrase": "correct + horse battery staple profanity oil chewy"}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['119'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: http://localhost:8081/api/v1/token + response: + body: {string: "{\n \"expiration\": \"2018-08-02T02:37:04.264450Z\", \n \"token\"\ + : \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg\"\ + \n}\n"} + headers: + Content-Length: ['188'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:37:04 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozNzowMyBHTVQifX0.DkOPUA.aQBNUxR2p39fw2L1EMojJLOjxbs; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml new file mode 100644 index 000000000..3e407ac3f --- /dev/null +++ b/data/test-star-add-remove.yml @@ -0,0 +1,184 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.282445Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.310572Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star + response: + body: {string: "{\n \"message\": \"Star added\"\n}\n"} + headers: + Content-Length: ['30'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 201, message: CREATED} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: DELETE + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star + response: + body: {string: "{\n \"message\": \"Star removed\"\n}\n"} + headers: + Content-Length: ['32'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.441648Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.469265Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/test_api.py b/tests/test_api.py index e2c318dae..86f51e907 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -5,6 +5,7 @@ import unittest from sdclientapi import * +import vcr import pyotp @@ -22,6 +23,8 @@ def save_auth(token): class TestAPI(unittest.TestCase): + + @vcr.use_cassette('data/test-setup.yml') def setUp(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" @@ -45,10 +48,12 @@ def setUp(self): def test_api_auth(self): assert self.api.token + @vcr.use_cassette('data/test-get-sources.yml') def test_get_sources(self): sources = self.api.get_sources() assert len(sources) == 2 + @vcr.use_cassette('data/test-star-add-remove.yml') def test_star_add_remove(self): s = self.api.get_sources()[0] assert self.api.add_star(s) @@ -57,6 +62,7 @@ def test_star_add_remove(self): if source.uuid == s.uuid: assert not source.is_starred + @vcr.use_cassette('data/test-get-single-source.yml') def test_get_single_source(self): s = self.api.get_sources()[0] # Now we will try to get the same source again @@ -65,22 +71,26 @@ def test_get_single_source(self): assert s.journalist_designation == s2.journalist_designation assert s.uuid == s2.uuid + @vcr.use_cassette('data/test-failed-single-source.yml') def test_failed_single_source(self): with self.assertRaises(WrongUUIDError): self.api.get_source("not there") + @vcr.use_cassette('data/test-get-submissions') def test_get_submissions(self): s = self.api.get_sources()[0] subs = self.api.get_submissions(s) assert len(subs) == 2 - def test_get_wroung_submissions(self): + @vcr.use_cassette('data/test-get-wrong-submissions') + def test_get_wrong_submissions(self): s = self.api.get_sources()[0] s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" with self.assertRaises(WrongUUIDError): self.api.get_submissions(s) + @vcr.use_cassette('data/test-get-all-submissions.yml') def test_get_all_submissions(self): subs = self.api.get_all_submissions() assert len(subs) == 4 From 851595c8ce302bf988ae5b1e283672afb07b2349 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:21:38 +0530 Subject: [PATCH 017/751] Moves vcrpy as dev dependency --- Pipfile | 3 +- Pipfile.lock | 96 ++++++++++++++++++++++++++++------------------------ 2 files changed, 54 insertions(+), 45 deletions(-) diff --git a/Pipfile b/Pipfile index 261e2d5de..14bd98e3d 100644 --- a/Pipfile +++ b/Pipfile @@ -7,10 +7,11 @@ verify_ssl = true python_version = "3.5" [dev-packages] +vcrpy = "*" [packages] requests = "*" mypy-extensions = "*" mypy = "*" pyotp = "*" -vcrpy = "*" + diff --git a/Pipfile.lock b/Pipfile.lock index c13091eab..dad59c127 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "dbeab12f128bb469b817dd6c043a0361106d9960f24eaf3b0f49e0e0f81ae072" + "sha256": "9cb798b4ddc239b8fff7d059acd8f39736da55cba5bc9ef19d241ead56f6d226" }, "pipfile-spec": 6, "requires": { @@ -37,24 +37,6 @@ ], "version": "==2.7" }, - "multidict": { - "hashes": [ - "sha256:1a1d76374a1e7fe93acef96b354a03c1d7f83e7512e225a527d283da0d7ba5e0", - "sha256:1d6e191965505652f194bc4c40270a842922685918a4f45e6936a6b15cc5816d", - "sha256:295961a6a88f1199e19968e15d9b42f3a191c89ec13034dbc212bf9c394c3c82", - "sha256:2be5af084de6c3b8e20d6421cb0346378a9c867dcf7c86030d6b0b550f9888e4", - "sha256:2eb99617c7a0e9f2b90b64bc1fb742611718618572747d6f3d6532b7b78755ab", - "sha256:4ba654c6b5ad1ae4a4d792abeb695b29ce981bb0f157a41d0fd227b385f2bef0", - "sha256:5ba766433c30d703f6b2c17eb0b6826c6f898e5f58d89373e235f07764952314", - "sha256:a59d58ee85b11f337b54933e8d758b2356fcdcc493248e004c9c5e5d11eedbe4", - "sha256:a6e35d28900cf87bcc11e6ca9e474db0099b78f0be0a41d95bef02d49101b5b2", - "sha256:b4df7ca9c01018a51e43937eaa41f2f5dce17a6382fda0086403bcb1f5c2cf8e", - "sha256:bbd5a6bffd3ba8bfe75b16b5e28af15265538e8be011b0b9fddc7d86a453fd4a", - "sha256:d870f399fcd58a1889e93008762a3b9a27cf7ea512818fc6e689f59495648355", - "sha256:e9404e2e19e901121c3c5c6cffd5a8ae0d1d67919c970e3b3262231175713068" - ], - "version": "==4.3.1" - }, "mypy": { "hashes": [ "sha256:673ea75fb750289b7d1da1331c125dc62fc1c3a8db9129bb372ae7b7d5bf300a", @@ -78,22 +60,6 @@ "index": "pypi", "version": "==2.2.6" }, - "pyyaml": { - "hashes": [ - "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", - "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", - "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", - "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", - "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", - "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", - "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", - "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", - "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", - "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", - "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" - ], - "version": "==3.13" - }, "requests": { "hashes": [ "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", @@ -102,13 +68,6 @@ "index": "pypi", "version": "==2.19.1" }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" - }, "typed-ast": { "hashes": [ "sha256:0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", @@ -143,6 +102,56 @@ "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" ], "version": "==1.23" + } + }, + "develop": { + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "version": "==2.7" + }, + "multidict": { + "hashes": [ + "sha256:1a1d76374a1e7fe93acef96b354a03c1d7f83e7512e225a527d283da0d7ba5e0", + "sha256:1d6e191965505652f194bc4c40270a842922685918a4f45e6936a6b15cc5816d", + "sha256:295961a6a88f1199e19968e15d9b42f3a191c89ec13034dbc212bf9c394c3c82", + "sha256:2be5af084de6c3b8e20d6421cb0346378a9c867dcf7c86030d6b0b550f9888e4", + "sha256:2eb99617c7a0e9f2b90b64bc1fb742611718618572747d6f3d6532b7b78755ab", + "sha256:4ba654c6b5ad1ae4a4d792abeb695b29ce981bb0f157a41d0fd227b385f2bef0", + "sha256:5ba766433c30d703f6b2c17eb0b6826c6f898e5f58d89373e235f07764952314", + "sha256:a59d58ee85b11f337b54933e8d758b2356fcdcc493248e004c9c5e5d11eedbe4", + "sha256:a6e35d28900cf87bcc11e6ca9e474db0099b78f0be0a41d95bef02d49101b5b2", + "sha256:b4df7ca9c01018a51e43937eaa41f2f5dce17a6382fda0086403bcb1f5c2cf8e", + "sha256:bbd5a6bffd3ba8bfe75b16b5e28af15265538e8be011b0b9fddc7d86a453fd4a", + "sha256:d870f399fcd58a1889e93008762a3b9a27cf7ea512818fc6e689f59495648355", + "sha256:e9404e2e19e901121c3c5c6cffd5a8ae0d1d67919c970e3b3262231175713068" + ], + "version": "==4.3.1" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "version": "==3.13" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" }, "vcrpy": { "hashes": [ @@ -173,6 +182,5 @@ "markers": "python_version >= '3.4'", "version": "==1.2.6" } - }, - "develop": {} + } } From fb0134cdb061415dc34a2e4e47cc2622a4276819 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:24:09 +0530 Subject: [PATCH 018/751] Adds flag_source method and tests This also updates the code formatting based on black. We added two missing vcrpy cassettes. --- data/test-flag-source.yml | 136 ++++++++++++++++++++++++++++ data/test-get-submissions.yml | 102 +++++++++++++++++++++ data/test-get-wrong-submissions.yml | 94 +++++++++++++++++++ sdclientapi/__init__.py | 14 +++ tests/test_api.py | 25 +++-- 5 files changed, 362 insertions(+), 9 deletions(-) create mode 100644 data/test-flag-source.yml create mode 100644 data/test-get-submissions.yml create mode 100644 data/test-get-wrong-submissions.yml diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml new file mode 100644 index 000000000..211adca66 --- /dev/null +++ b/data/test-flag-source.yml @@ -0,0 +1,136 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:50:32.490896Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:50:32.529942Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:50:32 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo1MDozMiBHTVQifX0.DkOSeA.Y-S4FyoRU7jDzQc03FxuAXXECjk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: POST + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/flag + response: + body: {string: "{\n \"message\": \"Source flagged for reply\"\n}\n"} + headers: + Content-Length: ['44'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:50:32 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo1MDozMiBHTVQifX0.DkOSeA.Y-S4FyoRU7jDzQc03FxuAXXECjk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04 + response: + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"indigestible shorebird\", \n \"\ + key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:50:32.656296Z\", \n \"number_of_documents\": 0, \n \"\ + number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\", \n\ + \ \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n}\n"} + headers: + Content-Length: ['2530'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:50:32 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo1MDozMiBHTVQifX0.DkOSeA.Y-S4FyoRU7jDzQc03FxuAXXECjk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml new file mode 100644 index 000000000..b48c66c0c --- /dev/null +++ b/data/test-get-submissions.yml @@ -0,0 +1,102 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.008823Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.033164Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef/download\"\ + , \n \"filename\": \"1-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef\"\ + , \n \"uuid\": \"8f437890-dbab-442f-b608-50be3872c9ef\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782/download\"\ + , \n \"filename\": \"2-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782\"\ + , \n \"uuid\": \"20046355-6e1a-4b98-86dc-30d216569782\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1047'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml new file mode 100644 index 000000000..7c0ed3049 --- /dev/null +++ b/data/test-get-wrong-submissions.yml @@ -0,0 +1,94 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.134707Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T18:40:00.159012Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5237'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/rofl-missing/submissions/2334 + response: + body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested\ + \ URL was not found on the server. If you entered the URL manually please\ + \ check your spelling and try again.\"\n}\n"} + headers: + Content-Length: ['166'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + HttpOnly; Path=/] + status: {code: 404, message: NOT FOUND} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 4bd5175f3..0a5c8bdfb 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -260,3 +260,17 @@ def get_all_submissions(self) -> List[Submission]: result.append(s) return result + + def flag_source(self, source: Source) -> bool: + url = self.server.rstrip("/") + "/api/v1/sources/{}/flag".format(source.uuid) + + try: + res = requests.post(url, headers=self.auth_header) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return True diff --git a/tests/test_api.py b/tests/test_api.py index 86f51e907..bb469a06b 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -23,8 +23,7 @@ def save_auth(token): class TestAPI(unittest.TestCase): - - @vcr.use_cassette('data/test-setup.yml') + @vcr.use_cassette("data/test-setup.yml") def setUp(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" @@ -48,12 +47,12 @@ def setUp(self): def test_api_auth(self): assert self.api.token - @vcr.use_cassette('data/test-get-sources.yml') + @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): sources = self.api.get_sources() assert len(sources) == 2 - @vcr.use_cassette('data/test-star-add-remove.yml') + @vcr.use_cassette("data/test-star-add-remove.yml") def test_star_add_remove(self): s = self.api.get_sources()[0] assert self.api.add_star(s) @@ -62,7 +61,7 @@ def test_star_add_remove(self): if source.uuid == s.uuid: assert not source.is_starred - @vcr.use_cassette('data/test-get-single-source.yml') + @vcr.use_cassette("data/test-get-single-source.yml") def test_get_single_source(self): s = self.api.get_sources()[0] # Now we will try to get the same source again @@ -71,26 +70,34 @@ def test_get_single_source(self): assert s.journalist_designation == s2.journalist_designation assert s.uuid == s2.uuid - @vcr.use_cassette('data/test-failed-single-source.yml') + @vcr.use_cassette("data/test-failed-single-source.yml") def test_failed_single_source(self): with self.assertRaises(WrongUUIDError): self.api.get_source("not there") - @vcr.use_cassette('data/test-get-submissions') + @vcr.use_cassette("data/test-get-submissions.yml") def test_get_submissions(self): s = self.api.get_sources()[0] subs = self.api.get_submissions(s) assert len(subs) == 2 - @vcr.use_cassette('data/test-get-wrong-submissions') + @vcr.use_cassette("data/test-get-wrong-submissions.yml") def test_get_wrong_submissions(self): s = self.api.get_sources()[0] s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" with self.assertRaises(WrongUUIDError): self.api.get_submissions(s) - @vcr.use_cassette('data/test-get-all-submissions.yml') + @vcr.use_cassette("data/test-get-all-submissions.yml") def test_get_all_submissions(self): subs = self.api.get_all_submissions() assert len(subs) == 4 + + @vcr.use_cassette("data/test-flag-source.yml") + def test_flag_source(self): + s = self.api.get_sources()[0] + assert self.api.flag_source(s) + # Now we will try to get the same source again + s2 = self.api.get_source(s.uuid) + assert s2.is_flagged From bab1f5c07e37c5369e8a1896290954086117416c Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:32:35 +0530 Subject: [PATCH 019/751] Adds delete_source API call and corresponding test --- data/test-delete-source.yml | 138 ++++++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 23 ++++++ tests/test_api.py | 9 +++ 3 files changed, 170 insertions(+) create mode 100644 data/test-delete-source.yml diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml new file mode 100644 index 000000000..a9d50d1d8 --- /dev/null +++ b/data/test-delete-source.yml @@ -0,0 +1,138 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ + \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ + nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ + nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ + nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ + nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ + nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ + nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ + nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ + nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ + n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ + nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ + naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ + n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T19:01:18.017899Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ + , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ + , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T19:01:18.051211Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5236'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:01:18 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowMToxOCBHTVQifX0.DkOU_g.E1JTGc8DP2NYYz7Zm6gf2Z2gJIw; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: DELETE + uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04 + response: + body: {string: "{\n \"message\": \"Source and submissions deleted\"\n}\n"} + headers: + Content-Length: ['50'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:01:18 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowMToxOCBHTVQifX0.DkOU_g.E1JTGc8DP2NYYz7Zm6gf2Z2gJIw; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ + \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ + nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ + n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ + nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ + nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ + nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ + nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ + nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ + nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ + npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ + n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ + nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ + nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-01T19:01:18.240078Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ + , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ + , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['2628'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:01:18 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowMToxOCBHTVQifX0.DkOU_g.E1JTGc8DP2NYYz7Zm6gf2Z2gJIw; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 0a5c8bdfb..ba66ff607 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -168,6 +168,29 @@ def get_source(self, uuid: str) -> Source: return Source(**data) + def delete_source(self, uuid: str) -> bool: + "This will delete the source and collection" + url = self.server + "api/v1/sources/{}".format(uuid) + + try: + res = requests.delete(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongUUIDError("Missing source {}".format(uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Source and submissions deleted": + return True + + # We should never reach here + return False + def add_star(self, source: Source) -> bool: url = self.server.rstrip("/") + source.add_star_url diff --git a/tests/test_api.py b/tests/test_api.py index bb469a06b..1931a28e4 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -101,3 +101,12 @@ def test_flag_source(self): # Now we will try to get the same source again s2 = self.api.get_source(s.uuid) assert s2.is_flagged + + @vcr.use_cassette("data/test-delete-source.yml") + def test_delete_source(self): + s = self.api.get_sources()[0] + assert self.api.delete_source(s.uuid) + + # Now there should be one source left + sources = self.api.get_sources() + assert len(sources) == 1 From 78c39822ffb55f3bc6074eb8a38663f37d6b9b71 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:38:38 +0530 Subject: [PATCH 020/751] Adds delete_submission API call and test --- data/test-delete-submission.yml | 98 +++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 21 +++++++ tests/test_api.py | 12 ++++ 3 files changed, 131 insertions(+) create mode 100644 data/test-delete-submission.yml diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml new file mode 100644 index 000000000..7bd1558f1 --- /dev/null +++ b/data/test-delete-submission.yml @@ -0,0 +1,98 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/332be45e-794d-4c68-aa38-fe6e930b4c20/download\"\ + , \n \"filename\": \"1-disadvantageous_wildcatter-msg.gpg\", \n \ + \ \"is_read\": false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d\"\ + , \n \"submission_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/332be45e-794d-4c68-aa38-fe6e930b4c20\"\ + , \n \"uuid\": \"332be45e-794d-4c68-aa38-fe6e930b4c20\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8/download\"\ + , \n \"filename\": \"2-disadvantageous_wildcatter-msg.gpg\", \n \ + \ \"is_read\": false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d\"\ + , \n \"submission_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8\"\ + , \n \"uuid\": \"9ad01000-9fd8-43da-888f-320ca02ccae8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df/download\"\ + , \n \"filename\": \"1-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ + , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\ + , \n \"uuid\": \"f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c/download\"\ + , \n \"filename\": \"2-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ + , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c\"\ + , \n \"uuid\": \"bcda9366-22a9-43c7-9485-f31313e3047c\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['2077'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:07:49 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowNzo0OSBHTVQifX0.DkOWhQ.ADHqqekI351tuHZqPjLaoeqS8Hc; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.19.1] + method: DELETE + uri: http://localhost:8081/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/332be45e-794d-4c68-aa38-fe6e930b4c20 + response: + body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} + headers: + Content-Length: ['38'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:07:49 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowNzo0OSBHTVQifX0.DkOWhQ.ADHqqekI351tuHZqPjLaoeqS8Hc; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8/download\"\ + , \n \"filename\": \"2-disadvantageous_wildcatter-msg.gpg\", \n \ + \ \"is_read\": false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d\"\ + , \n \"submission_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8\"\ + , \n \"uuid\": \"9ad01000-9fd8-43da-888f-320ca02ccae8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df/download\"\ + , \n \"filename\": \"1-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ + , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\ + , \n \"uuid\": \"f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c/download\"\ + , \n \"filename\": \"2-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ + , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c\"\ + , \n \"uuid\": \"bcda9366-22a9-43c7-9485-f31313e3047c\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1562'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:07:49 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowNzo0OSBHTVQifX0.DkOWhQ.ADHqqekI351tuHZqPjLaoeqS8Hc; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index ba66ff607..07eb1be52 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -284,6 +284,27 @@ def get_all_submissions(self) -> List[Submission]: return result + def delete_submission(self, submission: Submission) -> bool: + url = self.server.rstrip("/") + submission.submission_url + + try: + res = requests.delete(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Submission deleted": + return True + # We should never reach here + return False + def flag_source(self, source: Source) -> bool: url = self.server.rstrip("/") + "/api/v1/sources/{}/flag".format(source.uuid) diff --git a/tests/test_api.py b/tests/test_api.py index 1931a28e4..c49d7487b 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -110,3 +110,15 @@ def test_delete_source(self): # Now there should be one source left sources = self.api.get_sources() assert len(sources) == 1 + + @vcr.use_cassette("data/test-delete-submission.yml") + def test_delete_submission(self): + subs = self.api.get_all_submissions() + assert self.api.delete_submission(subs[0]) + new_subs = self.api.get_all_submissions() + # We now should have 3 submissions + assert len(new_subs) == 3 + + # Let us make sure that sub[0] is not there + for s in new_subs: + assert s.uuid != subs[0].uuid From bd09ae710feb3daa63ac86064380c5c978994407 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:48:38 +0530 Subject: [PATCH 021/751] Adds get_current_user API call and test --- data/test-get-current-user.yml | 23 +++++++++++++++++++++++ sdclientapi/__init__.py | 15 +++++++++++++++ tests/test_api.py | 6 ++++++ 3 files changed, 44 insertions(+) create mode 100644 data/test-get-current-user.yml diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml new file mode 100644 index 000000000..f406f1514 --- /dev/null +++ b/data/test-get-current-user.yml @@ -0,0 +1,23 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Connection: [keep-alive] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/user + response: + body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-08-01T19:10:38.199429Z\"\ + , \n \"username\": \"journalist\"\n}\n"} + headers: + Content-Length: ['100'] + Content-Type: [application/json] + Date: ['Wed, 01 Aug 2018 19:16:54 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMToxNjo1NCBHTVQifX0.DkOYpg.D24CcctvvV7_Suq6cLxwz53gn_s; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 07eb1be52..7cd30e6ee 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -6,6 +6,7 @@ from mypy_extensions import TypedDict T_token = TypedDict("T_token", {"expiration": str, "token": str}) +T_user = TypedDict("T_user", {"is_admin": bool, "last_login": str, "username": str}) class BaseError(Exception): @@ -318,3 +319,17 @@ def flag_source(self, source: Source) -> bool: raise AuthError(data["error"]) return True + + def get_current_user(self) -> T_user: + url = self.server.rstrip("/") + "/api/v1/user" + + try: + res = requests.get(url, headers=self.auth_header) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return data diff --git a/tests/test_api.py b/tests/test_api.py index c49d7487b..6ee60bcc2 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -122,3 +122,9 @@ def test_delete_submission(self): # Let us make sure that sub[0] is not there for s in new_subs: assert s.uuid != subs[0].uuid + + @vcr.use_cassette("data/test-get-current-user.yml") + def test_get_current_user(self): + user = self.api.get_current_user() + assert user["is_admin"] + assert user["username"] == "journalist" From 65d9001ac6b41ba0c7061afc0e56bf91321cdaac Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 00:53:50 +0530 Subject: [PATCH 022/751] Updates README --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cc93a1f59..9266e89cf 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,20 @@ We are using [mypy](http://mypy-lang.org) for type annotation checks. We are using [Black](https://black.readthedocs.io/en/stable/) tool for code formatting. There is a dockerfile in the repository, which can be used to run Black on the code. +``` +docker build -t kdas/black -f Dockerfile.black +docker run --rm -v $PWD:/home/kdas/workplace kdas/black black . +``` Note: The dockerfile still needs work. -We are yet to have all the available API for SecureDrop. This is work in progress. +This is work in progress. The following API(s) are still missing. + +- post reply to source +- download a submission + +We will also add a bunch of more tests. ### Testing From 0a2eb0c43390af293ea6838a6127ff6c03d042c0 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 15:17:39 +0530 Subject: [PATCH 023/751] Adds ReplyError and reply_source and corresponding tests We also have the requried test data. I have also filed the following issue against SecureDrop API for returning similar JSON based data in case of Error 400. https://github.com/freedomofpress/securedrop/issues/3684 --- data/test-error-unencrypted-reply.yml | 95 ++++++++++++++++++++++++++ data/test-reply-source.yml | 96 +++++++++++++++++++++++++++ sdclientapi/__init__.py | 41 +++++++++++- tests/encrypted_msg.asc | 18 +++++ tests/test_api.py | 19 ++++++ 5 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 data/test-error-unencrypted-reply.yml create mode 100644 data/test-reply-source.yml create mode 100644 tests/encrypted_msg.asc diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml new file mode 100644 index 000000000..42026ae57 --- /dev/null +++ b/data/test-error-unencrypted-reply.yml @@ -0,0 +1,95 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIyNTIwMywiaWF0IjoxNTMzMTk2NDAzfQ.eyJpZCI6MX0.yu2572oWvijeB3rWIgmB7nXBNBRYfjiGGpOuK_VumxE] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"gauche ineffectiveness\"\ + , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ + n\\nmQINBFtiszABEACgri/PNauKN8H+AuiaW6M7wJv+T0HjwT/7p9PcXAYIXQdZ1R4m\\ncWOIdLHSkTwmEPv2M/3HHsTxd76j6ebuwiFv1N0zxsO71nMbtfO9Czh21CxMKXsO\\\ + nrE/cD1k3Sg/lMYuZ2pD3JaEKuOz+GcOnF1FbnB2i6Zl9uZ6Y/fhGVF1xrAb1g/I4\\nEY9csUiemmO6xG7p10WdkwjIfyv68waNyidaTF5LGXKqfGU6RyZOh7uO8ctELi44\\\ + nxCz/8uW/QpWVG7rWUDDkgOzJd2AhoyOkHT5XlL+/uzI/0Z/2gLUyk52U3mgs0yxi\\nlm+ymhGQEUK127aSDKE8E0Yu4kGvh9jwfUeYDAndf0pg/y+e2zfFmp4lx9TH8rSh\\\ + niDgAoOpEhw3PesA7j26i22VIeAJLm+tYFAF1IMS9F16up4SNY/gYNinSKuuiB2zZ\\n7HuoVKMDeL1hZn5iI5N/Pgmh8x4LFwklHuSMYo8xrl8zEPG+bQLMGobFXSQ6VYfz\\\ + nYkjEqmmbIXPLEgvu13iBr3WmrEaJ/CrZSTv+OcTLc4pelUp4ebHdMWNDcEKYrqlB\\n2p2GLXkWuUd7OlRtJvnW98o4W1flNWzjto2t1k5FzQfuwtP5dwlg4FmLpqXlmZ5G\\\ + nuLPxOa7RZzZj609wwAAyIAa7jCJFhnsHhm/Z7KnpHSbmlmdtshB7EhufKQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8MkFXU1k2Q1FVRDVURkVYVTQ1R1YyRTZFTUtH\\\ + nRVdOWDM1NVc3RjJBN09XM1BIVjVNQlFCTEJBSVhGVVA0SEZDSU5RNjRSU1c2TTNE\\nMklKVTYzUUlYQUFEUjdORlA3VkY3QVROVUc3WT0+iQI/BBMBCgApBQJbYrMwAhsv\\\ + nBQkB4XKQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQA2EhVtjERYNx1w//\\ncNZpuGfY5xCD4Pb70MNtAyaFfQ2qOKETGwwtWzbm/HdIrMmmUkTpy5Fq64RDXlaU\\\ + nTSRWAyHS/DejfSz6vFHWe2vysgDIS8V7tgPdKgfULnIGv28tFEiSVW3wgzW8rElo\\nGojTk18qv3rVAzHCoh89H1kNtBkT1il/WL2XYHhGNUAz3sMiEFWQ4FLFJAlOniaz\\\ + nVb1GGmVo2RLJuRVxBgp9Ukgvw8ktwZNmljAcWDkvt4FFCIJoGjFLSLMcdAHJSJ7k\\nV71jLtVcu/2U9qvx7q33a+HnrxrBzorSuCGxAPXWgLLMlPcvvogi3/+yTt5yFh41\\\ + nCnPIDGcNgKpY15o1xjQggyugt1B+mUorRQ8eIepgw2gr5DpGD0/zU0Ns+gtnp+g5\\nnzNHlXQ5Kw2zArxpYA2B0tljj9XPDC7xXjZjxMPJyWAolUj/I66hAG0bTRpyi5fj\\\ + nXrxeHpX4A6bL8fS6rb2bldLEQJ/ZV98oaay7eBiV51Dwjfya+VVN/5EfSbI/w/7p\\n/k40D68frAmyM/EwvuS5BGu+1RgIF0ri9rhVQzgTjPI3VHkVIfXnqZvqxJO9ZMBT\\\ + nKer+/4uGHGWtDgHvg1Mh3nZRTT9e/1Q5Ku/gHChHcJ67slpiNcxtPOyoxJuz0NxH\\n7lTOb+QbFbbP6Sg95ROtgKPNd3vP3CNH5KTPbv1BAYM=\\\ + n=1soS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ + \n }, \n \"last_updated\": \"2018-08-02T07:53:23.148910Z\", \n \ + \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ + \ \"remove_star_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/submissions\"\ + , \n \"url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685\"\ + , \n \"uuid\": \"3e7b88d7-7423-443f-a475-df3a774a5685\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"micro plundering\"\ + , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ + n\\nmQINBFtiszcBEADOVIhklOxLW3wTg3lovxBzQ3ZeS86M194AfRR37znjs56n7l54\\nj84d21DF5NkPKJHPovx9pJY4GRnVP15Wmld9j90hjcwSJ/DTg1Mdv5NwEzNSR4jB\\\ + nlTTwtOcHwXvG3lzFKXH01o7ItOaFaZYTXFWEEVU8BD6IQs7P10znlsOIi2bkIflw\\neEEM9bt6hMRVm6muTA3OlOZMLfX3LdNm4sGeG9OggvWVeCYFl9dKVMiMSXYCbyvz\\\ + nMPxsW7HEgqg53hY/vBvgzECTl+1Nz/RyF9x9j3dFVFx4VvYP2a104tKaYSu72zmx\\n3SWHvFLUnto/s0Ua8WHbdzjhG3RPvj/OP065ot3RzLkkVZmM6ToR1hOBpijf8UyE\\\ + ntahjc/hQlLdiolKEvwwGLskXc3F0dKr59GDAoDucl85D08yf2GRwu/3QG3oQ0LBt\\n1aEhk/dMPLWngqw8QE5rDzgKLwHU4qPqmHWwfLUdoAn6Mo1fzJo6eskl3lEtPhli\\\ + nMf0ceOmk4hAohUmynK6ZnDK50lZ3V8+tQ5ytxpXzANyg8gATAFK3FHN9w1vAD68i\\nVAts9qUZOEzij6BkRPp82aRWX+XHdY6b2R7rac3pQKupACfgFMzsE/JguJEHev5e\\\ + nAKD8ncQhE6gsKvctFKu8zdqzecNq1P8+ZYykWB1/hybA+Lg4N8JxyipOIQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UkVVM0NDN1BZSFRCN0NDMzNYRlFMR1lUU1NI\\\ + nVERFRk5IWkZNVkk2NkNQN0UyWTQ2WkdCUkkyQTdUNkc3NzZHRlRZTlJVTFhSVTdR\\nTDdSUUkzVkFCUEhEV1o1QlozWlZGQ1NHTFJBUT0+iQI/BBMBCgApBQJbYrM3Ahsv\\\ + nBQkB4XKJBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQq9aaEfJ2lUtWQQ/9\\nHkmCn+EKjXjdUOxerhAxPl5JLU7Il8Y9Qw14XPd7qO4CqPOpZuvtHtnhQWMpwFsm\\\ + ncxTQzTvmH4W8QAd4lRyTUokUpnpwBRWGATzdkrIQMop42eGYmIjrVfp9R4mLqUux\\nMQjaIDeJjLvEK8cKt0rNCafF5jFmex1lFNCNfHr6Ai/YI3dZJq2bzuiQM3Y001fQ\\\ + n+vj/+qE5rFYhsR5jd+bamthlWVcvO1s/fdePjAKKdNCT33kcvxgO84kk957KO9Za\\nIVk2c79eg63wq+sHOMqry3RwVBwDtekPkKjipamlKUy4wCPQ+AqfhuE2TdZMsMlA\\\ + ngKp8/7dssKoAD9qYwkbJ2RFgqcZAtV/G1CPzMwZrpYminSZj1JNKSe2vECh+aQmY\\n0NyRzseKKm1UfNbKHj8ejo5Uaprvywcdpum7yEhN+P0VV94mDbuTLEsoQn1+mPsr\\\ + nbOl3fldLD7a3fRrr0HmOYQ28WNuqPqbYSQzfxpAOxBd8CUIJHVBTOjGIshdnzK6N\\nWy8Y7BDP6yjlQRAIdXvAmqgZAj/7JZskYnXeuaKML9yXB19aum088eY+14z5fcJ2\\\ + n1cU/4BkJbKzC6Dfz2RYpooYRmrsTU2yUGYRqHdowcrns9QgdtxZvnX/2ZtGZN2Bv\\nkvqTfioa1NfBl4Fv3Ij0yEu15XySvhcdIP8M1ji/qX8=\\\ + n=rKvH\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ + \n }, \n \"last_updated\": \"2018-08-02T07:53:23.195202Z\", \n \ + \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ + \ \"remove_star_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/submissions\"\ + , \n \"url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b\"\ + , \n \"uuid\": \"cc084437-ab15-497e-b6c9-2a3a3f984e5b\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5233'] + Content-Type: [application/json] + Date: ['Thu, 02 Aug 2018 07:53:23 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAwOTo1MzoyMyBHTVQifX0.DkRJ8w.AfxkWhkGG3fjIcY9e_csDWpbmYE; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: '{"reply": "hello"}' + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIyNTIwMywiaWF0IjoxNTMzMTk2NDAzfQ.eyJpZCI6MX0.yu2572oWvijeB3rWIgmB7nXBNBRYfjiGGpOuK_VumxE] + Connection: [keep-alive] + Content-Length: ['18'] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: POST + uri: http://localhost:8081/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/reply + response: + body: {string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n"} + headers: + Content-Length: ['56'] + Content-Type: [application/json] + Date: ['Thu, 02 Aug 2018 07:53:23 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAwOTo1MzoyMyBHTVQifX0.DkRJ8w.AfxkWhkGG3fjIcY9e_csDWpbmYE; + HttpOnly; Path=/] + status: {code: 400, message: BAD REQUEST} +version: 1 diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml new file mode 100644 index 000000000..7c77131d7 --- /dev/null +++ b/data/test-reply-source.yml @@ -0,0 +1,96 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzMTY3MiwiaWF0IjoxNTMzMjAyODcyfQ.eyJpZCI6MX0.ZLWdnxi3zmhYeP0bo7D25ktDuhk3n0Mio9Hn2kKh9fg] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/add_star\"\ + , \n \"interaction_count\": 3, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustible\ + \ synapse\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFtiyOUBEADSwViZUdV75BD+X83ouWQjE46l7XHqrhAbm3BHh68VJGafrd1+\\\ + nZXpFFINsUjAuPEPXWv5ocq1x8cZ8tlnxM60sT8OI1NRoLi28VD2d+wXOFNXLbYdg\\nP1tIMRthI+GYrXbOCinUNfMvpt/nt6ZSrmIIfpTH/n/Ozjj8vo4MCYO4bKy1HDjb\\\ + n7srscfcyC1ZX6ycSSQeXFzvqdd4xylEWWl+7GYIqjAI0DALSK7v6s4epo2MBWP/s\\njlx8stGry/DfWqlTnSWHIbD+2E6WTMvHwJHUHDwZiPfDgBq3N4PK8JtbQd3nPClw\\\ + nEjdqE8key105evwmUWoXJiyiIRxc4tFpQpwgmVPKH4W9GX18hY+I7iN+lfLUR8lZ\\nZyElepaQ4oBZylkhEZlx9x4lXgMLhAOqeTfighzJmrFTPOObzOFS+cIOblTfsCuZ\\\ + nAHKNGdUfIGZmbDwyjElBlgL6x1J4KgZpkHXYnrKTPi//f9ZeMH1vjCkCJeaD/Psy\\n+/8HWO4xbTCGJlLXHA2I5Glc+yQZT8i5C5nwMh7+icj/Q62Wn2+GfrzkCayy+U5t\\\ + nSoYqelnmNKxyHQ7PIpia03w7v55Wz5xFJRMxlKV4KAGiOOyXbsEEkdhRpsvFi/iM\\naTDJvV9uSvx3e8U20YTfFeL/Gmjtfz5Np8tYTplXtm9oWzUssGkBvPcXDQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8Q0VaQ1lJNjdNREQ1VDQzTVNPSFZVMlVGVVhX\\nSElRWlpHVUJGUllXWTRCRUdYS1dFWFRVR0xYTFRGUEtaWlBPQVhEQ1pVMlJaSU1O\\\ + nQUVNWkhGSVROTkZWRkRJSDVWNlBTNjczSllKQT0+iQI/BBMBCgApBQJbYsjlAhsv\\nBQkB4VzbBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ6B7pTPty6CoASBAA\\\ + nwoy155avaJFg8ACaal4PvYGL1i8B2eu3vUMzvfdARkpQlWtrX48stCuCzIe6c1OZ\\nrx3d2uw70RojaXrHlJSBXhH+MdzgmH9vBzTbBAR4ODsRN5meMkDw9XgNFMPG3Kfe\\\ + nNV/xLzEABkjAP+uO+sveQeUXsxiSS+F3KMfTR0JsKfhu3OgO6j80OUnox8EAI0nz\\n/foRQzPbLcIJu13U1VC/gEUasxnzd+yEj/rrPvmcC6Iey0YHHOLknnBXZ8/FBU1H\\\ + n8OztDPQvN8+oyQUcUainpo1UOnECGkIZT6fnPsA2/dTu+agBCDcltrsFiMyP/53N\\nkntPC9jTK+Iv2/uIAFaEt6YHQm43kJEgzt0tr7VgVYStfcoNXPKlsdTaqrlK2rE6\\\ + nbdoBGW1NBxnZIVFRptDauys2u3a5KpWNxe0TehW2ovHCUfKa/kzLwUPK+I8SXpC+\\nUtKHvdK9eG8SDdNlONA/zVHfrifVDzQiA4res29cLLnDlwlQXr6DdVeVbGpmvxRj\\\ + n1x2hu0KufTrvgoRt+bt2rKKojxkDkf8LKegOTX2Qlm9ZpdTOnMcheTs0T1Bi1Bu/\\n1CgRyPSbUqrNYLr2DpUy0s0+sefgYYnD32GCI803h95n3/H3iKHyHTN+jt/AsxPD\\\ + nHAiYqfQtqrqUeiJaybQZEMtcB8HT8euyATGRMsO6iTI=\\n=o0Fo\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-02T09:41:12.082987Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/submissions\"\ + , \n \"url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf\"\ + , \n \"uuid\": \"eff8ebce-e144-4e0d-939c-2c644cea90bf\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/add_star\"\ + , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"delayed audiometer\"\ + , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ + n\\nmQINBFtiyOsBEADE6DowEkKFOllc6xM9BRpwMGRodNQKKPKi1TmehNVnrZOhW6/Y\\nXNqvuloA99oj2xKryH0xwQrl90hs9XzsyrTyoKbZDTDTa+GVeEKkTIGiBKxpQjfE\\\ + n6ibntxgSCRA/VWNHl1gij7Wu51EBv7FcO+X8Jt9VcC7E53SQsPPrEbv+ICNeYm3p\\nMJ3pHVPoqtfksDcfFqXjyihQeBiDN58Ft0EH5W+P5t6Q0mr6/MFQqcEjc0wPLXKy\\\ + nINU7gSaXJht2Gmk//aaV5njjHgQBoAsQh0CnML+iZcFR9kgpa7Qj00E0ffuyqQf4\\nDhQaeNaqDoEGtGHaMESDud9ISHmdMZzLC+iPFKzNXnkPM31KSDLm7P4uQgJyd330\\\ + nV0SgVknHXCGfQsmRUwegLD1vVc7XpsadFGX/2aA18Dhm5So7zLoDtfr4aA+e5xr7\\nGoLuEO2IUUpIiTF1iiuiqzN19fMfXglF+DwTgwhQvvfYPLo0OZcz32LTQ8NwXkcp\\\ + nI7gdJJzbcWCnhfe9QIVbJAqZgBFXQ1tDiD+hWQ2iZD5A8wuzxW79SlTcggwyitRQ\\n77DJffUfw5ym3b9vzAmL+o2rrnwWOBeSBXU1MdGpcYZVjizLrU1A7UanRx4Tz3dU\\\ + n0CZtr2giy5etcMsd1cqYckgB4lSWQ2A/nyHevTtczsVj9jufTdmx2258yQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WU9EVTMyN0hJTlJFWlVFUVJaWTNLVE4yVktW\\\ + nTFlXNFZOM05WVUFCWElPQVRBS0tWNjQ1QTNYSUU0NkM2VFlDSEc3SFdVQ1hFMkIz\\nWUtETUFaWlUzU0Q1NTZDNVlFRzNRUDNMSlREQT0+iQI/BBMBCgApBQJbYsjrAhsv\\\ + nBQkB4VzVBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+XTCLLamUoBYnBAA\\niL156Y8u97Rp/9I6tKK3d+8586zK/LOo5ILOfhuxoG087f/bNkfjtgQEqhYVuAv8\\\ + n+ssd1Z/20dbi1+rhNEUWeoCA70yogJYjbvIhyoKAhHoPlatobnbV+CVS2MDFrg7r\\nTHyhmj69MdL0SXalE777tGt5D5oDDe6qZKFZloBc6BA2ee+bPGTW7O9bPVuYZ84o\\\ + nnNyXANuqRseGl7YZYAvU8v2u/+g+PnhzkyIYazsMUdAzC7qrzpxgIrn9kiwJda+C\\nFM6jWRQrDWAq5dslTwOgJGRhnFlpGetjW29esm8ZN9JIgXszfgQ8kO6VMIAQUWTW\\\ + nziDenUfkDjnD6wUS0Tb1APdNBKqpZG5WypJ8g551uoVAiNapdJLzUvjO5/Lo3Z8l\\nJ55QtRbxnJONzmADXHQL8eq497YO7p4eXdk9Tv8VNMLTzZ8eVQov8b1o9seglXyF\\\ + nU5D8JCeTDjCZb9QgGVSadoJ4L+R63988I5hFT6I5dVdxuwjowqqTp7F40hgDotrV\\n+656IiWtkPuFaElAqOv+R+nHBHMnZpF9TVQUf7JjEnZ9OMT/KC+DxRCaUKP006Qr\\\ + naDMefL9+/jl+bVVfrH8VBjRr4ZO9EHizabBmxTxPqabloil6Yt1BDslHAUoYtq/B\\nl53jaDIuGCNuofWgtyOxzn4T0YSMxh2ol5cFYfFlQT8=\\\ + n=DAGH\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ + \n }, \n \"last_updated\": \"2018-08-02T09:41:12.102926Z\", \n \ + \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ + \ \"remove_star_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/remove_star\"\ + , \n \"reply_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/reply\"\ + , \n \"submissions_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/submissions\"\ + , \n \"url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6\"\ + , \n \"uuid\": \"09a28913-a9e6-4292-bc64-19ac75c340c6\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5232'] + Content-Type: [application/json] + Date: ['Thu, 02 Aug 2018 09:41:12 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMTo0MToxMiBHTVQifX0.DkRjOA.4MsigA7TUgbuUCW2k9Vhsu7-S-k; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: '{"reply": "-----BEGIN PGP MESSAGE-----\n\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\n=686S\n-----END + PGP MESSAGE-----\n\n"}' + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzMTY3MiwiaWF0IjoxNTMzMjAyODcyfQ.eyJpZCI6MX0.ZLWdnxi3zmhYeP0bo7D25ktDuhk3n0Mio9Hn2kKh9fg] + Connection: [keep-alive] + Content-Length: ['926'] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: POST + uri: http://localhost:8081/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/reply + response: + body: {string: "{\n \"message\": \"Your reply has been stored\"\n}\n"} + headers: + Content-Length: ['46'] + Content-Type: [application/json] + Date: ['Thu, 02 Aug 2018 09:41:12 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMTo0MToxMiBHTVQifX0.DkRjOA.4MsigA7TUgbuUCW2k9Vhsu7-S-k; + HttpOnly; Path=/] + status: {code: 201, message: CREATED} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 7cd30e6ee..58e2c0f8e 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -13,6 +13,16 @@ class BaseError(Exception): pass +class ReplyError(BaseError): + "For errors on reply messages" + + def __init__(self, message): + self.msg = message + + def __str__(self): + return repr(self.msg) + + class WrongUUIDError(BaseError): "For missing UUID, can be for source or submission" @@ -127,7 +137,11 @@ def authenticate(self) -> bool: return True def update_auth_header(self): - self.auth_header = {"Authorization": "token " + self.token["token"]} + self.auth_header = { + "Authorization": "token " + self.token["token"], + "Content-Type": "application/json", + "Accept": "application/json", + } def get_sources(self) -> List[Source]: url = self.server + "api/v1/sources" @@ -333,3 +347,28 @@ def get_current_user(self) -> T_user: raise AuthError(data["error"]) return data + + def reply_source(self, source: Source, msg: str) -> bool: + url = self.server.rstrip("/") + source.reply_url + + reply = {"reply": msg} + + try: + res = requests.post(url, headers=self.auth_header, data=json.dumps(reply)) + + if res.status_code == 400: + # Right now this API call from server can return text error or JSON error. + # We will update this to handle JSON data in future. + # https://github.com/freedomofpress/securedrop/issues/3684 + raise ReplyError(res.text) + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Your reply has been stored": + return True + # We should never reach here + return False diff --git a/tests/encrypted_msg.asc b/tests/encrypted_msg.asc new file mode 100644 index 000000000..5abc47224 --- /dev/null +++ b/tests/encrypted_msg.asc @@ -0,0 +1,18 @@ +-----BEGIN PGP MESSAGE----- + +hQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E +KYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1 +T+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw +V6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr +/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC +LDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT +z4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw +pg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA +F7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs +7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH +5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS +VAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j +t+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg== +=686S +-----END PGP MESSAGE----- + diff --git a/tests/test_api.py b/tests/test_api.py index 6ee60bcc2..cd2f679f7 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -128,3 +128,22 @@ def test_get_current_user(self): user = self.api.get_current_user() assert user["is_admin"] assert user["username"] == "journalist" + + @vcr.use_cassette("data/test-error-unencrypted-reply.yml") + def test_error_unencrypted_reply(self): + s = self.api.get_sources()[0] + with self.assertRaises(ReplyError) as err: + self.api.reply_source(s, "hello") + # Becasue the reply is JSON encoded + # https://github.com/freedomofpress/securedrop/issues/3684 + msg = json.loads(err.exception.msg) + self.assertEqual(msg["message"], "You must encrypt replies client side") + + @vcr.use_cassette("data/test-reply-source.yml") + def test_reply_source(self): + s = self.api.get_sources()[0] + dirname = os.path.dirname(__file__) + with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: + data = fobj.read() + + self.assertTrue(self.api.reply_source(s, data)) From ed90849a61d868318c574dcabbe54458d393e9a8 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 15:20:52 +0530 Subject: [PATCH 024/751] Updates the Error classes --- sdclientapi/__init__.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 58e2c0f8e..821cb0c75 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -27,19 +27,28 @@ class WrongUUIDError(BaseError): "For missing UUID, can be for source or submission" def __init__(self, message): - self.message = message + self.msg = message + + def __str__(self): + return repr(self.msg) class AuthError(BaseError): "For Authentication errors" def __init__(self, message): - self.message = message + self.msg = message + + def __str__(self): + return repr(self.msg) class AttributeError(BaseError): def __init__(self, message): - self.message = message + self.msg = message + + def __str__(self): + return repr(self.msg) class Submission: From 3cf7fa722a0c4050908307187ee485db41120100 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 15:27:13 +0530 Subject: [PATCH 025/751] Updates assert statements to unittest based methods We are now using proper unittest.TestCase based methods for assertions. --- tests/test_api.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index cd2f679f7..dcfbafdd6 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -45,21 +45,21 @@ def setUp(self): break def test_api_auth(self): - assert self.api.token + self.assertTrue(self.api.token) @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): sources = self.api.get_sources() - assert len(sources) == 2 + self.assertEqual(len(sources), 2) @vcr.use_cassette("data/test-star-add-remove.yml") def test_star_add_remove(self): s = self.api.get_sources()[0] - assert self.api.add_star(s) - assert self.api.remove_star(s) + self.assertTrue(self.api.add_star(s)) + self.assertTrue(self.api.remove_star(s)) for source in self.api.get_sources(): if source.uuid == s.uuid: - assert not source.is_starred + self.assertFalse(source.is_starred) @vcr.use_cassette("data/test-get-single-source.yml") def test_get_single_source(self): @@ -67,8 +67,8 @@ def test_get_single_source(self): # Now we will try to get the same source again s2 = self.api.get_source(s.uuid) - assert s.journalist_designation == s2.journalist_designation - assert s.uuid == s2.uuid + self.assertEqual(s.journalist_designation, s2.journalist_designation) + self.assertEqual(s.uuid, s2.uuid) @vcr.use_cassette("data/test-failed-single-source.yml") def test_failed_single_source(self): @@ -80,7 +80,7 @@ def test_get_submissions(self): s = self.api.get_sources()[0] subs = self.api.get_submissions(s) - assert len(subs) == 2 + self.assertEqual(len(subs), 2) @vcr.use_cassette("data/test-get-wrong-submissions.yml") def test_get_wrong_submissions(self): @@ -92,42 +92,42 @@ def test_get_wrong_submissions(self): @vcr.use_cassette("data/test-get-all-submissions.yml") def test_get_all_submissions(self): subs = self.api.get_all_submissions() - assert len(subs) == 4 + self.assertEqual(len(subs), 4) @vcr.use_cassette("data/test-flag-source.yml") def test_flag_source(self): s = self.api.get_sources()[0] - assert self.api.flag_source(s) + self.assertTrue(self.api.flag_source(s)) # Now we will try to get the same source again s2 = self.api.get_source(s.uuid) - assert s2.is_flagged + self.assertTrue(s2.is_flagged) @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source(self): s = self.api.get_sources()[0] - assert self.api.delete_source(s.uuid) + self.assertTrue(self.api.delete_source(s.uuid)) # Now there should be one source left sources = self.api.get_sources() - assert len(sources) == 1 + self.assertEqual(len(sources), 1) @vcr.use_cassette("data/test-delete-submission.yml") def test_delete_submission(self): subs = self.api.get_all_submissions() - assert self.api.delete_submission(subs[0]) + self.assertTrue(self.api.delete_submission(subs[0])) new_subs = self.api.get_all_submissions() # We now should have 3 submissions - assert len(new_subs) == 3 + self.assertEqual(len(new_subs), 3) # Let us make sure that sub[0] is not there for s in new_subs: - assert s.uuid != subs[0].uuid + self.assertNotEqual(s.uuid, subs[0].uuid) @vcr.use_cassette("data/test-get-current-user.yml") def test_get_current_user(self): user = self.api.get_current_user() - assert user["is_admin"] - assert user["username"] == "journalist" + self.assertTrue(user["is_admin"]) + self.assertEqual(user["username"], "journalist") @vcr.use_cassette("data/test-error-unencrypted-reply.yml") def test_error_unencrypted_reply(self): From 5f864123404c7a31be5a3c638007bac44b816b81 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 16:08:09 +0530 Subject: [PATCH 026/751] Adds download_submission method in the API We can now download a given submission on a given path. --- data/test-download-submission.yml | 106 ++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 35 +++++++++- tests/test_api.py | 28 ++++++++ 3 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 data/test-download-submission.yml diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml new file mode 100644 index 000000000..b45400b02 --- /dev/null +++ b/data/test-download-submission.yml @@ -0,0 +1,106 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzNDg3OSwiaWF0IjoxNTMzMjA2MDc5fQ.eyJpZCI6MX0.xBkt6YFC5sjIKT_aXVPPD5194pgxGsLSbGxlUSyS7wE] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328/download\"\ + , \n \"filename\": \"1-confused_blotter-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2\"\ + , \n \"submission_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328\"\ + , \n \"uuid\": \"833fcb33-d5be-4119-bffd-7d7d442bc328\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/85d6c0bf-1245-4c57-88f4-3039979c2acd/download\"\ + , \n \"filename\": \"2-confused_blotter-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2\"\ + , \n \"submission_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/85d6c0bf-1245-4c57-88f4-3039979c2acd\"\ + , \n \"uuid\": \"85d6c0bf-1245-4c57-88f4-3039979c2acd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/ce2b7a2a-a076-4e1e-abbc-d91ab6366231/download\"\ + , \n \"filename\": \"1-traveled_worship-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987\"\ + , \n \"submission_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/ce2b7a2a-a076-4e1e-abbc-d91ab6366231\"\ + , \n \"uuid\": \"ce2b7a2a-a076-4e1e-abbc-d91ab6366231\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/a28c8fcb-ac8c-4120-bf56-1477197ee8e2/download\"\ + , \n \"filename\": \"2-traveled_worship-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987\"\ + , \n \"submission_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/a28c8fcb-ac8c-4120-bf56-1477197ee8e2\"\ + , \n \"uuid\": \"a28c8fcb-ac8c-4120-bf56-1477197ee8e2\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['2045'] + Content-Type: [application/json] + Date: ['Thu, 02 Aug 2018 10:34:39 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMjozNDozOSBHTVQifX0.DkRvvw.O0y66nWFuV5umboAf3YwaxIKBKk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzNDg3OSwiaWF0IjoxNTMzMjA2MDc5fQ.eyJpZCI6MX0.xBkt6YFC5sjIKT_aXVPPD5194pgxGsLSbGxlUSyS7wE] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328/download + response: + body: + string: !!binary | + hQIMA8PnxMCiIBsqAQ/+LyqyFGfYX1S248xECMqqVH2qHUF/K4Hr8aIOne0em1pkTNYT+ZbcbrK9 + dPSl1B/NMm6DEUdR5DyAmVMP6rI+TVgJrPodhoWPkTDCKKsXz4CScyE3H4Ws5BfdCxN5EeQmyhYu + s/ImGKB9mMXryH9kXKGQPjEGsIWxoziySNAFgfk9k0pa/XSr/m+BKVU2cFWANfZewq/c0ykwupvk + 0FQNft8Z2dNbJNB2X6D5m5/yx7DpZ3gv/IOgZKJskCY4WJj8Z/52z00nwbBAl66io04+FX8Q/mnU + rU1dW79Ir4YEuwdX13bmOLpKHbwGB3JTUws9MCwYBZqWxXV4va/ov+i9gCXuJSFlXx/+g2/etd8l + tTwn6L/AB4mXpZE7zJTQAvG0dJZkpz+bTXqSBwLcvpLdPeS4ubEsuJs8pv24qB5QbJccuNv7CfrZ + j7To91iuxERsHq2hkr5gVkJTZjouJiX2a85Mzol+dF37bpSbVIwKOIYvK/BmVtbv0dnnsnQ0btdQ + PXci0DhWF6+7dja1CM64kR29cdwY+bniZUN4Vg/PRoSg4yRMwpoa79pIOL9zdcF6Z/1GElugDxSr + jBLC6fQdva+XcQcU0+WRw4eIZtx1lxwixIsPydLmZ4Hme7TCTkZV9l8hH6wY6/LdD5FhbXCI0IXe + q78R3M8+USS/K6z+xoTSSwFagXPoJfr7O78VmYx49Ga+t1hnrqQECnkk+bAz0uGnAGlxzklJ5T47 + 98Qt6VhqRCa4M6d4xREXaQAqaxqKYEyyS9aexI2qP4wULQ== + headers: + Cache-Control: ['public, max-age=43200'] + Content-Disposition: [attachment; filename=1-confused_blotter-msg.gpg] + Content-Length: ['604'] + Content-Type: [application/pgp-encrypted] + Date: ['Thu, 02 Aug 2018 10:34:39 GMT'] + Etag: ['"sha256:fed2cb0c519573d6a0db5a78782d9031d389a8f2d1d5504c73708f6ee6eab915"'] + Expires: ['Thu, 02 Aug 2018 22:34:39 GMT'] + Last-Modified: ['Thu, 02 Aug 2018 10:31:47 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMjozNDozOSBHTVQifX0.DkRvvw.O0y66nWFuV5umboAf3YwaxIKBKk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzNDg3OSwiaWF0IjoxNTMzMjA2MDc5fQ.eyJpZCI6MX0.xBkt6YFC5sjIKT_aXVPPD5194pgxGsLSbGxlUSyS7wE] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328 + response: + body: {string: "{\n \"download_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328/download\"\ + , \n \"filename\": \"1-confused_blotter-msg.gpg\", \n \"is_read\": true,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2\"\ + , \n \"submission_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328\"\ + , \n \"uuid\": \"833fcb33-d5be-4119-bffd-7d7d442bc328\"\n}\n"} + headers: + Content-Length: ['466'] + Content-Type: [application/json] + Date: ['Thu, 02 Aug 2018 10:34:39 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMjozNDozOSBHTVQifX0.DkRvvw.O0y66nWFuV5umboAf3YwaxIKBKk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 821cb0c75..8ec06ae72 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,8 +1,9 @@ from pprint import pprint +import os import json import requests -from typing import Optional, Dict, List +from typing import Optional, Dict, List, Tuple from mypy_extensions import TypedDict T_token = TypedDict("T_token", {"expiration": str, "token": str}) @@ -329,6 +330,38 @@ def delete_submission(self, submission: Submission) -> bool: # We should never reach here return False + def download_submission(self, submission: Submission, path: str) -> Tuple[str, str]: + url = self.server.rstrip("/") + submission.download_url + + if os.path.exists(path) and not os.path.isdir(path): + raise BaseError("Please provide a vaild directory to save.") + + try: + res = requests.get(url, headers=self.auth_header, stream=True) + + if res.status_code == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + + # Get the headers + headers = res.headers + etag = headers["Etag"] + + # This is where we will save our downloaded file + filepath = os.path.join(path, submission.filename) + with open(filepath, "wb") as fobj: + for chunk in res.iter_content( + chunk_size=1024 + ): # Getting 1024 in each chunk + if chunk: + fobj.write(chunk) + + # Because etag comes as JSON encoded string + etag = json.loads(etag) + # Return the tuple of sha256sum, filepath + return etag[7:], filepath + except Exception as err: + raise BaseError(err) + def flag_source(self, source: Source) -> bool: url = self.server.rstrip("/") + "/api/v1/sources/{}/flag".format(source.uuid) diff --git a/tests/test_api.py b/tests/test_api.py index dcfbafdd6..73bd355e3 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -2,6 +2,9 @@ import os import time import json +import hashlib +import shutil +import tempfile import unittest from sdclientapi import * @@ -147,3 +150,28 @@ def test_reply_source(self): data = fobj.read() self.assertTrue(self.api.reply_source(s, data)) + + @vcr.use_cassette("data/test-download-submission.yml") + def test_download_submission(self): + s = self.api.get_all_submissions()[0] + + self.assertFalse(s.is_read) + + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + etag, filepath = self.api.download_submission(s, tmpdir) + + # now let us read the downloaded file + with open(filepath, "rb") as fobj: + data = fobj.read() + + shasum = hashlib.sha256(data).hexdigest() + self.assertEqual(etag, shasum) + + # Now the submission should have is_read as True. + + s = self.api.get_submission(s) + self.assertTrue(s.is_read) + + # Let us remove the temporary directory + shutil.rmtree(tmpdir) From 48c9a4f17b75a7be636c1301b082bd263dcf697f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 16:58:50 +0530 Subject: [PATCH 027/751] updates readme file --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9266e89cf..4cc2439b6 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,9 @@ docker run --rm -v $PWD:/home/kdas/workplace kdas/black black . Note: The dockerfile still needs work. -This is work in progress. The following API(s) are still missing. +We cover all the API calls of SecureDrop. -- post reply to source -- download a submission +Note: The `get_source` will get an update to take a Source object as an input. We will also add a bunch of more tests. From a8d586598aee2720cc510bf848be0c695e9aaff2 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 21:26:40 +0530 Subject: [PATCH 028/751] Adds initial docs directory We also now have sphinx as dependency for documentation. --- Pipfile | 2 +- Pipfile.lock | 106 ++++++++++++++++++++++++++- docs/Makefile | 20 ++++++ docs/conf.py | 166 +++++++++++++++++++++++++++++++++++++++++++ docs/development.rst | 38 ++++++++++ docs/index.rst | 22 ++++++ docs/install.rst | 4 ++ 7 files changed, 356 insertions(+), 2 deletions(-) create mode 100644 docs/Makefile create mode 100644 docs/conf.py create mode 100644 docs/development.rst create mode 100644 docs/index.rst create mode 100644 docs/install.rst diff --git a/Pipfile b/Pipfile index 14bd98e3d..5633ec162 100644 --- a/Pipfile +++ b/Pipfile @@ -14,4 +14,4 @@ requests = "*" mypy-extensions = "*" mypy = "*" pyotp = "*" - +sphinx = "*" diff --git a/Pipfile.lock b/Pipfile.lock index dad59c127..454c583bc 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9cb798b4ddc239b8fff7d059acd8f39736da55cba5bc9ef19d241ead56f6d226" + "sha256": "0372a83abe6a8c5cf3b55c5dd8f0d457623e6e9cd1bae4eba6861c2368ea32fd" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,20 @@ ] }, "default": { + "alabaster": { + "hashes": [ + "sha256:674bb3bab080f598371f4443c5008cbfeb1a5e622dd312395d2d82af2c54c456", + "sha256:b63b1f4dc77c074d386752ec4a8a7517600f6c0db8cd42980cae17ab7b3275d7" + ], + "version": "==0.7.11" + }, + "babel": { + "hashes": [ + "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669", + "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23" + ], + "version": "==2.6.0" + }, "certifi": { "hashes": [ "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", @@ -30,6 +44,14 @@ ], "version": "==3.0.4" }, + "docutils": { + "hashes": [ + "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", + "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", + "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" + ], + "version": "==0.14" + }, "idna": { "hashes": [ "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", @@ -37,6 +59,26 @@ ], "version": "==2.7" }, + "imagesize": { + "hashes": [ + "sha256:3620cc0cadba3f7475f9940d22431fc4d407269f1be59ec9b8edcca26440cf18", + "sha256:5b326e4678b6925158ccc66a9fa3122b6106d7c876ee32d7de6ce59385b96315" + ], + "version": "==1.0.0" + }, + "jinja2": { + "hashes": [ + "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", + "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" + ], + "version": "==2.10" + }, + "markupsafe": { + "hashes": [ + "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" + ], + "version": "==1.0" + }, "mypy": { "hashes": [ "sha256:673ea75fb750289b7d1da1331c125dc62fc1c3a8db9129bb372ae7b7d5bf300a", @@ -52,6 +94,20 @@ "index": "pypi", "version": "==0.3.0" }, + "packaging": { + "hashes": [ + "sha256:e9215d2d2535d3ae866c3d6efc77d5b24a0192cce0ff20e42896cc0664f889c0", + "sha256:f019b770dd64e585a99714f1fd5e01c7a8f11b45635aa953fd41c689a657375b" + ], + "version": "==17.1" + }, + "pygments": { + "hashes": [ + "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", + "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" + ], + "version": "==2.2.0" + }, "pyotp": { "hashes": [ "sha256:8f0df1fcf9e86cec41f0a31c91212b1a04fca6dd353426917222b21864b9310b", @@ -60,6 +116,25 @@ "index": "pypi", "version": "==2.2.6" }, + "pyparsing": { + "hashes": [ + "sha256:0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04", + "sha256:281683241b25fe9b80ec9d66017485f6deff1af5cde372469134b56ca8447a07", + "sha256:8f1e18d3fd36c6795bb7e02a39fd05c611ffc2596c1e0d995d34d67630426c18", + "sha256:9e8143a3e15c13713506886badd96ca4b579a87fbdf49e550dbfc057d6cb218e", + "sha256:b8b3117ed9bdf45e14dcc89345ce638ec7e0e29b2b579fa1ecf32ce45ebac8a5", + "sha256:e4d45427c6e20a59bf4f88c639dcc03ce30d193112047f94012102f235853a58", + "sha256:fee43f17a9c4087e7ed1605bd6df994c6173c1e977d7ade7b651292fab2bd010" + ], + "version": "==2.2.0" + }, + "pytz": { + "hashes": [ + "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053", + "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277" + ], + "version": "==2018.5" + }, "requests": { "hashes": [ "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", @@ -68,6 +143,35 @@ "index": "pypi", "version": "==2.19.1" }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", + "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" + ], + "version": "==1.2.1" + }, + "sphinx": { + "hashes": [ + "sha256:217ad9ece2156ed9f8af12b5d2c82a499ddf2c70a33c5f81864a08d8c67b9efc", + "sha256:a765c6db1e5b62aae857697cd4402a5c1a315a7b0854bbcd0fc8cdc524da5896" + ], + "index": "pypi", + "version": "==1.7.6" + }, + "sphinxcontrib-websupport": { + "hashes": [ + "sha256:68ca7ff70785cbe1e7bccc71a48b5b6d965d79ca50629606c7861a21b206d9dd", + "sha256:9de47f375baf1ea07cdb3436ff39d7a9c76042c10a769c52353ec46e4e8fc3b9" + ], + "version": "==1.1.0" + }, "typed-ast": { "hashes": [ "sha256:0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 000000000..cfbea1b81 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = sdconfigapi +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 000000000..3b9e411a9 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'sdconfigapi' +copyright = '2018, Kushal Das' +author = 'Kushal Das ' + +# The short X.Y version +version = '0.1.0' +# The full version, including alpha/beta/rc tags +release = '0.1.0' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'sdconfigapidoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'sdconfigapi.tex', 'sdconfigapi Documentation', + 'Kushal Das', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'sdconfigapi', 'sdconfigapi Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'sdconfigapi', 'sdconfigapi Documentation', + author, 'sdconfigapi', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Extension configuration ------------------------------------------------- + +# -- Options for intersphinx extension --------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} diff --git a/docs/development.rst b/docs/development.rst new file mode 100644 index 000000000..ac40b462d --- /dev/null +++ b/docs/development.rst @@ -0,0 +1,38 @@ +Development +============ + +We are using `pipenv `_ to manage the dependencies of +the project. + +Git clone the project repo, and use the following command to create a new dev +environment. The second command is to enable the virtual environment. + +:: + + pipenv install + pipenv shell + + + +Testing +======== + +The `tests` directory contains the test cases for API. We are using `vcrpy +`_ to mock out the test calls. + +If you want to run the tests against an actual SecureDrop environment, please +comment out the `@vcr` decorator of the `setUp` method in the test. This will +allow to have real token from the server. + +To run all the test cases, use the following command. + +:: + + $ python -m unittest discover -v tests/ + +To run a single test, use this following command, replace the test case name +at the end. + +:: + + $ python -m unittest -v tests.test_api.TestAPI.test_error_unencrypted_reply diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 000000000..da9e181ce --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,22 @@ +.. sdconfigapi documentation master file, created by + sphinx-quickstart on Thu Aug 2 16:55:50 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to sdconfigapi's documentation! +======================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + install + development + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/install.rst b/docs/install.rst new file mode 100644 index 000000000..59a38def5 --- /dev/null +++ b/docs/install.rst @@ -0,0 +1,4 @@ +Installation +============ + +TODO From d7fc8695b573434c14871871905435796adab378 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 21:31:28 +0530 Subject: [PATCH 029/751] Adds some docstrings to the API methods --- sdclientapi/__init__.py | 110 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 4 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 8ec06ae72..1537eaeeb 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -53,6 +53,9 @@ def __str__(self): class Submission: + """ + This class represents a submission object in the server. + """ def __init__(self, **kargs) -> None: self.download_url = "" # type: str self.filename = "" # type: str @@ -77,6 +80,9 @@ def __init__(self, **kargs) -> None: class Source: + """ + This class represents a source object in the server. + """ def __init__(self, **kargs): self.add_star_url = "" # type: str self.interaction_count = 0 # type: int @@ -115,12 +121,21 @@ def __init__(self, **kargs): class API: + """ + This is class to do all the network calls to the SecureDrop API server. + + :param address: Server URL (http://localhost:8081/) + :param username: Journalist username + :param passphrase: Journalist passphrase + :param totp: Current TOTP value + :returns: An object of API class. + """ def __init__(self, address, username, passphrase, totp) -> None: """ Primary API class, this is the only thing which will make network call. """ - self.server = address + self.server = address # type: str self.username = username # type: str self.passphrase = passphrase # type: str self.totp = totp # type: str @@ -128,6 +143,11 @@ def __init__(self, address, username, passphrase, totp) -> None: self.auth_header = {"Authorization": ""} # type: Dict def authenticate(self) -> bool: + """ + Authenticate the user and fetches the token from the server. + + :returns: True if authentication is successful, raise AuthError otherwise. + """ user_data = { "username": self.username, "passphrase": self.passphrase, @@ -154,6 +174,11 @@ def update_auth_header(self): } def get_sources(self) -> List[Source]: + """ + Returns a list of all the sources from the Server. + + :returns: List of Source objects. + """ url = self.server + "api/v1/sources" try: @@ -175,7 +200,12 @@ def get_sources(self) -> List[Source]: return result def get_source(self, uuid: str) -> Source: - "This will return a single Source based on UUID" + """ + This will return a single Source based on UUID. + + :param uuid: String containing the source's uuid value. + :returns: Source object for the given UUID value + """ url = self.server + "api/v1/sources/{}".format(uuid) try: @@ -194,7 +224,13 @@ def get_source(self, uuid: str) -> Source: return Source(**data) def delete_source(self, uuid: str) -> bool: - "This will delete the source and collection" + """ + This method will delete the source and collection. If the input uuid + is not found in the server, it will raise WrongUUIDError. + + :param uuid: String containing the source's uuid value. + :returns: True if successful, raises Errors in case of wrong values. + """ url = self.server + "api/v1/sources/{}".format(uuid) try: @@ -217,6 +253,12 @@ def delete_source(self, uuid: str) -> bool: return False def add_star(self, source: Source) -> bool: + """ + Adds a star to a given source. + + :param source: The source object to whom we want add a star. + :returns: True if successful, raises Error otherwise. + """ url = self.server.rstrip("/") + source.add_star_url try: @@ -231,7 +273,11 @@ def add_star(self, source: Source) -> bool: return False def remove_star(self, source: Source) -> bool: - "Removes star from a given Source" + """Removes star from a given Source. + + :param source: Source object to remove the star from. + :returns: True if successful, raises Error otherwise. + """ url = self.server.rstrip("/") + source.remove_star_url try: @@ -246,6 +292,12 @@ def remove_star(self, source: Source) -> bool: return False def get_submissions(self, source: Source) -> List[Submission]: + """ + Returns a list of Submission objects from the server for a given source. + + :param source: Source object for whom we want to find all the submissions. + :returns: List of Submission objects. + """ url = self.server.rstrip("/") + source.submissions_url try: @@ -271,6 +323,12 @@ def get_submissions(self, source: Source) -> List[Submission]: return result def get_submission(self, submission: Submission) -> Submission: + """ + Returns the updated Submission object from the server. + + :param submission: Submission object we want to update. + :returns: Updated submission object from the server. + """ url = self.server.rstrip("/") + submission.submission_url try: @@ -289,6 +347,11 @@ def get_submission(self, submission: Submission) -> Submission: return Submission(**data) def get_all_submissions(self) -> List[Submission]: + """ + Returns a list of Submission objects from the server. + + :returns: List of Submission objects. + """ url = self.server.rstrip("/") + "/api/v1/submissions" try: @@ -310,6 +373,12 @@ def get_all_submissions(self) -> List[Submission]: return result def delete_submission(self, submission: Submission) -> bool: + """ + Deletes a given Submission object from the server. + + :param submission: The Submission object we want to delete in the server. + :returns: True if successful, raises Error otherwise. + """ url = self.server.rstrip("/") + submission.submission_url try: @@ -331,6 +400,15 @@ def delete_submission(self, submission: Submission) -> bool: return False def download_submission(self, submission: Submission, path: str) -> Tuple[str, str]: + """ + Returns a tuple of sha256sum and file path for a given Submission object. This method + also requires a directory path in where it will save the submission file. + + :param submission: Submission object + :param path: Local directory path to save the submission + + :returns: Tuple of sha256sum and path of the saved submission. + """ url = self.server.rstrip("/") + submission.download_url if os.path.exists(path) and not os.path.isdir(path): @@ -363,6 +441,12 @@ def download_submission(self, submission: Submission, path: str) -> Tuple[str, s raise BaseError(err) def flag_source(self, source: Source) -> bool: + """ + Flags a source for reply. + + :param source: Source object we want to flag. + :returns: True if successful, raises Error otherwise. + """ url = self.server.rstrip("/") + "/api/v1/sources/{}/flag".format(source.uuid) try: @@ -377,6 +461,17 @@ def flag_source(self, source: Source) -> bool: return True def get_current_user(self) -> T_user: + """ + Returns a dictionary of the current user data. + + Example: + + { + 'is_admin': True, + 'last_login': '2018-08-01T19:10:38.199429Z', + 'username': 'journalist' + } + """ url = self.server.rstrip("/") + "/api/v1/user" try: @@ -391,6 +486,13 @@ def get_current_user(self) -> T_user: return data def reply_source(self, source: Source, msg: str) -> bool: + """ + This method is used to reply to a given source. The message should be preencrypted with the source's + GPG public key. + + :param source: Source object we want to reply. + :param msg: Encrypted message with Source's GPG public key. + """ url = self.server.rstrip("/") + source.reply_url reply = {"reply": msg} From 4e0562344a9836635d44d68b97db568f3b0b1012 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 2 Aug 2018 22:30:02 +0530 Subject: [PATCH 030/751] Fixes typo of kwargs for Source and Submission We can now create a local Source or Submission object and fetch the details from the server. --- sdclientapi/__init__.py | 32 +++++++++++++++++++++----------- tests/test_api.py | 6 +++--- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 1537eaeeb..462854d81 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -56,7 +56,7 @@ class Submission: """ This class represents a submission object in the server. """ - def __init__(self, **kargs) -> None: + def __init__(self, **kwargs) -> None: self.download_url = "" # type: str self.filename = "" # type: str self.is_read = False # type: bool @@ -65,6 +65,11 @@ def __init__(self, **kargs) -> None: self.submission_url = "" # type: str self.uuid = "" # type: str + if ["uuid"] == list(kwargs.keys()): + # Means we are creating an object only for fetching from server. + self.uuid = kwargs["uuid"] + return + for key in [ "download_url", "filename", @@ -74,16 +79,16 @@ def __init__(self, **kargs) -> None: "submission_url", "uuid", ]: - if not key in kargs: + if not key in kwargs: AttributeError("Missing key {}".format(key)) - setattr(self, key, kargs[key]) + setattr(self, key, kwargs[key]) class Source: """ This class represents a source object in the server. """ - def __init__(self, **kargs): + def __init__(self, **kwargs): self.add_star_url = "" # type: str self.interaction_count = 0 # type: int self.is_flagged = False # type: bool @@ -99,6 +104,11 @@ def __init__(self, **kargs): self.url = "" # type: str self.uuid = "" # type: str + if ["uuid"] == list(kwargs.keys()): + # Means we are creating an object only for fetching from server. + self.uuid = kwargs["uuid"] + return + for key in [ "add_star_url", "interaction_count", @@ -115,9 +125,9 @@ def __init__(self, **kargs): "url", "uuid", ]: - if not key in kargs: + if not key in kwargs: AttributeError("Missing key {}".format(key)) - setattr(self, key, kargs[key]) + setattr(self, key, kwargs[key]) class API: @@ -199,20 +209,20 @@ def get_sources(self) -> List[Source]: return result - def get_source(self, uuid: str) -> Source: + def get_source(self, source: Source) -> Source: """ This will return a single Source based on UUID. - :param uuid: String containing the source's uuid value. - :returns: Source object for the given UUID value + :param source: Source object containing only source's uuid value. + :returns: Source object fetched from server for the given UUID value. """ - url = self.server + "api/v1/sources/{}".format(uuid) + url = self.server + "api/v1/sources/{}".format(source.uuid) try: res = requests.get(url, headers=self.auth_header) if res.status_code == 404: - raise WrongUUIDError("Missing source {}".format(uuid)) + raise WrongUUIDError("Missing source {}".format(source.uuid)) data = res.json() except json.decoder.JSONDecodeError: diff --git a/tests/test_api.py b/tests/test_api.py index 73bd355e3..4c89da45f 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -68,7 +68,7 @@ def test_star_add_remove(self): def test_get_single_source(self): s = self.api.get_sources()[0] # Now we will try to get the same source again - s2 = self.api.get_source(s.uuid) + s2 = self.api.get_source(s) self.assertEqual(s.journalist_designation, s2.journalist_designation) self.assertEqual(s.uuid, s2.uuid) @@ -76,7 +76,7 @@ def test_get_single_source(self): @vcr.use_cassette("data/test-failed-single-source.yml") def test_failed_single_source(self): with self.assertRaises(WrongUUIDError): - self.api.get_source("not there") + self.api.get_source(Source(uuid="not there")) @vcr.use_cassette("data/test-get-submissions.yml") def test_get_submissions(self): @@ -102,7 +102,7 @@ def test_flag_source(self): s = self.api.get_sources()[0] self.assertTrue(self.api.flag_source(s)) # Now we will try to get the same source again - s2 = self.api.get_source(s.uuid) + s2 = self.api.get_source(s) self.assertTrue(s2.is_flagged) @vcr.use_cassette("data/test-delete-source.yml") From ea0bd14d9a8462e4f320dd5f8007483479d55330 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 3 Aug 2018 19:57:25 +0530 Subject: [PATCH 031/751] Fixes the error handling for reply_source API call --- sdclientapi/__init__.py | 6 ++---- tests/test_api.py | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 462854d81..f6a220a28 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -511,10 +511,8 @@ def reply_source(self, source: Source, msg: str) -> bool: res = requests.post(url, headers=self.auth_header, data=json.dumps(reply)) if res.status_code == 400: - # Right now this API call from server can return text error or JSON error. - # We will update this to handle JSON data in future. - # https://github.com/freedomofpress/securedrop/issues/3684 - raise ReplyError(res.text) + raise ReplyError(res.json()["message"]) + data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") diff --git a/tests/test_api.py b/tests/test_api.py index 4c89da45f..83139ec0c 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -137,10 +137,8 @@ def test_error_unencrypted_reply(self): s = self.api.get_sources()[0] with self.assertRaises(ReplyError) as err: self.api.reply_source(s, "hello") - # Becasue the reply is JSON encoded - # https://github.com/freedomofpress/securedrop/issues/3684 - msg = json.loads(err.exception.msg) - self.assertEqual(msg["message"], "You must encrypt replies client side") + + self.assertEqual(err.exception.msg, "You must encrypt replies client side") @vcr.use_cassette("data/test-reply-source.yml") def test_reply_source(self): From 1f574fc79a791fddde92f0e1462e65b889774a05 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 8 Aug 2018 12:17:46 +0530 Subject: [PATCH 032/751] Updates delete_source method Now it accepts a source object like other similar method calls. --- sdclientapi/__init__.py | 10 +++++----- tests/test_api.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index f6a220a28..dc8075f7b 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -233,21 +233,21 @@ def get_source(self, source: Source) -> Source: return Source(**data) - def delete_source(self, uuid: str) -> bool: + def delete_source(self, source: Source) -> bool: """ - This method will delete the source and collection. If the input uuid + This method will delete the source and collection. If the uuid is not found in the server, it will raise WrongUUIDError. - :param uuid: String containing the source's uuid value. + :param source: Source object containing only source's uuid value. :returns: True if successful, raises Errors in case of wrong values. """ - url = self.server + "api/v1/sources/{}".format(uuid) + url = self.server + "api/v1/sources/{}".format(source.uuid) try: res = requests.delete(url, headers=self.auth_header) if res.status_code == 404: - raise WrongUUIDError("Missing source {}".format(uuid)) + raise WrongUUIDError("Missing source {}".format(source.uuid)) data = res.json() except json.decoder.JSONDecodeError: diff --git a/tests/test_api.py b/tests/test_api.py index 83139ec0c..95df051fd 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -108,7 +108,7 @@ def test_flag_source(self): @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source(self): s = self.api.get_sources()[0] - self.assertTrue(self.api.delete_source(s.uuid)) + self.assertTrue(self.api.delete_source(s)) # Now there should be one source left sources = self.api.get_sources() From c14c9a0f1ddf3eafbfd50f6fa23e98b05099689b Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 9 Aug 2018 00:33:34 +0530 Subject: [PATCH 033/751] Adds a circleci config --- .circleci/config.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..c6902b78d --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,32 @@ +version: 2 +jobs: + build: + working_directory: ~/sdclientapi + docker: + - image: circleci/python:3.5.3 + environment: + PIPENV_VENV_IN_PROJECT: true + steps: + - checkout + - run: sudo chown -R circleci:circleci /usr/local/bin + - run: sudo chown -R circleci:circleci /usr/local/lib/python3.5/site-packages + - restore_cache: + key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} + - run: + command: | + sudo pip install pipenv + pipenv install -d + - save_cache: + key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} + paths: + - ".venv" + - "/usr/local/bin" + - "/usr/local/lib/python3.5/site-packages" + - run: + command: | + pipenv run python -m unittest discover -v tests/ + - store_test_results: + path: test-results + - store_artifacts: + path: test-results +destination: tr1 \ No newline at end of file From 6656cfb6b19eb81b8c936b67b08bddf7da8cf6e6 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 9 Aug 2018 00:00:43 +0530 Subject: [PATCH 034/751] Adds setup.py and a MANIFEST.in file Now we can create sdists for pypi.org. --- MANIFEST.in | 4 ++++ setup.py | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 MANIFEST.in create mode 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..2f7ba00d7 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,4 @@ +include sdclientapi/*.py +include README.md +include LICENSE +include setup.py \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..565403e28 --- /dev/null +++ b/setup.py @@ -0,0 +1,26 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name="sdclientapi", + version="0.1.0", + author="Kushal Das", + author_email="kushal@freedom.press", + description="Python client API to access SecureDrop Journalist REST API", + long_description=long_description, + long_description_content_type="text/markdown", + install_requires=["requests", "mypy-extensions"], + python_requires='>=3.5', + url="https://github.com/freedomofpress/sdclientapi", + packages=setuptools.find_packages(exclude=['docs', 'tests']), + classifiers=( + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3", + "Topic :: Software Development :: Libraries :: Python Modules", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + 'Intended Audience :: Developers', + "Operating System :: OS Independent", + ), +) From 3905d6334d9df05521da9469dea9b2fda81c7d01 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 10 Aug 2018 14:48:46 +0530 Subject: [PATCH 035/751] Updates format using black --- docs/conf.py | 57 ++++++++++++++++++++++++---------------------------- setup.py | 6 +++--- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 3b9e411a9..cf74f7412 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,14 +19,14 @@ # -- Project information ----------------------------------------------------- -project = 'sdconfigapi' -copyright = '2018, Kushal Das' -author = 'Kushal Das ' +project = "sdconfigapi" +copyright = "2018, Kushal Das" +author = "Kushal Das " # The short X.Y version -version = '0.1.0' +version = "0.1.0" # The full version, including alpha/beta/rc tags -release = '0.1.0' +release = "0.1.0" # -- General configuration --------------------------------------------------- @@ -38,23 +38,19 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'sphinx.ext.viewcode', -] +extensions = ["sphinx.ext.autodoc", "sphinx.ext.intersphinx", "sphinx.ext.viewcode"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -66,10 +62,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path . -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # -- Options for HTML output ------------------------------------------------- @@ -77,7 +73,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -88,7 +84,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -104,7 +100,7 @@ # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = 'sdconfigapidoc' +htmlhelp_basename = "sdconfigapidoc" # -- Options for LaTeX output ------------------------------------------------ @@ -113,15 +109,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -131,8 +124,7 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'sdconfigapi.tex', 'sdconfigapi Documentation', - 'Kushal Das', 'manual'), + (master_doc, "sdconfigapi.tex", "sdconfigapi Documentation", "Kushal Das", "manual") ] @@ -140,10 +132,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'sdconfigapi', 'sdconfigapi Documentation', - [author], 1) -] +man_pages = [(master_doc, "sdconfigapi", "sdconfigapi Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- @@ -152,9 +141,15 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'sdconfigapi', 'sdconfigapi Documentation', - author, 'sdconfigapi', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "sdconfigapi", + "sdconfigapi Documentation", + author, + "sdconfigapi", + "One line description of project.", + "Miscellaneous", + ) ] @@ -163,4 +158,4 @@ # -- Options for intersphinx extension --------------------------------------- # Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/': None} +intersphinx_mapping = {"https://docs.python.org/": None} diff --git a/setup.py b/setup.py index 565403e28..f4246809d 100644 --- a/setup.py +++ b/setup.py @@ -12,15 +12,15 @@ long_description=long_description, long_description_content_type="text/markdown", install_requires=["requests", "mypy-extensions"], - python_requires='>=3.5', + python_requires=">=3.5", url="https://github.com/freedomofpress/sdclientapi", - packages=setuptools.find_packages(exclude=['docs', 'tests']), + packages=setuptools.find_packages(exclude=["docs", "tests"]), classifiers=( "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", - 'Intended Audience :: Developers', + "Intended Audience :: Developers", "Operating System :: OS Independent", ), ) From 8a422fbfe5ab85f5de6f44f2ad77cb6031277bbf Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 10 Aug 2018 14:52:01 +0530 Subject: [PATCH 036/751] Adds get and delete source using string Adds two helper function for getting and deleting source using uuid string value. --- sdclientapi/__init__.py | 28 +++++++++++++++++++++++++++- tests/test_api.py | 18 ++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index dc8075f7b..323afc4d1 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -56,6 +56,7 @@ class Submission: """ This class represents a submission object in the server. """ + def __init__(self, **kwargs) -> None: self.download_url = "" # type: str self.filename = "" # type: str @@ -88,7 +89,8 @@ class Source: """ This class represents a source object in the server. """ - def __init__(self, **kwargs): + + def __init__(self, **kwargs): self.add_star_url = "" # type: str self.interaction_count = 0 # type: int self.is_flagged = False # type: bool @@ -140,6 +142,7 @@ class API: :param totp: Current TOTP value :returns: An object of API class. """ + def __init__(self, address, username, passphrase, totp) -> None: """ Primary API class, this is the only thing which will make network call. @@ -233,6 +236,17 @@ def get_source(self, source: Source) -> Source: return Source(**data) + def get_source_from_string(self, uuid: str) -> Source: + """ + This will fetch a source from server and return it. + + :param uuid: Source UUID as string. + :returns: Source object fetched from server for the given UUID value. + """ + + s = Source(uuid=uuid) + return self.get_source(s) + def delete_source(self, source: Source) -> bool: """ This method will delete the source and collection. If the uuid @@ -262,6 +276,18 @@ def delete_source(self, source: Source) -> bool: # We should never reach here return False + def delete_source_from_string(self, uuid: str) -> bool: + """ + This method will delete the source and collection. If the uuid + is not found in the server, it will raise WrongUUIDError. + + :param uuid: Source UUID as string. + :returns: True if the operation is successful. + """ + + s = Source(uuid=uuid) + return self.delete_source(s) + def add_star(self, source: Source) -> bool: """ Adds a star to a given source. diff --git a/tests/test_api.py b/tests/test_api.py index 95df051fd..686fb39c6 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -73,6 +73,15 @@ def test_get_single_source(self): self.assertEqual(s.journalist_designation, s2.journalist_designation) self.assertEqual(s.uuid, s2.uuid) + @vcr.use_cassette("data/test-get-single-source.yml") + def test_get_single_source_from_string(self): + s = self.api.get_sources()[0] + # Now we will try to get the same source again using uuid + s2 = self.api.get_source_from_string(s.uuid) + + self.assertEqual(s.journalist_designation, s2.journalist_designation) + self.assertEqual(s.uuid, s2.uuid) + @vcr.use_cassette("data/test-failed-single-source.yml") def test_failed_single_source(self): with self.assertRaises(WrongUUIDError): @@ -114,6 +123,15 @@ def test_delete_source(self): sources = self.api.get_sources() self.assertEqual(len(sources), 1) + @vcr.use_cassette("data/test-delete-source.yml") + def test_delete_source_from_string(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.delete_source_from_string(s.uuid)) + + # Now there should be one source left + sources = self.api.get_sources() + self.assertEqual(len(sources), 1) + @vcr.use_cassette("data/test-delete-submission.yml") def test_delete_submission(self): subs = self.api.get_all_submissions() From 0b12e6f4a749e749717a3c8feb21d43e07e61b01 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 10 Aug 2018 17:20:19 +0530 Subject: [PATCH 037/751] Adds get_submission_from_string method It also adds the corresponding test cases. Note: We need both the source and submission uuid to fetch from server. --- data/test-get-submission.yml | 131 +++++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 17 ++++- tests/test_api.py | 16 +++++ 3 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 data/test-get-submission.yml diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml new file mode 100644 index 000000000..d84d905a1 --- /dev/null +++ b/data/test-get-submission.yml @@ -0,0 +1,131 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkyMzU4NiwiaWF0IjoxNTMzODk0Nzg2fQ.eyJpZCI6MX0.LGxN6cLw-icCD-nuir4jzB4l6Fw44Sv3VERh6ykPzFw] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"hard-shelled\ + \ cruet\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFttYFoBEAC1w4z46Bhg0QkgUwEVq1bvDNaayuCrLQigZbrS4T18HNSSwd1J\\\ + nkvHek0Kxv1ivqzRb3st1qlbnpDZYld9mNnCU86Lap6VOmuwR9dZaBN4Y6ckK/g16\\nTuG+o5oQoG37ZyoObX+aT17aASdR8Y092czFiesI0ypv51/MQeUeC+WCrFV1ZcwC\\\ + nZ+ywAh359VpjtfhF5zqnmtqlrvRQCJeC/1p5YuZZZ4VDLlk9/4VpnD6N9rh32CKk\\noQTG1+5sF3PP5H0yvHdOZT8T0rBx7l9e7hu7q/DJeWX+l9AA/VRqXCZly1ooWabD\\\ + nW1M4hO8C7xKlbe9kY4ZROAE43JoRYm58rP2h8NtXGJxBVlcC1eOD8c6s9Gyd0NUn\\nS3olyQu9aBI6TufenUVzdUbwYNYq7ubQTkaWkHOynYqHXELHP0Gsu8tz46bjAFTE\\\ + nSe9FbZy3H6dPQrSl1jn2sqRXAgwtboPIwe2a3380nR0KC2xBtpu/4JNfp6cfMsHo\\n0gY3fQ6j2nl0VzYlxoqgI0VYOfGVWRIhJu9mpvAtFP6240ILZZVqhkKO1wBPKMHQ\\\ + n/PmTL9XGYIlRgFwEwqpAYI9o8TbtzLqFtVUfBye9GnFnOyT4/yWHHQQ72fvopIXl\\nLhOMNF4+Bpyr1RECYxdb/XrdsiAspYJojUDMq7HikGooRMKNrSoxBl8FyQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WjJJR0lQSlhVRTdUM1NSUlNOUEgyR1RQU1E3\\nUDU2RTNGS0FNM01XTVdGUkNYM1REQVZZT0xOVFlBS1hWN1lMSUdSVTZCUTNCQUdY\\\ + nQ05LVzU1UTQ2NUZZQ0w0TFk3R1FXV1ZTQlFJWT0+iQI/BBMBCgApBQJbbWBaAhsv\\nBQkB4VFmBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ/vkdUGfshhTcjg//\\\ + ncKii6QJ8mGhCpyALWbTt9spn2aKgvdaUH1b6+jqYslbSwzq2ftoazry7oBQQJT1Z\\ngWRGYFeJ9tXDOYktS2HLK8KLW4WEB0HfzK2pCBHJvIVH+JCRXsRmNvWtcsYYZJ+y\\\ + n4Za8O9q8BPwKXjkssyIts4wDVh2AdlipcUhYRyn4OThGuKiBmRPc8UqhNjMrJMJx\\ncQ6LrraUi/1PVMd2KLC35M5MMubX9QEOEB/dljf+ocwqni/kkGHeMJCKJ7zjfG3n\\\ + ntBjqrsoOOYSKzu6m7ZxzBNSEivVqrKac9GXHmDlk0OhNOOjvompuurLbpnc2hZRQ\\n6yIrB9pIbcm4r4//vZmNyk4xGsQpl7StnepDYA/DT4tSKcq+rhLZPbu7rRudmk+Y\\\ + nWvB3aiA2vk/6LpQy/L71qqlKTVNXbBfFdu8ZvrwF0fSEI/6wN/QFdyr3G9ByuRBn\\nRo65jslrwem3+U77TrLkYCG5x/ONPyAdGshxizczUj/8Rrhh3Dtw0zyAiUgpwjVC\\\ + nN8Y5vZLP3mOphReCWdhgwT1d7xPBOZesuhfrhABTwRIWUjuHDRYtyV0g45IGrbLt\\n49pyXzHah4oOjDMeyItwVh9WGssH4CSyiqHCDMXRoi7FECKbNW+iAdiKLoFviK1E\\\ + nW02GmeDTmDWMBu1igCDfG2I/cTGaqqmDOnsBHwxOJQY=\\n=TTuP\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-10T09:52:28.368262Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions\"\ + , \n \"url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ + , \n \"uuid\": \"4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"fossilized\ + \ simpleton\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFttYGIBEAC0SAmZf+jXvCTYM79iGvD8jFgSyi4VBijvv0n99kI05QdoOKgO\\\ + nQTS52jQs8SUwVhAcp6P7ibtywtfA7kfaHU7SWCC1ITIOkGEgOH9gEeTjxt/EF/Jf\\nP6Wlu5+Bi3ZpjMdk/GhmcMOjDr7HxycCgG0UcmVq5RUCV0vQe6Bsz1cv6fakOtUZ\\\ + n7w1hoRODad9CyP4M0a48HRYqjpoVUbD/BbvamA7mOJuwV+O0SrD1w4Yp+8wU2IwZ\\n1Fd9j4S/6bzR1mFv4VaCg/Cm1yTjVsrWNfWduTeXFvJvpnyYu7u5wkIDnhxUqv4v\\\ + nhf2Uw3Z9h6IABq8vHqyol9R/Wo/o9TTcn4FyVQsf3XQh8OeylvDdkI9dKG5WHc6M\\nOf/wjg/LX83cxdDqHzqWuaMQd8B0aDuhDUSOwJuDo/eTsZhnS+iOnIsDE+Dp5cmg\\\ + nHAmfrRKX5rOFLH32eInsZ2W1x/P1XtoB51BcTWgfJpaj+SeRd/B9zjsZf84lpO/q\\nI0l/fXHUkWU8jmZ/KxBJOJ7obivszKhbDjdw6HF9nt/ijoqm5n+OMMxgXP1ENv0Q\\\ + ntZxfFGwRrEqTQ2hQ/x4G/3CK2dPlr1LJzylhacI/E7ZWkE+aWpesR5j6+hM/MFGc\\nlFoZZx6ZIkt3U7vsulicdA9l2YiJX9ZYG9l0EWw0QO4n4N5dOkl+8VZlwQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8Uk5TNFBaMjZSUzRYSVRPRkFIWFk3MlZRQU9O\\nSlhXWkxBUExWV0pSNURRMzMzQko2SEgyMlVMREhIWVBCS1dSTkozTU5IWVhWVkE0\\\ + nSkpFRzZGVDI2WkFZTkMySzQ0QjVVRVpPRE9PWT0+iQI/BBMBCgApBQJbbWBiAhsv\\nBQkB4VFeBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQJARDGLfkpFMzEBAA\\\ + nk/gL5kIT1I9zEWy1dcV1eX1EI56J7lSg3Y+SH5N2hIrBIjdFKNlP3Chj2CS29Qyt\\nnL2qH4Ww9ONt5mPe6NskF0hszoH4MqYilcNeXXfnsm3PDatPzxhVav3Ulg8eR5eB\\\ + n5VgY31g2UEVhmv6AA/BAtZdsBOugS0id1w+wEE2GLe7Ddm+w5Qsyb1X/Ee4TFi+k\\npPToWlmaWLVy9LN4711TLzeeNJ7OMfnem14KMvYGEGgYygm7E5+XqVBskX7TYh7g\\\ + nLNaJ/T47BZtx8egLb3ScY05ObBVoGkCQel8TizalElvfhmlu+tr/REovuhW8u9Rs\\ndC36zvD5R36eK3HzGmXhtCv5I36tcG5hh67Wi7uxzI1iZHW/lN4d/zzgBSEVoONV\\\ + n4LVtfNUbWQqG28RjN3rvDhP0Zl+VrPB2WXn+el+nRp5zLgCQWczWoOiTRjPlpxEC\\nG4IEJsbuU2ggiamapIKZOWS5+wVUzpfw/nltW3xsIKIijUFUtrst/yPZcvC7RafJ\\\ + nUN65U4hRXnF8h+zHv8vwjqvB5IeuWncjQ08ynqGSxV4rtU08pH3dFzaNXynu6lU9\\n68QHhEElvyffzqu/B6MSOxyfOHSx3lrHeoeG6lMDLFhsiYLRxYfh5ea6q9IGY6dR\\\ + nUn97d32Xt/Y47Ws4z6awHtKeZw+SwxuUQ2Tu0AY5WVU=\\n=H3Lz\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-10T09:52:40.480696Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/submissions\"\ + , \n \"url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44\"\ + , \n \"uuid\": \"a8c91c7b-a36d-43f8-930e-e955a77f3c44\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5409'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 09:53:07 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxMTo1MzowNyBHTVQifX0.Dk7yAw.2_Iqf7RJ732alfyY8mc6W9bPW9U; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkyMzU4NiwiaWF0IjoxNTMzODk0Nzg2fQ.eyJpZCI6MX0.LGxN6cLw-icCD-nuir4jzB4l6Fw44Sv3VERh6ykPzFw] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93/download\"\ + , \n \"filename\": \"1-hard-shelled_cruet-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ + , \n \"submission_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93\"\ + , \n \"uuid\": \"ad14ca15-9039-4c1c-8dbf-470385381f93\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/2fd63768-0f6f-4b31-9a91-348e9311f9dd/download\"\ + , \n \"filename\": \"2-hard-shelled_cruet-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ + , \n \"submission_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/2fd63768-0f6f-4b31-9a91-348e9311f9dd\"\ + , \n \"uuid\": \"2fd63768-0f6f-4b31-9a91-348e9311f9dd\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1039'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 09:53:07 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxMTo1MzowNyBHTVQifX0.Dk7yAw.2_Iqf7RJ732alfyY8mc6W9bPW9U; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkyMzU4NiwiaWF0IjoxNTMzODk0Nzg2fQ.eyJpZCI6MX0.LGxN6cLw-icCD-nuir4jzB4l6Fw44Sv3VERh6ykPzFw] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93 + response: + body: {string: "{\n \"download_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93/download\"\ + , \n \"filename\": \"1-hard-shelled_cruet-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ + , \n \"submission_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93\"\ + , \n \"uuid\": \"ad14ca15-9039-4c1c-8dbf-470385381f93\"\n}\n"} + headers: + Content-Length: ['469'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 09:53:07 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxMTo1MzowNyBHTVQifX0.Dk7yAw.2_Iqf7RJ732alfyY8mc6W9bPW9U; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 323afc4d1..fb9023224 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -365,7 +365,10 @@ def get_submission(self, submission: Submission) -> Submission: :param submission: Submission object we want to update. :returns: Updated submission object from the server. """ - url = self.server.rstrip("/") + submission.submission_url + source_uuid = submission.source_url.split("/")[-1] + url = self.server.rstrip("/") + "/api/v1/sources/{}/submissions/{}".format( + source_uuid, submission.uuid + ) try: res = requests.get(url, headers=self.auth_header) @@ -382,6 +385,18 @@ def get_submission(self, submission: Submission) -> Submission: return Submission(**data) + def get_submission_from_string(self, uuid: str, source_uuid: str) -> Submission: + """ + Returns the updated Submission object from the server. + + :param uuid: UUID of the Submission object. + :param source_uuid: UUID of the source. + :returns: Updated submission object from the server. + """ + s = Submission(uuid=uuid) + s.source_url = "/api/v1/sources/{}".format(source_uuid) + return self.get_submission(s) + def get_all_submissions(self) -> List[Submission]: """ Returns a list of Submission objects from the server. diff --git a/tests/test_api.py b/tests/test_api.py index 686fb39c6..e691d5843 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -94,6 +94,22 @@ def test_get_submissions(self): subs = self.api.get_submissions(s) self.assertEqual(len(subs), 2) + @vcr.use_cassette("data/test-get-submission.yml") + def test_get_submission(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + sub = self.api.get_submission(subs[0]) + self.assertEqual(sub.filename, subs[0].filename) + + @vcr.use_cassette("data/test-get-submission.yml") + def test_get_submission_from_string(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) + self.assertEqual(sub.filename, subs[0].filename) + @vcr.use_cassette("data/test-get-wrong-submissions.yml") def test_get_wrong_submissions(self): s = self.api.get_sources()[0] From 22d049927d6833da76a1bb7a37cb99b72a9430f9 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 10 Aug 2018 18:08:54 +0530 Subject: [PATCH 038/751] Adds delete_submission_from_string method Also we have test case for the same. We need both the source, and submission uuid string values. --- data/test-delete-submission-from-string.yml | 164 ++++++++++++++++++++ sdclientapi/__init__.py | 20 ++- tests/test_api.py | 15 ++ 3 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 data/test-delete-submission-from-string.yml diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml new file mode 100644 index 000000000..f00c79199 --- /dev/null +++ b/data/test-delete-submission-from-string.yml @@ -0,0 +1,164 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"storied kohl\"\ + , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ + n\\nmQINBFttgrMBEADJlA0VWoH1qM8ADbVb57UFAkLcmjS6Cmnipu6kAq3cuD02+cNT\\nEMIDwM30UEcN5DjAQqh6ItXa9ZTUcf5rAfzYS1oVFBIjSbQQddVxcVnHFqQhC96l\\\ + neZ0l2QywohN636BwhFn9bLFDhtOygwWzR8ekSE4Nr+XBWvJGvM4GG+huM+HPxwnf\\nI10fy0ODnVPSnN1EZjv8KojqRgcBdK6lUpP8tXBwVp+qJT4AO64J9AMwoXqGsmgn\\\ + nuMCk5K9mchpSKDrTYE5Qli1OXICfaFHafdm5RBNVCmUDxXqqgyDSUSnkwjz7/g/q\\nuzAJxgMmoy4EXpkNvMArlM10XP7w/0ijt6lrwbI1AsHQqn+FWG2fOs7wMGE0yhS+\\\ + nBu/Jjo6kGf3dkP4h5ptioUT6tgku/7wA4e4TomwI26QqXsAyjEiNvhq6x9AbqzO2\\nyzqMi/SGUGWuTDmQzESK59jJSSXWnVsVX90neeFwiuWiSniN4xhnnFvhGCTuscJF\\\ + n4w0c+JVxr58M8/YMnmXdWMSg/7Mt7xsutSy1Ym2lKbvTqtHB2GR+LSfUfTZcm3L9\\nUsGCvAwsIIrMSbagJCQJIaLDc2FhaTeIJNz8LrHQj0hElkyrenKPbVc6lSxdB2T/\\\ + nDmTuauqXIqWnqqVKPVViBi/3WdOYmr1deruND5X3LcUA9xkSfUi2gXDMkwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WEVHSERDNk9SV05QVVhWSkZLUEMyU0haWkNV\\\ + nSjNISlVWQlI1QUc2RlBJWkRRUENDU0NVNDdETUFKRU1USk5GWVFKRlZFVFVWUVdH\\nU1RPR0M2NFFDUk1YQ01ZSDYyUUJGNldOSFhYWT0+iQI/BBMBCgApBQJbbYKzAhsv\\\ + nBQkB4S8NBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIrDqYpiXlX/3fQ//\\nQ+syqKppyDKF6TF8kaNssXNaDRHm8ajQHVanXROUT8j6nj72Z+en6wnYGV5H1Gb8\\\ + nenpzmInPTMtdV0W4GdAgp+yV0/KVCsQrKBRGO0HDqnGNeBbby9qX0RUTPYwe+HGL\\nIFw0FSMMlwnSMytvh9rjBj5n3/n+YMb8MBVWGQceGvMZqjbRWcGmUpcRRsFuD36m\\\ + nIvuUhAOePw8MARr+T3PppJbUCpsM1cdB9hfeedoCgzBctRh8M3Vp7ihCQkfk9cvt\\nKkGQiQndaIaPtZi8ChX92pFkQoG+VWFEuAMoP+cVu+mpN/LpyZ1Hj16Vw+hToYd3\\\ + nPyvsMgWc1rB+tz7YHa0ZbGJCgU/armK7DHtnUQaznUPmPQtqcIMD1KFFcmb9O6pH\\neB+HMKmS6vZylYiGkLRWsmbC+m91weWMNgi5q0fu+XFYqtu66Tzaj39NUuFUUnys\\\ + n9XDd6QdQxwJmytFOjYB+7gLJn1OXOl7hzovklFY7x7YdpCKVNQ71QKqkbzM6qN13\\nEU/qLprjT2YI5WNfzU2ePHpbgpQlEOYQ2JUNFjZZ+a4ffNgGXpi7fgW3wrvsDIun\\\ + nwZPDSxzlVejxYuseCpxp9gat2coXGnNTInNHhExXXtaj7bqP7FVuya8Xec3BJ9yv\\n3KgNMRKBRy4J+AmGP5n7STAh+N8iQ3uGiIg0kzqCoxk=\\\ + n=AHZp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ + \n }, \n \"last_updated\": \"2018-08-10T12:19:00.992348Z\", \n \ + \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ + \ \"remove_star_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions\"\ + , \n \"url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ + , \n \"uuid\": \"b8764f7f-a066-4d62-8043-7dc62af021aa\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"purifying\ + \ squeezer\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFttgroBEADL18oxabIYN62ADvH5ekkCr3G7ku5EYazxS4QXc7xUWmM16dOI\\\ + n1KuLs+Dtavqh3lW9NA22B2CnQHoGiAT/4X9Jbo+PA+NktjIIChXWPj6toN/QNL+l\\n9+BM1UUImqwextlG8txLsOVIu7LB071Zvbc1DLVoyKeZKu9S93fE5aJmUvn96N6Z\\\ + ngVVgBq4o4zTGrdeGbjUZWM5eyRNmiCOMnwVXlJT3IGzfXRqgrHepn0YT7k9DGXQm\\n2kbihWWZSHAR1R7/RjI7wiqB/U/n2isM6krTLgwras+8CoymSBPPf51k86NgybHf\\\ + ndMtQXEkFpaJseAV+rdso+wDt0Ml8mB57oNhlEo3lii7+ObGZ2Y/8ug0u9TYIGl8f\\nrbo6laJBF+qyOxuEZxpiApE2WcjcLToqjYzUOm361DE2rzrGtMz2ivgCqGcCpNWI\\\ + nc42L4bCwCutiWjOWZrRPpM3TchBtNFMXPMurBKfQrEXZaaWH55DmfxN6YZAEFAaU\\nguNPRd/t7FuUU6eQJ8JU7jPZXkvMAd8ThGU6xoLKjl+cfrUN9vf0JV1ZXWiUT40d\\\ + n1dJaxHgd2US+Uqk4ZGxEzNzkkEFxnSf7VeSXxjyavVD77P3a77Bbw/N/VdHidFjH\\n0SV8W6v5PrZbWwz8kan/9wmZlW8TdmVXoyGbE/Br/nAisdBAI3M5h0jsNwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WElaUFBCTkVNNFVISUtaT1dBUzVPUVNMQTRW\\nM1dVN1RCQUZUR0xYQkUzM0tZUVA2SDJQRUpCNlVSSlpKMjY1NlpHR1VIRkJSVFVY\\\ + nRFBHVFRWQVRLWDYzVlhQTzdDUFY0WEgyU0lNWT0+iQI/BBMBCgApBQJbbYK6Ahsv\\nBQkB4S8GBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQo/sjDcjNJ2PIAg//\\\ + nTVBZHBxqFdLDq78CekwBvMKPB2ahTnYdL1SbvJGsNIblPj8gHu7t+BFLpg9XZsrC\\nOUG3OSG4BKOw4127p3C+1VzLDI0xMvG935rCUGaZQ1s3Z48IY36HNDUU9otftKU4\\\ + nGaTCmnNq40HWtLun4tWqT+kiqXGxm8Qo4nV1iCtYxhLGMzt6AuP4BVDrARXh0nQr\\nd5ltq/CcrV2Ofw3MpwDjZXAnp6QCL/l8ZwTENfzd60uF5o2QAzZZ2+zSBv14BwYm\\\ + nxj1ohk0LF7zT5JZrgu5mC/kndMXlrF8LNhj3SCZhj8DvMgQcV9iH5SpKdsSSajFH\\nC2hRHm4Ys1CZ0clRBxWjNS85YIkqAP6WbiOMsXz6+MqlR46kZG3uT9zaW0m56pQ9\\\ + nw+02kWdBy/7GgFu9Ta53Mqrnv5u7dXHjLgLZO8SxQwCee2S+GiwlUp0pGzxpnjlD\\nH9p1WUXKkbKppvXiug6VI6xzqZ7OjHh+m5Qjz6Ea+Nv1fizvsPYetoACtFQdXsAj\\\ + n352cB3Df63Pj2LwsDp1VEYWEmTSEx7YY9gwNIrXakQgRcVusEtbReHLNZadaCe6E\\nLkpf4Mod2rXLJHpO0IgfxpBTdwV479dCi7vr0ZtVzg77S8Ssaq7uKzTdp1MMjBLD\\\ + nHF1E8pexGXxe5TB1s8XqsTKxkBBxB+zzxvNFhfnieW8=\\n=T9Jm\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-10T12:19:12.147910Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions\"\ + , \n \"url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849\"\ + , \n \"uuid\": \"2caafcf4-0983-4e2a-9aba-f18146076849\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5401'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/aa641164-e646-428a-983c-fe8f7390994b/download\"\ + , \n \"filename\": \"1-storied_kohl-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ + , \n \"submission_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/aa641164-e646-428a-983c-fe8f7390994b\"\ + , \n \"uuid\": \"aa641164-e646-428a-983c-fe8f7390994b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477/download\"\ + , \n \"filename\": \"2-storied_kohl-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ + , \n \"submission_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477\"\ + , \n \"uuid\": \"4124cf62-2bc5-419b-86be-e00da5d84477\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1027'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Connection: [keep-alive] + Content-Length: ['0'] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: DELETE + uri: http://localhost:8081/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/aa641164-e646-428a-983c-fe8f7390994b + response: + body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} + headers: + Content-Length: ['38'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477/download\"\ + , \n \"filename\": \"2-storied_kohl-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ + , \n \"submission_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477\"\ + , \n \"uuid\": \"4124cf62-2bc5-419b-86be-e00da5d84477\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/a1af208a-cc47-407c-9a53-79a2ef7efe9a/download\"\ + , \n \"filename\": \"1-purifying_squeezer-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849\"\ + , \n \"submission_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/a1af208a-cc47-407c-9a53-79a2ef7efe9a\"\ + , \n \"uuid\": \"a1af208a-cc47-407c-9a53-79a2ef7efe9a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/df94fe82-c582-4118-8fa2-1b81eca738b2/download\"\ + , \n \"filename\": \"2-purifying_squeezer-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849\"\ + , \n \"submission_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/df94fe82-c582-4118-8fa2-1b81eca738b2\"\ + , \n \"uuid\": \"df94fe82-c582-4118-8fa2-1b81eca738b2\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1540'] + Content-Type: [application/json] + Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index fb9023224..081a83d87 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -430,7 +430,13 @@ def delete_submission(self, submission: Submission) -> bool: :param submission: The Submission object we want to delete in the server. :returns: True if successful, raises Error otherwise. """ - url = self.server.rstrip("/") + submission.submission_url + # Not using direct URL because this helps to use the same method + # from local submission (not fetched from server) objects. + # See the *from_string for an example. + source_uuid = submission.source_url.split("/")[-1] + url = self.server.rstrip("/") + "/api/v1/sources/{}/submissions/{}".format( + source_uuid, submission.uuid + ) try: res = requests.delete(url, headers=self.auth_header) @@ -450,6 +456,18 @@ def delete_submission(self, submission: Submission) -> bool: # We should never reach here return False + def delete_submission_from_string(self, uuid: str, source_uuid: str) -> bool: + """ + Deletes a given Submission based on uuids from the server. + + :param uuid: UUID of the Submission object. + :param source_uuid: UUID of the source. + :returns: Updated submission object from the server. + """ + s = Submission(uuid=uuid) + s.source_url = "/api/v1/sources/{}".format(source_uuid) + return self.delete_submission(s) + def download_submission(self, submission: Submission, path: str) -> Tuple[str, str]: """ Returns a tuple of sha256sum and file path for a given Submission object. This method diff --git a/tests/test_api.py b/tests/test_api.py index e691d5843..7be956076 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -160,6 +160,21 @@ def test_delete_submission(self): for s in new_subs: self.assertNotEqual(s.uuid, subs[0].uuid) + @vcr.use_cassette("data/test-delete-submission-from-string.yml") + def test_delete_submission_from_string(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + + self.assertTrue(self.api.delete_submission(subs[0])) + new_subs = self.api.get_all_submissions() + # We now should have 3 submissions + self.assertEqual(len(new_subs), 3) + + # Let us make sure that sub[0] is not there + for s in new_subs: + self.assertNotEqual(s.uuid, subs[0].uuid) + @vcr.use_cassette("data/test-get-current-user.yml") def test_get_current_user(self): user = self.api.get_current_user() From 29e9877c364b8abaa5fafd56460210d3d0ed4ccd Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 15 Aug 2018 09:58:36 -0700 Subject: [PATCH 039/751] initial commit --- .gitignore | 106 +++++++++++++++++++++++ Pipfile | 12 +++ sd-proxy.py | 67 +++++++++++++++ securedrop_proxy/__init__.py | 0 securedrop_proxy/__main__.py | 126 +++++++++++++++++++++++++++ securedrop_proxy/pipereader.py | 87 +++++++++++++++++++ securedrop_proxy/proxy.py | 150 +++++++++++++++++++++++++++++++++ securedrop_proxy/util.py | 103 ++++++++++++++++++++++ 8 files changed, 651 insertions(+) create mode 100644 .gitignore create mode 100644 Pipfile create mode 100755 sd-proxy.py create mode 100644 securedrop_proxy/__init__.py create mode 100644 securedrop_proxy/__main__.py create mode 100755 securedrop_proxy/pipereader.py create mode 100644 securedrop_proxy/proxy.py create mode 100644 securedrop_proxy/util.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..dea2de221 --- /dev/null +++ b/.gitignore @@ -0,0 +1,106 @@ +*.sqlite + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/Pipfile b/Pipfile new file mode 100644 index 000000000..7b34944ec --- /dev/null +++ b/Pipfile @@ -0,0 +1,12 @@ +[[source]] +url = "https://pypi.org/simple" +name = "pypi" +verify_ssl = true + +[requires] +python_version = "3.5" + +[packages] +furl = "*" + +[dev-packages] diff --git a/sd-proxy.py b/sd-proxy.py new file mode 100755 index 000000000..fe31d8b36 --- /dev/null +++ b/sd-proxy.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +import sys +import json +import securedrop_proxy.proxy as proxy +import uuid +import subprocess + +# "read conf" +conf = proxy.Conf() +conf.host = 'jsonplaceholder.typicode.com' +conf.scheme = 'https' +conf.port = 443 + +# instantiate response object +p = proxy.Proxy(conf) + +# timeout? + +# read from STDIN +incoming = [] +for line in sys.stdin: + incoming.append(line) + +# deserialize incoming request +client_req = None +try: + client_req = json.loads('\n'.join(incoming)) +except json.decoder.JSONDecodeError: + p.simple_error(400, 'Invalid JSON in request') + print(json.dumps(p.res.__dict__)) + sys.exit(1) + +# build request oject +req = proxy.Req() +try: + req.method = client_req['method'] + req.path_query = client_req['path_query'] +except KeyError: + p.simple_error(400, 'Missing keys in request') + print(json.dumps(p.res.__dict__)) + sys.exit(1) + +if "headers" in client_req: + req.headers = client_req['headers'] + +if "body" in client_req: + req.body = client_req['body'] + +def on_save(fh, res): + fn = str(uuid.uuid4()) + + # this will be `qvm-move...` in production + subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + + res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.headers['Content-Type'] = 'application/json' + res.body = json.dumps({'filename': fn }) + +def on_done(res): + print(json.dumps(res.__dict__)) + +# complete proxy object +p.req = req +p.on_save = on_save +p.on_done = on_done +p.proxy() diff --git a/securedrop_proxy/__init__.py b/securedrop_proxy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/securedrop_proxy/__main__.py b/securedrop_proxy/__main__.py new file mode 100644 index 000000000..6abb71d76 --- /dev/null +++ b/securedrop_proxy/__main__.py @@ -0,0 +1,126 @@ +import proxy +import json +import subprocess +import uuid + +conf = proxy.Conf() +conf.host = 'jsonplaceholder.typicode.com' +conf.scheme = 'https' +conf.port = 443 + +def on_save(fh, res): + + fn = str(uuid.uuid4()) + + # this will be `qvm-move...` in production + subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + + res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.headers['Content-Type'] = 'application/json' + res.body = json.dumps({'filename': fn }) + +# does it work at all +req = proxy.Req() +req.method = 'GET' +req.path_query = '' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, on_save) +p.proxy() + +print(p.res.status) +print(p.res.headers) +print(p.res.version) +print(p.res.body) + +# params +req = proxy.Req() +req.method = 'GET' +req.path_query = '/posts?userId=1' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, on_save) +p.proxy() + +print(p.res.status) +#print(res.headers) +print(p.res.version) +print(json.loads(p.res.body.decode())) + + +# path +req = proxy.Req() +req.method = 'GET' +req.path_query = '/posts/1' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, on_save) +p.proxy() + +print(p.res.status) # 200 +print(p.res.version) +print(json.loads(p.res.body.decode())) + + +# 404 +req = proxy.Req() +req.method = 'GET' +req.path_query = '/notfound' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, on_save) +p.proxy() + +print(p.res.status) # 404 +print(p.res.headers) +print(p.res.version) +print(p.res.body) # {} + + +# 400 bad path +req = proxy.Req() +req.method = 'GET' +req.path_query = 'http://badpath.lol/path' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, on_save) +p.proxy() + +print(p.res.status) # 400 +print(p.res.headers) +print(p.res.version) +print(p.res.body) # {'error': 'Path provided in request did not look valid'} + +# 400 no handler +req = proxy.Req() +req.method = 'GET' +req.path_query = 'http://badpath.lol/path' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, None) +p.proxy() + +print(p.res.status) # 400 +print(p.res.headers) +print(p.res.version) +print(p.res.body) # {'error': 'Request callback is not set.'} + + +# 500 proxy error (in this case, misconfiguration) +conf = proxy.Conf() +conf.host = 'jsonplaceholder.typicode.com' +conf.scheme = 'https://http' # bad +conf.port = 443 + +req = proxy.Req() +req.method = 'GET' +req.path_query = '/posts/1' +req.headers = {'Accept': 'application/json'} + +p = proxy.Proxy(conf, req, on_save) +p.proxy() + +print(p.res.status) # 500 +print(p.res.headers) +print(p.res.version) +print(p.res.body) # {'error': 'Proxy error while generating URL to request'} diff --git a/securedrop_proxy/pipereader.py b/securedrop_proxy/pipereader.py new file mode 100755 index 000000000..d7322d0dc --- /dev/null +++ b/securedrop_proxy/pipereader.py @@ -0,0 +1,87 @@ +#!/usr/bin/python + +import os +import select +import errno + +BUFFSIZE = 64 + + +class PipeReader(): + def __init__(self, pipe, cb): + self._quit = False + self.pipe = pipe + self.cb = cb + + try: + os.mkfifo(pipe) + except OSError as oe: + if oe.errno != errno.EEXIST: + raise + + def quit(self): + self._quit = True + + def read(self): + + pipe = self.pipe + cb = self.cb + + fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) + poller = select.epoll() + poller.register(fifo) + + while not self._quit: + events = poller.poll(timeout=1) + for fileno, event in events: + if event & select.EPOLLIN: + + # read at most BUFSIZE bytes from the fifo + data = os.read(fifo, BUFFSIZE) + + # in this application, we never want to read more + # than BUFSIZE bytes. writes from our client + # should be atomic up to PIPE_BUF byes, which is + # greater than our BUF_SIZE (see + # https://unix.stackexchange.com/questions/68146/what-are-guarantees-for-concurrent-writes-into-a-named-pipe). So, # noqa: E501 + # we can immediately close this filehandle + + poller.unregister(fileno) + os.close(fileno) + cb(self, data.rstrip(), None) + fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) + poller.register(fifo) + + elif event & select.EPOLLHUP: + poller.unregister(fileno) + os.close(fileno) + + fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) + poller.register(fifo) + + elif event & select.EPOLLERR: + print "Error while polling." + cb(None, "POLLING_ERROR") + poller.unregister(fileno) + os.close(fileno) + fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) + print("FIFO opened {}".format(fifo)) + poller.register(fifo) + elif event: + print "Totally unhandled event: {}".format(event) + cb(None, "POLLING_ERROR") + poller.unregister(fileno) + os.close(fileno) + fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) + poller.register(fifo) + + +def reporter(poller, msg, err): + print "Got a message: {} (error: {})".format(msg.rstrip(), err) + if msg.rstrip() == "quit": + poller.quit() + + +if __name__ == '__main__': + reader = PipeReader("mypipe", reporter) + reader.read() diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py new file mode 100644 index 000000000..9a14bf913 --- /dev/null +++ b/securedrop_proxy/proxy.py @@ -0,0 +1,150 @@ +import requests +import furl +import securedrop_proxy.util as util +import tempfile +import json + +class Req: + + def __init__(self): + self.method = '' + self.path_query = '' + self.body = None + self.headers = None + +class Response: + + def __init__(self, status): + self.status = status + self.body = None + self.headers = None + self.version = "0.1.1" + +class Conf: + scheme = '' + host = '' + port = 0 + +class Proxy: + + @staticmethod + def _on_done(res): + print(json.dumps(res.__dict__)) + + def __init__(self, conf, req=Req(), on_save=None, on_done=None): + self.conf = conf + self.req = req + self.res = None + self.on_save = on_save + if on_done is not None: + self.on_done = on_done + else: + self.on_done = self._on_done + + self._prepared_request = None + + @staticmethod + def valid_path(path): + u = furl.furl(path) + + if u.host is not None: + return False + return True + + def simple_error(self, status, err): + res = Response(status) + res.body = json.dumps({"error": err}) + res.headers = {"Content-Type": "application/json"} + + self.res = res + + def prep_request(self): + + scheme = self.conf.scheme + host = self.conf.host + port = self.conf.port + + path = self.req.path_query + method = self.req.method + + if not self.valid_path(path): + self.simple_error(400, 'Path provided in request did not look valid') + raise ValueError('Path provided was invalid') + + try: + url = furl.furl("{}://{}:{}/{}".format(scheme, host, port, path)) + except Exception as e: + + self.simple_error(500, 'Proxy error while generating URL to request') + # XXX is this wrong? + raise ValueError('Error generating URL from provided values') + + url.path.normalize() + + preq = requests.Request(method, url.url) + preq.stream = True + preq.headers = self.req.headers + preq.data = self.req.body + prep = preq.prepare() + + self._prepared_request = prep + + def handle_json_response(self): + + res = Response(self._presp.status_code) + + res.headers = self._presp.headers + res.body = self._presp.content.decode() + + self.res = res + + def handle_non_json_response(self): + + res = Response(self._presp.status_code) + + fh = tempfile.NamedTemporaryFile() + + for c in self._presp.iter_content(10): + fh.write(c) + + res.headers = self._presp.headers + + self.on_save(fh, res) + + + self.res = res + + def handle_response(self): + + ctype = util.parse_options_header(self._presp.headers['content-type']) + + if ctype[0] == "application/json": + self.handle_json_response() + else: + self.handle_non_json_response() + + # headers is a Requests class which doesn't JSON serialize. + # coerce it into a normal dict so it will + self.res.headers = self.res.headers.__dict__ + + def proxy(self): + + try: + if self.on_save is None: + self.simple_error(400, 'Request callback is not set.') + + raise ValueError('Request callback is not set.') + self.prep_request() + s = requests.Session() + self._presp = s.send(self._prepared_request) + self.handle_response() + + except ValueError: + + # effectively a 4xx error + # we have set self.response to indicate an error + pass + + # catch server errors here, handle maybe-differently from ValueErrors... + + self.on_done(self.res) diff --git a/securedrop_proxy/util.py b/securedrop_proxy/util.py new file mode 100644 index 000000000..cdb2a9cbf --- /dev/null +++ b/securedrop_proxy/util.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +import re + +# with thanks to https://github.com/pallets/werkzeug/blob/master/werkzeug/http.py +_option_header_piece_re = re.compile(r''' + ;\s* + (?P + "[^"\\]*(?:\\.[^"\\]*)*" # quoted string + | + [^\s;,=*]+ # token + ) + \s* + (?: # optionally followed by =value + (?: # equals sign, possibly with encoding + \*\s*=\s* # * indicates extended notation + (?P[^\s]+?) + '(?P[^\s]*?)' + | + =\s* # basic notation + ) + (?P + "[^"\\]*(?:\\.[^"\\]*)*" # quoted string + | + [^;,]+ # token + )? + )? + \s* +''', flags=re.VERBOSE) + +_option_header_start_mime_type = re.compile(r',\s*([^;,\s]+)([;,]\s*.+)?') + +def unquote_header_value(value, is_filename=False): + r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). + This does not use the real unquoting but what browsers are actually + using for quoting. + .. versionadded:: 0.5 + :param value: the header value to unquote. + """ + if value and value[0] == value[-1] == '"': + # this is not the real unquoting, but fixing this so that the + # RFC is met will result in bugs with internet explorer and + # probably some other browsers as well. IE for example is + # uploading files with "C:\foo\bar.txt" as filename + value = value[1:-1] + + # if this is a filename and the starting characters look like + # a UNC path, then just return the value without quotes. Using the + # replace sequence below on a UNC path has the effect of turning + # the leading double slash into a single slash and then + # _fix_ie_filename() doesn't work correctly. See #458. + if not is_filename or value[:2] != '\\\\': + return value.replace('\\\\', '\\').replace('\\"', '"') + return value + +def parse_options_header(value, multiple=False): + """Parse a ``Content-Type`` like header into a tuple with the content + type and the options: + >>> parse_options_header('text/html; charset=utf8') + ('text/html', {'charset': 'utf8'}) + This should not be used to parse ``Cache-Control`` like headers that use + a slightly different format. For these headers use the + :func:`parse_dict_header` function. + .. versionadded:: 0.5 + :param value: the header to parse. + :param multiple: Whether try to parse and return multiple MIME types + :return: (mimetype, options) or (mimetype, options, mimetype, options, …) + if multiple=True + """ + if not value: + return '', {} + + result = [] + + value = "," + value.replace("\n", ",") + while value: + match = _option_header_start_mime_type.match(value) + if not match: + break + result.append(match.group(1)) # mimetype + options = {} + # Parse options + rest = match.group(2) + while rest: + optmatch = _option_header_piece_re.match(rest) + if not optmatch: + break + option, encoding, _, option_value = optmatch.groups() + option = unquote_header_value(option) + if option_value is not None: + option_value = unquote_header_value( + option_value, + option == 'filename') + if encoding is not None: + option_value = _unquote(option_value).decode(encoding) + options[option] = option_value + rest = rest[optmatch.end():] + result.append(options) + if multiple is False: + return tuple(result) + value = rest + + return tuple(result) if result else ('', {}) From 6ed328079e822a9f838237cd5ed16345257773ba Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 15 Aug 2018 21:04:58 -0700 Subject: [PATCH 040/751] Real config, better error handling --- Pipfile | 1 + config-example.yaml | 5 +++ examples/bad.json | 2 ++ examples/html.json | 2 ++ examples/posts.json | 2 ++ sd-proxy.py | 66 +++++++++++++++++++++++++++++--------- securedrop_proxy/config.py | 46 ++++++++++++++++++++++++++ securedrop_proxy/proxy.py | 14 +++----- 8 files changed, 113 insertions(+), 25 deletions(-) create mode 100644 config-example.yaml create mode 100644 examples/bad.json create mode 100644 examples/html.json create mode 100644 examples/posts.json create mode 100644 securedrop_proxy/config.py diff --git a/Pipfile b/Pipfile index 7b34944ec..8adc1e626 100644 --- a/Pipfile +++ b/Pipfile @@ -8,5 +8,6 @@ python_version = "3.5" [packages] furl = "*" +pyyaml = "*" [dev-packages] diff --git a/config-example.yaml b/config-example.yaml new file mode 100644 index 000000000..282052a86 --- /dev/null +++ b/config-example.yaml @@ -0,0 +1,5 @@ +host: jsonplaceholder.typicode.com +scheme: https +port: 443 +target_vm: compost +dev: False diff --git a/examples/bad.json b/examples/bad.json new file mode 100644 index 000000000..141fce1e4 --- /dev/null +++ b/examples/bad.json @@ -0,0 +1,2 @@ +"foo": "bar", + "baz": "bliff" } diff --git a/examples/html.json b/examples/html.json new file mode 100644 index 000000000..fa04743d3 --- /dev/null +++ b/examples/html.json @@ -0,0 +1,2 @@ +{ "method": "GET", + "path_query": "" } diff --git a/examples/posts.json b/examples/posts.json new file mode 100644 index 000000000..37c736c59 --- /dev/null +++ b/examples/posts.json @@ -0,0 +1,2 @@ +{ "method": "GET", + "path_query": "/posts?userId=1" } diff --git a/sd-proxy.py b/sd-proxy.py index fe31d8b36..523945cfb 100755 --- a/sd-proxy.py +++ b/sd-proxy.py @@ -1,23 +1,41 @@ #!/usr/bin/env python3 +# The sd-proxy RPC script triggered by qubes RPC. + +# This script is executed by `/etc/qubes-rpc/sd-proxy`. It must be +# called with exactly one argument: the path to its config file. See +# the README for configuration options. + import sys import json import securedrop_proxy.proxy as proxy import uuid import subprocess +import securedrop_proxy.config as config + +# a fresh, new proxy object +p = proxy.Proxy() -# "read conf" -conf = proxy.Conf() -conf.host = 'jsonplaceholder.typicode.com' -conf.scheme = 'https' -conf.port = 443 +# set up an error handler early, so we can use it during +# configuration, etc +def err_on_done(res): + print(json.dumps(res.__dict__)) + sys.exit(1) -# instantiate response object -p = proxy.Proxy(conf) +p.on_done = err_on_done -# timeout? +# path to config file must be at argv[1] +if len(sys.argv) != 2: + p.simple_error(500, 'sd-proxy script not called with path to configuration file') + p.on_done(p.res) + print(json.dumps(p.res.__dict__)) -# read from STDIN +# read config. `read_conf` will call `p.on_done` if there is a config +# problem, and will return a Conf object on success. +conf_path = sys.argv[1] +p.conf = config.read_conf(conf_path, p) + +# read user request from STDIN incoming = [] for line in sys.stdin: incoming.append(line) @@ -28,8 +46,7 @@ client_req = json.loads('\n'.join(incoming)) except json.decoder.JSONDecodeError: p.simple_error(400, 'Invalid JSON in request') - print(json.dumps(p.res.__dict__)) - sys.exit(1) + p.on_done(p.res) # build request oject req = proxy.Req() @@ -38,8 +55,7 @@ req.path_query = client_req['path_query'] except KeyError: p.simple_error(400, 'Missing keys in request') - print(json.dumps(p.res.__dict__)) - sys.exit(1) + p.on_done(p.res) if "headers" in client_req: req.headers = client_req['headers'] @@ -47,16 +63,36 @@ if "body" in client_req: req.body = client_req['body'] +# callback for handling non-JSON content. in production-like +# environments, we want to call `qvm-move-to-vm` (and expressly not +# `qvm-move`, since we want to include the destination VM name) to +# move the content to the target VM. for development and testing, we +# keep the file on the local VM. +# +# In any case, this callback mutates the given result object (in +# `res`) to include the name of the new file, or to indicate errors. def on_save(fh, res): fn = str(uuid.uuid4()) - # this will be `qvm-move...` in production - subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + try: + if p.conf.dev is True: + subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + else: + subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + subprocess.run(['qvm-move-to-vm', p.conf.target_vm, "/tmp/{}".format(fn)]) + except Exception: + res.status = 500 + res.headers['Content-Type'] = 'application/json' + res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.body = json.dumps({"error": "Unhandled error while handling non-JSON content, sorry"}) + return res.headers['X-Origin-Content-Type'] = res.headers['content-type'] res.headers['Content-Type'] = 'application/json' res.body = json.dumps({'filename': fn }) +# new on_done handler (which, in practice, is largely like the early +# one) def on_done(res): print(json.dumps(res.__dict__)) diff --git a/securedrop_proxy/config.py b/securedrop_proxy/config.py new file mode 100644 index 000000000..e5c133250 --- /dev/null +++ b/securedrop_proxy/config.py @@ -0,0 +1,46 @@ +import os +import yaml + +class Conf: + scheme = '' + host = '' + port = 0 + dev = False + +def read_conf(conf_path, p): + + if not os.path.isfile(conf_path): + p.simple_error(500, 'Configuration file does not exist at {}'.format(conf_path)) + p.on_done(p.res) + + try: + fh = open(conf_path, 'r') + conf_in = yaml.load(fh) + except yaml.YAMLError: + p.simple_error(500, 'YAML syntax error while reading configuration file {}'.format(conf_path)) + p.on_done(p.res) + except Exception: + p.simple_error(500, 'Error while opening or reading configuration file {}'.format(conf_path)) + p.on_done(p.res) + + req_conf_keys = set(('host','scheme','port')) + missing_keys = req_conf_keys - set(conf_in.keys()) + if len(missing_keys) > 0: + p.simple_error(500, 'Configuration file missing required keys: {}'.format(missing_keys)) + p.on_done(p.res) + + c = Conf() + c.host = conf_in['host'] + c.scheme = conf_in['scheme'] + c.port = conf_in['port'] + + if 'dev' in conf_in and conf_in['dev'] is True: + c.dev = True + else: + if 'target_vm' not in conf_in: + p.simple_error(500, 'Configuration file missing `target_vm` key, which is required when not in development mode') + p.on_done(p.res) + + c.target_vm = conf_in['target_vm'] + + return c diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 9a14bf913..9ffc264d9 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -20,18 +20,13 @@ def __init__(self, status): self.headers = None self.version = "0.1.1" -class Conf: - scheme = '' - host = '' - port = 0 - class Proxy: @staticmethod def _on_done(res): print(json.dumps(res.__dict__)) - def __init__(self, conf, req=Req(), on_save=None, on_done=None): + def __init__(self, conf=None, req=Req(), on_save=None, on_done=None): self.conf = conf self.req = req self.res = None @@ -76,7 +71,6 @@ def prep_request(self): except Exception as e: self.simple_error(500, 'Proxy error while generating URL to request') - # XXX is this wrong? raise ValueError('Error generating URL from provided values') url.path.normalize() @@ -111,7 +105,6 @@ def handle_non_json_response(self): self.on_save(fh, res) - self.res = res def handle_response(self): @@ -132,8 +125,8 @@ def proxy(self): try: if self.on_save is None: self.simple_error(400, 'Request callback is not set.') - raise ValueError('Request callback is not set.') + self.prep_request() s = requests.Session() self._presp = s.send(self._prepared_request) @@ -145,6 +138,7 @@ def proxy(self): # we have set self.response to indicate an error pass - # catch server errors here, handle maybe-differently from ValueErrors... + # catch server errors here, handle maybe-differently from + # ValueErrors... self.on_done(self.res) From df6490d28c67f56584968fedf0a506f333785eed Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 15 Aug 2018 21:29:19 -0700 Subject: [PATCH 041/751] Adds README --- README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..89f46fd44 --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +## securedrop workstation proxy + +This implements a Qubes RPC <-> HTTP proxy, used to forward requests +from the [securedrop workstation +client](https://github.com/freedomofpress/securedrop-client) to the +[securedrop server](https://github.com/freedomofpress/securedrop). + +### try it out + +The proxy works by reading a JSON object from STDIN, generating an +HTTP request from the JSON it's read, executing that request, then +writing to STDOUT a JSON object which represents the remote server's +response. For discussion about the shape of the request and response +objects, see +https://github.com/freedomofpress/securedrop-workstation/issues/107. + +#### install requirements + +This is still development code, and not ready for integration with the +rest of the securedrop-workstation project. That said, it is ready to +be poked at tested. + +To try the proxy script, first use `pipenv` to create an environment +and install requirements. In the root of the project directoy, run + + pipenv install + +#### configuration + +The proxy script must be run with the path to its configuration file +as its first argument. This repo includes an example configuration +file, at `config-example.yaml`. Configuration consists of the +following values: + + * host: the hostname of the remote server. must be set. + * port: the port the request should be sent to. must be set. + * scheme: http or https. must be set. + * dev: a boolean- True indicates we're running in development mode, any other value (or not set) indicates we're running in production. See below for what that means. + * target_vm: the name of the VM we should `qvm-move` non-JSON responses to. must be set if dev is not True + + +#### dev vs prod + +Configuration includes a "dev" attribute. At this point, the only +difference between dev and production modes is how non-JSON responses +are handled. In prod mode, the content is saved to a local file, then +moved (via `qvm-move`) to the VM indicated in `target_vm`. In dev +mode, the file is not moved off the VM, but is saved as a temporary +file in `/tmp`. In both cases, the response written to STDOUT includes +the name of the new file. + +#### running + +The following commands can be used to demonstrate the proxy. + +This demonstrates proxying a request which has an `application/json` response: + + $ cat examples/posts.json | ./sd-proxy.py ./config-example.yaml + +This demonstrates proxying a request which has a `text/html` response +and thus is saved to a temp file. The name of the temp file is +included in the result printed to STDOUT- in dev mode, the file can be +read at that name under `/tmp`. + + $ cat examples/html.json | ./sd-proxy.py ./config-example.yaml + +Finally, this demonstrates some error handling. The request contains +invalid JSON. The proxy detects that, and prints an error message +(still a valid proxy response). + + $ cat examples/bad.json | ./sd-proxy.py ./config-example.yaml From c84ca14dcab42aad3119ab04f6af587e048e1810 Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 15 Aug 2018 22:44:32 -0700 Subject: [PATCH 042/751] readme --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 89f46fd44..84e657abc 100644 --- a/README.md +++ b/README.md @@ -8,20 +8,20 @@ client](https://github.com/freedomofpress/securedrop-client) to the ### try it out The proxy works by reading a JSON object from STDIN, generating an -HTTP request from the JSON it's read, executing that request, then -writing to STDOUT a JSON object which represents the remote server's -response. For discussion about the shape of the request and response -objects, see +HTTP request from that JSON, making that request against the remote +server, then writing a JSON object which represents the remote +server's response to STDOUT. For discussion about the shape of the +request and response objects, see https://github.com/freedomofpress/securedrop-workstation/issues/107. -#### install requirements +This is still development code, not quite ready for integration with the +rest of the securedrop-workstation project. However, it is ready to +be poked at and demonstrated. -This is still development code, and not ready for integration with the -rest of the securedrop-workstation project. That said, it is ready to -be poked at tested. +#### install requirements To try the proxy script, first use `pipenv` to create an environment -and install requirements. In the root of the project directoy, run +and install requirements. In the root of the project directory, run pipenv install @@ -32,11 +32,11 @@ as its first argument. This repo includes an example configuration file, at `config-example.yaml`. Configuration consists of the following values: - * host: the hostname of the remote server. must be set. - * port: the port the request should be sent to. must be set. - * scheme: http or https. must be set. - * dev: a boolean- True indicates we're running in development mode, any other value (or not set) indicates we're running in production. See below for what that means. - * target_vm: the name of the VM we should `qvm-move` non-JSON responses to. must be set if dev is not True +- `host` - The hostname of the remote server. Must be set. +- `port` - The port the request should be sent to. Must be set. +- `scheme` - `http` or `https`. Must be set. +- `dev` - A boolean, where `True` indicates we're running in development mode, any other value (or not set) indicates we're running in production. See below for what that means. +- `target_vm` - The name of the VM we should `qvm-move` non-JSON responses to. Must be set if dev is not True. #### dev vs prod @@ -44,7 +44,7 @@ following values: Configuration includes a "dev" attribute. At this point, the only difference between dev and production modes is how non-JSON responses are handled. In prod mode, the content is saved to a local file, then -moved (via `qvm-move`) to the VM indicated in `target_vm`. In dev +moved (via `qvm-move`) to the VM indicated by `target_vm`. In dev mode, the file is not moved off the VM, but is saved as a temporary file in `/tmp`. In both cases, the response written to STDOUT includes the name of the new file. From 423b60d20499dce6ff0c356224268d0c22bebc74 Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 15 Aug 2018 22:57:40 -0700 Subject: [PATCH 043/751] minor cleanup --- sd-proxy.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/sd-proxy.py b/sd-proxy.py index 523945cfb..77eedde29 100755 --- a/sd-proxy.py +++ b/sd-proxy.py @@ -28,7 +28,6 @@ def err_on_done(res): if len(sys.argv) != 2: p.simple_error(500, 'sd-proxy script not called with path to configuration file') p.on_done(p.res) - print(json.dumps(p.res.__dict__)) # read config. `read_conf` will call `p.on_done` if there is a config # problem, and will return a Conf object on success. @@ -75,10 +74,8 @@ def on_save(fh, res): fn = str(uuid.uuid4()) try: - if p.conf.dev is True: - subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) - else: - subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + if p.conf.dev is not True: subprocess.run(['qvm-move-to-vm', p.conf.target_vm, "/tmp/{}".format(fn)]) except Exception: res.status = 500 @@ -91,8 +88,7 @@ def on_save(fh, res): res.headers['Content-Type'] = 'application/json' res.body = json.dumps({'filename': fn }) -# new on_done handler (which, in practice, is largely like the early -# one) +# new on_done handler def on_done(res): print(json.dumps(res.__dict__)) From 0aca067f92da6d5dd9d34213d40d3d7bc43b60f7 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 12:07:46 -0700 Subject: [PATCH 044/751] Unit tests: Add initial unit tests --- tests/__init__.py | 0 tests/test_config.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/test_config.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 000000000..636e13510 --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,34 @@ +from io import StringIO +import json +import sys +import unittest + +from securedrop_proxy import proxy +from securedrop_proxy import config + + +class TestConfig(unittest.TestCase): + def setUp(self): + self.p = proxy.Proxy() + + def err_on_done(res): + print(json.dumps(res.__dict__)) + sys.exit(1) + + self.p.on_done = err_on_done + + def test_config_file_does_not_exist(self): + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + with self.assertRaises(SystemExit): + config.read_conf('not/a/real/path', self.p) + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + assert response['status'] == 500 + assert "Configuration file does not exist" in response['body'] + assert response['headers']['Content-Type'] == 'application/json' From 61232f0258eb6350af7c15a46f618521025e761f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 12:09:27 -0700 Subject: [PATCH 045/751] CI: Install requirements and run unit tests --- .circleci/config.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..3f0153f37 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,13 @@ +version: 2 +jobs: + build: + docker: + - image: circleci/python:3.5 + steps: + - checkout + + - run: + name: Install requirements and run tests + command: | + pipenv install --dev + pipenv run python -m unittest From 73b2c32601dcfc29a1c127d084427f29694b9fef Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 13:07:36 -0700 Subject: [PATCH 046/751] CI: Run tests in verbose mode --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3f0153f37..5fdb0ed55 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,4 +10,4 @@ jobs: name: Install requirements and run tests command: | pipenv install --dev - pipenv run python -m unittest + pipenv run python -m unittest -v From 2e1af3965072526df36c4e690ebb1ae88e167a43 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 13:39:25 -0700 Subject: [PATCH 047/751] Requirements: Add requests to Pipfile --- Pipfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Pipfile b/Pipfile index 8adc1e626..b65758a89 100644 --- a/Pipfile +++ b/Pipfile @@ -9,5 +9,6 @@ python_version = "3.5" [packages] furl = "*" pyyaml = "*" +requests = "*" [dev-packages] From ca46c3bc9bc1a98de20a7e83be7e91582ad89f05 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 13:43:03 -0700 Subject: [PATCH 048/751] README: Add Circle CI badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 84e657abc..c27419cc6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ## securedrop workstation proxy +[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-proxy.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-proxy) + This implements a Qubes RPC <-> HTTP proxy, used to forward requests from the [securedrop workstation client](https://github.com/freedomofpress/securedrop-client) to the From 56d01540800f47a7aa5b2a7178224ff8fa581c42 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 14:12:57 -0700 Subject: [PATCH 049/751] Unit tests: No callback should generate 400, basic functionality --- tests/test_proxy.py | 55 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tests/test_proxy.py diff --git a/tests/test_proxy.py b/tests/test_proxy.py new file mode 100644 index 000000000..e4f85a1f2 --- /dev/null +++ b/tests/test_proxy.py @@ -0,0 +1,55 @@ +import json +import subprocess +import unittest +import uuid + +from securedrop_proxy import proxy +from securedrop_proxy import config + + +class TestProxy(unittest.TestCase): + def setUp(self): + self.conf = config.Conf() + self.conf.host = 'jsonplaceholder.typicode.com' + self.conf.scheme = 'https' + self.conf.port = 443 + + def on_save(self, fh, res): + + self.fn = str(uuid.uuid4()) + + # this will be `qvm-move...` in production + subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) + + res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.headers['Content-Type'] = 'application/json' + res.body = json.dumps({'filename': self.fn }) + + def test_400_if_callback_not_set(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy() + p.proxy() + + assert p.res.status == 400 + + def test_proxy_basic_functionality(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req, self.on_save) + p.proxy() + + assert p.res.status == 200 + assert p.res.body == json.dumps({'filename': self.fn }) + + # This is the way to verify the 'content-type' header + assert p.res.headers['_store']['content-type'][1] == 'application/json' + + # But I want to do this + # assert p.res.headers['Content-Type'] == 'application/json' From 02992d7b69ad6a82f4191c417e512d53eb21502b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 14:18:54 -0700 Subject: [PATCH 050/751] Unit tests: Add VCR to mock requests/responses --- Pipfile | 1 + fixtures/basic_proxy_functionality.yaml | 124 ++++++++++++++++++++++++ tests/test_proxy.py | 2 + 3 files changed, 127 insertions(+) create mode 100644 fixtures/basic_proxy_functionality.yaml diff --git a/Pipfile b/Pipfile index b65758a89..5d761889d 100644 --- a/Pipfile +++ b/Pipfile @@ -12,3 +12,4 @@ pyyaml = "*" requests = "*" [dev-packages] +vcrpy = "*" diff --git a/fixtures/basic_proxy_functionality.yaml b/fixtures/basic_proxy_functionality.yaml new file mode 100644 index 000000000..41b466bc9 --- /dev/null +++ b/fixtures/basic_proxy_functionality.yaml @@ -0,0 +1,124 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + method: GET + uri: https://jsonplaceholder.typicode.com/ + response: + body: {string: "\n\n\n\n\n\n\n\n\nJSONPlaceholder + - Fake online REST API for developers\n\n\n\n\n
\n\n
\n

\n{\nJSON\n:\nPlaceholder\n}\n

\n

\nFake + Online REST API for Testing and Prototyping\n
Serving ~200 millions API + requests per month\n

\n

\nPowered by\nJSON + Server\nand\nLowDB\n

\n
\n\n
\n

Sponsors \U0001F64F

\n

\n\n\n\n

\n

\n[Become a sponsor]\n

\n
\n\n
\n
\n\n

Intro

\n

\nJSONPlaceholder is a + free online REST service that you can use whenever you need some fake data.\n
It's + great for tutorials, testing new libraries, sharing code examples, ...\n

\n\n

Example

\n

\nRun + this code in a console or from anywhere. Both\n

\n
fetch('https://jsonplaceholder.typicode.com/todos/1')\n
+        \ .then(response => response.json())\n  .then(json => console.log(json))\n
\n

\n\nAwesome + \U0001F942\n

\n
\n

\nTip + you can use\n\nhttp\n or\n\nhttps\n when making requests to + JSONPlaceholder.\n

\n\n

Resources

\n

\nJSONPlaceholder comes with + a set of common resources.\n

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n/posts\n100 posts
\n/comments\n500 comments
\n/albums\n100 albums
\n/photos\n5000 photos
\n/todos\n200 todos
\n/users\n10 users
\n

\nNote + resources have relations. For example:\nposts have many\ncomments,\nalbums + have many\nphotos, ...\n

\n\n

Routes

\n

\nAll HTTP methods + are supported.\n

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
GET\n/posts\n
GET\n/posts/1\n
GET\n/posts/1/comments\n
GET\n/comments?postId=1\n
GET\n/posts?userId=1\n
POST/posts
PUT/posts/1
PATCH/posts/1
DELETE/posts/1
\n

\nNote + you can view detailed examples\n\nhere\n\n

\n\n

Use + your own data

\n

\n\nJSON + Server\n powers this website. You can use it to create the same + fake API in less than\n30 seconds with your own data.\n

\n
npm install json-server
\n

You can also try\nMy JSON Server free service.

\n
\n
\n\n
\n

\nCoded + and built with \u2764\uFE0F by\ntypicode\n

\n

Source + code available on\nGitHub\n

\n

\n\n\n

\n
\n\n\n\n\n\n"} + headers: + Access-Control-Allow-Credentials: ['true'] + CF-Cache-Status: [HIT] + CF-RAY: [44b6eed6eeb06c7c-SJC] + Cache-Control: ['public, max-age=14400'] + Connection: [keep-alive] + Content-Type: [text/html; charset=UTF-8] + Date: ['Thu, 16 Aug 2018 21:18:21 GMT'] + Expect-CT: ['max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"'] + Expires: ['Fri, 17 Aug 2018 01:18:21 GMT'] + Last-Modified: ['Sun, 29 Jul 2018 21:56:24 GMT'] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d2298f2ad2272eaf0907e88029489f22c1534454301; expires=Fri, + 16-Aug-19 21:18:21 GMT; path=/; domain=.typicode.com; HttpOnly'] + Vary: ['Origin, Accept-Encoding'] + Via: [1.1 vegur] + X-Powered-By: [Express] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/test_proxy.py b/tests/test_proxy.py index e4f85a1f2..19688ea43 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -1,5 +1,6 @@ import json import subprocess +import vcr import unittest import uuid @@ -36,6 +37,7 @@ def test_400_if_callback_not_set(self): assert p.res.status == 400 + @vcr.use_cassette('fixtures/basic_proxy_functionality.yaml') def test_proxy_basic_functionality(self): req = proxy.Req() req.method = 'GET' From a6d0dee399c6a59514f773def18f932ed4358631 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 14:20:29 -0700 Subject: [PATCH 051/751] CI: Check Python dependencies for CVEs --- .circleci/config.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5fdb0ed55..f752adb5b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,3 +11,8 @@ jobs: command: | pipenv install --dev pipenv run python -m unittest -v + + - run: + name: Check Python dependencies for CVEs + command: | + pipenv check From 6947ed68365f38c17a024c3d2d25115ac7494967 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 15:38:58 -0700 Subject: [PATCH 052/751] Remove now unnecessary pipereader.py --- securedrop_proxy/pipereader.py | 87 ---------------------------------- 1 file changed, 87 deletions(-) delete mode 100755 securedrop_proxy/pipereader.py diff --git a/securedrop_proxy/pipereader.py b/securedrop_proxy/pipereader.py deleted file mode 100755 index d7322d0dc..000000000 --- a/securedrop_proxy/pipereader.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/python - -import os -import select -import errno - -BUFFSIZE = 64 - - -class PipeReader(): - def __init__(self, pipe, cb): - self._quit = False - self.pipe = pipe - self.cb = cb - - try: - os.mkfifo(pipe) - except OSError as oe: - if oe.errno != errno.EEXIST: - raise - - def quit(self): - self._quit = True - - def read(self): - - pipe = self.pipe - cb = self.cb - - fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) - poller = select.epoll() - poller.register(fifo) - - while not self._quit: - events = poller.poll(timeout=1) - for fileno, event in events: - if event & select.EPOLLIN: - - # read at most BUFSIZE bytes from the fifo - data = os.read(fifo, BUFFSIZE) - - # in this application, we never want to read more - # than BUFSIZE bytes. writes from our client - # should be atomic up to PIPE_BUF byes, which is - # greater than our BUF_SIZE (see - # https://unix.stackexchange.com/questions/68146/what-are-guarantees-for-concurrent-writes-into-a-named-pipe). So, # noqa: E501 - # we can immediately close this filehandle - - poller.unregister(fileno) - os.close(fileno) - cb(self, data.rstrip(), None) - fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) - poller.register(fifo) - - elif event & select.EPOLLHUP: - poller.unregister(fileno) - os.close(fileno) - - fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) - poller.register(fifo) - - elif event & select.EPOLLERR: - print "Error while polling." - cb(None, "POLLING_ERROR") - poller.unregister(fileno) - os.close(fileno) - fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) - print("FIFO opened {}".format(fifo)) - poller.register(fifo) - elif event: - print "Totally unhandled event: {}".format(event) - cb(None, "POLLING_ERROR") - poller.unregister(fileno) - os.close(fileno) - fifo = os.open(pipe, os.O_RDONLY | os.O_NONBLOCK) - poller.register(fifo) - - -def reporter(poller, msg, err): - print "Got a message: {} (error: {})".format(msg.rstrip(), err) - if msg.rstrip() == "quit": - poller.quit() - - -if __name__ == '__main__': - reader = PipeReader("mypipe", reporter) - reader.read() From 730673f574e00db59857f9cd08974f7665ca75be Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 16:01:08 -0700 Subject: [PATCH 053/751] Move callbacks and main function into securedrop_proxy package This is done for testability: the code in sd-proxy.py now just uses the main function and callbacks which are in the package so they can be unit tested. --- sd-proxy.py | 68 +++-------------------------------- securedrop_proxy/callbacks.py | 37 +++++++++++++++++++ securedrop_proxy/main.py | 35 ++++++++++++++++++ 3 files changed, 77 insertions(+), 63 deletions(-) create mode 100644 securedrop_proxy/callbacks.py create mode 100644 securedrop_proxy/main.py diff --git a/sd-proxy.py b/sd-proxy.py index 77eedde29..5d01b098d 100755 --- a/sd-proxy.py +++ b/sd-proxy.py @@ -12,17 +12,15 @@ import uuid import subprocess import securedrop_proxy.config as config +import securedrop_proxy.callbacks as callbacks +import securedrop_proxy.main as main # a fresh, new proxy object p = proxy.Proxy() # set up an error handler early, so we can use it during # configuration, etc -def err_on_done(res): - print(json.dumps(res.__dict__)) - sys.exit(1) - -p.on_done = err_on_done +p.on_done = callbacks.err_on_done # path to config file must be at argv[1] if len(sys.argv) != 2: @@ -38,62 +36,6 @@ def err_on_done(res): incoming = [] for line in sys.stdin: incoming.append(line) +incoming = '\n'.join(incoming) -# deserialize incoming request -client_req = None -try: - client_req = json.loads('\n'.join(incoming)) -except json.decoder.JSONDecodeError: - p.simple_error(400, 'Invalid JSON in request') - p.on_done(p.res) - -# build request oject -req = proxy.Req() -try: - req.method = client_req['method'] - req.path_query = client_req['path_query'] -except KeyError: - p.simple_error(400, 'Missing keys in request') - p.on_done(p.res) - -if "headers" in client_req: - req.headers = client_req['headers'] - -if "body" in client_req: - req.body = client_req['body'] - -# callback for handling non-JSON content. in production-like -# environments, we want to call `qvm-move-to-vm` (and expressly not -# `qvm-move`, since we want to include the destination VM name) to -# move the content to the target VM. for development and testing, we -# keep the file on the local VM. -# -# In any case, this callback mutates the given result object (in -# `res`) to include the name of the new file, or to indicate errors. -def on_save(fh, res): - fn = str(uuid.uuid4()) - - try: - subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) - if p.conf.dev is not True: - subprocess.run(['qvm-move-to-vm', p.conf.target_vm, "/tmp/{}".format(fn)]) - except Exception: - res.status = 500 - res.headers['Content-Type'] = 'application/json' - res.headers['X-Origin-Content-Type'] = res.headers['content-type'] - res.body = json.dumps({"error": "Unhandled error while handling non-JSON content, sorry"}) - return - - res.headers['X-Origin-Content-Type'] = res.headers['content-type'] - res.headers['Content-Type'] = 'application/json' - res.body = json.dumps({'filename': fn }) - -# new on_done handler -def on_done(res): - print(json.dumps(res.__dict__)) - -# complete proxy object -p.req = req -p.on_save = on_save -p.on_done = on_done -p.proxy() +main.__main__(incoming, p) diff --git a/securedrop_proxy/callbacks.py b/securedrop_proxy/callbacks.py new file mode 100644 index 000000000..2bed25cc2 --- /dev/null +++ b/securedrop_proxy/callbacks.py @@ -0,0 +1,37 @@ +import sys +import json + + +def err_on_done(res): + print(json.dumps(res.__dict__)) + sys.exit(1) + +# callback for handling non-JSON content. in production-like +# environments, we want to call `qvm-move-to-vm` (and expressly not +# `qvm-move`, since we want to include the destination VM name) to +# move the content to the target VM. for development and testing, we +# keep the file on the local VM. +# +# In any case, this callback mutates the given result object (in +# `res`) to include the name of the new file, or to indicate errors. +def on_save(fh, res): + fn = str(uuid.uuid4()) + + try: + subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) + if p.conf.dev is not True: + subprocess.run(['qvm-move-to-vm', p.conf.target_vm, "/tmp/{}".format(fn)]) + except Exception: + res.status = 500 + res.headers['Content-Type'] = 'application/json' + res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.body = json.dumps({"error": "Unhandled error while handling non-JSON content, sorry"}) + return + + res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.headers['Content-Type'] = 'application/json' + res.body = json.dumps({'filename': fn }) + +# new on_done handler +def on_done(res): + print(json.dumps(res.__dict__)) diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py new file mode 100644 index 000000000..2333bb1be --- /dev/null +++ b/securedrop_proxy/main.py @@ -0,0 +1,35 @@ +import json + +from securedrop_proxy import callbacks +from securedrop_proxy import proxy + + +def __main__(incoming, p): + # deserialize incoming request + client_req = None + try: + client_req = json.loads(incoming) + except json.decoder.JSONDecodeError: + p.simple_error(400, 'Invalid JSON in request') + p.on_done(p.res) + + # build request oject + req = proxy.Req() + try: + req.method = client_req['method'] + req.path_query = client_req['path_query'] + except KeyError: + p.simple_error(400, 'Missing keys in request') + p.on_done(p.res) + + if "headers" in client_req: + req.headers = client_req['headers'] + + if "body" in client_req: + req.body = client_req['body'] + + # complete proxy object + p.req = req + p.on_save = callbacks.on_save + p.on_done = callbacks.on_done + p.proxy() From 42160b1251abb14931067c585580c4f2ac843eda Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 16:03:30 -0700 Subject: [PATCH 054/751] Ensure we can access keys on request.headers Previously, we converted requests' CaseInsensitiveDict [0] to a dict which preserved the data structure of CaseInsensitiveDict. This created a top-level _store key, with an interior OrderedDict that had the headers we want to access. Instead, we should use the dict() attribute which gives us just the headers and not the outer _store and OrderedDict. [0] http://docs.python-requests.org/en/master/_modules/requests/structures/ --- securedrop_proxy/proxy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 9ffc264d9..541b490bc 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -118,7 +118,7 @@ def handle_response(self): # headers is a Requests class which doesn't JSON serialize. # coerce it into a normal dict so it will - self.res.headers = self.res.headers.__dict__ + self.res.headers = dict(self.res.headers) def proxy(self): From fd789f1e8abf835cfcdf0e621623c410b1fe2be2 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 15:06:59 -0700 Subject: [PATCH 055/751] Unit tests: Add more unit tests for config Note that we are using a custom callback here in order to simplify testing --- tests/files/invalid_yaml.yaml | 1 + tests/files/valid-config.yaml | 5 +++ tests/test_config.py | 64 ++++++++++++++++++++++++++--------- 3 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 tests/files/invalid_yaml.yaml create mode 100644 tests/files/valid-config.yaml diff --git a/tests/files/invalid_yaml.yaml b/tests/files/invalid_yaml.yaml new file mode 100644 index 000000000..fad3d369d --- /dev/null +++ b/tests/files/invalid_yaml.yaml @@ -0,0 +1 @@ +[:thisisbad diff --git a/tests/files/valid-config.yaml b/tests/files/valid-config.yaml new file mode 100644 index 000000000..282052a86 --- /dev/null +++ b/tests/files/valid-config.yaml @@ -0,0 +1,5 @@ +host: jsonplaceholder.typicode.com +scheme: https +port: 443 +target_vm: compost +dev: False diff --git a/tests/test_config.py b/tests/test_config.py index 636e13510..bc478856a 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -2,6 +2,7 @@ import json import sys import unittest +from unittest.mock import patch from securedrop_proxy import proxy from securedrop_proxy import config @@ -11,24 +12,55 @@ class TestConfig(unittest.TestCase): def setUp(self): self.p = proxy.Proxy() + def test_config_file_does_not_exist(self): def err_on_done(res): - print(json.dumps(res.__dict__)) + res = res.__dict__ + self.assertEquals(res['status'], 500) + self.assertIn("Configuration file does not exist", + res['body']) + self.assertEquals(res['headers']['Content-Type'], + 'application/json') sys.exit(1) self.p.on_done = err_on_done + with self.assertRaises(SystemExit): + config.read_conf('not/a/real/path', self.p) - def test_config_file_does_not_exist(self): - saved_stdout = sys.stdout - try: - out = StringIO() - sys.stdout = out - with self.assertRaises(SystemExit): - config.read_conf('not/a/real/path', self.p) - output = out.getvalue().strip() - finally: - sys.stdout = saved_stdout - - response = json.loads(output) - assert response['status'] == 500 - assert "Configuration file does not exist" in response['body'] - assert response['headers']['Content-Type'] == 'application/json' + def test_config_file_when_yaml_is_invalid(self): + def err_on_done(res): + res = res.__dict__ + self.assertEquals(res['status'], 500) + self.assertIn("YAML syntax error", res['body']) + self.assertEquals(res['headers']['Content-Type'], + 'application/json') + sys.exit(1) + + self.p.on_done = err_on_done + with self.assertRaises(SystemExit): + config.read_conf('tests/files/invalid_yaml.yaml', self.p) + + def test_config_file_open_generic_exception(self): + def err_on_done(res): + res = res.__dict__ + self.assertEquals(res['status'], 500) + self.assertEquals(res['headers']['Content-Type'], + 'application/json') + sys.exit(1) + + self.p.on_done = err_on_done + + with self.assertRaises(SystemExit): + # Patching open so that we can simulate a non-YAML error + # (e.g. permissions) + with patch("builtins.open", side_effect=IOError): + config.read_conf('tests/files/valid-config.yaml', self.p) + + def test_config_has_valid_keys(self): + c = config.read_conf('tests/files/valid-config.yaml', self.p) + + # Verify we have a valid Conf object + self.assertEquals(c.host, 'jsonplaceholder.typicode.com') + self.assertEquals(c.port, 443) + self.assertFalse(c.dev) + self.assertEquals(c.scheme, 'https') + self.assertEquals(c.target_vm, 'compost') From 39dd7f0261a369d424b454232521033ad98c8186 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 16:19:07 -0700 Subject: [PATCH 056/751] Unit tests: Basic tests for proxy logic --- fixtures/proxy_404.yaml | 31 +++++++++++++++++++++++++++++++ tests/test_proxy.py | 30 ++++++++++++++++++++++-------- 2 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 fixtures/proxy_404.yaml diff --git a/fixtures/proxy_404.yaml b/fixtures/proxy_404.yaml new file mode 100644 index 000000000..491699a10 --- /dev/null +++ b/fixtures/proxy_404.yaml @@ -0,0 +1,31 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + method: GET + uri: https://jsonplaceholder.typicode.com/notfound + response: + body: {string: '{}'} + headers: + Access-Control-Allow-Credentials: ['true'] + CF-Cache-Status: [HIT] + CF-RAY: [44b75f42af366c82-SJC] + Cache-Control: ['public, max-age=14400'] + Connection: [keep-alive] + Content-Length: ['2'] + Content-Type: [application/json; charset=utf-8] + Date: ['Thu, 16 Aug 2018 22:35:06 GMT'] + Etag: [W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"] + Expect-CT: ['max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"'] + Expires: ['Fri, 17 Aug 2018 02:35:06 GMT'] + Pragma: [no-cache] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d1ba26b900bf8e93056964a66047938871534458906; expires=Fri, + 16-Aug-19 22:35:06 GMT; path=/; domain=.typicode.com; HttpOnly'] + Vary: ['Origin, Accept-Encoding'] + Via: [1.1 vegur] + X-Content-Type-Options: [nosniff] + X-Powered-By: [Express] + status: {code: 404, message: Not Found} +version: 1 diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 19688ea43..b5cc4bc6a 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -22,10 +22,14 @@ def on_save(self, fh, res): # this will be `qvm-move...` in production subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) - res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.headers['Content-Type'] = 'application/json' res.body = json.dumps({'filename': self.fn }) + def on_done(self, res): + res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] + res.headers['Content-Type'] = 'application/json' + def test_400_if_callback_not_set(self): req = proxy.Req() req.method = 'GET' @@ -35,7 +39,7 @@ def test_400_if_callback_not_set(self): p = proxy.Proxy() p.proxy() - assert p.res.status == 400 + self.assertEquals(p.res.status, 400) @vcr.use_cassette('fixtures/basic_proxy_functionality.yaml') def test_proxy_basic_functionality(self): @@ -47,11 +51,21 @@ def test_proxy_basic_functionality(self): p = proxy.Proxy(self.conf, req, self.on_save) p.proxy() - assert p.res.status == 200 - assert p.res.body == json.dumps({'filename': self.fn }) + self.assertEquals(p.res.status, 200) + self.assertEquals(p.res.body, json.dumps({'filename': self.fn })) + self.assertEquals(p.res.headers['Content-Type'], 'application/json') - # This is the way to verify the 'content-type' header - assert p.res.headers['_store']['content-type'][1] == 'application/json' + @vcr.use_cassette('fixtures/proxy_404.yaml') + def test_proxy_produces_404(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '/notfound' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req) + p.on_save = self.on_save + p.on_done = self.on_done + p.proxy() - # But I want to do this - # assert p.res.headers['Content-Type'] == 'application/json' + self.assertEquals(p.res.status, 404) + self.assertEquals(p.res.headers['Content-Type'], 'application/json') From 2e2b9bd32d777cbfd24110d18b0d36d129096282 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 16:24:58 -0700 Subject: [PATCH 057/751] Unit tests: Complete basic tests for config parsing --- tests/files/missing-key.yaml | 4 +++ tests/files/missing-target-vm.yaml | 4 +++ tests/test_config.py | 56 ++++++++++++++++++++++-------- 3 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 tests/files/missing-key.yaml create mode 100644 tests/files/missing-target-vm.yaml diff --git a/tests/files/missing-key.yaml b/tests/files/missing-key.yaml new file mode 100644 index 000000000..8e429958d --- /dev/null +++ b/tests/files/missing-key.yaml @@ -0,0 +1,4 @@ +host: jsonplaceholder.typicode.com +scheme: https +target_vm: compost +dev: False diff --git a/tests/files/missing-target-vm.yaml b/tests/files/missing-target-vm.yaml new file mode 100644 index 000000000..2ea9cc53a --- /dev/null +++ b/tests/files/missing-target-vm.yaml @@ -0,0 +1,4 @@ +host: jsonplaceholder.typicode.com +scheme: https +port: 443 +dev: False diff --git a/tests/test_config.py b/tests/test_config.py index bc478856a..916ad679d 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,5 +1,3 @@ -from io import StringIO -import json import sys import unittest from unittest.mock import patch @@ -15,11 +13,11 @@ def setUp(self): def test_config_file_does_not_exist(self): def err_on_done(res): res = res.__dict__ - self.assertEquals(res['status'], 500) + self.assertEqual(res['status'], 500) self.assertIn("Configuration file does not exist", res['body']) - self.assertEquals(res['headers']['Content-Type'], - 'application/json') + self.assertEqual(res['headers']['Content-Type'], + 'application/json') sys.exit(1) self.p.on_done = err_on_done @@ -29,10 +27,10 @@ def err_on_done(res): def test_config_file_when_yaml_is_invalid(self): def err_on_done(res): res = res.__dict__ - self.assertEquals(res['status'], 500) + self.assertEqual(res['status'], 500) self.assertIn("YAML syntax error", res['body']) - self.assertEquals(res['headers']['Content-Type'], - 'application/json') + self.assertEqual(res['headers']['Content-Type'], + 'application/json') sys.exit(1) self.p.on_done = err_on_done @@ -42,9 +40,9 @@ def err_on_done(res): def test_config_file_open_generic_exception(self): def err_on_done(res): res = res.__dict__ - self.assertEquals(res['status'], 500) - self.assertEquals(res['headers']['Content-Type'], - 'application/json') + self.assertEqual(res['status'], 500) + self.assertEqual(res['headers']['Content-Type'], + 'application/json') sys.exit(1) self.p.on_done = err_on_done @@ -59,8 +57,36 @@ def test_config_has_valid_keys(self): c = config.read_conf('tests/files/valid-config.yaml', self.p) # Verify we have a valid Conf object - self.assertEquals(c.host, 'jsonplaceholder.typicode.com') - self.assertEquals(c.port, 443) + self.assertEqual(c.host, 'jsonplaceholder.typicode.com') + self.assertEqual(c.port, 443) self.assertFalse(c.dev) - self.assertEquals(c.scheme, 'https') - self.assertEquals(c.target_vm, 'compost') + self.assertEqual(c.scheme, 'https') + self.assertEqual(c.target_vm, 'compost') + + def test_config_500_when_missing_a_required_key(self): + def err_on_done(res): + res = res.__dict__ + self.assertEqual(res['status'], 500) + self.assertIn("missing required keys", res['body']) + self.assertEqual(res['headers']['Content-Type'], + 'application/json') + sys.exit(1) + + self.p.on_done = err_on_done + + with self.assertRaises(SystemExit): + config.read_conf('tests/files/missing-key.yaml', self.p) + + def test_config_500_when_missing_target_vm(self): + def err_on_done(res): + res = res.__dict__ + self.assertEqual(res['status'], 500) + self.assertIn("missing `target_vm` key", res['body']) + self.assertEqual(res['headers']['Content-Type'], + 'application/json') + sys.exit(1) + + self.p.on_done = err_on_done + + with self.assertRaises(SystemExit): + config.read_conf('tests/files/missing-target-vm.yaml', self.p) From 6cbfe4756a6337741333713408ecd19b7d91551a Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 16:28:09 -0700 Subject: [PATCH 058/751] Replace utils module with werkzeug To simplify maintenance, we can use Werkzeug directly --- Pipfile | 1 + securedrop_proxy/proxy.py | 4 +- securedrop_proxy/util.py | 103 -------------------------------------- 3 files changed, 3 insertions(+), 105 deletions(-) delete mode 100644 securedrop_proxy/util.py diff --git a/Pipfile b/Pipfile index 5d761889d..3b58e620f 100644 --- a/Pipfile +++ b/Pipfile @@ -10,6 +10,7 @@ python_version = "3.5" furl = "*" pyyaml = "*" requests = "*" +werkzeug = "*" [dev-packages] vcrpy = "*" diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 541b490bc..155caa752 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -1,8 +1,8 @@ import requests import furl -import securedrop_proxy.util as util import tempfile import json +import werkzeug class Req: @@ -109,7 +109,7 @@ def handle_non_json_response(self): def handle_response(self): - ctype = util.parse_options_header(self._presp.headers['content-type']) + ctype = werkzeug.http.parse_options_header(self._presp.headers['content-type']) if ctype[0] == "application/json": self.handle_json_response() diff --git a/securedrop_proxy/util.py b/securedrop_proxy/util.py deleted file mode 100644 index cdb2a9cbf..000000000 --- a/securedrop_proxy/util.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -import re - -# with thanks to https://github.com/pallets/werkzeug/blob/master/werkzeug/http.py -_option_header_piece_re = re.compile(r''' - ;\s* - (?P - "[^"\\]*(?:\\.[^"\\]*)*" # quoted string - | - [^\s;,=*]+ # token - ) - \s* - (?: # optionally followed by =value - (?: # equals sign, possibly with encoding - \*\s*=\s* # * indicates extended notation - (?P[^\s]+?) - '(?P[^\s]*?)' - | - =\s* # basic notation - ) - (?P - "[^"\\]*(?:\\.[^"\\]*)*" # quoted string - | - [^;,]+ # token - )? - )? - \s* -''', flags=re.VERBOSE) - -_option_header_start_mime_type = re.compile(r',\s*([^;,\s]+)([;,]\s*.+)?') - -def unquote_header_value(value, is_filename=False): - r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). - This does not use the real unquoting but what browsers are actually - using for quoting. - .. versionadded:: 0.5 - :param value: the header value to unquote. - """ - if value and value[0] == value[-1] == '"': - # this is not the real unquoting, but fixing this so that the - # RFC is met will result in bugs with internet explorer and - # probably some other browsers as well. IE for example is - # uploading files with "C:\foo\bar.txt" as filename - value = value[1:-1] - - # if this is a filename and the starting characters look like - # a UNC path, then just return the value without quotes. Using the - # replace sequence below on a UNC path has the effect of turning - # the leading double slash into a single slash and then - # _fix_ie_filename() doesn't work correctly. See #458. - if not is_filename or value[:2] != '\\\\': - return value.replace('\\\\', '\\').replace('\\"', '"') - return value - -def parse_options_header(value, multiple=False): - """Parse a ``Content-Type`` like header into a tuple with the content - type and the options: - >>> parse_options_header('text/html; charset=utf8') - ('text/html', {'charset': 'utf8'}) - This should not be used to parse ``Cache-Control`` like headers that use - a slightly different format. For these headers use the - :func:`parse_dict_header` function. - .. versionadded:: 0.5 - :param value: the header to parse. - :param multiple: Whether try to parse and return multiple MIME types - :return: (mimetype, options) or (mimetype, options, mimetype, options, …) - if multiple=True - """ - if not value: - return '', {} - - result = [] - - value = "," + value.replace("\n", ",") - while value: - match = _option_header_start_mime_type.match(value) - if not match: - break - result.append(match.group(1)) # mimetype - options = {} - # Parse options - rest = match.group(2) - while rest: - optmatch = _option_header_piece_re.match(rest) - if not optmatch: - break - option, encoding, _, option_value = optmatch.groups() - option = unquote_header_value(option) - if option_value is not None: - option_value = unquote_header_value( - option_value, - option == 'filename') - if encoding is not None: - option_value = _unquote(option_value).decode(encoding) - options[option] = option_value - rest = rest[optmatch.end():] - result.append(options) - if multiple is False: - return tuple(result) - value = rest - - return tuple(result) if result else ('', {}) From 1f65dac4e08f5b280ca57eaf020167c76e25ee57 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 16 Aug 2018 16:52:33 -0700 Subject: [PATCH 059/751] Unit tests: Make __main__.py into file of proxy unit tests --- fixtures/proxy_200_valid_path.yaml | 34 ++++++++ fixtures/proxy_parameters.yaml | 67 +++++++++++++++ securedrop_proxy/__main__.py | 126 ----------------------------- tests/test_proxy.py | 112 +++++++++++++++++++++++-- 4 files changed, 205 insertions(+), 134 deletions(-) create mode 100644 fixtures/proxy_200_valid_path.yaml create mode 100644 fixtures/proxy_parameters.yaml delete mode 100644 securedrop_proxy/__main__.py diff --git a/fixtures/proxy_200_valid_path.yaml b/fixtures/proxy_200_valid_path.yaml new file mode 100644 index 000000000..ef116fd88 --- /dev/null +++ b/fixtures/proxy_200_valid_path.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + method: GET + uri: https://jsonplaceholder.typicode.com/posts/1 + response: + body: {string: "{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"sunt aut facere + repellat provident occaecati excepturi optio reprehenderit\",\n \"body\": + \"quia et suscipit\\nsuscipit recusandae consequuntur expedita et cum\\nreprehenderit + molestiae ut ut quas totam\\nnostrum rerum est autem sunt rem eveniet architecto\"\n}"} + headers: + Access-Control-Allow-Credentials: ['true'] + CF-Cache-Status: [HIT] + CF-RAY: [44b7cfc9cd806c58-SJC] + Cache-Control: ['public, max-age=14400'] + Connection: [keep-alive] + Content-Length: ['292'] + Content-Type: [application/json; charset=utf-8] + Date: ['Thu, 16 Aug 2018 23:51:55 GMT'] + Etag: [W/"124-yiKdLzqO5gfBrJFrcdJ8Yq0LGnU"] + Expect-CT: ['max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"'] + Expires: ['Fri, 17 Aug 2018 03:51:55 GMT'] + Pragma: [no-cache] + Server: [cloudflare] + Set-Cookie: ['__cfduid=d5d93decbd21c24b97c90d1f49461fd8d1534463515; expires=Fri, + 16-Aug-19 23:51:55 GMT; path=/; domain=.typicode.com; HttpOnly'] + Vary: ['Origin, Accept-Encoding'] + Via: [1.1 vegur] + X-Content-Type-Options: [nosniff] + X-Powered-By: [Express] + status: {code: 200, message: OK} +version: 1 diff --git a/fixtures/proxy_parameters.yaml b/fixtures/proxy_parameters.yaml new file mode 100644 index 000000000..af1b06ffe --- /dev/null +++ b/fixtures/proxy_parameters.yaml @@ -0,0 +1,67 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + method: GET + uri: https://jsonplaceholder.typicode.com/posts?userId=1 + response: + body: {string: "[\n {\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"sunt + aut facere repellat provident occaecati excepturi optio reprehenderit\",\n + \ \"body\": \"quia et suscipit\\nsuscipit recusandae consequuntur expedita + et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem + sunt rem eveniet architecto\"\n },\n {\n \"userId\": 1,\n \"id\": + 2,\n \"title\": \"qui est esse\",\n \"body\": \"est rerum tempore vitae\\nsequi + sint nihil reprehenderit dolor beatae ea dolores neque\\nfugiat blanditiis + voluptate porro vel nihil molestiae ut reiciendis\\nqui aperiam non debitis + possimus qui neque nisi nulla\"\n },\n {\n \"userId\": 1,\n \"id\": + 3,\n \"title\": \"ea molestias quasi exercitationem repellat qui ipsa sit + aut\",\n \"body\": \"et iusto sed quo iure\\nvoluptatem occaecati omnis + eligendi aut ad\\nvoluptatem doloribus vel accusantium quis pariatur\\nmolestiae + porro eius odio et labore et velit aut\"\n },\n {\n \"userId\": 1,\n + \ \"id\": 4,\n \"title\": \"eum et est occaecati\",\n \"body\": \"ullam + et saepe reiciendis voluptatem adipisci\\nsit amet autem assumenda provident + rerum culpa\\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\\nquis + sunt voluptatem rerum illo velit\"\n },\n {\n \"userId\": 1,\n \"id\": + 5,\n \"title\": \"nesciunt quas odio\",\n \"body\": \"repudiandae veniam + quaerat sunt sed\\nalias aut fugiat sit autem sed est\\nvoluptatem omnis possimus + esse voluptatibus quis\\nest aut tenetur dolor neque\"\n },\n {\n \"userId\": + 1,\n \"id\": 6,\n \"title\": \"dolorem eum magni eos aperiam quia\",\n + \ \"body\": \"ut aspernatur corporis harum nihil quis provident sequi\\nmollitia + nobis aliquid molestiae\\nperspiciatis et ea nemo ab reprehenderit accusantium + quas\\nvoluptate dolores velit et doloremque molestiae\"\n },\n {\n \"userId\": + 1,\n \"id\": 7,\n \"title\": \"magnam facilis autem\",\n \"body\": + \"dolore placeat quibusdam ea quo vitae\\nmagni quis enim qui quis quo nemo + aut saepe\\nquidem repellat excepturi ut quia\\nsunt ut sequi eos ea sed quas\"\n + \ },\n {\n \"userId\": 1,\n \"id\": 8,\n \"title\": \"dolorem dolore + est ipsam\",\n \"body\": \"dignissimos aperiam dolorem qui eum\\nfacilis + quibusdam animi sint suscipit qui sint possimus cum\\nquaerat magni maiores + excepturi\\nipsam ut commodi dolor voluptatum modi aut vitae\"\n },\n {\n + \ \"userId\": 1,\n \"id\": 9,\n \"title\": \"nesciunt iure omnis dolorem + tempora et accusantium\",\n \"body\": \"consectetur animi nesciunt iure + dolore\\nenim quia ad\\nveniam autem ut quam aut nobis\\net est aut quod aut + provident voluptas autem voluptas\"\n },\n {\n \"userId\": 1,\n \"id\": + 10,\n \"title\": \"optio molestias id quia eum\",\n \"body\": \"quo + et expedita modi cum officia vel magni\\ndoloribus qui repudiandae\\nvero + nisi sit\\nquos veniam quod sed accusamus veritatis error\"\n }\n]"} + headers: + Access-Control-Allow-Credentials: ['true'] + CF-Cache-Status: [HIT] + CF-RAY: [44b7bdac4e0a6bf8-SJC] + Cache-Control: ['public, max-age=14400'] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + Date: ['Thu, 16 Aug 2018 23:39:33 GMT'] + Etag: [W/"aa6-j2NSH739l9uq40OywFMn7Y0C/iY"] + Expect-CT: ['max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"'] + Expires: ['Fri, 17 Aug 2018 03:39:33 GMT'] + Pragma: [no-cache] + Server: [cloudflare] + Set-Cookie: ['__cfduid=dca3d39adfb7f9a82e73277f19cf335921534462773; expires=Fri, + 16-Aug-19 23:39:33 GMT; path=/; domain=.typicode.com; HttpOnly'] + Vary: ['Origin, Accept-Encoding'] + Via: [1.1 vegur] + X-Content-Type-Options: [nosniff] + X-Powered-By: [Express] + status: {code: 200, message: OK} +version: 1 diff --git a/securedrop_proxy/__main__.py b/securedrop_proxy/__main__.py deleted file mode 100644 index 6abb71d76..000000000 --- a/securedrop_proxy/__main__.py +++ /dev/null @@ -1,126 +0,0 @@ -import proxy -import json -import subprocess -import uuid - -conf = proxy.Conf() -conf.host = 'jsonplaceholder.typicode.com' -conf.scheme = 'https' -conf.port = 443 - -def on_save(fh, res): - - fn = str(uuid.uuid4()) - - # this will be `qvm-move...` in production - subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) - - res.headers['X-Origin-Content-Type'] = res.headers['content-type'] - res.headers['Content-Type'] = 'application/json' - res.body = json.dumps({'filename': fn }) - -# does it work at all -req = proxy.Req() -req.method = 'GET' -req.path_query = '' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, on_save) -p.proxy() - -print(p.res.status) -print(p.res.headers) -print(p.res.version) -print(p.res.body) - -# params -req = proxy.Req() -req.method = 'GET' -req.path_query = '/posts?userId=1' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, on_save) -p.proxy() - -print(p.res.status) -#print(res.headers) -print(p.res.version) -print(json.loads(p.res.body.decode())) - - -# path -req = proxy.Req() -req.method = 'GET' -req.path_query = '/posts/1' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, on_save) -p.proxy() - -print(p.res.status) # 200 -print(p.res.version) -print(json.loads(p.res.body.decode())) - - -# 404 -req = proxy.Req() -req.method = 'GET' -req.path_query = '/notfound' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, on_save) -p.proxy() - -print(p.res.status) # 404 -print(p.res.headers) -print(p.res.version) -print(p.res.body) # {} - - -# 400 bad path -req = proxy.Req() -req.method = 'GET' -req.path_query = 'http://badpath.lol/path' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, on_save) -p.proxy() - -print(p.res.status) # 400 -print(p.res.headers) -print(p.res.version) -print(p.res.body) # {'error': 'Path provided in request did not look valid'} - -# 400 no handler -req = proxy.Req() -req.method = 'GET' -req.path_query = 'http://badpath.lol/path' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, None) -p.proxy() - -print(p.res.status) # 400 -print(p.res.headers) -print(p.res.version) -print(p.res.body) # {'error': 'Request callback is not set.'} - - -# 500 proxy error (in this case, misconfiguration) -conf = proxy.Conf() -conf.host = 'jsonplaceholder.typicode.com' -conf.scheme = 'https://http' # bad -conf.port = 443 - -req = proxy.Req() -req.method = 'GET' -req.path_query = '/posts/1' -req.headers = {'Accept': 'application/json'} - -p = proxy.Proxy(conf, req, on_save) -p.proxy() - -print(p.res.status) # 500 -print(p.res.headers) -print(p.res.version) -print(p.res.body) # {'error': 'Proxy error while generating URL to request'} diff --git a/tests/test_proxy.py b/tests/test_proxy.py index b5cc4bc6a..7eec40522 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -8,7 +8,7 @@ from securedrop_proxy import config -class TestProxy(unittest.TestCase): +class TestProxyValidConfig(unittest.TestCase): def setUp(self): self.conf = config.Conf() self.conf.host = 'jsonplaceholder.typicode.com' @@ -24,7 +24,7 @@ def on_save(self, fh, res): res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.headers['Content-Type'] = 'application/json' - res.body = json.dumps({'filename': self.fn }) + res.body = json.dumps({'filename': self.fn}) def on_done(self, res): res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] @@ -39,7 +39,7 @@ def test_400_if_callback_not_set(self): p = proxy.Proxy() p.proxy() - self.assertEquals(p.res.status, 400) + self.assertEqual(p.res.status, 400) @vcr.use_cassette('fixtures/basic_proxy_functionality.yaml') def test_proxy_basic_functionality(self): @@ -51,9 +51,9 @@ def test_proxy_basic_functionality(self): p = proxy.Proxy(self.conf, req, self.on_save) p.proxy() - self.assertEquals(p.res.status, 200) - self.assertEquals(p.res.body, json.dumps({'filename': self.fn })) - self.assertEquals(p.res.headers['Content-Type'], 'application/json') + self.assertEqual(p.res.status, 200) + self.assertEqual(p.res.body, json.dumps({'filename': self.fn})) + self.assertEqual(p.res.headers['Content-Type'], 'application/json') @vcr.use_cassette('fixtures/proxy_404.yaml') def test_proxy_produces_404(self): @@ -67,5 +67,101 @@ def test_proxy_produces_404(self): p.on_done = self.on_done p.proxy() - self.assertEquals(p.res.status, 404) - self.assertEquals(p.res.headers['Content-Type'], 'application/json') + self.assertEqual(p.res.status, 404) + self.assertEqual(p.res.headers['Content-Type'], 'application/json') + + @vcr.use_cassette('fixtures/proxy_parameters.yaml') + def test_proxy_handles_query_params_gracefully(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '/posts?userId=1' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req, self.on_save) + p.proxy() + + self.assertEqual(p.res.status, 200) + self.assertIn('application/json', p.res.headers['Content-Type']) + body = json.loads(p.res.body) + for item in body: + self.assertEqual(item['userId'], 1) + + # No cassette needed as no network request should be sent + def test_proxy_400_bad_path(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = 'http://badpath.lol/path' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req) + p.on_save = self.on_save + p.on_done = self.on_done + p.proxy() + + self.assertEqual(p.res.status, 400) + self.assertEqual(p.res.headers['Content-Type'], 'application/json') + self.assertIn('Path provided in request did not look valid', + p.res.body) + + @vcr.use_cassette('fixtures/proxy_200_valid_path.yaml') + def test_proxy_200_valid_path(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '/posts/1' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req, self.on_save) + p.proxy() + + self.assertEqual(p.res.status, 200) + self.assertIn('application/json', p.res.headers['Content-Type']) + body = json.loads(p.res.body) + self.assertEqual(body['userId'], 1) + + # No cassette needed as no network request should be sent + def test_proxy_400_no_handler(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = 'http://badpath.lol/path' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req) + p.proxy() + + self.assertEqual(p.res.status, 400) + self.assertEqual(p.res.headers['Content-Type'], 'application/json') + self.assertIn('Request callback is not set', + p.res.body) + + +class TestProxyInvalidConfig(unittest.TestCase): + def setUp(self): + self.conf = config.Conf() + self.conf.host = 'jsonplaceholder.typicode.com' + self.conf.scheme = 'https://http' # bad + self.conf.port = 443 + + def on_save(self, fh, res): + self.fn = str(uuid.uuid4()) + + # this will be `qvm-move...` in production + subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) + + res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] + res.headers['Content-Type'] = 'application/json' + res.body = json.dumps({'filename': self.fn}) + + # No cassette needed as no network request should be sent + def test_proxy_500_misconfiguration(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '/posts/1' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy(self.conf, req, self.on_save) + p.proxy() + + self.assertEqual(p.res.status, 500) + self.assertEqual(p.res.headers['Content-Type'], 'application/json') + self.assertIn('Proxy error while generating URL to request', + p.res.body) From 527f7c24695d3fc7621780adcd421094b2c6f354 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 20 Aug 2018 09:23:26 -0700 Subject: [PATCH 060/751] Add conf as argument to on_save callback The on_save callback uses the config object in order to determine if qvm-move-to-vm should be used. We should pass this as an arg. --- securedrop_proxy/callbacks.py | 12 +++++++----- securedrop_proxy/proxy.py | 2 +- tests/test_proxy.py | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/securedrop_proxy/callbacks.py b/securedrop_proxy/callbacks.py index 2bed25cc2..fa42fb9c9 100644 --- a/securedrop_proxy/callbacks.py +++ b/securedrop_proxy/callbacks.py @@ -1,5 +1,7 @@ +import subprocess import sys import json +import uuid def err_on_done(res): @@ -14,22 +16,22 @@ def err_on_done(res): # # In any case, this callback mutates the given result object (in # `res`) to include the name of the new file, or to indicate errors. -def on_save(fh, res): +def on_save(fh, res, conf): fn = str(uuid.uuid4()) try: subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) - if p.conf.dev is not True: - subprocess.run(['qvm-move-to-vm', p.conf.target_vm, "/tmp/{}".format(fn)]) + if conf.dev is not True: + subprocess.run(['qvm-move-to-vm', conf.target_vm, "/tmp/{}".format(fn)]) except Exception: res.status = 500 res.headers['Content-Type'] = 'application/json' - res.headers['X-Origin-Content-Type'] = res.headers['content-type'] + res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.body = json.dumps({"error": "Unhandled error while handling non-JSON content, sorry"}) return - res.headers['X-Origin-Content-Type'] = res.headers['content-type'] res.headers['Content-Type'] = 'application/json' + res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.body = json.dumps({'filename': fn }) # new on_done handler diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 155caa752..1e9554d90 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -103,7 +103,7 @@ def handle_non_json_response(self): res.headers = self._presp.headers - self.on_save(fh, res) + self.on_save(fh, res, self.conf) self.res = res diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 7eec40522..12c307dd7 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -15,7 +15,7 @@ def setUp(self): self.conf.scheme = 'https' self.conf.port = 443 - def on_save(self, fh, res): + def on_save(self, fh, res, conf): self.fn = str(uuid.uuid4()) @@ -141,7 +141,7 @@ def setUp(self): self.conf.scheme = 'https://http' # bad self.conf.port = 443 - def on_save(self, fh, res): + def on_save(self, fh, res, conf): self.fn = str(uuid.uuid4()) # this will be `qvm-move...` in production From f910bc2e29293641a66fcce459103a9e37eefc4e Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 20 Aug 2018 09:27:21 -0700 Subject: [PATCH 061/751] Bugfix: Default value of headers should be empty dict We return informative JSON errors to users, and in cases where the headers attribute was initialized to None, when we try to set `Content-Type` later on in the proxy logic, we will get an error: TypeError: 'NoneType' object does not support item assignment We can resolve this by setting the default value of headers to an empty dict. --- securedrop_proxy/proxy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 1e9554d90..09c306770 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -10,14 +10,14 @@ def __init__(self): self.method = '' self.path_query = '' self.body = None - self.headers = None + self.headers = {} class Response: def __init__(self, status): self.status = status self.body = None - self.headers = None + self.headers = {} self.version = "0.1.1" class Proxy: From 3f84a0da5ead1ad5149e15ef78bacc9845720bc4 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 20 Aug 2018 09:52:26 -0700 Subject: [PATCH 062/751] Unit tests: Callback functions --- tests/test_callbacks.py | 78 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/test_callbacks.py diff --git a/tests/test_callbacks.py b/tests/test_callbacks.py new file mode 100644 index 000000000..d0993e473 --- /dev/null +++ b/tests/test_callbacks.py @@ -0,0 +1,78 @@ +from io import StringIO +import json +import sys +import tempfile +import unittest +from unittest.mock import patch + +from securedrop_proxy import callbacks +from securedrop_proxy import config +from securedrop_proxy import proxy + + +class TestCallbacks(unittest.TestCase): + def setUp(self): + self.res = proxy.Response(status=200) + self.res.body = "babbys request" + + self.conf = config.Conf() + self.conf.host = 'jsonplaceholder.typicode.com' + self.conf.scheme = 'https' + self.conf.port = 443 + self.conf.dev = True + + def test_err_on_done(self): + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + with self.assertRaises(SystemExit): + callbacks.err_on_done(self.res) + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + self.assertEqual(response['status'], 200) + self.assertEqual(response['body'], 'babbys request') + + def test_on_done(self): + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + callbacks.on_done(self.res) + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + self.assertEqual(response['status'], 200) + self.assertEqual(response['body'], 'babbys request') + + def test_on_save_500_unhandled_error(self): + fh = tempfile.NamedTemporaryFile() + + # Let's generate an error and ensure that an appropriate response + # is sent back to the user + with patch("subprocess.run", side_effect=IOError): + callbacks.on_save(fh, self.res, self.conf) + + self.assertEqual(self.res.status, 500) + self.assertEqual(self.res.headers['Content-Type'], + 'application/json') + self.assertEqual(self.res.headers['X-Origin-Content-Type'], + 'application/json') + self.assertIn('Unhandled error', self.res.body) + + def test_on_save_200_success(self): + fh = tempfile.NamedTemporaryFile() + + callbacks.on_save(fh, self.res, self.conf) + + self.assertEqual(self.res.headers['Content-Type'], + 'application/json') + self.assertEqual(self.res.headers['X-Origin-Content-Type'], + 'application/json') + self.assertEqual(self.res.status, 200) + self.assertIn('filename', self.res.body) From 4a1874c55322166f90017a0d2ea06556eadd8299 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 20 Aug 2018 12:24:31 -0700 Subject: [PATCH 063/751] Unit tests: Add main function tests Note: each test here corresponds to one in the README --- tests/test_main.py | 102 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 tests/test_main.py diff --git a/tests/test_main.py b/tests/test_main.py new file mode 100644 index 000000000..6bfa8b866 --- /dev/null +++ b/tests/test_main.py @@ -0,0 +1,102 @@ +from io import StringIO +import json +import subprocess +import sys +import unittest +import uuid + +from securedrop_proxy import config +from securedrop_proxy import main +from securedrop_proxy import proxy + + +class TestMain(unittest.TestCase): + def setUp(self): + self.conf = config.Conf() + self.conf.host = 'jsonplaceholder.typicode.com' + self.conf.scheme = 'https' + self.conf.port = 443 + self.conf.dev = True + + def test_json_response(self): + test_input_json = """{ "method": "GET", + "path_query": "/posts?userId=1" }""" + + req = proxy.Req() + req.method = 'GET' + req.path_query = '' + req.headers = {'Accept': 'application/json'} + + # Use custom callbacks + def on_save(res, fh, conf): + pass + + def on_done(res): + res = res.__dict__ + self.assertEqual(res['status'], 200) + + self.p = proxy.Proxy(self.conf, req, on_save) + self.p.on_done = on_done + self.p.proxy() + + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + main.__main__(test_input_json, self.p) + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + for item in json.loads(response['body']): + self.assertEqual(item['userId'], 1) + + def test_non_json_response(self): + test_input_json = """{ "method": "GET", + "path_query": "" }""" + + def on_save(fh, res, conf): + self.fn = str(uuid.uuid4()) + + subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) + + res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] + res.headers['Content-Type'] = 'application/json' + res.body = json.dumps({'filename': self.fn}) + + self.p = proxy.Proxy(self.conf, proxy.Req(), on_save) + self.p.proxy() + + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + main.__main__(test_input_json, self.p) + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + self.assertEqual(response['status'], 200) + + # The proxy should have created a filename in the response body + self.assertIn('filename', response['body']) + + def test_error_response(self): + test_input_json = """"foo": "bar", "baz": "bliff" }""" + + def on_save(fh, res, conf): + pass + + def on_done(res): + res = res.__dict__ + self.assertEqual(res['status'], 400) + sys.exit(1) + + self.p = proxy.Proxy(self.conf, proxy.Req(), on_save) + self.p.on_done = on_done + + with self.assertRaises(SystemExit): + self.p.proxy() + main.__main__(test_input_json, self.p) From bd0a85c2d7fd13bd9f26dcd2425ddbf2aa4313d4 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 8 Aug 2018 16:11:45 +0530 Subject: [PATCH 064/751] Adds 3 method for replies get_replies_from_source get_reply_from_source get_all_replies The `get_reply_from_source` method takes a uuid string as just making an object for fetching seems to be a bit over work here. We also have the tests for the same methods. --- data/test-get-all-replies.yml | 43 +++++++++ data/test-get-replies-from-source.yml | 106 +++++++++++++++++++++ data/test-get-reply-from-source.yml | 131 ++++++++++++++++++++++++++ sdclientapi/__init__.py | 116 +++++++++++++++++++++++ tests/test_api.py | 24 +++++ 5 files changed, 420 insertions(+) create mode 100644 data/test-get-all-replies.yml create mode 100644 data/test-get-replies-from-source.yml create mode 100644 data/test-get-reply-from-source.yml diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml new file mode 100644 index 000000000..ab0c0de8b --- /dev/null +++ b/data/test-get-all-replies.yml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ + : \"journalist\", \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n }, \n \ + \ {\n \"filename\": \"4-intoxicant_dwindling-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/b04cdfea-fb28-4f12-876f-8f641c3f5087\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"b04cdfea-fb28-4f12-876f-8f641c3f5087\"\n }, \n \ + \ {\n \"filename\": \"3-small-scale_president-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies/3f624563-7203-4661-8585-eb7e424d8339\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ + , \n \"uuid\": \"3f624563-7203-4661-8585-eb7e424d8339\"\n }, \n \ + \ {\n \"filename\": \"4-small-scale_president-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies/86b5ca58-6672-4942-8130-6bfb15bd645c\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ + , \n \"uuid\": \"86b5ca58-6672-4942-8130-6bfb15bd645c\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1715'] + Content-Type: [application/json] + Date: ['Wed, 08 Aug 2018 09:46:36 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0NjozNiBHTVQifX0.DkxNfA.9jspoYSts9rARhiW2PMScg0D3gA; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml new file mode 100644 index 000000000..6da2b47ed --- /dev/null +++ b/data/test-get-replies-from-source.yml @@ -0,0 +1,106 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"intoxicant\ + \ dwindling\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFtqhHwBEACcb5kGOj5s/BKa249LOe9IgPaTiKYGUAihHOmllV56eHB3uiLY\\\ + nmx0TuiLz/1b3QvwMozb6vGSV9KxfraQfZa0CpuYkkb+5gHnMjKmwGjrVDIBlPw4I\\nDheyNSUZzxyeeDxaAtJiBTCKNvxZB9m4FIpA1+BCn53DfZdgxrMcecSB7ZZ1vezd\\\ + nVPokEKngcmvMDv6Uy3CYgUn2OKGZdZ94z6MPKlcO8oQfl65EwHf75c2IYVEBK+hp\\nrFxnTh40Yx4t8wtbPtiSZNbHpZP/7cFGl0AEK7it/Gs/etLK7e+5OlnqjDI9lj6N\\\ + nuzYPjsCCMj9KcO7UFa10H8B8CXimuBHo0bbBr+6g9qd8pjXc50hvTePY7Yf74BD2\\nyarwBF3ekmh55MHcAfHswW5TGW4i0ATdbg1luix0N2maE31G/FFiySPr2XZHVEY3\\\ + ncAYwuScDu1cGC+r1QUz62Gk0nYZeZavSh5O6RuQOj7EVPVSuNqrDPF7Av+bD8mk7\\nXKvnsXEMjIXUuluWFYbxVotlPt9cKnIZw+g1nqvkA8Txovgn5bBjUNMpenbSYzRV\\\ + n496HmFFxGiXLwDFA2K92Al2l+8EviZJorx3oppZ/c+KcHLtj4lgzgDhlTJt0B9Hl\\nDlD7ahMTZHsLEusPub01UVa/jEU1qpaUcKfA4/AoShKNHFdK7BYyXbp/lQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UFZTQVdPUE1NV0FMR09NUFNMWjRZQ0xJV1o0\\nMjRLTUEzNzRLSVlUVkpWVUhEWlg0NEFYMzVKVlRKTVFJRFNIV1g2R0ZGNE1RTEU1\\\ + nWFRJQ0pDT0pQSzZFNUEzVlZKSk1ISDRKQVVSQT0+iQI/BBMBCgApBQJbaoR8Ahsv\\nBQkB4YpEBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ/rYtXFr+mB9rDA//\\\ + nYXlBLc5ZjnRxe9LtOIKBUAptWAGe4ffvGOD7yAX9Ga6Tr6d+NX3hkvwrJZR7idiD\\n8Nta08wpOrKId4fUMZuFjKIyWvn5IK5PDn6fvpWfSGRiVNJfkmKJCzmFR2O0VjTC\\\ + nWPaBVmA1Iwu50VvNzzvbm792h63ImzsQje8wTnkPDbiFjd6COqzsDvbUxSZ6+8FV\\nGONseEPHKpM1fUIERxomhjmoKaVqiyerk/qfANemU6lPfV5JzY8NHyvNLEMANBvS\\\ + nHUl4UYf/N75wrCACIcfFqsdVpH6sKwO4F4Ets/SGoqCnpBwX8CxloX/zShyZE1cS\\n/gUhLRHs050jurnD90M6fWorJPA/sYJzhm/xdUbGCrU/XR3ym42OMV2jKDmgTWzG\\\ + nCW1JKKKpV46iei+1aLtG0Fn1QP5Q2c2tialSCMJuEQ2B1lbtEkjA+e7rWXS1WcBT\\nMY5NTKaREmqr+STbQmSeuRA0Wynm0/ppwsYaL1rcMxtlxj86liDznhD5AoF4BO2f\\\ + n4xbFaU6lsZLq7pUnSK1qWn2rup2GnmNCKN+D5LX2Jz6Z+lzM6wnSVSsw95O1T4rS\\nuYONhf1Jfa6szCeumgZh0G2TkUDXgSdmO0J/Jbf7bnnDYJCSP2hTFzgF2sCvAm2k\\\ + nawF5GIAnxz5tA0cJhxOg19vft9dsaci9Ax699zZgzqU=\\n=ka4z\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-08T05:49:49.899101Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/submissions\"\ + , \n \"url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"80756f3b-3f27-453e-b188-344127aea5bb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"small-scale\ + \ president\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFtqhIIBEACdsgmaBscaAmvfrr1tHNCWc1qWnVv4jcftAqLqHxIO20tNBbrk\\\ + nkvvwgOCTrQK0UpJ+bhaaW5LS/cxuQ2epmBkY7OaPDX1CPoodHUFnRCVWEcAfZEOi\\nWfaq4VhzT7l9ZYpAlsnV1iBtU9BK8kPd1gFvOga/086t2o0En5ajp4ktSH5ZQf+q\\\ + nDvWOER4bwvO0yVzljROGiYex8GeNar0nCNXjK81IaivEuo5qWHlDonstpJBMuqUw\\nKK1CmuHPeBocboOMkB3IfEw5WaDkH9uLXnLhx5EOgAqnxOXUUDpDU3mmQr8xQy39\\\ + nACUSLYYmipGlw3KFFZ2Mnons2mxg8Zfj7H6Fy36KmrzmHsVS80Za0TvJUAsh5tgw\\neD85ioU4wGxJgrW5mi0qCGjfDBxx2ny3AnllxnheKFEriF6Dgl+K4DARq/HguYWs\\\ + nVrR0wPm2P6XqwrpSZBrO5HZ9xtjvByNtXr8k8X57/Dy9oDCcsXXIJBlfNbmQXIzV\\n0Z0hckRmshN5SUdAzvwVHiIG0+s+Fm4UJszmIyIuQst+Zr9hfLeZuMuYt+BwlXFF\\\ + nnVp69vJ4v5/AIwrCsI/sqSPrjKEyQ4+hd0Ld8GKEThs2OCbgU+x0QVqWHEMCnPq1\\nNbW+TUZ1yjiSvb5NQ0Dq1lzv7WC302gKy6wjoXNr0vKkNh8WC3iz5aQ5aQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFRWSkJEUEtaWU0ySlpSRVBMVldLR0dTWTZI\\nVlBZNUZXNFc3WFFVNlFKTTRJTkROT0JVNkJOQVVLSFYyU1ZLSFZVVDRJNFJCQTZW\\\ + nSE1HRDc2WjRMQzZNNERaNk5QWlVWRElENkc0ST0+iQI/BBMBCgApBQJbaoSCAhsv\\nBQkB4Yo+BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ2tLbOLjdNgXY/A/8\\\ + nDNCBeqVUqwxo5LlVahP99u7IVU/vadXE38nFqwtgDtecgGKFtVy+bqFOx61XQmrF\\ntagpprKJPE3o4ac0np+C/T6zbrDa5KhX9l7piHsvGorsyA6A52+tbfrn0PRbpRw0\\\ + nTROyPYsQtt3bVDm+yEwVAVc5CtII8xUe8+BMD4Q7coCvnEde3VxVaXs85Re79dgb\\nsEH0mzFAt+imGBeaIpXEQzS3jBmPm8xEq1nH3E5oXArmDuwseROoTg40s/VtHvQ4\\\ + nEsEs7OsTt0yPww34NkxskNwtqPmoQ7cY5q8HUF20RJlbokiN3uz0pOZoGaPtdkDu\\ngnq48FfYGO363Pg4vZUyZ0bHrpvuw+zRLQcXvJpYo/eQCygJ+xaUnNhrGa9hFaRt\\\ + nvrlpfePoIIfF3wEwnJOON4QRWhc51vyhjg8jDz+1dhzCBb9BU63+PQ64JAS0f0AH\\n1y25gxP1BCKwtAlz1hJk9YsgnFMywSUJrHsKKoFo0X51EVLbh+pGkSXbMLTNfwnP\\\ + natka4fEDb/jQGbFnATmjYmVD59O8yMkxL4KUQ+/fwY/U7gyfPIkrSjyMVzb1XuCZ\\njNn8QMJNdLTx7zQPsUYPbo0GEzDF+pYTYmqnR3SipK79VB4c/9xPij2njLQZvMYS\\\ + nQ9FZtK+5HOTMbA1S1xN2dKOx/ZaYk0HflepWBaBVU+k=\\n=mMuD\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-08T05:49:55.514014Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/submissions\"\ + , \n \"url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ + , \n \"uuid\": \"a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5412'] + Content-Type: [application/json] + Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ + : \"journalist\", \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n }, \n \ + \ {\n \"filename\": \"4-intoxicant_dwindling-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/b04cdfea-fb28-4f12-876f-8f641c3f5087\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"b04cdfea-fb28-4f12-876f-8f641c3f5087\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['867'] + Content-Type: [application/json] + Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml new file mode 100644 index 000000000..f65b0edc5 --- /dev/null +++ b/data/test-get-reply-from-source.yml @@ -0,0 +1,131 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"intoxicant\ + \ dwindling\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFtqhHwBEACcb5kGOj5s/BKa249LOe9IgPaTiKYGUAihHOmllV56eHB3uiLY\\\ + nmx0TuiLz/1b3QvwMozb6vGSV9KxfraQfZa0CpuYkkb+5gHnMjKmwGjrVDIBlPw4I\\nDheyNSUZzxyeeDxaAtJiBTCKNvxZB9m4FIpA1+BCn53DfZdgxrMcecSB7ZZ1vezd\\\ + nVPokEKngcmvMDv6Uy3CYgUn2OKGZdZ94z6MPKlcO8oQfl65EwHf75c2IYVEBK+hp\\nrFxnTh40Yx4t8wtbPtiSZNbHpZP/7cFGl0AEK7it/Gs/etLK7e+5OlnqjDI9lj6N\\\ + nuzYPjsCCMj9KcO7UFa10H8B8CXimuBHo0bbBr+6g9qd8pjXc50hvTePY7Yf74BD2\\nyarwBF3ekmh55MHcAfHswW5TGW4i0ATdbg1luix0N2maE31G/FFiySPr2XZHVEY3\\\ + ncAYwuScDu1cGC+r1QUz62Gk0nYZeZavSh5O6RuQOj7EVPVSuNqrDPF7Av+bD8mk7\\nXKvnsXEMjIXUuluWFYbxVotlPt9cKnIZw+g1nqvkA8Txovgn5bBjUNMpenbSYzRV\\\ + n496HmFFxGiXLwDFA2K92Al2l+8EviZJorx3oppZ/c+KcHLtj4lgzgDhlTJt0B9Hl\\nDlD7ahMTZHsLEusPub01UVa/jEU1qpaUcKfA4/AoShKNHFdK7BYyXbp/lQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UFZTQVdPUE1NV0FMR09NUFNMWjRZQ0xJV1o0\\nMjRLTUEzNzRLSVlUVkpWVUhEWlg0NEFYMzVKVlRKTVFJRFNIV1g2R0ZGNE1RTEU1\\\ + nWFRJQ0pDT0pQSzZFNUEzVlZKSk1ISDRKQVVSQT0+iQI/BBMBCgApBQJbaoR8Ahsv\\nBQkB4YpEBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ/rYtXFr+mB9rDA//\\\ + nYXlBLc5ZjnRxe9LtOIKBUAptWAGe4ffvGOD7yAX9Ga6Tr6d+NX3hkvwrJZR7idiD\\n8Nta08wpOrKId4fUMZuFjKIyWvn5IK5PDn6fvpWfSGRiVNJfkmKJCzmFR2O0VjTC\\\ + nWPaBVmA1Iwu50VvNzzvbm792h63ImzsQje8wTnkPDbiFjd6COqzsDvbUxSZ6+8FV\\nGONseEPHKpM1fUIERxomhjmoKaVqiyerk/qfANemU6lPfV5JzY8NHyvNLEMANBvS\\\ + nHUl4UYf/N75wrCACIcfFqsdVpH6sKwO4F4Ets/SGoqCnpBwX8CxloX/zShyZE1cS\\n/gUhLRHs050jurnD90M6fWorJPA/sYJzhm/xdUbGCrU/XR3ym42OMV2jKDmgTWzG\\\ + nCW1JKKKpV46iei+1aLtG0Fn1QP5Q2c2tialSCMJuEQ2B1lbtEkjA+e7rWXS1WcBT\\nMY5NTKaREmqr+STbQmSeuRA0Wynm0/ppwsYaL1rcMxtlxj86liDznhD5AoF4BO2f\\\ + n4xbFaU6lsZLq7pUnSK1qWn2rup2GnmNCKN+D5LX2Jz6Z+lzM6wnSVSsw95O1T4rS\\nuYONhf1Jfa6szCeumgZh0G2TkUDXgSdmO0J/Jbf7bnnDYJCSP2hTFzgF2sCvAm2k\\\ + nawF5GIAnxz5tA0cJhxOg19vft9dsaci9Ax699zZgzqU=\\n=ka4z\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-08T05:49:49.899101Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/submissions\"\ + , \n \"url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"80756f3b-3f27-453e-b188-344127aea5bb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"small-scale\ + \ president\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFtqhIIBEACdsgmaBscaAmvfrr1tHNCWc1qWnVv4jcftAqLqHxIO20tNBbrk\\\ + nkvvwgOCTrQK0UpJ+bhaaW5LS/cxuQ2epmBkY7OaPDX1CPoodHUFnRCVWEcAfZEOi\\nWfaq4VhzT7l9ZYpAlsnV1iBtU9BK8kPd1gFvOga/086t2o0En5ajp4ktSH5ZQf+q\\\ + nDvWOER4bwvO0yVzljROGiYex8GeNar0nCNXjK81IaivEuo5qWHlDonstpJBMuqUw\\nKK1CmuHPeBocboOMkB3IfEw5WaDkH9uLXnLhx5EOgAqnxOXUUDpDU3mmQr8xQy39\\\ + nACUSLYYmipGlw3KFFZ2Mnons2mxg8Zfj7H6Fy36KmrzmHsVS80Za0TvJUAsh5tgw\\neD85ioU4wGxJgrW5mi0qCGjfDBxx2ny3AnllxnheKFEriF6Dgl+K4DARq/HguYWs\\\ + nVrR0wPm2P6XqwrpSZBrO5HZ9xtjvByNtXr8k8X57/Dy9oDCcsXXIJBlfNbmQXIzV\\n0Z0hckRmshN5SUdAzvwVHiIG0+s+Fm4UJszmIyIuQst+Zr9hfLeZuMuYt+BwlXFF\\\ + nnVp69vJ4v5/AIwrCsI/sqSPrjKEyQ4+hd0Ld8GKEThs2OCbgU+x0QVqWHEMCnPq1\\nNbW+TUZ1yjiSvb5NQ0Dq1lzv7WC302gKy6wjoXNr0vKkNh8WC3iz5aQ5aQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFRWSkJEUEtaWU0ySlpSRVBMVldLR0dTWTZI\\nVlBZNUZXNFc3WFFVNlFKTTRJTkROT0JVNkJOQVVLSFYyU1ZLSFZVVDRJNFJCQTZW\\\ + nSE1HRDc2WjRMQzZNNERaNk5QWlVWRElENkc0ST0+iQI/BBMBCgApBQJbaoSCAhsv\\nBQkB4Yo+BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ2tLbOLjdNgXY/A/8\\\ + nDNCBeqVUqwxo5LlVahP99u7IVU/vadXE38nFqwtgDtecgGKFtVy+bqFOx61XQmrF\\ntagpprKJPE3o4ac0np+C/T6zbrDa5KhX9l7piHsvGorsyA6A52+tbfrn0PRbpRw0\\\ + nTROyPYsQtt3bVDm+yEwVAVc5CtII8xUe8+BMD4Q7coCvnEde3VxVaXs85Re79dgb\\nsEH0mzFAt+imGBeaIpXEQzS3jBmPm8xEq1nH3E5oXArmDuwseROoTg40s/VtHvQ4\\\ + nEsEs7OsTt0yPww34NkxskNwtqPmoQ7cY5q8HUF20RJlbokiN3uz0pOZoGaPtdkDu\\ngnq48FfYGO363Pg4vZUyZ0bHrpvuw+zRLQcXvJpYo/eQCygJ+xaUnNhrGa9hFaRt\\\ + nvrlpfePoIIfF3wEwnJOON4QRWhc51vyhjg8jDz+1dhzCBb9BU63+PQ64JAS0f0AH\\n1y25gxP1BCKwtAlz1hJk9YsgnFMywSUJrHsKKoFo0X51EVLbh+pGkSXbMLTNfwnP\\\ + natka4fEDb/jQGbFnATmjYmVD59O8yMkxL4KUQ+/fwY/U7gyfPIkrSjyMVzb1XuCZ\\njNn8QMJNdLTx7zQPsUYPbo0GEzDF+pYTYmqnR3SipK79VB4c/9xPij2njLQZvMYS\\\ + nQ9FZtK+5HOTMbA1S1xN2dKOx/ZaYk0HflepWBaBVU+k=\\n=mMuD\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-08T05:49:55.514014Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ + , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/submissions\"\ + , \n \"url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ + , \n \"uuid\": \"a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5412'] + Content-Type: [application/json] + Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ + : \"journalist\", \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n }, \n \ + \ {\n \"filename\": \"4-intoxicant_dwindling-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/b04cdfea-fb28-4f12-876f-8f641c3f5087\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"b04cdfea-fb28-4f12-876f-8f641c3f5087\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['867'] + Content-Type: [application/json] + Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9 + response: + body: {string: "{\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ + , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n}\n"} + headers: + Content-Length: ['385'] + Content-Type: [application/json] + Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 081a83d87..a605a90b9 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -52,6 +52,39 @@ def __str__(self): return repr(self.msg) +class Reply: + """ + This class represents a reply to the source. + """ + + def __init__(self, **kwargs) -> None: + self.filename = "" # type: str + self.journalist_username = "" # type: str + self.is_deleted_by_source = False # type: bool + self.reply_url = "" # type: str + self.size = 0 # type: int + self.source_url = "" # type: str + self.source_uuid = "" # type: str + self.uuid = "" # type: str + + for key in [ + "filename", + "journalist_username", + "is_deleted_by_source", + "reply_url", + "size", + "source_url", + "uuid", + ]: + if not key in kwargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kwargs[key]) + + # Now let us set source uuid + values = self.source_url.split("/") + self.source_uuid = values[-1] + + class Submission: """ This class represents a submission object in the server. @@ -583,3 +616,86 @@ def reply_source(self, source: Source, msg: str) -> bool: return True # We should never reach here return False + + def get_replies_from_source(self, source: Source) -> List[Reply]: + """ + This will return a list of replies associated with a source. + + :param source: Source object containing only source's uuid value. + :returns: List of Reply objects. + """ + url = self.server + "api/v1/sources/{}/replies".format(source.uuid) + + try: + res = requests.get(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] + for datum in data["replies"]: + reply = Reply(**datum) + result.append(reply) + + return result + + def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: + """ + This will return a single specific reply. + + :param source: Source object. + :param reply_uuid: UUID of the reply. + :returns: A reply object + """ + url = self.server + "api/v1/sources/{}/replies/{}".format( + source.uuid, reply_uuid + ) + + try: + res = requests.get(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + reply = Reply(**data) + + return reply + + def get_all_replies(self) -> List[Reply]: + """ + This will return a list of all replies from the server. + + :returns: List of Reply objects. + """ + url = self.server + "api/v1/replies" + + try: + res = requests.get(url, headers=self.auth_header) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] + for datum in data["replies"]: + reply = Reply(**datum) + result.append(reply) + + return result diff --git a/tests/test_api.py b/tests/test_api.py index 7be956076..032c55b8f 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -222,3 +222,27 @@ def test_download_submission(self): # Let us remove the temporary directory shutil.rmtree(tmpdir) + + @vcr.use_cassette("data/test-get-replies-from-source.yml") + def test_get_replies_from_source(self): + s = self.api.get_sources()[0] + replies = self.api.get_replies_from_source(s) + self.assertEqual(len(replies), 2) + + @vcr.use_cassette("data/test-get-reply-from-source.yml") + def test_get_reply_from_source(self): + s = self.api.get_sources()[0] + replies = self.api.get_replies_from_source(s) + reply = replies[0] + + r = self.api.get_reply_from_source(s, reply.uuid) + + self.assertEqual(reply.filename, r.filename) + self.assertEqual(reply.size, r.size) + self.assertEqual(reply.reply_url, r.reply_url) + self.assertEqual(reply.journalist_username, r.journalist_username) + + @vcr.use_cassette("data/test-get-all-replies.yml") + def test_get_all_replies(self): + replies = self.api.get_all_replies() + self.assertEqual(len(replies), 4) From bd5d8c89ffd7da53e589bbaa602b8e119148e7b7 Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 22 Aug 2018 00:06:30 -0700 Subject: [PATCH 065/751] Adds qubes-specific things --- Makefile | 6 ++++ README.md | 71 ++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 4 +++ qubes/securedrop.Proxy | 1 + 4 files changed, 82 insertions(+) create mode 100644 Makefile create mode 100755 entrypoint.sh create mode 100644 qubes/securedrop.Proxy diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..1b3475073 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +install: + pipenv install + cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy + +test: + pipenv run python -m unittest -v diff --git a/README.md b/README.md index c27419cc6..612df2631 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,10 @@ mode, the file is not moved off the VM, but is saved as a temporary file in `/tmp`. In both cases, the response written to STDOUT includes the name of the new file. +#### tests + +Unit tests can be run with `make tests` + #### running The following commands can be used to demonstrate the proxy. @@ -71,3 +75,70 @@ invalid JSON. The proxy detects that, and prints an error message (still a valid proxy response). $ cat examples/bad.json | ./sd-proxy.py ./config-example.yaml + +#### Qubes integration + +Until we determine how we wish to package and install this script, +demonstrating the proxy in a Qubes environment is a somewhat manual +process. + +First, determine which of your VMs will be acting as the proxy VM +(where this code will be running), and which will be acting as the +client VM (where the client code will be running). For the purposes of +this documentation, we assume the client is running in +`securedrop-client`, and the proxy is running in `seuredrop-proxy`. + +Edit `qubes/securedrop.Proxy` to reflect the path to `entrypoint.sh` +in this repo. Run `make install`, which will move `securedrop.Proxy` +(the qubes-rpc "server path definition" file) into place in +`/etc/qubes-rpc/`. + +On `dom0`, create the file `/etc/qubes-rpc/policy/securedrop.Proxy` +with the contents: + + securedrop-client securedrop-proxy allow + $anyvm $anyvm deny + +(replacing the VM names with the correct source and destination names +for your environment) + +Also in `dom0`, edit `/etc/qubes-rpc/policy/qubes.Filecopy`, to add +near the top: + + securedrop-proxy securedrop-client allow + +(again replacing the VM names with the correct source and destination +names for your environment). This allows non-JSON responses to be +moved to the client VM using Qubes' native inter-VM file copy service. + +Copy `config-example.yaml` to `config.yaml`, and edit it to reflect +your situation- check that `target_vm` is set to the correct client VM +name, and assure that `dev` is `False`. This documentation assumes +you've left `host` set to `jsonplaceholder.typicode.com`. + +Now on the client VM you should be able to do: + + $ echo '{"method":"GET","path_query":"/posts?userId=1"}' | /usr/lib/qubes/qrexec-client-vm securedrop-client securedrop.Proxy + +You should see a successful JSON response as returned by the remote server. + +Try now + + $ echo '{"method":"GET","path_query":""}' | /usr/lib/qubes/qrexec-client-vm securedrop-client securedrop.Proxy + +If you have configured everything correctly, you should see a JSON +response which include a `body` which looks like: + + { ... + "body": "{\"filename\": \"7463c589-92d2-46ba-845f-3ace2587916d\"}" + } + +If you look in `~/QubesIncoming/securedrop-proxy`, you should see a +new file with that name. The content of that file will be the content +returned by the remote server. + +Finally, try invoking an error. Provide an invalid JSON request, and +notice you receive a `400` response from the proxy: + + $ echo '[INVALID' | /usr/lib/qubes/qrexec-client-vm securedrop-client securedrop.Proxy + {"body": "{\"error\": \"Invalid JSON in request\"}", "version": "0.1.1", "status": 400, "headers": {"Content-Type": "application/json"}} diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 000000000..35815f05b --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd /home/user/projects/securedrop-proxy +pipenv run ./sd-proxy.py ./config.yaml diff --git a/qubes/securedrop.Proxy b/qubes/securedrop.Proxy new file mode 100644 index 000000000..133c09008 --- /dev/null +++ b/qubes/securedrop.Proxy @@ -0,0 +1 @@ +/home/user/projects/securedrop-proxy/entrypoint.sh From cb9fbabac6cf32fae28ef2d4fb0c024b3ce2408d Mon Sep 17 00:00:00 2001 From: Joshua Thayer Date: Wed, 22 Aug 2018 00:19:21 -0700 Subject: [PATCH 066/751] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 612df2631..fe89c5b71 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ First, determine which of your VMs will be acting as the proxy VM (where this code will be running), and which will be acting as the client VM (where the client code will be running). For the purposes of this documentation, we assume the client is running in -`securedrop-client`, and the proxy is running in `seuredrop-proxy`. +`securedrop-client`, and the proxy is running in `securedrop-proxy`. Edit `qubes/securedrop.Proxy` to reflect the path to `entrypoint.sh` in this repo. Run `make install`, which will move `securedrop.Proxy` From 8bac45f6592cbab4d35cf2eafc4d4174b96905d0 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 22 Aug 2018 13:01:44 +0530 Subject: [PATCH 067/751] Fixes reply URL for the source This also refreshes all of the tests vcr cassettes. --- data/test-delete-source.yml | 177 +++++++-------- data/test-delete-submission-from-string.yml | 178 ++++++++------- data/test-delete-submission.yml | 103 ++++----- data/test-download-submission.yml | 106 ++++----- data/test-error-unencrypted-reply.yml | 116 +++++----- data/test-failed-single-source.yml | 9 +- data/test-flag-source.yml | 177 +++++++-------- data/test-get-all-replies.yml | 48 ++-- data/test-get-all-submissions.yml | 51 ++--- data/test-get-current-user.yml | 16 +- data/test-get-replies-from-source.yml | 134 +++++------ data/test-get-reply-from-source.yml | 155 ++++++------- data/test-get-single-source.yml | 166 +++++++------- data/test-get-sources.yml | 107 ++++----- data/test-get-submission.yml | 154 +++++++------ data/test-get-submissions.yml | 140 ++++++------ data/test-get-wrong-submissions.yml | 116 +++++----- data/test-reply-source.yml | 114 +++++----- data/test-setup.yml | 10 +- data/test-star-add-remove.yml | 236 ++++++++++---------- sdclientapi/__init__.py | 6 +- 21 files changed, 1171 insertions(+), 1148 deletions(-) diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index a9d50d1d8..bd9ce7f34 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -2,137 +2,140 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T19:01:18.017899Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T19:01:18.051211Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5236'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:01:18 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:42 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowMToxOCBHTVQifX0.DkOU_g.E1JTGc8DP2NYYz7Zm6gf2Z2gJIw; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDo0MiBHTVQifX0.Dl6X2g.S93ySXwdE3jYuOkvcWzLAdwJOf8; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Length: ['0'] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: DELETE - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04 + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e response: body: {string: "{\n \"message\": \"Source and submissions deleted\"\n}\n"} headers: Content-Length: ['50'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:01:18 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:42 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowMToxOCBHTVQifX0.DkOU_g.E1JTGc8DP2NYYz7Zm6gf2Z2gJIw; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDo0MiBHTVQifX0.Dl6X2g.S93ySXwdE3jYuOkvcWzLAdwJOf8; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T19:01:18.240078Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['2628'] + Content-Length: ['2630'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:01:18 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:42 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowMToxOCBHTVQifX0.DkOU_g.E1JTGc8DP2NYYz7Zm6gf2Z2gJIw; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDo0MiBHTVQifX0.Dl6X2g.S93ySXwdE3jYuOkvcWzLAdwJOf8; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index f00c79199..2a23a30b8 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -4,72 +4,70 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/add_star\"\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"storied kohl\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"actionable\ + \ aloofness\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BrQBEACw/XhUrSvJKTPBo/p3YcDI0hj3/tCbDIkZ2zjGiz/f5EbF7g0E\\\ + noN/+vM/uPNs7QEo8ry7wMYgZG/ep19AxIA/+eu3gzHIjoibyHB2Mm7QqLCTTlhor\\nkBZ7uDxpqqM0WuEcF8IuODXC6HoaVELS0oK4Edoa5gsvSt5iWaGP4AwwirfAE0dN\\\ + nuABim0CW69TVv9WbJX/OyBL5Uh2tpWDKqd+FijLCLXRRgsw0IoCheuEHt+S4YSJZ\\nyT40bcwP31J9kkp3cXaCJNj56orep+5Y3baK1EUHijo8apJhXX1O2CrT2mfYnOXm\\\ + npsRaLtsKA1FuIaVt0OOrARA/LNVT04z3v720JAsFO8j+/kc3gQKmo7tX2dEszctl\\n1beRw6EK7N7hxdYfFLuhAfRqJdRWNBv6YofwPvy98Gtl2ZKIjCX9GPalLnt/wC4C\\\ + nraYDrNZjSvNsmV2r85xNN/HQ/CWTDpSOl3jmOPDC959IfDmca+2zS6QyM6efeDiY\\n33IB85DL0G/tNCfWtiw3SEURFhBmb+XYMTtS9rnIXebd1HjsEsL5jtAInba+Nw0K\\\ + nv3U4RIqfyqhPHgsxMCURrMgS9yjF7W8R/dxt5DwUFFWv5mq/tdtxGX7ADYa4Jn8t\\nNqWvqO38J1bE0nXT3du55e6Yp23qTWJTb7ynIA4FPYxun6zBPGAK6aq8fQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QVRXSEJQQk5MNTVRVElDT01VRjVQNDJTNUc1\\nWTJBT0tNNVRZWUhRQUlZWVBOVENTNlYyQ1RDTVJRWkZSNjJSNkJGT1BER0NLSUpN\\\ + nS0pCQVVCN09HU0JQM1k1RFgyU0hRWFNORVBKUT0+iQI/BBMBCgApBQJbfQa0Ahsv\\nBQkB4X0MBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsTbrutc0Qtub1xAA\\\ + nq9MAG1IdEVEcStGQ2UdVfberCBfSuWBXbahE3hC8iBrGEHnVESi1smlKgDEa9Yuy\\nFhB0ScSQKLawMUPrCDINTj74PAfndshsYtnW1eMW7llLQ0vXv8Stfl0nP+ytdQuF\\\ + nxi/5SyAZXJTVSjmoI4JqCdPaHMrR8UxZwYc/7LwF0ydQfdzB+OJyWQSQsWzmL+u+\\nndThDKitMQBbrRag2c7oVscg2Z9MM/FRE4jiLweFsFIJ05wAmxq0F9rdJCaVXNHR\\\ + n5tY+U+rIvHmXxZ+3qLBFuDyjWVsStlQAkEeilFC2a5ionN6lX8PQp3YfUgfrytu+\\nHo171laiyw3bxUxEzkiuwljzk290GpA0JG3PkKJyLdBr8G/r0nag1/rHqJkrB+uB\\\ + nOp0Q6diazwxNC5c8dmEFrlotfExXdEarrwVYnoA2NaBOYQRPI6nsmTjL3Q48gpYV\\nK5IuqoXwPmQgUQOMGaso22dcs28Jo1Pp4R1R9IAo10FhuE5BaW5PPEx7TTtUFSDr\\\ + n5Ks5/lW5lVXZIrRv9ACNWawv9DE7Dq3fM7o7X2DgSdPaxHi6S/oFez1M8d6kUNHc\\noS7qnVvDHyVd2A9hs3zBh+hdZyvNFmdKTuj9cNlC7UQ2wp1gAYQRqhvZ9UKuKfJv\\\ + nCSlHymQiqYdshNtmNXwVEnQhdQCLNNL/00GzYKuY2aw=\\n=Xp0+\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-22T06:46:15.287689Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions\"\ + , \n \"url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ + , \n \"uuid\": \"0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"lurid lecithin\"\ , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ - n\\nmQINBFttgrMBEADJlA0VWoH1qM8ADbVb57UFAkLcmjS6Cmnipu6kAq3cuD02+cNT\\nEMIDwM30UEcN5DjAQqh6ItXa9ZTUcf5rAfzYS1oVFBIjSbQQddVxcVnHFqQhC96l\\\ - neZ0l2QywohN636BwhFn9bLFDhtOygwWzR8ekSE4Nr+XBWvJGvM4GG+huM+HPxwnf\\nI10fy0ODnVPSnN1EZjv8KojqRgcBdK6lUpP8tXBwVp+qJT4AO64J9AMwoXqGsmgn\\\ - nuMCk5K9mchpSKDrTYE5Qli1OXICfaFHafdm5RBNVCmUDxXqqgyDSUSnkwjz7/g/q\\nuzAJxgMmoy4EXpkNvMArlM10XP7w/0ijt6lrwbI1AsHQqn+FWG2fOs7wMGE0yhS+\\\ - nBu/Jjo6kGf3dkP4h5ptioUT6tgku/7wA4e4TomwI26QqXsAyjEiNvhq6x9AbqzO2\\nyzqMi/SGUGWuTDmQzESK59jJSSXWnVsVX90neeFwiuWiSniN4xhnnFvhGCTuscJF\\\ - n4w0c+JVxr58M8/YMnmXdWMSg/7Mt7xsutSy1Ym2lKbvTqtHB2GR+LSfUfTZcm3L9\\nUsGCvAwsIIrMSbagJCQJIaLDc2FhaTeIJNz8LrHQj0hElkyrenKPbVc6lSxdB2T/\\\ - nDmTuauqXIqWnqqVKPVViBi/3WdOYmr1deruND5X3LcUA9xkSfUi2gXDMkwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WEVHSERDNk9SV05QVVhWSkZLUEMyU0haWkNV\\\ - nSjNISlVWQlI1QUc2RlBJWkRRUENDU0NVNDdETUFKRU1USk5GWVFKRlZFVFVWUVdH\\nU1RPR0M2NFFDUk1YQ01ZSDYyUUJGNldOSFhYWT0+iQI/BBMBCgApBQJbbYKzAhsv\\\ - nBQkB4S8NBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIrDqYpiXlX/3fQ//\\nQ+syqKppyDKF6TF8kaNssXNaDRHm8ajQHVanXROUT8j6nj72Z+en6wnYGV5H1Gb8\\\ - nenpzmInPTMtdV0W4GdAgp+yV0/KVCsQrKBRGO0HDqnGNeBbby9qX0RUTPYwe+HGL\\nIFw0FSMMlwnSMytvh9rjBj5n3/n+YMb8MBVWGQceGvMZqjbRWcGmUpcRRsFuD36m\\\ - nIvuUhAOePw8MARr+T3PppJbUCpsM1cdB9hfeedoCgzBctRh8M3Vp7ihCQkfk9cvt\\nKkGQiQndaIaPtZi8ChX92pFkQoG+VWFEuAMoP+cVu+mpN/LpyZ1Hj16Vw+hToYd3\\\ - nPyvsMgWc1rB+tz7YHa0ZbGJCgU/armK7DHtnUQaznUPmPQtqcIMD1KFFcmb9O6pH\\neB+HMKmS6vZylYiGkLRWsmbC+m91weWMNgi5q0fu+XFYqtu66Tzaj39NUuFUUnys\\\ - n9XDd6QdQxwJmytFOjYB+7gLJn1OXOl7hzovklFY7x7YdpCKVNQ71QKqkbzM6qN13\\nEU/qLprjT2YI5WNfzU2ePHpbgpQlEOYQ2JUNFjZZ+a4ffNgGXpi7fgW3wrvsDIun\\\ - nwZPDSxzlVejxYuseCpxp9gat2coXGnNTInNHhExXXtaj7bqP7FVuya8Xec3BJ9yv\\n3KgNMRKBRy4J+AmGP5n7STAh+N8iQ3uGiIg0kzqCoxk=\\\ - n=AHZp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ - \n }, \n \"last_updated\": \"2018-08-10T12:19:00.992348Z\", \n \ + n\\nmQINBFt9BrwBEADeSxgFEMM4oc7ClnilLflwOf2kiFz7W0j4j1S/xDf+TcacNtmV\\ngwQxv34g1fKBMF4fXO3EelSM4hsxeJdnm60fmBEdzFY5UpD2l/2hWUXxFEcPO0V/\\\ + nIIGq8CdwREzUjg6uZYw0sOz6bmk673dKZWYegbhEm1uXKwWtr42vLyeplJgRCgvF\\npQHFTZSKsZr/hhX8CZXCBKBcd9HgQWZ+MllE2uV2CkBy6RuJMo7wJNNn1jtC9Kp8\\\ + ncrrJvVRZt/3PwlKBFQlsxcRpQd8OBdD4i5iut+gA4YLSGelgSd/5DVYixz+LQsVD\\n80C5GX67iyfb35+DFXYPeUdWPBvtQoyFgZzWTHSjY3QUKZRPO1Cc5KnyH7mPy44x\\\ + nuEJpexd8URxkWe20o20LK2RbKEfBm70eUZYRg4R/TGKsFL9KcNtHUyk38rO+I5Vt\\nM1PGi9rIhjltkLUWVkuXlYTYngOdpSVskZBihuqOH5VZdxfQciURQDuiCMT4A9b6\\\ + nlqG/keD9ACE1DxHwGxekUMnDJ+2Sj4fckWssEewmkDE+meWtUlhyPgmnb6B40YxG\\nxD/CPdBoU3E6rJCfXWFy7Ei8ek3SWMqOotIbhdZSzjqSHKux3Bt9ZTa6/vff1jQU\\\ + nddhNMdYc44/1mdWx+Zwt65tE8e7sL3tNdzBSPuH5j0+jabGLlWe3NOvW0wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SVQ1RFJaSkIzVkU3Uk5MRFNXRzZNSkI3RlJQ\\\ + nSEVFRFNDSURFUkZVQk9NRFBWUTZDN0ZLNFg1TVJPVVBPQUVWWkI3U1JaTkRBRVRH\\nQUczNlY2NUM0Wko3WVdPTEpJS1ZHV0JINFNYWT0+iQI/BBMBCgApBQJbfQa8Ahsv\\\ + nBQkB4X0EBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQAOTp6iSfEsXlRQ/+\\nIFXWeE/JZQ4KwvnZRebTQ5hdBLO0zbZz8dudyYJcRJkPz600jbbesdCiKYGhAV/f\\\ + nnp1nUtHg6gZt8chjs4+zyuRhnuiudr5a2nwTypseemuL95eGj6w72Cashp85YNB/\\nOTz33UaXeyoUkYKCX1ujVMX9yyTo5qcc26hzOvLh8jDfkM17Byl5RX2m+TQVEges\\\ + nSGLL1LHSKynCqS0Cw+ijFcEgeTAKd2NhfqcznYO8k7ZlICnPhI8uP5qt3yas8MQx\\nAcpomJ75A+ej3+rpYr0gcrwTNxelMT5ZMUvAEQn4hCOuVJG//ZCVoY67zFXCetm4\\\ + nTanNl7hsa/fOR7u6aYUZmJmMmIW1VwvkZotYJpdmkKurwXyge6ZuJpdBR8fV1rvq\\nkWlwvpOKRXhcpxIKQVquGugb4zNBpmdQ6cuy4E/RdDyUD3Q6SsmaMMWX1qsIYHzk\\\ + nBH00FEtAy5Hrzvjp1O7GeJfJZ/FBYBpJjq9FACO+xj5SdogkHuTOXHARmkB8fD/m\\ncb+lHwL2mekpyJYf1bxdO1LbC+UAoBQrSpaRhO0XFDJfRYIj956YTAzSo3nApt9o\\\ + nl6bXtk042xZ6+3KgOXMqe7iURQ/UVlI2sNfoI4fSwkvsnqQ9O/ySUvTvcMC5WLyI\\ntcQmGjKtnskwRzd7Mi2ZI02p2C84Jzy7u6SnR4/JnEY=\\\ + n=XyNl\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ + \n }, \n \"last_updated\": \"2018-08-22T06:46:22.818014Z\", \n \ \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ - \ \"remove_star_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions\"\ - , \n \"url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ - , \n \"uuid\": \"b8764f7f-a066-4d62-8043-7dc62af021aa\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"purifying\ - \ squeezer\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFttgroBEADL18oxabIYN62ADvH5ekkCr3G7ku5EYazxS4QXc7xUWmM16dOI\\\ - n1KuLs+Dtavqh3lW9NA22B2CnQHoGiAT/4X9Jbo+PA+NktjIIChXWPj6toN/QNL+l\\n9+BM1UUImqwextlG8txLsOVIu7LB071Zvbc1DLVoyKeZKu9S93fE5aJmUvn96N6Z\\\ - ngVVgBq4o4zTGrdeGbjUZWM5eyRNmiCOMnwVXlJT3IGzfXRqgrHepn0YT7k9DGXQm\\n2kbihWWZSHAR1R7/RjI7wiqB/U/n2isM6krTLgwras+8CoymSBPPf51k86NgybHf\\\ - ndMtQXEkFpaJseAV+rdso+wDt0Ml8mB57oNhlEo3lii7+ObGZ2Y/8ug0u9TYIGl8f\\nrbo6laJBF+qyOxuEZxpiApE2WcjcLToqjYzUOm361DE2rzrGtMz2ivgCqGcCpNWI\\\ - nc42L4bCwCutiWjOWZrRPpM3TchBtNFMXPMurBKfQrEXZaaWH55DmfxN6YZAEFAaU\\nguNPRd/t7FuUU6eQJ8JU7jPZXkvMAd8ThGU6xoLKjl+cfrUN9vf0JV1ZXWiUT40d\\\ - n1dJaxHgd2US+Uqk4ZGxEzNzkkEFxnSf7VeSXxjyavVD77P3a77Bbw/N/VdHidFjH\\n0SV8W6v5PrZbWwz8kan/9wmZlW8TdmVXoyGbE/Br/nAisdBAI3M5h0jsNwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WElaUFBCTkVNNFVISUtaT1dBUzVPUVNMQTRW\\nM1dVN1RCQUZUR0xYQkUzM0tZUVA2SDJQRUpCNlVSSlpKMjY1NlpHR1VIRkJSVFVY\\\ - nRFBHVFRWQVRLWDYzVlhQTzdDUFY0WEgyU0lNWT0+iQI/BBMBCgApBQJbbYK6Ahsv\\nBQkB4S8GBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQo/sjDcjNJ2PIAg//\\\ - nTVBZHBxqFdLDq78CekwBvMKPB2ahTnYdL1SbvJGsNIblPj8gHu7t+BFLpg9XZsrC\\nOUG3OSG4BKOw4127p3C+1VzLDI0xMvG935rCUGaZQ1s3Z48IY36HNDUU9otftKU4\\\ - nGaTCmnNq40HWtLun4tWqT+kiqXGxm8Qo4nV1iCtYxhLGMzt6AuP4BVDrARXh0nQr\\nd5ltq/CcrV2Ofw3MpwDjZXAnp6QCL/l8ZwTENfzd60uF5o2QAzZZ2+zSBv14BwYm\\\ - nxj1ohk0LF7zT5JZrgu5mC/kndMXlrF8LNhj3SCZhj8DvMgQcV9iH5SpKdsSSajFH\\nC2hRHm4Ys1CZ0clRBxWjNS85YIkqAP6WbiOMsXz6+MqlR46kZG3uT9zaW0m56pQ9\\\ - nw+02kWdBy/7GgFu9Ta53Mqrnv5u7dXHjLgLZO8SxQwCee2S+GiwlUp0pGzxpnjlD\\nH9p1WUXKkbKppvXiug6VI6xzqZ7OjHh+m5Qjz6Ea+Nv1fizvsPYetoACtFQdXsAj\\\ - n352cB3Df63Pj2LwsDp1VEYWEmTSEx7YY9gwNIrXakQgRcVusEtbReHLNZadaCe6E\\nLkpf4Mod2rXLJHpO0IgfxpBTdwV479dCi7vr0ZtVzg77S8Ssaq7uKzTdp1MMjBLD\\\ - nHF1E8pexGXxe5TB1s8XqsTKxkBBxB+zzxvNFhfnieW8=\\n=T9Jm\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-10T12:19:12.147910Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions\"\ - , \n \"url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849\"\ - , \n \"uuid\": \"2caafcf4-0983-4e2a-9aba-f18146076849\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions\"\ + , \n \"url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859\"\ + , \n \"uuid\": \"9930c24a-7829-427a-b602-77fd383b3859\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5401'] + Content-Length: ['5237'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -77,30 +75,30 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions + uri: http://localhost:8081/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/aa641164-e646-428a-983c-fe8f7390994b/download\"\ - , \n \"filename\": \"1-storied_kohl-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ - , \n \"submission_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/aa641164-e646-428a-983c-fe8f7390994b\"\ - , \n \"uuid\": \"aa641164-e646-428a-983c-fe8f7390994b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477/download\"\ - , \n \"filename\": \"2-storied_kohl-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ - , \n \"submission_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477\"\ - , \n \"uuid\": \"4124cf62-2bc5-419b-86be-e00da5d84477\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/c1bff57a-113f-4b85-9b78-7a7d137f4ca4/download\"\ + , \n \"filename\": \"1-actionable_aloofness-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ + , \n \"submission_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/c1bff57a-113f-4b85-9b78-7a7d137f4ca4\"\ + , \n \"uuid\": \"c1bff57a-113f-4b85-9b78-7a7d137f4ca4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42/download\"\ + , \n \"filename\": \"2-actionable_aloofness-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ + , \n \"submission_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\ + , \n \"uuid\": \"1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['1027'] + Content-Length: ['1043'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -108,21 +106,21 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: DELETE - uri: http://localhost:8081/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/aa641164-e646-428a-983c-fe8f7390994b + uri: http://localhost:8081/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/c1bff57a-113f-4b85-9b78-7a7d137f4ca4 response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: Content-Length: ['38'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -130,35 +128,35 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkzMjk3MCwiaWF0IjoxNTMzOTA0MTcwfQ.eyJpZCI6MX0.DKawe5bPF0-nh6DeOb7FB-pL-7MvkT-pBeua6U1olP8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477/download\"\ - , \n \"filename\": \"2-storied_kohl-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa\"\ - , \n \"submission_url\": \"/api/v1/sources/b8764f7f-a066-4d62-8043-7dc62af021aa/submissions/4124cf62-2bc5-419b-86be-e00da5d84477\"\ - , \n \"uuid\": \"4124cf62-2bc5-419b-86be-e00da5d84477\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/a1af208a-cc47-407c-9a53-79a2ef7efe9a/download\"\ - , \n \"filename\": \"1-purifying_squeezer-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849\"\ - , \n \"submission_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/a1af208a-cc47-407c-9a53-79a2ef7efe9a\"\ - , \n \"uuid\": \"a1af208a-cc47-407c-9a53-79a2ef7efe9a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/df94fe82-c582-4118-8fa2-1b81eca738b2/download\"\ - , \n \"filename\": \"2-purifying_squeezer-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849\"\ - , \n \"submission_url\": \"/api/v1/sources/2caafcf4-0983-4e2a-9aba-f18146076849/submissions/df94fe82-c582-4118-8fa2-1b81eca738b2\"\ - , \n \"uuid\": \"df94fe82-c582-4118-8fa2-1b81eca738b2\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42/download\"\ + , \n \"filename\": \"2-actionable_aloofness-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ + , \n \"submission_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\ + , \n \"uuid\": \"1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/386a76f2-726c-416c-9368-db1a670e30d3/download\"\ + , \n \"filename\": \"1-lurid_lecithin-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859\"\ + , \n \"submission_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/386a76f2-726c-416c-9368-db1a670e30d3\"\ + , \n \"uuid\": \"386a76f2-726c-416c-9368-db1a670e30d3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/bc4a5846-3ff3-4de4-9f43-bb3b9cb822af/download\"\ + , \n \"filename\": \"2-lurid_lecithin-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859\"\ + , \n \"submission_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/bc4a5846-3ff3-4de4-9f43-bb3b9cb822af\"\ + , \n \"uuid\": \"bc4a5846-3ff3-4de4-9f43-bb3b9cb822af\"\n }\n ]\n\ }\n"} headers: Content-Length: ['1540'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 12:29:30 GMT'] + Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxNDoyOTozMCBHTVQifX0.Dk8Wqg.7HzB7FOlg5fIt3kogTSRGUBUXUk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 7bd1558f1..8aac7f0d6 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -2,97 +2,100 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE1MCwiaWF0IjoxNTM0OTIwMzUwfQ.eyJpZCI6MX0.gADcy0eDjFAvFap5f2hTbHQjeBMtMeMtdYspHokrV0U] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/332be45e-794d-4c68-aa38-fe6e930b4c20/download\"\ - , \n \"filename\": \"1-disadvantageous_wildcatter-msg.gpg\", \n \ - \ \"is_read\": false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d\"\ - , \n \"submission_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/332be45e-794d-4c68-aa38-fe6e930b4c20\"\ - , \n \"uuid\": \"332be45e-794d-4c68-aa38-fe6e930b4c20\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8/download\"\ - , \n \"filename\": \"2-disadvantageous_wildcatter-msg.gpg\", \n \ - \ \"is_read\": false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d\"\ - , \n \"submission_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8\"\ - , \n \"uuid\": \"9ad01000-9fd8-43da-888f-320ca02ccae8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df/download\"\ - , \n \"filename\": \"1-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ - , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\ - , \n \"uuid\": \"f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c/download\"\ - , \n \"filename\": \"2-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ - , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c\"\ - , \n \"uuid\": \"bcda9366-22a9-43c7-9485-f31313e3047c\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/49e25441-b455-4372-8272-f670bcd685f0/download\"\ + , \n \"filename\": \"1-outstretched_washbasin-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b\"\ + , \n \"submission_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/49e25441-b455-4372-8272-f670bcd685f0\"\ + , \n \"uuid\": \"49e25441-b455-4372-8272-f670bcd685f0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f/download\"\ + , \n \"filename\": \"2-outstretched_washbasin-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b\"\ + , \n \"submission_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f\"\ + , \n \"uuid\": \"8660c146-338e-4cf1-871d-dd89230b533f\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0/download\"\ + , \n \"filename\": \"1-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ + , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\ + , \n \"uuid\": \"f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca/download\"\ + , \n \"filename\": \"2-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ + , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca\"\ + , \n \"uuid\": \"6ce92d10-d865-4a86-8a34-3e063a9264ca\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['2077'] + Content-Length: ['2049'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:07:49 GMT'] + Date: ['Wed, 22 Aug 2018 06:45:51 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowNzo0OSBHTVQifX0.DkOWhQ.ADHqqekI351tuHZqPjLaoeqS8Hc; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NTo1MSBHTVQifX0.Dl6YHw.4WsxwYmCtaVOkiwxh4wiVeWvZ7M; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE1MCwiaWF0IjoxNTM0OTIwMzUwfQ.eyJpZCI6MX0.gADcy0eDjFAvFap5f2hTbHQjeBMtMeMtdYspHokrV0U] Connection: [keep-alive] Content-Length: ['0'] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: DELETE - uri: http://localhost:8081/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/332be45e-794d-4c68-aa38-fe6e930b4c20 + uri: http://localhost:8081/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/49e25441-b455-4372-8272-f670bcd685f0 response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: Content-Length: ['38'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:07:49 GMT'] + Date: ['Wed, 22 Aug 2018 06:45:51 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowNzo0OSBHTVQifX0.DkOWhQ.ADHqqekI351tuHZqPjLaoeqS8Hc; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NTo1MSBHTVQifX0.Dl6YHw.4WsxwYmCtaVOkiwxh4wiVeWvZ7M; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE1MCwiaWF0IjoxNTM0OTIwMzUwfQ.eyJpZCI6MX0.gADcy0eDjFAvFap5f2hTbHQjeBMtMeMtdYspHokrV0U] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8/download\"\ - , \n \"filename\": \"2-disadvantageous_wildcatter-msg.gpg\", \n \ - \ \"is_read\": false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d\"\ - , \n \"submission_url\": \"/api/v1/sources/69bbd6e9-52ec-41ae-b0a4-83843287ed2d/submissions/9ad01000-9fd8-43da-888f-320ca02ccae8\"\ - , \n \"uuid\": \"9ad01000-9fd8-43da-888f-320ca02ccae8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df/download\"\ - , \n \"filename\": \"1-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ - , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\ - , \n \"uuid\": \"f5fd0c52-5a7c-4034-a43f-70a7e873e8df\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c/download\"\ - , \n \"filename\": \"2-melodramatic_birthmark-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f\"\ - , \n \"submission_url\": \"/api/v1/sources/e977e42e-d4da-4153-abf3-0912c689253f/submissions/bcda9366-22a9-43c7-9485-f31313e3047c\"\ - , \n \"uuid\": \"bcda9366-22a9-43c7-9485-f31313e3047c\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f/download\"\ + , \n \"filename\": \"2-outstretched_washbasin-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b\"\ + , \n \"submission_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f\"\ + , \n \"uuid\": \"8660c146-338e-4cf1-871d-dd89230b533f\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0/download\"\ + , \n \"filename\": \"1-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ + , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\ + , \n \"uuid\": \"f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca/download\"\ + , \n \"filename\": \"2-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ + \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ + , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca\"\ + , \n \"uuid\": \"6ce92d10-d865-4a86-8a34-3e063a9264ca\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['1562'] + Content-Length: ['1538'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:07:49 GMT'] + Date: ['Wed, 22 Aug 2018 06:45:51 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMTowNzo0OSBHTVQifX0.DkOWhQ.ADHqqekI351tuHZqPjLaoeqS8Hc; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NTo1MSBHTVQifX0.Dl6YHw.4WsxwYmCtaVOkiwxh4wiVeWvZ7M; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index b45400b02..394379f16 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -4,40 +4,40 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzNDg3OSwiaWF0IjoxNTMzMjA2MDc5fQ.eyJpZCI6MX0.xBkt6YFC5sjIKT_aXVPPD5194pgxGsLSbGxlUSyS7wE] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328/download\"\ - , \n \"filename\": \"1-confused_blotter-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2\"\ - , \n \"submission_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328\"\ - , \n \"uuid\": \"833fcb33-d5be-4119-bffd-7d7d442bc328\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/85d6c0bf-1245-4c57-88f4-3039979c2acd/download\"\ - , \n \"filename\": \"2-confused_blotter-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2\"\ - , \n \"submission_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/85d6c0bf-1245-4c57-88f4-3039979c2acd\"\ - , \n \"uuid\": \"85d6c0bf-1245-4c57-88f4-3039979c2acd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/ce2b7a2a-a076-4e1e-abbc-d91ab6366231/download\"\ - , \n \"filename\": \"1-traveled_worship-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987\"\ - , \n \"submission_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/ce2b7a2a-a076-4e1e-abbc-d91ab6366231\"\ - , \n \"uuid\": \"ce2b7a2a-a076-4e1e-abbc-d91ab6366231\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/a28c8fcb-ac8c-4120-bf56-1477197ee8e2/download\"\ - , \n \"filename\": \"2-traveled_worship-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987\"\ - , \n \"submission_url\": \"/api/v1/sources/5c4cd9d8-d421-4a39-bc6b-6c79346ab987/submissions/a28c8fcb-ac8c-4120-bf56-1477197ee8e2\"\ - , \n \"uuid\": \"a28c8fcb-ac8c-4120-bf56-1477197ee8e2\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ + , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ + , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ + , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ + , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497/download\"\ + , \n \"filename\": \"1-disaffected_caliph-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497\"\ + , \n \"uuid\": \"68b16231-aaae-4a40-bfa0-348f3a69b497\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10/download\"\ + , \n \"filename\": \"2-disaffected_caliph-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10\"\ + , \n \"uuid\": \"8a46abf1-fade-4015-8abf-490c43356a10\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['2045'] + Content-Length: ['2061'] Content-Type: [application/json] - Date: ['Thu, 02 Aug 2018 10:34:39 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMjozNDozOSBHTVQifX0.DkRvvw.O0y66nWFuV5umboAf3YwaxIKBKk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -45,37 +45,37 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzNDg3OSwiaWF0IjoxNTMzMjA2MDc5fQ.eyJpZCI6MX0.xBkt6YFC5sjIKT_aXVPPD5194pgxGsLSbGxlUSyS7wE] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328/download + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqAQ/+LyqyFGfYX1S248xECMqqVH2qHUF/K4Hr8aIOne0em1pkTNYT+ZbcbrK9 - dPSl1B/NMm6DEUdR5DyAmVMP6rI+TVgJrPodhoWPkTDCKKsXz4CScyE3H4Ws5BfdCxN5EeQmyhYu - s/ImGKB9mMXryH9kXKGQPjEGsIWxoziySNAFgfk9k0pa/XSr/m+BKVU2cFWANfZewq/c0ykwupvk - 0FQNft8Z2dNbJNB2X6D5m5/yx7DpZ3gv/IOgZKJskCY4WJj8Z/52z00nwbBAl66io04+FX8Q/mnU - rU1dW79Ir4YEuwdX13bmOLpKHbwGB3JTUws9MCwYBZqWxXV4va/ov+i9gCXuJSFlXx/+g2/etd8l - tTwn6L/AB4mXpZE7zJTQAvG0dJZkpz+bTXqSBwLcvpLdPeS4ubEsuJs8pv24qB5QbJccuNv7CfrZ - j7To91iuxERsHq2hkr5gVkJTZjouJiX2a85Mzol+dF37bpSbVIwKOIYvK/BmVtbv0dnnsnQ0btdQ - PXci0DhWF6+7dja1CM64kR29cdwY+bniZUN4Vg/PRoSg4yRMwpoa79pIOL9zdcF6Z/1GElugDxSr - jBLC6fQdva+XcQcU0+WRw4eIZtx1lxwixIsPydLmZ4Hme7TCTkZV9l8hH6wY6/LdD5FhbXCI0IXe - q78R3M8+USS/K6z+xoTSSwFagXPoJfr7O78VmYx49Ga+t1hnrqQECnkk+bAz0uGnAGlxzklJ5T47 - 98Qt6VhqRCa4M6d4xREXaQAqaxqKYEyyS9aexI2qP4wULQ== + hQIMA8PnxMCiIBsqARAAvo/AHEoBE4pjo+5C6F+fG+hc7u12EBuZF/WdhUkvPDtZ0/k71ztAflrI + jakoaJ8kyWhNY1i8XDteFRELkLxGg79LKK97VDDgMjz2/L6pNzTAixCwUKowx2RJunF5EL3UqOE2 + P4PELlO2LBSMsf0ZmzY4oYyQs3v+EGO40rekwU6e6XMEtRP6RI2c124qqLt+g6ZUvJ1bq8Eori2v + +dMq/PKzmDbah2vlxpq55jo2WFF416ELuxutssXLhcxKYS/+IiF0loYpveHvW6/OH1tr6PfWAYzS + 6o3xm71f/R5D/HKgmBQF/251SNh+kUgdfX4s3ZplPZ3WK8MQcPpjUiiKnZxxBOjMWTeSwDGaF/kJ + 30uXLvPTDO8H8KDswdrIaPWtMwGUUSb+PqFwNlYc2X7K7G21+BvMo1MRgLJ6T0EkaLSb/lUAf+rS + 1xGV6WGUg7VxrBYfnYBN9AwQAAdD8Jb60rfgHZrtkvhVRMuxQ1rBBleiXxMWznlF8PJ0/XUYHf35 + lfGfIntHv2Na6zELJgyZG4dLCVA6/uJqIZIwc7cISYVQa+ZC8LdnJN04TJoWg2cefc01Njc1F5bG + X6dlTci/eF4yj1tch0aODozd6Lto/IHRV5NDgrjzefZj6Q2PAas2iubN9zSrRCYXs+S1oSuePdDZ + z9A1GpueLbn3wBlGR8PSSwHX0FE686fmYY4RsNBJhxjqEmIqjZt+nddMXoA7m+bFwscZlQ4Ea8Ue + vj0k498FTnDYOUSo03m4GMtyakmGjMYHWbEwzBnouvnaUA== headers: Cache-Control: ['public, max-age=43200'] - Content-Disposition: [attachment; filename=1-confused_blotter-msg.gpg] + Content-Disposition: [attachment; filename=1-humanistic_recognition-msg.gpg] Content-Length: ['604'] Content-Type: [application/pgp-encrypted] - Date: ['Thu, 02 Aug 2018 10:34:39 GMT'] - Etag: ['"sha256:fed2cb0c519573d6a0db5a78782d9031d389a8f2d1d5504c73708f6ee6eab915"'] - Expires: ['Thu, 02 Aug 2018 22:34:39 GMT'] - Last-Modified: ['Thu, 02 Aug 2018 10:31:47 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] + Etag: ['"sha256:3d0d9ca622db774e1d63cfd9ff221cf610d71df0ab16ad4ad497cf366980bbae"'] + Expires: ['Wed, 22 Aug 2018 18:44:09 GMT'] + Last-Modified: ['Wed, 22 Aug 2018 06:43:45 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMjozNDozOSBHTVQifX0.DkRvvw.O0y66nWFuV5umboAf3YwaxIKBKk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -83,24 +83,24 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzNDg3OSwiaWF0IjoxNTMzMjA2MDc5fQ.eyJpZCI6MX0.xBkt6YFC5sjIKT_aXVPPD5194pgxGsLSbGxlUSyS7wE] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328 + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328/download\"\ - , \n \"filename\": \"1-confused_blotter-msg.gpg\", \n \"is_read\": true,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2\"\ - , \n \"submission_url\": \"/api/v1/sources/57682829-759b-4c92-89a0-a3c49ca7eca2/submissions/833fcb33-d5be-4119-bffd-7d7d442bc328\"\ - , \n \"uuid\": \"833fcb33-d5be-4119-bffd-7d7d442bc328\"\n}\n"} + body: {string: "{\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ + , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ + , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n}\n"} headers: - Content-Length: ['466'] + Content-Length: ['472'] Content-Type: [application/json] - Date: ['Thu, 02 Aug 2018 10:34:39 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMjozNDozOSBHTVQifX0.DkRvvw.O0y66nWFuV5umboAf3YwaxIKBKk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index 42026ae57..10b2c9c77 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -4,70 +4,70 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIyNTIwMywiaWF0IjoxNTMzMTk2NDAzfQ.eyJpZCI6MX0.yu2572oWvijeB3rWIgmB7nXBNBRYfjiGGpOuK_VumxE] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"gauche ineffectiveness\"\ - , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ - n\\nmQINBFtiszABEACgri/PNauKN8H+AuiaW6M7wJv+T0HjwT/7p9PcXAYIXQdZ1R4m\\ncWOIdLHSkTwmEPv2M/3HHsTxd76j6ebuwiFv1N0zxsO71nMbtfO9Czh21CxMKXsO\\\ - nrE/cD1k3Sg/lMYuZ2pD3JaEKuOz+GcOnF1FbnB2i6Zl9uZ6Y/fhGVF1xrAb1g/I4\\nEY9csUiemmO6xG7p10WdkwjIfyv68waNyidaTF5LGXKqfGU6RyZOh7uO8ctELi44\\\ - nxCz/8uW/QpWVG7rWUDDkgOzJd2AhoyOkHT5XlL+/uzI/0Z/2gLUyk52U3mgs0yxi\\nlm+ymhGQEUK127aSDKE8E0Yu4kGvh9jwfUeYDAndf0pg/y+e2zfFmp4lx9TH8rSh\\\ - niDgAoOpEhw3PesA7j26i22VIeAJLm+tYFAF1IMS9F16up4SNY/gYNinSKuuiB2zZ\\n7HuoVKMDeL1hZn5iI5N/Pgmh8x4LFwklHuSMYo8xrl8zEPG+bQLMGobFXSQ6VYfz\\\ - nYkjEqmmbIXPLEgvu13iBr3WmrEaJ/CrZSTv+OcTLc4pelUp4ebHdMWNDcEKYrqlB\\n2p2GLXkWuUd7OlRtJvnW98o4W1flNWzjto2t1k5FzQfuwtP5dwlg4FmLpqXlmZ5G\\\ - nuLPxOa7RZzZj609wwAAyIAa7jCJFhnsHhm/Z7KnpHSbmlmdtshB7EhufKQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8MkFXU1k2Q1FVRDVURkVYVTQ1R1YyRTZFTUtH\\\ - nRVdOWDM1NVc3RjJBN09XM1BIVjVNQlFCTEJBSVhGVVA0SEZDSU5RNjRSU1c2TTNE\\nMklKVTYzUUlYQUFEUjdORlA3VkY3QVROVUc3WT0+iQI/BBMBCgApBQJbYrMwAhsv\\\ - nBQkB4XKQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQA2EhVtjERYNx1w//\\ncNZpuGfY5xCD4Pb70MNtAyaFfQ2qOKETGwwtWzbm/HdIrMmmUkTpy5Fq64RDXlaU\\\ - nTSRWAyHS/DejfSz6vFHWe2vysgDIS8V7tgPdKgfULnIGv28tFEiSVW3wgzW8rElo\\nGojTk18qv3rVAzHCoh89H1kNtBkT1il/WL2XYHhGNUAz3sMiEFWQ4FLFJAlOniaz\\\ - nVb1GGmVo2RLJuRVxBgp9Ukgvw8ktwZNmljAcWDkvt4FFCIJoGjFLSLMcdAHJSJ7k\\nV71jLtVcu/2U9qvx7q33a+HnrxrBzorSuCGxAPXWgLLMlPcvvogi3/+yTt5yFh41\\\ - nCnPIDGcNgKpY15o1xjQggyugt1B+mUorRQ8eIepgw2gr5DpGD0/zU0Ns+gtnp+g5\\nnzNHlXQ5Kw2zArxpYA2B0tljj9XPDC7xXjZjxMPJyWAolUj/I66hAG0bTRpyi5fj\\\ - nXrxeHpX4A6bL8fS6rb2bldLEQJ/ZV98oaay7eBiV51Dwjfya+VVN/5EfSbI/w/7p\\n/k40D68frAmyM/EwvuS5BGu+1RgIF0ri9rhVQzgTjPI3VHkVIfXnqZvqxJO9ZMBT\\\ - nKer+/4uGHGWtDgHvg1Mh3nZRTT9e/1Q5Ku/gHChHcJ67slpiNcxtPOyoxJuz0NxH\\n7lTOb+QbFbbP6Sg95ROtgKPNd3vP3CNH5KTPbv1BAYM=\\\ - n=1soS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ - \n }, \n \"last_updated\": \"2018-08-02T07:53:23.148910Z\", \n \ - \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ - \ \"remove_star_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/submissions\"\ - , \n \"url\": \"/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685\"\ - , \n \"uuid\": \"3e7b88d7-7423-443f-a475-df3a774a5685\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"micro plundering\"\ - , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ - n\\nmQINBFtiszcBEADOVIhklOxLW3wTg3lovxBzQ3ZeS86M194AfRR37znjs56n7l54\\nj84d21DF5NkPKJHPovx9pJY4GRnVP15Wmld9j90hjcwSJ/DTg1Mdv5NwEzNSR4jB\\\ - nlTTwtOcHwXvG3lzFKXH01o7ItOaFaZYTXFWEEVU8BD6IQs7P10znlsOIi2bkIflw\\neEEM9bt6hMRVm6muTA3OlOZMLfX3LdNm4sGeG9OggvWVeCYFl9dKVMiMSXYCbyvz\\\ - nMPxsW7HEgqg53hY/vBvgzECTl+1Nz/RyF9x9j3dFVFx4VvYP2a104tKaYSu72zmx\\n3SWHvFLUnto/s0Ua8WHbdzjhG3RPvj/OP065ot3RzLkkVZmM6ToR1hOBpijf8UyE\\\ - ntahjc/hQlLdiolKEvwwGLskXc3F0dKr59GDAoDucl85D08yf2GRwu/3QG3oQ0LBt\\n1aEhk/dMPLWngqw8QE5rDzgKLwHU4qPqmHWwfLUdoAn6Mo1fzJo6eskl3lEtPhli\\\ - nMf0ceOmk4hAohUmynK6ZnDK50lZ3V8+tQ5ytxpXzANyg8gATAFK3FHN9w1vAD68i\\nVAts9qUZOEzij6BkRPp82aRWX+XHdY6b2R7rac3pQKupACfgFMzsE/JguJEHev5e\\\ - nAKD8ncQhE6gsKvctFKu8zdqzecNq1P8+ZYykWB1/hybA+Lg4N8JxyipOIQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UkVVM0NDN1BZSFRCN0NDMzNYRlFMR1lUU1NI\\\ - nVERFRk5IWkZNVkk2NkNQN0UyWTQ2WkdCUkkyQTdUNkc3NzZHRlRZTlJVTFhSVTdR\\nTDdSUUkzVkFCUEhEV1o1QlozWlZGQ1NHTFJBUT0+iQI/BBMBCgApBQJbYrM3Ahsv\\\ - nBQkB4XKJBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQq9aaEfJ2lUtWQQ/9\\nHkmCn+EKjXjdUOxerhAxPl5JLU7Il8Y9Qw14XPd7qO4CqPOpZuvtHtnhQWMpwFsm\\\ - ncxTQzTvmH4W8QAd4lRyTUokUpnpwBRWGATzdkrIQMop42eGYmIjrVfp9R4mLqUux\\nMQjaIDeJjLvEK8cKt0rNCafF5jFmex1lFNCNfHr6Ai/YI3dZJq2bzuiQM3Y001fQ\\\ - n+vj/+qE5rFYhsR5jd+bamthlWVcvO1s/fdePjAKKdNCT33kcvxgO84kk957KO9Za\\nIVk2c79eg63wq+sHOMqry3RwVBwDtekPkKjipamlKUy4wCPQ+AqfhuE2TdZMsMlA\\\ - ngKp8/7dssKoAD9qYwkbJ2RFgqcZAtV/G1CPzMwZrpYminSZj1JNKSe2vECh+aQmY\\n0NyRzseKKm1UfNbKHj8ejo5Uaprvywcdpum7yEhN+P0VV94mDbuTLEsoQn1+mPsr\\\ - nbOl3fldLD7a3fRrr0HmOYQ28WNuqPqbYSQzfxpAOxBd8CUIJHVBTOjGIshdnzK6N\\nWy8Y7BDP6yjlQRAIdXvAmqgZAj/7JZskYnXeuaKML9yXB19aum088eY+14z5fcJ2\\\ - n1cU/4BkJbKzC6Dfz2RYpooYRmrsTU2yUGYRqHdowcrns9QgdtxZvnX/2ZtGZN2Bv\\nkvqTfioa1NfBl4Fv3Ij0yEu15XySvhcdIP8M1ji/qX8=\\\ - n=rKvH\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ - \n }, \n \"last_updated\": \"2018-08-02T07:53:23.195202Z\", \n \ - \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ - \ \"remove_star_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b/submissions\"\ - , \n \"url\": \"/api/v1/sources/cc084437-ab15-497e-b6c9-2a3a3f984e5b\"\ - , \n \"uuid\": \"cc084437-ab15-497e-b6c9-2a3a3f984e5b\"\n }\n ]\n\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5233'] + Content-Length: ['5243'] Content-Type: [application/json] - Date: ['Thu, 02 Aug 2018 07:53:23 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAwOTo1MzoyMyBHTVQifX0.DkRJ8w.AfxkWhkGG3fjIcY9e_csDWpbmYE; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -75,21 +75,21 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIyNTIwMywiaWF0IjoxNTMzMTk2NDAzfQ.eyJpZCI6MX0.yu2572oWvijeB3rWIgmB7nXBNBRYfjiGGpOuK_VumxE] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Length: ['18'] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: POST - uri: http://localhost:8081/api/v1/sources/3e7b88d7-7423-443f-a475-df3a774a5685/reply + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies response: body: {string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n"} headers: Content-Length: ['56'] Content-Type: [application/json] - Date: ['Thu, 02 Aug 2018 07:53:23 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAwOTo1MzoyMyBHTVQifX0.DkRJ8w.AfxkWhkGG3fjIcY9e_csDWpbmYE; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; HttpOnly; Path=/] status: {code: 400, message: BAD REQUEST} version: 1 diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index ad80ed448..fac0eecb5 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -2,10 +2,11 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources/not%20there @@ -16,9 +17,9 @@ interactions: headers: Content-Length: ['166'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; HttpOnly; Path=/] status: {code: 404, message: NOT FOUND} version: 1 diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index 211adca66..bf7bef323 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -2,135 +2,138 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:50:32.490896Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:50:32.529942Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5243'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:50:32 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo1MDozMiBHTVQifX0.DkOSeA.Y-S4FyoRU7jDzQc03FxuAXXECjk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Length: ['0'] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: POST - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/flag + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/flag response: body: {string: "{\n \"message\": \"Source flagged for reply\"\n}\n"} headers: Content-Length: ['44'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:50:32 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo1MDozMiBHTVQifX0.DkOSeA.Y-S4FyoRU7jDzQc03FxuAXXECjk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04 + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"indigestible shorebird\", \n \"\ - key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"humanistic recognition\", \n \"\ + key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:50:32.656296Z\", \n \"number_of_documents\": 0, \n \"\ - number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\", \n\ - \ \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n}\n"} + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n \"\ + number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\", \n\ + \ \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n}\n"} headers: - Content-Length: ['2530'] + Content-Length: ['2534'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:50:32 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo1MDozMiBHTVQifX0.DkOSeA.Y-S4FyoRU7jDzQc03FxuAXXECjk; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index ab0c0de8b..32efb1d4c 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -4,40 +4,42 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\"\ + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-humanistic_recognition-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n }, \n \ - \ {\n \"filename\": \"4-intoxicant_dwindling-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/b04cdfea-fb28-4f12-876f-8f641c3f5087\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"b04cdfea-fb28-4f12-876f-8f641c3f5087\"\n }, \n \ - \ {\n \"filename\": \"3-small-scale_president-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies/3f624563-7203-4661-8585-eb7e424d8339\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ - , \n \"uuid\": \"3f624563-7203-4661-8585-eb7e424d8339\"\n }, \n \ - \ {\n \"filename\": \"4-small-scale_president-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies/86b5ca58-6672-4942-8130-6bfb15bd645c\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ - , \n \"uuid\": \"86b5ca58-6672-4942-8130-6bfb15bd645c\"\n }\n ]\n\ + : \"journalist\", \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n }, \n \ + \ {\n \"filename\": \"4-humanistic_recognition-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n\ + \ \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\n }, \n \ + \ {\n \"filename\": \"3-disaffected_caliph-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"ae696839-47b6-4360-a91e-eebd5032012e\", \n \"reply_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies/10cd69e9-5a8a-488b-b896-f28ea5315dda\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"10cd69e9-5a8a-488b-b896-f28ea5315dda\"\n }, \n \ + \ {\n \"filename\": \"4-disaffected_caliph-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"ae696839-47b6-4360-a91e-eebd5032012e\", \n \"reply_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies/383daca4-8794-4f29-9b1c-3a355ff0f8b2\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"383daca4-8794-4f29-9b1c-3a355ff0f8b2\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['1715'] + Content-Length: ['1977'] Content-Type: [application/json] - Date: ['Wed, 08 Aug 2018 09:46:36 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0NjozNiBHTVQifX0.DkxNfA.9jspoYSts9rARhiW2PMScg0D3gA; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index e6ba2a885..e4a8a24b1 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -2,41 +2,42 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef/download\"\ - , \n \"filename\": \"1-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef\"\ - , \n \"uuid\": \"8f437890-dbab-442f-b608-50be3872c9ef\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782/download\"\ - , \n \"filename\": \"2-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782\"\ - , \n \"uuid\": \"20046355-6e1a-4b98-86dc-30d216569782\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/e2813920-0973-440b-ba03-bc4417317ff0/download\"\ - , \n \"filename\": \"1-contagious_evolution-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"submission_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/e2813920-0973-440b-ba03-bc4417317ff0\"\ - , \n \"uuid\": \"e2813920-0973-440b-ba03-bc4417317ff0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/87e59b3c-c913-4b88-85e2-3efeacbf02e0/download\"\ - , \n \"filename\": \"2-contagious_evolution-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"submission_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions/87e59b3c-c913-4b88-85e2-3efeacbf02e0\"\ - , \n \"uuid\": \"87e59b3c-c913-4b88-85e2-3efeacbf02e0\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ + , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ + , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ + , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ + , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497/download\"\ + , \n \"filename\": \"1-disaffected_caliph-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497\"\ + , \n \"uuid\": \"68b16231-aaae-4a40-bfa0-348f3a69b497\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10/download\"\ + , \n \"filename\": \"2-disaffected_caliph-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10\"\ + , \n \"uuid\": \"8a46abf1-fade-4015-8abf-490c43356a10\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['2065'] + Content-Length: ['2060'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index f406f1514..05d298855 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -2,22 +2,24 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/user response: - body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-08-01T19:10:38.199429Z\"\ - , \n \"username\": \"journalist\"\n}\n"} + body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-08-22T06:44:09.595366Z\"\ + , \n \"username\": \"journalist\", \n \"uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ + \n}\n"} headers: - Content-Length: ['100'] + Content-Length: ['151'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 19:16:54 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMToxNjo1NCBHTVQifX0.DkOYpg.D24CcctvvV7_Suq6cLxwz53gn_s; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index 6da2b47ed..bd8b0d288 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -4,72 +4,70 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"intoxicant\ - \ dwindling\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFtqhHwBEACcb5kGOj5s/BKa249LOe9IgPaTiKYGUAihHOmllV56eHB3uiLY\\\ - nmx0TuiLz/1b3QvwMozb6vGSV9KxfraQfZa0CpuYkkb+5gHnMjKmwGjrVDIBlPw4I\\nDheyNSUZzxyeeDxaAtJiBTCKNvxZB9m4FIpA1+BCn53DfZdgxrMcecSB7ZZ1vezd\\\ - nVPokEKngcmvMDv6Uy3CYgUn2OKGZdZ94z6MPKlcO8oQfl65EwHf75c2IYVEBK+hp\\nrFxnTh40Yx4t8wtbPtiSZNbHpZP/7cFGl0AEK7it/Gs/etLK7e+5OlnqjDI9lj6N\\\ - nuzYPjsCCMj9KcO7UFa10H8B8CXimuBHo0bbBr+6g9qd8pjXc50hvTePY7Yf74BD2\\nyarwBF3ekmh55MHcAfHswW5TGW4i0ATdbg1luix0N2maE31G/FFiySPr2XZHVEY3\\\ - ncAYwuScDu1cGC+r1QUz62Gk0nYZeZavSh5O6RuQOj7EVPVSuNqrDPF7Av+bD8mk7\\nXKvnsXEMjIXUuluWFYbxVotlPt9cKnIZw+g1nqvkA8Txovgn5bBjUNMpenbSYzRV\\\ - n496HmFFxGiXLwDFA2K92Al2l+8EviZJorx3oppZ/c+KcHLtj4lgzgDhlTJt0B9Hl\\nDlD7ahMTZHsLEusPub01UVa/jEU1qpaUcKfA4/AoShKNHFdK7BYyXbp/lQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UFZTQVdPUE1NV0FMR09NUFNMWjRZQ0xJV1o0\\nMjRLTUEzNzRLSVlUVkpWVUhEWlg0NEFYMzVKVlRKTVFJRFNIV1g2R0ZGNE1RTEU1\\\ - nWFRJQ0pDT0pQSzZFNUEzVlZKSk1ISDRKQVVSQT0+iQI/BBMBCgApBQJbaoR8Ahsv\\nBQkB4YpEBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ/rYtXFr+mB9rDA//\\\ - nYXlBLc5ZjnRxe9LtOIKBUAptWAGe4ffvGOD7yAX9Ga6Tr6d+NX3hkvwrJZR7idiD\\n8Nta08wpOrKId4fUMZuFjKIyWvn5IK5PDn6fvpWfSGRiVNJfkmKJCzmFR2O0VjTC\\\ - nWPaBVmA1Iwu50VvNzzvbm792h63ImzsQje8wTnkPDbiFjd6COqzsDvbUxSZ6+8FV\\nGONseEPHKpM1fUIERxomhjmoKaVqiyerk/qfANemU6lPfV5JzY8NHyvNLEMANBvS\\\ - nHUl4UYf/N75wrCACIcfFqsdVpH6sKwO4F4Ets/SGoqCnpBwX8CxloX/zShyZE1cS\\n/gUhLRHs050jurnD90M6fWorJPA/sYJzhm/xdUbGCrU/XR3ym42OMV2jKDmgTWzG\\\ - nCW1JKKKpV46iei+1aLtG0Fn1QP5Q2c2tialSCMJuEQ2B1lbtEkjA+e7rWXS1WcBT\\nMY5NTKaREmqr+STbQmSeuRA0Wynm0/ppwsYaL1rcMxtlxj86liDznhD5AoF4BO2f\\\ - n4xbFaU6lsZLq7pUnSK1qWn2rup2GnmNCKN+D5LX2Jz6Z+lzM6wnSVSsw95O1T4rS\\nuYONhf1Jfa6szCeumgZh0G2TkUDXgSdmO0J/Jbf7bnnDYJCSP2hTFzgF2sCvAm2k\\\ - nawF5GIAnxz5tA0cJhxOg19vft9dsaci9Ax699zZgzqU=\\n=ka4z\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-08T05:49:49.899101Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/submissions\"\ - , \n \"url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"80756f3b-3f27-453e-b188-344127aea5bb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/add_star\"\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"small-scale\ - \ president\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFtqhIIBEACdsgmaBscaAmvfrr1tHNCWc1qWnVv4jcftAqLqHxIO20tNBbrk\\\ - nkvvwgOCTrQK0UpJ+bhaaW5LS/cxuQ2epmBkY7OaPDX1CPoodHUFnRCVWEcAfZEOi\\nWfaq4VhzT7l9ZYpAlsnV1iBtU9BK8kPd1gFvOga/086t2o0En5ajp4ktSH5ZQf+q\\\ - nDvWOER4bwvO0yVzljROGiYex8GeNar0nCNXjK81IaivEuo5qWHlDonstpJBMuqUw\\nKK1CmuHPeBocboOMkB3IfEw5WaDkH9uLXnLhx5EOgAqnxOXUUDpDU3mmQr8xQy39\\\ - nACUSLYYmipGlw3KFFZ2Mnons2mxg8Zfj7H6Fy36KmrzmHsVS80Za0TvJUAsh5tgw\\neD85ioU4wGxJgrW5mi0qCGjfDBxx2ny3AnllxnheKFEriF6Dgl+K4DARq/HguYWs\\\ - nVrR0wPm2P6XqwrpSZBrO5HZ9xtjvByNtXr8k8X57/Dy9oDCcsXXIJBlfNbmQXIzV\\n0Z0hckRmshN5SUdAzvwVHiIG0+s+Fm4UJszmIyIuQst+Zr9hfLeZuMuYt+BwlXFF\\\ - nnVp69vJ4v5/AIwrCsI/sqSPrjKEyQ4+hd0Ld8GKEThs2OCbgU+x0QVqWHEMCnPq1\\nNbW+TUZ1yjiSvb5NQ0Dq1lzv7WC302gKy6wjoXNr0vKkNh8WC3iz5aQ5aQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFRWSkJEUEtaWU0ySlpSRVBMVldLR0dTWTZI\\nVlBZNUZXNFc3WFFVNlFKTTRJTkROT0JVNkJOQVVLSFYyU1ZLSFZVVDRJNFJCQTZW\\\ - nSE1HRDc2WjRMQzZNNERaNk5QWlVWRElENkc0ST0+iQI/BBMBCgApBQJbaoSCAhsv\\nBQkB4Yo+BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ2tLbOLjdNgXY/A/8\\\ - nDNCBeqVUqwxo5LlVahP99u7IVU/vadXE38nFqwtgDtecgGKFtVy+bqFOx61XQmrF\\ntagpprKJPE3o4ac0np+C/T6zbrDa5KhX9l7piHsvGorsyA6A52+tbfrn0PRbpRw0\\\ - nTROyPYsQtt3bVDm+yEwVAVc5CtII8xUe8+BMD4Q7coCvnEde3VxVaXs85Re79dgb\\nsEH0mzFAt+imGBeaIpXEQzS3jBmPm8xEq1nH3E5oXArmDuwseROoTg40s/VtHvQ4\\\ - nEsEs7OsTt0yPww34NkxskNwtqPmoQ7cY5q8HUF20RJlbokiN3uz0pOZoGaPtdkDu\\ngnq48FfYGO363Pg4vZUyZ0bHrpvuw+zRLQcXvJpYo/eQCygJ+xaUnNhrGa9hFaRt\\\ - nvrlpfePoIIfF3wEwnJOON4QRWhc51vyhjg8jDz+1dhzCBb9BU63+PQ64JAS0f0AH\\n1y25gxP1BCKwtAlz1hJk9YsgnFMywSUJrHsKKoFo0X51EVLbh+pGkSXbMLTNfwnP\\\ - natka4fEDb/jQGbFnATmjYmVD59O8yMkxL4KUQ+/fwY/U7gyfPIkrSjyMVzb1XuCZ\\njNn8QMJNdLTx7zQPsUYPbo0GEzDF+pYTYmqnR3SipK79VB4c/9xPij2njLQZvMYS\\\ - nQ9FZtK+5HOTMbA1S1xN2dKOx/ZaYk0HflepWBaBVU+k=\\n=mMuD\\n-----END PGP PUBLIC\ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-08T05:49:55.514014Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/submissions\"\ - , \n \"url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ - , \n \"uuid\": \"a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5412'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -77,30 +75,32 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\"\ + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-humanistic_recognition-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n }, \n \ - \ {\n \"filename\": \"4-intoxicant_dwindling-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/b04cdfea-fb28-4f12-876f-8f641c3f5087\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"b04cdfea-fb28-4f12-876f-8f641c3f5087\"\n }\n ]\n\ + : \"journalist\", \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n }, \n \ + \ {\n \"filename\": \"4-humanistic_recognition-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n\ + \ \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['867'] + Content-Length: ['1003'] Content-Type: [application/json] - Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index f65b0edc5..88dd89997 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -4,72 +4,70 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"intoxicant\ - \ dwindling\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFtqhHwBEACcb5kGOj5s/BKa249LOe9IgPaTiKYGUAihHOmllV56eHB3uiLY\\\ - nmx0TuiLz/1b3QvwMozb6vGSV9KxfraQfZa0CpuYkkb+5gHnMjKmwGjrVDIBlPw4I\\nDheyNSUZzxyeeDxaAtJiBTCKNvxZB9m4FIpA1+BCn53DfZdgxrMcecSB7ZZ1vezd\\\ - nVPokEKngcmvMDv6Uy3CYgUn2OKGZdZ94z6MPKlcO8oQfl65EwHf75c2IYVEBK+hp\\nrFxnTh40Yx4t8wtbPtiSZNbHpZP/7cFGl0AEK7it/Gs/etLK7e+5OlnqjDI9lj6N\\\ - nuzYPjsCCMj9KcO7UFa10H8B8CXimuBHo0bbBr+6g9qd8pjXc50hvTePY7Yf74BD2\\nyarwBF3ekmh55MHcAfHswW5TGW4i0ATdbg1luix0N2maE31G/FFiySPr2XZHVEY3\\\ - ncAYwuScDu1cGC+r1QUz62Gk0nYZeZavSh5O6RuQOj7EVPVSuNqrDPF7Av+bD8mk7\\nXKvnsXEMjIXUuluWFYbxVotlPt9cKnIZw+g1nqvkA8Txovgn5bBjUNMpenbSYzRV\\\ - n496HmFFxGiXLwDFA2K92Al2l+8EviZJorx3oppZ/c+KcHLtj4lgzgDhlTJt0B9Hl\\nDlD7ahMTZHsLEusPub01UVa/jEU1qpaUcKfA4/AoShKNHFdK7BYyXbp/lQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UFZTQVdPUE1NV0FMR09NUFNMWjRZQ0xJV1o0\\nMjRLTUEzNzRLSVlUVkpWVUhEWlg0NEFYMzVKVlRKTVFJRFNIV1g2R0ZGNE1RTEU1\\\ - nWFRJQ0pDT0pQSzZFNUEzVlZKSk1ISDRKQVVSQT0+iQI/BBMBCgApBQJbaoR8Ahsv\\nBQkB4YpEBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ/rYtXFr+mB9rDA//\\\ - nYXlBLc5ZjnRxe9LtOIKBUAptWAGe4ffvGOD7yAX9Ga6Tr6d+NX3hkvwrJZR7idiD\\n8Nta08wpOrKId4fUMZuFjKIyWvn5IK5PDn6fvpWfSGRiVNJfkmKJCzmFR2O0VjTC\\\ - nWPaBVmA1Iwu50VvNzzvbm792h63ImzsQje8wTnkPDbiFjd6COqzsDvbUxSZ6+8FV\\nGONseEPHKpM1fUIERxomhjmoKaVqiyerk/qfANemU6lPfV5JzY8NHyvNLEMANBvS\\\ - nHUl4UYf/N75wrCACIcfFqsdVpH6sKwO4F4Ets/SGoqCnpBwX8CxloX/zShyZE1cS\\n/gUhLRHs050jurnD90M6fWorJPA/sYJzhm/xdUbGCrU/XR3ym42OMV2jKDmgTWzG\\\ - nCW1JKKKpV46iei+1aLtG0Fn1QP5Q2c2tialSCMJuEQ2B1lbtEkjA+e7rWXS1WcBT\\nMY5NTKaREmqr+STbQmSeuRA0Wynm0/ppwsYaL1rcMxtlxj86liDznhD5AoF4BO2f\\\ - n4xbFaU6lsZLq7pUnSK1qWn2rup2GnmNCKN+D5LX2Jz6Z+lzM6wnSVSsw95O1T4rS\\nuYONhf1Jfa6szCeumgZh0G2TkUDXgSdmO0J/Jbf7bnnDYJCSP2hTFzgF2sCvAm2k\\\ - nawF5GIAnxz5tA0cJhxOg19vft9dsaci9Ax699zZgzqU=\\n=ka4z\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-08T05:49:49.899101Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/submissions\"\ - , \n \"url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"80756f3b-3f27-453e-b188-344127aea5bb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/add_star\"\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"small-scale\ - \ president\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFtqhIIBEACdsgmaBscaAmvfrr1tHNCWc1qWnVv4jcftAqLqHxIO20tNBbrk\\\ - nkvvwgOCTrQK0UpJ+bhaaW5LS/cxuQ2epmBkY7OaPDX1CPoodHUFnRCVWEcAfZEOi\\nWfaq4VhzT7l9ZYpAlsnV1iBtU9BK8kPd1gFvOga/086t2o0En5ajp4ktSH5ZQf+q\\\ - nDvWOER4bwvO0yVzljROGiYex8GeNar0nCNXjK81IaivEuo5qWHlDonstpJBMuqUw\\nKK1CmuHPeBocboOMkB3IfEw5WaDkH9uLXnLhx5EOgAqnxOXUUDpDU3mmQr8xQy39\\\ - nACUSLYYmipGlw3KFFZ2Mnons2mxg8Zfj7H6Fy36KmrzmHsVS80Za0TvJUAsh5tgw\\neD85ioU4wGxJgrW5mi0qCGjfDBxx2ny3AnllxnheKFEriF6Dgl+K4DARq/HguYWs\\\ - nVrR0wPm2P6XqwrpSZBrO5HZ9xtjvByNtXr8k8X57/Dy9oDCcsXXIJBlfNbmQXIzV\\n0Z0hckRmshN5SUdAzvwVHiIG0+s+Fm4UJszmIyIuQst+Zr9hfLeZuMuYt+BwlXFF\\\ - nnVp69vJ4v5/AIwrCsI/sqSPrjKEyQ4+hd0Ld8GKEThs2OCbgU+x0QVqWHEMCnPq1\\nNbW+TUZ1yjiSvb5NQ0Dq1lzv7WC302gKy6wjoXNr0vKkNh8WC3iz5aQ5aQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFRWSkJEUEtaWU0ySlpSRVBMVldLR0dTWTZI\\nVlBZNUZXNFc3WFFVNlFKTTRJTkROT0JVNkJOQVVLSFYyU1ZLSFZVVDRJNFJCQTZW\\\ - nSE1HRDc2WjRMQzZNNERaNk5QWlVWRElENkc0ST0+iQI/BBMBCgApBQJbaoSCAhsv\\nBQkB4Yo+BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ2tLbOLjdNgXY/A/8\\\ - nDNCBeqVUqwxo5LlVahP99u7IVU/vadXE38nFqwtgDtecgGKFtVy+bqFOx61XQmrF\\ntagpprKJPE3o4ac0np+C/T6zbrDa5KhX9l7piHsvGorsyA6A52+tbfrn0PRbpRw0\\\ - nTROyPYsQtt3bVDm+yEwVAVc5CtII8xUe8+BMD4Q7coCvnEde3VxVaXs85Re79dgb\\nsEH0mzFAt+imGBeaIpXEQzS3jBmPm8xEq1nH3E5oXArmDuwseROoTg40s/VtHvQ4\\\ - nEsEs7OsTt0yPww34NkxskNwtqPmoQ7cY5q8HUF20RJlbokiN3uz0pOZoGaPtdkDu\\ngnq48FfYGO363Pg4vZUyZ0bHrpvuw+zRLQcXvJpYo/eQCygJ+xaUnNhrGa9hFaRt\\\ - nvrlpfePoIIfF3wEwnJOON4QRWhc51vyhjg8jDz+1dhzCBb9BU63+PQ64JAS0f0AH\\n1y25gxP1BCKwtAlz1hJk9YsgnFMywSUJrHsKKoFo0X51EVLbh+pGkSXbMLTNfwnP\\\ - natka4fEDb/jQGbFnATmjYmVD59O8yMkxL4KUQ+/fwY/U7gyfPIkrSjyMVzb1XuCZ\\njNn8QMJNdLTx7zQPsUYPbo0GEzDF+pYTYmqnR3SipK79VB4c/9xPij2njLQZvMYS\\\ - nQ9FZtK+5HOTMbA1S1xN2dKOx/ZaYk0HflepWBaBVU+k=\\n=mMuD\\n-----END PGP PUBLIC\ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-08T05:49:55.514014Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b/submissions\"\ - , \n \"url\": \"/api/v1/sources/a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\ - , \n \"uuid\": \"a2af64fb-0c5d-4b72-89e1-a2ef78741a8b\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5412'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -77,30 +75,32 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\"\ + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-humanistic_recognition-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n }, \n \ - \ {\n \"filename\": \"4-intoxicant_dwindling-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/b04cdfea-fb28-4f12-876f-8f641c3f5087\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"b04cdfea-fb28-4f12-876f-8f641c3f5087\"\n }\n ]\n\ + : \"journalist\", \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n }, \n \ + \ {\n \"filename\": \"4-humanistic_recognition-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n\ + \ \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['867'] + Content-Length: ['1003'] Content-Type: [application/json] - Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -108,24 +108,25 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzc1MDM5NiwiaWF0IjoxNTMzNzIxNTk2fQ.eyJpZCI6MX0.37Bh0D8dYr8JqF7FvC1I_R2KWAxvj-dl0p-foWhvZCc] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9 + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77 response: - body: {string: "{\n \"filename\": \"3-intoxicant_dwindling-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"reply_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb/replies/3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/80756f3b-3f27-453e-b188-344127aea5bb\"\ - , \n \"uuid\": \"3c400181-3a79-4c0d-91c5-5bdcd09251c9\"\n}\n"} + body: {string: "{\n \"filename\": \"3-humanistic_recognition-reply.gpg\", \n\ + \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ + , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n \"\ + reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n}\n"} headers: - Content-Length: ['385'] + Content-Length: ['449'] Content-Type: [application/json] - Date: ['Wed, 08 Aug 2018 09:46:47 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwOCBBdWcgMjAxOCAxMTo0Njo0NyBHTVQifX0.DkxNhw.Jr4MRlasbeS05nir3dfgSa_KSu0; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 3ce16641c..90122c816 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -2,114 +2,116 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:39:59.723890Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:39:59.753240Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04 + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"indigestible shorebird\", \n \"\ - key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"humanistic recognition\", \n \"\ + key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:39:59.802049Z\", \n \"number_of_documents\": 0, \n \"\ - number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\", \n\ - \ \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n}\n"} + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n \"\ + number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\", \n\ + \ \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n}\n"} headers: - Content-Length: ['2531'] + Content-Length: ['2534'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index 281a51411..2659dda97 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -2,71 +2,72 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:39:59.902794Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:39:59.929120Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:39:59 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozOTo1OSBHTVQifX0.DkOP_w.8b-xLSoLZFqqdVP06n2HgF4MfXU; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index d84d905a1..770253150 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -4,72 +4,70 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkyMzU4NiwiaWF0IjoxNTMzODk0Nzg2fQ.eyJpZCI6MX0.LGxN6cLw-icCD-nuir4jzB4l6Fw44Sv3VERh6ykPzFw] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"hard-shelled\ - \ cruet\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFttYFoBEAC1w4z46Bhg0QkgUwEVq1bvDNaayuCrLQigZbrS4T18HNSSwd1J\\\ - nkvHek0Kxv1ivqzRb3st1qlbnpDZYld9mNnCU86Lap6VOmuwR9dZaBN4Y6ckK/g16\\nTuG+o5oQoG37ZyoObX+aT17aASdR8Y092czFiesI0ypv51/MQeUeC+WCrFV1ZcwC\\\ - nZ+ywAh359VpjtfhF5zqnmtqlrvRQCJeC/1p5YuZZZ4VDLlk9/4VpnD6N9rh32CKk\\noQTG1+5sF3PP5H0yvHdOZT8T0rBx7l9e7hu7q/DJeWX+l9AA/VRqXCZly1ooWabD\\\ - nW1M4hO8C7xKlbe9kY4ZROAE43JoRYm58rP2h8NtXGJxBVlcC1eOD8c6s9Gyd0NUn\\nS3olyQu9aBI6TufenUVzdUbwYNYq7ubQTkaWkHOynYqHXELHP0Gsu8tz46bjAFTE\\\ - nSe9FbZy3H6dPQrSl1jn2sqRXAgwtboPIwe2a3380nR0KC2xBtpu/4JNfp6cfMsHo\\n0gY3fQ6j2nl0VzYlxoqgI0VYOfGVWRIhJu9mpvAtFP6240ILZZVqhkKO1wBPKMHQ\\\ - n/PmTL9XGYIlRgFwEwqpAYI9o8TbtzLqFtVUfBye9GnFnOyT4/yWHHQQ72fvopIXl\\nLhOMNF4+Bpyr1RECYxdb/XrdsiAspYJojUDMq7HikGooRMKNrSoxBl8FyQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WjJJR0lQSlhVRTdUM1NSUlNOUEgyR1RQU1E3\\nUDU2RTNGS0FNM01XTVdGUkNYM1REQVZZT0xOVFlBS1hWN1lMSUdSVTZCUTNCQUdY\\\ - nQ05LVzU1UTQ2NUZZQ0w0TFk3R1FXV1ZTQlFJWT0+iQI/BBMBCgApBQJbbWBaAhsv\\nBQkB4VFmBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ/vkdUGfshhTcjg//\\\ - ncKii6QJ8mGhCpyALWbTt9spn2aKgvdaUH1b6+jqYslbSwzq2ftoazry7oBQQJT1Z\\ngWRGYFeJ9tXDOYktS2HLK8KLW4WEB0HfzK2pCBHJvIVH+JCRXsRmNvWtcsYYZJ+y\\\ - n4Za8O9q8BPwKXjkssyIts4wDVh2AdlipcUhYRyn4OThGuKiBmRPc8UqhNjMrJMJx\\ncQ6LrraUi/1PVMd2KLC35M5MMubX9QEOEB/dljf+ocwqni/kkGHeMJCKJ7zjfG3n\\\ - ntBjqrsoOOYSKzu6m7ZxzBNSEivVqrKac9GXHmDlk0OhNOOjvompuurLbpnc2hZRQ\\n6yIrB9pIbcm4r4//vZmNyk4xGsQpl7StnepDYA/DT4tSKcq+rhLZPbu7rRudmk+Y\\\ - nWvB3aiA2vk/6LpQy/L71qqlKTVNXbBfFdu8ZvrwF0fSEI/6wN/QFdyr3G9ByuRBn\\nRo65jslrwem3+U77TrLkYCG5x/ONPyAdGshxizczUj/8Rrhh3Dtw0zyAiUgpwjVC\\\ - nN8Y5vZLP3mOphReCWdhgwT1d7xPBOZesuhfrhABTwRIWUjuHDRYtyV0g45IGrbLt\\n49pyXzHah4oOjDMeyItwVh9WGssH4CSyiqHCDMXRoi7FECKbNW+iAdiKLoFviK1E\\\ - nW02GmeDTmDWMBu1igCDfG2I/cTGaqqmDOnsBHwxOJQY=\\n=TTuP\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-10T09:52:28.368262Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions\"\ - , \n \"url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ - , \n \"uuid\": \"4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/add_star\"\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"fossilized\ - \ simpleton\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFttYGIBEAC0SAmZf+jXvCTYM79iGvD8jFgSyi4VBijvv0n99kI05QdoOKgO\\\ - nQTS52jQs8SUwVhAcp6P7ibtywtfA7kfaHU7SWCC1ITIOkGEgOH9gEeTjxt/EF/Jf\\nP6Wlu5+Bi3ZpjMdk/GhmcMOjDr7HxycCgG0UcmVq5RUCV0vQe6Bsz1cv6fakOtUZ\\\ - n7w1hoRODad9CyP4M0a48HRYqjpoVUbD/BbvamA7mOJuwV+O0SrD1w4Yp+8wU2IwZ\\n1Fd9j4S/6bzR1mFv4VaCg/Cm1yTjVsrWNfWduTeXFvJvpnyYu7u5wkIDnhxUqv4v\\\ - nhf2Uw3Z9h6IABq8vHqyol9R/Wo/o9TTcn4FyVQsf3XQh8OeylvDdkI9dKG5WHc6M\\nOf/wjg/LX83cxdDqHzqWuaMQd8B0aDuhDUSOwJuDo/eTsZhnS+iOnIsDE+Dp5cmg\\\ - nHAmfrRKX5rOFLH32eInsZ2W1x/P1XtoB51BcTWgfJpaj+SeRd/B9zjsZf84lpO/q\\nI0l/fXHUkWU8jmZ/KxBJOJ7obivszKhbDjdw6HF9nt/ijoqm5n+OMMxgXP1ENv0Q\\\ - ntZxfFGwRrEqTQ2hQ/x4G/3CK2dPlr1LJzylhacI/E7ZWkE+aWpesR5j6+hM/MFGc\\nlFoZZx6ZIkt3U7vsulicdA9l2YiJX9ZYG9l0EWw0QO4n4N5dOkl+8VZlwQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8Uk5TNFBaMjZSUzRYSVRPRkFIWFk3MlZRQU9O\\nSlhXWkxBUExWV0pSNURRMzMzQko2SEgyMlVMREhIWVBCS1dSTkozTU5IWVhWVkE0\\\ - nSkpFRzZGVDI2WkFZTkMySzQ0QjVVRVpPRE9PWT0+iQI/BBMBCgApBQJbbWBiAhsv\\nBQkB4VFeBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQJARDGLfkpFMzEBAA\\\ - nk/gL5kIT1I9zEWy1dcV1eX1EI56J7lSg3Y+SH5N2hIrBIjdFKNlP3Chj2CS29Qyt\\nnL2qH4Ww9ONt5mPe6NskF0hszoH4MqYilcNeXXfnsm3PDatPzxhVav3Ulg8eR5eB\\\ - n5VgY31g2UEVhmv6AA/BAtZdsBOugS0id1w+wEE2GLe7Ddm+w5Qsyb1X/Ee4TFi+k\\npPToWlmaWLVy9LN4711TLzeeNJ7OMfnem14KMvYGEGgYygm7E5+XqVBskX7TYh7g\\\ - nLNaJ/T47BZtx8egLb3ScY05ObBVoGkCQel8TizalElvfhmlu+tr/REovuhW8u9Rs\\ndC36zvD5R36eK3HzGmXhtCv5I36tcG5hh67Wi7uxzI1iZHW/lN4d/zzgBSEVoONV\\\ - n4LVtfNUbWQqG28RjN3rvDhP0Zl+VrPB2WXn+el+nRp5zLgCQWczWoOiTRjPlpxEC\\nG4IEJsbuU2ggiamapIKZOWS5+wVUzpfw/nltW3xsIKIijUFUtrst/yPZcvC7RafJ\\\ - nUN65U4hRXnF8h+zHv8vwjqvB5IeuWncjQ08ynqGSxV4rtU08pH3dFzaNXynu6lU9\\n68QHhEElvyffzqu/B6MSOxyfOHSx3lrHeoeG6lMDLFhsiYLRxYfh5ea6q9IGY6dR\\\ - nUn97d32Xt/Y47Ws4z6awHtKeZw+SwxuUQ2Tu0AY5WVU=\\n=H3Lz\\n-----END PGP PUBLIC\ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-10T09:52:40.480696Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/replies\"\ - , \n \"reply_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44/submissions\"\ - , \n \"url\": \"/api/v1/sources/a8c91c7b-a36d-43f8-930e-e955a77f3c44\"\ - , \n \"uuid\": \"a8c91c7b-a36d-43f8-930e-e955a77f3c44\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5409'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 09:53:07 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxMTo1MzowNyBHTVQifX0.Dk7yAw.2_Iqf7RJ732alfyY8mc6W9bPW9U; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -77,30 +75,30 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkyMzU4NiwiaWF0IjoxNTMzODk0Nzg2fQ.eyJpZCI6MX0.LGxN6cLw-icCD-nuir4jzB4l6Fw44Sv3VERh6ykPzFw] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93/download\"\ - , \n \"filename\": \"1-hard-shelled_cruet-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ - , \n \"submission_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93\"\ - , \n \"uuid\": \"ad14ca15-9039-4c1c-8dbf-470385381f93\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/2fd63768-0f6f-4b31-9a91-348e9311f9dd/download\"\ - , \n \"filename\": \"2-hard-shelled_cruet-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ - , \n \"submission_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/2fd63768-0f6f-4b31-9a91-348e9311f9dd\"\ - , \n \"uuid\": \"2fd63768-0f6f-4b31-9a91-348e9311f9dd\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ + , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ + , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ + , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ + , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['1039'] + Content-Length: ['1046'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 09:53:07 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxMTo1MzowNyBHTVQifX0.Dk7yAw.2_Iqf7RJ732alfyY8mc6W9bPW9U; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -108,24 +106,24 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzkyMzU4NiwiaWF0IjoxNTMzODk0Nzg2fQ.eyJpZCI6MX0.LGxN6cLw-icCD-nuir4jzB4l6Fw44Sv3VERh6ykPzFw] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93 + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93/download\"\ - , \n \"filename\": \"1-hard-shelled_cruet-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c\"\ - , \n \"submission_url\": \"/api/v1/sources/4baa4751-7c46-4d0a-a4a4-884a6f44609c/submissions/ad14ca15-9039-4c1c-8dbf-470385381f93\"\ - , \n \"uuid\": \"ad14ca15-9039-4c1c-8dbf-470385381f93\"\n}\n"} + body: {string: "{\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ + , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ + , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n}\n"} headers: - Content-Length: ['469'] + Content-Length: ['472'] Content-Type: [application/json] - Date: ['Fri, 10 Aug 2018 09:53:07 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiRnJpLCAxMCBBdWcgMjAxOCAxMTo1MzowNyBHTVQifX0.Dk7yAw.2_Iqf7RJ732alfyY8mc6W9bPW9U; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index b48c66c0c..3517d926a 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -2,101 +2,103 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.008823Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.033164Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef/download\"\ - , \n \"filename\": \"1-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/8f437890-dbab-442f-b608-50be3872c9ef\"\ - , \n \"uuid\": \"8f437890-dbab-442f-b608-50be3872c9ef\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782/download\"\ - , \n \"filename\": \"2-indigestible_shorebird-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"submission_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions/20046355-6e1a-4b98-86dc-30d216569782\"\ - , \n \"uuid\": \"20046355-6e1a-4b98-86dc-30d216569782\"\n }\n ]\n\ + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ + , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ + , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ + , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ + , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['1047'] + Content-Length: ['1046'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index 7c0ed3049..053e774da 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -2,80 +2,82 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.134707Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.159012Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources/rofl-missing/submissions/2334 @@ -86,9 +88,9 @@ interactions: headers: Content-Length: ['166'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 404, message: NOT FOUND} version: 1 diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index 7c77131d7..da3cab061 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -4,70 +4,70 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzMTY3MiwiaWF0IjoxNTMzMjAyODcyfQ.eyJpZCI6MX0.ZLWdnxi3zmhYeP0bo7D25ktDuhk3n0Mio9Hn2kKh9fg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/add_star\"\ - , \n \"interaction_count\": 3, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustible\ - \ synapse\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFtiyOUBEADSwViZUdV75BD+X83ouWQjE46l7XHqrhAbm3BHh68VJGafrd1+\\\ - nZXpFFINsUjAuPEPXWv5ocq1x8cZ8tlnxM60sT8OI1NRoLi28VD2d+wXOFNXLbYdg\\nP1tIMRthI+GYrXbOCinUNfMvpt/nt6ZSrmIIfpTH/n/Ozjj8vo4MCYO4bKy1HDjb\\\ - n7srscfcyC1ZX6ycSSQeXFzvqdd4xylEWWl+7GYIqjAI0DALSK7v6s4epo2MBWP/s\\njlx8stGry/DfWqlTnSWHIbD+2E6WTMvHwJHUHDwZiPfDgBq3N4PK8JtbQd3nPClw\\\ - nEjdqE8key105evwmUWoXJiyiIRxc4tFpQpwgmVPKH4W9GX18hY+I7iN+lfLUR8lZ\\nZyElepaQ4oBZylkhEZlx9x4lXgMLhAOqeTfighzJmrFTPOObzOFS+cIOblTfsCuZ\\\ - nAHKNGdUfIGZmbDwyjElBlgL6x1J4KgZpkHXYnrKTPi//f9ZeMH1vjCkCJeaD/Psy\\n+/8HWO4xbTCGJlLXHA2I5Glc+yQZT8i5C5nwMh7+icj/Q62Wn2+GfrzkCayy+U5t\\\ - nSoYqelnmNKxyHQ7PIpia03w7v55Wz5xFJRMxlKV4KAGiOOyXbsEEkdhRpsvFi/iM\\naTDJvV9uSvx3e8U20YTfFeL/Gmjtfz5Np8tYTplXtm9oWzUssGkBvPcXDQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8Q0VaQ1lJNjdNREQ1VDQzTVNPSFZVMlVGVVhX\\nSElRWlpHVUJGUllXWTRCRUdYS1dFWFRVR0xYTFRGUEtaWlBPQVhEQ1pVMlJaSU1O\\\ - nQUVNWkhGSVROTkZWRkRJSDVWNlBTNjczSllKQT0+iQI/BBMBCgApBQJbYsjlAhsv\\nBQkB4VzbBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ6B7pTPty6CoASBAA\\\ - nwoy155avaJFg8ACaal4PvYGL1i8B2eu3vUMzvfdARkpQlWtrX48stCuCzIe6c1OZ\\nrx3d2uw70RojaXrHlJSBXhH+MdzgmH9vBzTbBAR4ODsRN5meMkDw9XgNFMPG3Kfe\\\ - nNV/xLzEABkjAP+uO+sveQeUXsxiSS+F3KMfTR0JsKfhu3OgO6j80OUnox8EAI0nz\\n/foRQzPbLcIJu13U1VC/gEUasxnzd+yEj/rrPvmcC6Iey0YHHOLknnBXZ8/FBU1H\\\ - n8OztDPQvN8+oyQUcUainpo1UOnECGkIZT6fnPsA2/dTu+agBCDcltrsFiMyP/53N\\nkntPC9jTK+Iv2/uIAFaEt6YHQm43kJEgzt0tr7VgVYStfcoNXPKlsdTaqrlK2rE6\\\ - nbdoBGW1NBxnZIVFRptDauys2u3a5KpWNxe0TehW2ovHCUfKa/kzLwUPK+I8SXpC+\\nUtKHvdK9eG8SDdNlONA/zVHfrifVDzQiA4res29cLLnDlwlQXr6DdVeVbGpmvxRj\\\ - n1x2hu0KufTrvgoRt+bt2rKKojxkDkf8LKegOTX2Qlm9ZpdTOnMcheTs0T1Bi1Bu/\\n1CgRyPSbUqrNYLr2DpUy0s0+sefgYYnD32GCI803h95n3/H3iKHyHTN+jt/AsxPD\\\ - nHAiYqfQtqrqUeiJaybQZEMtcB8HT8euyATGRMsO6iTI=\\n=o0Fo\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-02T09:41:12.082987Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/submissions\"\ - , \n \"url\": \"/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf\"\ - , \n \"uuid\": \"eff8ebce-e144-4e0d-939c-2c644cea90bf\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"delayed audiometer\"\ - , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ - n\\nmQINBFtiyOsBEADE6DowEkKFOllc6xM9BRpwMGRodNQKKPKi1TmehNVnrZOhW6/Y\\nXNqvuloA99oj2xKryH0xwQrl90hs9XzsyrTyoKbZDTDTa+GVeEKkTIGiBKxpQjfE\\\ - n6ibntxgSCRA/VWNHl1gij7Wu51EBv7FcO+X8Jt9VcC7E53SQsPPrEbv+ICNeYm3p\\nMJ3pHVPoqtfksDcfFqXjyihQeBiDN58Ft0EH5W+P5t6Q0mr6/MFQqcEjc0wPLXKy\\\ - nINU7gSaXJht2Gmk//aaV5njjHgQBoAsQh0CnML+iZcFR9kgpa7Qj00E0ffuyqQf4\\nDhQaeNaqDoEGtGHaMESDud9ISHmdMZzLC+iPFKzNXnkPM31KSDLm7P4uQgJyd330\\\ - nV0SgVknHXCGfQsmRUwegLD1vVc7XpsadFGX/2aA18Dhm5So7zLoDtfr4aA+e5xr7\\nGoLuEO2IUUpIiTF1iiuiqzN19fMfXglF+DwTgwhQvvfYPLo0OZcz32LTQ8NwXkcp\\\ - nI7gdJJzbcWCnhfe9QIVbJAqZgBFXQ1tDiD+hWQ2iZD5A8wuzxW79SlTcggwyitRQ\\n77DJffUfw5ym3b9vzAmL+o2rrnwWOBeSBXU1MdGpcYZVjizLrU1A7UanRx4Tz3dU\\\ - n0CZtr2giy5etcMsd1cqYckgB4lSWQ2A/nyHevTtczsVj9jufTdmx2258yQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WU9EVTMyN0hJTlJFWlVFUVJaWTNLVE4yVktW\\\ - nTFlXNFZOM05WVUFCWElPQVRBS0tWNjQ1QTNYSUU0NkM2VFlDSEc3SFdVQ1hFMkIz\\nWUtETUFaWlUzU0Q1NTZDNVlFRzNRUDNMSlREQT0+iQI/BBMBCgApBQJbYsjrAhsv\\\ - nBQkB4VzVBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+XTCLLamUoBYnBAA\\niL156Y8u97Rp/9I6tKK3d+8586zK/LOo5ILOfhuxoG087f/bNkfjtgQEqhYVuAv8\\\ - n+ssd1Z/20dbi1+rhNEUWeoCA70yogJYjbvIhyoKAhHoPlatobnbV+CVS2MDFrg7r\\nTHyhmj69MdL0SXalE777tGt5D5oDDe6qZKFZloBc6BA2ee+bPGTW7O9bPVuYZ84o\\\ - nnNyXANuqRseGl7YZYAvU8v2u/+g+PnhzkyIYazsMUdAzC7qrzpxgIrn9kiwJda+C\\nFM6jWRQrDWAq5dslTwOgJGRhnFlpGetjW29esm8ZN9JIgXszfgQ8kO6VMIAQUWTW\\\ - nziDenUfkDjnD6wUS0Tb1APdNBKqpZG5WypJ8g551uoVAiNapdJLzUvjO5/Lo3Z8l\\nJ55QtRbxnJONzmADXHQL8eq497YO7p4eXdk9Tv8VNMLTzZ8eVQov8b1o9seglXyF\\\ - nU5D8JCeTDjCZb9QgGVSadoJ4L+R63988I5hFT6I5dVdxuwjowqqTp7F40hgDotrV\\n+656IiWtkPuFaElAqOv+R+nHBHMnZpF9TVQUf7JjEnZ9OMT/KC+DxRCaUKP006Qr\\\ - naDMefL9+/jl+bVVfrH8VBjRr4ZO9EHizabBmxTxPqabloil6Yt1BDslHAUoYtq/B\\nl53jaDIuGCNuofWgtyOxzn4T0YSMxh2ol5cFYfFlQT8=\\\ - n=DAGH\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ - \n }, \n \"last_updated\": \"2018-08-02T09:41:12.102926Z\", \n \ - \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ - \ \"remove_star_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6/submissions\"\ - , \n \"url\": \"/api/v1/sources/09a28913-a9e6-4292-bc64-19ac75c340c6\"\ - , \n \"uuid\": \"09a28913-a9e6-4292-bc64-19ac75c340c6\"\n }\n ]\n\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ + \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5232'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Thu, 02 Aug 2018 09:41:12 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMTo0MToxMiBHTVQifX0.DkRjOA.4MsigA7TUgbuUCW2k9Vhsu7-S-k; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 200, message: OK} - request: @@ -76,21 +76,21 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzIzMTY3MiwiaWF0IjoxNTMzMjAyODcyfQ.eyJpZCI6MX0.ZLWdnxi3zmhYeP0bo7D25ktDuhk3n0Mio9Hn2kKh9fg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Length: ['926'] Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: POST - uri: http://localhost:8081/api/v1/sources/eff8ebce-e144-4e0d-939c-2c644cea90bf/reply + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies response: body: {string: "{\n \"message\": \"Your reply has been stored\"\n}\n"} headers: Content-Length: ['46'] Content-Type: [application/json] - Date: ['Thu, 02 Aug 2018 09:41:12 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAwMiBBdWcgMjAxOCAxMTo0MToxMiBHTVQifX0.DkRjOA.4MsigA7TUgbuUCW2k9Vhsu7-S-k; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; HttpOnly; Path=/] status: {code: 201, message: CREATED} version: 1 diff --git a/data/test-setup.yml b/data/test-setup.yml index 9221f3cd1..733934251 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,6 +1,6 @@ interactions: - request: - body: '{"one_time_code": "983893", "username": "journalist", "passphrase": "correct + body: '{"one_time_code": "393600", "username": "journalist", "passphrase": "correct horse battery staple profanity oil chewy"}' headers: Accept: ['*/*'] @@ -11,15 +11,15 @@ interactions: method: POST uri: http://localhost:8081/api/v1/token response: - body: {string: "{\n \"expiration\": \"2018-08-02T02:37:04.264450Z\", \n \"token\"\ - : \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg\"\ + body: {string: "{\n \"expiration\": \"2018-08-22T14:50:25.227570Z\", \n \"token\"\ + : \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTQyNSwiaWF0IjoxNTM0OTIwNjI1fQ.eyJpZCI6MX0.E_kW0WVV8WctTdccjI29xM3MWqFEyQEC-aRXREkxWUc\"\ \n}\n"} headers: Content-Length: ['188'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:37:04 GMT'] + Date: ['Wed, 22 Aug 2018 06:50:25 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDozNzowMyBHTVQifX0.DkOPUA.aQBNUxR2p39fw2L1EMojJLOjxbs; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo1MDoyNCBHTVQifX0.Dl6ZMQ.DBxiUGUc0tZq3pu_2_KVaCXRug8; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 3e407ac3f..d6eddc7ef 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -2,183 +2,187 @@ interactions: - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.282445Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.310572Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6XvA.DLtNn0WBbVnVXddF7Ud4gGnaAOM; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Length: ['0'] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: POST - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star response: body: {string: "{\n \"message\": \"Star added\"\n}\n"} headers: Content-Length: ['30'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMiBHTVQifX0.Dl6XvA.UUCn7xPk5-T3OG_cdfd020ktn2M; HttpOnly; Path=/] status: {code: 201, message: CREATED} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] Content-Length: ['0'] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: DELETE - uri: http://localhost:8081/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star + uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star response: body: {string: "{\n \"message\": \"Star removed\"\n}\n"} headers: Content-Length: ['32'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMiBHTVQifX0.Dl6XvA.UUCn7xPk5-T3OG_cdfd020ktn2M; HttpOnly; Path=/] status: {code: 200, message: OK} - request: body: null headers: - Accept: ['*/*'] + Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzMzE3NzQyNCwiaWF0IjoxNTMzMTQ4NjI0fQ.eyJpZCI6MX0.YEFvihaZz3E3kd-_55WWRGbNi9kl-v4Snse0yp65uZg] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] Connection: [keep-alive] + Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"indigestible\ - \ shorebird\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/b4BEAC7OlS4PoNtJjFbQ8vZPdo0wWhKZ0wS2WDUVaEFYTcM1VipaHn6\\\ - nxvWnk5oTMaz8p1DOfy6bSidF0rm+R3XLxaehHm1gVBOgZBHoYVyOuael1sJW5iXN\\nwfHQzxO2dFSnThchnruP3tjY2RpnAqru4e5tLUqp/Gebau4vPIzKadxgfEC2ssth\\\ - nOJUVjNB+A9Dtm8C1KTx+fCYHQMfFfvx7TAzDWRCRXI084SyEVr6YFBZDuMf63t7M\\nFDSobRSedUWyeu1nxGs/WgelARAI9512BfMAa7DMjWcdrU8HIsqU2sYY7qUAg3Tf\\\ - nmr6z3L+CtY6wVvZgr1eG/O39hF/uxFv6MiORvDrUiU+d8kNDtVHf7z1gZK9pwnZY\\nzm5EEw92rZjNmi1BWZewOXzJhWHZOy1DfVvaIzsv0LVbE1fZToNgDmAG2qftmu3W\\\ - nxPEy1e1Mrisu1QFo0kUyOBOFPGjHwDHDoR/5qqGmfAtLMjTTxm380+xsV+ODyPNB\\nVlc/RB1YdNMyc2DoufrzGZE7tioAcOLzV2F2YInz93GEne8oi4ZZUMnYyvrWPA+a\\\ - nYqkxr/OK3mQBTMt3Y2oWF83aOPzdf1kVK1wYg9C0yHO+zA89noIuDQ6gkxwYWUBh\\n4kGrXQDgWqWsKT78hqEdEACqqwsUGen75fhk08KubiJzB8QIivlGIDiUhwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8STJOVE9GM0E0RFROSlpRWkdMRFk3RzdGNElT\\nMjczR1JSTTZRSUQ3MzNFT1o3MzVMVDJCWEVFRFRKTTM1NkdBR0Q3QUtJSDdVM080\\\ - nVEFQUUFRWVM2Q0hQRUhHTDdZRUJCT0U0REZTQT0+iQI/BBMBCgApBQJbYf2+Ahsv\\nBQkB4NaCBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuMrjuT87VCrbFQ//\\\ - nVCaxe7bzuGbwi6tIwyYZ3R+g4vhpubBAWIWpicfAwemqeWloWX9FLYK30TRFmnG9\\nqWgZtPs32z1pifmxHc1gb5fNKfnRwZ3OY15m9dK3tCYYXCZkF4bnACDnwbOXFwYf\\\ - nKyYiaSMZFx+vuC/JhZ2kgwBGXK7sy3gK4iTd4vxa32d+rur0foRki8/prkNUTZ0W\\nGr8ih0SQeyBeytoRhzXHeocz5mh//GPfjgoChsGJ+fLR3YiquS7dzdc4Pp8J8ZVw\\\ - n7/sVTyvQexPe60fZq+z6iMYwtgDDZiaj37E1OAIANqQOqa9dWktvDGMfVI2Ccdtw\\n6bFm1echQdIWtS7nnPXtG9p/nfTSLjxMkbX8QKrPSmK/YpH9u3IaNTnlqzLzBIJN\\\ - nf9oEuNZYm+LuyfzLAE03AOWny+fSHJ5/xDaHkMVCDR4684tPXVsmVzRcbhQJYErk\\nL2j1GlEbdVFpgYCrsORyyQnskpDTYFBnWa4Hrwj+1lMbD+3E7zpPtCEANCn1vCfz\\\ - naWmn5T6yiwAlhhiDg8IkKfamUeVcI+G/O4WjwHjeat9+D7Y6GgO9hMKl0J4ofxsK\\niFxh/vBNzOaz0vtMlWBwjsN9o+NT+qymuQCZp9Xp9B9HAoI95wGRpqU9bS7ScLgl\\\ - n+eOwVVUmEbR720JfKeYQULgeprojd6j/JlTBb20/lBE=\\n=KB0d\\n-----END PGP PUBLIC\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ + , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ + \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ + nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ + nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ + n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ + nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ + nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ + nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ + nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ + nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ + njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ + nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ + nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ + nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.441648Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04/submissions\"\ - , \n \"url\": \"/api/v1/sources/6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\ - , \n \"uuid\": \"6d2fa74a-3edd-4afa-b7de-b78f14bd7a04\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/add_star\"\ - , \n \"interaction_count\": 2, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"contagious\ - \ evolution\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFth/cUBEADlI59KdfJChVQv53/BuMTLjIlxW+c2ktp28MAzr32a+MQw+i+f\\\ - nt1kJ5JRJcb4SPGOrE2d2frBq8daD81/EfCEM1uiZYLfhkxmFlScORRqXsxJ2ipzn\\n3UzGtfgvhDMNukPqYIjnpCxeGfq7sFICMjE+uHRrDidjIpL6I9t+INuPI0lf9+qu\\\ - n1slUuAQiNQ4eUkt/8ln7omxi67DOJsUH32l8ZhhWFzuq9fsKXzaSIhpJY4+Z+1lC\\nEWGut2qvua9tM5b7r9u8GvomveYTuVCa+v0TQiCTpcjVJKXV4opuyyqAwE9MrBbC\\\ - nLw1L5w/WYA+LRzRCXaDOdslL47zQByiFG1MNJ+F5dsNCL8/DnBkuqAj1vClf0JY/\\naWCMuxSMnCaaaiKnr7msSE+UsS5XrIoc37+Pk52z6IOYPWkiAPx583u3U6LWTw+U\\\ - nAFJk8ehc+wLT6L2zB/RlIoGICLWkk/yvv8ckCW55X/bNzhEJS/IWoyExjudtGumw\\n0a49pZE2njg3saCAV6W3g6b2jNWpJtfpOcYggyJu6yqUwZ7BYmIudpFHLVlm6AXv\\\ - nLSejPgfJyMO3/bycFloVPa+Sc2HqT/431wfjJdLV01boUr0Qg9h0Jk50GNbhuflL\\n3vMPXoxqKub8Xtu9rUdPJMHgYasBfab+Wn7n4eQZElRxTxYMvLyFZIFQOQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0dDVzZERjQzR0hETVVHVzM2U0dERlhXNEVG\\nTjNWM0RNQlhFRUxRVVVBM1pRWVhXUVU1NVlaSVBWT1FNNTNZQlQyWTZPTEpXVUFO\\\ - nVEhWS0NUS1JWRkdMMjRFSFdPSEVCTDM1TFJLWT0+iQI/BBMBCgApBQJbYf3FAhsv\\nBQkB4NZ7BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ3dI2iHZ0Ri9RbA//\\\ - nQ6cgM7ldX8tXT1/1kpv9jEjqkkd2VnHc2syjucEwk1Uiqwvoj9vfnfoigIwfz5j1\\nRQbkdwC1b6HcWJQELHGJL+ySNizzTPdWrOJWZp6TLIzsESwzsMJ/AGsMPrhEhDtE\\\ - nKxUt6EKkidVn6DN2Ysb1Z8tIfZBsiIG79SlsNKEe1z38mqjN0Xo+WiMLJj4l2BFM\\njO1eEz2qOqGwZfFFd8JHdq0qJwzTYm6Ej1Yvvtg7hqJNrVkx5zPbrEJ41LcwWHzO\\\ - npsB0tZ/L9CweAFVpThpprbeiP3/t0Vfg3kYKE1j2/ScdNgh46aTYNkmSBnZ7VTC/\\nLygv/avyLohDq+xyePUHZFXXW2tz2I49SQ7U3f4RQajcrgYJqOdAB9Z06nizaKqM\\\ - n7rtAB764naY4L9IMStocDcezIqwhJvBQtl1uiAmdmJPyEpxOFX/nPrlAjxq24LuX\\nVRjcAwhj3WhmxbJfvXhKlwedKPSLXtseyVL5187Uq9CmzF68J65BURNVWFJs7A8i\\\ - nesvZEciUFEe+VB01J1/s8uokqWZsRP4sB7qVGjbUPVfMS9A/8c7w5VPJcFUq/nVc\\nsivghUmUKfF5d8vvV5JXvmJGTyZoljtuXhDsrGZcC2xtdFjI4bzj3eAPLTnWcIR1\\\ - nFexY4ipqgcl7GbjcqVUaeG3TSiQVfhrXi5dxGftyZ8c=\\n=YJ5M\\n-----END PGP PUBLIC\ + : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ + , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ + \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ + n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ + nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ + nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ + nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ + nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ + nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ + ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ + nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ + nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ + n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ + nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ + nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-01T18:40:00.469265Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/remove_star\"\ - , \n \"reply_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/reply\"\ - , \n \"submissions_url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64/submissions\"\ - , \n \"url\": \"/api/v1/sources/c1c62203-023e-41ce-a1af-74a84adaac64\"\ - , \n \"uuid\": \"c1c62203-023e-41ce-a1af-74a84adaac64\"\n }\n ]\n\ + : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ + \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ + , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ + , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 01 Aug 2018 18:40:00 GMT'] + Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAwMSBBdWcgMjAxOCAyMDo0MDowMCBHTVQifX0.DkOQAA.TBgGc-0TqLxk2QXshd4Rn2Vd9GY; + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMiBHTVQifX0.Dl6XvA.UUCn7xPk5-T3OG_cdfd020ktn2M; HttpOnly; Path=/] status: {code: 200, message: OK} version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index a605a90b9..68da23ebf 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -134,7 +134,7 @@ def __init__(self, **kwargs): self.number_of_documents = 0 # type: int self.number_of_messages = 0 # type: int self.remove_star_url = "" # type: str - self.reply_url = "" # type: str + self.replies_url = "" # type: str self.submissions_url = "" # type: str self.url = "" # type: str self.uuid = "" # type: str @@ -155,7 +155,7 @@ def __init__(self, **kwargs): "number_of_documents", "number_of_messages", "remove_star_url", - "reply_url", + "replies_url", "submissions_url", "url", "uuid", @@ -595,7 +595,7 @@ def reply_source(self, source: Source, msg: str) -> bool: :param source: Source object we want to reply. :param msg: Encrypted message with Source's GPG public key. """ - url = self.server.rstrip("/") + source.reply_url + url = self.server.rstrip("/") + source.replies_url reply = {"reply": msg} From 78b6c7eb71b79e8ff6735326d14ceb2543080cb8 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 22 Aug 2018 14:37:23 +0530 Subject: [PATCH 068/751] Adds download_reply method and corresponding test case --- data/test-download-reply.yml | 91 ++++++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 41 ++++++++++++++++ tests/test_api.py | 20 ++++++++ 3 files changed, 152 insertions(+) create mode 100644 data/test-download-reply.yml diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml new file mode 100644 index 000000000..e4431732b --- /dev/null +++ b/data/test-download-reply.yml @@ -0,0 +1,91 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1Njk0NCwiaWF0IjoxNTM0OTI4MTQ0fQ.eyJpZCI6MX0.uPnfhnix_IzYesxsCgkR0OegnvlvMrrEkaAJDKMciko] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-iconoclastic_yoga-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"4f74b9f2-5947-4cf6-bb95-7a260f555353\"\ + , \n \"reply_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029/replies/3b58a5ed-311b-400b-b0db-5386e7827dbd\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029\"\ + , \n \"uuid\": \"3b58a5ed-311b-400b-b0db-5386e7827dbd\"\n }, \n \ + \ {\n \"filename\": \"4-iconoclastic_yoga-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"4f74b9f2-5947-4cf6-bb95-7a260f555353\", \n \"reply_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029/replies/09460b7a-ca13-478a-8e86-18d4aea5d1e2\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029\"\ + , \n \"uuid\": \"09460b7a-ca13-478a-8e86-18d4aea5d1e2\"\n }, \n \ + \ {\n \"filename\": \"3-depopulated_match-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"4f74b9f2-5947-4cf6-bb95-7a260f555353\", \n \"reply_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963/replies/a2ed2400-c36a-45f5-98da-f57b4c1fe3cb\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963\"\ + , \n \"uuid\": \"a2ed2400-c36a-45f5-98da-f57b4c1fe3cb\"\n }, \n \ + \ {\n \"filename\": \"4-depopulated_match-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"4f74b9f2-5947-4cf6-bb95-7a260f555353\", \n \"reply_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963/replies/1c0d7ad8-2de2-4942-ac9e-55775f9a6801\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963\"\ + , \n \"uuid\": \"1c0d7ad8-2de2-4942-ac9e-55775f9a6801\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1965'] + Content-Type: [application/json] + Date: ['Wed, 22 Aug 2018 08:57:28 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMDo1NzoyOCBHTVQifX0.Dl62-A.jd5Kl_FcmI-R8d3OgLcuwByh5mk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1Njk0NCwiaWF0IjoxNTM0OTI4MTQ0fQ.eyJpZCI6MX0.uPnfhnix_IzYesxsCgkR0OegnvlvMrrEkaAJDKMciko] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029/replies/3b58a5ed-311b-400b-b0db-5386e7827dbd/download + response: + body: + string: !!binary | + hQIMAw8uxjT2wyWpAQ/8Cx2i4ZxRuYMhs4/qsTRVKmNJ4F63IZs7YdxEj54ZeF6AOOzCZIV2c44h + kJAOUxjWJ2k5z63PZL5Hrfy3FEQ0u9BsMLVzTbfnP+s+KK7EuwY5OkZDTCpctGYfRWblksQg8fTT + 26ZjxX0MMcu4nshwBHun3yUMuMSvHIV48RrgoQR3bzr2LU2AALrcNTwSmAatcxuGW2dlmhFlDA5y + gNBAmFtgtBPDiQg+1geq8eA7YR4zWkVggj6k4MPyFKniCYpU4enzxnb7k6xSNh63epVU/1uJ2wKS + n4r33z5wRgD9QpmPF7sLiI3zslrAWYMGYygrRDdiUcDv8ahgvCKn+o2UMmKbt0Y4nC8VYETtdvj9 + CjN/o5h/7j7fFXpUVfVgIg+wtnIsb8iW5CuTa3ZfeQyjlk1myd5ff/BGhduCipQDkp4py/ndcWcD + EvGv2cQc8lh81NGO2KeQ47Tq8GBwK0kkJjuFIYcaW7eBTkL/B9C3F3XJKr1HKQjxXWq3vx91vN3C + VQH8LqC6XClaad2ZCpeKA324+ibx9886zELxC/cRF53Kjsyb7QmwBYaIMHRPm5LD1QoeiVSRHXFG + NKDpg50+72Zl+ixKT7SRwLi+iseYSCj2stxd3bEmS+m2nfbp/yCaWUZPFTq+h1mOwA+a7b3csGJ0 + LxGZSKr8fYyJGHFIA26FAgwDw+fEwKIgGyoBD/wNm5yYTmiGQF5OhCXH79j1zuz4BG0NBVIQtNHw + zhhOxCUSBtIqIprS5NIva4ocRj7fL4mZjOhjUcFD59agZzRcYjrIi6xn8z+nMAFg67/dL91ekJvL + kN4+MBE1dN4lkBHuXPVfopNXEIP/GPXfMX4iWmh+72w7tkVzc6tLDviMshaRY3K9WjtX/9PFKK/D + OZvqliHSLutUYs7LnEdUnLnGYvjBFIvMD3pfnd+LHfYxgutQq/X+W7Rlm/SHxGrr6UjiQVUNI+Cx + bCazDh9XpridV2RBNG5wfzE11u1JVV/pcOPUyjBvBONMI762nbTSwLv0sVW9Qd2O1vykcbQeV/r7 + 2czLBKiH6OG35nP2Lt4JBbPHFGLycQJIHtUhZKES+HbaawnFbJzUHlIXJ+aSPXQVK7iF4N6IVlMg + YyETSDOuxlH9jywmETwCHrna1CzCzkYe5v2ABAGbiJfyfFdTgHMNctHghPyr22IzKsCHQZh/q0WC + tPtCf6RjRkYk9PuS6br9QSlkGb116heO3mTdMaKxBoU7vrpq96qRE5gOfOxBe9abPaYI2JWb75eP + Q1O7mBFi7D/Bd0ri0mZSVXyTGCkvZoyv9uE3OQyszLM6+sj1A5j2ewGDWzhkHN5m7kHNLiSBJ0Za + oql059Mu4pDx8R4YYOvFffk+rcgteuhMwTWyX9I8AcQu4NSX+Q+7j5xbaTtmvToSubIOc/Wq908A + WcUuNtqYmDOb4Hmv1e5/7yGTLEsp5mnnp5BPtj/NZtuz + headers: + Cache-Control: ['public, max-age=43200'] + Content-Disposition: [attachment; filename=3-iconoclastic_yoga-reply.gpg] + Content-Length: ['1116'] + Content-Type: [application/pgp-encrypted] + Date: ['Wed, 22 Aug 2018 08:57:28 GMT'] + Etag: ['"sha256:64ec96de6ec4d1900e66b32583d5c8954d392cd2b3632acb2ded857d904917f7"'] + Expires: ['Wed, 22 Aug 2018 20:57:28 GMT'] + Last-Modified: ['Wed, 22 Aug 2018 08:54:01 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMDo1NzoyOCBHTVQifX0.Dl62-A.jd5Kl_FcmI-R8d3OgLcuwByh5mk; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 68da23ebf..10ee4647f 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -699,3 +699,44 @@ def get_all_replies(self) -> List[Reply]: result.append(reply) return result + + def download_reply(self, reply: Reply, path: str) -> Tuple[str, str]: + """ + Returns a tuple of sha256sum and file path for a given Reply object. This method + also requires a directory path in where it will save the reply file. + + :param reply: Reply object + :param path: Local directory path to save the reply + + :returns: Tuple of sha256sum and path of the saved Reply. + """ + url = self.server.rstrip("/") + reply.reply_url + "/download" + + if os.path.exists(path) and not os.path.isdir(path): + raise BaseError("Please provide a valid directory to save.") + + try: + res = requests.get(url, headers=self.auth_header, stream=True) + + if res.status_code == 404: + raise WrongUUIDError("Missing reply {}".format(reply.uuid)) + + # Get the headers + headers = res.headers + etag = headers["Etag"] + + # This is where we will save our downloaded file + filepath = os.path.join(path, reply.filename) + with open(filepath, "wb") as fobj: + for chunk in res.iter_content( + chunk_size=1024 + ): # Getting 1024 in each chunk + if chunk: + fobj.write(chunk) + + # Because etag comes as JSON encoded string + etag = json.loads(etag) + # Return the tuple of sha256sum, filepath + return etag[7:], filepath + except Exception as err: + raise BaseError(err) diff --git a/tests/test_api.py b/tests/test_api.py index 032c55b8f..cb0ce11ab 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -246,3 +246,23 @@ def test_get_reply_from_source(self): def test_get_all_replies(self): replies = self.api.get_all_replies() self.assertEqual(len(replies), 4) + + @vcr.use_cassette("data/test-download-reply.yml") + def test_download_reply(self): + r = self.api.get_all_replies()[0] + + + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + etag, filepath = self.api.download_reply(r, tmpdir) + + # now let us read the downloaded file + with open(filepath, "rb") as fobj: + data = fobj.read() + + shasum = hashlib.sha256(data).hexdigest() + self.assertEqual(etag, shasum) + + + # Let us remove the temporary directory + shutil.rmtree(tmpdir) From 3676e67e19edc0a03906686cd0fddc69bee86142 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 22 Aug 2018 15:26:03 +0530 Subject: [PATCH 069/751] Adds delete_reply method and test case --- data/test-delete-reply.yml | 103 +++++++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 33 ++++++++++++ tests/test_api.py | 9 ++++ 3 files changed, 145 insertions(+) create mode 100644 data/test-delete-reply.yml diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml new file mode 100644 index 000000000..b5bc078a1 --- /dev/null +++ b/data/test-delete-reply.yml @@ -0,0 +1,103 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1OTkwNywiaWF0IjoxNTM0OTMxMTA3fQ.eyJpZCI6MX0.TjQEJeRQHVqKjP3dA9ueanBPY-hvAjx7FsWwEdNntj8] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-sensitive_clarion-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"9f7d04ed-2439-49bc-8c9f-de872cff258d\"\ + , \n \"reply_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/961d557e-544d-402f-bb00-b566e08fb354\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0\"\ + , \n \"uuid\": \"961d557e-544d-402f-bb00-b566e08fb354\"\n }, \n \ + \ {\n \"filename\": \"4-sensitive_clarion-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/295bad24-351a-4c62-8d62-3f5da027d51c\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0\"\ + , \n \"uuid\": \"295bad24-351a-4c62-8d62-3f5da027d51c\"\n }, \n \ + \ {\n \"filename\": \"3-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/11537477-56e8-4e65-aff9-1e57a6039540\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ + , \n \"uuid\": \"11537477-56e8-4e65-aff9-1e57a6039540\"\n }, \n \ + \ {\n \"filename\": \"4-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/8789dbaf-295c-4771-a1a4-87438aaa2239\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ + , \n \"uuid\": \"8789dbaf-295c-4771-a1a4-87438aaa2239\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1967'] + Content-Type: [application/json] + Date: ['Wed, 22 Aug 2018 09:45:07 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMTo0NTowNyBHTVQifX0.Dl7CIw.KuIsM6oBlTZcpDnb14o9NED_4Z0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1OTkwNywiaWF0IjoxNTM0OTMxMTA3fQ.eyJpZCI6MX0.TjQEJeRQHVqKjP3dA9ueanBPY-hvAjx7FsWwEdNntj8] + Connection: [keep-alive] + Content-Length: ['0'] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: DELETE + uri: http://localhost:8081/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/961d557e-544d-402f-bb00-b566e08fb354 + response: + body: {string: "{\n \"message\": \"Reply deleted\"\n}\n"} + headers: + Content-Length: ['33'] + Content-Type: [application/json] + Date: ['Wed, 22 Aug 2018 09:45:07 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMTo0NTowNyBHTVQifX0.Dl7CIw.KuIsM6oBlTZcpDnb14o9NED_4Z0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1OTkwNywiaWF0IjoxNTM0OTMxMTA3fQ.eyJpZCI6MX0.TjQEJeRQHVqKjP3dA9ueanBPY-hvAjx7FsWwEdNntj8] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.19.1] + method: GET + uri: http://localhost:8081/api/v1/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-sensitive_clarion-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"9f7d04ed-2439-49bc-8c9f-de872cff258d\"\ + , \n \"reply_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/295bad24-351a-4c62-8d62-3f5da027d51c\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0\"\ + , \n \"uuid\": \"295bad24-351a-4c62-8d62-3f5da027d51c\"\n }, \n \ + \ {\n \"filename\": \"3-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/11537477-56e8-4e65-aff9-1e57a6039540\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ + , \n \"uuid\": \"11537477-56e8-4e65-aff9-1e57a6039540\"\n }, \n \ + \ {\n \"filename\": \"4-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/8789dbaf-295c-4771-a1a4-87438aaa2239\"\ + , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ + , \n \"uuid\": \"8789dbaf-295c-4771-a1a4-87438aaa2239\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['1481'] + Content-Type: [application/json] + Date: ['Wed, 22 Aug 2018 09:45:07 GMT'] + Server: [Werkzeug/0.12.2 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMTo0NTowNyBHTVQifX0.Dl7CIw.KuIsM6oBlTZcpDnb14o9NED_4Z0; + HttpOnly; Path=/] + status: {code: 200, message: OK} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 10ee4647f..f2f158cb1 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -740,3 +740,36 @@ def download_reply(self, reply: Reply, path: str) -> Tuple[str, str]: return etag[7:], filepath except Exception as err: raise BaseError(err) + + def delete_reply(self, reply: Reply) -> bool: + """ + Deletes a given Reply object from the server. + + :param reply: The Reply object we want to delete in the server. + :returns: True if successful, raises Error otherwise. + """ + # Not using direct URL because this helps to use the same method + # from local reply (not fetched from server) objects. + # See the *from_string for an example. + source_uuid = reply.source_url.split("/")[-1] + url = self.server.rstrip("/") + "/api/v1/sources/{}/replies/{}".format( + source_uuid, reply.uuid + ) + + try: + res = requests.delete(url, headers=self.auth_header) + + if res.status_code == 404: + raise WrongUUIDError("Missing reply {}".format(reply.uuid)) + + data = res.json() + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Reply deleted": + return True + # We should never reach here + return False diff --git a/tests/test_api.py b/tests/test_api.py index cb0ce11ab..29a9f3642 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -266,3 +266,12 @@ def test_download_reply(self): # Let us remove the temporary directory shutil.rmtree(tmpdir) + + @vcr.use_cassette("data/test-delete-reply.yml") + def test_delete_reply(self): + r = self.api.get_all_replies()[0] + + self.assertTrue(self.api.delete_reply(r)) + + # We deleted one, so there must be 3 replies left + self.assertEqual(len(self.api.get_all_replies()), 3) From 6b162a2b6559c870111aa2da4c298c738e07c358 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 22 Aug 2018 09:57:19 -0700 Subject: [PATCH 070/751] Remove unnecessary comment and subprocess.run in callbacks --- securedrop_proxy/callbacks.py | 2 +- tests/test_proxy.py | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/securedrop_proxy/callbacks.py b/securedrop_proxy/callbacks.py index fa42fb9c9..d67bcebdb 100644 --- a/securedrop_proxy/callbacks.py +++ b/securedrop_proxy/callbacks.py @@ -34,6 +34,6 @@ def on_save(fh, res, conf): res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.body = json.dumps({'filename': fn }) -# new on_done handler + def on_done(res): print(json.dumps(res.__dict__)) diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 12c307dd7..22aac3def 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -16,12 +16,7 @@ def setUp(self): self.conf.port = 443 def on_save(self, fh, res, conf): - self.fn = str(uuid.uuid4()) - - # this will be `qvm-move...` in production - subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.headers['Content-Type'] = 'application/json' res.body = json.dumps({'filename': self.fn}) @@ -143,10 +138,6 @@ def setUp(self): def on_save(self, fh, res, conf): self.fn = str(uuid.uuid4()) - - # this will be `qvm-move...` in production - subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.headers['Content-Type'] = 'application/json' res.body = json.dumps({'filename': self.fn}) From d22af39b26ac277a138ab43e1d5ff5be56be9d84 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 23 Aug 2018 11:20:41 +0530 Subject: [PATCH 071/751] Fixes #11, removed mypy_extension This cleans up the code for packaging in Debian Stretch. --- Pipfile | 7 +- Pipfile.lock | 143 ++++++++++++++++++++++------------------ sdclientapi/__init__.py | 10 +-- setup.py | 3 +- tests/test_api.py | 2 - 5 files changed, 87 insertions(+), 78 deletions(-) diff --git a/Pipfile b/Pipfile index 5633ec162..1c6034a72 100644 --- a/Pipfile +++ b/Pipfile @@ -8,10 +8,9 @@ python_version = "3.5" [dev-packages] vcrpy = "*" - -[packages] -requests = "*" -mypy-extensions = "*" mypy = "*" pyotp = "*" sphinx = "*" + +[packages] +requests = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 454c583bc..31806245c 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0372a83abe6a8c5cf3b55c5dd8f0d457623e6e9cd1bae4eba6861c2368ea32fd" + "sha256": "b0e386d74b16d1df8eb8a42b01245d383869465441d239442b299ac1b60f3572" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,44 @@ ] }, "default": { + "certifi": { + "hashes": [ + "sha256:4c1d68a1408dd090d2f3a869aa94c3947cc1d967821d1ed303208c9f41f0f2f4", + "sha256:b6e8b28b2b7e771a41ecdd12d4d43262ecab52adebbafa42c77d6b57fb6ad3a4" + ], + "version": "==2018.8.13" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "version": "==2.7" + }, + "requests": { + "hashes": [ + "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", + "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + ], + "index": "pypi", + "version": "==2.19.1" + }, + "urllib3": { + "hashes": [ + "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", + "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + ], + "version": "==1.23" + } + }, + "develop": { "alabaster": { "hashes": [ "sha256:674bb3bab080f598371f4443c5008cbfeb1a5e622dd312395d2d82af2c54c456", @@ -32,10 +70,10 @@ }, "certifi": { "hashes": [ - "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", - "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0" + "sha256:4c1d68a1408dd090d2f3a869aa94c3947cc1d967821d1ed303208c9f41f0f2f4", + "sha256:b6e8b28b2b7e771a41ecdd12d4d43262ecab52adebbafa42c77d6b57fb6ad3a4" ], - "version": "==2018.4.16" + "version": "==2018.8.13" }, "chardet": { "hashes": [ @@ -79,6 +117,24 @@ ], "version": "==1.0" }, + "multidict": { + "hashes": [ + "sha256:1a1d76374a1e7fe93acef96b354a03c1d7f83e7512e225a527d283da0d7ba5e0", + "sha256:1d6e191965505652f194bc4c40270a842922685918a4f45e6936a6b15cc5816d", + "sha256:295961a6a88f1199e19968e15d9b42f3a191c89ec13034dbc212bf9c394c3c82", + "sha256:2be5af084de6c3b8e20d6421cb0346378a9c867dcf7c86030d6b0b550f9888e4", + "sha256:2eb99617c7a0e9f2b90b64bc1fb742611718618572747d6f3d6532b7b78755ab", + "sha256:4ba654c6b5ad1ae4a4d792abeb695b29ce981bb0f157a41d0fd227b385f2bef0", + "sha256:5ba766433c30d703f6b2c17eb0b6826c6f898e5f58d89373e235f07764952314", + "sha256:a59d58ee85b11f337b54933e8d758b2356fcdcc493248e004c9c5e5d11eedbe4", + "sha256:a6e35d28900cf87bcc11e6ca9e474db0099b78f0be0a41d95bef02d49101b5b2", + "sha256:b4df7ca9c01018a51e43937eaa41f2f5dce17a6382fda0086403bcb1f5c2cf8e", + "sha256:bbd5a6bffd3ba8bfe75b16b5e28af15265538e8be011b0b9fddc7d86a453fd4a", + "sha256:d870f399fcd58a1889e93008762a3b9a27cf7ea512818fc6e689f59495648355", + "sha256:e9404e2e19e901121c3c5c6cffd5a8ae0d1d67919c970e3b3262231175713068" + ], + "version": "==4.3.1" + }, "mypy": { "hashes": [ "sha256:673ea75fb750289b7d1da1331c125dc62fc1c3a8db9129bb372ae7b7d5bf300a", @@ -87,13 +143,6 @@ "index": "pypi", "version": "==0.620" }, - "mypy-extensions": { - "hashes": [ - "sha256:c4553f2475996c912658d3c2f398766cd47a65e0c2c6bb27ac8dea94a21640f4" - ], - "index": "pypi", - "version": "==0.3.0" - }, "packaging": { "hashes": [ "sha256:e9215d2d2535d3ae866c3d6efc77d5b24a0192cce0ff20e42896cc0664f889c0", @@ -135,6 +184,22 @@ ], "version": "==2018.5" }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "version": "==3.13" + }, "requests": { "hashes": [ "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", @@ -159,11 +224,11 @@ }, "sphinx": { "hashes": [ - "sha256:217ad9ece2156ed9f8af12b5d2c82a499ddf2c70a33c5f81864a08d8c67b9efc", - "sha256:a765c6db1e5b62aae857697cd4402a5c1a315a7b0854bbcd0fc8cdc524da5896" + "sha256:71531900af3f68625a29c4e00381bee8f85255219a3d500a3e255076a45b735e", + "sha256:a3defde5e17b5bc2aa21820674409287acc4d56bf8d009213d275e4b9d0d490d" ], "index": "pypi", - "version": "==1.7.6" + "version": "==1.7.7" }, "sphinxcontrib-websupport": { "hashes": [ @@ -206,56 +271,6 @@ "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" ], "version": "==1.23" - } - }, - "develop": { - "idna": { - "hashes": [ - "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", - "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" - ], - "version": "==2.7" - }, - "multidict": { - "hashes": [ - "sha256:1a1d76374a1e7fe93acef96b354a03c1d7f83e7512e225a527d283da0d7ba5e0", - "sha256:1d6e191965505652f194bc4c40270a842922685918a4f45e6936a6b15cc5816d", - "sha256:295961a6a88f1199e19968e15d9b42f3a191c89ec13034dbc212bf9c394c3c82", - "sha256:2be5af084de6c3b8e20d6421cb0346378a9c867dcf7c86030d6b0b550f9888e4", - "sha256:2eb99617c7a0e9f2b90b64bc1fb742611718618572747d6f3d6532b7b78755ab", - "sha256:4ba654c6b5ad1ae4a4d792abeb695b29ce981bb0f157a41d0fd227b385f2bef0", - "sha256:5ba766433c30d703f6b2c17eb0b6826c6f898e5f58d89373e235f07764952314", - "sha256:a59d58ee85b11f337b54933e8d758b2356fcdcc493248e004c9c5e5d11eedbe4", - "sha256:a6e35d28900cf87bcc11e6ca9e474db0099b78f0be0a41d95bef02d49101b5b2", - "sha256:b4df7ca9c01018a51e43937eaa41f2f5dce17a6382fda0086403bcb1f5c2cf8e", - "sha256:bbd5a6bffd3ba8bfe75b16b5e28af15265538e8be011b0b9fddc7d86a453fd4a", - "sha256:d870f399fcd58a1889e93008762a3b9a27cf7ea512818fc6e689f59495648355", - "sha256:e9404e2e19e901121c3c5c6cffd5a8ae0d1d67919c970e3b3262231175713068" - ], - "version": "==4.3.1" - }, - "pyyaml": { - "hashes": [ - "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", - "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", - "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", - "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", - "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", - "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", - "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", - "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", - "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", - "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", - "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" - ], - "version": "==3.13" - }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" }, "vcrpy": { "hashes": [ diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index f2f158cb1..83a0a0e9e 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -4,10 +4,6 @@ import requests from typing import Optional, Dict, List, Tuple -from mypy_extensions import TypedDict - -T_token = TypedDict("T_token", {"expiration": str, "token": str}) -T_user = TypedDict("T_user", {"is_admin": bool, "last_login": str, "username": str}) class BaseError(Exception): @@ -185,7 +181,7 @@ def __init__(self, address, username, passphrase, totp) -> None: self.username = username # type: str self.passphrase = passphrase # type: str self.totp = totp # type: str - self.token = {"token": "", "expiration": ""} # type: T_token + self.token = {"token": "", "expiration": ""} self.auth_header = {"Authorization": ""} # type: Dict def authenticate(self) -> bool: @@ -202,7 +198,7 @@ def authenticate(self) -> bool: token = requests.post(self.server + "api/v1/token", data=json.dumps(user_data)) try: - token_data = token.json() # type: T_token + token_data = token.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") if not "expiration" in token_data: @@ -562,7 +558,7 @@ def flag_source(self, source: Source) -> bool: return True - def get_current_user(self) -> T_user: + def get_current_user(self): """ Returns a dictionary of the current user data. diff --git a/setup.py b/setup.py index f4246809d..7a7e860e4 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,8 @@ description="Python client API to access SecureDrop Journalist REST API", long_description=long_description, long_description_content_type="text/markdown", - install_requires=["requests", "mypy-extensions"], + license="GPLv3+", + install_requires=["requests",], python_requires=">=3.5", url="https://github.com/freedomofpress/sdclientapi", packages=setuptools.find_packages(exclude=["docs", "tests"]), diff --git a/tests/test_api.py b/tests/test_api.py index 29a9f3642..795344eba 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -251,7 +251,6 @@ def test_get_all_replies(self): def test_download_reply(self): r = self.api.get_all_replies()[0] - # We need a temporary directory to download tmpdir = tempfile.mkdtemp() etag, filepath = self.api.download_reply(r, tmpdir) @@ -263,7 +262,6 @@ def test_download_reply(self): shasum = hashlib.sha256(data).hexdigest() self.assertEqual(etag, shasum) - # Let us remove the temporary directory shutil.rmtree(tmpdir) From 3ca06fa59e5a48d651da9ac0842521a8f29b2e43 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 24 Aug 2018 15:08:25 -0700 Subject: [PATCH 072/751] Minor docs/makefile fixes --- Makefile | 2 +- README.md | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 1b3475073..cdffb28c4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ install: pipenv install - cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy + sudo cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy test: pipenv run python -m unittest -v diff --git a/README.md b/README.md index fe89c5b71..f742855f0 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ the name of the new file. #### tests -Unit tests can be run with `make tests` +Unit tests can be run with `make test` #### running @@ -89,7 +89,8 @@ this documentation, we assume the client is running in `securedrop-client`, and the proxy is running in `securedrop-proxy`. Edit `qubes/securedrop.Proxy` to reflect the path to `entrypoint.sh` -in this repo. Run `make install`, which will move `securedrop.Proxy` +in this repo. Also edit the directory to this repo code in `entrypoint.sh`. +Next, run `make install`, which will move `securedrop.Proxy` (the qubes-rpc "server path definition" file) into place in `/etc/qubes-rpc/`. @@ -116,15 +117,15 @@ your situation- check that `target_vm` is set to the correct client VM name, and assure that `dev` is `False`. This documentation assumes you've left `host` set to `jsonplaceholder.typicode.com`. -Now on the client VM you should be able to do: +Now on the client VM you should be able to do (again replacing `securedrop-proxy` with the name of your proxy AppVM): - $ echo '{"method":"GET","path_query":"/posts?userId=1"}' | /usr/lib/qubes/qrexec-client-vm securedrop-client securedrop.Proxy + $ echo '{"method":"GET","path_query":"/posts?userId=1"}' | /usr/lib/qubes/qrexec-client-vm securedrop-proxy securedrop.Proxy You should see a successful JSON response as returned by the remote server. Try now - $ echo '{"method":"GET","path_query":""}' | /usr/lib/qubes/qrexec-client-vm securedrop-client securedrop.Proxy + $ echo '{"method":"GET","path_query":""}' | /usr/lib/qubes/qrexec-client-vm securedrop-proxy securedrop.Proxy If you have configured everything correctly, you should see a JSON response which include a `body` which looks like: @@ -140,5 +141,5 @@ returned by the remote server. Finally, try invoking an error. Provide an invalid JSON request, and notice you receive a `400` response from the proxy: - $ echo '[INVALID' | /usr/lib/qubes/qrexec-client-vm securedrop-client securedrop.Proxy + $ echo '[INVALID' | /usr/lib/qubes/qrexec-client-vm securedrop-proxy securedrop.Proxy {"body": "{\"error\": \"Invalid JSON in request\"}", "version": "0.1.1", "status": 400, "headers": {"Content-Type": "application/json"}} From d84b65b8c886a911143787ed3f6e635fece07945 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 30 Aug 2018 00:52:02 +0530 Subject: [PATCH 073/751] Changes the name of the git repo --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 7a7e860e4..4a865e111 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ long_description = fh.read() setuptools.setup( - name="sdclientapi", + name="securedrop-sdk", version="0.1.0", author="Kushal Das", author_email="kushal@freedom.press", @@ -14,7 +14,7 @@ license="GPLv3+", install_requires=["requests",], python_requires=">=3.5", - url="https://github.com/freedomofpress/sdclientapi", + url="https://github.com/freedomofpress/securedrop-sdk", packages=setuptools.find_packages(exclude=["docs", "tests"]), classifiers=( "Development Status :: 3 - Alpha", From e2060fb0e628e12deba91e7c13d6d3db8617863e Mon Sep 17 00:00:00 2001 From: "Nicholas H.Tollervey" Date: Mon, 17 Sep 2018 13:19:45 +0100 Subject: [PATCH 074/751] Ensure source_uuid is added to Submission objects. --- sdclientapi/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 83a0a0e9e..192dc5738 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -92,6 +92,7 @@ def __init__(self, **kwargs) -> None: self.is_read = False # type: bool self.size = 0 # type: int self.source_url = "" # type: str + self.source_uuid = "" # type: str self.submission_url = "" # type: str self.uuid = "" # type: str @@ -112,6 +113,7 @@ def __init__(self, **kwargs) -> None: if not key in kwargs: AttributeError("Missing key {}".format(key)) setattr(self, key, kwargs[key]) + _, self.source_uuid = self.source_url.rsplit('/', 1) class Source: From 010a72f54711675a806f5787d8629e44123ae20e Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 27 Sep 2018 16:24:08 -0400 Subject: [PATCH 075/751] Moves sd-proxy inside of the module --- sd-proxy.py => securedrop_proxy/entrypoint.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sd-proxy.py => securedrop_proxy/entrypoint.py (100%) diff --git a/sd-proxy.py b/securedrop_proxy/entrypoint.py similarity index 100% rename from sd-proxy.py rename to securedrop_proxy/entrypoint.py From d431cd449dddc138f1ea84a4903680b704f2ba04 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 27 Sep 2018 16:25:37 -0400 Subject: [PATCH 076/751] Updates entrypoint into a function --- securedrop_proxy/entrypoint.py | 63 ++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index 5d01b098d..2bf7211db 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -8,34 +8,39 @@ import sys import json -import securedrop_proxy.proxy as proxy import uuid import subprocess -import securedrop_proxy.config as config -import securedrop_proxy.callbacks as callbacks -import securedrop_proxy.main as main - -# a fresh, new proxy object -p = proxy.Proxy() - -# set up an error handler early, so we can use it during -# configuration, etc -p.on_done = callbacks.err_on_done - -# path to config file must be at argv[1] -if len(sys.argv) != 2: - p.simple_error(500, 'sd-proxy script not called with path to configuration file') - p.on_done(p.res) - -# read config. `read_conf` will call `p.on_done` if there is a config -# problem, and will return a Conf object on success. -conf_path = sys.argv[1] -p.conf = config.read_conf(conf_path, p) - -# read user request from STDIN -incoming = [] -for line in sys.stdin: - incoming.append(line) -incoming = '\n'.join(incoming) - -main.__main__(incoming, p) + +from . import proxy +from . import config +from . import callbacks +from . import main + + +def start(): + # a fresh, new proxy object + p = proxy.Proxy() + + # set up an error handler early, so we can use it during + # configuration, etc + p.on_done = callbacks.err_on_done + + # path to config file must be at argv[1] + if len(sys.argv) != 2: + p.simple_error( + 500, "sd-proxy script not called with path to configuration file" + ) + p.on_done(p.res) + + # read config. `read_conf` will call `p.on_done` if there is a config + # problem, and will return a Conf object on success. + conf_path = sys.argv[1] + p.conf = config.read_conf(conf_path, p) + + # read user request from STDIN + incoming = [] + for line in sys.stdin: + incoming.append(line) + incoming = "\n".join(incoming) + + main.__main__(incoming, p) From 3d3882c41a0075a7a43b98a4eb7f179fd86521f0 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 27 Sep 2018 16:27:35 -0400 Subject: [PATCH 077/751] Adds setup.py and related changes for packaging Adds a console entry point to use the `sd-proxy` command. It also adds the LICENSE file for the project --- LICENSE | 674 +++++++++++++++++++++++++++++++++++++++++ MANIFEST.in | 9 + qubes/securedrop.Proxy | 2 +- setup.py | 32 ++ 4 files changed, 716 insertions(+), 1 deletion(-) create mode 100644 LICENSE create mode 100644 MANIFEST.in create mode 100644 setup.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..315d5e4ef --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,9 @@ +include securedrop_proxy/*.py +include requirements.txt +include README.md +include LICENSE +include setup.py +include Pipfile +include Pipfile.lock +include qubes/securedrop.Proxy +include config-example.yaml diff --git a/qubes/securedrop.Proxy b/qubes/securedrop.Proxy index 133c09008..cea1922e4 100644 --- a/qubes/securedrop.Proxy +++ b/qubes/securedrop.Proxy @@ -1 +1 @@ -/home/user/projects/securedrop-proxy/entrypoint.sh +/usr/bin/sd-proxy /etc/sd-proxy.yaml diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..dff5d4a80 --- /dev/null +++ b/setup.py @@ -0,0 +1,32 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name="securedrop-proxy", + version="0.1.0", + author="Freedom of the Press Foundation", + author_email="securedrop@freedom.press", + description="SecureDrop Qubes proxy service", + long_description=long_description, + long_description_content_type="text/markdown", + license="GPLv3+", + install_requires=["requests","furl", "pyyaml", "werkzeug"], + python_requires=">=3.5", + url="https://github.com/freedomofpress/securedrop-proxy", + packages=setuptools.find_packages(exclude=["docs", "tests"]), + classifiers=( + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3", + "Topic :: Software Development :: Libraries :: Python Modules", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + ), + entry_points={ + 'console_scripts': [ + 'sd-proxy = securedrop_proxy.entrypoint:start', + ], + }, +) From 14e26d99ffac5da08dbe673f312e3219b227c8e8 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 4 Oct 2018 16:54:22 -0700 Subject: [PATCH 078/751] Reply: Add journalist UUID as attribute --- sdclientapi/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 192dc5738..b020ad1b9 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -56,6 +56,7 @@ class Reply: def __init__(self, **kwargs) -> None: self.filename = "" # type: str self.journalist_username = "" # type: str + self.journalist_uuid = "" # type: str self.is_deleted_by_source = False # type: bool self.reply_url = "" # type: str self.size = 0 # type: int @@ -66,6 +67,7 @@ def __init__(self, **kwargs) -> None: for key in [ "filename", "journalist_username", + "journalist_uuid", "is_deleted_by_source", "reply_url", "size", From 4b18c3c301d5d35183fe2ac5a14923852533effd Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 9 Oct 2018 15:21:14 -0400 Subject: [PATCH 079/751] Initial code for APIProxy We can now use the securedrop-proxy to fetch data from the server. This has the initial authentication and get_source* methods. --- sdclientapi/__init__.py | 166 ++-------------------------------- sdclientapi/proxiapi.py | 155 +++++++++++++++++++++++++++++++ sdclientapi/sdlocalobjects.py | 157 ++++++++++++++++++++++++++++++++ 3 files changed, 318 insertions(+), 160 deletions(-) create mode 100644 sdclientapi/proxiapi.py create mode 100644 sdclientapi/sdlocalobjects.py diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index b020ad1b9..e52e5e4c5 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -5,164 +5,8 @@ from typing import Optional, Dict, List, Tuple - -class BaseError(Exception): - pass - - -class ReplyError(BaseError): - "For errors on reply messages" - - def __init__(self, message): - self.msg = message - - def __str__(self): - return repr(self.msg) - - -class WrongUUIDError(BaseError): - "For missing UUID, can be for source or submission" - - def __init__(self, message): - self.msg = message - - def __str__(self): - return repr(self.msg) - - -class AuthError(BaseError): - "For Authentication errors" - - def __init__(self, message): - self.msg = message - - def __str__(self): - return repr(self.msg) - - -class AttributeError(BaseError): - def __init__(self, message): - self.msg = message - - def __str__(self): - return repr(self.msg) - - -class Reply: - """ - This class represents a reply to the source. - """ - - def __init__(self, **kwargs) -> None: - self.filename = "" # type: str - self.journalist_username = "" # type: str - self.journalist_uuid = "" # type: str - self.is_deleted_by_source = False # type: bool - self.reply_url = "" # type: str - self.size = 0 # type: int - self.source_url = "" # type: str - self.source_uuid = "" # type: str - self.uuid = "" # type: str - - for key in [ - "filename", - "journalist_username", - "journalist_uuid", - "is_deleted_by_source", - "reply_url", - "size", - "source_url", - "uuid", - ]: - if not key in kwargs: - AttributeError("Missing key {}".format(key)) - setattr(self, key, kwargs[key]) - - # Now let us set source uuid - values = self.source_url.split("/") - self.source_uuid = values[-1] - - -class Submission: - """ - This class represents a submission object in the server. - """ - - def __init__(self, **kwargs) -> None: - self.download_url = "" # type: str - self.filename = "" # type: str - self.is_read = False # type: bool - self.size = 0 # type: int - self.source_url = "" # type: str - self.source_uuid = "" # type: str - self.submission_url = "" # type: str - self.uuid = "" # type: str - - if ["uuid"] == list(kwargs.keys()): - # Means we are creating an object only for fetching from server. - self.uuid = kwargs["uuid"] - return - - for key in [ - "download_url", - "filename", - "is_read", - "size", - "source_url", - "submission_url", - "uuid", - ]: - if not key in kwargs: - AttributeError("Missing key {}".format(key)) - setattr(self, key, kwargs[key]) - _, self.source_uuid = self.source_url.rsplit('/', 1) - - -class Source: - """ - This class represents a source object in the server. - """ - - def __init__(self, **kwargs): - self.add_star_url = "" # type: str - self.interaction_count = 0 # type: int - self.is_flagged = False # type: bool - self.is_starred = False # type: bool - self.journalist_designation = "" # type: str - self.key = {} # type: Dict - self.last_updated = "" # type: str - self.number_of_documents = 0 # type: int - self.number_of_messages = 0 # type: int - self.remove_star_url = "" # type: str - self.replies_url = "" # type: str - self.submissions_url = "" # type: str - self.url = "" # type: str - self.uuid = "" # type: str - - if ["uuid"] == list(kwargs.keys()): - # Means we are creating an object only for fetching from server. - self.uuid = kwargs["uuid"] - return - - for key in [ - "add_star_url", - "interaction_count", - "is_flagged", - "is_starred", - "journalist_designation", - "key", - "last_updated", - "number_of_documents", - "number_of_messages", - "remove_star_url", - "replies_url", - "submissions_url", - "url", - "uuid", - ]: - if not key in kwargs: - AttributeError("Missing key {}".format(key)) - setattr(self, key, kwargs[key]) +from .sdlocalobjects import * +from .proxiapi import APIProxy, json_query class API: @@ -188,16 +32,18 @@ def __init__(self, address, username, passphrase, totp) -> None: self.token = {"token": "", "expiration": ""} self.auth_header = {"Authorization": ""} # type: Dict - def authenticate(self) -> bool: + def authenticate(self, totp = "") -> bool: """ Authenticate the user and fetches the token from the server. :returns: True if authentication is successful, raise AuthError otherwise. """ + if not totp: + totp = self.totp user_data = { "username": self.username, "passphrase": self.passphrase, - "one_time_code": self.totp, + "one_time_code": totp, } token = requests.post(self.server + "api/v1/token", data=json.dumps(user_data)) diff --git a/sdclientapi/proxiapi.py b/sdclientapi/proxiapi.py new file mode 100644 index 000000000..4c73c7d36 --- /dev/null +++ b/sdclientapi/proxiapi.py @@ -0,0 +1,155 @@ +from pprint import pprint +import os +import json +from subprocess import PIPE, Popen + +from .sdlocalobjects import * + +from typing import Optional, Dict, List, Tuple + + +def json_query(data): + """ + Takes a json based query and passes to the network proxy. + Returns the JSON output from the proxy. + """ + proxyvmname = "proxy-debian" + p = Popen( + ["/usr/lib/qubes/qrexec-client-vm", proxyvmname, "securedrop.Proxy"], + stdin=PIPE, + stdout=PIPE, + ) + p.stdin.write(data.encode("utf-8")) + d = p.communicate() + output = d[0].decode("utf-8") + return output.strip() + + +class APIProxy: + """ + This is class to do all the network calls to the SecureDrop API server. + + :param address: Server URL (http://localhost:8081/) + :param username: Journalist username + :param passphrase: Journalist passphrase + :param totp: Current TOTP value + :returns: An object of API class. + """ + + def __init__(self, address, username, passphrase, totp) -> None: + """ + Primary API class, this is the only thing which will make network call. + """ + + self.server = address # type: str + self.username = username # type: str + self.passphrase = passphrase # type: str + self.totp = totp # type: str + self.token = {"token": "", "expiration": ""} + self.auth_header = {"Authorization": ""} # type: Dict + + def authenticate(self, totp = "") -> bool: + """ + Authenticate the user and fetches the token from the server. + + :returns: True if authentication is successful, raise AuthError otherwise. + """ + if not totp: + totp = self.totp + user_data = { + "username": self.username, + "passphrase": self.passphrase, + "one_time_code": totp, + } + method = "POST" + path_query = "api/v1/token" + body = json.dumps(user_data) + + data = {"method": method, "path_query": path_query, "body": body} + + try: + result = json.loads(json_query(json.dumps(data))) + token_data = json.loads(result["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + if not "expiration" in token_data: + raise AuthError("Authentication error") + + self.token = token_data + self.update_auth_header() + # If we are here, means the method call was successful. + return True + + def update_auth_header(self): + self.auth_header = { + "Authorization": "token " + self.token["token"], + "Content-Type": "application/json", + "Accept": "application/json", + } + + + def get_sources(self) -> List[Source]: + """ + Returns a list of all the sources from the Server. + + :returns: List of Source objects. + """ + path_query = "api/v1/sources" + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + sources = data["sources"] + result = [] # type: List[Source] + + for source in sources: + s = Source(**source) + result.append(s) + + return result + + def get_source(self, source: Source) -> Source: + """ + This will return a single Source based on UUID. + + :param source: Source object containing only source's uuid value. + :returns: Source object fetched from server for the given UUID value. + """ + path_query = "api/v1/sources/{}".format(source.uuid) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return Source(**data) + + def get_source_from_string(self, uuid: str) -> Source: + """ + This will fetch a source from server and return it. + + :param uuid: Source UUID as string. + :returns: Source object fetched from server for the given UUID value. + """ + + s = Source(uuid=uuid) + return self.get_source(s) \ No newline at end of file diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py new file mode 100644 index 000000000..7957b8598 --- /dev/null +++ b/sdclientapi/sdlocalobjects.py @@ -0,0 +1,157 @@ +class BaseError(Exception): + pass + + +class ReplyError(BaseError): + "For errors on reply messages" + + def __init__(self, message): + self.msg = message + + def __str__(self): + return repr(self.msg) + + +class WrongUUIDError(BaseError): + "For missing UUID, can be for source or submission" + + def __init__(self, message): + self.msg = message + + def __str__(self): + return repr(self.msg) + + +class AuthError(BaseError): + "For Authentication errors" + + def __init__(self, message): + self.msg = message + + def __str__(self): + return repr(self.msg) + + +class AttributeError(BaseError): + def __init__(self, message): + self.msg = message + + def __str__(self): + return repr(self.msg) + + +class Reply: + """ + This class represents a reply to the source. + """ + + def __init__(self, **kwargs) -> None: + self.filename = "" # type: str + self.journalist_username = "" # type: str + self.journalist_uuid = "" # type: str + self.is_deleted_by_source = False # type: bool + self.reply_url = "" # type: str + self.size = 0 # type: int + self.source_url = "" # type: str + self.source_uuid = "" # type: str + self.uuid = "" # type: str + + for key in [ + "filename", + "journalist_username", + "journalist_uuid", + "is_deleted_by_source", + "reply_url", + "size", + "source_url", + "uuid", + ]: + if not key in kwargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kwargs[key]) + + # Now let us set source uuid + values = self.source_url.split("/") + self.source_uuid = values[-1] + + +class Submission: + """ + This class represents a submission object in the server. + """ + + def __init__(self, **kwargs) -> None: + self.download_url = "" # type: str + self.filename = "" # type: str + self.is_read = False # type: bool + self.size = 0 # type: int + self.source_url = "" # type: str + self.source_uuid = "" # type: str + self.submission_url = "" # type: str + self.uuid = "" # type: str + + if ["uuid"] == list(kwargs.keys()): + # Means we are creating an object only for fetching from server. + self.uuid = kwargs["uuid"] + return + + for key in [ + "download_url", + "filename", + "is_read", + "size", + "source_url", + "submission_url", + "uuid", + ]: + if not key in kwargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kwargs[key]) + _, self.source_uuid = self.source_url.rsplit("/", 1) + + +class Source: + """ + This class represents a source object in the server. + """ + + def __init__(self, **kwargs): + self.add_star_url = "" # type: str + self.interaction_count = 0 # type: int + self.is_flagged = False # type: bool + self.is_starred = False # type: bool + self.journalist_designation = "" # type: str + self.key = {} # type: Dict + self.last_updated = "" # type: str + self.number_of_documents = 0 # type: int + self.number_of_messages = 0 # type: int + self.remove_star_url = "" # type: str + self.replies_url = "" # type: str + self.submissions_url = "" # type: str + self.url = "" # type: str + self.uuid = "" # type: str + + if ["uuid"] == list(kwargs.keys()): + # Means we are creating an object only for fetching from server. + self.uuid = kwargs["uuid"] + return + + for key in [ + "add_star_url", + "interaction_count", + "is_flagged", + "is_starred", + "journalist_designation", + "key", + "last_updated", + "number_of_documents", + "number_of_messages", + "remove_star_url", + "replies_url", + "submissions_url", + "url", + "uuid", + ]: + if not key in kwargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kwargs[key]) From 8ee421f3e6af889128eecbbadc164db672830d99 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 10 Oct 2018 13:41:39 -0400 Subject: [PATCH 080/751] Adds all methods except download files for ``APIProxy`` class The methods have same calling signature as in ``API`` class, thus will help the developers to use the either as required. --- sdclientapi/proxiapi.py | 478 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 471 insertions(+), 7 deletions(-) diff --git a/sdclientapi/proxiapi.py b/sdclientapi/proxiapi.py index 4c73c7d36..6f949570f 100644 --- a/sdclientapi/proxiapi.py +++ b/sdclientapi/proxiapi.py @@ -48,7 +48,7 @@ def __init__(self, address, username, passphrase, totp) -> None: self.token = {"token": "", "expiration": ""} self.auth_header = {"Authorization": ""} # type: Dict - def authenticate(self, totp = "") -> bool: + def authenticate(self, totp="") -> bool: """ Authenticate the user and fetches the token from the server. @@ -66,15 +66,15 @@ def authenticate(self, totp = "") -> bool: body = json.dumps(user_data) data = {"method": method, "path_query": path_query, "body": body} - + try: result = json.loads(json_query(json.dumps(data))) - token_data = json.loads(result["body"]) + token_data = json.loads(result["body"]) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") if not "expiration" in token_data: raise AuthError("Authentication error") - + self.token = token_data self.update_auth_header() # If we are here, means the method call was successful. @@ -86,7 +86,6 @@ def update_auth_header(self): "Content-Type": "application/json", "Accept": "application/json", } - def get_sources(self) -> List[Source]: """ @@ -131,7 +130,7 @@ def get_source(self, source: Source) -> Source: try: res = json.loads(json_query(json.dumps(data))) - + if res["status"] == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) data = json.loads(res["body"]) @@ -152,4 +151,469 @@ def get_source_from_string(self, uuid: str) -> Source: """ s = Source(uuid=uuid) - return self.get_source(s) \ No newline at end of file + return self.get_source(s) + + def delete_source(self, source: Source) -> bool: + """ + This method will delete the source and collection. If the uuid + is not found in the server, it will raise WrongUUIDError. + + :param source: Source object containing only source's uuid value. + :returns: True if successful, raises Errors in case of wrong values. + """ + path_query = "api/v1/sources/{}".format(source.uuid) + method = "DELETE" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Source and submissions deleted": + return True + + # We should never reach here + return False + + def delete_source_from_string(self, uuid: str) -> bool: + """ + This method will delete the source and collection. If the uuid + is not found in the server, it will raise WrongUUIDError. + + :param uuid: Source UUID as string. + :returns: True if the operation is successful. + """ + + s = Source(uuid=uuid) + return self.delete_source(s) + + def add_star(self, source: Source) -> bool: + """ + Adds a star to a given source. + + :param source: The source object to whom we want add a star. + :returns: True if successful, raises Error otherwise. + """ + path_query = "api/v1/sources/{}/add_star".format(source.uuid) + method = "POST" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "message" in data and data["message"] == "Star added": + return True + + return False + + def remove_star(self, source: Source) -> bool: + """Removes star from a given Source. + + :param source: Source object to remove the star from. + :returns: True if successful, raises Error otherwise. + """ + path_query = "api/v1/sources/{}/remove_star".format(source.uuid) + method = "delete" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "message" in data and data["message"] == "Star removed": + return True + + return False + + def get_submissions(self, source: Source) -> List[Submission]: + """ + Returns a list of Submission objects from the server for a given source. + + :param source: Source object for whom we want to find all the submissions. + :returns: List of Submission objects. + """ + path_query = "api/v1/sources/{}/submissions".format(source.uuid) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] # type: List[Submission] + values = data["submissions"] + + for val in values: + s = Submission(**val) + result.append(s) + + return result + + def get_submission(self, submission: Submission) -> Submission: + """ + Returns the updated Submission object from the server. + + :param submission: Submission object we want to update. + :returns: Updated submission object from the server. + """ + source_uuid = submission.source_url.split("/")[-1] + path_query = "api/v1/sources/{}/submissions/{}".format( + source_uuid, submission.uuid + ) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return Submission(**data) + + def get_submission_from_string(self, uuid: str, source_uuid: str) -> Submission: + """ + Returns the updated Submission object from the server. + + :param uuid: UUID of the Submission object. + :param source_uuid: UUID of the source. + :returns: Updated submission object from the server. + """ + s = Submission(uuid=uuid) + s.source_uuid = source_uuid + s.source_url = "/api/v1/sources/{}".format(source_uuid) + return self.get_submission(s) + + def get_all_submissions(self) -> List[Submission]: + """ + Returns a list of Submission objects from the server. + + :returns: List of Submission objects. + """ + path_query = "api/v1/submissions" + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] # type: List[Submission] + values = data["submissions"] + + for val in values: + s = Submission(**val) + result.append(s) + + return result + + def delete_submission(self, submission: Submission) -> bool: + """ + Deletes a given Submission object from the server. + + :param submission: The Submission object we want to delete in the server. + :returns: True if successful, raises Error otherwise. + """ + # Not using direct URL because this helps to use the same method + # from local submission (not fetched from server) objects. + # See the *from_string for an example. + source_uuid = submission.source_url.split("/")[-1] + path_query = "api/v1/sources/{}/submissions/{}".format( + source_uuid, submission.uuid + ) + method = "DELETE" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Submission deleted": + return True + # We should never reach here + return False + + def delete_submission_from_string(self, uuid: str, source_uuid: str) -> bool: + """ + Deletes a given Submission based on uuids from the server. + + :param uuid: UUID of the Submission object. + :param source_uuid: UUID of the source. + :returns: Updated submission object from the server. + """ + s = Submission(uuid=uuid) + s.source_url = "/api/v1/sources/{}".format(source_uuid) + return self.delete_submission(s) + + def flag_source(self, source: Source) -> bool: + """ + Flags a source for reply. + + :param source: Source object we want to flag. + :returns: True if successful, raises Error otherwise. + """ + path_query = "api/v1/sources/{}/flag".format(source.uuid) + method = "POST" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return True + + def get_current_user(self): + """ + Returns a dictionary of the current user data. + + Example: + + { + 'is_admin': True, + 'last_login': '2018-08-01T19:10:38.199429Z', + 'username': 'journalist' + } + """ + path_query = "api/v1/user" + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + return data + + def reply_source(self, source: Source, msg: str) -> bool: + """ + This method is used to reply to a given source. The message should be preencrypted with the source's + GPG public key. + + :param source: Source object we want to reply. + :param msg: Encrypted message with Source's GPG public key. + """ + path_query = "api/v1/sources/{}/replies".format(source.uuid) + method = "POST" + + reply = {"reply": msg} + body = json.dumps(reply) + + data = { + "method": method, + "path_query": path_query, + "headers": self.auth_header, + "body": body, + } + + print(json.dumps(data)) + + try: + res = json.loads(json_query(json.dumps(data))) + data = json.loads(res["body"]) + + if res["status"] == 400: + raise ReplyError(data["message"]) + + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Your reply has been stored": + return True + # We should never reach here + return False + + def get_replies_from_source(self, source: Source) -> List[Reply]: + """ + This will return a list of replies associated with a source. + + :param source: Source object containing only source's uuid value. + :returns: List of Reply objects. + """ + path_query = "api/v1/sources/{}/replies".format(source.uuid) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] + for datum in data["replies"]: + reply = Reply(**datum) + result.append(reply) + + return result + + def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: + """ + This will return a single specific reply. + + :param source: Source object. + :param reply_uuid: UUID of the reply. + :returns: A reply object + """ + path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + reply = Reply(**data) + + return reply + + def get_all_replies(self) -> List[Reply]: + """ + This will return a list of all replies from the server. + + :returns: List of Reply objects. + """ + path_query = "api/v1/replies" + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + result = [] + for datum in data["replies"]: + reply = Reply(**datum) + result.append(reply) + + return result + + def delete_reply(self, reply: Reply) -> bool: + """ + Deletes a given Reply object from the server. + + :param reply: The Reply object we want to delete in the server. + :returns: True if successful, raises Error otherwise. + """ + # Not using direct URL because this helps to use the same method + # from local reply (not fetched from server) objects. + # See the *from_string for an example. + source_uuid = reply.source_url.split("/")[-1] + path_query = "api/v1/sources/{}/replies/{}".format(source_uuid, reply.uuid) + method = "DELETE" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing reply {}".format(reply.uuid)) + + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Reply deleted": + return True + # We should never reach here + return False From ed5e468530c03f0d563c65253f8eb223bced059f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 03:08:03 -0400 Subject: [PATCH 081/751] Fixes the typo in proxyapi filename --- sdclientapi/__init__.py | 4 ++-- sdclientapi/{proxiapi.py => proxyapi.py} | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) rename sdclientapi/{proxiapi.py => proxyapi.py} (99%) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index e52e5e4c5..cdb87ec93 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -6,7 +6,7 @@ from typing import Optional, Dict, List, Tuple from .sdlocalobjects import * -from .proxiapi import APIProxy, json_query +from .proxyapi import APIProxy, json_query class API: @@ -32,7 +32,7 @@ def __init__(self, address, username, passphrase, totp) -> None: self.token = {"token": "", "expiration": ""} self.auth_header = {"Authorization": ""} # type: Dict - def authenticate(self, totp = "") -> bool: + def authenticate(self, totp="") -> bool: """ Authenticate the user and fetches the token from the server. diff --git a/sdclientapi/proxiapi.py b/sdclientapi/proxyapi.py similarity index 99% rename from sdclientapi/proxiapi.py rename to sdclientapi/proxyapi.py index 6f949570f..37c4c7f26 100644 --- a/sdclientapi/proxiapi.py +++ b/sdclientapi/proxyapi.py @@ -476,8 +476,6 @@ def reply_source(self, source: Source, msg: str) -> bool: "body": body, } - print(json.dumps(data)) - try: res = json.loads(json_query(json.dumps(data))) data = json.loads(res["body"]) From e3a7bbd96f1a28f788ea41546970aa5ef054bdb4 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 06:14:02 -0400 Subject: [PATCH 082/751] Adds a new decorator for testing qrexec service We now have a decorator dastollervey_datasaver which can help to mock out qrexec calls to securedrop-proxy service. This saves the mock input/output into data/ directory. --- tests/utils.py | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 tests/utils.py diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 000000000..e2097781a --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,91 @@ +import os +import json +from pprint import pprint +from sdclientapi import json_query +from unittest.mock import MagicMock, patch + +from typing import Optional, Dict, List, Tuple + +# We are making calls to securedrop.Proxy qrexec service +# in the QubesOS to get the data from the server. This is difficult to test +# unless we have an easy way to store/cache each function call and returned +# result. In this file we have a new decorator called `dastollervey_datasaver`. +# This decorator checks for each json_query call and related arguments sent +# to the function, and then stores the result in a json file if required. +# From the next time, for the same signature, it will serve the result from the +# stored cache and will enable us to write unittests which can run without a +# real server. +# The result files will be stored in data/function_name.json files. + +RES = {} +CALLNUMBER = 0 + + +alternative = json_query + + +def internal_sideeffect(*args, **kwargs): + global CALLNUMBER + global RES + CALLNUMBER += 1 + arguments = tuple(args) + # Now remove the one time code + # As it will be a different value every time. + python_args = json.loads(args[0]) + + try: + value_str = python_args["body"] + value = json.loads(value_str) + del value["one_time_code"] + python_args["body"] = json.dumps(value) + newargs = json.dumps(python_args) + arguments = (newargs,) + except: + pass # Means no body in the call + + # Now remove the authorization token from the key + # Because in differnet runs, the token would be different + # that is why we have to remove that. + try: + value = python_args["headers"] + del value["Authorization"] + python_args["headers"] = json.dumps(value) + newargs = json.dumps(python_args) + arguments = (newargs,) + except Exception as err: + pass # Means no Authorization token in the call + + key = str((arguments, CALLNUMBER)) + answer = RES.get(key, None) + if not answer: + # Means it is not in cache. + # So, execute the real function and store in cache + answer = alternative(*args) + RES[key] = answer + return answer + + +def dastollervey_datasaver(func): + "This is the decorator to save qrexec call data" + + def wrapper(*args, **kwargs): + global CALLNUMBER + global RES + # This is the filename to store the results + filename = os.path.join("data", func.__name__ + ".json") + + if os.path.exists(filename): + with open(filename) as fobj: + RES = json.load(fobj) + mock = MagicMock() + mock.side_effect = internal_sideeffect + with patch("sdclientapi.proxyapi.json_query", mock): + result = func(*args, **kwargs) + + if not os.path.exists(filename): + with open(filename, "w") as fobj: + json.dump(RES, fobj) + CALLNUMBER = 0 + return result + + return wrapper From 86a19e800b767340727c1acb067dc6fb89830ae5 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 06:16:49 -0400 Subject: [PATCH 083/751] Adds tests for the APIProxy class Uses dastollervey_datasaver decorator to save the mock data. --- data/setUp.json | 1 + data/test_delete_reply.json | 1 + data/test_delete_source.json | 1 + data/test_delete_source_from_string.json | 1 + data/test_delete_submission.json | 1 + data/test_delete_submission_from_string.json | 1 + data/test_error_unencrypted_reply.json | 1 + data/test_failed_single_source.json | 1 + data/test_flag_source.json | 1 + data/test_get_all_replies.json | 1 + data/test_get_all_submissions.json | 1 + data/test_get_current_user.json | 1 + data/test_get_replies_from_source.json | 1 + data/test_get_reply_from_source.json | 1 + data/test_get_single_source.json | 1 + data/test_get_single_source_from_string.json | 1 + data/test_get_sources.json | 1 + data/test_get_submission.json | 1 + data/test_get_submission_from_string.json | 1 + data/test_get_submissions.json | 1 + data/test_get_wrong_submissions.json | 1 + data/test_reply_source.json | 1 + data/test_star_add_remove.json | 1 + tests/test_apiproxy.py | 233 +++++++++++++++++++ 24 files changed, 256 insertions(+) create mode 100644 data/setUp.json create mode 100644 data/test_delete_reply.json create mode 100644 data/test_delete_source.json create mode 100644 data/test_delete_source_from_string.json create mode 100644 data/test_delete_submission.json create mode 100644 data/test_delete_submission_from_string.json create mode 100644 data/test_error_unencrypted_reply.json create mode 100644 data/test_failed_single_source.json create mode 100644 data/test_flag_source.json create mode 100644 data/test_get_all_replies.json create mode 100644 data/test_get_all_submissions.json create mode 100644 data/test_get_current_user.json create mode 100644 data/test_get_replies_from_source.json create mode 100644 data/test_get_reply_from_source.json create mode 100644 data/test_get_single_source.json create mode 100644 data/test_get_single_source_from_string.json create mode 100644 data/test_get_sources.json create mode 100644 data/test_get_submission.json create mode 100644 data/test_get_submission_from_string.json create mode 100644 data/test_get_submissions.json create mode 100644 data/test_get_wrong_submissions.json create mode 100644 data/test_reply_source.json create mode 100644 data/test_star_add_remove.json create mode 100644 tests/test_apiproxy.py diff --git a/data/setUp.json b/data/setUp.json new file mode 100644 index 000000000..fad9854c0 --- /dev/null +++ b/data/setUp.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json new file mode 100644 index 000000000..db1b2bc9a --- /dev/null +++ b/data/test_delete_reply.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"headers\": {\"Content-Length\": \"1971\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1Njo0MSBHTVQifX0.DqCv2Q.Aa1MGzdgfUWB63aKSZfohanri1g; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:56:41 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/568e17fd-5492-4f99-af5d-9da8095892b0\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"568e17fd-5492-4f99-af5d-9da8095892b0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"headers\": {\"Content-Length\": \"33\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:56:41 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1Njo0MSBHTVQifX0.DqCv2Q.Aa1MGzdgfUWB63aKSZfohanri1g; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"status\": 200}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:56:42 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1Njo0MiBHTVQifX0.DqCv2g.KNj2na3j6Y07VFG2W4oPyW3aCTw; HttpOnly; Path=/\", \"Content-Length\": \"1480\"}, \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/568e17fd-5492-4f99-af5d-9da8095892b0\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"568e17fd-5492-4f99-af5d-9da8095892b0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json new file mode 100644 index 000000000..00b1dac4e --- /dev/null +++ b/data/test_delete_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMSBHTVQifX0.DqCspQ.77BI6fHXE1savwdYvI-jOFdq_6Q; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:43:01 GMT\", \"Content-Length\": \"5236\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Content-Length\": \"2630\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json new file mode 100644 index 000000000..00b1dac4e --- /dev/null +++ b/data/test_delete_source_from_string.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMSBHTVQifX0.DqCspQ.77BI6fHXE1savwdYvI-jOFdq_6Q; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:43:01 GMT\", \"Content-Length\": \"5236\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Content-Length\": \"2630\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json new file mode 100644 index 000000000..94a5c80c7 --- /dev/null +++ b/data/test_delete_submission.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0NToyOCBHTVQifX0.DqCtOA.jU6MzsluD8-xcnKAUdaA6ru4cj0; HttpOnly; Path=/\", \"Content-Length\": \"2049\", \"Date\": \"Thu, 11 Oct 2018 09:45:28 GMT\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/1706cab3-32ee-4242-ae83-7ece90405581/download\\\", \\n \\\"filename\\\": \\\"1-palatial_stranger-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/1706cab3-32ee-4242-ae83-7ece90405581\\\", \\n \\\"uuid\\\": \\\"1706cab3-32ee-4242-ae83-7ece90405581\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc/download\\\", \\n \\\"filename\\\": \\\"2-palatial_stranger-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc\\\", \\n \\\"uuid\\\": \\\"e1d4d0b2-55cf-471c-9917-a41b164947bc\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d/download\\\", \\n \\\"filename\\\": \\\"1-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d\\\", \\n \\\"uuid\\\": \\\"356ae820-9776-44f7-9521-ea53b0a6772d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9/download\\\", \\n \\\"filename\\\": \\\"2-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\", \\n \\\"uuid\\\": \\\"1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/1706cab3-32ee-4242-ae83-7ece90405581\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:45:29 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"38\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0NToyOCBHTVQifX0.DqCtOQ.wx3hv-MocAmCs3Ihf3UQ1oCuwZc; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0NToyOSBHTVQifX0.DqCtOQ.kxllaJiRAVSG3Vxjkpqn8aJopWA; HttpOnly; Path=/\", \"Content-Length\": \"1543\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:45:29 GMT\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc/download\\\", \\n \\\"filename\\\": \\\"2-palatial_stranger-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc\\\", \\n \\\"uuid\\\": \\\"e1d4d0b2-55cf-471c-9917-a41b164947bc\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d/download\\\", \\n \\\"filename\\\": \\\"1-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d\\\", \\n \\\"uuid\\\": \\\"356ae820-9776-44f7-9521-ea53b0a6772d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9/download\\\", \\n \\\"filename\\\": \\\"2-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\", \\n \\\"uuid\\\": \\\"1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json new file mode 100644 index 000000000..de1930ffc --- /dev/null +++ b/data/test_delete_submission_from_string.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5242\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0NiBHTVQifX0.DqCthg.wiR7MaGytFIPGy3HKCIiPrIrTfk; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:46:46 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"contented grouping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/G9UBEACtS3ofKMNSL+HYmcbAcy8pwg8Ka2nLhBYcUO0K17OmFYb9IKCf\\\\nGrXOyz5NX/qCtKh7dekIdichdoLIDa9SC1Lu04mCo2ZPE6Up9WwQDgdyWdWtPgF6\\\\n3A+4I90U1NJnMiasskm9gu8XqVeMaeo92W61x8i1d5J+VlxP3d3sdhUw3uLGaKC4\\\\naLrGTXUZRyWnrvX0pL7s8R2ejeYDyAPJp0DFhrqTWsn0jRvj42ifPvCzrL+yfy7e\\\\n6z1HoHV3VXr/rJ+RDCDVwVJAMuXAnWfu4srje6tIJUttwSgm84ddwN6GZO1RXn9H\\\\nNKZM7yCgX9Y5nHbNNLmKSOZKfHSHnb7q/Etg0+WD1MzGlwcYDkZfi5jqNUMxfmFt\\\\nkEuduqKXNomTci2MLVrbWlLLlryqUj8zoTKORWW18hvLaySdON5Xf0dCOvrejIIK\\\\nJ6Cav6qauXSubWiZhASUq2bUJdSLMXwa+X9vkPVvnhKwdpZYk43DAtRTmVIUaRed\\\\nNsWy2FVZAsF0lUrJ0EqNL3DS4Ox7f/17syNdJ1Y83sYIuyFbPijzxO2VAISKOmyx\\\\nnNxgEOgwZSzkZTw8nwcNzKseGdRoR5GS+nhn4PZSHj9MgZkCfyLu1thxEoukOvqJ\\\\nVf8npx5rpuBaLOY8lIVwFxZjOr/OxqISUFIJGJnl/TaER9c9RTrpr8FbgwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RkdGSU5RSVM1VUhPWDZFVzdJNk5RQVVVSFpQ\\\\nNDVLVFBENE9TRUtEM0JCTEhPNlg1Nk40VklLNEFHWFFCQUdUT0pRTFpONzNGVVNH\\\\nTE1OTFRLTjVaNVNJUVVBSzM1TjdEMktMU01BWT0+iQI/BBMBCgApBQJbvxvVAhsv\\\\nBQkB4VLrBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ0/dp+tRynLr5RA/+\\\\nIrkxvRReI8xM/MKRoAHg9x/3CV0bBLFkPLdtLjc+5S640h547sSxMjhu1wfi3X5/\\\\nJmqzN53VKzgNhQQfNt+RIALdupVv/LW477/m3n7JFgZ3s5OAhDvkF6uOwVNyoP9O\\\\nc8vzBrSffR/zVzOInHoKulq7u3OTUUKjE3IrYzXGgO+3up2Y59oOhF90lhvnY6N+\\\\nsk0bscps78dkO/wsD4Azo3T4YZl6P2pmZyxK8c8VnU9QSqOqb7KifBfU+uuFhK9+\\\\nx0kkxaKFLHhixFt74fYUQukNogG94ZqX42wmOKZf+ToN2BrZHJazLs5u4f3m6b1L\\\\nWYT58ZFMnaoi+g9zeLuhOUMLtpz2qxFmywwgVY9JQe661lsHHxyLrepAxkxiKc/a\\\\n5LjJnfI7LTuaNmseFYNJ309k0tw74/VzhliGtS6oUfYsDRpEhZgtHuNQnb8cE162\\\\njrdzOr3twykFJBqCbt+JrHdrrmqRtTuqJYsjDI7VJ9p5K0LiBqF3vtJt2dEGfCWy\\\\neqAdeAf1wzYB84X7KNWL0lx/jfkmpu6zpzGPZuep8jhciqLAKWP5paQ3tSbgkOy2\\\\nNLx8R9WF94jlWRV34oGzoypmuUatM6TQ4lDmS9EJMmMAoTX7thXvOccM6fGzzpKM\\\\nr43Q0/QlNWGaxbMOGZGEv5KjkbW0j96tk1BdG1mUlfc=\\\\n=f2cz\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:45:58.929266Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"uuid\\\": \\\"19878649-3bab-48a5-bbd1-ab0056b30a5f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"gynecological barring\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/G9gBEADiHoYNc7lFejOarQgSdXlwuxazH4Msj1dlIDdYh9okm6fok1o2\\\\n12mCVgckXChus5qRZv5gX57clyJBOTNsYWGds+/wvIKJpRuf0bKwf38/faKvqlON\\\\nU5W/J1KizoyDHUY3PkSCrFpSFawwBsSbeUQ298BabWdUDT91lAAVF3SD3BXsEp7P\\\\n0ayI6yLd//d+Q8YAPaskwzqMUZZ1yk+PtYYs502gjE4FFizLKF7mofqAwwTYCI8N\\\\n2cU80hepO7pgGxdyQ4yLMr6pmqSu3+dOyEVx+6RhPEky5vSgJNXrcJzw89W0UrrD\\\\ntW4ODCLG/X/QZgj4T2EbFxOxM9BCEQyIPzZBeXbIYszNSQgtBqhQbNuo8MAsCsEG\\\\nMIFGs2DXwikccACYyiNF7zTxfEgeajwRvHTuTB1RtAH4uKeOg0zE6a35r4zLbXUG\\\\n63VhCcrG7JDGgNybe6QYb/ZH4tHgGqa2ylbv4+wxdIA3/nJyOC64i+L3ssffSere\\\\n1KrWEKcId7iYh2O2kj97cpE/S1OykDnX9t9aFL/pP4tM7G7RJTh4/XeStiS4T8lH\\\\n+qBmATYwC20r4GJx2t2pFG/9ZdQmwR2H3kzmfyLuXjrF9YmIbuqDJGdGMYuvTQPW\\\\nKgEXSYmRhKQzDSwhzqa9Vp1Nvbn+OkuvUBjARglbt92ouehAD2lPnBoSnQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NUsyVVQySlFZUE5ETkVXSlM1T0ZPMzU0VURW\\\\nS0ZRSTZVRlVDR1FOQ1dFV1pITUVaTkpWNEVMVUw3V1lZQjQ0VlBXT0RWS0ZKSjRQ\\\\nQUZKMzNQSTJHNEFLTlBPRkVKNUwyWEdDWEwyWT0+iQI/BBMBCgApBQJbvxvYAhsv\\\\nBQkB4VLoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQNg7K56qVy6zyqRAA\\\\nsqUW2VJZGSzMzWu1SgAzj6E5jc/fUQ4VH0P8vWExuQlWYdGuU7Yg85do9NgJqyz+\\\\n4qpGvI6+gI98MnxLkKaESFLQ5C09L4/LqoC1h9KCgEaifZ5ngVp+1DmgRrCHIDpg\\\\neNnONWmOgZueRCwjFIyUmr9NeLP8XjJIKfCiiAevT9Q1qB6kdfccrC+gwImesQGu\\\\nX+7nwDw0Q1igB8CYEjwoDicLUo3F/gvz3pBKIDvAxGnPWL812o8GmnSZHss1dSQJ\\\\nCUphYp+gBFLB9Pxqpw7dQ5EP2Oj9ueU8FddAUsVgPlHPlJs+Xqsz/QC1Xn3O81gv\\\\nHWEggJFq7CFJjKN+WHk6oWZAJt5VZCEdzTzODJIITjz6rvohiYRPIj+x1Cs70vM0\\\\nLIamxoYvRVVerbqQhyoJ2aXOJpLrWcoSBHsIVytjRufcEerj16HuOLBTImGCRJgV\\\\nk4xpkYu+RLNCeX1m4jvykX0Z360F8RoxLiIw4WA+JoR/vhdFy0DKI398JeP0qgzk\\\\nY0s6Hsnx6MI6YTsasgV1uAFGewTr550XGvtI+O8M92XBpXSIVUtDsOH23lpMGGjU\\\\nvUwkJOk6ctxmKuSYZUNkRP5LAozj6OCxZ3El3QkMQVRU343zirgv14YOc0wId90t\\\\nQ3x/1/ylG/r21alL8v1vMuLBFxYzLuqLQEDLjvIlJ1c=\\\\n=I6Uj\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:46:03.178691Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479\\\", \\n \\\"uuid\\\": \\\"efad4260-cad7-4588-9972-693f684f6479\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:46:46 GMT\", \"Content-Length\": \"1039\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0NiBHTVQifX0.DqCthg.wiR7MaGytFIPGy3HKCIiPrIrTfk; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/2f71409f-80c9-408e-ad7b-ff1bd652f24e/download\\\", \\n \\\"filename\\\": \\\"1-contented_grouping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/2f71409f-80c9-408e-ad7b-ff1bd652f24e\\\", \\n \\\"uuid\\\": \\\"2f71409f-80c9-408e-ad7b-ff1bd652f24e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687/download\\\", \\n \\\"filename\\\": \\\"2-contented_grouping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687\\\", \\n \\\"uuid\\\": \\\"fd34fab8-aece-4e7b-af32-360a4dde3687\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/2f71409f-80c9-408e-ad7b-ff1bd652f24e\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:46:47 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0NyBHTVQifX0.DqCthw.iVUctwvUnnE8eh5Sh_Adt4YObIM; HttpOnly; Path=/\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 4)": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687/download\\\", \\n \\\"filename\\\": \\\"2-contented_grouping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687\\\", \\n \\\"uuid\\\": \\\"fd34fab8-aece-4e7b-af32-360a4dde3687\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f710db08-2c6c-4b64-a59d-5a32b176e4e4/download\\\", \\n \\\"filename\\\": \\\"1-gynecological_barring-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f710db08-2c6c-4b64-a59d-5a32b176e4e4\\\", \\n \\\"uuid\\\": \\\"f710db08-2c6c-4b64-a59d-5a32b176e4e4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f0e0c25d-4860-4496-b786-c9968ae0da5f/download\\\", \\n \\\"filename\\\": \\\"2-gynecological_barring-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f0e0c25d-4860-4496-b786-c9968ae0da5f\\\", \\n \\\"uuid\\\": \\\"f0e0c25d-4860-4496-b786-c9968ae0da5f\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0OCBHTVQifX0.DqCtiA.cN22aEq6BsU9fc2HU-9bRjHJfsU; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:46:48 GMT\", \"Content-Length\": \"1552\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json new file mode 100644 index 000000000..87cf7c34d --- /dev/null +++ b/data/test_error_unencrypted_reply.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"pyrrhic bullfinch\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCUBEAC91OgTBsFOm+JJGl7i+jS/oR6ARJM88227D0YjqHJgoCTriTbt\\\\nrVcqgYK1w0zS2p60UIAiuPBKHkRS1Qs362AYvi8XJQwt6bmaz7Rg09j5ctugmN+L\\\\n/4lDHtVgs08Nw0BkOvj/ZGAaSHS72DI8XoPNoZ8GNSRYO/JWZD1lz3QxT5vstNbU\\\\nj6514BWs/tfW9jItGBbycUSTaPeAuez20ipqn9VoaTMWDcl1rwHiKGbI4QDU3rqu\\\\n4sWB5fGgwJmfZWa3TVaTLyluhaMac9TaXgVrGEAKLbDaNrxxQ8ChFmAlwHMrWCn0\\\\ne8yi/JnIYAXwzFA7fbFQf8lNIWQdNmLf+FCsInn6g7qafXIU/VeWCosy06XrZBaV\\\\n5nzNLrb0pcrRJVfUDAKmdwkJB6J/trNdt1N8udgfGcP9REquB5io+pnR7tK0/DTI\\\\nS8R+XN87n1w3eQVPhrvK6qK3i/NznA0nArfj72tnCiWrt9/F9z/Ioc9zdxjEzz5j\\\\niWLPeUBriITWTteVgSsBl+BLud5xYloIt/G+eLrr8SrtGhbLioTz2RMzpFtCw467\\\\nIMIlcsL+zgQGXIOsAy1vHpJ1z3qPQmOObY08GaPVXa3y4Pd63vOs+V8a1aWIDJ7G\\\\n69E7qW8C5Oee0wf60/ZWQsLe9e6iZZ2HY/MOO/+xhRKtGk9bslacbW/eaQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFg1V0ZQRVFRWk5IMlBSMkVWRkRWUlBBNVBW\\\\nMlFOSUlJS0lVN1dLVUhJN1FaNFNIVDJLUUpUQzVSN1kyR1FWSVY3NVVRUEdGNTVa\\\\nSUZDQ1hVRFcyTlpJS1RCV1BPSzdXRUMzWEVYWT0+iQI/BBMBCgApBQJbvxwlAhsv\\\\nBQkB4VKbBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM8iEngabb2F9tw//\\\\nY+sO2m8VgurxgxR5QGHVX1O9/pctQGaixw5JNfIXc3pB+5RRzshafdgZYG4Ti/9b\\\\nELLWqj5MHvVVwXiWsIDkjTz7braNijhvlE+RHp8sUaFgr8Ey7pO2VoW5da9mjL6a\\\\nMU9BqK5QaJEklcSuV2phTJZaczE1qA6t7tEbj+91g8HFU80/70hrMXDKjT4YkjEH\\\\nZ627aVJCf5b8/sEDqJS6yrBVl9U8voqtk0/XrCEx+1oD+RsJfTa/ELA+NiUk1kMx\\\\nMss6ypf7j9JfqYs1jqrIA+NKVNiAUy9J8yFZ5VEGHPwxLLJX3lnooxjuxg52oI9V\\\\nn2rEzf3GNXA7+xGqvMCeetHUFONUWE56OCgySULi3ptmQlraQI66DWMn/QBMYrFF\\\\nGE7CA3Vki4JnvX5GwbbKhpOqef/xJsInHWdfZZFT21P45vF2s4fvAkAwjVekur14\\\\nKIbe7kbWYuQBG2hhC6TWd9M6Gwta0uQWTz6UBB+gz7RoRqsDKNU1dlHmbQLjClr6\\\\niTC+NNPrKqzsE62+LUv5srmTuMCRTSPwWhqCKH7Av9FjqUPiWo9Yu8e/oJZcRl72\\\\nG863e0wI2vaPUjxbd2jCGs+WxHACWu/2/CcF+4ZqUVrzdxockIRJQEz4a0L8EGuc\\\\nLqzFDGlTiJCPb6umd5aoRyU3eSKAb1fhhZyUt/DRTS0=\\\\n=l0jn\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:19.113278Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\", \\n \\\"uuid\\\": \\\"7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"holier-than-thou naturalness\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCkBEAC2NvMI+VEwhOK4eu9kbAya+1yhZ08v5+DUi+C6vyj5CsBuFpeV\\\\nH3yDGmFjv9I7mY+1InJYS91BnjWKT65XbYqP/NKHQ9Jljbx/wPxSJcWsw45qugez\\\\nAuDUFlANGJsGVTnMJBquJQnoO5Pl/RmMYMKO2RTN1nymhoNismXjZz/wHSvpy571\\\\np06YJsXA6Uq/xn2G82/OskoM1tcJRMwL53nq9rLUqTdhF4pWQp7Nh4p3/2apZbQW\\\\nRUS5/4JLjaIReTFt4C20q7wnqRtLGVco9CsSNiOjcDhpfeL9rl2nf+SzKSEyJQzC\\\\naEXCtGvMtYtGR89A2fzUNaHhfuKHaWX4jeo62pLkIbhBBB40dZcZ6NWkTlBo37yC\\\\n6gJfFTX6O6P4bMfItyVHSa34c3NKac6WqeTlNteZlGopLyBIiJtpgc1C7Kf2KBH9\\\\nEESCfpkrQqtpVmW63n2cvXnm2WAZJ8oJV2jZk9XPfz0mpGgPM580ScAgVl314yK6\\\\nqmcjtab0wFIqnU4c51qWHzdBiVZcLKVn/rtI7wPqdKvOb1OnXYPtvUSJgHpoR6Sc\\\\nLMuiroY4XS9kpLAoROvK1ciyzBd+J8djYgwjyAsQ6og+/x483PDFkl6zOk1+84xP\\\\nIfLZtzgIZYDsH7VnPV+mWt+mGeBkDP9Ezqqswhbpdeb4ctqz8zuBvnb0tQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RkhHVzM3Slo2NFk0NkRIVlNJRFNQNk43N1ZO\\\\nNUY3NElCUk9FNkVGQzZWUVpSNEJHR0JFWUpCRzdMM0FMVjRCRkhENVhSQVJZMklC\\\\nNDZDQU9CRkFPWFZNQlhYNUZBQzVLUEc3NlNOUT0+iQI/BBMBCgApBQJbvxwpAhsv\\\\nBQkB4VKXBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQB4I9PSjpdUJPiBAA\\\\ngDzkml+OCgaWfbIJGCCkhqMMqq30FlfBx0lU93/G5GBQQicmV5WBS9wfAU+TuKVY\\\\n79y1jB067nfwaN7ya60UrjU+zHSVVWvpLvMNKMBV/ZdGgpJ3VNwW5S78yKyPSMhR\\\\nN9gnPOFjpv+FxZg8yHRDH/C4xk4QkwF24yKGZMlhJ5ejXIrfhEnktxW6RbXLy+qR\\\\nYalZnDIC4NWKwzqUj+oafZibdaYhDgXg2l22E7Q+oKYa6JhadIrgcSKya+2diI+S\\\\nojK6P+bYzZ2S9YpuKiLwr8e2Zd4+QJPlcMlAHtv74OXrSBYd3YxfR22g386udvB5\\\\nfhOJZ2KMvM4eY62aVZP10r8qq3+TcNMhbvds3+onP9m3AZjpHu3qfjIxsU5z1StH\\\\nZsqTlo4GsCqVJ1sI5lwVd21Be4zU/o1clcfslSUA2z3qhAuJTua+VGSTzIlQXWNl\\\\na4gD4G1N9vxVq9+R5iBhmR1R/HWQQHzcIfGXGfwZZnJ7mCKiyolK5BzjeuXwJAcB\\\\nJd0i292n4X18Qt3QRZpoPNv98zlXmDpOvx0tx7YVtBMnk1PMGCvO9FBMTCSuBAHq\\\\nZcrFZ/WYMC1zuIqMSb8HG/A8uSPZROsXLmg4NFTZVKBdD+qM2KzVKkP0M0CBwm2N\\\\nQ6Rprit71tO9Q3tgA3SAI8+p7TUrlr8Q+d6l2EvZepU=\\\\n=F9qf\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:26.387946Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8\\\", \\n \\\"uuid\\\": \\\"425d1364-e30d-405d-8767-81274ab8e7b8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"5248\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0OTowMSBHTVQifX0.DqCuDQ.XSsO2pLvYr9ZLTFVX6hes1KlJNo; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:49:01 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\", \"body\": \"{\\\\\"reply\\\\\": \\\\\"hello\\\\\"}\"}',), 2)": "{\"status\": 400, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0OTowMiBHTVQifX0.DqCuDg.0qox_zY8ebFaIVMf7cmZq58AnXw; HttpOnly; Path=/\", \"Content-Length\": \"56\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:49:02 GMT\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json new file mode 100644 index 000000000..544631e58 --- /dev/null +++ b/data/test_failed_single_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMiBHTVQifX0.DqCsfg.GSJj_T6bDKK8eMGxx7EMpvAu0y4; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"166\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\", \"Content-Type\": \"application/json\"}, \"status\": 404}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json new file mode 100644 index 000000000..7542194d6 --- /dev/null +++ b/data/test_flag_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"5237\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMyBHTVQifX0.DqCsfw.66XGdzcWDccaxbrr50iM3307nNc; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:23 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\"}}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/flag\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:42:24 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNCBHTVQifX0.DqCsgA.SVyzZA2RY19kTtoGn5aYIVKywvQ; HttpOnly; Path=/\"}, \"status\": 200}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2528\", \"Date\": \"Thu, 11 Oct 2018 09:42:24 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNCBHTVQifX0.DqCsgA.SVyzZA2RY19kTtoGn5aYIVKywvQ; HttpOnly; Path=/\"}}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json new file mode 100644 index 000000000..cf632b3a1 --- /dev/null +++ b/data/test_get_all_replies.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NTo0MiBHTVQifX0.DqCvng.H3ANc_rMkG7UpTutU3DwmrKh4XI; HttpOnly; Path=/\", \"Content-Length\": \"1971\", \"Date\": \"Thu, 11 Oct 2018 09:55:42 GMT\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/568e17fd-5492-4f99-af5d-9da8095892b0\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"568e17fd-5492-4f99-af5d-9da8095892b0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json new file mode 100644 index 000000000..46d1c7f7d --- /dev/null +++ b/data/test_get_all_submissions.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2049\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNSBHTVQifX0.DqCsgQ.6M0Yht05o8rM_UA6VhLI5iTlCyk; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:25 GMT\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/7445cda3-4bd0-4b73-9c7a-2e1c79c103fc/download\\\", \\n \\\"filename\\\": \\\"1-cephalopod_postage-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/7445cda3-4bd0-4b73-9c7a-2e1c79c103fc\\\", \\n \\\"uuid\\\": \\\"7445cda3-4bd0-4b73-9c7a-2e1c79c103fc\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/59a9fdfe-9c39-49a5-9d67-7e9a0fadef6d/download\\\", \\n \\\"filename\\\": \\\"2-cephalopod_postage-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/59a9fdfe-9c39-49a5-9d67-7e9a0fadef6d\\\", \\n \\\"uuid\\\": \\\"59a9fdfe-9c39-49a5-9d67-7e9a0fadef6d\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json new file mode 100644 index 000000000..fd7326413 --- /dev/null +++ b/data/test_get_current_user.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/user\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T09:48:42.486824Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"645c7b1c-6d91-4950-b489-fd4192270c0f\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"151\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:48:43 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0ODo0MyBHTVQifX0.DqCt-w.CUELq9HqxVXpsj1BdhUiWnecokI; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json new file mode 100644 index 000000000..c528b520e --- /dev/null +++ b/data/test_get_replies_from_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nocturnal differential\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HW4BEACqn0uMSspP8VDVFSxHPAw2pmXcl+G7hqjFx8H8BIIOE+BAWFvB\\\\nLNQaS78mpVhRHNs79cfyUwq0SsRYpjd2WNWGd41JpFqZYZ+S6Y6f4ZCbDCbaMaQ7\\\\neRayWd3lDJP/pyycZ6q7CWbcHYi3A41kTSWhDJD6xJL40sOGUWBMSsfAEKQnOHmw\\\\nF0G0qZOvGcuLyVXx7gAyDnknlFEypFLbEr2Fn7zVPjfqxEfVmYMHnkWTM37nIlVn\\\\nely3nH1GdzQzMU809GajxSsg27StuvyWCkOBitc+cXkNluPjQdGlgPSb4UaOB23C\\\\nptLkcPgeiUv9PT0D//KLYLXmnem7yOBZpuIV5py2f0oWbp9NiPeXoKqtxC15TIuW\\\\n848kT3BwY/yrNhZmGSC+o0rvetPHrykN2s/i7FISD6ajZj4+LxCjilTQknTBvA7s\\\\nminWpiPKpi1bXpLIrXhb2F2039dkM2tIW3TBrQw9enMFopH1cZjDR9/J+c5Q/0k5\\\\nBF04RSrpNCOI5MRawJ3elkA/JFxv/2YRiFimma1hW+kUBjTBBWc7UiUZ/jTAU3+4\\\\nDsKD+GOdknayxJ4/OiQZbyWVLuRZVkO/hgQUc4lQgbNzS3zGVx8aDkLnIvhrvDu2\\\\nBhoeOj4y8upwa4cofvjn0bZJ+tI4N4xKPp4MPHrtqwjGeUQczItZM88yWwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VExRNjJFTTZXQzc3TUhIT0pYNDZaUUhPNUUy\\\\nR1dPR1NMSVlYTzNBQUc3N09GQU9ZQ1RWSVkzTzdPNVgzNjZOV0dYVlRBWlQ1RUJJ\\\\nUDdaRzRUNkhNTlVXT0hYSk9CS1hTVFU0RUZPUT0+iQI/BBMBCgApBQJbvx1uAhsv\\\\nBQkB4VFSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuil5VEEPKEOwaA/+\\\\nOY7+KEuaCeIIVgrGbzvKbPxwIAhpaeac/GQ8C8ypccWM3+bytRMcOjHhc/UuRYet\\\\nTnZro8x+ROWLshGaveIUD39WYfbFM3DLoY8jbuPGfhCrxgMU1D0tOOlAPRXiZ2pt\\\\nDN25yjh9iIA7w5Fjx3YByGf2YBlk0EPn87QJX5RWeOlehVTeOx25+J2Dqoo/oagN\\\\nsp2SDBC8YHUYen1JxAUSe072CWJ+Fpox9tL7JQ+B3n6qI7mgrGmZzxUc4Vrl5mjR\\\\nndTYI0zPTcRTxiQRRw4962QiwRaTP5PT6KshQNlLxjDZnB9sVkdpgX4FUY7udjIz\\\\n/H/5JEaEiqy7/wRY6pIOBWzxxhv/iClnH5BIgBzUvRhthZFd6WyI4tYSuY4vn7XK\\\\nywboxNqBauMB8qoIM6BpRGdiIaRmzfPEyxCyvm1DN03RjmjS5yVEIHB0vlLQgaU4\\\\n4gUvPqtNOJ0bDXv4QRHOGWBqYodRpDiW9NGbTguhkx4gF2zIq/T1VMWlF1IYEVUB\\\\npVkt0Y/lZs0ma4mjYt8u+7AQPl4UrLJ/n2gF0yGR+10JkAIChlfhSKmgTCRukLu9\\\\ngG4r/eMKIK2JQ95bshFcG6tqwVTLijGd/HqyTtpCJrgc6KS024MDaISBFz82ahgs\\\\n0/T9DHB0Xh6Il3pMPP7XqbMbKhcq2t+pXqWccvGYDYY=\\\\n=nw9g\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:48.829169Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"94daa38e-82d6-4efe-97f8-55b9659f03ea\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nineteen pyrite\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HXIBEACtKFiy1Ude/EM7G0tQGVNkRaiN5k2og+3N9I4vHsj/wfmOxMxG\\\\nia0UKGVcVwcObBuvNo6Fwfrrj3ufhGhTHhjObEQP2ISa3XGO3YfsHBBgAu7x0ymh\\\\n49MhmAncrXJ6KOMCgPXNHMi4zms0FN3YfAaj8yVTkOm/F8Qjeh8Dh+TfCnmV09W5\\\\nP6QLCaGKGj7wYLlLefk6yUCpH8C/Lx0TUtalOLWqp3H0MIZwKfPRAZB+y+XLyUKW\\\\ntkk2MW0wVZwxHX92kyqPqNF90E6yH9474lcIfFDadJg15QL63lRT2M0deOxiNF9C\\\\n2EsZE6a37TjNjRMNK50BiUE+lFca+1vHas46kB9EtIABUH/0shclbqBYlu3SXhMN\\\\n6ShhR6LzfTBt5wVzheGiu49xRNV5CYXA1dnZ5pPMdVvkIKbdKHLn+3ZRkH8mEyaG\\\\n8etC7WMJimdgZkOFrP6BiqmdQm2vgQ0x/ChAj6VvhjFvPMztlhyB4OMC7233uL9d\\\\ngOoq8AXFVJYhK86qrV7neGg38565IsMqIdI4nvs8wxX55ikHWCIq/4dfgJMaOhBz\\\\nRbO5RkPN0XbI7+xqfgurb/PugbSCrsD1jjGs0PVfb+nO32KDtY3hwQ3CvT3JNH8N\\\\nxf9thTBS3sQSZ2cu+D4SVNaLbimvXFaJ6OWlBZHzuvQgf2cYG7oeSsIb8QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WkVPUkk2Q09GM1hDWkNZR0FQMkNINk5CWElI\\\\nUFJFN1YyWURIV0pHU1pCWFpRQjMyV0dHSUVHREJDWktDRENGNlRVT0NJSzZTTlky\\\\nMjNLS09HQkhCRFVUN0pHRk5NUkFaNkM0MlFLST0+iQI/BBMBCgApBQJbvx1yAhsv\\\\nBQkB4VFOBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM66KeBITQQSY3w//\\\\nT5QcaLwUIVA5elIYDzgDFLO/ZM7xQ9D4tZ1q2yYDluOmzfMqqt14lXRNIPYMevvg\\\\n+lH58t4SXRTv1LlWstdsRBmKEc9VSPCU7y6FTRD1rZQ6JmfukP6xxsWLAWDkjkXY\\\\nQBFrLQI/s3a2jXwwXk31v3hkb7Vk/SxVAywdVQt/ENyfRGklbHEWwGhPUxQ0E7Pe\\\\nWTS5HTO2P1qat9EqgGzOEttcgVyuJdSU4uAQMozNwb046AxZ62UYvW93sgj0MaaO\\\\n7rcxZVY6tRfEYubAIr5nAfKj1P8mwzT0TTEMx6ezSstsrUZROf3ekXLKjdqh6MDL\\\\nJMRiLmGUKnXmwbCM0g7o7AZUVT+i9EdxYiepmAPfXkG3/CjeXBT6XXNdUGFR0TJH\\\\nMGa7E2VGZPyrdrhPkTRRgW1JDuY9wsmn/QsPZT2OylqLy/WbbRlnvoffRSBubfPF\\\\nOF0TRaj38/WRQIDrTo9YeD/2hO0I2yvmNMM9X1ZkLhE8clTnwGjjUKssRTuWBwg3\\\\nKGh33gPjo1sTkEQq3XTFiiKrrtjflbNFilVzIaFa++Jzq6xunyaVL7ECVszMaPAD\\\\n0TKRfY0IP9jXCZsmnYn4rUO/yWa8+P7tuAtmJv9Gq4k6lEK/iwkgRVtydt5zWIzU\\\\n0bUq6WT17kV2ElFWjEa4cR5U2G43pJKVU3wAxClPJeo=\\\\n=UDs5\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:51.475725Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"06ffd7cd-4415-4642-a37a-58ec723b014e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:53:08 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MzowOCBHTVQifX0.DqCvBA.ORkygLticceZrE9B9S1TWJGhVRg; HttpOnly; Path=/\", \"Content-Length\": \"5240\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:53:09 GMT\", \"Content-Length\": \"1003\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MzowOSBHTVQifX0.DqCvBQ.1q7mFym_1LTlKHUtjoRHMSXDVOw; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json new file mode 100644 index 000000000..c748584d2 --- /dev/null +++ b/data/test_get_reply_from_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:54:43 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5240\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NDo0MyBHTVQifX0.DqCvYw.FJ13CKY_OLxiYpptXi8OyU2ik4s; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nocturnal differential\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HW4BEACqn0uMSspP8VDVFSxHPAw2pmXcl+G7hqjFx8H8BIIOE+BAWFvB\\\\nLNQaS78mpVhRHNs79cfyUwq0SsRYpjd2WNWGd41JpFqZYZ+S6Y6f4ZCbDCbaMaQ7\\\\neRayWd3lDJP/pyycZ6q7CWbcHYi3A41kTSWhDJD6xJL40sOGUWBMSsfAEKQnOHmw\\\\nF0G0qZOvGcuLyVXx7gAyDnknlFEypFLbEr2Fn7zVPjfqxEfVmYMHnkWTM37nIlVn\\\\nely3nH1GdzQzMU809GajxSsg27StuvyWCkOBitc+cXkNluPjQdGlgPSb4UaOB23C\\\\nptLkcPgeiUv9PT0D//KLYLXmnem7yOBZpuIV5py2f0oWbp9NiPeXoKqtxC15TIuW\\\\n848kT3BwY/yrNhZmGSC+o0rvetPHrykN2s/i7FISD6ajZj4+LxCjilTQknTBvA7s\\\\nminWpiPKpi1bXpLIrXhb2F2039dkM2tIW3TBrQw9enMFopH1cZjDR9/J+c5Q/0k5\\\\nBF04RSrpNCOI5MRawJ3elkA/JFxv/2YRiFimma1hW+kUBjTBBWc7UiUZ/jTAU3+4\\\\nDsKD+GOdknayxJ4/OiQZbyWVLuRZVkO/hgQUc4lQgbNzS3zGVx8aDkLnIvhrvDu2\\\\nBhoeOj4y8upwa4cofvjn0bZJ+tI4N4xKPp4MPHrtqwjGeUQczItZM88yWwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VExRNjJFTTZXQzc3TUhIT0pYNDZaUUhPNUUy\\\\nR1dPR1NMSVlYTzNBQUc3N09GQU9ZQ1RWSVkzTzdPNVgzNjZOV0dYVlRBWlQ1RUJJ\\\\nUDdaRzRUNkhNTlVXT0hYSk9CS1hTVFU0RUZPUT0+iQI/BBMBCgApBQJbvx1uAhsv\\\\nBQkB4VFSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuil5VEEPKEOwaA/+\\\\nOY7+KEuaCeIIVgrGbzvKbPxwIAhpaeac/GQ8C8ypccWM3+bytRMcOjHhc/UuRYet\\\\nTnZro8x+ROWLshGaveIUD39WYfbFM3DLoY8jbuPGfhCrxgMU1D0tOOlAPRXiZ2pt\\\\nDN25yjh9iIA7w5Fjx3YByGf2YBlk0EPn87QJX5RWeOlehVTeOx25+J2Dqoo/oagN\\\\nsp2SDBC8YHUYen1JxAUSe072CWJ+Fpox9tL7JQ+B3n6qI7mgrGmZzxUc4Vrl5mjR\\\\nndTYI0zPTcRTxiQRRw4962QiwRaTP5PT6KshQNlLxjDZnB9sVkdpgX4FUY7udjIz\\\\n/H/5JEaEiqy7/wRY6pIOBWzxxhv/iClnH5BIgBzUvRhthZFd6WyI4tYSuY4vn7XK\\\\nywboxNqBauMB8qoIM6BpRGdiIaRmzfPEyxCyvm1DN03RjmjS5yVEIHB0vlLQgaU4\\\\n4gUvPqtNOJ0bDXv4QRHOGWBqYodRpDiW9NGbTguhkx4gF2zIq/T1VMWlF1IYEVUB\\\\npVkt0Y/lZs0ma4mjYt8u+7AQPl4UrLJ/n2gF0yGR+10JkAIChlfhSKmgTCRukLu9\\\\ngG4r/eMKIK2JQ95bshFcG6tqwVTLijGd/HqyTtpCJrgc6KS024MDaISBFz82ahgs\\\\n0/T9DHB0Xh6Il3pMPP7XqbMbKhcq2t+pXqWccvGYDYY=\\\\n=nw9g\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:48.829169Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"94daa38e-82d6-4efe-97f8-55b9659f03ea\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nineteen pyrite\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HXIBEACtKFiy1Ude/EM7G0tQGVNkRaiN5k2og+3N9I4vHsj/wfmOxMxG\\\\nia0UKGVcVwcObBuvNo6Fwfrrj3ufhGhTHhjObEQP2ISa3XGO3YfsHBBgAu7x0ymh\\\\n49MhmAncrXJ6KOMCgPXNHMi4zms0FN3YfAaj8yVTkOm/F8Qjeh8Dh+TfCnmV09W5\\\\nP6QLCaGKGj7wYLlLefk6yUCpH8C/Lx0TUtalOLWqp3H0MIZwKfPRAZB+y+XLyUKW\\\\ntkk2MW0wVZwxHX92kyqPqNF90E6yH9474lcIfFDadJg15QL63lRT2M0deOxiNF9C\\\\n2EsZE6a37TjNjRMNK50BiUE+lFca+1vHas46kB9EtIABUH/0shclbqBYlu3SXhMN\\\\n6ShhR6LzfTBt5wVzheGiu49xRNV5CYXA1dnZ5pPMdVvkIKbdKHLn+3ZRkH8mEyaG\\\\n8etC7WMJimdgZkOFrP6BiqmdQm2vgQ0x/ChAj6VvhjFvPMztlhyB4OMC7233uL9d\\\\ngOoq8AXFVJYhK86qrV7neGg38565IsMqIdI4nvs8wxX55ikHWCIq/4dfgJMaOhBz\\\\nRbO5RkPN0XbI7+xqfgurb/PugbSCrsD1jjGs0PVfb+nO32KDtY3hwQ3CvT3JNH8N\\\\nxf9thTBS3sQSZ2cu+D4SVNaLbimvXFaJ6OWlBZHzuvQgf2cYG7oeSsIb8QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WkVPUkk2Q09GM1hDWkNZR0FQMkNINk5CWElI\\\\nUFJFN1YyWURIV0pHU1pCWFpRQjMyV0dHSUVHREJDWktDRENGNlRVT0NJSzZTTlky\\\\nMjNLS09HQkhCRFVUN0pHRk5NUkFaNkM0MlFLST0+iQI/BBMBCgApBQJbvx1yAhsv\\\\nBQkB4VFOBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM66KeBITQQSY3w//\\\\nT5QcaLwUIVA5elIYDzgDFLO/ZM7xQ9D4tZ1q2yYDluOmzfMqqt14lXRNIPYMevvg\\\\n+lH58t4SXRTv1LlWstdsRBmKEc9VSPCU7y6FTRD1rZQ6JmfukP6xxsWLAWDkjkXY\\\\nQBFrLQI/s3a2jXwwXk31v3hkb7Vk/SxVAywdVQt/ENyfRGklbHEWwGhPUxQ0E7Pe\\\\nWTS5HTO2P1qat9EqgGzOEttcgVyuJdSU4uAQMozNwb046AxZ62UYvW93sgj0MaaO\\\\n7rcxZVY6tRfEYubAIr5nAfKj1P8mwzT0TTEMx6ezSstsrUZROf3ekXLKjdqh6MDL\\\\nJMRiLmGUKnXmwbCM0g7o7AZUVT+i9EdxYiepmAPfXkG3/CjeXBT6XXNdUGFR0TJH\\\\nMGa7E2VGZPyrdrhPkTRRgW1JDuY9wsmn/QsPZT2OylqLy/WbbRlnvoffRSBubfPF\\\\nOF0TRaj38/WRQIDrTo9YeD/2hO0I2yvmNMM9X1ZkLhE8clTnwGjjUKssRTuWBwg3\\\\nKGh33gPjo1sTkEQq3XTFiiKrrtjflbNFilVzIaFa++Jzq6xunyaVL7ECVszMaPAD\\\\n0TKRfY0IP9jXCZsmnYn4rUO/yWa8+P7tuAtmJv9Gq4k6lEK/iwkgRVtydt5zWIzU\\\\n0bUq6WT17kV2ElFWjEa4cR5U2G43pJKVU3wAxClPJeo=\\\\n=UDs5\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:51.475725Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"06ffd7cd-4415-4642-a37a-58ec723b014e\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:54:43 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"1003\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NDo0MyBHTVQifX0.DqCvYw.FJ13CKY_OLxiYpptXi8OyU2ik4s; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:54:44 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"449\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NDo0NCBHTVQifX0.DqCvZA.OeNEt2N5NqkGSujcUrEtvzGEsMs; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json new file mode 100644 index 000000000..8c719558f --- /dev/null +++ b/data/test_get_single_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNiBHTVQifX0.DqCsgg.20FXbqc0ZpuIdjZSVUK7-Rni2gw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:26 GMT\", \"Content-Length\": \"5236\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNiBHTVQifX0.DqCsgg.20FXbqc0ZpuIdjZSVUK7-Rni2gw; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:26 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2528\"}}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json new file mode 100644 index 000000000..d8eda408e --- /dev/null +++ b/data/test_get_single_source_from_string.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:27 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNyBHTVQifX0.DqCsgw.KQO_xqUpwAi1vKqLg0lkm18C-Fw; HttpOnly; Path=/\", \"Content-Length\": \"5236\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2528\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:27 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNyBHTVQifX0.DqCsgw.KQO_xqUpwAi1vKqLg0lkm18C-Fw; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json new file mode 100644 index 000000000..7c3fc74fa --- /dev/null +++ b/data/test_get_sources.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyOCBHTVQifX0.DqCshA.L_5t9P-IO-dOkXMHMKsdaO1mnig; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:28 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"5236\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json new file mode 100644 index 000000000..4dbcfd63f --- /dev/null +++ b/data/test_get_submission.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Length\": \"5236\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:29 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyOSBHTVQifX0.DqCshQ.pVvsrom2nWnxn9TzYBiZe-vLbSs; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyOSBHTVQifX0.DqCshQ.pVvsrom2nWnxn9TzYBiZe-vLbSs; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:29 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"1035\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:42:30 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMCBHTVQifX0.DqCshg.iThLayqhlWsZ6xaJnsdzJMs3Ne4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json new file mode 100644 index 000000000..7a0fd145c --- /dev/null +++ b/data/test_get_submission_from_string.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Content-Length\": \"5236\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:31 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMSBHTVQifX0.DqCshw.cyggrdw8ojv2X9wh308YdP0rxnc; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:31 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMSBHTVQifX0.DqCshw.cyggrdw8ojv2X9wh308YdP0rxnc; HttpOnly; Path=/\", \"Content-Length\": \"1035\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:32 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"467\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMiBHTVQifX0.DqCsiA.9r2is49W5HKWwPk__Gpn49ymXA4; HttpOnly; Path=/\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json new file mode 100644 index 000000000..8f8fbe52b --- /dev/null +++ b/data/test_get_submissions.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMyBHTVQifX0.DqCsiQ.GZRTsp11kDQJu2T90OF8c20aMY4; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"5236\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:42:33 GMT\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:42:33 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMyBHTVQifX0.DqCsiQ.GZRTsp11kDQJu2T90OF8c20aMY4; HttpOnly; Path=/\", \"Content-Length\": \"1035\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json new file mode 100644 index 000000000..d2ca2858b --- /dev/null +++ b/data/test_get_wrong_submissions.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:34 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"5236\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNCBHTVQifX0.DqCsig.d-dD1_UDElqeAQBZ9FmzHEtCVjo; HttpOnly; Path=/\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 404, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNSBHTVQifX0.DqCsiw.DEH6ebEPcsbLK9H5adCZ6XjyK1A; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"166\", \"Date\": \"Thu, 11 Oct 2018 09:42:35 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json new file mode 100644 index 000000000..ff66137db --- /dev/null +++ b/data/test_reply_source.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"pyrrhic bullfinch\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCUBEAC91OgTBsFOm+JJGl7i+jS/oR6ARJM88227D0YjqHJgoCTriTbt\\\\nrVcqgYK1w0zS2p60UIAiuPBKHkRS1Qs362AYvi8XJQwt6bmaz7Rg09j5ctugmN+L\\\\n/4lDHtVgs08Nw0BkOvj/ZGAaSHS72DI8XoPNoZ8GNSRYO/JWZD1lz3QxT5vstNbU\\\\nj6514BWs/tfW9jItGBbycUSTaPeAuez20ipqn9VoaTMWDcl1rwHiKGbI4QDU3rqu\\\\n4sWB5fGgwJmfZWa3TVaTLyluhaMac9TaXgVrGEAKLbDaNrxxQ8ChFmAlwHMrWCn0\\\\ne8yi/JnIYAXwzFA7fbFQf8lNIWQdNmLf+FCsInn6g7qafXIU/VeWCosy06XrZBaV\\\\n5nzNLrb0pcrRJVfUDAKmdwkJB6J/trNdt1N8udgfGcP9REquB5io+pnR7tK0/DTI\\\\nS8R+XN87n1w3eQVPhrvK6qK3i/NznA0nArfj72tnCiWrt9/F9z/Ioc9zdxjEzz5j\\\\niWLPeUBriITWTteVgSsBl+BLud5xYloIt/G+eLrr8SrtGhbLioTz2RMzpFtCw467\\\\nIMIlcsL+zgQGXIOsAy1vHpJ1z3qPQmOObY08GaPVXa3y4Pd63vOs+V8a1aWIDJ7G\\\\n69E7qW8C5Oee0wf60/ZWQsLe9e6iZZ2HY/MOO/+xhRKtGk9bslacbW/eaQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFg1V0ZQRVFRWk5IMlBSMkVWRkRWUlBBNVBW\\\\nMlFOSUlJS0lVN1dLVUhJN1FaNFNIVDJLUUpUQzVSN1kyR1FWSVY3NVVRUEdGNTVa\\\\nSUZDQ1hVRFcyTlpJS1RCV1BPSzdXRUMzWEVYWT0+iQI/BBMBCgApBQJbvxwlAhsv\\\\nBQkB4VKbBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM8iEngabb2F9tw//\\\\nY+sO2m8VgurxgxR5QGHVX1O9/pctQGaixw5JNfIXc3pB+5RRzshafdgZYG4Ti/9b\\\\nELLWqj5MHvVVwXiWsIDkjTz7braNijhvlE+RHp8sUaFgr8Ey7pO2VoW5da9mjL6a\\\\nMU9BqK5QaJEklcSuV2phTJZaczE1qA6t7tEbj+91g8HFU80/70hrMXDKjT4YkjEH\\\\nZ627aVJCf5b8/sEDqJS6yrBVl9U8voqtk0/XrCEx+1oD+RsJfTa/ELA+NiUk1kMx\\\\nMss6ypf7j9JfqYs1jqrIA+NKVNiAUy9J8yFZ5VEGHPwxLLJX3lnooxjuxg52oI9V\\\\nn2rEzf3GNXA7+xGqvMCeetHUFONUWE56OCgySULi3ptmQlraQI66DWMn/QBMYrFF\\\\nGE7CA3Vki4JnvX5GwbbKhpOqef/xJsInHWdfZZFT21P45vF2s4fvAkAwjVekur14\\\\nKIbe7kbWYuQBG2hhC6TWd9M6Gwta0uQWTz6UBB+gz7RoRqsDKNU1dlHmbQLjClr6\\\\niTC+NNPrKqzsE62+LUv5srmTuMCRTSPwWhqCKH7Av9FjqUPiWo9Yu8e/oJZcRl72\\\\nG863e0wI2vaPUjxbd2jCGs+WxHACWu/2/CcF+4ZqUVrzdxockIRJQEz4a0L8EGuc\\\\nLqzFDGlTiJCPb6umd5aoRyU3eSKAb1fhhZyUt/DRTS0=\\\\n=l0jn\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:19.113278Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\", \\n \\\"uuid\\\": \\\"7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"holier-than-thou naturalness\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCkBEAC2NvMI+VEwhOK4eu9kbAya+1yhZ08v5+DUi+C6vyj5CsBuFpeV\\\\nH3yDGmFjv9I7mY+1InJYS91BnjWKT65XbYqP/NKHQ9Jljbx/wPxSJcWsw45qugez\\\\nAuDUFlANGJsGVTnMJBquJQnoO5Pl/RmMYMKO2RTN1nymhoNismXjZz/wHSvpy571\\\\np06YJsXA6Uq/xn2G82/OskoM1tcJRMwL53nq9rLUqTdhF4pWQp7Nh4p3/2apZbQW\\\\nRUS5/4JLjaIReTFt4C20q7wnqRtLGVco9CsSNiOjcDhpfeL9rl2nf+SzKSEyJQzC\\\\naEXCtGvMtYtGR89A2fzUNaHhfuKHaWX4jeo62pLkIbhBBB40dZcZ6NWkTlBo37yC\\\\n6gJfFTX6O6P4bMfItyVHSa34c3NKac6WqeTlNteZlGopLyBIiJtpgc1C7Kf2KBH9\\\\nEESCfpkrQqtpVmW63n2cvXnm2WAZJ8oJV2jZk9XPfz0mpGgPM580ScAgVl314yK6\\\\nqmcjtab0wFIqnU4c51qWHzdBiVZcLKVn/rtI7wPqdKvOb1OnXYPtvUSJgHpoR6Sc\\\\nLMuiroY4XS9kpLAoROvK1ciyzBd+J8djYgwjyAsQ6og+/x483PDFkl6zOk1+84xP\\\\nIfLZtzgIZYDsH7VnPV+mWt+mGeBkDP9Ezqqswhbpdeb4ctqz8zuBvnb0tQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RkhHVzM3Slo2NFk0NkRIVlNJRFNQNk43N1ZO\\\\nNUY3NElCUk9FNkVGQzZWUVpSNEJHR0JFWUpCRzdMM0FMVjRCRkhENVhSQVJZMklC\\\\nNDZDQU9CRkFPWFZNQlhYNUZBQzVLUEc3NlNOUT0+iQI/BBMBCgApBQJbvxwpAhsv\\\\nBQkB4VKXBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQB4I9PSjpdUJPiBAA\\\\ngDzkml+OCgaWfbIJGCCkhqMMqq30FlfBx0lU93/G5GBQQicmV5WBS9wfAU+TuKVY\\\\n79y1jB067nfwaN7ya60UrjU+zHSVVWvpLvMNKMBV/ZdGgpJ3VNwW5S78yKyPSMhR\\\\nN9gnPOFjpv+FxZg8yHRDH/C4xk4QkwF24yKGZMlhJ5ejXIrfhEnktxW6RbXLy+qR\\\\nYalZnDIC4NWKwzqUj+oafZibdaYhDgXg2l22E7Q+oKYa6JhadIrgcSKya+2diI+S\\\\nojK6P+bYzZ2S9YpuKiLwr8e2Zd4+QJPlcMlAHtv74OXrSBYd3YxfR22g386udvB5\\\\nfhOJZ2KMvM4eY62aVZP10r8qq3+TcNMhbvds3+onP9m3AZjpHu3qfjIxsU5z1StH\\\\nZsqTlo4GsCqVJ1sI5lwVd21Be4zU/o1clcfslSUA2z3qhAuJTua+VGSTzIlQXWNl\\\\na4gD4G1N9vxVq9+R5iBhmR1R/HWQQHzcIfGXGfwZZnJ7mCKiyolK5BzjeuXwJAcB\\\\nJd0i292n4X18Qt3QRZpoPNv98zlXmDpOvx0tx7YVtBMnk1PMGCvO9FBMTCSuBAHq\\\\nZcrFZ/WYMC1zuIqMSb8HG/A8uSPZROsXLmg4NFTZVKBdD+qM2KzVKkP0M0CBwm2N\\\\nQ6Rprit71tO9Q3tgA3SAI8+p7TUrlr8Q+d6l2EvZepU=\\\\n=F9qf\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:26.387946Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8\\\", \\n \\\"uuid\\\": \\\"425d1364-e30d-405d-8767-81274ab8e7b8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MDowNCBHTVQifX0.DqCuTA.yN6ji-BR5TcdHjoWm3sRrFYXhgU; HttpOnly; Path=/\", \"Content-Length\": \"5248\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:50:04 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\", \"body\": \"{\\\\\"reply\\\\\": \\\\\"-----BEGIN PGP MESSAGE-----\\\\\\\\n\\\\\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\\\\\n=686S\\\\\\\\n-----END PGP MESSAGE-----\\\\\\\\n\\\\\\\\n\\\\\"}\"}',), 2)": "{\"status\": 201, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"headers\": {\"Content-Length\": \"46\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:50:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MDowNSBHTVQifX0.DqCuTQ.aO1H1VTbl7JXbedGN79hyP9M4tE; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json new file mode 100644 index 000000000..49a99ed42 --- /dev/null +++ b/data/test_star_add_remove.json @@ -0,0 +1 @@ +{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:35 GMT\", \"Content-Length\": \"5236\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNSBHTVQifX0.DqCsiw.DEH6ebEPcsbLK9H5adCZ6XjyK1A; HttpOnly; Path=/\"}}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"status\": 201, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:36 GMT\", \"Content-Length\": \"30\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNiBHTVQifX0.DqCsjA.zsGuf7s5PhVGgAUV4HrDRtCJA4Q; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\"}", "(('{\"method\": \"delete\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:37 GMT\", \"Content-Length\": \"32\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNyBHTVQifX0.DqCsjQ._M3tpW647dvYvitT7zMcEovWUBI; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 4)": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5236\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:42:37 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNyBHTVQifX0.DqCsjQ._M3tpW647dvYvitT7zMcEovWUBI; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py new file mode 100644 index 000000000..e86e7e650 --- /dev/null +++ b/tests/test_apiproxy.py @@ -0,0 +1,233 @@ +from pprint import pprint +import os +import time +import json +import hashlib +import shutil +import tempfile +import unittest +from sdclientapi import * + +from .utils import * +import pyotp + + +def load_auth(): + "Helper function to load token" + if os.path.exists("testtoken.json"): + with open("testtoken.json") as fobj: + return json.load(fobj) + return None + + +def save_auth(token): + with open("testtoken.json", "w") as fobj: + json.dump(token, fobj) + + +class TestAPIProxy(unittest.TestCase): + @dastollervey_datasaver + def setUp(self): + self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") + self.username = "journalist" + self.password = "correct horse battery staple profanity oil chewy" + self.server = "http://localhost:8081/" + self.api = APIProxy(self.server, self.username, self.password, str(self.totp.now())) + for i in range(3): + try: + self.api.authenticate() + except BaseError: + token = load_auth() + if token: + self.api.token = token + self.api.update_auth_header() + break + time.sleep(31) + + save_auth(self.api.token) + break + + def test_api_auth(self): + self.assertTrue(self.api.token) + + @dastollervey_datasaver + def test_get_sources(self): + sources = self.api.get_sources() + self.assertEqual(len(sources), 2) + + @dastollervey_datasaver + def test_star_add_remove(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.add_star(s)) + self.assertTrue(self.api.remove_star(s)) + for source in self.api.get_sources(): + if source.uuid == s.uuid: + self.assertFalse(source.is_starred) + + @dastollervey_datasaver + def test_get_single_source(self): + s = self.api.get_sources()[0] + # Now we will try to get the same source again + s2 = self.api.get_source(s) + + self.assertEqual(s.journalist_designation, s2.journalist_designation) + self.assertEqual(s.uuid, s2.uuid) + + @dastollervey_datasaver + def test_get_single_source_from_string(self): + s = self.api.get_sources()[0] + # Now we will try to get the same source again using uuid + s2 = self.api.get_source_from_string(s.uuid) + + self.assertEqual(s.journalist_designation, s2.journalist_designation) + self.assertEqual(s.uuid, s2.uuid) + + @dastollervey_datasaver + def test_failed_single_source(self): + with self.assertRaises(WrongUUIDError): + self.api.get_source(Source(uuid="not there")) + + @dastollervey_datasaver + def test_get_submissions(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + self.assertEqual(len(subs), 2) + + @dastollervey_datasaver + def test_get_submission(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + sub = self.api.get_submission(subs[0]) + self.assertEqual(sub.filename, subs[0].filename) + + @dastollervey_datasaver + def test_get_submission_from_string(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) + self.assertEqual(sub.filename, subs[0].filename) + + @dastollervey_datasaver + def test_get_wrong_submissions(self): + s = self.api.get_sources()[0] + s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" + s.uuid = "rofl-missing" + with self.assertRaises(WrongUUIDError): + self.api.get_submissions(s) + + @dastollervey_datasaver + def test_get_all_submissions(self): + subs = self.api.get_all_submissions() + self.assertEqual(len(subs), 4) + + @dastollervey_datasaver + def test_flag_source(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.flag_source(s)) + # Now we will try to get the same source again + s2 = self.api.get_source(s) + self.assertTrue(s2.is_flagged) + + @dastollervey_datasaver + def test_delete_source(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.delete_source(s)) + + # Now there should be one source left + sources = self.api.get_sources() + self.assertEqual(len(sources), 1) + + @dastollervey_datasaver + def test_delete_source_from_string(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.delete_source_from_string(s.uuid)) + + # Now there should be one source left + sources = self.api.get_sources() + self.assertEqual(len(sources), 1) + + @dastollervey_datasaver + def test_delete_submission(self): + subs = self.api.get_all_submissions() + self.assertTrue(self.api.delete_submission(subs[0])) + new_subs = self.api.get_all_submissions() + # We now should have 3 submissions + self.assertEqual(len(new_subs), 3) + + # Let us make sure that sub[0] is not there + for s in new_subs: + self.assertNotEqual(s.uuid, subs[0].uuid) + + @dastollervey_datasaver + def test_delete_submission_from_string(self): + s = self.api.get_sources()[0] + + subs = self.api.get_submissions(s) + + self.assertTrue(self.api.delete_submission(subs[0])) + new_subs = self.api.get_all_submissions() + # We now should have 3 submissions + self.assertEqual(len(new_subs), 3) + + # Let us make sure that sub[0] is not there + for s in new_subs: + self.assertNotEqual(s.uuid, subs[0].uuid) + + @dastollervey_datasaver + def test_get_current_user(self): + user = self.api.get_current_user() + self.assertTrue(user["is_admin"]) + self.assertEqual(user["username"], "journalist") + + @dastollervey_datasaver + def test_error_unencrypted_reply(self): + s = self.api.get_sources()[0] + with self.assertRaises(ReplyError) as err: + self.api.reply_source(s, "hello") + + self.assertEqual(err.exception.msg, "You must encrypt replies client side") + + @dastollervey_datasaver + def test_reply_source(self): + s = self.api.get_sources()[0] + dirname = os.path.dirname(__file__) + with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: + data = fobj.read() + + self.assertTrue(self.api.reply_source(s, data)) + + @dastollervey_datasaver + def test_get_replies_from_source(self): + s = self.api.get_sources()[0] + replies = self.api.get_replies_from_source(s) + self.assertEqual(len(replies), 2) + + @dastollervey_datasaver + def test_get_reply_from_source(self): + s = self.api.get_sources()[0] + replies = self.api.get_replies_from_source(s) + reply = replies[0] + + r = self.api.get_reply_from_source(s, reply.uuid) + + self.assertEqual(reply.filename, r.filename) + self.assertEqual(reply.size, r.size) + self.assertEqual(reply.reply_url, r.reply_url) + self.assertEqual(reply.journalist_username, r.journalist_username) + + @dastollervey_datasaver + def test_get_all_replies(self): + replies = self.api.get_all_replies() + self.assertEqual(len(replies), 4) + + @dastollervey_datasaver + def test_delete_reply(self): + r = self.api.get_all_replies()[0] + + self.assertTrue(self.api.delete_reply(r)) + + # We deleted one, so there must be 3 replies left + self.assertEqual(len(self.api.get_all_replies()), 3) \ No newline at end of file From 208530ac1168f40513f0220d0f9ba2226c5557b8 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 11:06:36 -0400 Subject: [PATCH 084/751] Updates the proxy vmname based on a configuration file The default proxy vmname is sd-journalist. If you want to override it, add a file at ``/etc/sd-sdk.conf`` with the following details: [proxy] name = proxy-debian The above example updates the proxy vmname to be ``proxy-debian``. --- sdclientapi/proxyapi.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sdclientapi/proxyapi.py b/sdclientapi/proxyapi.py index 37c4c7f26..51f2bac38 100644 --- a/sdclientapi/proxyapi.py +++ b/sdclientapi/proxyapi.py @@ -1,6 +1,7 @@ from pprint import pprint import os import json +import configparser from subprocess import PIPE, Popen from .sdlocalobjects import * @@ -8,12 +9,23 @@ from typing import Optional, Dict, List, Tuple +proxyvmname = "sd-journalist" + + def json_query(data): """ Takes a json based query and passes to the network proxy. Returns the JSON output from the proxy. """ - proxyvmname = "proxy-debian" + global proxyvmname + config = configparser.ConfigParser() + try: + if os.path.exists("/etc/sd-sdk.conf"): + config.read("/etc/sd-sdk.conf") + proxyvmname = config["proxy"]["name"] + except: + pass # We already have a default name + p = Popen( ["/usr/lib/qubes/qrexec-client-vm", proxyvmname, "securedrop.Proxy"], stdin=PIPE, From 5e9fabd028f261d3230e2cba8bc1ef4886aa345f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 11:10:06 -0400 Subject: [PATCH 085/751] Adds methods and tests for downloading reply and submission We have two methods to download replies and submissions --- data/test_download_reply.json | 1 + data/test_download_submission.json | 1 + sdclientapi/proxyapi.py | 72 ++++++++++++++++++++++++++++++ tests/test_apiproxy.py | 20 ++++++++- 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 data/test_download_reply.json create mode 100644 data/test_download_submission.json diff --git a/data/test_download_reply.json b/data/test_download_reply.json new file mode 100644 index 000000000..55f6fc408 --- /dev/null +++ b/data/test_download_reply.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-longitudinal_cellist-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0/replies/f315e4b8-e2d3-4b58-a8d1-131ff5da6f42\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0\\\", \\n \\\"uuid\\\": \\\"f315e4b8-e2d3-4b58-a8d1-131ff5da6f42\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-longitudinal_cellist-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0/replies/ab5a6a0f-669b-4fb9-acbb-d0d9aec3feda\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0\\\", \\n \\\"uuid\\\": \\\"ab5a6a0f-669b-4fb9-acbb-d0d9aec3feda\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-indie_second-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483/replies/f42ec66c-492f-4170-910b-4b1963256e14\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483\\\", \\n \\\"uuid\\\": \\\"f42ec66c-492f-4170-910b-4b1963256e14\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-indie_second-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483/replies/0a142d8f-55f3-4476-a2f0-eb7bade55e8a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483\\\", \\n \\\"uuid\\\": \\\"0a142d8f-55f3-4476-a2f0-eb7bade55e8a\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNjo0OToxNiBHTVQifX0.DqD0bA.0DwUB-J-sRcCsidgVSwRODc-m2E; HttpOnly; Path=/\", \"Content-Length\": \"1961\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 14:49:16 GMT\"}}", "(('{\"method\": \"GET\", \"path_query\": \"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0/replies/f315e4b8-e2d3-4b58-a8d1-131ff5da6f42/download\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"67a6ada8-9522-4ec3-9c6f-75e61a3ceef7\\\"}\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Disposition\": \"attachment; filename=3-longitudinal_cellist-reply.gpg\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNjo0OToxNiBHTVQifX0.DqD0bA.0DwUB-J-sRcCsidgVSwRODc-m2E; HttpOnly; Path=/\", \"Etag\": \"\\\"sha256:a69b2f47c0ec8e8b84b4ee0d35cad39747e0008ba2c0081a5993602d56a80b07\\\"\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 14:49:16 GMT\", \"Vary\": \"Cookie\", \"Expires\": \"Fri, 12 Oct 2018 02:49:16 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Cache-Control\": \"public, max-age=43200\", \"Content-Length\": \"1116\", \"Last-Modified\": \"Thu, 11 Oct 2018 09:57:21 GMT\"}}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json new file mode 100644 index 000000000..a62c31e49 --- /dev/null +++ b/data/test_download_submission.json @@ -0,0 +1 @@ +{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNzowMToxMiBHTVQifX0.DqD3OA.EW-4IatzGImxMbvR8lrYi4eeHjY; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 15:01:12 GMT\", \"Content-Length\": \"2059\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6/download\\\", \\n \\\"filename\\\": \\\"1-electric_cashbox-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\", \\n \\\"uuid\\\": \\\"cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/00fb8e3b-90e5-485a-b8cf-a40fce155292/download\\\", \\n \\\"filename\\\": \\\"2-electric_cashbox-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/00fb8e3b-90e5-485a-b8cf-a40fce155292\\\", \\n \\\"uuid\\\": \\\"00fb8e3b-90e5-485a-b8cf-a40fce155292\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/1f8db8de-6ed9-46ed-9671-8d1ab911d39e/download\\\", \\n \\\"filename\\\": \\\"1-paramilitary_submariner-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/1f8db8de-6ed9-46ed-9671-8d1ab911d39e\\\", \\n \\\"uuid\\\": \\\"1f8db8de-6ed9-46ed-9671-8d1ab911d39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/956e6c07-8934-4c47-9f2f-1e3d65c5e375/download\\\", \\n \\\"filename\\\": \\\"2-paramilitary_submariner-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/956e6c07-8934-4c47-9f2f-1e3d65c5e375\\\", \\n \\\"uuid\\\": \\\"956e6c07-8934-4c47-9f2f-1e3d65c5e375\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6/download\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"headers\": {\"Cache-Control\": \"public, max-age=43200\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNzowMToxMiBHTVQifX0.DqD3OA.EW-4IatzGImxMbvR8lrYi4eeHjY; HttpOnly; Path=/\", \"Content-Length\": \"604\", \"Date\": \"Thu, 11 Oct 2018 15:01:12 GMT\", \"Last-Modified\": \"Thu, 11 Oct 2018 14:59:38 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Etag\": \"\\\"sha256:965d1cc795e682dda26e08c3ffceb05d90fcad5867008ea9041c2f6b51f40bcf\\\"\", \"Vary\": \"Cookie\", \"Expires\": \"Fri, 12 Oct 2018 03:01:12 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Content-Disposition\": \"attachment; filename=1-electric_cashbox-msg.gpg\"}, \"body\": \"{\\\"filename\\\": \\\"cae6efb7-3927-4274-98cf-a8c4f56b08be\\\"}\", \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6/download\\\", \\n \\\"filename\\\": \\\"1-electric_cashbox-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\", \\n \\\"uuid\\\": \\\"cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\"\\n}\\n\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 15:01:13 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"466\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNzowMToxMyBHTVQifX0.DqD3OQ.kR00EWVU_q29n_E1yF5M3uhu5-4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/sdclientapi/proxyapi.py b/sdclientapi/proxyapi.py index 51f2bac38..d4efa4b33 100644 --- a/sdclientapi/proxyapi.py +++ b/sdclientapi/proxyapi.py @@ -627,3 +627,75 @@ def delete_reply(self, reply: Reply) -> bool: return True # We should never reach here return False + + def download_submission(self, submission: Submission) -> Tuple[str, str]: + """ + Downloads the submission object from the server. + + :param submission: Submission object we want to update. + :returns: Tuple of sha256sum, temporary filename + """ + global proxyvmname + source_uuid = submission.source_url.split("/")[-1] + path_query = "/api/v1/sources/{}/submissions/{}/download".format( + source_uuid, submission.uuid + ) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + etag = json.loads(res["headers"]["Etag"]) + + filename = os.path.join( + "/home/user/QubesIncoming/", proxyvmname, data["filename"] + ) + + return etag[7:], filename + + def download_reply(self, reply: Reply) -> Tuple[str, str]: + """ + Downloads the reply object from the server. + + :param reply: Reply object we want to update. + :returns: Tuple of sha256sum, temporary filename + """ + global proxyvmname + source_uuid = reply.source_url.split("/")[-1] + path_query = "/api/v1/sources/{}/replies/{}/download".format( + source_uuid, reply.uuid + ) + method = "GET" + + data = {"method": method, "path_query": path_query, "headers": self.auth_header} + + try: + res = json.loads(json_query(json.dumps(data))) + + if res["status"] == 404: + raise WrongUUIDError("Missing reply {}".format(reply.uuid)) + data = json.loads(res["body"]) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + etag = json.loads(res["headers"]["Etag"]) + + filename = os.path.join( + "/home/user/QubesIncoming/", proxyvmname, data["filename"] + ) + + return etag[7:], filename diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index e86e7e650..7b08dbe63 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -230,4 +230,22 @@ def test_delete_reply(self): self.assertTrue(self.api.delete_reply(r)) # We deleted one, so there must be 3 replies left - self.assertEqual(len(self.api.get_all_replies()), 3) \ No newline at end of file + self.assertEqual(len(self.api.get_all_replies()), 3) + + @dastollervey_datasaver + def test_download_reply(self): + r = self.api.get_all_replies()[0] + + etag, filepath = self.api.download_reply(r) + + @dastollervey_datasaver + def test_download_submission(self): + s = self.api.get_all_submissions()[0] + + self.assertFalse(s.is_read) + + etag, filepath = self.api.download_submission(s) + + # Now the submission should have is_read as True. + s = self.api.get_submission(s) + self.assertTrue(s.is_read) From 0598e6b8d6f9e951c7925c41351347a7b19d45dd Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 11:13:09 -0400 Subject: [PATCH 086/751] Moves two test helper functions into utils --- tests/test_api.py | 14 +------------- tests/test_apiproxy.py | 13 ------------- tests/utils.py | 13 +++++++++++++ 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index 795344eba..193b09a31 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -7,24 +7,12 @@ import tempfile import unittest from sdclientapi import * +from .utils import * import vcr import pyotp -def load_auth(): - "Helper function to load token" - if os.path.exists("testtoken.json"): - with open("testtoken.json") as fobj: - return json.load(fobj) - return None - - -def save_auth(token): - with open("testtoken.json", "w") as fobj: - json.dump(token, fobj) - - class TestAPI(unittest.TestCase): @vcr.use_cassette("data/test-setup.yml") def setUp(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 7b08dbe63..9e6b0ece6 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -12,19 +12,6 @@ import pyotp -def load_auth(): - "Helper function to load token" - if os.path.exists("testtoken.json"): - with open("testtoken.json") as fobj: - return json.load(fobj) - return None - - -def save_auth(token): - with open("testtoken.json", "w") as fobj: - json.dump(token, fobj) - - class TestAPIProxy(unittest.TestCase): @dastollervey_datasaver def setUp(self): diff --git a/tests/utils.py b/tests/utils.py index e2097781a..d30c47bd8 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -89,3 +89,16 @@ def wrapper(*args, **kwargs): return result return wrapper + + +def load_auth(): + "Helper function to load token" + if os.path.exists("testtoken.json"): + with open("testtoken.json") as fobj: + return json.load(fobj) + return None + + +def save_auth(token): + with open("testtoken.json", "w") as fobj: + json.dump(token, fobj) From 3fc56a80764d6242aa0cc20dd43a12d0144c20ff Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 11:26:25 -0400 Subject: [PATCH 087/751] Fixes the test run using pipenv --- tests/test_api.py | 2 +- tests/test_apiproxy.py | 2 +- tests/{utils.py => utils/__init__.py} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename tests/{utils.py => utils/__init__.py} (100%) diff --git a/tests/test_api.py b/tests/test_api.py index 193b09a31..6dbfc0d79 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -7,7 +7,7 @@ import tempfile import unittest from sdclientapi import * -from .utils import * +from utils import * import vcr import pyotp diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 9e6b0ece6..0cb6787b4 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -8,7 +8,7 @@ import unittest from sdclientapi import * -from .utils import * +from utils import * import pyotp diff --git a/tests/utils.py b/tests/utils/__init__.py similarity index 100% rename from tests/utils.py rename to tests/utils/__init__.py From 147b3b6c7e0d5f049bd79480e39fac6e8491e31b Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 13:46:12 -0400 Subject: [PATCH 088/751] Saves the mocking information as sorted dict and into strings We need this to create the same key in different Python environments. --- sdclientapi/proxyapi.py | 2 +- tests/utils/__init__.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sdclientapi/proxyapi.py b/sdclientapi/proxyapi.py index d4efa4b33..6c7eff003 100644 --- a/sdclientapi/proxyapi.py +++ b/sdclientapi/proxyapi.py @@ -80,7 +80,7 @@ def authenticate(self, totp="") -> bool: data = {"method": method, "path_query": path_query, "body": body} try: - result = json.loads(json_query(json.dumps(data))) + result = json.loads(json_query(json.dumps(data, sort_keys=True))) token_data = json.loads(result["body"]) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py index d30c47bd8..aa86a1b6c 100644 --- a/tests/utils/__init__.py +++ b/tests/utils/__init__.py @@ -37,8 +37,8 @@ def internal_sideeffect(*args, **kwargs): value_str = python_args["body"] value = json.loads(value_str) del value["one_time_code"] - python_args["body"] = json.dumps(value) - newargs = json.dumps(python_args) + python_args["body"] = json.dumps(value, sort_keys=True) + newargs = json.dumps(python_args, sort_keys=True) arguments = (newargs,) except: pass # Means no body in the call @@ -49,13 +49,13 @@ def internal_sideeffect(*args, **kwargs): try: value = python_args["headers"] del value["Authorization"] - python_args["headers"] = json.dumps(value) - newargs = json.dumps(python_args) + python_args["headers"] = json.dumps(value, sort_keys=True) + newargs = json.dumps(python_args, sort_keys=True) arguments = (newargs,) except Exception as err: pass # Means no Authorization token in the call - key = str((arguments, CALLNUMBER)) + key = arguments[0] + "+" + str(CALLNUMBER) answer = RES.get(key, None) if not answer: # Means it is not in cache. From d28a076e9b0ecfb5fa6b1cb66f708f3557831c72 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 11 Oct 2018 13:47:38 -0400 Subject: [PATCH 089/751] Updates test data JSON files for APIProxy --- data/setUp.json | 2 +- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_reply_source.json | 2 +- data/test_star_add_remove.json | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/data/setUp.json b/data/setUp.json index fad9854c0..fd57f23da 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}"} \ No newline at end of file diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index db1b2bc9a..385505e93 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"headers\": {\"Content-Length\": \"1971\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1Njo0MSBHTVQifX0.DqCv2Q.Aa1MGzdgfUWB63aKSZfohanri1g; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:56:41 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/568e17fd-5492-4f99-af5d-9da8095892b0\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"568e17fd-5492-4f99-af5d-9da8095892b0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"headers\": {\"Content-Length\": \"33\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:56:41 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1Njo0MSBHTVQifX0.DqCv2Q.Aa1MGzdgfUWB63aKSZfohanri1g; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"status\": 200}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:56:42 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1Njo0MiBHTVQifX0.DqCv2g.KNj2na3j6Y07VFG2W4oPyW3aCTw; HttpOnly; Path=/\", \"Content-Length\": \"1480\"}, \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/568e17fd-5492-4f99-af5d-9da8095892b0\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"568e17fd-5492-4f99-af5d-9da8095892b0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1NCBHTVQifX0.DqEaig.qonLMa3VAVf0Xe-GEOKl0E9urr8; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:31:54 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1959\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-splay_epicure-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/c20e0f3d-2c7d-4d0f-af98-14424b9c312f\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe\\\", \\n \\\"uuid\\\": \\\"c20e0f3d-2c7d-4d0f-af98-14424b9c312f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-splay_epicure-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/52561210-31a2-40db-bb8e-06d568fc618a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe\\\", \\n \\\"uuid\\\": \\\"52561210-31a2-40db-bb8e-06d568fc618a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/c20e0f3d-2c7d-4d0f-af98-14424b9c312f\"}+2": "{\"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:31:55 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1NSBHTVQifX0.DqEaiw.AfjIgzuCP2yig3Cn9hD9pi8iWbQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"33\"}, \"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-splay_epicure-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/52561210-31a2-40db-bb8e-06d568fc618a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe\\\", \\n \\\"uuid\\\": \\\"52561210-31a2-40db-bb8e-06d568fc618a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1NSBHTVQifX0.DqEaiw.AfjIgzuCP2yig3Cn9hD9pi8iWbQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:31:55 GMT\", \"Content-Length\": \"1477\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index 00b1dac4e..954bdfbe2 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMSBHTVQifX0.DqCspQ.77BI6fHXE1savwdYvI-jOFdq_6Q; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:43:01 GMT\", \"Content-Length\": \"5236\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Content-Length\": \"2630\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"headers\": {\"Content-Length\": \"73\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:08 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOCBHTVQifX0.DqEamA.Rz19VDYyhFF2_UvVptjQBdct478; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"151\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T17:32:07.242517Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"5233\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"wingless howler\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZMBEACUDbVOFlpWWeOugPWX5dX1sBGaduX1P01XO27dgFUedd7Rqe51\\\\nNLelyIWFocRg+Ee+c0sskEr+zih3s4n+A4Vjyn2fZjapaoHYCbosv8A1C9AXtQip\\\\n6F5k099stXUsl2iP3q5Bq1r4osWXH6z6/5pWYpl8JdLEpbx2K1OmVr44PaCO3wTA\\\\nlzHTYJYtDV9ZvQzJbD76nxD+rsueUKTjTQ32ot51QG0mQmcX3d+PTOlbOodMsu9d\\\\nnOfTf7JeYg/7eLlP3ACVUHgEwNvNvcAVXMpIvHbcAYWM1iHsDolzzqe/phs6omT3\\\\n4hBzySrxj+6eJ3TOss/uby7dPMwdrWvbRlpJv0uiuw6SaGGu0ZisnHp9j+u4fF7m\\\\nGYLf7l2GiTjwazlVfG93XfFimmr+MhRnVczY2abjezYJCUF0oNSsYyRStVnxNeNh\\\\nDvddgs4H74lZIZZBFlusTdmAyDXAILcynz2W03s6vaGmys02jnlXYBURM90OEgLI\\\\nWl7PNzzJ2AkmkO74jfdq1I5bHnIlydaDu0f4sE1BxmWOGseok6/j0LHQ/bvxCf3W\\\\n7S3rpNUPtBGbXRNPNHJyBwZTY68SJ/QmVR1qA8bO/g9eAv1fp/qZ9wGnYFoTIk2i\\\\nbTFoc4gyNAjmYb/Nb5uGthSyz5zYUgCsJqt5ED/BI/5XX5PcVI9pqmZmGQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SzZLMjJJSVVaT0pBNllSR0RHUlVGR1NDVFJB\\\\nVUZOM0RVSlhZN1dDNE9XVTVURDRSV0JVUkxQS01DSkhQUTdLU0hRN0JUV0tNSU1L\\\\nQlpCTERHN0g1QTdIVkxMUVNUMkw3TU5YTzRFWT0+iQI/BBMBCgApBQJbv4mTAhsv\\\\nBQkB4OUtBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIEt5E9hsRVoj+g/9\\\\nGS/OKtK/vup/9qp1I+b11eK3ipFts6DCGmu9WUyhtDeIeyewHxLWccWGIcLwZhhV\\\\nICi/OYrvc8ueef+G7kln2dHLoKCRLN1/qTe8FHNN7UDrG217EsCnrdySa9zdG3C8\\\\nwCxm3t81jQ7P5nzGQZ+NE1K9MQEB2kTYx7aaxED8gLk47fxCAcjq+t9eo3jq5x85\\\\n+N96ZMpPO1Dhz4lVOMEr8QEYobSZZZ1W9Uq6xr7LycNuwBE33zpKw7gzWBA3TUiH\\\\nsX8cSjaf6gVnbqQD682ayPo2x7ZljZghjGCv87ZT0yJ1fzx5U5gaYugUWxVvu1PK\\\\nHKmqjC+gl/4i5EgfWVerNSGBH+MwoNrQp10lmNhIFBKts3iVBkVerXeyHnvJcYpZ\\\\nclZagGth7pfw3RS1QFNZbTcNYnwAp0UBczKvkhwniB/BjIkaHQ3Gu8HYd3jqKEI5\\\\nV2BSPNe4mV5hKIGdelp6BA/yh1LRl6KUzHsDs5qDmgHSRychkBAEbgPsHkRqJjW5\\\\nNm0/CPUMmcX6dEMMY9OwEYVX5ZllfbzOUQlwxx2h6tG6snmewbl3USbGy/QR2Abv\\\\n3N4xRwhgFEhZChmje4KAmV7LQiZTjZg6QXO9LV4YXMr9gerAm/q4TuFk7Z5p5phH\\\\n4egWb6umT6Tj/Mud2vrYSIPu0byroQxSZbU0hYeRGAg=\\\\n=lewJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:12.587473Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:49 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OSBHTVQifX0.DqEcKQ.nIi7q2oAq4z9LwOpa3Q4Z7UT8C8; HttpOnly; Path=/\", \"Content-Length\": \"2627\"}}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index 00b1dac4e..954bdfbe2 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMSBHTVQifX0.DqCspQ.77BI6fHXE1savwdYvI-jOFdq_6Q; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:43:01 GMT\", \"Content-Length\": \"5236\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MzowMiBHTVQifX0.DqCspg.y3Imz7tLZmJ_BfrXiNZEi6P-PpE; HttpOnly; Path=/\", \"Content-Length\": \"2630\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:43:02 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"headers\": {\"Content-Length\": \"73\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:08 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOCBHTVQifX0.DqEamA.Rz19VDYyhFF2_UvVptjQBdct478; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"151\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T17:32:07.242517Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"5233\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"wingless howler\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZMBEACUDbVOFlpWWeOugPWX5dX1sBGaduX1P01XO27dgFUedd7Rqe51\\\\nNLelyIWFocRg+Ee+c0sskEr+zih3s4n+A4Vjyn2fZjapaoHYCbosv8A1C9AXtQip\\\\n6F5k099stXUsl2iP3q5Bq1r4osWXH6z6/5pWYpl8JdLEpbx2K1OmVr44PaCO3wTA\\\\nlzHTYJYtDV9ZvQzJbD76nxD+rsueUKTjTQ32ot51QG0mQmcX3d+PTOlbOodMsu9d\\\\nnOfTf7JeYg/7eLlP3ACVUHgEwNvNvcAVXMpIvHbcAYWM1iHsDolzzqe/phs6omT3\\\\n4hBzySrxj+6eJ3TOss/uby7dPMwdrWvbRlpJv0uiuw6SaGGu0ZisnHp9j+u4fF7m\\\\nGYLf7l2GiTjwazlVfG93XfFimmr+MhRnVczY2abjezYJCUF0oNSsYyRStVnxNeNh\\\\nDvddgs4H74lZIZZBFlusTdmAyDXAILcynz2W03s6vaGmys02jnlXYBURM90OEgLI\\\\nWl7PNzzJ2AkmkO74jfdq1I5bHnIlydaDu0f4sE1BxmWOGseok6/j0LHQ/bvxCf3W\\\\n7S3rpNUPtBGbXRNPNHJyBwZTY68SJ/QmVR1qA8bO/g9eAv1fp/qZ9wGnYFoTIk2i\\\\nbTFoc4gyNAjmYb/Nb5uGthSyz5zYUgCsJqt5ED/BI/5XX5PcVI9pqmZmGQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SzZLMjJJSVVaT0pBNllSR0RHUlVGR1NDVFJB\\\\nVUZOM0RVSlhZN1dDNE9XVTVURDRSV0JVUkxQS01DSkhQUTdLU0hRN0JUV0tNSU1L\\\\nQlpCTERHN0g1QTdIVkxMUVNUMkw3TU5YTzRFWT0+iQI/BBMBCgApBQJbv4mTAhsv\\\\nBQkB4OUtBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIEt5E9hsRVoj+g/9\\\\nGS/OKtK/vup/9qp1I+b11eK3ipFts6DCGmu9WUyhtDeIeyewHxLWccWGIcLwZhhV\\\\nICi/OYrvc8ueef+G7kln2dHLoKCRLN1/qTe8FHNN7UDrG217EsCnrdySa9zdG3C8\\\\nwCxm3t81jQ7P5nzGQZ+NE1K9MQEB2kTYx7aaxED8gLk47fxCAcjq+t9eo3jq5x85\\\\n+N96ZMpPO1Dhz4lVOMEr8QEYobSZZZ1W9Uq6xr7LycNuwBE33zpKw7gzWBA3TUiH\\\\nsX8cSjaf6gVnbqQD682ayPo2x7ZljZghjGCv87ZT0yJ1fzx5U5gaYugUWxVvu1PK\\\\nHKmqjC+gl/4i5EgfWVerNSGBH+MwoNrQp10lmNhIFBKts3iVBkVerXeyHnvJcYpZ\\\\nclZagGth7pfw3RS1QFNZbTcNYnwAp0UBczKvkhwniB/BjIkaHQ3Gu8HYd3jqKEI5\\\\nV2BSPNe4mV5hKIGdelp6BA/yh1LRl6KUzHsDs5qDmgHSRychkBAEbgPsHkRqJjW5\\\\nNm0/CPUMmcX6dEMMY9OwEYVX5ZllfbzOUQlwxx2h6tG6snmewbl3USbGy/QR2Abv\\\\n3N4xRwhgFEhZChmje4KAmV7LQiZTjZg6QXO9LV4YXMr9gerAm/q4TuFk7Z5p5phH\\\\n4egWb6umT6Tj/Mud2vrYSIPu0byroQxSZbU0hYeRGAg=\\\\n=lewJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:12.587473Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:49 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OSBHTVQifX0.DqEcKQ.nIi7q2oAq4z9LwOpa3Q4Z7UT8C8; HttpOnly; Path=/\", \"Content-Length\": \"2627\"}}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index 94a5c80c7..b5badc77a 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0NToyOCBHTVQifX0.DqCtOA.jU6MzsluD8-xcnKAUdaA6ru4cj0; HttpOnly; Path=/\", \"Content-Length\": \"2049\", \"Date\": \"Thu, 11 Oct 2018 09:45:28 GMT\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/1706cab3-32ee-4242-ae83-7ece90405581/download\\\", \\n \\\"filename\\\": \\\"1-palatial_stranger-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/1706cab3-32ee-4242-ae83-7ece90405581\\\", \\n \\\"uuid\\\": \\\"1706cab3-32ee-4242-ae83-7ece90405581\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc/download\\\", \\n \\\"filename\\\": \\\"2-palatial_stranger-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc\\\", \\n \\\"uuid\\\": \\\"e1d4d0b2-55cf-471c-9917-a41b164947bc\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d/download\\\", \\n \\\"filename\\\": \\\"1-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d\\\", \\n \\\"uuid\\\": \\\"356ae820-9776-44f7-9521-ea53b0a6772d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9/download\\\", \\n \\\"filename\\\": \\\"2-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\", \\n \\\"uuid\\\": \\\"1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/1706cab3-32ee-4242-ae83-7ece90405581\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:45:29 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"38\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0NToyOCBHTVQifX0.DqCtOQ.wx3hv-MocAmCs3Ihf3UQ1oCuwZc; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0NToyOSBHTVQifX0.DqCtOQ.kxllaJiRAVSG3Vxjkpqn8aJopWA; HttpOnly; Path=/\", \"Content-Length\": \"1543\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:45:29 GMT\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc/download\\\", \\n \\\"filename\\\": \\\"2-palatial_stranger-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6c2bb559-b817-4d1a-99a7-e2f030cec6f7/submissions/e1d4d0b2-55cf-471c-9917-a41b164947bc\\\", \\n \\\"uuid\\\": \\\"e1d4d0b2-55cf-471c-9917-a41b164947bc\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d/download\\\", \\n \\\"filename\\\": \\\"1-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/356ae820-9776-44f7-9521-ea53b0a6772d\\\", \\n \\\"uuid\\\": \\\"356ae820-9776-44f7-9521-ea53b0a6772d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9/download\\\", \\n \\\"filename\\\": \\\"2-municipal_seventh-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/649b8d96-ad61-414e-8f49-3c693f6738fc/submissions/1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\", \\n \\\"uuid\\\": \\\"1b0831cc-e17f-4218-98a9-b5e8bc5081d9\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:40:47 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2039\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MDo0NyBHTVQifX0.DqEcnw.XVsouWt65Dt6-pT1geMJPVO8ut0; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/3f215dce-2e8d-4d15-b2a3-149c293171ae/download\\\", \\n \\\"filename\\\": \\\"1-beery_bribe-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/3f215dce-2e8d-4d15-b2a3-149c293171ae\\\", \\n \\\"uuid\\\": \\\"3f215dce-2e8d-4d15-b2a3-149c293171ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9/download\\\", \\n \\\"filename\\\": \\\"2-beery_bribe-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\", \\n \\\"uuid\\\": \\\"c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765/download\\\", \\n \\\"filename\\\": \\\"1-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765\\\", \\n \\\"uuid\\\": \\\"d5565739-7755-4abe-a968-571cc877e765\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de/download\\\", \\n \\\"filename\\\": \\\"2-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de\\\", \\n \\\"uuid\\\": \\\"65da24da-44f1-481c-bf34-b9e5be64b5de\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/3f215dce-2e8d-4d15-b2a3-149c293171ae\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:40:48 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"38\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MDo0OCBHTVQifX0.DqEcoA.GtKM2649QA5lynN5TR6pQ2IVFlY; HttpOnly; Path=/\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+3": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9/download\\\", \\n \\\"filename\\\": \\\"2-beery_bribe-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\", \\n \\\"uuid\\\": \\\"c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765/download\\\", \\n \\\"filename\\\": \\\"1-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765\\\", \\n \\\"uuid\\\": \\\"d5565739-7755-4abe-a968-571cc877e765\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de/download\\\", \\n \\\"filename\\\": \\\"2-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de\\\", \\n \\\"uuid\\\": \\\"65da24da-44f1-481c-bf34-b9e5be64b5de\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MDo0OSBHTVQifX0.DqEcoQ.fzIdZn2XEYYizcc70xZa1WDZTfo; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:40:49 GMT\", \"Content-Length\": \"1539\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index de1930ffc..9577ea164 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5242\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0NiBHTVQifX0.DqCthg.wiR7MaGytFIPGy3HKCIiPrIrTfk; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:46:46 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"contented grouping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/G9UBEACtS3ofKMNSL+HYmcbAcy8pwg8Ka2nLhBYcUO0K17OmFYb9IKCf\\\\nGrXOyz5NX/qCtKh7dekIdichdoLIDa9SC1Lu04mCo2ZPE6Up9WwQDgdyWdWtPgF6\\\\n3A+4I90U1NJnMiasskm9gu8XqVeMaeo92W61x8i1d5J+VlxP3d3sdhUw3uLGaKC4\\\\naLrGTXUZRyWnrvX0pL7s8R2ejeYDyAPJp0DFhrqTWsn0jRvj42ifPvCzrL+yfy7e\\\\n6z1HoHV3VXr/rJ+RDCDVwVJAMuXAnWfu4srje6tIJUttwSgm84ddwN6GZO1RXn9H\\\\nNKZM7yCgX9Y5nHbNNLmKSOZKfHSHnb7q/Etg0+WD1MzGlwcYDkZfi5jqNUMxfmFt\\\\nkEuduqKXNomTci2MLVrbWlLLlryqUj8zoTKORWW18hvLaySdON5Xf0dCOvrejIIK\\\\nJ6Cav6qauXSubWiZhASUq2bUJdSLMXwa+X9vkPVvnhKwdpZYk43DAtRTmVIUaRed\\\\nNsWy2FVZAsF0lUrJ0EqNL3DS4Ox7f/17syNdJ1Y83sYIuyFbPijzxO2VAISKOmyx\\\\nnNxgEOgwZSzkZTw8nwcNzKseGdRoR5GS+nhn4PZSHj9MgZkCfyLu1thxEoukOvqJ\\\\nVf8npx5rpuBaLOY8lIVwFxZjOr/OxqISUFIJGJnl/TaER9c9RTrpr8FbgwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RkdGSU5RSVM1VUhPWDZFVzdJNk5RQVVVSFpQ\\\\nNDVLVFBENE9TRUtEM0JCTEhPNlg1Nk40VklLNEFHWFFCQUdUT0pRTFpONzNGVVNH\\\\nTE1OTFRLTjVaNVNJUVVBSzM1TjdEMktMU01BWT0+iQI/BBMBCgApBQJbvxvVAhsv\\\\nBQkB4VLrBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ0/dp+tRynLr5RA/+\\\\nIrkxvRReI8xM/MKRoAHg9x/3CV0bBLFkPLdtLjc+5S640h547sSxMjhu1wfi3X5/\\\\nJmqzN53VKzgNhQQfNt+RIALdupVv/LW477/m3n7JFgZ3s5OAhDvkF6uOwVNyoP9O\\\\nc8vzBrSffR/zVzOInHoKulq7u3OTUUKjE3IrYzXGgO+3up2Y59oOhF90lhvnY6N+\\\\nsk0bscps78dkO/wsD4Azo3T4YZl6P2pmZyxK8c8VnU9QSqOqb7KifBfU+uuFhK9+\\\\nx0kkxaKFLHhixFt74fYUQukNogG94ZqX42wmOKZf+ToN2BrZHJazLs5u4f3m6b1L\\\\nWYT58ZFMnaoi+g9zeLuhOUMLtpz2qxFmywwgVY9JQe661lsHHxyLrepAxkxiKc/a\\\\n5LjJnfI7LTuaNmseFYNJ309k0tw74/VzhliGtS6oUfYsDRpEhZgtHuNQnb8cE162\\\\njrdzOr3twykFJBqCbt+JrHdrrmqRtTuqJYsjDI7VJ9p5K0LiBqF3vtJt2dEGfCWy\\\\neqAdeAf1wzYB84X7KNWL0lx/jfkmpu6zpzGPZuep8jhciqLAKWP5paQ3tSbgkOy2\\\\nNLx8R9WF94jlWRV34oGzoypmuUatM6TQ4lDmS9EJMmMAoTX7thXvOccM6fGzzpKM\\\\nr43Q0/QlNWGaxbMOGZGEv5KjkbW0j96tk1BdG1mUlfc=\\\\n=f2cz\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:45:58.929266Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"uuid\\\": \\\"19878649-3bab-48a5-bbd1-ab0056b30a5f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"gynecological barring\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/G9gBEADiHoYNc7lFejOarQgSdXlwuxazH4Msj1dlIDdYh9okm6fok1o2\\\\n12mCVgckXChus5qRZv5gX57clyJBOTNsYWGds+/wvIKJpRuf0bKwf38/faKvqlON\\\\nU5W/J1KizoyDHUY3PkSCrFpSFawwBsSbeUQ298BabWdUDT91lAAVF3SD3BXsEp7P\\\\n0ayI6yLd//d+Q8YAPaskwzqMUZZ1yk+PtYYs502gjE4FFizLKF7mofqAwwTYCI8N\\\\n2cU80hepO7pgGxdyQ4yLMr6pmqSu3+dOyEVx+6RhPEky5vSgJNXrcJzw89W0UrrD\\\\ntW4ODCLG/X/QZgj4T2EbFxOxM9BCEQyIPzZBeXbIYszNSQgtBqhQbNuo8MAsCsEG\\\\nMIFGs2DXwikccACYyiNF7zTxfEgeajwRvHTuTB1RtAH4uKeOg0zE6a35r4zLbXUG\\\\n63VhCcrG7JDGgNybe6QYb/ZH4tHgGqa2ylbv4+wxdIA3/nJyOC64i+L3ssffSere\\\\n1KrWEKcId7iYh2O2kj97cpE/S1OykDnX9t9aFL/pP4tM7G7RJTh4/XeStiS4T8lH\\\\n+qBmATYwC20r4GJx2t2pFG/9ZdQmwR2H3kzmfyLuXjrF9YmIbuqDJGdGMYuvTQPW\\\\nKgEXSYmRhKQzDSwhzqa9Vp1Nvbn+OkuvUBjARglbt92ouehAD2lPnBoSnQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NUsyVVQySlFZUE5ETkVXSlM1T0ZPMzU0VURW\\\\nS0ZRSTZVRlVDR1FOQ1dFV1pITUVaTkpWNEVMVUw3V1lZQjQ0VlBXT0RWS0ZKSjRQ\\\\nQUZKMzNQSTJHNEFLTlBPRkVKNUwyWEdDWEwyWT0+iQI/BBMBCgApBQJbvxvYAhsv\\\\nBQkB4VLoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQNg7K56qVy6zyqRAA\\\\nsqUW2VJZGSzMzWu1SgAzj6E5jc/fUQ4VH0P8vWExuQlWYdGuU7Yg85do9NgJqyz+\\\\n4qpGvI6+gI98MnxLkKaESFLQ5C09L4/LqoC1h9KCgEaifZ5ngVp+1DmgRrCHIDpg\\\\neNnONWmOgZueRCwjFIyUmr9NeLP8XjJIKfCiiAevT9Q1qB6kdfccrC+gwImesQGu\\\\nX+7nwDw0Q1igB8CYEjwoDicLUo3F/gvz3pBKIDvAxGnPWL812o8GmnSZHss1dSQJ\\\\nCUphYp+gBFLB9Pxqpw7dQ5EP2Oj9ueU8FddAUsVgPlHPlJs+Xqsz/QC1Xn3O81gv\\\\nHWEggJFq7CFJjKN+WHk6oWZAJt5VZCEdzTzODJIITjz6rvohiYRPIj+x1Cs70vM0\\\\nLIamxoYvRVVerbqQhyoJ2aXOJpLrWcoSBHsIVytjRufcEerj16HuOLBTImGCRJgV\\\\nk4xpkYu+RLNCeX1m4jvykX0Z360F8RoxLiIw4WA+JoR/vhdFy0DKI398JeP0qgzk\\\\nY0s6Hsnx6MI6YTsasgV1uAFGewTr550XGvtI+O8M92XBpXSIVUtDsOH23lpMGGjU\\\\nvUwkJOk6ctxmKuSYZUNkRP5LAozj6OCxZ3El3QkMQVRU343zirgv14YOc0wId90t\\\\nQ3x/1/ylG/r21alL8v1vMuLBFxYzLuqLQEDLjvIlJ1c=\\\\n=I6Uj\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:46:03.178691Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479\\\", \\n \\\"uuid\\\": \\\"efad4260-cad7-4588-9972-693f684f6479\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:46:46 GMT\", \"Content-Length\": \"1039\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0NiBHTVQifX0.DqCthg.wiR7MaGytFIPGy3HKCIiPrIrTfk; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/2f71409f-80c9-408e-ad7b-ff1bd652f24e/download\\\", \\n \\\"filename\\\": \\\"1-contented_grouping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/2f71409f-80c9-408e-ad7b-ff1bd652f24e\\\", \\n \\\"uuid\\\": \\\"2f71409f-80c9-408e-ad7b-ff1bd652f24e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687/download\\\", \\n \\\"filename\\\": \\\"2-contented_grouping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687\\\", \\n \\\"uuid\\\": \\\"fd34fab8-aece-4e7b-af32-360a4dde3687\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"DELETE\", \"path_query\": \"api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/2f71409f-80c9-408e-ad7b-ff1bd652f24e\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:46:47 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0NyBHTVQifX0.DqCthw.iVUctwvUnnE8eh5Sh_Adt4YObIM; HttpOnly; Path=/\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 4)": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687/download\\\", \\n \\\"filename\\\": \\\"2-contented_grouping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/19878649-3bab-48a5-bbd1-ab0056b30a5f/submissions/fd34fab8-aece-4e7b-af32-360a4dde3687\\\", \\n \\\"uuid\\\": \\\"fd34fab8-aece-4e7b-af32-360a4dde3687\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f710db08-2c6c-4b64-a59d-5a32b176e4e4/download\\\", \\n \\\"filename\\\": \\\"1-gynecological_barring-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f710db08-2c6c-4b64-a59d-5a32b176e4e4\\\", \\n \\\"uuid\\\": \\\"f710db08-2c6c-4b64-a59d-5a32b176e4e4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f0e0c25d-4860-4496-b786-c9968ae0da5f/download\\\", \\n \\\"filename\\\": \\\"2-gynecological_barring-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/efad4260-cad7-4588-9972-693f684f6479/submissions/f0e0c25d-4860-4496-b786-c9968ae0da5f\\\", \\n \\\"uuid\\\": \\\"f0e0c25d-4860-4496-b786-c9968ae0da5f\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0Njo0OCBHTVQifX0.DqCtiA.cN22aEq6BsU9fc2HU-9bRjHJfsU; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:46:48 GMT\", \"Content-Length\": \"1552\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"standard torus\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/izEBEAC1WVjVDKVdsGsQaFhB94jl3Xho076A/pCt1C1SXqbPuw+N9uUI\\\\nL5fqkTnJ8dD5WPDOWxqR9nWlKzA35dmrXtCGRE6fsyK3Fud5xJYXe9V4H7tqrlDC\\\\n7QjAMAHeo66fmbbYIlEwQKablUrKKWOZ7Hb4ZxLOZulwvET3SsdNYvb/UD6SONaC\\\\nirxAwk8rc5n8Cps1WC1+zLy2X60fuGKI6f+VHv278djHpuWu4/Hd4v/FzbCr4r1u\\\\nwUI4z9f6dW2ZScQCGPvnPM7IbHu1AtXkwEPhfT9HZ+Vznodig/XFXX9laQso7766\\\\nUK44dCrpsqNRutxAEnpfeP0KF3Mf77OB175H7nWGYNFjeVlw57paeYNQkHdHtsAY\\\\nW+oqHCYQRLVCD+bWvMAGNzbyZXLB+2KZBxWzQ28DxwKmXWYJq96A1FvBraEzkgjI\\\\nHxEteBxG04Pm5Eklx8ti3dBhzNeZwha6BRMBvlqL3v6o/LH8c1lZKNHWQBpNqoYd\\\\nMyNCulljiOFycuSCm36q+wiMKLKtBCoIZxRIC+icdOvc9DdDF20pMOr4EhwgrB7l\\\\nYeG0ryKWdWqmbqw7Vmc71PCuu17YQn/h9xWbIs9LxFY8IUG/u+kxPFYHthhygqpv\\\\n1mGhhaLRixu1C+czjVt4QfDeAyQAzUgRMSCpwynVIqOotmRbd3GtUbYPbQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFJES0lBQlQ0QkNaQVZBV1BFWkJSR1ZWSEdB\\\\nWlBUWTZXTExKTVpXSkpCRkNQUFlVUDdLN0g2RkVPVUNPV0pRN1pRUTQyVEdMMkMy\\\\nRVFMNkpQQkI1MlJYM1lHQkhHNjVQWUhIUkc2QT0+iQI/BBMBCgApBQJbv4sxAhsv\\\\nBQkB4OOPBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQntboiNRI6nP5tg/+\\\\nKqlzd5BjCXdekiVw1hun3PWs6G1+jkriFzOb/6DUxeWRpvfB/yHTT4DN7XlN/iou\\\\nUX5qpIZnBsUDyfJxkUvlCX6HxcvJ+K4KhNej5wiFr3POnji1bc97EUBzokxI4NLX\\\\nzoTWr3lDf8U2V++Xwcw4QP2bHCQwu+bRoLoPBsjPpYb6rSoJfljNCVF/O2dEldky\\\\nMTeyH+/NJStuOc1jaYjeeoktNSkpwTBtI9kiJgMhskoqMcBcq6llp/e6MuaSS+5I\\\\n9VOZT/fuZ4FBP7WdAoaOPRdpA1L1iBPQ5GL4Cm+rQNEIoSKB9sEw0G9uEh5wLBby\\\\n19450UQlsUASU48jF/kBw+IU6KLs5QuR3UF+ktUphPJi3NHdKHuwBxW2Rjbb/HR8\\\\nxaF6UuZJRUveRcYgt5dVjpTAc5RzmHcOJiB91oX2G6cqwFNM3QG8eDQwyHPKRD2/\\\\nV3/Yne2XL/ix3h7Fifz+3Wc95ewE3zjrMucsjP2uvgX9I7Rac5xwqCQ0QY64/5F4\\\\nqd/RliZXhcM0UvuzYHtPyZPIDmlSAJZT0W+S/W1bLbvoo1u0vhhiyJoRrD31bGkM\\\\nOb2+CHyDSdg5apQ5Tg0BwGy5nZKl0PdGD5a/qXuw/01kIJujSvDAz0z9+ezQWDKI\\\\nNVIBlA0XKCJ99veAN2GCecQkkhQkTkJwEb2qpmn4Tlc=\\\\n=F/qV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:41:06.862851Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"uuid\\\": \\\"41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"offshore wiper\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/izQBEACmldggKSyKyGmX2IbpcKcHquHrkYygrf4C3sqX6+BOn8nbXduy\\\\nY2ppIW1fmd6UoDla3Io8x5WWAagvlFf8FYTG0iPiai1E6Hn8Lzo0ff2c+fOfsOYd\\\\nctlgqTlCEmn9HqYp/W1NGvCTzFainlk6XRKq45yA87wde86Qhb1kto4QBBKerfNE\\\\nxlZVmSP/XZf7FhEvQaXNFLJtWLyMhvZpyKuf9Eygy04QgqKIJaL9MLM8bhXPl294\\\\nThUJLobry4chJnzBasyOxKOdPYsIyeAq7y6wHFt6v+1+EZUUS7xhrJ79G8GO10n/\\\\n+CZrpCwcllvE6Hr0qbRahLGIh3XC90dmXMjsEislDSLzYCzTTZlKVn4mBC066IvQ\\\\nL+abURfTU8th5W/KgvN0DWn1tojn7BYqMpAy+PQ5Hjedxu+fn9xhNXKxNSlcxtaG\\\\nF4QcH8bTFekJWJE2Io5AEGd4wpeEx47nZpeqcCSd8Rf0UQQ3dbQOskzqA+ctwAfR\\\\nLOTxRPnb/tr0knJm88kzO/NmnXyiysqjTjyE9zr68cpPwxCW+gyErvLo8II9rAo6\\\\nanZHVbPz7NLEUUijaiNYMfTOYusUnzl57QRuCPj2irGr0WL/mWaQoNATTqUKTdL4\\\\nQy4Tp7x+2LAYAGpphHtqYn6tZ0FXU3Nyfsh+9wbu1L54P+4AdMnZJctlmQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFHU09MWjRVTlhXU0tSWjVMVUQzSUo0SkRB\\\\nSk9BN1lJRTc2MlJWRzNCRElTSU4zRURaN1NRTlFZRkRKS0hEUDI2SlVBUlhFQTNH\\\\nV0hCTTc0VllUVk5RRElFNVhDS1VDSVlQUjc3QT0+iQI/BBMBCgApBQJbv4s0Ahsv\\\\nBQkB4OOMBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGtea4vsFCC1B4g/+\\\\nP74ajnICOWgJIobBiDKNcoqQddlqIBcedHOb8pfrP5DK+z8vUmnGI6ZxN6bOW1qg\\\\ngKcGIE2bsRE6CEwuL0cKNHlrrAtc7pQw9cXsFZIGGy/gA6m/Q0md7HZ1QMjgl0yD\\\\nDe5JbFdQLjVTISDCNSWDZi1SrWSm9DLCnJ+o4IpM9tlJA1Afn/O8tTtCHRq8UxQb\\\\nG6IBxJdiwYcUP2vMxsgPplCqb7paRaxSUdcYbam/XA1ZZrAUJpZeX6dLQ/O9FW1r\\\\nBPjQtwt7t24pUj/qE/ASdzyBZrFlrd+IKimzbnc7V2v03kMrTNwS1ZuClZJZb9zp\\\\nWyd4qJy56tJUIQ+bhtgHJefqQzduDTQAZ5KGARVU4ttC2S3Bkkbi/RibIyvF3Drq\\\\nFvVIyF49SaXZUsVnPPCYRjLUWhXXXOu6dDwzgIITdpxywtHdkih5wQTaWK1MUB87\\\\nOFDBKYzUkmARxv/XdiLxOm8yrqfp86ECiD+oMNhNOuDJPLiv6t2pi68bUtHNzS/T\\\\nmNqzkslqihDbEeg7/I45K/aoK1HQtXE/HNgpMygqap9HYPTzV7EoJhJPXfzBxp/3\\\\nC6VSGMPY6YQUvIrK+EIITWoF3HqSpnO84E8H7A4apk7K9wm4ujsh5jFHd4k2YhSF\\\\nPB2jgE83LH896Uyebzzc88CKQdj82rvV/td15+dVcyM=\\\\n=d7YK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:41:11.808980Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561\\\", \\n \\\"uuid\\\": \\\"a5b94646-bcf6-43a4-ade2-01f528d5f561\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"5231\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1NyBHTVQifX0.DqEc5Q.HZD3owqQXAt6Y0XxVPwNtvTJcJ4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:41:57 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions\"}+2": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:41:58 GMT\", \"Content-Length\": \"1031\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1OCBHTVQifX0.DqEc5g.LBMc4wzzJUT19RBUvVwFRgj9JDw; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7/download\\\", \\n \\\"filename\\\": \\\"1-standard_torus-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7\\\", \\n \\\"uuid\\\": \\\"e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78/download\\\", \\n \\\"filename\\\": \\\"2-standard_torus-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78\\\", \\n \\\"uuid\\\": \\\"dafc9e75-be08-4436-8aae-0f96c09c3f78\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7\"}+3": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:41:59 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1OSBHTVQifX0.DqEc5w.7_llCSkVAICUbGN75aMdldsxfBs; HttpOnly; Path=/\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+4": "{\"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1OSBHTVQifX0.DqEc5w.7_llCSkVAICUbGN75aMdldsxfBs; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1534\", \"Date\": \"Thu, 11 Oct 2018 17:41:59 GMT\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78/download\\\", \\n \\\"filename\\\": \\\"2-standard_torus-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78\\\", \\n \\\"uuid\\\": \\\"dafc9e75-be08-4436-8aae-0f96c09c3f78\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/730cd7c6-a7ea-40ae-bf2d-7345ba3ed24f/download\\\", \\n \\\"filename\\\": \\\"1-offshore_wiper-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/730cd7c6-a7ea-40ae-bf2d-7345ba3ed24f\\\", \\n \\\"uuid\\\": \\\"730cd7c6-a7ea-40ae-bf2d-7345ba3ed24f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/ae93844d-397d-4140-ba80-f76489db71b5/download\\\", \\n \\\"filename\\\": \\\"2-offshore_wiper-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/ae93844d-397d-4140-ba80-f76489db71b5\\\", \\n \\\"uuid\\\": \\\"ae93844d-397d-4140-ba80-f76489db71b5\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index 55f6fc408..f62ec89c3 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-longitudinal_cellist-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0/replies/f315e4b8-e2d3-4b58-a8d1-131ff5da6f42\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0\\\", \\n \\\"uuid\\\": \\\"f315e4b8-e2d3-4b58-a8d1-131ff5da6f42\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-longitudinal_cellist-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0/replies/ab5a6a0f-669b-4fb9-acbb-d0d9aec3feda\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0\\\", \\n \\\"uuid\\\": \\\"ab5a6a0f-669b-4fb9-acbb-d0d9aec3feda\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-indie_second-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483/replies/f42ec66c-492f-4170-910b-4b1963256e14\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483\\\", \\n \\\"uuid\\\": \\\"f42ec66c-492f-4170-910b-4b1963256e14\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-indie_second-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"5a61d11a-fdac-423b-9c78-3a7d44957b45\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483/replies/0a142d8f-55f3-4476-a2f0-eb7bade55e8a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/200d180a-34db-4c08-9f26-f75aa784b483\\\", \\n \\\"uuid\\\": \\\"0a142d8f-55f3-4476-a2f0-eb7bade55e8a\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNjo0OToxNiBHTVQifX0.DqD0bA.0DwUB-J-sRcCsidgVSwRODc-m2E; HttpOnly; Path=/\", \"Content-Length\": \"1961\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 14:49:16 GMT\"}}", "(('{\"method\": \"GET\", \"path_query\": \"/api/v1/sources/173e7587-5cc1-412a-98dd-4f82d69a37b0/replies/f315e4b8-e2d3-4b58-a8d1-131ff5da6f42/download\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"67a6ada8-9522-4ec3-9c6f-75e61a3ceef7\\\"}\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Disposition\": \"attachment; filename=3-longitudinal_cellist-reply.gpg\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNjo0OToxNiBHTVQifX0.DqD0bA.0DwUB-J-sRcCsidgVSwRODc-m2E; HttpOnly; Path=/\", \"Etag\": \"\\\"sha256:a69b2f47c0ec8e8b84b4ee0d35cad39747e0008ba2c0081a5993602d56a80b07\\\"\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 14:49:16 GMT\", \"Vary\": \"Cookie\", \"Expires\": \"Fri, 12 Oct 2018 02:49:16 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Cache-Control\": \"public, max-age=43200\", \"Content-Length\": \"1116\", \"Last-Modified\": \"Thu, 11 Oct 2018 09:57:21 GMT\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:31:58 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"995\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1OCBHTVQifX0.DqEajg.ARAONfzm1qwFhUGJhgbj3oqFkYY; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc/download\"}+2": "{\"headers\": {\"Expires\": \"Fri, 12 Oct 2018 05:31:59 GMT\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Thu, 11 Oct 2018 17:31:36 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1OSBHTVQifX0.DqEajw.xkXUHch05cVqTcobnWNmVaRTaS4; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Etag\": \"\\\"sha256:a53a1e10fcaca9ec40889647f72133b011fba2eee6c6ce251870dabdf253a653\\\"\", \"Content-Disposition\": \"attachment; filename=3-rose-colored_rifle-reply.gpg\", \"Content-Length\": \"1116\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Cache-Control\": \"public, max-age=43200\", \"Date\": \"Thu, 11 Oct 2018 17:31:59 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"body\": \"{\\\"filename\\\": \\\"01599391-8094-447e-9a98-86290f2aff6f\\\"}\", \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index a62c31e49..bbc373c74 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNzowMToxMiBHTVQifX0.DqD3OA.EW-4IatzGImxMbvR8lrYi4eeHjY; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 15:01:12 GMT\", \"Content-Length\": \"2059\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6/download\\\", \\n \\\"filename\\\": \\\"1-electric_cashbox-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\", \\n \\\"uuid\\\": \\\"cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/00fb8e3b-90e5-485a-b8cf-a40fce155292/download\\\", \\n \\\"filename\\\": \\\"2-electric_cashbox-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/00fb8e3b-90e5-485a-b8cf-a40fce155292\\\", \\n \\\"uuid\\\": \\\"00fb8e3b-90e5-485a-b8cf-a40fce155292\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/1f8db8de-6ed9-46ed-9671-8d1ab911d39e/download\\\", \\n \\\"filename\\\": \\\"1-paramilitary_submariner-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/1f8db8de-6ed9-46ed-9671-8d1ab911d39e\\\", \\n \\\"uuid\\\": \\\"1f8db8de-6ed9-46ed-9671-8d1ab911d39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/956e6c07-8934-4c47-9f2f-1e3d65c5e375/download\\\", \\n \\\"filename\\\": \\\"2-paramilitary_submariner-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3fad2ad5-72a4-414e-922d-627ae93c9e1f/submissions/956e6c07-8934-4c47-9f2f-1e3d65c5e375\\\", \\n \\\"uuid\\\": \\\"956e6c07-8934-4c47-9f2f-1e3d65c5e375\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6/download\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"headers\": {\"Cache-Control\": \"public, max-age=43200\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNzowMToxMiBHTVQifX0.DqD3OA.EW-4IatzGImxMbvR8lrYi4eeHjY; HttpOnly; Path=/\", \"Content-Length\": \"604\", \"Date\": \"Thu, 11 Oct 2018 15:01:12 GMT\", \"Last-Modified\": \"Thu, 11 Oct 2018 14:59:38 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Etag\": \"\\\"sha256:965d1cc795e682dda26e08c3ffceb05d90fcad5867008ea9041c2f6b51f40bcf\\\"\", \"Vary\": \"Cookie\", \"Expires\": \"Fri, 12 Oct 2018 03:01:12 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Content-Disposition\": \"attachment; filename=1-electric_cashbox-msg.gpg\"}, \"body\": \"{\\\"filename\\\": \\\"cae6efb7-3927-4274-98cf-a8c4f56b08be\\\"}\", \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6/download\\\", \\n \\\"filename\\\": \\\"1-electric_cashbox-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/d5cb8194-2484-4fb9-813f-69a6bef3057a/submissions/cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\", \\n \\\"uuid\\\": \\\"cb2acb12-02fe-4aaf-8a68-72f9aac54ed6\\\"\\n}\\n\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 15:01:13 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"466\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxNzowMToxMyBHTVQifX0.DqD3OQ.kR00EWVU_q29n_E1yF5M3uhu5-4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"1039\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMCBHTVQifX0.DqEakA.9oQ4CoOdcJ45LFsTvG5UilBrEs4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:32:00 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\"}+2": "{\"body\": \"{\\\"filename\\\": \\\"72c1544c-2ed0-4930-b273-e1364a4ef008\\\"}\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Last-Modified\": \"Thu, 11 Oct 2018 17:31:36 GMT\", \"Content-Length\": \"604\", \"Vary\": \"Cookie\", \"Expires\": \"Fri, 12 Oct 2018 05:32:00 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMCBHTVQifX0.DqEakA.9oQ4CoOdcJ45LFsTvG5UilBrEs4; HttpOnly; Path=/\", \"Etag\": \"\\\"sha256:ffccee92463b6d07d0c24a4834988396197d4b4d6f1b962dccab08d2503de08f\\\"\", \"Date\": \"Thu, 11 Oct 2018 17:32:00 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Content-Type\": \"application/json\", \"Content-Disposition\": \"attachment; filename=1-rose-colored_rifle-msg.gpg\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\"}+3": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n}\\n\", \"headers\": {\"Content-Length\": \"468\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMSBHTVQifX0.DqEakQ.7QOj9jp6BKASlpyampy-sFJZrZs; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:32:01 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index 87cf7c34d..2fdd5ad44 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"pyrrhic bullfinch\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCUBEAC91OgTBsFOm+JJGl7i+jS/oR6ARJM88227D0YjqHJgoCTriTbt\\\\nrVcqgYK1w0zS2p60UIAiuPBKHkRS1Qs362AYvi8XJQwt6bmaz7Rg09j5ctugmN+L\\\\n/4lDHtVgs08Nw0BkOvj/ZGAaSHS72DI8XoPNoZ8GNSRYO/JWZD1lz3QxT5vstNbU\\\\nj6514BWs/tfW9jItGBbycUSTaPeAuez20ipqn9VoaTMWDcl1rwHiKGbI4QDU3rqu\\\\n4sWB5fGgwJmfZWa3TVaTLyluhaMac9TaXgVrGEAKLbDaNrxxQ8ChFmAlwHMrWCn0\\\\ne8yi/JnIYAXwzFA7fbFQf8lNIWQdNmLf+FCsInn6g7qafXIU/VeWCosy06XrZBaV\\\\n5nzNLrb0pcrRJVfUDAKmdwkJB6J/trNdt1N8udgfGcP9REquB5io+pnR7tK0/DTI\\\\nS8R+XN87n1w3eQVPhrvK6qK3i/NznA0nArfj72tnCiWrt9/F9z/Ioc9zdxjEzz5j\\\\niWLPeUBriITWTteVgSsBl+BLud5xYloIt/G+eLrr8SrtGhbLioTz2RMzpFtCw467\\\\nIMIlcsL+zgQGXIOsAy1vHpJ1z3qPQmOObY08GaPVXa3y4Pd63vOs+V8a1aWIDJ7G\\\\n69E7qW8C5Oee0wf60/ZWQsLe9e6iZZ2HY/MOO/+xhRKtGk9bslacbW/eaQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFg1V0ZQRVFRWk5IMlBSMkVWRkRWUlBBNVBW\\\\nMlFOSUlJS0lVN1dLVUhJN1FaNFNIVDJLUUpUQzVSN1kyR1FWSVY3NVVRUEdGNTVa\\\\nSUZDQ1hVRFcyTlpJS1RCV1BPSzdXRUMzWEVYWT0+iQI/BBMBCgApBQJbvxwlAhsv\\\\nBQkB4VKbBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM8iEngabb2F9tw//\\\\nY+sO2m8VgurxgxR5QGHVX1O9/pctQGaixw5JNfIXc3pB+5RRzshafdgZYG4Ti/9b\\\\nELLWqj5MHvVVwXiWsIDkjTz7braNijhvlE+RHp8sUaFgr8Ey7pO2VoW5da9mjL6a\\\\nMU9BqK5QaJEklcSuV2phTJZaczE1qA6t7tEbj+91g8HFU80/70hrMXDKjT4YkjEH\\\\nZ627aVJCf5b8/sEDqJS6yrBVl9U8voqtk0/XrCEx+1oD+RsJfTa/ELA+NiUk1kMx\\\\nMss6ypf7j9JfqYs1jqrIA+NKVNiAUy9J8yFZ5VEGHPwxLLJX3lnooxjuxg52oI9V\\\\nn2rEzf3GNXA7+xGqvMCeetHUFONUWE56OCgySULi3ptmQlraQI66DWMn/QBMYrFF\\\\nGE7CA3Vki4JnvX5GwbbKhpOqef/xJsInHWdfZZFT21P45vF2s4fvAkAwjVekur14\\\\nKIbe7kbWYuQBG2hhC6TWd9M6Gwta0uQWTz6UBB+gz7RoRqsDKNU1dlHmbQLjClr6\\\\niTC+NNPrKqzsE62+LUv5srmTuMCRTSPwWhqCKH7Av9FjqUPiWo9Yu8e/oJZcRl72\\\\nG863e0wI2vaPUjxbd2jCGs+WxHACWu/2/CcF+4ZqUVrzdxockIRJQEz4a0L8EGuc\\\\nLqzFDGlTiJCPb6umd5aoRyU3eSKAb1fhhZyUt/DRTS0=\\\\n=l0jn\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:19.113278Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\", \\n \\\"uuid\\\": \\\"7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"holier-than-thou naturalness\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCkBEAC2NvMI+VEwhOK4eu9kbAya+1yhZ08v5+DUi+C6vyj5CsBuFpeV\\\\nH3yDGmFjv9I7mY+1InJYS91BnjWKT65XbYqP/NKHQ9Jljbx/wPxSJcWsw45qugez\\\\nAuDUFlANGJsGVTnMJBquJQnoO5Pl/RmMYMKO2RTN1nymhoNismXjZz/wHSvpy571\\\\np06YJsXA6Uq/xn2G82/OskoM1tcJRMwL53nq9rLUqTdhF4pWQp7Nh4p3/2apZbQW\\\\nRUS5/4JLjaIReTFt4C20q7wnqRtLGVco9CsSNiOjcDhpfeL9rl2nf+SzKSEyJQzC\\\\naEXCtGvMtYtGR89A2fzUNaHhfuKHaWX4jeo62pLkIbhBBB40dZcZ6NWkTlBo37yC\\\\n6gJfFTX6O6P4bMfItyVHSa34c3NKac6WqeTlNteZlGopLyBIiJtpgc1C7Kf2KBH9\\\\nEESCfpkrQqtpVmW63n2cvXnm2WAZJ8oJV2jZk9XPfz0mpGgPM580ScAgVl314yK6\\\\nqmcjtab0wFIqnU4c51qWHzdBiVZcLKVn/rtI7wPqdKvOb1OnXYPtvUSJgHpoR6Sc\\\\nLMuiroY4XS9kpLAoROvK1ciyzBd+J8djYgwjyAsQ6og+/x483PDFkl6zOk1+84xP\\\\nIfLZtzgIZYDsH7VnPV+mWt+mGeBkDP9Ezqqswhbpdeb4ctqz8zuBvnb0tQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RkhHVzM3Slo2NFk0NkRIVlNJRFNQNk43N1ZO\\\\nNUY3NElCUk9FNkVGQzZWUVpSNEJHR0JFWUpCRzdMM0FMVjRCRkhENVhSQVJZMklC\\\\nNDZDQU9CRkFPWFZNQlhYNUZBQzVLUEc3NlNOUT0+iQI/BBMBCgApBQJbvxwpAhsv\\\\nBQkB4VKXBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQB4I9PSjpdUJPiBAA\\\\ngDzkml+OCgaWfbIJGCCkhqMMqq30FlfBx0lU93/G5GBQQicmV5WBS9wfAU+TuKVY\\\\n79y1jB067nfwaN7ya60UrjU+zHSVVWvpLvMNKMBV/ZdGgpJ3VNwW5S78yKyPSMhR\\\\nN9gnPOFjpv+FxZg8yHRDH/C4xk4QkwF24yKGZMlhJ5ejXIrfhEnktxW6RbXLy+qR\\\\nYalZnDIC4NWKwzqUj+oafZibdaYhDgXg2l22E7Q+oKYa6JhadIrgcSKya+2diI+S\\\\nojK6P+bYzZ2S9YpuKiLwr8e2Zd4+QJPlcMlAHtv74OXrSBYd3YxfR22g386udvB5\\\\nfhOJZ2KMvM4eY62aVZP10r8qq3+TcNMhbvds3+onP9m3AZjpHu3qfjIxsU5z1StH\\\\nZsqTlo4GsCqVJ1sI5lwVd21Be4zU/o1clcfslSUA2z3qhAuJTua+VGSTzIlQXWNl\\\\na4gD4G1N9vxVq9+R5iBhmR1R/HWQQHzcIfGXGfwZZnJ7mCKiyolK5BzjeuXwJAcB\\\\nJd0i292n4X18Qt3QRZpoPNv98zlXmDpOvx0tx7YVtBMnk1PMGCvO9FBMTCSuBAHq\\\\nZcrFZ/WYMC1zuIqMSb8HG/A8uSPZROsXLmg4NFTZVKBdD+qM2KzVKkP0M0CBwm2N\\\\nQ6Rprit71tO9Q3tgA3SAI8+p7TUrlr8Q+d6l2EvZepU=\\\\n=F9qf\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:26.387946Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8\\\", \\n \\\"uuid\\\": \\\"425d1364-e30d-405d-8767-81274ab8e7b8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"5248\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0OTowMSBHTVQifX0.DqCuDQ.XSsO2pLvYr9ZLTFVX6hes1KlJNo; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:49:01 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\", \"body\": \"{\\\\\"reply\\\\\": \\\\\"hello\\\\\"}\"}',), 2)": "{\"status\": 400, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0OTowMiBHTVQifX0.DqCuDg.0qox_zY8ebFaIVMf7cmZq58AnXw; HttpOnly; Path=/\", \"Content-Length\": \"56\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:49:02 GMT\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:02 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2630\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMiBHTVQifX0.DqEakg.WapJ1mFcEOp9c-jO_OpQyMpmIvg; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"status\": 400, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMiBHTVQifX0.DqEakw.HI9_y2Vzvg4gIV4oW9d3b93mooY; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:03 GMT\", \"Content-Length\": \"56\"}}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 544631e58..5cb6b6026 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMiBHTVQifX0.DqCsfg.GSJj_T6bDKK8eMGxx7EMpvAu0y4; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"166\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\", \"Content-Type\": \"application/json\"}, \"status\": 404}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\"}+1": "{\"headers\": {\"Content-Length\": \"166\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:03 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMyBHTVQifX0.DqEakw.GmE0nwEjrDgbnUq1aydIahPgfuk; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index 7542194d6..2df523411 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"5237\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMyBHTVQifX0.DqCsfw.66XGdzcWDccaxbrr50iM3307nNc; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:23 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\"}}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/flag\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:42:24 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNCBHTVQifX0.DqCsgA.SVyzZA2RY19kTtoGn5aYIVKywvQ; HttpOnly; Path=/\"}, \"status\": 200}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2528\", \"Date\": \"Thu, 11 Oct 2018 09:42:24 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNCBHTVQifX0.DqCsgA.SVyzZA2RY19kTtoGn5aYIVKywvQ; HttpOnly; Path=/\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"2630\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowNCBHTVQifX0.DqEalA.YnCiXo4a3RR2VnIZtJqYfII1X0o; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/flag\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowNSBHTVQifX0.DqEalQ.eYHj2mFSrAWyJ6FnsipX2X22U3A; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:05 GMT\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\"}+3": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:05 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2530\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowNSBHTVQifX0.DqEalQ.eYHj2mFSrAWyJ6FnsipX2X22U3A; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index cf632b3a1..203d7ac8e 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NTo0MiBHTVQifX0.DqCvng.H3ANc_rMkG7UpTutU3DwmrKh4XI; HttpOnly; Path=/\", \"Content-Length\": \"1971\", \"Date\": \"Thu, 11 Oct 2018 09:55:42 GMT\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/568e17fd-5492-4f99-af5d-9da8095892b0\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"568e17fd-5492-4f99-af5d-9da8095892b0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nineteen_pyrite-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies/4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"4c0e9be1-e6d0-4124-a59f-15f3e471b779\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-wingless_howler-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies/a7d1ce73-60f5-4a40-a571-4a151a5e8bd2\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"a7d1ce73-60f5-4a40-a571-4a151a5e8bd2\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-wingless_howler-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies/61746472-907a-43e4-9da9-66fa305e5430\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"61746472-907a-43e4-9da9-66fa305e5430\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-corinthian_bran-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies/e6583ca6-c267-49d0-baee-b47a55bbc916\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"e6583ca6-c267-49d0-baee-b47a55bbc916\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-corinthian_bran-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies/4de16fb1-5373-4485-a699-dfb1b4251e6f\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"4de16fb1-5373-4485-a699-dfb1b4251e6f\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNjo1MCBHTVQifX0.DqEbsg.1eoer66-yvWHTTyUVA-eBl7bLUk; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:36:50 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"1957\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index 46d1c7f7d..bbd1f6923 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2049\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNSBHTVQifX0.DqCsgQ.6M0Yht05o8rM_UA6VhLI5iTlCyk; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:25 GMT\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/7445cda3-4bd0-4b73-9c7a-2e1c79c103fc/download\\\", \\n \\\"filename\\\": \\\"1-cephalopod_postage-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/7445cda3-4bd0-4b73-9c7a-2e1c79c103fc\\\", \\n \\\"uuid\\\": \\\"7445cda3-4bd0-4b73-9c7a-2e1c79c103fc\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/59a9fdfe-9c39-49a5-9d67-7e9a0fadef6d/download\\\", \\n \\\"filename\\\": \\\"2-cephalopod_postage-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions/59a9fdfe-9c39-49a5-9d67-7e9a0fadef6d\\\", \\n \\\"uuid\\\": \\\"59a9fdfe-9c39-49a5-9d67-7e9a0fadef6d\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:34:56.537133Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwODA5NiwiaWF0IjoxNTM5Mjc5Mjk2fQ.eyJpZCI6MX0.DJS73iQrlXFKmpTAGX5G1kT_35qGJTH5TYB4Vyhe850\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNDo1NiBHTVQifX0.DqEbQA.IY36ZE2JKCoToMoPVznvSrgzgc0; HttpOnly; Path=/\", \"Content-Length\": \"188\", \"Date\": \"Thu, 11 Oct 2018 17:34:56 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/e2d452d4-5073-498b-b66a-17f7d4d08d5c/download\\\", \\n \\\"filename\\\": \\\"1-wingless_howler-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/e2d452d4-5073-498b-b66a-17f7d4d08d5c\\\", \\n \\\"uuid\\\": \\\"e2d452d4-5073-498b-b66a-17f7d4d08d5c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/46c91d7c-091f-487b-8b0b-c89808b6573e/download\\\", \\n \\\"filename\\\": \\\"2-wingless_howler-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/46c91d7c-091f-487b-8b0b-c89808b6573e\\\", \\n \\\"uuid\\\": \\\"46c91d7c-091f-487b-8b0b-c89808b6573e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/5ba450ac-ea4d-45b0-8040-bab6510679fe/download\\\", \\n \\\"filename\\\": \\\"1-corinthian_bran-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/5ba450ac-ea4d-45b0-8040-bab6510679fe\\\", \\n \\\"uuid\\\": \\\"5ba450ac-ea4d-45b0-8040-bab6510679fe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/e9c56553-c926-41a2-a55d-1cc628edf1e7/download\\\", \\n \\\"filename\\\": \\\"2-corinthian_bran-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/e9c56553-c926-41a2-a55d-1cc628edf1e7\\\", \\n \\\"uuid\\\": \\\"e9c56553-c926-41a2-a55d-1cc628edf1e7\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:34:57 GMT\", \"Content-Length\": \"2041\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNDo1NyBHTVQifX0.DqEbQQ.8uz5qe-ivXs3UkFB1zBRxub33uU; HttpOnly; Path=/\"}, \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index fd7326413..75269354d 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/user\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T09:48:42.486824Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"645c7b1c-6d91-4950-b489-fd4192270c0f\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"151\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:48:43 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0ODo0MyBHTVQifX0.DqCt-w.CUELq9HqxVXpsj1BdhUiWnecokI; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"headers\": {\"Content-Length\": \"73\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:08 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOCBHTVQifX0.DqEamA.Rz19VDYyhFF2_UvVptjQBdct478; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"151\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T17:32:07.242517Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index c528b520e..a93da6a69 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nocturnal differential\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HW4BEACqn0uMSspP8VDVFSxHPAw2pmXcl+G7hqjFx8H8BIIOE+BAWFvB\\\\nLNQaS78mpVhRHNs79cfyUwq0SsRYpjd2WNWGd41JpFqZYZ+S6Y6f4ZCbDCbaMaQ7\\\\neRayWd3lDJP/pyycZ6q7CWbcHYi3A41kTSWhDJD6xJL40sOGUWBMSsfAEKQnOHmw\\\\nF0G0qZOvGcuLyVXx7gAyDnknlFEypFLbEr2Fn7zVPjfqxEfVmYMHnkWTM37nIlVn\\\\nely3nH1GdzQzMU809GajxSsg27StuvyWCkOBitc+cXkNluPjQdGlgPSb4UaOB23C\\\\nptLkcPgeiUv9PT0D//KLYLXmnem7yOBZpuIV5py2f0oWbp9NiPeXoKqtxC15TIuW\\\\n848kT3BwY/yrNhZmGSC+o0rvetPHrykN2s/i7FISD6ajZj4+LxCjilTQknTBvA7s\\\\nminWpiPKpi1bXpLIrXhb2F2039dkM2tIW3TBrQw9enMFopH1cZjDR9/J+c5Q/0k5\\\\nBF04RSrpNCOI5MRawJ3elkA/JFxv/2YRiFimma1hW+kUBjTBBWc7UiUZ/jTAU3+4\\\\nDsKD+GOdknayxJ4/OiQZbyWVLuRZVkO/hgQUc4lQgbNzS3zGVx8aDkLnIvhrvDu2\\\\nBhoeOj4y8upwa4cofvjn0bZJ+tI4N4xKPp4MPHrtqwjGeUQczItZM88yWwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VExRNjJFTTZXQzc3TUhIT0pYNDZaUUhPNUUy\\\\nR1dPR1NMSVlYTzNBQUc3N09GQU9ZQ1RWSVkzTzdPNVgzNjZOV0dYVlRBWlQ1RUJJ\\\\nUDdaRzRUNkhNTlVXT0hYSk9CS1hTVFU0RUZPUT0+iQI/BBMBCgApBQJbvx1uAhsv\\\\nBQkB4VFSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuil5VEEPKEOwaA/+\\\\nOY7+KEuaCeIIVgrGbzvKbPxwIAhpaeac/GQ8C8ypccWM3+bytRMcOjHhc/UuRYet\\\\nTnZro8x+ROWLshGaveIUD39WYfbFM3DLoY8jbuPGfhCrxgMU1D0tOOlAPRXiZ2pt\\\\nDN25yjh9iIA7w5Fjx3YByGf2YBlk0EPn87QJX5RWeOlehVTeOx25+J2Dqoo/oagN\\\\nsp2SDBC8YHUYen1JxAUSe072CWJ+Fpox9tL7JQ+B3n6qI7mgrGmZzxUc4Vrl5mjR\\\\nndTYI0zPTcRTxiQRRw4962QiwRaTP5PT6KshQNlLxjDZnB9sVkdpgX4FUY7udjIz\\\\n/H/5JEaEiqy7/wRY6pIOBWzxxhv/iClnH5BIgBzUvRhthZFd6WyI4tYSuY4vn7XK\\\\nywboxNqBauMB8qoIM6BpRGdiIaRmzfPEyxCyvm1DN03RjmjS5yVEIHB0vlLQgaU4\\\\n4gUvPqtNOJ0bDXv4QRHOGWBqYodRpDiW9NGbTguhkx4gF2zIq/T1VMWlF1IYEVUB\\\\npVkt0Y/lZs0ma4mjYt8u+7AQPl4UrLJ/n2gF0yGR+10JkAIChlfhSKmgTCRukLu9\\\\ngG4r/eMKIK2JQ95bshFcG6tqwVTLijGd/HqyTtpCJrgc6KS024MDaISBFz82ahgs\\\\n0/T9DHB0Xh6Il3pMPP7XqbMbKhcq2t+pXqWccvGYDYY=\\\\n=nw9g\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:48.829169Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"94daa38e-82d6-4efe-97f8-55b9659f03ea\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nineteen pyrite\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HXIBEACtKFiy1Ude/EM7G0tQGVNkRaiN5k2og+3N9I4vHsj/wfmOxMxG\\\\nia0UKGVcVwcObBuvNo6Fwfrrj3ufhGhTHhjObEQP2ISa3XGO3YfsHBBgAu7x0ymh\\\\n49MhmAncrXJ6KOMCgPXNHMi4zms0FN3YfAaj8yVTkOm/F8Qjeh8Dh+TfCnmV09W5\\\\nP6QLCaGKGj7wYLlLefk6yUCpH8C/Lx0TUtalOLWqp3H0MIZwKfPRAZB+y+XLyUKW\\\\ntkk2MW0wVZwxHX92kyqPqNF90E6yH9474lcIfFDadJg15QL63lRT2M0deOxiNF9C\\\\n2EsZE6a37TjNjRMNK50BiUE+lFca+1vHas46kB9EtIABUH/0shclbqBYlu3SXhMN\\\\n6ShhR6LzfTBt5wVzheGiu49xRNV5CYXA1dnZ5pPMdVvkIKbdKHLn+3ZRkH8mEyaG\\\\n8etC7WMJimdgZkOFrP6BiqmdQm2vgQ0x/ChAj6VvhjFvPMztlhyB4OMC7233uL9d\\\\ngOoq8AXFVJYhK86qrV7neGg38565IsMqIdI4nvs8wxX55ikHWCIq/4dfgJMaOhBz\\\\nRbO5RkPN0XbI7+xqfgurb/PugbSCrsD1jjGs0PVfb+nO32KDtY3hwQ3CvT3JNH8N\\\\nxf9thTBS3sQSZ2cu+D4SVNaLbimvXFaJ6OWlBZHzuvQgf2cYG7oeSsIb8QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WkVPUkk2Q09GM1hDWkNZR0FQMkNINk5CWElI\\\\nUFJFN1YyWURIV0pHU1pCWFpRQjMyV0dHSUVHREJDWktDRENGNlRVT0NJSzZTTlky\\\\nMjNLS09HQkhCRFVUN0pHRk5NUkFaNkM0MlFLST0+iQI/BBMBCgApBQJbvx1yAhsv\\\\nBQkB4VFOBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM66KeBITQQSY3w//\\\\nT5QcaLwUIVA5elIYDzgDFLO/ZM7xQ9D4tZ1q2yYDluOmzfMqqt14lXRNIPYMevvg\\\\n+lH58t4SXRTv1LlWstdsRBmKEc9VSPCU7y6FTRD1rZQ6JmfukP6xxsWLAWDkjkXY\\\\nQBFrLQI/s3a2jXwwXk31v3hkb7Vk/SxVAywdVQt/ENyfRGklbHEWwGhPUxQ0E7Pe\\\\nWTS5HTO2P1qat9EqgGzOEttcgVyuJdSU4uAQMozNwb046AxZ62UYvW93sgj0MaaO\\\\n7rcxZVY6tRfEYubAIr5nAfKj1P8mwzT0TTEMx6ezSstsrUZROf3ekXLKjdqh6MDL\\\\nJMRiLmGUKnXmwbCM0g7o7AZUVT+i9EdxYiepmAPfXkG3/CjeXBT6XXNdUGFR0TJH\\\\nMGa7E2VGZPyrdrhPkTRRgW1JDuY9wsmn/QsPZT2OylqLy/WbbRlnvoffRSBubfPF\\\\nOF0TRaj38/WRQIDrTo9YeD/2hO0I2yvmNMM9X1ZkLhE8clTnwGjjUKssRTuWBwg3\\\\nKGh33gPjo1sTkEQq3XTFiiKrrtjflbNFilVzIaFa++Jzq6xunyaVL7ECVszMaPAD\\\\n0TKRfY0IP9jXCZsmnYn4rUO/yWa8+P7tuAtmJv9Gq4k6lEK/iwkgRVtydt5zWIzU\\\\n0bUq6WT17kV2ElFWjEa4cR5U2G43pJKVU3wAxClPJeo=\\\\n=UDs5\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:51.475725Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"06ffd7cd-4415-4642-a37a-58ec723b014e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:53:08 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MzowOCBHTVQifX0.DqCvBA.ORkygLticceZrE9B9S1TWJGhVRg; HttpOnly; Path=/\", \"Content-Length\": \"5240\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:53:09 GMT\", \"Content-Length\": \"1003\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MzowOSBHTVQifX0.DqCvBQ.1q7mFym_1LTlKHUtjoRHMSXDVOw; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMCBHTVQifX0.DqEamg.dT-dB-JqNy2NCg1RuIf7JxmV4kA; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:10 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"995\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index c748584d2..598ef056c 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:54:43 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5240\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NDo0MyBHTVQifX0.DqCvYw.FJ13CKY_OLxiYpptXi8OyU2ik4s; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nocturnal differential\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HW4BEACqn0uMSspP8VDVFSxHPAw2pmXcl+G7hqjFx8H8BIIOE+BAWFvB\\\\nLNQaS78mpVhRHNs79cfyUwq0SsRYpjd2WNWGd41JpFqZYZ+S6Y6f4ZCbDCbaMaQ7\\\\neRayWd3lDJP/pyycZ6q7CWbcHYi3A41kTSWhDJD6xJL40sOGUWBMSsfAEKQnOHmw\\\\nF0G0qZOvGcuLyVXx7gAyDnknlFEypFLbEr2Fn7zVPjfqxEfVmYMHnkWTM37nIlVn\\\\nely3nH1GdzQzMU809GajxSsg27StuvyWCkOBitc+cXkNluPjQdGlgPSb4UaOB23C\\\\nptLkcPgeiUv9PT0D//KLYLXmnem7yOBZpuIV5py2f0oWbp9NiPeXoKqtxC15TIuW\\\\n848kT3BwY/yrNhZmGSC+o0rvetPHrykN2s/i7FISD6ajZj4+LxCjilTQknTBvA7s\\\\nminWpiPKpi1bXpLIrXhb2F2039dkM2tIW3TBrQw9enMFopH1cZjDR9/J+c5Q/0k5\\\\nBF04RSrpNCOI5MRawJ3elkA/JFxv/2YRiFimma1hW+kUBjTBBWc7UiUZ/jTAU3+4\\\\nDsKD+GOdknayxJ4/OiQZbyWVLuRZVkO/hgQUc4lQgbNzS3zGVx8aDkLnIvhrvDu2\\\\nBhoeOj4y8upwa4cofvjn0bZJ+tI4N4xKPp4MPHrtqwjGeUQczItZM88yWwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VExRNjJFTTZXQzc3TUhIT0pYNDZaUUhPNUUy\\\\nR1dPR1NMSVlYTzNBQUc3N09GQU9ZQ1RWSVkzTzdPNVgzNjZOV0dYVlRBWlQ1RUJJ\\\\nUDdaRzRUNkhNTlVXT0hYSk9CS1hTVFU0RUZPUT0+iQI/BBMBCgApBQJbvx1uAhsv\\\\nBQkB4VFSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQuil5VEEPKEOwaA/+\\\\nOY7+KEuaCeIIVgrGbzvKbPxwIAhpaeac/GQ8C8ypccWM3+bytRMcOjHhc/UuRYet\\\\nTnZro8x+ROWLshGaveIUD39WYfbFM3DLoY8jbuPGfhCrxgMU1D0tOOlAPRXiZ2pt\\\\nDN25yjh9iIA7w5Fjx3YByGf2YBlk0EPn87QJX5RWeOlehVTeOx25+J2Dqoo/oagN\\\\nsp2SDBC8YHUYen1JxAUSe072CWJ+Fpox9tL7JQ+B3n6qI7mgrGmZzxUc4Vrl5mjR\\\\nndTYI0zPTcRTxiQRRw4962QiwRaTP5PT6KshQNlLxjDZnB9sVkdpgX4FUY7udjIz\\\\n/H/5JEaEiqy7/wRY6pIOBWzxxhv/iClnH5BIgBzUvRhthZFd6WyI4tYSuY4vn7XK\\\\nywboxNqBauMB8qoIM6BpRGdiIaRmzfPEyxCyvm1DN03RjmjS5yVEIHB0vlLQgaU4\\\\n4gUvPqtNOJ0bDXv4QRHOGWBqYodRpDiW9NGbTguhkx4gF2zIq/T1VMWlF1IYEVUB\\\\npVkt0Y/lZs0ma4mjYt8u+7AQPl4UrLJ/n2gF0yGR+10JkAIChlfhSKmgTCRukLu9\\\\ngG4r/eMKIK2JQ95bshFcG6tqwVTLijGd/HqyTtpCJrgc6KS024MDaISBFz82ahgs\\\\n0/T9DHB0Xh6Il3pMPP7XqbMbKhcq2t+pXqWccvGYDYY=\\\\n=nw9g\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:48.829169Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"94daa38e-82d6-4efe-97f8-55b9659f03ea\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nineteen pyrite\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HXIBEACtKFiy1Ude/EM7G0tQGVNkRaiN5k2og+3N9I4vHsj/wfmOxMxG\\\\nia0UKGVcVwcObBuvNo6Fwfrrj3ufhGhTHhjObEQP2ISa3XGO3YfsHBBgAu7x0ymh\\\\n49MhmAncrXJ6KOMCgPXNHMi4zms0FN3YfAaj8yVTkOm/F8Qjeh8Dh+TfCnmV09W5\\\\nP6QLCaGKGj7wYLlLefk6yUCpH8C/Lx0TUtalOLWqp3H0MIZwKfPRAZB+y+XLyUKW\\\\ntkk2MW0wVZwxHX92kyqPqNF90E6yH9474lcIfFDadJg15QL63lRT2M0deOxiNF9C\\\\n2EsZE6a37TjNjRMNK50BiUE+lFca+1vHas46kB9EtIABUH/0shclbqBYlu3SXhMN\\\\n6ShhR6LzfTBt5wVzheGiu49xRNV5CYXA1dnZ5pPMdVvkIKbdKHLn+3ZRkH8mEyaG\\\\n8etC7WMJimdgZkOFrP6BiqmdQm2vgQ0x/ChAj6VvhjFvPMztlhyB4OMC7233uL9d\\\\ngOoq8AXFVJYhK86qrV7neGg38565IsMqIdI4nvs8wxX55ikHWCIq/4dfgJMaOhBz\\\\nRbO5RkPN0XbI7+xqfgurb/PugbSCrsD1jjGs0PVfb+nO32KDtY3hwQ3CvT3JNH8N\\\\nxf9thTBS3sQSZ2cu+D4SVNaLbimvXFaJ6OWlBZHzuvQgf2cYG7oeSsIb8QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WkVPUkk2Q09GM1hDWkNZR0FQMkNINk5CWElI\\\\nUFJFN1YyWURIV0pHU1pCWFpRQjMyV0dHSUVHREJDWktDRENGNlRVT0NJSzZTTlky\\\\nMjNLS09HQkhCRFVUN0pHRk5NUkFaNkM0MlFLST0+iQI/BBMBCgApBQJbvx1yAhsv\\\\nBQkB4VFOBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM66KeBITQQSY3w//\\\\nT5QcaLwUIVA5elIYDzgDFLO/ZM7xQ9D4tZ1q2yYDluOmzfMqqt14lXRNIPYMevvg\\\\n+lH58t4SXRTv1LlWstdsRBmKEc9VSPCU7y6FTRD1rZQ6JmfukP6xxsWLAWDkjkXY\\\\nQBFrLQI/s3a2jXwwXk31v3hkb7Vk/SxVAywdVQt/ENyfRGklbHEWwGhPUxQ0E7Pe\\\\nWTS5HTO2P1qat9EqgGzOEttcgVyuJdSU4uAQMozNwb046AxZ62UYvW93sgj0MaaO\\\\n7rcxZVY6tRfEYubAIr5nAfKj1P8mwzT0TTEMx6ezSstsrUZROf3ekXLKjdqh6MDL\\\\nJMRiLmGUKnXmwbCM0g7o7AZUVT+i9EdxYiepmAPfXkG3/CjeXBT6XXNdUGFR0TJH\\\\nMGa7E2VGZPyrdrhPkTRRgW1JDuY9wsmn/QsPZT2OylqLy/WbbRlnvoffRSBubfPF\\\\nOF0TRaj38/WRQIDrTo9YeD/2hO0I2yvmNMM9X1ZkLhE8clTnwGjjUKssRTuWBwg3\\\\nKGh33gPjo1sTkEQq3XTFiiKrrtjflbNFilVzIaFa++Jzq6xunyaVL7ECVszMaPAD\\\\n0TKRfY0IP9jXCZsmnYn4rUO/yWa8+P7tuAtmJv9Gq4k6lEK/iwkgRVtydt5zWIzU\\\\n0bUq6WT17kV2ElFWjEa4cR5U2G43pJKVU3wAxClPJeo=\\\\n=UDs5\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:52:51.475725Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/06ffd7cd-4415-4642-a37a-58ec723b014e\\\", \\n \\\"uuid\\\": \\\"06ffd7cd-4415-4642-a37a-58ec723b014e\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:54:43 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"1003\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NDo0MyBHTVQifX0.DqCvYw.FJ13CKY_OLxiYpptXi8OyU2ik4s; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"d967dbde-d2c7-4f55-98b2-2ae820eb8ae8\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:54:44 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"449\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1NDo0NCBHTVQifX0.DqCvZA.OeNEt2N5NqkGSujcUrEtvzGEsMs; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"filename\\\": \\\"3-nocturnal_differential-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"32c5661b-7e2c-4707-8fdd-61148721c00a\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea/replies/5c614d2b-0371-4272-8bb7-ed2325275fec\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/94daa38e-82d6-4efe-97f8-55b9659f03ea\\\", \\n \\\"uuid\\\": \\\"5c614d2b-0371-4272-8bb7-ed2325275fec\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2629\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMSBHTVQifX0.DqEamw.VieMcDALyGO4xtkbAmgdd_HMz-U; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"995\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMSBHTVQifX0.DqEamw.VieMcDALyGO4xtkbAmgdd_HMz-U; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:11 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\"}+3": "{\"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:12 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMiBHTVQifX0.DqEanA.F5IaGeYQZ7c8kZLzBx42r47OYEw; HttpOnly; Path=/\", \"Content-Length\": \"445\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\"}, \"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index 8c719558f..b7ed5911e 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNiBHTVQifX0.DqCsgg.20FXbqc0ZpuIdjZSVUK7-Rni2gw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:26 GMT\", \"Content-Length\": \"5236\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNiBHTVQifX0.DqCsgg.20FXbqc0ZpuIdjZSVUK7-Rni2gw; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:26 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2528\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMyBHTVQifX0.DqEanQ.JhUzbQtUDYNcqbhelVEGb3H90Go; HttpOnly; Path=/\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:13 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\"}+2": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMyBHTVQifX0.DqEanQ.JhUzbQtUDYNcqbhelVEGb3H90Go; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:13 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2530\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index d8eda408e..433acd1e4 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:27 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNyBHTVQifX0.DqCsgw.KQO_xqUpwAi1vKqLg0lkm18C-Fw; HttpOnly; Path=/\", \"Content-Length\": \"5236\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2528\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:27 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyNyBHTVQifX0.DqCsgw.KQO_xqUpwAi1vKqLg0lkm18C-Fw; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:14 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNCBHTVQifX0.DqEang.L7VrOza7MVY92H8EYjyCr2mVB0c; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\"}+2": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n}\\n\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:15 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNSBHTVQifX0.DqEanw.eOwz0Qy3h2kwC9vdDZFFnvDqXeU; HttpOnly; Path=/\", \"Content-Length\": \"2530\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index 7c3fc74fa..01382aa27 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyOCBHTVQifX0.DqCshA.L_5t9P-IO-dOkXMHMKsdaO1mnig; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:28 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"5236\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"wingless howler\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZMBEACUDbVOFlpWWeOugPWX5dX1sBGaduX1P01XO27dgFUedd7Rqe51\\\\nNLelyIWFocRg+Ee+c0sskEr+zih3s4n+A4Vjyn2fZjapaoHYCbosv8A1C9AXtQip\\\\n6F5k099stXUsl2iP3q5Bq1r4osWXH6z6/5pWYpl8JdLEpbx2K1OmVr44PaCO3wTA\\\\nlzHTYJYtDV9ZvQzJbD76nxD+rsueUKTjTQ32ot51QG0mQmcX3d+PTOlbOodMsu9d\\\\nnOfTf7JeYg/7eLlP3ACVUHgEwNvNvcAVXMpIvHbcAYWM1iHsDolzzqe/phs6omT3\\\\n4hBzySrxj+6eJ3TOss/uby7dPMwdrWvbRlpJv0uiuw6SaGGu0ZisnHp9j+u4fF7m\\\\nGYLf7l2GiTjwazlVfG93XfFimmr+MhRnVczY2abjezYJCUF0oNSsYyRStVnxNeNh\\\\nDvddgs4H74lZIZZBFlusTdmAyDXAILcynz2W03s6vaGmys02jnlXYBURM90OEgLI\\\\nWl7PNzzJ2AkmkO74jfdq1I5bHnIlydaDu0f4sE1BxmWOGseok6/j0LHQ/bvxCf3W\\\\n7S3rpNUPtBGbXRNPNHJyBwZTY68SJ/QmVR1qA8bO/g9eAv1fp/qZ9wGnYFoTIk2i\\\\nbTFoc4gyNAjmYb/Nb5uGthSyz5zYUgCsJqt5ED/BI/5XX5PcVI9pqmZmGQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SzZLMjJJSVVaT0pBNllSR0RHUlVGR1NDVFJB\\\\nVUZOM0RVSlhZN1dDNE9XVTVURDRSV0JVUkxQS01DSkhQUTdLU0hRN0JUV0tNSU1L\\\\nQlpCTERHN0g1QTdIVkxMUVNUMkw3TU5YTzRFWT0+iQI/BBMBCgApBQJbv4mTAhsv\\\\nBQkB4OUtBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIEt5E9hsRVoj+g/9\\\\nGS/OKtK/vup/9qp1I+b11eK3ipFts6DCGmu9WUyhtDeIeyewHxLWccWGIcLwZhhV\\\\nICi/OYrvc8ueef+G7kln2dHLoKCRLN1/qTe8FHNN7UDrG217EsCnrdySa9zdG3C8\\\\nwCxm3t81jQ7P5nzGQZ+NE1K9MQEB2kTYx7aaxED8gLk47fxCAcjq+t9eo3jq5x85\\\\n+N96ZMpPO1Dhz4lVOMEr8QEYobSZZZ1W9Uq6xr7LycNuwBE33zpKw7gzWBA3TUiH\\\\nsX8cSjaf6gVnbqQD682ayPo2x7ZljZghjGCv87ZT0yJ1fzx5U5gaYugUWxVvu1PK\\\\nHKmqjC+gl/4i5EgfWVerNSGBH+MwoNrQp10lmNhIFBKts3iVBkVerXeyHnvJcYpZ\\\\nclZagGth7pfw3RS1QFNZbTcNYnwAp0UBczKvkhwniB/BjIkaHQ3Gu8HYd3jqKEI5\\\\nV2BSPNe4mV5hKIGdelp6BA/yh1LRl6KUzHsDs5qDmgHSRychkBAEbgPsHkRqJjW5\\\\nNm0/CPUMmcX6dEMMY9OwEYVX5ZllfbzOUQlwxx2h6tG6snmewbl3USbGy/QR2Abv\\\\n3N4xRwhgFEhZChmje4KAmV7LQiZTjZg6QXO9LV4YXMr9gerAm/q4TuFk7Z5p5phH\\\\n4egWb6umT6Tj/Mud2vrYSIPu0byroQxSZbU0hYeRGAg=\\\\n=lewJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:12.587473Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:36:33 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"5233\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNjozMyBHTVQifX0.DqEboQ.gTPKFusa5NW6aSv9-LzrsyriAdQ; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index 4dbcfd63f..c51c5a025 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Length\": \"5236\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:29 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyOSBHTVQifX0.DqCshQ.pVvsrom2nWnxn9TzYBiZe-vLbSs; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyOSBHTVQifX0.DqCshQ.pVvsrom2nWnxn9TzYBiZe-vLbSs; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:29 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"1035\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:42:30 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMCBHTVQifX0.DqCshg.iThLayqhlWsZ6xaJnsdzJMs3Ne4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:16 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"73\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNiBHTVQifX0.DqEaoA.9uLYRCG-kmQ9yET--QWAqlCjqjU; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNyBHTVQifX0.DqEaoQ.sTQOA8NF77Eoq5jevspK3vSH5FY; HttpOnly; Path=/\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:17 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\"}+2": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:18 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxOCBHTVQifX0.DqEaog.y71M_hEEcATXPfTjaA6nFTi3Ir4; HttpOnly; Path=/\", \"Content-Length\": \"1038\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\"}+3": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:18 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxOCBHTVQifX0.DqEaog.y71M_hEEcATXPfTjaA6nFTi3Ir4; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"468\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index 7a0fd145c..15342f296 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Content-Length\": \"5236\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:31 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMSBHTVQifX0.DqCshw.cyggrdw8ojv2X9wh308YdP0rxnc; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:31 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMSBHTVQifX0.DqCshw.cyggrdw8ojv2X9wh308YdP0rxnc; HttpOnly; Path=/\", \"Content-Length\": \"1035\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:32 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"467\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMiBHTVQifX0.DqCsiA.9r2is49W5HKWwPk__Gpn49ymXA4; HttpOnly; Path=/\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxOSBHTVQifX0.DqEaow.ZmRzzOfpPQKIxlOmmCIZiEEFZlc; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:19 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"2629\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\"}+2": "{\"status\": 200, \"headers\": {\"Content-Length\": \"1038\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:32:20 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMCBHTVQifX0.DqEapA.vLvVcP3Gym1mhTzMw1y_ltIMvR0; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\"}+3": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMCBHTVQifX0.DqEapA.vLvVcP3Gym1mhTzMw1y_ltIMvR0; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"468\", \"Date\": \"Thu, 11 Oct 2018 17:32:20 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index 8f8fbe52b..d8c44f3eb 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMyBHTVQifX0.DqCsiQ.GZRTsp11kDQJu2T90OF8c20aMY4; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"5236\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:42:33 GMT\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 09:42:33 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozMyBHTVQifX0.DqCsiQ.GZRTsp11kDQJu2T90OF8c20aMY4; HttpOnly; Path=/\", \"Content-Length\": \"1035\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778/download\\\", \\n \\\"filename\\\": \\\"1-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/ed695db9-8934-49b9-aa84-13da718b4778\\\", \\n \\\"uuid\\\": \\\"ed695db9-8934-49b9-aa84-13da718b4778\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf/download\\\", \\n \\\"filename\\\": \\\"2-indignant_holism-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions/f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\", \\n \\\"uuid\\\": \\\"f06eeebd-c8f5-4509-85eb-5af91a34f2cf\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMSBHTVQifX0.DqEapQ.T68qYXo6bk97DCq_v50cqL58UTs; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:21 GMT\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\"}+2": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMiBHTVQifX0.DqEapg.RGKv8JAvZ4uaEOEKYK0EsjiUHak; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:22 GMT\", \"Content-Length\": \"1038\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index d2ca2858b..712d0dee5 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:34 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"5236\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNCBHTVQifX0.DqCsig.d-dD1_UDElqeAQBZ9FmzHEtCVjo; HttpOnly; Path=/\"}}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"status\": 404, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNSBHTVQifX0.DqCsiw.DEH6ebEPcsbLK9H5adCZ6XjyK1A; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"166\", \"Date\": \"Thu, 11 Oct 2018 09:42:35 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"2629\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:22 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMiBHTVQifX0.DqEapg.RGKv8JAvZ4uaEOEKYK0EsjiUHak; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"version\": \"0.1.1\", \"status\": 404, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:23 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMyBHTVQifX0.DqEapw.nTMk5oueFdGVGcFeYoiAbI7eJCU; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"166\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index ff66137db..33f32bc29 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"pyrrhic bullfinch\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCUBEAC91OgTBsFOm+JJGl7i+jS/oR6ARJM88227D0YjqHJgoCTriTbt\\\\nrVcqgYK1w0zS2p60UIAiuPBKHkRS1Qs362AYvi8XJQwt6bmaz7Rg09j5ctugmN+L\\\\n/4lDHtVgs08Nw0BkOvj/ZGAaSHS72DI8XoPNoZ8GNSRYO/JWZD1lz3QxT5vstNbU\\\\nj6514BWs/tfW9jItGBbycUSTaPeAuez20ipqn9VoaTMWDcl1rwHiKGbI4QDU3rqu\\\\n4sWB5fGgwJmfZWa3TVaTLyluhaMac9TaXgVrGEAKLbDaNrxxQ8ChFmAlwHMrWCn0\\\\ne8yi/JnIYAXwzFA7fbFQf8lNIWQdNmLf+FCsInn6g7qafXIU/VeWCosy06XrZBaV\\\\n5nzNLrb0pcrRJVfUDAKmdwkJB6J/trNdt1N8udgfGcP9REquB5io+pnR7tK0/DTI\\\\nS8R+XN87n1w3eQVPhrvK6qK3i/NznA0nArfj72tnCiWrt9/F9z/Ioc9zdxjEzz5j\\\\niWLPeUBriITWTteVgSsBl+BLud5xYloIt/G+eLrr8SrtGhbLioTz2RMzpFtCw467\\\\nIMIlcsL+zgQGXIOsAy1vHpJ1z3qPQmOObY08GaPVXa3y4Pd63vOs+V8a1aWIDJ7G\\\\n69E7qW8C5Oee0wf60/ZWQsLe9e6iZZ2HY/MOO/+xhRKtGk9bslacbW/eaQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFg1V0ZQRVFRWk5IMlBSMkVWRkRWUlBBNVBW\\\\nMlFOSUlJS0lVN1dLVUhJN1FaNFNIVDJLUUpUQzVSN1kyR1FWSVY3NVVRUEdGNTVa\\\\nSUZDQ1hVRFcyTlpJS1RCV1BPSzdXRUMzWEVYWT0+iQI/BBMBCgApBQJbvxwlAhsv\\\\nBQkB4VKbBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQM8iEngabb2F9tw//\\\\nY+sO2m8VgurxgxR5QGHVX1O9/pctQGaixw5JNfIXc3pB+5RRzshafdgZYG4Ti/9b\\\\nELLWqj5MHvVVwXiWsIDkjTz7braNijhvlE+RHp8sUaFgr8Ey7pO2VoW5da9mjL6a\\\\nMU9BqK5QaJEklcSuV2phTJZaczE1qA6t7tEbj+91g8HFU80/70hrMXDKjT4YkjEH\\\\nZ627aVJCf5b8/sEDqJS6yrBVl9U8voqtk0/XrCEx+1oD+RsJfTa/ELA+NiUk1kMx\\\\nMss6ypf7j9JfqYs1jqrIA+NKVNiAUy9J8yFZ5VEGHPwxLLJX3lnooxjuxg52oI9V\\\\nn2rEzf3GNXA7+xGqvMCeetHUFONUWE56OCgySULi3ptmQlraQI66DWMn/QBMYrFF\\\\nGE7CA3Vki4JnvX5GwbbKhpOqef/xJsInHWdfZZFT21P45vF2s4fvAkAwjVekur14\\\\nKIbe7kbWYuQBG2hhC6TWd9M6Gwta0uQWTz6UBB+gz7RoRqsDKNU1dlHmbQLjClr6\\\\niTC+NNPrKqzsE62+LUv5srmTuMCRTSPwWhqCKH7Av9FjqUPiWo9Yu8e/oJZcRl72\\\\nG863e0wI2vaPUjxbd2jCGs+WxHACWu/2/CcF+4ZqUVrzdxockIRJQEz4a0L8EGuc\\\\nLqzFDGlTiJCPb6umd5aoRyU3eSKAb1fhhZyUt/DRTS0=\\\\n=l0jn\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:19.113278Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\", \\n \\\"uuid\\\": \\\"7252d38e-3b89-41a2-b65b-83b3a54ef79f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"holier-than-thou naturalness\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/HCkBEAC2NvMI+VEwhOK4eu9kbAya+1yhZ08v5+DUi+C6vyj5CsBuFpeV\\\\nH3yDGmFjv9I7mY+1InJYS91BnjWKT65XbYqP/NKHQ9Jljbx/wPxSJcWsw45qugez\\\\nAuDUFlANGJsGVTnMJBquJQnoO5Pl/RmMYMKO2RTN1nymhoNismXjZz/wHSvpy571\\\\np06YJsXA6Uq/xn2G82/OskoM1tcJRMwL53nq9rLUqTdhF4pWQp7Nh4p3/2apZbQW\\\\nRUS5/4JLjaIReTFt4C20q7wnqRtLGVco9CsSNiOjcDhpfeL9rl2nf+SzKSEyJQzC\\\\naEXCtGvMtYtGR89A2fzUNaHhfuKHaWX4jeo62pLkIbhBBB40dZcZ6NWkTlBo37yC\\\\n6gJfFTX6O6P4bMfItyVHSa34c3NKac6WqeTlNteZlGopLyBIiJtpgc1C7Kf2KBH9\\\\nEESCfpkrQqtpVmW63n2cvXnm2WAZJ8oJV2jZk9XPfz0mpGgPM580ScAgVl314yK6\\\\nqmcjtab0wFIqnU4c51qWHzdBiVZcLKVn/rtI7wPqdKvOb1OnXYPtvUSJgHpoR6Sc\\\\nLMuiroY4XS9kpLAoROvK1ciyzBd+J8djYgwjyAsQ6og+/x483PDFkl6zOk1+84xP\\\\nIfLZtzgIZYDsH7VnPV+mWt+mGeBkDP9Ezqqswhbpdeb4ctqz8zuBvnb0tQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RkhHVzM3Slo2NFk0NkRIVlNJRFNQNk43N1ZO\\\\nNUY3NElCUk9FNkVGQzZWUVpSNEJHR0JFWUpCRzdMM0FMVjRCRkhENVhSQVJZMklC\\\\nNDZDQU9CRkFPWFZNQlhYNUZBQzVLUEc3NlNOUT0+iQI/BBMBCgApBQJbvxwpAhsv\\\\nBQkB4VKXBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQB4I9PSjpdUJPiBAA\\\\ngDzkml+OCgaWfbIJGCCkhqMMqq30FlfBx0lU93/G5GBQQicmV5WBS9wfAU+TuKVY\\\\n79y1jB067nfwaN7ya60UrjU+zHSVVWvpLvMNKMBV/ZdGgpJ3VNwW5S78yKyPSMhR\\\\nN9gnPOFjpv+FxZg8yHRDH/C4xk4QkwF24yKGZMlhJ5ejXIrfhEnktxW6RbXLy+qR\\\\nYalZnDIC4NWKwzqUj+oafZibdaYhDgXg2l22E7Q+oKYa6JhadIrgcSKya+2diI+S\\\\nojK6P+bYzZ2S9YpuKiLwr8e2Zd4+QJPlcMlAHtv74OXrSBYd3YxfR22g386udvB5\\\\nfhOJZ2KMvM4eY62aVZP10r8qq3+TcNMhbvds3+onP9m3AZjpHu3qfjIxsU5z1StH\\\\nZsqTlo4GsCqVJ1sI5lwVd21Be4zU/o1clcfslSUA2z3qhAuJTua+VGSTzIlQXWNl\\\\na4gD4G1N9vxVq9+R5iBhmR1R/HWQQHzcIfGXGfwZZnJ7mCKiyolK5BzjeuXwJAcB\\\\nJd0i292n4X18Qt3QRZpoPNv98zlXmDpOvx0tx7YVtBMnk1PMGCvO9FBMTCSuBAHq\\\\nZcrFZ/WYMC1zuIqMSb8HG/A8uSPZROsXLmg4NFTZVKBdD+qM2KzVKkP0M0CBwm2N\\\\nQ6Rprit71tO9Q3tgA3SAI8+p7TUrlr8Q+d6l2EvZepU=\\\\n=F9qf\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:47:26.387946Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/425d1364-e30d-405d-8767-81274ab8e7b8\\\", \\n \\\"uuid\\\": \\\"425d1364-e30d-405d-8767-81274ab8e7b8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MDowNCBHTVQifX0.DqCuTA.yN6ji-BR5TcdHjoWm3sRrFYXhgU; HttpOnly; Path=/\", \"Content-Length\": \"5248\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:50:04 GMT\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/7252d38e-3b89-41a2-b65b-83b3a54ef79f/replies\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\", \"body\": \"{\\\\\"reply\\\\\": \\\\\"-----BEGIN PGP MESSAGE-----\\\\\\\\n\\\\\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\\\\\n=686S\\\\\\\\n-----END PGP MESSAGE-----\\\\\\\\n\\\\\\\\n\\\\\"}\"}',), 2)": "{\"status\": 201, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"headers\": {\"Content-Length\": \"46\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:50:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo1MDowNSBHTVQifX0.DqCuTQ.aO1H1VTbl7JXbedGN79hyP9M4tE; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"2629\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNCBHTVQifX0.DqEaqA.F81DnYh6XWL90sT4uI6iuLYIpYU; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:24 GMT\"}, \"version\": \"0.1.1\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"status\": 201, \"headers\": {\"Content-Length\": \"46\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:25 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNSBHTVQifX0.DqEaqQ.jPU2jPpllUP6g6aqkwKg8TLGuIo; HttpOnly; Path=/\"}}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index 49a99ed42..2d5ade1b4 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"(('{\"method\": \"POST\", \"path_query\": \"api/v1/token\", \"body\": \"{\\\\\"username\\\\\": \\\\\"journalist\\\\\", \\\\\"passphrase\\\\\": \\\\\"correct horse battery staple profanity oil chewy\\\\\"}\"}',), 1)": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-11T17:42:22.276983Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTI3OTc0MiwiaWF0IjoxNTM5MjUwOTQyfQ.eyJpZCI6MX0.deAUus1Tq6GC3PPUKHU5WVoQPEqb3Tfee_MgzvEPh78\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjoyMSBHTVQifX0.DqCsfg.3c0Cx31IxE__yYfvDeJNG4dkDbw; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 09:42:22 GMT\"}, \"version\": \"0.1.1\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 1)": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 09:42:35 GMT\", \"Content-Length\": \"5236\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNSBHTVQifX0.DqCsiw.DEH6ebEPcsbLK9H5adCZ6XjyK1A; HttpOnly; Path=/\"}}", "(('{\"method\": \"POST\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 2)": "{\"version\": \"0.1.1\", \"status\": 201, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:36 GMT\", \"Content-Length\": \"30\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNiBHTVQifX0.DqCsjA.zsGuf7s5PhVGgAUV4HrDRtCJA4Q; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\"}", "(('{\"method\": \"delete\", \"path_query\": \"api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 3)": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 09:42:37 GMT\", \"Content-Length\": \"32\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNyBHTVQifX0.DqCsjQ._M3tpW647dvYvitT7zMcEovWUBI; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\"}", "(('{\"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"headers\": \"{\\\\\"Content-Type\\\\\": \\\\\"application/json\\\\\", \\\\\"Accept\\\\\": \\\\\"application/json\\\\\"}\"}',), 4)": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5236\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 09:42:37 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxMTo0MjozNyBHTVQifX0.DqCsjQ._M3tpW647dvYvitT7zMcEovWUBI; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"indignant holism\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuEBEAC2cRgB7M+ZfXLdeRPrFA4FSoetw7mwsqwAL1dRF5ZykfF+r/bw\\\\nwXdMfeZjvrEnw+ze1rhEeKQ1wEpQSe7trN2dt5QEnkHMuoWU877e8g/zc/pGaB+p\\\\nDp4hVUDpB3r/XZr5ps3k+Wy7o7cQnGpcwVR/4WBU+Gay8LlfVeZ8INUgJXMcq9zi\\\\nywDg7HyQQEcYdkObGTPUZh/lHLY2Fs9HeQIrI5aQ2mTOee7+7Uz/F2vUafrvNCUa\\\\nP42eudxfGW9ERK0a4tkLh/PLzUchbqLT0HAT8GlHDm47f9fBQ3OOgxG++ntbXWQA\\\\neBb9u4C9nkgK+GXSKmFjTrfkozclIL03rYKxyJL+73z38tKxO5iTOFGENbA+vJ9d\\\\npNYJfCmThZFMtdx3j0XBHmDKcZ7rZtsyoQKPESwSXDnrdzip/TriEGo4gSzo4zp6\\\\nnBdxHmJOywihxgKxta0FxrtZvSlIXoPiPpmvmdaIQOqmsGvamhW1jLhSyOzS/pbj\\\\nrRwfeIpNEeovB5ZzP8GgYyBGJmlTgn6WOdl8LFYDBnEYYZSdzV/dbb7Ro8AdTaz5\\\\nBgIqXQcYozW0ou+6+3uW2ZRkYAd7vPpSTWSczi5YJirhMI080GncU1msYfScR7Ev\\\\nnimAaXlbM/sWimFEHJWDS0r1Lmr7IvyobzbimMCbF35hy7hxphB2D30OnwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFUzVU9XUDZMN1BRQ1M2WE9NU0dMWEtTR1Ja\\\\nUDUzSVpaTDVRQ1VERERHSENTUFNEVEdRSjc0MzJYQUo3TlhSTzYyRTc1RUdPSjVK\\\\nQURaQzRTT05LQ09GQ0Q3QUhBQ05CQkdHSkxNST0+iQI/BBMBCgApBQJbvxrhAhsv\\\\nBQkB4VPfBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGgMU7lwLt1QU3Q//\\\\nbnVgz689doE0MHQTk8jkPkpeA+dTipDd2n5sQ1kDHPmyq4rptO14zqxVZwXrVRKf\\\\nPEoS6GIrJltTO30EpR9BVWLQmmZ1B6atop3UvE71Bnu5TI2SWmGPiThg06316SV3\\\\nw+Jpr+Zu4+JWuUF+bhwmh9+Qkaald9Z1K2hv3CJXku+nSQK6OLgn0uebEngllSav\\\\nkv12MgJ1ZLffvydZxeiuZLco5llus4y74A6DFg95EsvIJwrGHv9mQ009jcj8LZxT\\\\nov/9IM16+gJwhNNLSriuLcEnSaYaPMSMgGGY4gis3mFSKaM1GOsTU6zkZnb94E9S\\\\n4rtwHH7aLFFkYnfLZQJ2eyRWfNLQemT5TQVXDxi/DChoDtlOE7hq2BJziFoYgzmv\\\\nQPH3+pAn9jBNC4d2dbR8zFY157dKs5cQl8lD/D+H+oF7Q++8JNg5g4nPed+riOnS\\\\nhmnOApLiaiVsFJf/FbqS1tNNHXIJ2Lcmtb8rzv0tglfMmCL8KVlHnHKdRfIb0ZGY\\\\nYebZNuo7H/XidCqoIYMXJjg2TU28cFUWR5gSdgFoISCX+0KFAgy9N5f9K/cF/Rbv\\\\nm0FfJP35Eh0Ln64ObQb2mnCi521Bm+0OI4YX9sBujKgorFuGw/Gl5PxN+Ggv9fTa\\\\nPI9lYaZCIRIfe+lxYd2A263evQblZPgfVKQ/t/R60rY=\\\\n=egxS\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:54.702250Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\", \\n \\\"uuid\\\": \\\"3512c5bf-d362-4e3c-baef-b1dbc4505c75\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"cephalopod postage\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/GuQBEADeRoqAXBhV/MTB4ljr//73Bh0GHxHTDrKJpBwJWS1V+zKUd9G3\\\\npii8L25cGWAFD5XBf7h0Rh1L4OrbbPWo5Lp1wfGg4oJnV+KmA3QF8aC2SdTfytoI\\\\nlXv9Yu+UqfmYNBIt4WrVDLjChN0993vuDuGckEtqOBeCHcZnFzR07YjiVKLSmuUu\\\\nub/SQQAT607btrUd4AIwgleT6nQFP4BuPoS9QfxvpjILAMezic59HUleYKssntNY\\\\nCTGf9c874lS93Eu7499qnmXKzo+0KgZ99gDG8t+9GiMkig35Cus70Nr8kaonrp+Q\\\\njIrzb0twV1n2ArknPl2eaUEvH1A4/PoDnOT40g0zlGo9U/3Mwqq6WBGL4jyQlIUQ\\\\n/05a/XmC5OyxPLhr3Bu5TPN6d5Xh0lMWtM0VQDhDdrDZTJ4ueWCevsFFAmx4k62H\\\\nMDoQdrAw4zfkGiobGVqYr5+138COEDBwdk+0MsTZsizCsKO2CdX+sV42niOI7009\\\\n5Dg1LwNrDloPp1So5gAskKshbOQ97rss5OhTC7DW1NsHlqdJLS3JcGuDK3H14fnJ\\\\nfwIklnMv8VConUt6O7umI/OaVaEmjLGUoucVdxxzs3AOmoXlFASGF8vfubm3QWni\\\\nIP/KIt12CTV+pEOXRkJH4797emmx3f9VV0GuRsLju3I+eVIvpa4oDSIwwQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UExRNFA3NVo3TDc1MkRPV0I2TE9ZUk9NSEhP\\\\nRUwzN1RGTTNCUjVVNFBBUlozUlg3WFBJWlNUNVVBWFBISkJZM1VZTEdJSVY3VVNS\\\\nQURFRTMyU1VaUlYzWFFNQzc3M0JBSVNJWVZCST0+iQI/BBMBCgApBQJbvxrkAhsv\\\\nBQkB4VPcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgimLLlolhdx9/hAA\\\\nim7dinkVkDETUgjAi21b/s4bzR4plSxYEG49Jopruv4kEQf133l8OHmHIUcMSU3T\\\\n3nwWTACAMqw9IhV1vJLslivRfzKBd/voep+TIjUd/H2zvdEFhOXcobV1gQ9Rb0Br\\\\nnuviyQis1z5Th2xz9XIiQ+il7iEEGgTaY7dAUa+cNU4qLwsLiIT+0Ti4EHWEATWU\\\\nbhgnglrPJH9grbmI1h5ZYGU4wbdc8DH589Wtd6k16hbdcsF0cSucFvMn3v3X6n+K\\\\n5bCa15lVprEeO9xe09C607KLq/IoCACixh0ROJojvY/pQM5wSlk6KHjXGgiY+5T7\\\\nvbvVWKZ5etOUH25wi8vYIm0/ScRd9iOWrsEm6KRiCpaynCeLUpyH0tv1xqvk4IDb\\\\nnNYpgmIHgAV1lnTYXG06QsfKY+bG88a9DDWH+5/hY2X03wU9FHrGmV6dYs9qNvui\\\\ncwHFRATPMNNkfKy/Hcnero2hADZUfm8RfZiTgu3+YYRX73CogGjcAmB8Ne6OxMv+\\\\niI+ruaP9+Ef7Dw1kmYuZ6wpx604yVMXukkQ+lpaq+2Fh89Efm3oP7rycXmu/gvs/\\\\naQ4DeHbeqhkHwdVSxaG8PqAbJMH9DH0l8FdTxvuFzwigPR0PcRRFK00SV9xFLWPp\\\\nwPTnOnqEo+GL8D7d3tHx9uevnQZFXXJR1XEMFyUEBLI=\\\\n=DpUJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T09:41:58.769658Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/805b383d-0d44-4dd8-a2c0-18c5d0318801\\\", \\n \\\"uuid\\\": \\\"805b383d-0d44-4dd8-a2c0-18c5d0318801\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:25 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNSBHTVQifX0.DqEaqQ.jPU2jPpllUP6g6aqkwKg8TLGuIo; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:26 GMT\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNiBHTVQifX0.DqEaqg.a8ZrYgMZ_USIr99OziFFHfiNKc8; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"delete\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\"}+3": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNyBHTVQifX0.DqEaqw.RQiJ1vTnVKZX1rR1P8m8knwF_TQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:27 GMT\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNyBHTVQifX0.DqEaqw.RQiJ1vTnVKZX1rR1P8m8knwF_TQ; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:27 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file From 280e82300c498f3694e1ee7b1e21612111086e87 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 12 Oct 2018 00:16:56 -0400 Subject: [PATCH 090/751] Fixes #11 Saves the downloaded submissions and replies Now we are explicitly closing NamedTemporaryFile and also marking it not to delete on save. --- securedrop_proxy/proxy.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 09c306770..2108d1a48 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -96,11 +96,15 @@ def handle_non_json_response(self): res = Response(self._presp.status_code) - fh = tempfile.NamedTemporaryFile() + # Create a NamedTemporaryFile, we don't want + # to delete it after closing. + fh = tempfile.NamedTemporaryFile(delete=False) for c in self._presp.iter_content(10): fh.write(c) + fh.close() + res.headers = self._presp.headers self.on_save(fh, res, self.conf) From 0c0be3ec714875572d2fca2e548a4389b5c1232f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 12 Oct 2018 16:21:38 -0700 Subject: [PATCH 091/751] Regression test: Assert that file is not empty --- tests/test_main.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_main.py b/tests/test_main.py index 6bfa8b866..8a4a28e15 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -83,6 +83,13 @@ def on_save(fh, res, conf): # The proxy should have created a filename in the response body self.assertIn('filename', response['body']) + # The file should not be empty + with open("/tmp/{}".format(self.fn)) as f: + saved_file = f.read() + + # We expect HTML content in the file from the test data + self.assertIn("", saved_file) + def test_error_response(self): test_input_json = """"foo": "bar", "baz": "bliff" }""" From 343cc99e34482b02d129e50b6f625ad6cf3b2676 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Fri, 12 Oct 2018 16:41:35 +0530 Subject: [PATCH 092/751] Add .gitignore file --- .gitignore | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b61c3c1cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Log files +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +#Ipython Notebook +.ipynb_checkpoints +*.ipynb + +*.DS_Store +.idea/ + +# vim +*.swp +*.swo + +# .env +*.env + +#VSCode +.vscode/ From 8418bda919dde8e5ddde8f365250597cd408a283 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Tue, 9 Oct 2018 15:55:06 +0530 Subject: [PATCH 093/751] readme: Remove line saying it isn't recommended project --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 4cc2439b6..cad6e71c9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ ## Python Client for SecureDrop -Note: This is not an official recommended project. - ### Development This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. @@ -34,4 +32,4 @@ We will also add a bunch of more tests. To test the code, you will need to run the SecureDrop `make dev` command in the same system. The test suite for this project will test against that development container. -### License: GPLv3+ \ No newline at end of file +### License: GPLv3+ From 9714c45b54b56b43a045ca8667f09a9cde5566c6 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 12 Oct 2018 18:04:00 -0700 Subject: [PATCH 094/751] Start merging API and APIProxy classes --- sdclientapi/__init__.py | 203 ++++++++---- sdclientapi/proxyapi.py | 701 ---------------------------------------- tests/test_apiproxy.py | 5 +- tests/utils/__init__.py | 2 +- 4 files changed, 147 insertions(+), 764 deletions(-) delete mode 100644 sdclientapi/proxyapi.py diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index cdb87ec93..411877a33 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,12 +1,41 @@ from pprint import pprint import os +import configparser import json import requests +from subprocess import PIPE, Popen from typing import Optional, Dict, List, Tuple from .sdlocalobjects import * -from .proxyapi import APIProxy, json_query + + +proxyvmname = "sd-journalist" + + +def json_query(data): + """ + Takes a json based query and passes to the network proxy. + Returns the JSON output from the proxy. + """ + global proxyvmname + config = configparser.ConfigParser() + try: + if os.path.exists("/etc/sd-sdk.conf"): + config.read("/etc/sd-sdk.conf") + proxyvmname = config["proxy"]["name"] + except: + pass # We already have a default name + + p = Popen( + ["/usr/lib/qubes/qrexec-client-vm", proxyvmname, "securedrop.Proxy"], + stdin=PIPE, + stdout=PIPE, + ) + p.stdin.write(data.encode("utf-8")) + d = p.communicate() + output = d[0].decode("utf-8") + return output.strip() class API: @@ -20,7 +49,7 @@ class API: :returns: An object of API class. """ - def __init__(self, address, username, passphrase, totp) -> None: + def __init__(self, address, username, passphrase, totp, proxy=False) -> None: """ Primary API class, this is the only thing which will make network call. """ @@ -31,6 +60,29 @@ def __init__(self, address, username, passphrase, totp) -> None: self.totp = totp # type: str self.token = {"token": "", "expiration": ""} self.auth_header = {"Authorization": ""} # type: Dict + self.proxy = proxy # type: bool + + def _send_json_request(self, method, path_query, body=None, headers=None): + if self.proxy: # We are using the Qubes securedrop-proxy + if method == "POST": + data = {"method": method, "path_query": path_query, "body": body, "headers": headers} + elif method == "GET" or method == "DELETE": + data = {"method": method, "path_query": path_query, "headers": headers} + + result = json.loads(json_query(json.dumps(data, sort_keys=True))) + return json.loads(result["body"]), result["status"] + + else: # We are not using the Qubes securedrop-proxy + if method == "POST": + result = requests.post(self.server + path_query, + data=body) + elif method == "GET": + result = requests.get(self.server + path_query, + headers=headers) + elif method == "DELETE": + result = requests.delete(self.server + path_query, headers=headers) + + return result.json(), result.status_code def authenticate(self, totp="") -> bool: """ @@ -46,9 +98,12 @@ def authenticate(self, totp="") -> bool: "one_time_code": totp, } - token = requests.post(self.server + "api/v1/token", data=json.dumps(user_data)) + method = "POST" + path_query = "api/v1/token" + body = json.dumps(user_data) + try: - token_data = token.json() + token_data, status_code = self._send_json_request(method, path_query, body=body) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") if not "expiration" in token_data: @@ -71,11 +126,12 @@ def get_sources(self) -> List[Source]: :returns: List of Source objects. """ - url = self.server + "api/v1/sources" + path_query = "api/v1/sources" + method = "GET" try: - res = requests.get(url, headers=self.auth_header) - data = res.json() + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -98,15 +154,16 @@ def get_source(self, source: Source) -> Source: :param source: Source object containing only source's uuid value. :returns: Source object fetched from server for the given UUID value. """ - url = self.server + "api/v1/sources/{}".format(source.uuid) + path_query = "api/v1/sources/{}".format(source.uuid) + method = "GET" try: - res = requests.get(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -134,15 +191,16 @@ def delete_source(self, source: Source) -> bool: :param source: Source object containing only source's uuid value. :returns: True if successful, raises Errors in case of wrong values. """ - url = self.server + "api/v1/sources/{}".format(source.uuid) + path_query = "api/v1/sources/{}".format(source.uuid) + method = "DELETE" try: - res = requests.delete(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -174,11 +232,14 @@ def add_star(self, source: Source) -> bool: :param source: The source object to whom we want add a star. :returns: True if successful, raises Error otherwise. """ - url = self.server.rstrip("/") + source.add_star_url + path_query = "api/v1/sources/{}/add_star".format(source.uuid) + method = "POST" try: - res = requests.post(url, headers=self.auth_header) - data = res.json() + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -193,11 +254,14 @@ def remove_star(self, source: Source) -> bool: :param source: Source object to remove the star from. :returns: True if successful, raises Error otherwise. """ - url = self.server.rstrip("/") + source.remove_star_url + path_query = "api/v1/sources/{}/remove_star".format(source.uuid) + method = "DELETE" try: - res = requests.delete(url, headers=self.auth_header) - data = res.json() + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -213,15 +277,16 @@ def get_submissions(self, source: Source) -> List[Submission]: :param source: Source object for whom we want to find all the submissions. :returns: List of Submission objects. """ - url = self.server.rstrip("/") + source.submissions_url + path_query = "api/v1/sources/{}/submissions".format(source.uuid) + method = "GET" try: - res = requests.get(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing submission {}".format(source.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -245,17 +310,18 @@ def get_submission(self, submission: Submission) -> Submission: :returns: Updated submission object from the server. """ source_uuid = submission.source_url.split("/")[-1] - url = self.server.rstrip("/") + "/api/v1/sources/{}/submissions/{}".format( + path_query = "api/v1/sources/{}/submissions/{}".format( source_uuid, submission.uuid ) + method = "GET" try: - res = requests.get(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -282,11 +348,12 @@ def get_all_submissions(self) -> List[Submission]: :returns: List of Submission objects. """ - url = self.server.rstrip("/") + "/api/v1/submissions" + path_query = "api/v1/submissions" + method = "GET" try: - res = requests.get(url, headers=self.auth_header) - data = res.json() + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -313,17 +380,18 @@ def delete_submission(self, submission: Submission) -> bool: # from local submission (not fetched from server) objects. # See the *from_string for an example. source_uuid = submission.source_url.split("/")[-1] - url = self.server.rstrip("/") + "/api/v1/sources/{}/submissions/{}".format( + path_query = "api/v1/sources/{}/submissions/{}".format( source_uuid, submission.uuid ) + method = "DELETE" try: - res = requests.delete(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -395,11 +463,16 @@ def flag_source(self, source: Source) -> bool: :param source: Source object we want to flag. :returns: True if successful, raises Error otherwise. """ - url = self.server.rstrip("/") + "/api/v1/sources/{}/flag".format(source.uuid) + path_query = "api/v1/sources/{}/flag".format(source.uuid) + method = "POST" try: - res = requests.post(url, headers=self.auth_header) - data = res.json() + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) + + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -420,11 +493,13 @@ def get_current_user(self): 'username': 'journalist' } """ - url = self.server.rstrip("/") + "/api/v1/user" + path_query = "api/v1/user" + method = "GET" try: - res = requests.get(url, headers=self.auth_header) - data = res.json() + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) + except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -441,17 +516,18 @@ def reply_source(self, source: Source, msg: str) -> bool: :param source: Source object we want to reply. :param msg: Encrypted message with Source's GPG public key. """ - url = self.server.rstrip("/") + source.replies_url - + path_query = "api/v1/sources/{}/replies".format(source.uuid) + method = "POST" reply = {"reply": msg} try: - res = requests.post(url, headers=self.auth_header, data=json.dumps(reply)) + data, status_code = self._send_json_request(method, path_query, + body=json.dumps(reply), + headers=self.auth_header) - if res.status_code == 400: + if status_code == 400: raise ReplyError(res.json()["message"]) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -470,15 +546,16 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: :param source: Source object containing only source's uuid value. :returns: List of Reply objects. """ - url = self.server + "api/v1/sources/{}/replies".format(source.uuid) + path_query = "api/v1/sources/{}/replies".format(source.uuid) + method = "GET" try: - res = requests.get(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -500,17 +577,16 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: :param reply_uuid: UUID of the reply. :returns: A reply object """ - url = self.server + "api/v1/sources/{}/replies/{}".format( - source.uuid, reply_uuid - ) + path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) + method = "GET" try: - res = requests.get(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -527,12 +603,19 @@ def get_all_replies(self) -> List[Reply]: :returns: List of Reply objects. """ - url = self.server + "api/v1/replies" + source_uuid = submission.source_url.split("/")[-1] + path_query = "/api/v1/sources/{}/submissions/{}/download".format( + source_uuid, submission.uuid + ) + method = "GET" try: - res = requests.get(url, headers=self.auth_header) + data, status_code = self._send_json_request(method, path_query, + headers=self.auth_header) + + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") diff --git a/sdclientapi/proxyapi.py b/sdclientapi/proxyapi.py deleted file mode 100644 index 6c7eff003..000000000 --- a/sdclientapi/proxyapi.py +++ /dev/null @@ -1,701 +0,0 @@ -from pprint import pprint -import os -import json -import configparser -from subprocess import PIPE, Popen - -from .sdlocalobjects import * - -from typing import Optional, Dict, List, Tuple - - -proxyvmname = "sd-journalist" - - -def json_query(data): - """ - Takes a json based query and passes to the network proxy. - Returns the JSON output from the proxy. - """ - global proxyvmname - config = configparser.ConfigParser() - try: - if os.path.exists("/etc/sd-sdk.conf"): - config.read("/etc/sd-sdk.conf") - proxyvmname = config["proxy"]["name"] - except: - pass # We already have a default name - - p = Popen( - ["/usr/lib/qubes/qrexec-client-vm", proxyvmname, "securedrop.Proxy"], - stdin=PIPE, - stdout=PIPE, - ) - p.stdin.write(data.encode("utf-8")) - d = p.communicate() - output = d[0].decode("utf-8") - return output.strip() - - -class APIProxy: - """ - This is class to do all the network calls to the SecureDrop API server. - - :param address: Server URL (http://localhost:8081/) - :param username: Journalist username - :param passphrase: Journalist passphrase - :param totp: Current TOTP value - :returns: An object of API class. - """ - - def __init__(self, address, username, passphrase, totp) -> None: - """ - Primary API class, this is the only thing which will make network call. - """ - - self.server = address # type: str - self.username = username # type: str - self.passphrase = passphrase # type: str - self.totp = totp # type: str - self.token = {"token": "", "expiration": ""} - self.auth_header = {"Authorization": ""} # type: Dict - - def authenticate(self, totp="") -> bool: - """ - Authenticate the user and fetches the token from the server. - - :returns: True if authentication is successful, raise AuthError otherwise. - """ - if not totp: - totp = self.totp - user_data = { - "username": self.username, - "passphrase": self.passphrase, - "one_time_code": totp, - } - method = "POST" - path_query = "api/v1/token" - body = json.dumps(user_data) - - data = {"method": method, "path_query": path_query, "body": body} - - try: - result = json.loads(json_query(json.dumps(data, sort_keys=True))) - token_data = json.loads(result["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - if not "expiration" in token_data: - raise AuthError("Authentication error") - - self.token = token_data - self.update_auth_header() - # If we are here, means the method call was successful. - return True - - def update_auth_header(self): - self.auth_header = { - "Authorization": "token " + self.token["token"], - "Content-Type": "application/json", - "Accept": "application/json", - } - - def get_sources(self) -> List[Source]: - """ - Returns a list of all the sources from the Server. - - :returns: List of Source objects. - """ - path_query = "api/v1/sources" - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - sources = data["sources"] - result = [] # type: List[Source] - - for source in sources: - s = Source(**source) - result.append(s) - - return result - - def get_source(self, source: Source) -> Source: - """ - This will return a single Source based on UUID. - - :param source: Source object containing only source's uuid value. - :returns: Source object fetched from server for the given UUID value. - """ - path_query = "api/v1/sources/{}".format(source.uuid) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - return Source(**data) - - def get_source_from_string(self, uuid: str) -> Source: - """ - This will fetch a source from server and return it. - - :param uuid: Source UUID as string. - :returns: Source object fetched from server for the given UUID value. - """ - - s = Source(uuid=uuid) - return self.get_source(s) - - def delete_source(self, source: Source) -> bool: - """ - This method will delete the source and collection. If the uuid - is not found in the server, it will raise WrongUUIDError. - - :param source: Source object containing only source's uuid value. - :returns: True if successful, raises Errors in case of wrong values. - """ - path_query = "api/v1/sources/{}".format(source.uuid) - method = "DELETE" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - if "message" in data and data["message"] == "Source and submissions deleted": - return True - - # We should never reach here - return False - - def delete_source_from_string(self, uuid: str) -> bool: - """ - This method will delete the source and collection. If the uuid - is not found in the server, it will raise WrongUUIDError. - - :param uuid: Source UUID as string. - :returns: True if the operation is successful. - """ - - s = Source(uuid=uuid) - return self.delete_source(s) - - def add_star(self, source: Source) -> bool: - """ - Adds a star to a given source. - - :param source: The source object to whom we want add a star. - :returns: True if successful, raises Error otherwise. - """ - path_query = "api/v1/sources/{}/add_star".format(source.uuid) - method = "POST" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "message" in data and data["message"] == "Star added": - return True - - return False - - def remove_star(self, source: Source) -> bool: - """Removes star from a given Source. - - :param source: Source object to remove the star from. - :returns: True if successful, raises Error otherwise. - """ - path_query = "api/v1/sources/{}/remove_star".format(source.uuid) - method = "delete" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "message" in data and data["message"] == "Star removed": - return True - - return False - - def get_submissions(self, source: Source) -> List[Submission]: - """ - Returns a list of Submission objects from the server for a given source. - - :param source: Source object for whom we want to find all the submissions. - :returns: List of Submission objects. - """ - path_query = "api/v1/sources/{}/submissions".format(source.uuid) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - result = [] # type: List[Submission] - values = data["submissions"] - - for val in values: - s = Submission(**val) - result.append(s) - - return result - - def get_submission(self, submission: Submission) -> Submission: - """ - Returns the updated Submission object from the server. - - :param submission: Submission object we want to update. - :returns: Updated submission object from the server. - """ - source_uuid = submission.source_url.split("/")[-1] - path_query = "api/v1/sources/{}/submissions/{}".format( - source_uuid, submission.uuid - ) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - return Submission(**data) - - def get_submission_from_string(self, uuid: str, source_uuid: str) -> Submission: - """ - Returns the updated Submission object from the server. - - :param uuid: UUID of the Submission object. - :param source_uuid: UUID of the source. - :returns: Updated submission object from the server. - """ - s = Submission(uuid=uuid) - s.source_uuid = source_uuid - s.source_url = "/api/v1/sources/{}".format(source_uuid) - return self.get_submission(s) - - def get_all_submissions(self) -> List[Submission]: - """ - Returns a list of Submission objects from the server. - - :returns: List of Submission objects. - """ - path_query = "api/v1/submissions" - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - result = [] # type: List[Submission] - values = data["submissions"] - - for val in values: - s = Submission(**val) - result.append(s) - - return result - - def delete_submission(self, submission: Submission) -> bool: - """ - Deletes a given Submission object from the server. - - :param submission: The Submission object we want to delete in the server. - :returns: True if successful, raises Error otherwise. - """ - # Not using direct URL because this helps to use the same method - # from local submission (not fetched from server) objects. - # See the *from_string for an example. - source_uuid = submission.source_url.split("/")[-1] - path_query = "api/v1/sources/{}/submissions/{}".format( - source_uuid, submission.uuid - ) - method = "DELETE" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - if "message" in data and data["message"] == "Submission deleted": - return True - # We should never reach here - return False - - def delete_submission_from_string(self, uuid: str, source_uuid: str) -> bool: - """ - Deletes a given Submission based on uuids from the server. - - :param uuid: UUID of the Submission object. - :param source_uuid: UUID of the source. - :returns: Updated submission object from the server. - """ - s = Submission(uuid=uuid) - s.source_url = "/api/v1/sources/{}".format(source_uuid) - return self.delete_submission(s) - - def flag_source(self, source: Source) -> bool: - """ - Flags a source for reply. - - :param source: Source object we want to flag. - :returns: True if successful, raises Error otherwise. - """ - path_query = "api/v1/sources/{}/flag".format(source.uuid) - method = "POST" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - return True - - def get_current_user(self): - """ - Returns a dictionary of the current user data. - - Example: - - { - 'is_admin': True, - 'last_login': '2018-08-01T19:10:38.199429Z', - 'username': 'journalist' - } - """ - path_query = "api/v1/user" - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - return data - - def reply_source(self, source: Source, msg: str) -> bool: - """ - This method is used to reply to a given source. The message should be preencrypted with the source's - GPG public key. - - :param source: Source object we want to reply. - :param msg: Encrypted message with Source's GPG public key. - """ - path_query = "api/v1/sources/{}/replies".format(source.uuid) - method = "POST" - - reply = {"reply": msg} - body = json.dumps(reply) - - data = { - "method": method, - "path_query": path_query, - "headers": self.auth_header, - "body": body, - } - - try: - res = json.loads(json_query(json.dumps(data))) - data = json.loads(res["body"]) - - if res["status"] == 400: - raise ReplyError(data["message"]) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - if "message" in data and data["message"] == "Your reply has been stored": - return True - # We should never reach here - return False - - def get_replies_from_source(self, source: Source) -> List[Reply]: - """ - This will return a list of replies associated with a source. - - :param source: Source object containing only source's uuid value. - :returns: List of Reply objects. - """ - path_query = "api/v1/sources/{}/replies".format(source.uuid) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - result = [] - for datum in data["replies"]: - reply = Reply(**datum) - result.append(reply) - - return result - - def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: - """ - This will return a single specific reply. - - :param source: Source object. - :param reply_uuid: UUID of the reply. - :returns: A reply object - """ - path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - reply = Reply(**data) - - return reply - - def get_all_replies(self) -> List[Reply]: - """ - This will return a list of all replies from the server. - - :returns: List of Reply objects. - """ - path_query = "api/v1/replies" - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - result = [] - for datum in data["replies"]: - reply = Reply(**datum) - result.append(reply) - - return result - - def delete_reply(self, reply: Reply) -> bool: - """ - Deletes a given Reply object from the server. - - :param reply: The Reply object we want to delete in the server. - :returns: True if successful, raises Error otherwise. - """ - # Not using direct URL because this helps to use the same method - # from local reply (not fetched from server) objects. - # See the *from_string for an example. - source_uuid = reply.source_url.split("/")[-1] - path_query = "api/v1/sources/{}/replies/{}".format(source_uuid, reply.uuid) - method = "DELETE" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing reply {}".format(reply.uuid)) - - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - if "message" in data and data["message"] == "Reply deleted": - return True - # We should never reach here - return False - - def download_submission(self, submission: Submission) -> Tuple[str, str]: - """ - Downloads the submission object from the server. - - :param submission: Submission object we want to update. - :returns: Tuple of sha256sum, temporary filename - """ - global proxyvmname - source_uuid = submission.source_url.split("/")[-1] - path_query = "/api/v1/sources/{}/submissions/{}/download".format( - source_uuid, submission.uuid - ) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - etag = json.loads(res["headers"]["Etag"]) - - filename = os.path.join( - "/home/user/QubesIncoming/", proxyvmname, data["filename"] - ) - - return etag[7:], filename - - def download_reply(self, reply: Reply) -> Tuple[str, str]: - """ - Downloads the reply object from the server. - - :param reply: Reply object we want to update. - :returns: Tuple of sha256sum, temporary filename - """ - global proxyvmname - source_uuid = reply.source_url.split("/")[-1] - path_query = "/api/v1/sources/{}/replies/{}/download".format( - source_uuid, reply.uuid - ) - method = "GET" - - data = {"method": method, "path_query": path_query, "headers": self.auth_header} - - try: - res = json.loads(json_query(json.dumps(data))) - - if res["status"] == 404: - raise WrongUUIDError("Missing reply {}".format(reply.uuid)) - data = json.loads(res["body"]) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) - - etag = json.loads(res["headers"]["Etag"]) - - filename = os.path.join( - "/home/user/QubesIncoming/", proxyvmname, data["filename"] - ) - - return etag[7:], filename diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 0cb6787b4..b1be972bc 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -19,7 +19,8 @@ def setUp(self): self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" self.server = "http://localhost:8081/" - self.api = APIProxy(self.server, self.username, self.password, str(self.totp.now())) + self.api = API(self.server, self.username, self.password, + str(self.totp.now()), proxy=True) for i in range(3): try: self.api.authenticate() @@ -41,7 +42,7 @@ def test_api_auth(self): def test_get_sources(self): sources = self.api.get_sources() self.assertEqual(len(sources), 2) - + @dastollervey_datasaver def test_star_add_remove(self): s = self.api.get_sources()[0] diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py index aa86a1b6c..93527120f 100644 --- a/tests/utils/__init__.py +++ b/tests/utils/__init__.py @@ -79,7 +79,7 @@ def wrapper(*args, **kwargs): RES = json.load(fobj) mock = MagicMock() mock.side_effect = internal_sideeffect - with patch("sdclientapi.proxyapi.json_query", mock): + with patch("sdclientapi.json_query", mock): result = func(*args, **kwargs) if not os.path.exists(filename): From 6138af0aabf590202c7e6b03d216968cdef8069e Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 15 Oct 2018 01:51:00 -0400 Subject: [PATCH 095/751] Merges API and APIProxy classes Also updates tests and test JSON data files. --- data/setUp.json | 2 +- data/test-get-wrong-submissions.yml | 2 +- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_reply_source.json | 2 +- data/test_star_add_remove.json | 2 +- sdclientapi/__init__.py | 224 +++++++++++-------- tests/test_api.py | 2 +- 28 files changed, 158 insertions(+), 120 deletions(-) diff --git a/data/setUp.json b/data/setUp.json index fd57f23da..f8ec29e61 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-15T18:50:30.596706Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTYyOTQzMCwiaWF0IjoxNTM5NjAwNjMwfQ.eyJpZCI6MX0.DxMon85hJuDUFMJdeWdICVQ7slqQHsIx2aNC2F88Ljk\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MDozMCBHTVQifX0.DqYCdg.JSb0AxCyX5KKX8QeFaHOM32pJvM; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:50:30 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index 053e774da..f9f75b5e0 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -80,7 +80,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.19.1] method: GET - uri: http://localhost:8081/api/v1/sources/rofl-missing/submissions/2334 + uri: http://localhost:8081/api/v1/sources/rofl-missing/submissions response: body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested\ \ URL was not found on the server. If you entered the URL manually please\ diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 385505e93..681de883f 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1NCBHTVQifX0.DqEaig.qonLMa3VAVf0Xe-GEOKl0E9urr8; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:31:54 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1959\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-splay_epicure-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/c20e0f3d-2c7d-4d0f-af98-14424b9c312f\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe\\\", \\n \\\"uuid\\\": \\\"c20e0f3d-2c7d-4d0f-af98-14424b9c312f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-splay_epicure-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/52561210-31a2-40db-bb8e-06d568fc618a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe\\\", \\n \\\"uuid\\\": \\\"52561210-31a2-40db-bb8e-06d568fc618a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/c20e0f3d-2c7d-4d0f-af98-14424b9c312f\"}+2": "{\"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:31:55 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1NSBHTVQifX0.DqEaiw.AfjIgzuCP2yig3Cn9hD9pi8iWbQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"33\"}, \"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-splay_epicure-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe/replies/52561210-31a2-40db-bb8e-06d568fc618a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b231122e-9f80-441f-8ccb-88d6eb2d0efe\\\", \\n \\\"uuid\\\": \\\"52561210-31a2-40db-bb8e-06d568fc618a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1NSBHTVQifX0.DqEaiw.AfjIgzuCP2yig3Cn9hD9pi8iWbQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:31:55 GMT\", \"Content-Length\": \"1477\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"73\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:39:04 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNCBHTVQifX0.DqX_yA.EV_fWPcFtNbKcms0sYAzPKtvPyM; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"status\": 403, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-unmanly_salmonellosis-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/e76b4ac1-01a3-497c-bc0f-8ea5bbd846f1\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a\\\", \\n \\\"uuid\\\": \\\"e76b4ac1-01a3-497c-bc0f-8ea5bbd846f1\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unmanly_salmonellosis-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/98393589-7442-45b9-83b6-3cb45f3f7b2a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a\\\", \\n \\\"uuid\\\": \\\"98393589-7442-45b9-83b6-3cb45f3f7b2a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/71327942-53dd-4d03-917c-645e1f0c7ed7\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"71327942-53dd-4d03-917c-645e1f0c7ed7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/e2ea71b4-7403-4592-a96f-679207f17b14\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"e2ea71b4-7403-4592-a96f-679207f17b14\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNSBHTVQifX0.DqX_yQ.64wh2borsgv4MfYZnoBTbYNeQxY; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:39:05 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"1969\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/e76b4ac1-01a3-497c-bc0f-8ea5bbd846f1\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:39:06 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNiBHTVQifX0.DqX_yg.0uR9ucOz50EqOTDgn6AuRBKKfNg; HttpOnly; Path=/\", \"Content-Length\": \"33\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+3": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-unmanly_salmonellosis-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/98393589-7442-45b9-83b6-3cb45f3f7b2a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a\\\", \\n \\\"uuid\\\": \\\"98393589-7442-45b9-83b6-3cb45f3f7b2a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/71327942-53dd-4d03-917c-645e1f0c7ed7\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"71327942-53dd-4d03-917c-645e1f0c7ed7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/e2ea71b4-7403-4592-a96f-679207f17b14\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"e2ea71b4-7403-4592-a96f-679207f17b14\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNiBHTVQifX0.DqX_yw.BR8eGjBy2Nxz7Nn-EY88EpHfiGo; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:39:07 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"1479\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index 954bdfbe2..e181cac97 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"headers\": {\"Content-Length\": \"73\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:08 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOCBHTVQifX0.DqEamA.Rz19VDYyhFF2_UvVptjQBdct478; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"151\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T17:32:07.242517Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"5233\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"wingless howler\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZMBEACUDbVOFlpWWeOugPWX5dX1sBGaduX1P01XO27dgFUedd7Rqe51\\\\nNLelyIWFocRg+Ee+c0sskEr+zih3s4n+A4Vjyn2fZjapaoHYCbosv8A1C9AXtQip\\\\n6F5k099stXUsl2iP3q5Bq1r4osWXH6z6/5pWYpl8JdLEpbx2K1OmVr44PaCO3wTA\\\\nlzHTYJYtDV9ZvQzJbD76nxD+rsueUKTjTQ32ot51QG0mQmcX3d+PTOlbOodMsu9d\\\\nnOfTf7JeYg/7eLlP3ACVUHgEwNvNvcAVXMpIvHbcAYWM1iHsDolzzqe/phs6omT3\\\\n4hBzySrxj+6eJ3TOss/uby7dPMwdrWvbRlpJv0uiuw6SaGGu0ZisnHp9j+u4fF7m\\\\nGYLf7l2GiTjwazlVfG93XfFimmr+MhRnVczY2abjezYJCUF0oNSsYyRStVnxNeNh\\\\nDvddgs4H74lZIZZBFlusTdmAyDXAILcynz2W03s6vaGmys02jnlXYBURM90OEgLI\\\\nWl7PNzzJ2AkmkO74jfdq1I5bHnIlydaDu0f4sE1BxmWOGseok6/j0LHQ/bvxCf3W\\\\n7S3rpNUPtBGbXRNPNHJyBwZTY68SJ/QmVR1qA8bO/g9eAv1fp/qZ9wGnYFoTIk2i\\\\nbTFoc4gyNAjmYb/Nb5uGthSyz5zYUgCsJqt5ED/BI/5XX5PcVI9pqmZmGQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SzZLMjJJSVVaT0pBNllSR0RHUlVGR1NDVFJB\\\\nVUZOM0RVSlhZN1dDNE9XVTVURDRSV0JVUkxQS01DSkhQUTdLU0hRN0JUV0tNSU1L\\\\nQlpCTERHN0g1QTdIVkxMUVNUMkw3TU5YTzRFWT0+iQI/BBMBCgApBQJbv4mTAhsv\\\\nBQkB4OUtBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIEt5E9hsRVoj+g/9\\\\nGS/OKtK/vup/9qp1I+b11eK3ipFts6DCGmu9WUyhtDeIeyewHxLWccWGIcLwZhhV\\\\nICi/OYrvc8ueef+G7kln2dHLoKCRLN1/qTe8FHNN7UDrG217EsCnrdySa9zdG3C8\\\\nwCxm3t81jQ7P5nzGQZ+NE1K9MQEB2kTYx7aaxED8gLk47fxCAcjq+t9eo3jq5x85\\\\n+N96ZMpPO1Dhz4lVOMEr8QEYobSZZZ1W9Uq6xr7LycNuwBE33zpKw7gzWBA3TUiH\\\\nsX8cSjaf6gVnbqQD682ayPo2x7ZljZghjGCv87ZT0yJ1fzx5U5gaYugUWxVvu1PK\\\\nHKmqjC+gl/4i5EgfWVerNSGBH+MwoNrQp10lmNhIFBKts3iVBkVerXeyHnvJcYpZ\\\\nclZagGth7pfw3RS1QFNZbTcNYnwAp0UBczKvkhwniB/BjIkaHQ3Gu8HYd3jqKEI5\\\\nV2BSPNe4mV5hKIGdelp6BA/yh1LRl6KUzHsDs5qDmgHSRychkBAEbgPsHkRqJjW5\\\\nNm0/CPUMmcX6dEMMY9OwEYVX5ZllfbzOUQlwxx2h6tG6snmewbl3USbGy/QR2Abv\\\\n3N4xRwhgFEhZChmje4KAmV7LQiZTjZg6QXO9LV4YXMr9gerAm/q4TuFk7Z5p5phH\\\\n4egWb6umT6Tj/Mud2vrYSIPu0byroQxSZbU0hYeRGAg=\\\\n=lewJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:12.587473Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:49 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OSBHTVQifX0.DqEcKQ.nIi7q2oAq4z9LwOpa3Q4Z7UT8C8; HttpOnly; Path=/\", \"Content-Length\": \"2627\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"receptive herald\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcNgBEACwzyiYcLvntPZ7fWONQBwD8IeuunhTXTsyAX0kPUVTD6tqP0cU\\\\nF2xcYACVOjglSL+dnLkAUI8aszEdI8oX74OYfLrzGnmACr7wQfwZ3Y7m3U95DsNU\\\\nOMMAjot5Y4OA9cvf7RWDYLTfT7Me5mMwadmfNmXXgLf3QDnUGldZCe15U3Q7K1pG\\\\nS7V+a2VS9leGl3vRrQosyjpaVmtQOBWEb3/Xij8ntXUQIFT4wBATth2nGQ5fYHoe\\\\nxoe5dQBpUZwsXNnGZ+emQM8EJE/Xxm0T7ZZngHsU9DsES5SUMmkPaAdivWTvPvEt\\\\nOSThzdO6qnvBwNHTCmlOkkm7NFxBt8kxiOjB+21wtVnz6noVqvht1Ca1p7W+2A4M\\\\nfo2QvTHwYeG09204lrJljUF9MasvVeuViuxIdtHkPnC7smr25nPMucGqKwS/R2qr\\\\nF0kBE+BXioPfl8BSO7PVU4MapGaGZxbGTU0w0b5HUC2oHQlv3TKkhskyyUDtQaAb\\\\ni7aCjVvC3hVJvD2zhbaKuyAwqNewDOMEcHbYiUNAWm1pP+frhSfxedAatZhdDuLQ\\\\nZyJOofAk1QVJRkfW2DAoJU41558y4VszrJ3+uzn8IE+BJzJuTQWacXkvECu7SymQ\\\\nxrrM0LRHKhX8bz5X4TE//d3SCgDDu6z/PprAAVvgeXLFnByJHks3nxic3QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VllSUlVaT1ZSUEI3WjM0WENUSklZUVRRNlY2\\\\nMzM1VVRTVU0zNEdLMzJYVVM2MjMzUEZQSEtaTEtSSkMzSkxVUjVVNEZaSUZHN040\\\\nWUFMRFRJSExaMkNNN1VUQVJBVlpEWlpUSEFJUT0+iQI/BBMBCgApBQJbxHDYAhsv\\\\nBQkB4UPoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ4rTHOiUed4OHHw//\\\\napPfPv1aPc/AkvCJVm4qettEK5Fw+IR1JZzFQbcPE38maO1hxJ+UUyXckoxtJirL\\\\n2Mm1+6lpfukYe/t+OZV4dP4bPrzn9B8j2JzG7W6bVKqhL/LsRkReW+ijbvmVafx7\\\\nLCYZ8XvHYB0ZUjjidX6S55RZw5v0gh/htu0MyLrFm42cdtMHm25vauIb1t4W/6Ou\\\\nKx+AbUzLrsPYazxmk9Zubd809fWq5cXJrrJyILIWfDn9evZtuQqYdAkTdSl92Ejn\\\\nrc63BlJHlJTQC7oDtWH2qbBp51CHlpxmeT8IIlLhlXEoNWMNQ68Q/ZL4bGiW2b4m\\\\nViUhqzn8glzQg9AIWnT5l9ewkB+OMW/MB2yu0LJVBIbVDX1azSJaudibGi0rM6dr\\\\n08qRei8ee72MQgSHWfyhLO75d0xJK/BSh9j+qaC99hrh3wpfMWeDbiHzLyiKEqE6\\\\nR6uOMmcvQKJ+01X5iB0JBfo0lc5mQGUJE1PVPi/nSdM0m1pXe/F+dO+E/cT3Q4Ky\\\\niXhCPzc/ZwXFEnMrDihs45fcNBosvr3wpyGPNIMSj62JZVp9bVTKsTumKQVe8A/Y\\\\n0KxacDSsxNXq9bcDZgGHoxJ2hYYdHN7iQXTHWYBkTqDqvRAAz1WKOsh1nN3i9/6Y\\\\nNB8vfRFCHXiVxtYMez9oMYK0bpe9J4QvbomxDc2nFMg=\\\\n=d4Np\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:04.759461Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\\\", \\n \\\"uuid\\\": \\\"ec973f69-7afc-43fa-b810-dd3090fd1fba\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowMyBHTVQifX0.DqYDDw.RitzC--vVUjS-a5gMBXQ1EHFFVA; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:53:03 GMT\", \"Content-Length\": \"5239\"}, \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\"}+2": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Length\": \"50\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"2632\"}}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index 954bdfbe2..e181cac97 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"headers\": {\"Content-Length\": \"73\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:08 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOCBHTVQifX0.DqEamA.Rz19VDYyhFF2_UvVptjQBdct478; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"151\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T17:32:07.242517Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"5233\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"wingless howler\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZMBEACUDbVOFlpWWeOugPWX5dX1sBGaduX1P01XO27dgFUedd7Rqe51\\\\nNLelyIWFocRg+Ee+c0sskEr+zih3s4n+A4Vjyn2fZjapaoHYCbosv8A1C9AXtQip\\\\n6F5k099stXUsl2iP3q5Bq1r4osWXH6z6/5pWYpl8JdLEpbx2K1OmVr44PaCO3wTA\\\\nlzHTYJYtDV9ZvQzJbD76nxD+rsueUKTjTQ32ot51QG0mQmcX3d+PTOlbOodMsu9d\\\\nnOfTf7JeYg/7eLlP3ACVUHgEwNvNvcAVXMpIvHbcAYWM1iHsDolzzqe/phs6omT3\\\\n4hBzySrxj+6eJ3TOss/uby7dPMwdrWvbRlpJv0uiuw6SaGGu0ZisnHp9j+u4fF7m\\\\nGYLf7l2GiTjwazlVfG93XfFimmr+MhRnVczY2abjezYJCUF0oNSsYyRStVnxNeNh\\\\nDvddgs4H74lZIZZBFlusTdmAyDXAILcynz2W03s6vaGmys02jnlXYBURM90OEgLI\\\\nWl7PNzzJ2AkmkO74jfdq1I5bHnIlydaDu0f4sE1BxmWOGseok6/j0LHQ/bvxCf3W\\\\n7S3rpNUPtBGbXRNPNHJyBwZTY68SJ/QmVR1qA8bO/g9eAv1fp/qZ9wGnYFoTIk2i\\\\nbTFoc4gyNAjmYb/Nb5uGthSyz5zYUgCsJqt5ED/BI/5XX5PcVI9pqmZmGQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SzZLMjJJSVVaT0pBNllSR0RHUlVGR1NDVFJB\\\\nVUZOM0RVSlhZN1dDNE9XVTVURDRSV0JVUkxQS01DSkhQUTdLU0hRN0JUV0tNSU1L\\\\nQlpCTERHN0g1QTdIVkxMUVNUMkw3TU5YTzRFWT0+iQI/BBMBCgApBQJbv4mTAhsv\\\\nBQkB4OUtBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIEt5E9hsRVoj+g/9\\\\nGS/OKtK/vup/9qp1I+b11eK3ipFts6DCGmu9WUyhtDeIeyewHxLWccWGIcLwZhhV\\\\nICi/OYrvc8ueef+G7kln2dHLoKCRLN1/qTe8FHNN7UDrG217EsCnrdySa9zdG3C8\\\\nwCxm3t81jQ7P5nzGQZ+NE1K9MQEB2kTYx7aaxED8gLk47fxCAcjq+t9eo3jq5x85\\\\n+N96ZMpPO1Dhz4lVOMEr8QEYobSZZZ1W9Uq6xr7LycNuwBE33zpKw7gzWBA3TUiH\\\\nsX8cSjaf6gVnbqQD682ayPo2x7ZljZghjGCv87ZT0yJ1fzx5U5gaYugUWxVvu1PK\\\\nHKmqjC+gl/4i5EgfWVerNSGBH+MwoNrQp10lmNhIFBKts3iVBkVerXeyHnvJcYpZ\\\\nclZagGth7pfw3RS1QFNZbTcNYnwAp0UBczKvkhwniB/BjIkaHQ3Gu8HYd3jqKEI5\\\\nV2BSPNe4mV5hKIGdelp6BA/yh1LRl6KUzHsDs5qDmgHSRychkBAEbgPsHkRqJjW5\\\\nNm0/CPUMmcX6dEMMY9OwEYVX5ZllfbzOUQlwxx2h6tG6snmewbl3USbGy/QR2Abv\\\\n3N4xRwhgFEhZChmje4KAmV7LQiZTjZg6QXO9LV4YXMr9gerAm/q4TuFk7Z5p5phH\\\\n4egWb6umT6Tj/Mud2vrYSIPu0byroQxSZbU0hYeRGAg=\\\\n=lewJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:12.587473Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:38:48 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OCBHTVQifX0.DqEcKA.7ZNRecCokzhqulsxpkFhUvEAPxQ; HttpOnly; Path=/\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:38:49 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozODo0OSBHTVQifX0.DqEcKQ.nIi7q2oAq4z9LwOpa3Q4Z7UT8C8; HttpOnly; Path=/\", \"Content-Length\": \"2627\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"receptive herald\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcNgBEACwzyiYcLvntPZ7fWONQBwD8IeuunhTXTsyAX0kPUVTD6tqP0cU\\\\nF2xcYACVOjglSL+dnLkAUI8aszEdI8oX74OYfLrzGnmACr7wQfwZ3Y7m3U95DsNU\\\\nOMMAjot5Y4OA9cvf7RWDYLTfT7Me5mMwadmfNmXXgLf3QDnUGldZCe15U3Q7K1pG\\\\nS7V+a2VS9leGl3vRrQosyjpaVmtQOBWEb3/Xij8ntXUQIFT4wBATth2nGQ5fYHoe\\\\nxoe5dQBpUZwsXNnGZ+emQM8EJE/Xxm0T7ZZngHsU9DsES5SUMmkPaAdivWTvPvEt\\\\nOSThzdO6qnvBwNHTCmlOkkm7NFxBt8kxiOjB+21wtVnz6noVqvht1Ca1p7W+2A4M\\\\nfo2QvTHwYeG09204lrJljUF9MasvVeuViuxIdtHkPnC7smr25nPMucGqKwS/R2qr\\\\nF0kBE+BXioPfl8BSO7PVU4MapGaGZxbGTU0w0b5HUC2oHQlv3TKkhskyyUDtQaAb\\\\ni7aCjVvC3hVJvD2zhbaKuyAwqNewDOMEcHbYiUNAWm1pP+frhSfxedAatZhdDuLQ\\\\nZyJOofAk1QVJRkfW2DAoJU41558y4VszrJ3+uzn8IE+BJzJuTQWacXkvECu7SymQ\\\\nxrrM0LRHKhX8bz5X4TE//d3SCgDDu6z/PprAAVvgeXLFnByJHks3nxic3QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VllSUlVaT1ZSUEI3WjM0WENUSklZUVRRNlY2\\\\nMzM1VVRTVU0zNEdLMzJYVVM2MjMzUEZQSEtaTEtSSkMzSkxVUjVVNEZaSUZHN040\\\\nWUFMRFRJSExaMkNNN1VUQVJBVlpEWlpUSEFJUT0+iQI/BBMBCgApBQJbxHDYAhsv\\\\nBQkB4UPoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ4rTHOiUed4OHHw//\\\\napPfPv1aPc/AkvCJVm4qettEK5Fw+IR1JZzFQbcPE38maO1hxJ+UUyXckoxtJirL\\\\n2Mm1+6lpfukYe/t+OZV4dP4bPrzn9B8j2JzG7W6bVKqhL/LsRkReW+ijbvmVafx7\\\\nLCYZ8XvHYB0ZUjjidX6S55RZw5v0gh/htu0MyLrFm42cdtMHm25vauIb1t4W/6Ou\\\\nKx+AbUzLrsPYazxmk9Zubd809fWq5cXJrrJyILIWfDn9evZtuQqYdAkTdSl92Ejn\\\\nrc63BlJHlJTQC7oDtWH2qbBp51CHlpxmeT8IIlLhlXEoNWMNQ68Q/ZL4bGiW2b4m\\\\nViUhqzn8glzQg9AIWnT5l9ewkB+OMW/MB2yu0LJVBIbVDX1azSJaudibGi0rM6dr\\\\n08qRei8ee72MQgSHWfyhLO75d0xJK/BSh9j+qaC99hrh3wpfMWeDbiHzLyiKEqE6\\\\nR6uOMmcvQKJ+01X5iB0JBfo0lc5mQGUJE1PVPi/nSdM0m1pXe/F+dO+E/cT3Q4Ky\\\\niXhCPzc/ZwXFEnMrDihs45fcNBosvr3wpyGPNIMSj62JZVp9bVTKsTumKQVe8A/Y\\\\n0KxacDSsxNXq9bcDZgGHoxJ2hYYdHN7iQXTHWYBkTqDqvRAAz1WKOsh1nN3i9/6Y\\\\nNB8vfRFCHXiVxtYMez9oMYK0bpe9J4QvbomxDc2nFMg=\\\\n=d4Np\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:04.759461Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\\\", \\n \\\"uuid\\\": \\\"ec973f69-7afc-43fa-b810-dd3090fd1fba\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowMyBHTVQifX0.DqYDDw.RitzC--vVUjS-a5gMBXQ1EHFFVA; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:53:03 GMT\", \"Content-Length\": \"5239\"}, \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\"}+2": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Length\": \"50\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"2632\"}}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index b5badc77a..c30f0f7c6 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:40:47 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2039\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MDo0NyBHTVQifX0.DqEcnw.XVsouWt65Dt6-pT1geMJPVO8ut0; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/3f215dce-2e8d-4d15-b2a3-149c293171ae/download\\\", \\n \\\"filename\\\": \\\"1-beery_bribe-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/3f215dce-2e8d-4d15-b2a3-149c293171ae\\\", \\n \\\"uuid\\\": \\\"3f215dce-2e8d-4d15-b2a3-149c293171ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9/download\\\", \\n \\\"filename\\\": \\\"2-beery_bribe-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\", \\n \\\"uuid\\\": \\\"c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765/download\\\", \\n \\\"filename\\\": \\\"1-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765\\\", \\n \\\"uuid\\\": \\\"d5565739-7755-4abe-a968-571cc877e765\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de/download\\\", \\n \\\"filename\\\": \\\"2-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de\\\", \\n \\\"uuid\\\": \\\"65da24da-44f1-481c-bf34-b9e5be64b5de\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/3f215dce-2e8d-4d15-b2a3-149c293171ae\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:40:48 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"38\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MDo0OCBHTVQifX0.DqEcoA.GtKM2649QA5lynN5TR6pQ2IVFlY; HttpOnly; Path=/\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+3": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9/download\\\", \\n \\\"filename\\\": \\\"2-beery_bribe-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/44855da5-f8aa-48f5-b5b9-56ebe3478325/submissions/c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\", \\n \\\"uuid\\\": \\\"c8fa54ac-cd2d-435b-967b-d4e1149eede9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765/download\\\", \\n \\\"filename\\\": \\\"1-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/d5565739-7755-4abe-a968-571cc877e765\\\", \\n \\\"uuid\\\": \\\"d5565739-7755-4abe-a968-571cc877e765\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de/download\\\", \\n \\\"filename\\\": \\\"2-gubernatorial_keep-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a7de9354-5105-41e3-9606-94a8e8a9e3a1/submissions/65da24da-44f1-481c-bf34-b9e5be64b5de\\\", \\n \\\"uuid\\\": \\\"65da24da-44f1-481c-bf34-b9e5be64b5de\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MDo0OSBHTVQifX0.DqEcoQ.fzIdZn2XEYYizcc70xZa1WDZTfo; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:40:49 GMT\", \"Content-Length\": \"1539\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NToyNSBHTVQifX0.DqYDnQ.rrygdqGK86afft7ACBBMPuW7id8; HttpOnly; Path=/\", \"Content-Length\": \"2049\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:55:25 GMT\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/bccb8dee-5a2f-4e6e-b640-a66fc47bff17/download\\\", \\n \\\"filename\\\": \\\"1-palatable_flue-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/bccb8dee-5a2f-4e6e-b640-a66fc47bff17\\\", \\n \\\"uuid\\\": \\\"bccb8dee-5a2f-4e6e-b640-a66fc47bff17\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46/download\\\", \\n \\\"filename\\\": \\\"2-palatable_flue-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\", \\n \\\"uuid\\\": \\\"4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1/download\\\", \\n \\\"filename\\\": \\\"1-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1\\\", \\n \\\"uuid\\\": \\\"e6bac35e-4042-4a13-89d7-4412ec3150c1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a/download\\\", \\n \\\"filename\\\": \\\"2-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\", \\n \\\"uuid\\\": \\\"c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/bccb8dee-5a2f-4e6e-b640-a66fc47bff17\"}+2": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NToyNiBHTVQifX0.DqYDng.7XCpAhg6n3srTEg_3511rP-26o8; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Date\": \"Mon, 15 Oct 2018 10:55:26 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+3": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46/download\\\", \\n \\\"filename\\\": \\\"2-palatable_flue-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\", \\n \\\"uuid\\\": \\\"4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1/download\\\", \\n \\\"filename\\\": \\\"1-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1\\\", \\n \\\"uuid\\\": \\\"e6bac35e-4042-4a13-89d7-4412ec3150c1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a/download\\\", \\n \\\"filename\\\": \\\"2-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\", \\n \\\"uuid\\\": \\\"c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NToyNyBHTVQifX0.DqYDnw.lYtUHx_O_y-K-HRQsKjQMJDiylI; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1546\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:55:27 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index 9577ea164..327204918 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"standard torus\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/izEBEAC1WVjVDKVdsGsQaFhB94jl3Xho076A/pCt1C1SXqbPuw+N9uUI\\\\nL5fqkTnJ8dD5WPDOWxqR9nWlKzA35dmrXtCGRE6fsyK3Fud5xJYXe9V4H7tqrlDC\\\\n7QjAMAHeo66fmbbYIlEwQKablUrKKWOZ7Hb4ZxLOZulwvET3SsdNYvb/UD6SONaC\\\\nirxAwk8rc5n8Cps1WC1+zLy2X60fuGKI6f+VHv278djHpuWu4/Hd4v/FzbCr4r1u\\\\nwUI4z9f6dW2ZScQCGPvnPM7IbHu1AtXkwEPhfT9HZ+Vznodig/XFXX9laQso7766\\\\nUK44dCrpsqNRutxAEnpfeP0KF3Mf77OB175H7nWGYNFjeVlw57paeYNQkHdHtsAY\\\\nW+oqHCYQRLVCD+bWvMAGNzbyZXLB+2KZBxWzQ28DxwKmXWYJq96A1FvBraEzkgjI\\\\nHxEteBxG04Pm5Eklx8ti3dBhzNeZwha6BRMBvlqL3v6o/LH8c1lZKNHWQBpNqoYd\\\\nMyNCulljiOFycuSCm36q+wiMKLKtBCoIZxRIC+icdOvc9DdDF20pMOr4EhwgrB7l\\\\nYeG0ryKWdWqmbqw7Vmc71PCuu17YQn/h9xWbIs9LxFY8IUG/u+kxPFYHthhygqpv\\\\n1mGhhaLRixu1C+czjVt4QfDeAyQAzUgRMSCpwynVIqOotmRbd3GtUbYPbQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFJES0lBQlQ0QkNaQVZBV1BFWkJSR1ZWSEdB\\\\nWlBUWTZXTExKTVpXSkpCRkNQUFlVUDdLN0g2RkVPVUNPV0pRN1pRUTQyVEdMMkMy\\\\nRVFMNkpQQkI1MlJYM1lHQkhHNjVQWUhIUkc2QT0+iQI/BBMBCgApBQJbv4sxAhsv\\\\nBQkB4OOPBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQntboiNRI6nP5tg/+\\\\nKqlzd5BjCXdekiVw1hun3PWs6G1+jkriFzOb/6DUxeWRpvfB/yHTT4DN7XlN/iou\\\\nUX5qpIZnBsUDyfJxkUvlCX6HxcvJ+K4KhNej5wiFr3POnji1bc97EUBzokxI4NLX\\\\nzoTWr3lDf8U2V++Xwcw4QP2bHCQwu+bRoLoPBsjPpYb6rSoJfljNCVF/O2dEldky\\\\nMTeyH+/NJStuOc1jaYjeeoktNSkpwTBtI9kiJgMhskoqMcBcq6llp/e6MuaSS+5I\\\\n9VOZT/fuZ4FBP7WdAoaOPRdpA1L1iBPQ5GL4Cm+rQNEIoSKB9sEw0G9uEh5wLBby\\\\n19450UQlsUASU48jF/kBw+IU6KLs5QuR3UF+ktUphPJi3NHdKHuwBxW2Rjbb/HR8\\\\nxaF6UuZJRUveRcYgt5dVjpTAc5RzmHcOJiB91oX2G6cqwFNM3QG8eDQwyHPKRD2/\\\\nV3/Yne2XL/ix3h7Fifz+3Wc95ewE3zjrMucsjP2uvgX9I7Rac5xwqCQ0QY64/5F4\\\\nqd/RliZXhcM0UvuzYHtPyZPIDmlSAJZT0W+S/W1bLbvoo1u0vhhiyJoRrD31bGkM\\\\nOb2+CHyDSdg5apQ5Tg0BwGy5nZKl0PdGD5a/qXuw/01kIJujSvDAz0z9+ezQWDKI\\\\nNVIBlA0XKCJ99veAN2GCecQkkhQkTkJwEb2qpmn4Tlc=\\\\n=F/qV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:41:06.862851Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"uuid\\\": \\\"41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"offshore wiper\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/izQBEACmldggKSyKyGmX2IbpcKcHquHrkYygrf4C3sqX6+BOn8nbXduy\\\\nY2ppIW1fmd6UoDla3Io8x5WWAagvlFf8FYTG0iPiai1E6Hn8Lzo0ff2c+fOfsOYd\\\\nctlgqTlCEmn9HqYp/W1NGvCTzFainlk6XRKq45yA87wde86Qhb1kto4QBBKerfNE\\\\nxlZVmSP/XZf7FhEvQaXNFLJtWLyMhvZpyKuf9Eygy04QgqKIJaL9MLM8bhXPl294\\\\nThUJLobry4chJnzBasyOxKOdPYsIyeAq7y6wHFt6v+1+EZUUS7xhrJ79G8GO10n/\\\\n+CZrpCwcllvE6Hr0qbRahLGIh3XC90dmXMjsEislDSLzYCzTTZlKVn4mBC066IvQ\\\\nL+abURfTU8th5W/KgvN0DWn1tojn7BYqMpAy+PQ5Hjedxu+fn9xhNXKxNSlcxtaG\\\\nF4QcH8bTFekJWJE2Io5AEGd4wpeEx47nZpeqcCSd8Rf0UQQ3dbQOskzqA+ctwAfR\\\\nLOTxRPnb/tr0knJm88kzO/NmnXyiysqjTjyE9zr68cpPwxCW+gyErvLo8II9rAo6\\\\nanZHVbPz7NLEUUijaiNYMfTOYusUnzl57QRuCPj2irGr0WL/mWaQoNATTqUKTdL4\\\\nQy4Tp7x+2LAYAGpphHtqYn6tZ0FXU3Nyfsh+9wbu1L54P+4AdMnZJctlmQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFHU09MWjRVTlhXU0tSWjVMVUQzSUo0SkRB\\\\nSk9BN1lJRTc2MlJWRzNCRElTSU4zRURaN1NRTlFZRkRKS0hEUDI2SlVBUlhFQTNH\\\\nV0hCTTc0VllUVk5RRElFNVhDS1VDSVlQUjc3QT0+iQI/BBMBCgApBQJbv4s0Ahsv\\\\nBQkB4OOMBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGtea4vsFCC1B4g/+\\\\nP74ajnICOWgJIobBiDKNcoqQddlqIBcedHOb8pfrP5DK+z8vUmnGI6ZxN6bOW1qg\\\\ngKcGIE2bsRE6CEwuL0cKNHlrrAtc7pQw9cXsFZIGGy/gA6m/Q0md7HZ1QMjgl0yD\\\\nDe5JbFdQLjVTISDCNSWDZi1SrWSm9DLCnJ+o4IpM9tlJA1Afn/O8tTtCHRq8UxQb\\\\nG6IBxJdiwYcUP2vMxsgPplCqb7paRaxSUdcYbam/XA1ZZrAUJpZeX6dLQ/O9FW1r\\\\nBPjQtwt7t24pUj/qE/ASdzyBZrFlrd+IKimzbnc7V2v03kMrTNwS1ZuClZJZb9zp\\\\nWyd4qJy56tJUIQ+bhtgHJefqQzduDTQAZ5KGARVU4ttC2S3Bkkbi/RibIyvF3Drq\\\\nFvVIyF49SaXZUsVnPPCYRjLUWhXXXOu6dDwzgIITdpxywtHdkih5wQTaWK1MUB87\\\\nOFDBKYzUkmARxv/XdiLxOm8yrqfp86ECiD+oMNhNOuDJPLiv6t2pi68bUtHNzS/T\\\\nmNqzkslqihDbEeg7/I45K/aoK1HQtXE/HNgpMygqap9HYPTzV7EoJhJPXfzBxp/3\\\\nC6VSGMPY6YQUvIrK+EIITWoF3HqSpnO84E8H7A4apk7K9wm4ujsh5jFHd4k2YhSF\\\\nPB2jgE83LH896Uyebzzc88CKQdj82rvV/td15+dVcyM=\\\\n=d7YK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:41:11.808980Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561\\\", \\n \\\"uuid\\\": \\\"a5b94646-bcf6-43a4-ade2-01f528d5f561\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"5231\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1NyBHTVQifX0.DqEc5Q.HZD3owqQXAt6Y0XxVPwNtvTJcJ4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:41:57 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions\"}+2": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:41:58 GMT\", \"Content-Length\": \"1031\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1OCBHTVQifX0.DqEc5g.LBMc4wzzJUT19RBUvVwFRgj9JDw; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7/download\\\", \\n \\\"filename\\\": \\\"1-standard_torus-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7\\\", \\n \\\"uuid\\\": \\\"e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78/download\\\", \\n \\\"filename\\\": \\\"2-standard_torus-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78\\\", \\n \\\"uuid\\\": \\\"dafc9e75-be08-4436-8aae-0f96c09c3f78\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/e6efc5f6-16f7-4aa1-aeda-63c0b5ca85c7\"}+3": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:41:59 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1OSBHTVQifX0.DqEc5w.7_llCSkVAICUbGN75aMdldsxfBs; HttpOnly; Path=/\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+4": "{\"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTo0MTo1OSBHTVQifX0.DqEc5w.7_llCSkVAICUbGN75aMdldsxfBs; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1534\", \"Date\": \"Thu, 11 Oct 2018 17:41:59 GMT\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78/download\\\", \\n \\\"filename\\\": \\\"2-standard_torus-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/41cf1954-31f0-43c4-889b-d9bb20f4ac0e/submissions/dafc9e75-be08-4436-8aae-0f96c09c3f78\\\", \\n \\\"uuid\\\": \\\"dafc9e75-be08-4436-8aae-0f96c09c3f78\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/730cd7c6-a7ea-40ae-bf2d-7345ba3ed24f/download\\\", \\n \\\"filename\\\": \\\"1-offshore_wiper-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/730cd7c6-a7ea-40ae-bf2d-7345ba3ed24f\\\", \\n \\\"uuid\\\": \\\"730cd7c6-a7ea-40ae-bf2d-7345ba3ed24f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/ae93844d-397d-4140-ba80-f76489db71b5/download\\\", \\n \\\"filename\\\": \\\"2-offshore_wiper-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a5b94646-bcf6-43a4-ade2-01f528d5f561/submissions/ae93844d-397d-4140-ba80-f76489db71b5\\\", \\n \\\"uuid\\\": \\\"ae93844d-397d-4140-ba80-f76489db71b5\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shortish theodicy\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEck8BEACiZLEiPmPtpsi2ayPjHs2Yc3/wIMiwK8P8uq89NtnnpW+nTshj\\\\nzhgRtKLy72hVmXovlv+RLckUgCWoeOcKU+HZOHVHDnbs4Orvh8tWP3kObHrKWy0A\\\\nPu/4lKY9IafAgBRWjBdouhqMtbmD+LS68WmRNxbaMxa3noK5dNy45TRgGEaQyh0v\\\\nqt4z7BU4efZWJhNK6Bjhpla9pfbKxUfAbz0eAq3ME2aeOiAqnSEYjwzcK4NkVC2r\\\\nPdMK/C36UWeZDsmAqC0uLsrHAebP8uYhA+ITKAqjTZcsKT9FhjKfUlmKMIQfCNVO\\\\nzk9pA6WxhMudyaPwdZX/jtAfnAXO4h5ryfDyxkMJXo0dog8E+RK2GjmI9wd46/Z7\\\\ndveCOFHQdmMHmJPzMAzcTNzfZ7Xft/ikO6rkiuhMyPP92yA2wNwf8DZnrT8Q880T\\\\neWfgzUUdoWRS1pVDYTBIrB6XlpsJesTwy8xt9ZesICmEZ+vNWvQWbVHcv24T+kxj\\\\nyckcgI8f0WcZ+vBl++Bzz3zaihtcylbHRai0W0vcYQgTQyhgfdGOO5bM3ZNvDwQ8\\\\nQXWwIVYd/J95RAGBgPWlxkiHMYeAV0wf7ih4MXMaTOPn6SQkmujbplFi6tt5r2Hz\\\\n/KvenzCvIj6iLv4ktczN8/UVFHPut0T22BrZbjEScZFsQxjPih+kZ/OBVQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFNFQzVFMk1ETlRBTVpQR0FEUEJPWENaUEFK\\\\nVzNJWUJKSlI0S05KM0lWTFlRTEsyUVZUQVdWRTZRRzVFR1FKQzUzNlk3TlZQTEo0\\\\nM0pQS09XNDZKVFVVUVVGSDY0RE5PTFhBQ01EST0+iQI/BBMBCgApBQJbxHJPAhsv\\\\nBQkB4UJxBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQyXRC/oDy7x2Peg/7\\\\nBrT3tsGbQxuT8TO2Y/cn0K+LlDOSOq4N6TSaSG+fE4gXOaiXySc9V3X1FFyHaS70\\\\nLjYGkmDV6QsHgz42f3X2J+VeGelx4ua6PFTLcZRjVfxLpoB9L3U+t7rY+z5PJokn\\\\n3uTN3ur8W9cinbwJa2lTzXp8anPS3dTH9Qoe2D8mIARvSNs38p2Vf3q5gdNCLG3Y\\\\nqI7uqm6ABAFA8C5rkh9Stm64yyCOAfWAteyX3ym48Avw2fAVaOO0I3YM0T8aPWyG\\\\nGMY6Y9Ir5QpPsPd7lLdvMmjf72ix+8mUON6OeUS/OWp5nWumRWCEj98awI51MgOC\\\\nd9qtxpm2lg0AKv2DhphRbPGwQnnLADqiAxDcr9wNROnov2jJw3b/1JMeb2gDWGq5\\\\nmaRjYdxYDfCIxkZA+lWY4isFtaltIjrSOUuhP8jhuDbH/wI1Qqrob2HILVbyQMaD\\\\n5zNkZlIZU3dfUJ/kuHIRg/xi+7aLpbC5/7IfWRC6PiLQBRaApyM8DM4jchWH90dJ\\\\n7PRXfY4paCSmmn4jKd/Vy2gj+XEdaT6E0CBFoo44tLd7OLAxVIunT8NWtQ8R3CrZ\\\\nBndspGnSyDRVW8G4s1U7tNttaqRVBWoXq6c4FWhC9qSL7m2GsNzfeQNfUn+GFhCc\\\\nm9u2HGDD6XQAEkLGlaMS4APme26ntuGKdBJaMoLG3Gk=\\\\n=hRQT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:56:19.305183Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"uuid\\\": \\\"8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"floored schnapps\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEclUBEAC+yFNCYrJ9O4ictZ2BCmqF4uNjVFVv+QpYc+1rqONdv9mH5XLt\\\\nMcxTwaUfNZopZ3+0iYBfm7P86dwJzPdDBE4hQ5taUZiPWf4dJaV8lUz/UcnEGT9O\\\\n+oLO/Ak7vRsZsRur40mmLaM2Gmz+dzUz0G8NLiVFTKJdY5lK9OZ18HELNbryeVaQ\\\\nXLIdmom2+OMK6nAgTj2ekBIFAXLV4jzSIK23L9bM+ZqJljonGnrKuILH9vhbrQpT\\\\nBxlTjezp+JhQaI/6QiwmZgFtBBl1bBMTKt3PCvXJwS1W3R5QseOp7pcaG8HYDpGu\\\\nb9BjC6GZYURVeehugGEw0rSe2qpuedCZMZfVrGAm6Aum7z0LKHJMvBopc0hLWZeY\\\\naRPy0pcxyyJUUFbgss9bld8+RC+gL8YvcYSio19EttrmprUNIrgGLEIOeTEAtE5Y\\\\njkjhvrzeZvpb2cQkyoelnoZeHnF+BKsmJbEBeCFmmW9Luu7fMpTnzrOQYVbSLVHu\\\\nowtadXvZaPG/7MJHzmEbdR+PmidU8cHbDA37pstBdUCjbq8pqTPjMzQOmD0/mxgF\\\\nnjVJQz7JVbiQF/HPaO1pBLjQyRYiPR3rARJCoW/U1CcTgzuASfw3j/lR8/UkW2ff\\\\nBCeBTLywxL1ZHqopi2ElejkSXWoYmbqPFLHJ08Cb5AkUFC8s5wooTgYf7QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SURHMzRVNFdNSERWUjJKVU1CVkpDWklHWEVC\\\\nRkhVM0xKSkZIT01GTFc3N1ZJM0o2NUNYNVlPNVJZQ1ZHRUlaT1ZJVEFMVEJPQzZL\\\\nWlVVWUJQV0U1U1FCUlYzT0xDNEZSRllISVFKWT0+iQI/BBMBCgApBQJbxHJVAhsv\\\\nBQkB4UJrBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGjQVeSld0t6CPhAA\\\\ntpm7fY89ZKI/dt6zH/7JxFOutVG2bvvyEkyHaCCu4fnsBdSkdhMPaMOtolyuSg5/\\\\nw8MbeYhVZAURbSXInwxfaF9Q6DvLPF9Q0Z9q/vgP6N5D183p3f+n3TZsL2tPJwbL\\\\nJI2vlqbhxCG2wlN8EgTRpzNEPYc67VxQIAx/ibiM9NGTBukmKX9KjPTJqwae7R1d\\\\nCZSNQsMozMDIuHXzLC8fM6oFU9Ik8y4umvzxnEE1nM8CCwY/se1D9JTvVsWRmjp9\\\\n8tZ4YOdyxK2kg9tAaLUKOyTuAvoF/YyTtV87zwerd+Xxx3D1QayVTnPPjtql1vJ/\\\\n3myaYVa4GU/BdQUQl/TWbnQS00P6NUsvPbsbjXRAUI7y6aW4s33Tx0lVY1uu5Lc8\\\\nzGii0wSUWWrFNf04QHIZlGyQk8FmIQeulcQn8h/l6YWE97SM/aMsnnsTD7HRJGnz\\\\n0x60mxFV1FmMFSMn3CuNd9AhGDtuC8MXCNglyMW+sGDG2Zma0D3F4/i8ESfs0kVA\\\\nRakUlJIsbkFmih0Ibb7VsnD65/PbKUjEp855Z/U579mS9378sX3kbD6jMubqq1XC\\\\nApDf46LJIO94FkKsZkDKTkgOXfsX4R+J6+MBzRIr63bZp1aa3n2NuchqwZyxxclu\\\\nD3opUPcNPNiNQM7KrnYH6FYR0163CadXOSuk20d2Nas=\\\\n=A3nz\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:56:24.989780Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416\\\", \\n \\\"uuid\\\": \\\"a961f0ed-d0e5-4f25-badc-4cf220a71416\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"5236\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxMiBHTVQifX0.DqYECA.wm4pyK7Cu38V518Gm1wpIHubwM8; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:57:12 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions\"}+2": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/2a5fcb1d-6512-4408-a572-21062f2df334/download\\\", \\n \\\"filename\\\": \\\"1-shortish_theodicy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/2a5fcb1d-6512-4408-a572-21062f2df334\\\", \\n \\\"uuid\\\": \\\"2a5fcb1d-6512-4408-a572-21062f2df334\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585/download\\\", \\n \\\"filename\\\": \\\"2-shortish_theodicy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585\\\", \\n \\\"uuid\\\": \\\"5b149c74-8b6f-43b1-a142-2f740019d585\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:57:13 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxMyBHTVQifX0.DqYECQ.4zSc7PL_zv50jK8c1sNOkUxcK2c; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1037\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/2a5fcb1d-6512-4408-a572-21062f2df334\"}+3": "{\"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxMyBHTVQifX0.DqYECQ.4zSc7PL_zv50jK8c1sNOkUxcK2c; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:57:13 GMT\", \"Content-Length\": \"38\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+4": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"1541\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxNCBHTVQifX0.DqYECg.CK6x9P4C1Wb07zm7MGTTg6qb5ew; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:57:14 GMT\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585/download\\\", \\n \\\"filename\\\": \\\"2-shortish_theodicy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585\\\", \\n \\\"uuid\\\": \\\"5b149c74-8b6f-43b1-a142-2f740019d585\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/0092e003-7bc6-41e2-8e30-ef41eae27746/download\\\", \\n \\\"filename\\\": \\\"1-floored_schnapps-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/0092e003-7bc6-41e2-8e30-ef41eae27746\\\", \\n \\\"uuid\\\": \\\"0092e003-7bc6-41e2-8e30-ef41eae27746\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/bf2168b7-95a4-4c8a-bbc5-14738c38014b/download\\\", \\n \\\"filename\\\": \\\"2-floored_schnapps-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/bf2168b7-95a4-4c8a-bbc5-14738c38014b\\\", \\n \\\"uuid\\\": \\\"bf2168b7-95a4-4c8a-bbc5-14738c38014b\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index f62ec89c3..58e78775c 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:31:58 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"995\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1OCBHTVQifX0.DqEajg.ARAONfzm1qwFhUGJhgbj3oqFkYY; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc/download\"}+2": "{\"headers\": {\"Expires\": \"Fri, 12 Oct 2018 05:31:59 GMT\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Thu, 11 Oct 2018 17:31:36 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1OSBHTVQifX0.DqEajw.xkXUHch05cVqTcobnWNmVaRTaS4; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Etag\": \"\\\"sha256:a53a1e10fcaca9ec40889647f72133b011fba2eee6c6ce251870dabdf253a653\\\"\", \"Content-Disposition\": \"attachment; filename=3-rose-colored_rifle-reply.gpg\", \"Content-Length\": \"1116\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Cache-Control\": \"public, max-age=43200\", \"Date\": \"Thu, 11 Oct 2018 17:31:59 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"body\": \"{\\\"filename\\\": \\\"01599391-8094-447e-9a98-86290f2aff6f\\\"}\", \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/a884c037-320d-40d0-9764-0af4241eb35b\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"a884c037-320d-40d0-9764-0af4241eb35b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/7c8945b4-7f59-413d-994d-37a85da429b8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"7c8945b4-7f59-413d-994d-37a85da429b8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0MTowMSBHTVQifX0.DqYAPQ.Fh6DlFTKUWOGxS1xm6BjCiRyb4Y; HttpOnly; Path=/\", \"Content-Length\": \"1973\", \"Date\": \"Mon, 15 Oct 2018 10:41:01 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68/download\"}+2": "{\"body\": \"{\\\"filename\\\": \\\"80eed7a8-9fd6-4f95-baa4-fc740a7b1b5b\\\"}\", \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0MTowMiBHTVQifX0.DqYAPg.Opm78odeqggdZxWWC4NbqiiatMM; HttpOnly; Path=/\", \"Cache-Control\": \"public, max-age=43200\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Last-Modified\": \"Mon, 15 Oct 2018 10:40:29 GMT\", \"Content-Disposition\": \"attachment; filename=3-starry-eyed_shaping-reply.gpg\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Etag\": \"\\\"sha256:c8a250d083f37d2ea184dc37b84b887af5a9e1c09f260049a8668ad91e9e05cd\\\"\", \"X-Origin-Content-Type\": \"application/json\", \"Expires\": \"Mon, 15 Oct 2018 22:41:02 GMT\", \"Date\": \"Mon, 15 Oct 2018 10:41:02 GMT\", \"Content-Length\": \"1116\"}, \"status\": 200}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index bbc373c74..a9a4517b7 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"1039\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMCBHTVQifX0.DqEakA.9oQ4CoOdcJ45LFsTvG5UilBrEs4; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:32:00 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\"}+2": "{\"body\": \"{\\\"filename\\\": \\\"72c1544c-2ed0-4930-b273-e1364a4ef008\\\"}\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Last-Modified\": \"Thu, 11 Oct 2018 17:31:36 GMT\", \"Content-Length\": \"604\", \"Vary\": \"Cookie\", \"Expires\": \"Fri, 12 Oct 2018 05:32:00 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMCBHTVQifX0.DqEakA.9oQ4CoOdcJ45LFsTvG5UilBrEs4; HttpOnly; Path=/\", \"Etag\": \"\\\"sha256:ffccee92463b6d07d0c24a4834988396197d4b4d6f1b962dccab08d2503de08f\\\"\", \"Date\": \"Thu, 11 Oct 2018 17:32:00 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Content-Type\": \"application/json\", \"Content-Disposition\": \"attachment; filename=1-rose-colored_rifle-msg.gpg\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\"}+3": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n}\\n\", \"headers\": {\"Content-Length\": \"468\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMSBHTVQifX0.DqEakQ.7QOj9jp6BKASlpyampy-sFJZrZs; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:32:01 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372/download\\\", \\n \\\"filename\\\": \\\"1-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372\\\", \\n \\\"uuid\\\": \\\"8d71c240-6997-4836-9652-f3db95908372\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8/download\\\", \\n \\\"filename\\\": \\\"2-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\", \\n \\\"uuid\\\": \\\"9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NDoyOSBHTVQifX0.DqYBDQ.VdOIVvB-wp6QMdqIfO9JTh8nthw; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:44:29 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2057\", \"Content-Type\": \"application/json\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\"}+2": "{\"headers\": {\"Cache-Control\": \"public, max-age=43200\", \"Content-Disposition\": \"attachment; filename=1-starry-eyed_shaping-msg.gpg\", \"Last-Modified\": \"Mon, 15 Oct 2018 10:40:29 GMT\", \"Vary\": \"Cookie\", \"Etag\": \"\\\"sha256:aacdde2b18d477a6f40d3c91d0e8ed41ddcfb3b4a2055535013cfaf859b29026\\\"\", \"Date\": \"Mon, 15 Oct 2018 10:44:30 GMT\", \"Content-Length\": \"604\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Expires\": \"Mon, 15 Oct 2018 22:44:30 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NDozMCBHTVQifX0.DqYBDg.fiu8AhZ_1VJFS6XVzFe4iqMTcJs; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"X-Origin-Content-Type\": \"application/json\"}, \"body\": \"{\\\"filename\\\": \\\"0b949046-0baa-4a23-bedf-088bfff66660\\\"}\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NDozMSBHTVQifX0.DqYBDw.vt3ieWFsgnUGvJdeJgP9ewEhrtg; HttpOnly; Path=/\", \"Content-Length\": \"469\", \"Date\": \"Mon, 15 Oct 2018 10:44:31 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index 2fdd5ad44..fd3902d74 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:02 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2630\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMiBHTVQifX0.DqEakg.WapJ1mFcEOp9c-jO_OpQyMpmIvg; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"status\": 400, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMiBHTVQifX0.DqEakw.HI9_y2Vzvg4gIV4oW9d3b93mooY; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:03 GMT\", \"Content-Length\": \"56\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"5241\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:45:06 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NTowNiBHTVQifX0.DqYBMg.2aEX-76z4uuXPkirkKQaw0M7Xv8; HttpOnly; Path=/\"}, \"status\": 200}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"56\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NTowNiBHTVQifX0.DqYBMg.2aEX-76z4uuXPkirkKQaw0M7Xv8; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:45:06 GMT\"}, \"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"status\": 400, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 5cb6b6026..2a23aac02 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\"}+1": "{\"headers\": {\"Content-Length\": \"166\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:03 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowMyBHTVQifX0.DqEakw.GmE0nwEjrDgbnUq1aydIahPgfuk; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"headers\": {\"Content-Length\": \"73\", \"Date\": \"Mon, 15 Oct 2018 10:39:23 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOToyMyBHTVQifX0.DqX_2w.Sik0joWMM7s1KwgKUB7IUL7Q_tI; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 403, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\"}+1": "{\"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOToyMyBHTVQifX0.DqX_2w.Sik0joWMM7s1KwgKUB7IUL7Q_tI; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"166\", \"Date\": \"Mon, 15 Oct 2018 10:39:23 GMT\"}, \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index 2df523411..5df96db12 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Length\": \"2630\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowNCBHTVQifX0.DqEalA.YnCiXo4a3RR2VnIZtJqYfII1X0o; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/flag\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowNSBHTVQifX0.DqEalQ.eYHj2mFSrAWyJ6FnsipX2X22U3A; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:05 GMT\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\"}+3": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:05 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2530\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowNSBHTVQifX0.DqEalQ.eYHj2mFSrAWyJ6FnsipX2X22U3A; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5241\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNCBHTVQifX0.DqYBbA.pLo6QcfFWehvNU7t8DTjQQm4MAQ; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/flag\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNSBHTVQifX0.DqYBbQ.ndjLePg2lNaN6seJpMXz7Gh8el4; HttpOnly; Path=/\", \"Content-Length\": \"44\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+3": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:46:06 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNiBHTVQifX0.DqYBbg.M7lNhjK3NZ73r_G98uky_HSQlkY; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index 203d7ac8e..ed6ab880a 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-wingless_howler-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies/a7d1ce73-60f5-4a40-a571-4a151a5e8bd2\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"a7d1ce73-60f5-4a40-a571-4a151a5e8bd2\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-wingless_howler-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies/61746472-907a-43e4-9da9-66fa305e5430\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"61746472-907a-43e4-9da9-66fa305e5430\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-corinthian_bran-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies/e6583ca6-c267-49d0-baee-b47a55bbc916\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"e6583ca6-c267-49d0-baee-b47a55bbc916\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-corinthian_bran-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"50c3e541-4c34-4ad4-9c99-9b00e1f294e2\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies/4de16fb1-5373-4485-a699-dfb1b4251e6f\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"4de16fb1-5373-4485-a699-dfb1b4251e6f\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNjo1MCBHTVQifX0.DqEbsg.1eoer66-yvWHTTyUVA-eBl7bLUk; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:36:50 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"1957\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5241\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNCBHTVQifX0.DqYBbA.pLo6QcfFWehvNU7t8DTjQQm4MAQ; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/flag\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNSBHTVQifX0.DqYBbQ.ndjLePg2lNaN6seJpMXz7Gh8el4; HttpOnly; Path=/\", \"Content-Length\": \"44\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+3": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:46:06 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNiBHTVQifX0.DqYBbg.M7lNhjK3NZ73r_G98uky_HSQlkY; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:47:53 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"1973\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Nzo1MyBHTVQifX0.DqYB2Q.mRegrKhwxli3z0JUEhBO6l9xgcw; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/a884c037-320d-40d0-9764-0af4241eb35b\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"a884c037-320d-40d0-9764-0af4241eb35b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/7c8945b4-7f59-413d-994d-37a85da429b8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"7c8945b4-7f59-413d-994d-37a85da429b8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index bbd1f6923..35cfa0ecb 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:34:56.537133Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwODA5NiwiaWF0IjoxNTM5Mjc5Mjk2fQ.eyJpZCI6MX0.DJS73iQrlXFKmpTAGX5G1kT_35qGJTH5TYB4Vyhe850\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNDo1NiBHTVQifX0.DqEbQA.IY36ZE2JKCoToMoPVznvSrgzgc0; HttpOnly; Path=/\", \"Content-Length\": \"188\", \"Date\": \"Thu, 11 Oct 2018 17:34:56 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/e2d452d4-5073-498b-b66a-17f7d4d08d5c/download\\\", \\n \\\"filename\\\": \\\"1-wingless_howler-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/e2d452d4-5073-498b-b66a-17f7d4d08d5c\\\", \\n \\\"uuid\\\": \\\"e2d452d4-5073-498b-b66a-17f7d4d08d5c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/46c91d7c-091f-487b-8b0b-c89808b6573e/download\\\", \\n \\\"filename\\\": \\\"2-wingless_howler-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions/46c91d7c-091f-487b-8b0b-c89808b6573e\\\", \\n \\\"uuid\\\": \\\"46c91d7c-091f-487b-8b0b-c89808b6573e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/5ba450ac-ea4d-45b0-8040-bab6510679fe/download\\\", \\n \\\"filename\\\": \\\"1-corinthian_bran-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/5ba450ac-ea4d-45b0-8040-bab6510679fe\\\", \\n \\\"uuid\\\": \\\"5ba450ac-ea4d-45b0-8040-bab6510679fe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/e9c56553-c926-41a2-a55d-1cc628edf1e7/download\\\", \\n \\\"filename\\\": \\\"2-corinthian_bran-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions/e9c56553-c926-41a2-a55d-1cc628edf1e7\\\", \\n \\\"uuid\\\": \\\"e9c56553-c926-41a2-a55d-1cc628edf1e7\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:34:57 GMT\", \"Content-Length\": \"2041\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNDo1NyBHTVQifX0.DqEbQQ.8uz5qe-ivXs3UkFB1zBRxub33uU; HttpOnly; Path=/\"}, \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5241\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNCBHTVQifX0.DqYBbA.pLo6QcfFWehvNU7t8DTjQQm4MAQ; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/flag\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNSBHTVQifX0.DqYBbQ.ndjLePg2lNaN6seJpMXz7Gh8el4; HttpOnly; Path=/\", \"Content-Length\": \"44\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+3": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:46:06 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNiBHTVQifX0.DqYBbg.M7lNhjK3NZ73r_G98uky_HSQlkY; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:47:53 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"1973\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Nzo1MyBHTVQifX0.DqYB2Q.mRegrKhwxli3z0JUEhBO6l9xgcw; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/a884c037-320d-40d0-9764-0af4241eb35b\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"a884c037-320d-40d0-9764-0af4241eb35b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/7c8945b4-7f59-413d-994d-37a85da429b8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"7c8945b4-7f59-413d-994d-37a85da429b8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:47:55 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2056\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Nzo1NSBHTVQifX0.DqYB2w.ZsC9zECVmUJJOiftGbF0aXddmrI; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372/download\\\", \\n \\\"filename\\\": \\\"1-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372\\\", \\n \\\"uuid\\\": \\\"8d71c240-6997-4836-9652-f3db95908372\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8/download\\\", \\n \\\"filename\\\": \\\"2-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\", \\n \\\"uuid\\\": \\\"9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index 75269354d..54ab1391f 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"headers\": {\"Content-Length\": \"73\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:08 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOCBHTVQifX0.DqEamA.Rz19VDYyhFF2_UvVptjQBdct478; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"151\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-11T17:32:07.242517Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"version\": \"0.1.1\", \"status\": 403, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOToyOSBHTVQifX0.DqX_4Q.aaA3zESPgWZWhqRfJBX2EIJ1JOY; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"73\", \"Date\": \"Mon, 15 Oct 2018 10:39:29 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Length\": \"151\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTozMCBHTVQifX0.DqX_4g.ZqmyWKUsiiLezPcUqa_RXv6rfn4; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:39:30 GMT\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-15T10:39:03.762045Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index a93da6a69..7a9db5e47 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjowOSBHTVQifX0.DqEamQ.1TsgL7NmeGyP5iKXFUKadjZZPww; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:09 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMCBHTVQifX0.DqEamg.dT-dB-JqNy2NCg1RuIf7JxmV4kA; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:10 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"995\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:25 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjoyNSBHTVQifX0.DqYBgQ.dharDRwzCrb64xPr3M6G8N5uA7E; HttpOnly; Path=/\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjoyNiBHTVQifX0.DqYBgg.t1ZrcNszo0nyGfeB7QXUg1Nym4k; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Content-Length\": \"997\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:46:26 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 598ef056c..1dadf79ba 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2629\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMSBHTVQifX0.DqEamw.VieMcDALyGO4xtkbAmgdd_HMz-U; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"c4a30e17-2af9-4ebf-8e6f-6cc9a9f8f4bd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"995\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMSBHTVQifX0.DqEamw.VieMcDALyGO4xtkbAmgdd_HMz-U; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:11 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\"}+3": "{\"version\": \"0.1.1\", \"headers\": {\"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:12 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMiBHTVQifX0.DqEanA.F5IaGeYQZ7c8kZLzBx42r47OYEw; HttpOnly; Path=/\", \"Content-Length\": \"445\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\"}, \"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"3-rose-colored_rifle-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"65b09911-5a01-4ccc-97de-2025786ea2c7\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies/1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"1d29a61a-fc1f-4ec1-9be6-7baac3f940fc\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:46 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo0NiBHTVQifX0.DqYBlg.AOU-MLcIop4rWxjsG1ETiZmDjHE; HttpOnly; Path=/\", \"Content-Length\": \"5240\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo0NyBHTVQifX0.DqYBlw.KU8mEDN47bUI2Rs8wNp8CyTAGrY; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"997\", \"Date\": \"Mon, 15 Oct 2018 10:46:47 GMT\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\"}+3": "{\"status\": 200, \"headers\": {\"Content-Length\": \"446\", \"Date\": \"Mon, 15 Oct 2018 10:46:48 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo0OCBHTVQifX0.DqYBmA.1ta1GvpAOgufHGL-ENfK38e2HUo; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index b7ed5911e..04f24a4d2 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMyBHTVQifX0.DqEanQ.JhUzbQtUDYNcqbhelVEGb3H90Go; HttpOnly; Path=/\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:13 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\"}+2": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxMyBHTVQifX0.DqEanQ.JhUzbQtUDYNcqbhelVEGb3H90Go; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:13 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2530\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index 433acd1e4..04f24a4d2 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:14 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNCBHTVQifX0.DqEang.L7VrOza7MVY92H8EYjyCr2mVB0c; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\"}+2": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n}\\n\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:15 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNSBHTVQifX0.DqEanw.eOwz0Qy3h2kwC9vdDZFFnvDqXeU; HttpOnly; Path=/\", \"Content-Length\": \"2530\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index 01382aa27..04f24a4d2 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"wingless howler\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZMBEACUDbVOFlpWWeOugPWX5dX1sBGaduX1P01XO27dgFUedd7Rqe51\\\\nNLelyIWFocRg+Ee+c0sskEr+zih3s4n+A4Vjyn2fZjapaoHYCbosv8A1C9AXtQip\\\\n6F5k099stXUsl2iP3q5Bq1r4osWXH6z6/5pWYpl8JdLEpbx2K1OmVr44PaCO3wTA\\\\nlzHTYJYtDV9ZvQzJbD76nxD+rsueUKTjTQ32ot51QG0mQmcX3d+PTOlbOodMsu9d\\\\nnOfTf7JeYg/7eLlP3ACVUHgEwNvNvcAVXMpIvHbcAYWM1iHsDolzzqe/phs6omT3\\\\n4hBzySrxj+6eJ3TOss/uby7dPMwdrWvbRlpJv0uiuw6SaGGu0ZisnHp9j+u4fF7m\\\\nGYLf7l2GiTjwazlVfG93XfFimmr+MhRnVczY2abjezYJCUF0oNSsYyRStVnxNeNh\\\\nDvddgs4H74lZIZZBFlusTdmAyDXAILcynz2W03s6vaGmys02jnlXYBURM90OEgLI\\\\nWl7PNzzJ2AkmkO74jfdq1I5bHnIlydaDu0f4sE1BxmWOGseok6/j0LHQ/bvxCf3W\\\\n7S3rpNUPtBGbXRNPNHJyBwZTY68SJ/QmVR1qA8bO/g9eAv1fp/qZ9wGnYFoTIk2i\\\\nbTFoc4gyNAjmYb/Nb5uGthSyz5zYUgCsJqt5ED/BI/5XX5PcVI9pqmZmGQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SzZLMjJJSVVaT0pBNllSR0RHUlVGR1NDVFJB\\\\nVUZOM0RVSlhZN1dDNE9XVTVURDRSV0JVUkxQS01DSkhQUTdLU0hRN0JUV0tNSU1L\\\\nQlpCTERHN0g1QTdIVkxMUVNUMkw3TU5YTzRFWT0+iQI/BBMBCgApBQJbv4mTAhsv\\\\nBQkB4OUtBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQIEt5E9hsRVoj+g/9\\\\nGS/OKtK/vup/9qp1I+b11eK3ipFts6DCGmu9WUyhtDeIeyewHxLWccWGIcLwZhhV\\\\nICi/OYrvc8ueef+G7kln2dHLoKCRLN1/qTe8FHNN7UDrG217EsCnrdySa9zdG3C8\\\\nwCxm3t81jQ7P5nzGQZ+NE1K9MQEB2kTYx7aaxED8gLk47fxCAcjq+t9eo3jq5x85\\\\n+N96ZMpPO1Dhz4lVOMEr8QEYobSZZZ1W9Uq6xr7LycNuwBE33zpKw7gzWBA3TUiH\\\\nsX8cSjaf6gVnbqQD682ayPo2x7ZljZghjGCv87ZT0yJ1fzx5U5gaYugUWxVvu1PK\\\\nHKmqjC+gl/4i5EgfWVerNSGBH+MwoNrQp10lmNhIFBKts3iVBkVerXeyHnvJcYpZ\\\\nclZagGth7pfw3RS1QFNZbTcNYnwAp0UBczKvkhwniB/BjIkaHQ3Gu8HYd3jqKEI5\\\\nV2BSPNe4mV5hKIGdelp6BA/yh1LRl6KUzHsDs5qDmgHSRychkBAEbgPsHkRqJjW5\\\\nNm0/CPUMmcX6dEMMY9OwEYVX5ZllfbzOUQlwxx2h6tG6snmewbl3USbGy/QR2Abv\\\\n3N4xRwhgFEhZChmje4KAmV7LQiZTjZg6QXO9LV4YXMr9gerAm/q4TuFk7Z5p5phH\\\\n4egWb6umT6Tj/Mud2vrYSIPu0byroQxSZbU0hYeRGAg=\\\\n=lewJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:12.587473Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\", \\n \\\"uuid\\\": \\\"988c1d6a-ef11-4eec-bdc1-e23acefd5548\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"corinthian bran\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iZYBEACmzFDMSMUCEy7+LjnrVdXxCVRjtayb+ok/cCUD1zzAEOvatWaO\\\\nG9lBOFWBsQD5Brj893ONOWjxeckhZ33TUa5WA2jC4FC2Hmx4q1lApxYqkDS0mEy4\\\\nyclZDHpWADCFsF2z8oIOTB/v/v1OqyFHmshoJvXN0jpXehBiRIWL7SzB2Hnj/rMD\\\\n+ax4+WZ27TxgBJ5SJrbgoMGHMayOMEcsdwmIXeDnjB1VK399BetiDPYr6/1AaYgM\\\\nT8TerY0oDRMUtpCOI8L0FyV1/qyeSrupki36GDaElyKCHkxf+ypes2b49tqo7m9q\\\\nFkqU/hWQHik8s77/UxTYeG/A2wTQs6D5dqyd95x9qMwfLk3k4dVDh+3bhBnAqnPP\\\\nYHEGngl2u4XQIs8+Q9GJoRoa9xLdCxscg88YZoe4kU+Bu/X3tXEVc9Rl2KfcAt2o\\\\nnsS89Kj7cEF3jx6nNXDYnNDXt2uSXPfv1RtvAk0bs8m0rS9BoVmKnaaQUEY/ZnR2\\\\nYLb0+VUPofJ11oPtJwpKdrJCivNi6kvDrMj2huyr603DxoG5OWjyYZ38vUuBFWIC\\\\nxRfDzLkHqyk/oJgEDRiPZRYf1LE2mz5xVesq2PTjR6Oe2X3qyPhY2msaUS48Xwvs\\\\nLyCXM71BikBdiwnq8GlgYw2RgKha1OwLH1uehEs8fBSSp8VkGtYxVX/8jQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VzdNRzZHTlpIWEpWV1REM1IyS1dPU0VDRUpG\\\\nUDJIQzJRUkVCNkxNQkhNTVpVSFVDV0xZUTRIM09DUENZNkFKVFFaRFlXVUtNVVVL\\\\nSkNLSEFLN0E1VzdTWFVQREVZM0lDTUxESkJDQT0+iQI/BBMBCgApBQJbv4mWAhsv\\\\nBQkB4OUqBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+vfhGYqraDLAIA/+\\\\nMfaRmAcy8SGkFkcNF3RWhrSCdx3q/QCky/UmRNacDDVvW5qEP/hIQdvmPZJuPgCV\\\\n+z4D+zsDWCT5h4lXeFiS9pUIzIylqafsuG4QjXQCYEsI5C+lu6Tg1eiGCr/G7KMD\\\\nr5909C+O3NYDErFw/PRrcVeaHQmDzaV9iexNNRdPhdtnnSs9QmwumGXvF4ey5wx5\\\\nIxCtyqm/+Ymd/VK6BKSOgzeJG8/EnUOxii/RiTrQgZAAo6DSHAgra6sH+ve+VM1g\\\\nBS+V+uUIc0gczS30mpYMcaX5hhO0P7Ni7YMWT5U5snsGrIOhTFYhD6Nj5Cs2797c\\\\nu7ZePcT1yzvQC++TtBxXbLfu9UFLVeLZHabAeWJDj+CwbF6a/W0PsY9g+uAN5wo+\\\\nY0IoOm3HqbFfwazDLcJfCfA8oVSRBG1JhVQ/46e+q4moCtYhUAbqRwJA8OFzn9Qe\\\\nlIFkCCXZfJEIt0BHHRLhh4hYeyFpjz1e606yKLQmJjEOGp2AaZWNTJuRGbe5kUJ7\\\\nWZiYIxXANqMxqQqCadYgUGsIoC7siM8XvHfXHhiRQw48nfLm2WANZXbMHcQGIsIq\\\\n0fPCLjheb0Z4WF9TSzywkzqfGsD97BGcQs9vvuUNvQph44ji8S1EWYnAlOgq67Hg\\\\nJ07IntwVZmjhhsxM/8PyPO4lI2TK/1cFJ8XZywvzFSo=\\\\n=nKT/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:34:16.492201Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\", \\n \\\"uuid\\\": \\\"8bb0bbdb-692e-4dcd-9833-4d48cbd9e143\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:36:33 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"5233\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozNjozMyBHTVQifX0.DqEboQ.gTPKFusa5NW6aSv9-LzrsyriAdQ; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index c51c5a025..49dc59990 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:16 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"73\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNiBHTVQifX0.DqEaoA.9uLYRCG-kmQ9yET--QWAqlCjqjU; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"status\": 403}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxNyBHTVQifX0.DqEaoQ.sTQOA8NF77Eoq5jevspK3vSH5FY; HttpOnly; Path=/\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:17 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\"}+2": "{\"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:18 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxOCBHTVQifX0.DqEaog.y71M_hEEcATXPfTjaA6nFTi3Ir4; HttpOnly; Path=/\", \"Content-Length\": \"1038\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\"}+3": "{\"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:18 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxOCBHTVQifX0.DqEaog.y71M_hEEcATXPfTjaA6nFTi3Ir4; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"468\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index 15342f296..49dc59990 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoxOSBHTVQifX0.DqEaow.ZmRzzOfpPQKIxlOmmCIZiEEFZlc; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:19 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"2629\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\"}+2": "{\"status\": 200, \"headers\": {\"Content-Length\": \"1038\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Thu, 11 Oct 2018 17:32:20 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMCBHTVQifX0.DqEapA.vLvVcP3Gym1mhTzMw1y_ltIMvR0; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\"}+3": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMCBHTVQifX0.DqEapA.vLvVcP3Gym1mhTzMw1y_ltIMvR0; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"468\", \"Date\": \"Thu, 11 Oct 2018 17:32:20 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index d8c44f3eb..49dc59990 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMSBHTVQifX0.DqEapQ.T68qYXo6bk97DCq_v50cqL58UTs; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2629\", \"Date\": \"Thu, 11 Oct 2018 17:32:21 GMT\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\"}+2": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4/download\\\", \\n \\\"filename\\\": \\\"1-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/a0003983-2c49-4883-8837-7680c4a082a4\\\", \\n \\\"uuid\\\": \\\"a0003983-2c49-4883-8837-7680c4a082a4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831/download\\\", \\n \\\"filename\\\": \\\"2-rose-colored_rifle-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions/f820d41c-4de1-43e8-973c-f6cfbb523831\\\", \\n \\\"uuid\\\": \\\"f820d41c-4de1-43e8-973c-f6cfbb523831\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMiBHTVQifX0.DqEapg.RGKv8JAvZ4uaEOEKYK0EsjiUHak; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:22 GMT\", \"Content-Length\": \"1038\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index 712d0dee5..477a4a4e1 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"2629\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:22 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMiBHTVQifX0.DqEapg.RGKv8JAvZ4uaEOEKYK0EsjiUHak; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"version\": \"0.1.1\", \"status\": 404, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:23 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyMyBHTVQifX0.DqEapw.nTMk5oueFdGVGcFeYoiAbI7eJCU; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"166\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 33f32bc29..305d66486 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"2629\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNCBHTVQifX0.DqEaqA.F81DnYh6XWL90sT4uI6iuLYIpYU; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:24 GMT\"}, \"version\": \"0.1.1\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"status\": 201, \"headers\": {\"Content-Length\": \"46\", \"Vary\": \"Cookie\", \"Date\": \"Thu, 11 Oct 2018 17:32:25 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNSBHTVQifX0.DqEaqQ.jPU2jPpllUP6g6aqkwKg8TLGuIo; HttpOnly; Path=/\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index 2d5ade1b4..e83c9cabe 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-12T01:31:53.881796Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTMwNzkxMywiaWF0IjoxNTM5Mjc5MTEzfQ.eyJpZCI6MX0.gRY8i16_GEsZ1V3m8r0IfdTHeuAwOZBoGJHXdmqBOhs\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:31:53 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMTo1MyBHTVQifX0.DqEaiQ.bpOuYIJ_k59fexW1WNZIw7UXQpA; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Date\": \"Thu, 11 Oct 2018 17:32:25 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNSBHTVQifX0.DqEaqQ.jPU2jPpllUP6g6aqkwKg8TLGuIo; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:26 GMT\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNiBHTVQifX0.DqEaqg.a8ZrYgMZ_USIr99OziFFHfiNKc8; HttpOnly; Path=/\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"delete\", \"path_query\": \"api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\"}+3": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNyBHTVQifX0.DqEaqw.RQiJ1vTnVKZX1rR1P8m8knwF_TQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 11 Oct 2018 17:32:27 GMT\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiVGh1LCAxMSBPY3QgMjAxOCAxOTozMjoyNyBHTVQifX0.DqEaqw.RQiJ1vTnVKZX1rR1P8m8knwF_TQ; HttpOnly; Path=/\", \"Date\": \"Thu, 11 Oct 2018 17:32:27 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2629\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"rose-colored rifle\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFu/iPUBEADSGJ1/BHpEotu6eWh1M8MwAtzhR6CGenjdLBtbXTpAySH/ds5q\\\\nKAKnrwW917/mhGjBXgaqFngfldCJ2/n7XOQAEID0BjzO4QAdbFguwS3gC06A1jtk\\\\nsmn4yRDAXUoyRfneqqJb3hK5EzwuZyw6zvr8eoUZ/s3bxVGqXhwySg7BBs7DB6O4\\\\ng893ApDY5sfYL66hio9mlQ6W8sZQks7gkBqcrs43cUZnnzPBK2Edb64h1x8Zsq+a\\\\n2QS1sSAsC5C4cZJ2VKZYW8rTBWBJ+YMdjuAfi7vE8fuqlaG9VAXi4TKiJrIH7XDg\\\\nWSy0WaZJ+7SoOUkFIWFDXX5nNZXz9BOzQvqPjqCQrFj72F+vxJCT85Sv3V5crhOt\\\\n0TfpKnJBUC//m5/GYttZ6UqDujzFNccEzSS4Y//mPAg0j90SITSsyPc/XvwSupxe\\\\nBZ5myCAogYmgH35ugkJEc4rqGCzjYtCawMCKJG9wWPyfQ+z4MnJCB3M4lv3H56l+\\\\nx3wh4UZhdb4v/YDP4fnmxJ3+L3Y7ewGwiOmUNToGDoNbcXj/aJjOz98w0XEIRo+k\\\\nPW03L1SJSCwYC/l30craQDCG57zUkjR9g5K+tWpZXtfVMc2d8fDSxz9U3khPxAue\\\\n165tVrIFbyRdy/bzVNcw7nvxF66E08tM/DIasPkakQLm5c+VC06aVBIVDwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlZNTjJOWEc3UFlDWEdJTlNLVjNMVlpHUEEz\\\\nWFJNUUNKTjRIWURIUDJBNE1QU1U0NzI0SEFVVkZQVklNTDVIQU9LREJJNkVWTElX\\\\nREMyNUg2RVVTTkRHVklRWEhWSk4yUVRBUUpCUT0+iQI/BBMBCgApBQJbv4j1Ahsv\\\\nBQkB4OXLBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQXPcs0GGMHTaWWw//\\\\nQccEqJq+KT4INB1sF1qgM6GG+9IN3nlniPrBqgmuFT8VfMit6UIKFSuQ7QiMM01l\\\\nyzF2gTLSRE3RFENTK8D8cIMM9sL176nVBfJzX7KC5NLpFXhwZBXv9CwWeQHSOibx\\\\nwXDIQrJFt/L2VIln+y9W7xdUhkGpl6IWAYOpqezH0q3optf321G7YbZOhHDwyWiY\\\\nq34p0EKYiw/e8ERIkv6DKC+1z3KRLTRVhqrEAhTq676PisA5brLq2Q9GCYyWbYLq\\\\n6oi34VJDZLhBMwDT0TRYIaS3GUMRfan+lKn5i766z83rps7WW2YjX5gYLS/F8t7X\\\\nvsdOE45VS5GMBglQogdbjVE8zIAkXJX+ii5NqbbUG8E8qxCNLRMl789ot21UeVOY\\\\nfHftzPqFduyqTpEK1/JF5CiGCvuq66r79IdwTUEmclr/GiHMCAY7pHuTY+IgJBvr\\\\nCFtWjwcoJ5hYjvi5XDnX0+rt2iREgFeIVjUsXDiOAb7K2XA47wv46VsHLm/4dELG\\\\nNtsXR7J7q0U0fG3Fpa4iodzKD6OoQxbYAnXv4/2/oJJ38MhRHttixq+T+637WnHd\\\\nT/8lcVVNmf9s9+FA4AtvBwKpQr7BvIj5BVyCo9BKI/4KAtJBCC/d6tcoMpzbrZLj\\\\nmsk6ROcb1G4qW2/HlbHBUOYkIXRxAW54vwr7iZuRhOA=\\\\n=a8Z1\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-11T17:31:36.569138Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b707f8b6-12dd-4e72-a661-0343d60a5961\\\", \\n \\\"uuid\\\": \\\"b707f8b6-12dd-4e72-a661-0343d60a5961\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"status\": 201, \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOSBHTVQifX0.DqYB6Q.0UMdHuVZ4MNd4q0uPqO5wh47YRs; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:09 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"30\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\"}+3": "{\"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODoxMCBHTVQifX0.DqYB6g.GJUBWnr-jXRbJWsmFA5Ww-oMXXg; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:10 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:11 GMT\", \"Content-Length\": \"5240\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODoxMSBHTVQifX0.DqYB6w.GxCan9EsD8IljXM3eXTm34vS_2c; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 411877a33..23fe1c326 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -65,24 +65,28 @@ def __init__(self, address, username, passphrase, totp, proxy=False) -> None: def _send_json_request(self, method, path_query, body=None, headers=None): if self.proxy: # We are using the Qubes securedrop-proxy if method == "POST": - data = {"method": method, "path_query": path_query, "body": body, "headers": headers} + data = {"method": method, "path_query": path_query, "body": body} + if headers: + data["headers"] = headers elif method == "GET" or method == "DELETE": data = {"method": method, "path_query": path_query, "headers": headers} - result = json.loads(json_query(json.dumps(data, sort_keys=True))) - return json.loads(result["body"]), result["status"] + data_str = json.dumps(data, sort_keys=True) + result = json.loads(json_query(data_str)) + return json.loads(result["body"]), result["status"], result["headers"] else: # We are not using the Qubes securedrop-proxy if method == "POST": - result = requests.post(self.server + path_query, - data=body) + result = requests.post(self.server + path_query, data=body) elif method == "GET": - result = requests.get(self.server + path_query, - headers=headers) + result = requests.get(self.server + path_query, headers=headers) elif method == "DELETE": result = requests.delete(self.server + path_query, headers=headers) - return result.json(), result.status_code + # Because when we download a file there is no JSON in the body + if path_query.find("/download") != -1: + return result, result.status_code, result.headers + return result.json(), result.status_code, result.headers def authenticate(self, totp="") -> bool: """ @@ -103,7 +107,9 @@ def authenticate(self, totp="") -> bool: body = json.dumps(user_data) try: - token_data, status_code = self._send_json_request(method, path_query, body=body) + token_data, status_code, headers = self._send_json_request( + method, path_query, body=body + ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") if not "expiration" in token_data: @@ -130,8 +136,9 @@ def get_sources(self) -> List[Source]: method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -158,8 +165,9 @@ def get_source(self, source: Source) -> Source: method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -195,8 +203,9 @@ def delete_source(self, source: Source) -> bool: method = "DELETE" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -236,8 +245,9 @@ def add_star(self, source: Source) -> bool: method = "POST" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) except json.decoder.JSONDecodeError: @@ -258,8 +268,9 @@ def remove_star(self, source: Source) -> bool: method = "DELETE" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) except json.decoder.JSONDecodeError: @@ -281,8 +292,9 @@ def get_submissions(self, source: Source) -> List[Submission]: method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing submission {}".format(source.uuid)) @@ -309,15 +321,15 @@ def get_submission(self, submission: Submission) -> Submission: :param submission: Submission object we want to update. :returns: Updated submission object from the server. """ - source_uuid = submission.source_url.split("/")[-1] path_query = "api/v1/sources/{}/submissions/{}".format( - source_uuid, submission.uuid + submission.source_uuid, submission.uuid ) method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing submission {}".format(submission.uuid)) @@ -339,7 +351,7 @@ def get_submission_from_string(self, uuid: str, source_uuid: str) -> Submission: :returns: Updated submission object from the server. """ s = Submission(uuid=uuid) - s.source_url = "/api/v1/sources/{}".format(source_uuid) + s.source_uuid = source_uuid return self.get_submission(s) def get_all_submissions(self) -> List[Submission]: @@ -352,8 +364,9 @@ def get_all_submissions(self) -> List[Submission]: method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -379,15 +392,15 @@ def delete_submission(self, submission: Submission) -> bool: # Not using direct URL because this helps to use the same method # from local submission (not fetched from server) objects. # See the *from_string for an example. - source_uuid = submission.source_url.split("/")[-1] path_query = "api/v1/sources/{}/submissions/{}".format( - source_uuid, submission.uuid + submission.source_uuid, submission.uuid ) method = "DELETE" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing submission {}".format(submission.uuid)) @@ -415,7 +428,9 @@ def delete_submission_from_string(self, uuid: str, source_uuid: str) -> bool: s.source_url = "/api/v1/sources/{}".format(source_uuid) return self.delete_submission(s) - def download_submission(self, submission: Submission, path: str) -> Tuple[str, str]: + def download_submission( + self, submission: Submission, path: str = "" + ) -> Tuple[str, str]: """ Returns a tuple of sha256sum and file path for a given Submission object. This method also requires a directory path in where it will save the submission file. @@ -425,30 +440,41 @@ def download_submission(self, submission: Submission, path: str) -> Tuple[str, s :returns: Tuple of sha256sum and path of the saved submission. """ - url = self.server.rstrip("/") + submission.download_url + path_query = "api/v1/sources/{}/submissions/{}/download".format( + submission.source_uuid, submission.uuid + ) + method = "GET" - if os.path.exists(path) and not os.path.isdir(path): - raise BaseError("Please provide a vaild directory to save.") + if path: + if os.path.exists(path) and not os.path.isdir(path): + raise BaseError("Please provide a vaild directory to save.") try: - res = requests.get(url, headers=self.auth_header, stream=True) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) - if res.status_code == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + if status_code == 404: + raise WrongUUIDError("Missing reply {}".format(submission.uuid)) # Get the headers - headers = res.headers + headers = headers etag = headers["Etag"] - # This is where we will save our downloaded file - filepath = os.path.join(path, submission.filename) - with open(filepath, "wb") as fobj: - for chunk in res.iter_content( - chunk_size=1024 - ): # Getting 1024 in each chunk - if chunk: - fobj.write(chunk) - + if not self.proxy: + # This is where we will save our downloaded file + filepath = os.path.join(path, submission.filename) + with open(filepath, "wb") as fobj: + for chunk in data.iter_content( + chunk_size=1024 + ): # Getting 1024 in each chunk + if chunk: + fobj.write(chunk) + + else: + filepath = os.path.join( + "/home/user/QubesIncoming/", proxyvmname, data["filename"] + ) # Because etag comes as JSON encoded string etag = json.loads(etag) # Return the tuple of sha256sum, filepath @@ -467,8 +493,9 @@ def flag_source(self, source: Source) -> bool: method = "POST" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -497,8 +524,9 @@ def get_current_user(self): method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -521,12 +549,12 @@ def reply_source(self, source: Source, msg: str) -> bool: reply = {"reply": msg} try: - data, status_code = self._send_json_request(method, path_query, - body=json.dumps(reply), - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, body=json.dumps(reply), headers=self.auth_header + ) if status_code == 400: - raise ReplyError(res.json()["message"]) + raise ReplyError(data["message"]) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -550,8 +578,9 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -581,8 +610,9 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -603,18 +633,13 @@ def get_all_replies(self) -> List[Reply]: :returns: List of Reply objects. """ - source_uuid = submission.source_url.split("/")[-1] - path_query = "/api/v1/sources/{}/submissions/{}/download".format( - source_uuid, submission.uuid - ) + path_query = "api/v1/replies" method = "GET" try: - data, status_code = self._send_json_request(method, path_query, - headers=self.auth_header) - - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -629,7 +654,7 @@ def get_all_replies(self) -> List[Reply]: return result - def download_reply(self, reply: Reply, path: str) -> Tuple[str, str]: + def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: """ Returns a tuple of sha256sum and file path for a given Reply object. This method also requires a directory path in where it will save the reply file. @@ -639,30 +664,42 @@ def download_reply(self, reply: Reply, path: str) -> Tuple[str, str]: :returns: Tuple of sha256sum and path of the saved Reply. """ - url = self.server.rstrip("/") + reply.reply_url + "/download" + path_query = "api/v1/sources/{}/replies/{}/download".format( + reply.source_uuid, reply.uuid + ) + + method = "GET" - if os.path.exists(path) and not os.path.isdir(path): - raise BaseError("Please provide a valid directory to save.") + if path: + if os.path.exists(path) and not os.path.isdir(path): + raise BaseError("Please provide a valid directory to save.") try: - res = requests.get(url, headers=self.auth_header, stream=True) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing reply {}".format(reply.uuid)) # Get the headers - headers = res.headers + headers = headers etag = headers["Etag"] - # This is where we will save our downloaded file - filepath = os.path.join(path, reply.filename) - with open(filepath, "wb") as fobj: - for chunk in res.iter_content( - chunk_size=1024 - ): # Getting 1024 in each chunk - if chunk: - fobj.write(chunk) - + if not self.proxy: + # This is where we will save our downloaded file + filepath = os.path.join(path, reply.filename) + with open(filepath, "wb") as fobj: + for chunk in data.iter_content( + chunk_size=1024 + ): # Getting 1024 in each chunk + if chunk: + fobj.write(chunk) + + else: + filepath = os.path.join( + "/home/user/QubesIncoming/", proxyvmname, data["filename"] + ) # Because etag comes as JSON encoded string etag = json.loads(etag) # Return the tuple of sha256sum, filepath @@ -680,18 +717,19 @@ def delete_reply(self, reply: Reply) -> bool: # Not using direct URL because this helps to use the same method # from local reply (not fetched from server) objects. # See the *from_string for an example. - source_uuid = reply.source_url.split("/")[-1] - url = self.server.rstrip("/") + "/api/v1/sources/{}/replies/{}".format( - source_uuid, reply.uuid + path_query = "api/v1/sources/{}/replies/{}".format( + reply.source_uuid, reply.uuid ) + method = "DELETE" + try: - res = requests.delete(url, headers=self.auth_header) + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.auth_header + ) - if res.status_code == 404: + if status_code == 404: raise WrongUUIDError("Missing reply {}".format(reply.uuid)) - - data = res.json() except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") diff --git a/tests/test_api.py b/tests/test_api.py index 6dbfc0d79..c3153bfd3 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -101,7 +101,7 @@ def test_get_submission_from_string(self): @vcr.use_cassette("data/test-get-wrong-submissions.yml") def test_get_wrong_submissions(self): s = self.api.get_sources()[0] - s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" + s.uuid = "rofl-missing" with self.assertRaises(WrongUUIDError): self.api.get_submissions(s) From 6170a337914cb34da0286da0f0ed79c0657f46bd Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 15 Oct 2018 16:10:00 -0700 Subject: [PATCH 096/751] Temporary fix to workaround server bug #3877 ETags are being stripped from staging/production servers due to an Apache misconfiguration. For now we should not use the ETag until this is addressed server-side. --- sdclientapi/__init__.py | 16 ++++++++-------- tests/test_api.py | 10 ++-------- tests/test_apiproxy.py | 4 ++-- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 23fe1c326..cd48afd80 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -459,7 +459,6 @@ def download_submission( # Get the headers headers = headers - etag = headers["Etag"] if not self.proxy: # This is where we will save our downloaded file @@ -475,10 +474,11 @@ def download_submission( filepath = os.path.join( "/home/user/QubesIncoming/", proxyvmname, data["filename"] ) - # Because etag comes as JSON encoded string - etag = json.loads(etag) # Return the tuple of sha256sum, filepath - return etag[7:], filepath + # Returning empty string instead of sha256sum due to this + # SecureDrop server bug: + # https://github.com/freedomofpress/securedrop/issues/3877 + return "", filepath except Exception as err: raise BaseError(err) @@ -684,7 +684,6 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: # Get the headers headers = headers - etag = headers["Etag"] if not self.proxy: # This is where we will save our downloaded file @@ -700,10 +699,11 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: filepath = os.path.join( "/home/user/QubesIncoming/", proxyvmname, data["filename"] ) - # Because etag comes as JSON encoded string - etag = json.loads(etag) # Return the tuple of sha256sum, filepath - return etag[7:], filepath + # Returning empty string instead of sha256sum due to this + # SecureDrop server bug: + # https://github.com/freedomofpress/securedrop/issues/3877 + return "", filepath except Exception as err: raise BaseError(err) diff --git a/tests/test_api.py b/tests/test_api.py index c3153bfd3..224f99bda 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -194,15 +194,12 @@ def test_download_submission(self): # We need a temporary directory to download tmpdir = tempfile.mkdtemp() - etag, filepath = self.api.download_submission(s, tmpdir) + _, filepath = self.api.download_submission(s, tmpdir) # now let us read the downloaded file with open(filepath, "rb") as fobj: data = fobj.read() - shasum = hashlib.sha256(data).hexdigest() - self.assertEqual(etag, shasum) - # Now the submission should have is_read as True. s = self.api.get_submission(s) @@ -241,15 +238,12 @@ def test_download_reply(self): # We need a temporary directory to download tmpdir = tempfile.mkdtemp() - etag, filepath = self.api.download_reply(r, tmpdir) + _, filepath = self.api.download_reply(r, tmpdir) # now let us read the downloaded file with open(filepath, "rb") as fobj: data = fobj.read() - shasum = hashlib.sha256(data).hexdigest() - self.assertEqual(etag, shasum) - # Let us remove the temporary directory shutil.rmtree(tmpdir) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index b1be972bc..2faaeb88e 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -224,7 +224,7 @@ def test_delete_reply(self): def test_download_reply(self): r = self.api.get_all_replies()[0] - etag, filepath = self.api.download_reply(r) + _, filepath = self.api.download_reply(r) @dastollervey_datasaver def test_download_submission(self): @@ -232,7 +232,7 @@ def test_download_submission(self): self.assertFalse(s.is_read) - etag, filepath = self.api.download_submission(s) + _, filepath = self.api.download_submission(s) # Now the submission should have is_read as True. s = self.api.get_submission(s) From 77679213dab3b45ff3c5a3603b79892b9b050ac2 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 18 Oct 2018 16:23:13 -0700 Subject: [PATCH 097/751] securedrop-sdk 0.0.2 --- CHANGELOG.md | 13 +++++++++++++ setup.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..6149d210e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,13 @@ +Changelog +========= + +0.0.2 +----- + +* Support SDK use in a Qubes vault AppVM via securedrop-proxy (#21). +* Add journalist UUID as an attribute on the Reply object (#19). + +0.0.1 +----- + +* Initial alpha release. diff --git a/setup.py b/setup.py index 4a865e111..c3a0a4f01 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.1.0", + version="0.0.2", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From adac87f559f47a4933b2802913d016131f55bf92 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 18 Oct 2018 20:21:11 -0700 Subject: [PATCH 098/751] Send headers for POST requests --- sdclientapi/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index cd48afd80..0892832a5 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -77,7 +77,8 @@ def _send_json_request(self, method, path_query, body=None, headers=None): else: # We are not using the Qubes securedrop-proxy if method == "POST": - result = requests.post(self.server + path_query, data=body) + result = requests.post(self.server + path_query, + headers=headers, data=body) elif method == "GET": result = requests.get(self.server + path_query, headers=headers) elif method == "DELETE": From 7bcd593d2255689e7a7a43cfff259e60a454aa9c Mon Sep 17 00:00:00 2001 From: heartsucker Date: Sat, 20 Oct 2018 14:38:19 +0200 Subject: [PATCH 099/751] added pytest to dev env --- Pipfile | 2 + Pipfile.lock | 234 ++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 176 insertions(+), 60 deletions(-) diff --git a/Pipfile b/Pipfile index 1c6034a72..92ec11e86 100644 --- a/Pipfile +++ b/Pipfile @@ -11,6 +11,8 @@ vcrpy = "*" mypy = "*" pyotp = "*" sphinx = "*" +pytest = "*" +pytest-cov = "*" [packages] requests = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 31806245c..645c680f9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "b0e386d74b16d1df8eb8a42b01245d383869465441d239442b299ac1b60f3572" + "sha256": "48e88afaff5fc1d2185f12d9d60e7beccb413ebb49387f6259151f201ceb4777" }, "pipfile-spec": 6, "requires": { @@ -18,10 +18,10 @@ "default": { "certifi": { "hashes": [ - "sha256:4c1d68a1408dd090d2f3a869aa94c3947cc1d967821d1ed303208c9f41f0f2f4", - "sha256:b6e8b28b2b7e771a41ecdd12d4d43262ecab52adebbafa42c77d6b57fb6ad3a4" + "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", + "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" ], - "version": "==2018.8.13" + "version": "==2018.10.15" }, "chardet": { "hashes": [ @@ -39,27 +39,41 @@ }, "requests": { "hashes": [ - "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", - "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", + "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" ], "index": "pypi", - "version": "==2.19.1" + "version": "==2.20.0" }, "urllib3": { "hashes": [ - "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", - "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", + "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" ], - "version": "==1.23" + "version": "==1.24" } }, "develop": { "alabaster": { "hashes": [ - "sha256:674bb3bab080f598371f4443c5008cbfeb1a5e622dd312395d2d82af2c54c456", - "sha256:b63b1f4dc77c074d386752ec4a8a7517600f6c0db8cd42980cae17ab7b3275d7" + "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", + "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" ], - "version": "==0.7.11" + "version": "==0.7.12" + }, + "atomicwrites": { + "hashes": [ + "sha256:0312ad34fcad8fac3704d441f7b317e50af620823353ec657a53e981f92920c0", + "sha256:ec9ae8adaae229e4f8446952d204a3e4b5fdd2d099f9be3aaf556120135fb3ee" + ], + "version": "==1.2.1" + }, + "attrs": { + "hashes": [ + "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69", + "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb" + ], + "version": "==18.2.0" }, "babel": { "hashes": [ @@ -70,10 +84,10 @@ }, "certifi": { "hashes": [ - "sha256:4c1d68a1408dd090d2f3a869aa94c3947cc1d967821d1ed303208c9f41f0f2f4", - "sha256:b6e8b28b2b7e771a41ecdd12d4d43262ecab52adebbafa42c77d6b57fb6ad3a4" + "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", + "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" ], - "version": "==2018.8.13" + "version": "==2018.10.15" }, "chardet": { "hashes": [ @@ -82,6 +96,42 @@ ], "version": "==3.0.4" }, + "coverage": { + "hashes": [ + "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", + "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", + "sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95", + "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", + "sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd", + "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", + "sha256:2a5b73210bad5279ddb558d9a2bfedc7f4bf6ad7f3c988641d83c40293deaec1", + "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", + "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", + "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", + "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", + "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", + "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", + "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", + "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", + "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", + "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", + "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", + "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", + "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", + "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", + "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", + "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", + "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", + "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", + "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", + "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", + "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", + "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", + "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", + "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80" + ], + "version": "==4.5.1" + }, "docutils": { "hashes": [ "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", @@ -99,10 +149,10 @@ }, "imagesize": { "hashes": [ - "sha256:3620cc0cadba3f7475f9940d22431fc4d407269f1be59ec9b8edcca26440cf18", - "sha256:5b326e4678b6925158ccc66a9fa3122b6106d7c876ee32d7de6ce59385b96315" + "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8", + "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5" ], - "version": "==1.0.0" + "version": "==1.1.0" }, "jinja2": { "hashes": [ @@ -117,38 +167,91 @@ ], "version": "==1.0" }, + "more-itertools": { + "hashes": [ + "sha256:c187a73da93e7a8acc0001572aebc7e3c69daf7bf6881a2cea10650bd4420092", + "sha256:c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e", + "sha256:fcbfeaea0be121980e15bc97b3817b5202ca73d0eae185b4550cbfce2a3ebb3d" + ], + "version": "==4.3.0" + }, "multidict": { "hashes": [ - "sha256:1a1d76374a1e7fe93acef96b354a03c1d7f83e7512e225a527d283da0d7ba5e0", - "sha256:1d6e191965505652f194bc4c40270a842922685918a4f45e6936a6b15cc5816d", - "sha256:295961a6a88f1199e19968e15d9b42f3a191c89ec13034dbc212bf9c394c3c82", - "sha256:2be5af084de6c3b8e20d6421cb0346378a9c867dcf7c86030d6b0b550f9888e4", - "sha256:2eb99617c7a0e9f2b90b64bc1fb742611718618572747d6f3d6532b7b78755ab", - "sha256:4ba654c6b5ad1ae4a4d792abeb695b29ce981bb0f157a41d0fd227b385f2bef0", - "sha256:5ba766433c30d703f6b2c17eb0b6826c6f898e5f58d89373e235f07764952314", - "sha256:a59d58ee85b11f337b54933e8d758b2356fcdcc493248e004c9c5e5d11eedbe4", - "sha256:a6e35d28900cf87bcc11e6ca9e474db0099b78f0be0a41d95bef02d49101b5b2", - "sha256:b4df7ca9c01018a51e43937eaa41f2f5dce17a6382fda0086403bcb1f5c2cf8e", - "sha256:bbd5a6bffd3ba8bfe75b16b5e28af15265538e8be011b0b9fddc7d86a453fd4a", - "sha256:d870f399fcd58a1889e93008762a3b9a27cf7ea512818fc6e689f59495648355", - "sha256:e9404e2e19e901121c3c5c6cffd5a8ae0d1d67919c970e3b3262231175713068" - ], - "version": "==4.3.1" + "sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b", + "sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64", + "sha256:136f5a4a6a4adeacc4dc820b8b22f0a378fb74f326e259c54d1817639d1d40a0", + "sha256:14906ad3347c7d03e9101749b16611cf2028547716d0840838d3c5e2b3b0f2d3", + "sha256:1ade4a3b71b1bf9e90c5f3d034a87fe4949c087ef1f6cd727fdd766fe8bbd121", + "sha256:22939a00a511a59f9ecc0158b8db728afef57975ce3782b3a265a319d05b9b12", + "sha256:2b86b02d872bc5ba5b3a4530f6a7ba0b541458ab4f7c1429a12ac326231203f7", + "sha256:3c11e92c3dfc321014e22fb442bc9eb70e01af30d6ce442026b0c35723448c66", + "sha256:4ba3bd26f282b201fdbce351f1c5d17ceb224cbedb73d6e96e6ce391b354aacc", + "sha256:4c6e78d042e93751f60672989efbd6a6bc54213ed7ff695fff82784bbb9ea035", + "sha256:4d80d1901b89cc935a6cf5b9fd89df66565272722fe2e5473168927a9937e0ca", + "sha256:4fcf71d33178a00cc34a57b29f5dab1734b9ce0f1c97fb34666deefac6f92037", + "sha256:52f7670b41d4b4d97866ebc38121de8bcb9813128b7c4942b07794d08193c0ab", + "sha256:5368e2b7649a26b7253c6c9e53241248aab9da49099442f5be238fde436f18c9", + "sha256:5bb65fbb48999044938f0c0508e929b14a9b8bf4939d8263e9ea6691f7b54663", + "sha256:60672bb5577472800fcca1ac9dae232d1461db9f20f055184be8ce54b0052572", + "sha256:669e9be6d148fc0283f53e17dd140cde4dc7c87edac8319147edd5aa2a830771", + "sha256:6a0b7a804e8d1716aa2c72e73210b48be83d25ba9ec5cf52cf91122285707bb1", + "sha256:79034ea3da3cf2a815e3e52afdc1f6c1894468c98bdce5d2546fa2342585497f", + "sha256:79247feeef6abcc11137ad17922e865052f23447152059402fc320f99ff544bb", + "sha256:81671c2049e6bf42c7fd11a060f8bc58f58b7b3d6f3f951fc0b15e376a6a5a98", + "sha256:82ac4a5cb56cc9280d4ae52c2d2ebcd6e0668dd0f9ef17f0a9d7c82bd61e24fa", + "sha256:9436267dbbaa49dad18fbbb54f85386b0f5818d055e7b8e01d219661b6745279", + "sha256:94e4140bb1343115a1afd6d84ebf8fca5fb7bfb50e1c2cbd6f2fb5d3117ef102", + "sha256:a2cab366eae8a0ffe0813fd8e335cf0d6b9bb6c5227315f53bb457519b811537", + "sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f", + "sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2", + "sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306", + "sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd" + ], + "version": "==4.4.2" }, "mypy": { "hashes": [ - "sha256:673ea75fb750289b7d1da1331c125dc62fc1c3a8db9129bb372ae7b7d5bf300a", - "sha256:c770605a579fdd4a014e9f0a34b6c7a36ce69b08100ff728e96e27445cef3b3c" + "sha256:8e071ec32cc226e948a34bbb3d196eb0fd96f3ac69b6843a5aff9bd4efa14455", + "sha256:fb90c804b84cfd8133d3ddfbd630252694d11ccc1eb0166a1b2efb5da37ecab2" ], "index": "pypi", - "version": "==0.620" + "version": "==0.641" + }, + "mypy-extensions": { + "hashes": [ + "sha256:37e0e956f41369209a3d5f34580150bcacfabaa57b33a15c0b25f4b5725e0812", + "sha256:b16cabe759f55e3409a7d231ebd2841378fb0c27a5d1994719e340e4f429ac3e" + ], + "version": "==0.4.1" }, "packaging": { "hashes": [ - "sha256:e9215d2d2535d3ae866c3d6efc77d5b24a0192cce0ff20e42896cc0664f889c0", - "sha256:f019b770dd64e585a99714f1fd5e01c7a8f11b45635aa953fd41c689a657375b" + "sha256:0886227f54515e592aaa2e5a553332c73962917f2831f1b0f9b9f4380a4b9807", + "sha256:f95a1e147590f204328170981833854229bb2912ac3d5f89e2a8ccd2834800c9" + ], + "version": "==18.0" + }, + "pathlib2": { + "hashes": [ + "sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83", + "sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a" ], - "version": "==17.1" + "markers": "python_version < '3.6'", + "version": "==2.3.2" + }, + "pluggy": { + "hashes": [ + "sha256:447ba94990e8014ee25ec853339faf7b0fc8050cdc3289d4d71f7f410fb90095", + "sha256:bde19360a8ec4dfd8a20dcb811780a30998101f078fc7ded6162f0076f50508f" + ], + "version": "==0.8.0" + }, + "py": { + "hashes": [ + "sha256:bf92637198836372b520efcba9e020c330123be8ce527e535d185ed4b6f45694", + "sha256:e76826342cefe3c3d5f7e8ee4316b80d1dd8a300781612ddbc765c17ba25a6c6" + ], + "version": "==1.7.0" }, "pygments": { "hashes": [ @@ -167,15 +270,26 @@ }, "pyparsing": { "hashes": [ - "sha256:0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04", - "sha256:281683241b25fe9b80ec9d66017485f6deff1af5cde372469134b56ca8447a07", - "sha256:8f1e18d3fd36c6795bb7e02a39fd05c611ffc2596c1e0d995d34d67630426c18", - "sha256:9e8143a3e15c13713506886badd96ca4b579a87fbdf49e550dbfc057d6cb218e", - "sha256:b8b3117ed9bdf45e14dcc89345ce638ec7e0e29b2b579fa1ecf32ce45ebac8a5", - "sha256:e4d45427c6e20a59bf4f88c639dcc03ce30d193112047f94012102f235853a58", - "sha256:fee43f17a9c4087e7ed1605bd6df994c6173c1e977d7ade7b651292fab2bd010" + "sha256:bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a", + "sha256:d29593d8ebe7b57d6967b62494f8c72b03ac0262b1eed63826c6f788b3606401" ], - "version": "==2.2.0" + "version": "==2.2.2" + }, + "pytest": { + "hashes": [ + "sha256:10e59f84267370ab20cec9305bafe7505ba4d6b93ecbf66a1cce86193ed511d5", + "sha256:8c827e7d4816dfe13e9329c8226aef8e6e75d65b939bc74fda894143b6d1df59" + ], + "index": "pypi", + "version": "==3.9.1" + }, + "pytest-cov": { + "hashes": [ + "sha256:513c425e931a0344944f84ea47f3956be0e416d95acbd897a44970c8d926d5d7", + "sha256:e360f048b7dae3f2f2a9a4d067b2dd6b6a015d384d1577c994a43f3f7cbad762" + ], + "index": "pypi", + "version": "==2.6.0" }, "pytz": { "hashes": [ @@ -202,11 +316,11 @@ }, "requests": { "hashes": [ - "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", - "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", + "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" ], "index": "pypi", - "version": "==2.19.1" + "version": "==2.20.0" }, "six": { "hashes": [ @@ -224,11 +338,11 @@ }, "sphinx": { "hashes": [ - "sha256:71531900af3f68625a29c4e00381bee8f85255219a3d500a3e255076a45b735e", - "sha256:a3defde5e17b5bc2aa21820674409287acc4d56bf8d009213d275e4b9d0d490d" + "sha256:652eb8c566f18823a022bb4b6dbc868d366df332a11a0226b5bc3a798a479f17", + "sha256:d222626d8356de702431e813a05c68a35967e3d66c6cd1c2c89539bb179a7464" ], "index": "pypi", - "version": "==1.7.7" + "version": "==1.8.1" }, "sphinxcontrib-websupport": { "hashes": [ @@ -267,18 +381,18 @@ }, "urllib3": { "hashes": [ - "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", - "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", + "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" ], - "version": "==1.23" + "version": "==1.24" }, "vcrpy": { "hashes": [ - "sha256:7031f9c78a70b9586d2db4a2ec135c4e04194cabff58695ef0cc95e7cd66bc01", - "sha256:dadb4b2798a44bdce5301ec01380351ab798a468fc7ee5a34271bdd8527d8f99" + "sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3", + "sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f" ], "index": "pypi", - "version": "==1.13.0" + "version": "==2.0.1" }, "wrapt": { "hashes": [ From c522c90669636369d457e8110584274485196890 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 19 Oct 2018 17:40:01 +0200 Subject: [PATCH 100/751] added makefile --- Makefile | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..efc25bfa3 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +DEFAULT_GOAL: help +OPEN=$(word 1, $(wildcard /usr/bin/xdg-open /usr/bin/open)) + +TESTS ?= tests +.PHONY: test +test: ## Run the test suite + @pipenv run python -m pytest -v --cov sdclientapi --cov-report html --cov-report term-missing $(TESTS) + +.PHONY: open-coverage-report +open-coverage-report: ## Open the coverage report in your browser + @$(OPEN) htmlcov/index.html + +# Explaination of the below shell command should it ever break. +# 1. Set the field separator to ": ##" and any make targets that might appear between : and ## +# 2. Use sed-like syntax to remove the make targets +# 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption +# 4. Pass this file as an arg to awk +# 5. Sort it alphabetically +# 6. Format columns with colon as delimiter. +.PHONY: help +help: ## Print this message and exit. + @printf "Makefile for developing and testing the SecureDrop SDK.\n" + @printf "Subcommands:\n\n" + @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ + | sort \ + | column -s ':' -t From 87e4b80b6ef1f872566a49127b1e1ee361ffdb09 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 19 Oct 2018 17:55:55 +0200 Subject: [PATCH 101/751] added black to makefile --- Makefile | 5 +++++ README.md | 13 ------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index efc25bfa3..cd5d80638 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,11 @@ DEFAULT_GOAL: help OPEN=$(word 1, $(wildcard /usr/bin/xdg-open /usr/bin/open)) +.PHONY: format +format: ## Run the formatter + @docker build -t securedrop-sdk/black:latest -f Dockerfile.black . && \ + docker run --rm -v $(PWD):/home/kdas/workplace securedrop-sdk/black:latest black . + TESTS ?= tests .PHONY: test test: ## Run the test suite diff --git a/README.md b/README.md index cad6e71c9..c502396d1 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,6 @@ This is a Python3 project. We are using [mypy](http://mypy-lang.org) for type annotation checks. -### Code formatting - -We are using [Black](https://black.readthedocs.io/en/stable/) tool for code formatting. There is a dockerfile -in the repository, which can be used to run Black on the code. - -``` -docker build -t kdas/black -f Dockerfile.black -docker run --rm -v $PWD:/home/kdas/workplace kdas/black black . -``` - -Note: The dockerfile still needs work. - - We cover all the API calls of SecureDrop. Note: The `get_source` will get an update to take a Source object as an input. From 266f8e8e41b8532bba6020b1fd338459c35f4390 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 19 Oct 2018 17:56:14 +0200 Subject: [PATCH 102/751] format code --- setup.py | 2 +- tests/test_apiproxy.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 4a865e111..c7e49676b 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ long_description=long_description, long_description_content_type="text/markdown", license="GPLv3+", - install_requires=["requests",], + install_requires=["requests"], python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-sdk", packages=setuptools.find_packages(exclude=["docs", "tests"]), diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 2faaeb88e..32cfd2fea 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -19,8 +19,9 @@ def setUp(self): self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" self.server = "http://localhost:8081/" - self.api = API(self.server, self.username, self.password, - str(self.totp.now()), proxy=True) + self.api = API( + self.server, self.username, self.password, str(self.totp.now()), proxy=True + ) for i in range(3): try: self.api.authenticate() From f23c4c734e1038a12d11d7dae763cf0ce422aedb Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 19 Oct 2018 17:58:40 +0200 Subject: [PATCH 103/751] gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b61c3c1cb..8faf865de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +testtoken.json + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] From 80b529dc7b2f7bf577fbacaa16725ad6ad0f35ff Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 22 Oct 2018 16:06:23 -0700 Subject: [PATCH 104/751] Update all cassettes for HTTP requests/responses --- data/test-delete-reply.yml | 113 +++++------ data/test-delete-source.yml | 149 ++++++--------- data/test-delete-submission-from-string.yml | 179 ++++++++---------- data/test-delete-submission.yml | 111 +++++------ data/test-download-reply.yml | 117 ++++++------ data/test-download-submission.yml | 120 ++++++------ data/test-error-unencrypted-reply.yml | 99 ++++------ data/test-failed-single-source.yml | 17 +- data/test-flag-source.yml | 149 ++++++--------- data/test-get-all-replies.yml | 57 +++--- data/test-get-all-submissions.yml | 54 +++--- data/test-get-current-user.yml | 16 +- data/test-get-replies-from-source.yml | 125 +++++------- data/test-get-reply-from-source.yml | 151 ++++++--------- data/test-get-single-source.yml | 136 +++++--------- data/test-get-sources.yml | 86 +++------ data/test-get-submission.yml | 147 ++++++--------- data/test-get-submissions.yml | 122 +++++------- data/test-get-wrong-submissions.yml | 103 ++++------ data/test-reply-source.yml | 97 ++++------ data/test-setup.yml | 16 +- data/test-star-add-remove.yml | 198 +++++++------------- 22 files changed, 972 insertions(+), 1390 deletions(-) diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index b5bc078a1..6941307ec 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -4,100 +4,101 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1OTkwNywiaWF0IjoxNTM0OTMxMTA3fQ.eyJpZCI6MX0.TjQEJeRQHVqKjP3dA9ueanBPY-hvAjx7FsWwEdNntj8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-sensitive_clarion-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"9f7d04ed-2439-49bc-8c9f-de872cff258d\"\ - , \n \"reply_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/961d557e-544d-402f-bb00-b566e08fb354\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0\"\ - , \n \"uuid\": \"961d557e-544d-402f-bb00-b566e08fb354\"\n }, \n \ - \ {\n \"filename\": \"4-sensitive_clarion-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/295bad24-351a-4c62-8d62-3f5da027d51c\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0\"\ - , \n \"uuid\": \"295bad24-351a-4c62-8d62-3f5da027d51c\"\n }, \n \ - \ {\n \"filename\": \"3-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/11537477-56e8-4e65-aff9-1e57a6039540\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ - , \n \"uuid\": \"11537477-56e8-4e65-aff9-1e57a6039540\"\n }, \n \ - \ {\n \"filename\": \"4-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/8789dbaf-295c-4771-a1a4-87438aaa2239\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ - , \n \"uuid\": \"8789dbaf-295c-4771-a1a4-87438aaa2239\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-die-hard_chancellor-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"719a8c13-9352-4380-9619-3015030b0e49\", + \n \"reply_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/68603968-b307-4607-80f7-cc7856f90f2f\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5\", + \n \"uuid\": \"68603968-b307-4607-80f7-cc7856f90f2f\"\n }, \n {\n + \ \"filename\": \"4-die-hard_chancellor-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/dddc31e4-c720-4ca4-bd31-62242d91fe6c\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5\", + \n \"uuid\": \"dddc31e4-c720-4ca4-bd31-62242d91fe6c\"\n }, \n {\n + \ \"filename\": \"3-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/19f7dba0-56dd-4124-9b32-07642b28d95e\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", + \n \"uuid\": \"19f7dba0-56dd-4124-9b32-07642b28d95e\"\n }, \n {\n + \ \"filename\": \"4-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/131455ca-6135-49df-a178-4fa50238050a\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", + \n \"uuid\": \"131455ca-6135-49df-a178-4fa50238050a\"\n }\n ]\n}\n"} headers: Content-Length: ['1967'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 09:45:07 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMTo0NTowNyBHTVQifX0.Dl7CIw.KuIsM6oBlTZcpDnb14o9NED_4Z0; + Date: ['Mon, 22 Oct 2018 23:04:56 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDo1NiBHTVQifX0.Dq_pGA.iIM2KMQyp3YFlgF-KPoheeNv0U4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1OTkwNywiaWF0IjoxNTM0OTMxMTA3fQ.eyJpZCI6MX0.TjQEJeRQHVqKjP3dA9ueanBPY-hvAjx7FsWwEdNntj8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/961d557e-544d-402f-bb00-b566e08fb354 + uri: http://localhost:8081/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/68603968-b307-4607-80f7-cc7856f90f2f response: body: {string: "{\n \"message\": \"Reply deleted\"\n}\n"} headers: Content-Length: ['33'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 09:45:07 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMTo0NTowNyBHTVQifX0.Dl7CIw.KuIsM6oBlTZcpDnb14o9NED_4Z0; + Date: ['Mon, 22 Oct 2018 23:04:56 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDo1NiBHTVQifX0.Dq_pGA.iIM2KMQyp3YFlgF-KPoheeNv0U4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1OTkwNywiaWF0IjoxNTM0OTMxMTA3fQ.eyJpZCI6MX0.TjQEJeRQHVqKjP3dA9ueanBPY-hvAjx7FsWwEdNntj8] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-sensitive_clarion-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"9f7d04ed-2439-49bc-8c9f-de872cff258d\"\ - , \n \"reply_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0/replies/295bad24-351a-4c62-8d62-3f5da027d51c\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/b8a2a77a-edd2-44bf-aebd-a0377b51d8c0\"\ - , \n \"uuid\": \"295bad24-351a-4c62-8d62-3f5da027d51c\"\n }, \n \ - \ {\n \"filename\": \"3-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/11537477-56e8-4e65-aff9-1e57a6039540\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ - , \n \"uuid\": \"11537477-56e8-4e65-aff9-1e57a6039540\"\n }, \n \ - \ {\n \"filename\": \"4-sensorineural_bran-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"9f7d04ed-2439-49bc-8c9f-de872cff258d\", \n \"reply_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c/replies/8789dbaf-295c-4771-a1a4-87438aaa2239\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1edcfd04-9379-47de-91ee-6a649c05793c\"\ - , \n \"uuid\": \"8789dbaf-295c-4771-a1a4-87438aaa2239\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-die-hard_chancellor-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"719a8c13-9352-4380-9619-3015030b0e49\", + \n \"reply_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/dddc31e4-c720-4ca4-bd31-62242d91fe6c\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5\", + \n \"uuid\": \"dddc31e4-c720-4ca4-bd31-62242d91fe6c\"\n }, \n {\n + \ \"filename\": \"3-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/19f7dba0-56dd-4124-9b32-07642b28d95e\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", + \n \"uuid\": \"19f7dba0-56dd-4124-9b32-07642b28d95e\"\n }, \n {\n + \ \"filename\": \"4-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/131455ca-6135-49df-a178-4fa50238050a\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", + \n \"uuid\": \"131455ca-6135-49df-a178-4fa50238050a\"\n }\n ]\n}\n"} headers: - Content-Length: ['1481'] + Content-Length: ['1479'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 09:45:07 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMTo0NTowNyBHTVQifX0.Dl7CIw.KuIsM6oBlTZcpDnb14o9NED_4Z0; + Date: ['Mon, 22 Oct 2018 23:04:56 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDo1NiBHTVQifX0.Dq_pGA.iIM2KMQyp3YFlgF-KPoheeNv0U4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index bd9ce7f34..36241bd0d 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -4,138 +4,97 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"yellow-white fecklessness\", + \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU64BEADXKtc0RnZlzIpI2fM7rH0fhWXJ2oJqTMl9HEX3/G4d05PqSu9R\\nxXczPVAAeCpWR+1PwiBndkeLZ3wBJX7ergkHc+c8zas41HVoPpEKydXSi3n/CgZP\\nDs8t8KbT9N6D5ZCMOGfqr3CXSTtUOYT7BRU/mo47fQgp+5EfL1TKoU7/E65KETK/\\nH7NPJY5F+LFh9X8QjpiwUTcna2l+rWVLHBmhV7s+tnSKpO8bF6ah49QbKPZV7QGG\\nsI0KGOiOK+R5eHPtkImPE2s6EvdLKOerbYD0aZI+B/71sQM2jwvjr1+1eS9iWTNs\\nYQ42ba62/3Uz+3yEk9P9/2nArxthrZZmRxrXRrVNqYBc9oAiGmxdf7aBPP3zaJmU\\nrv9maAfMEdxKIQIhhBfw+GWhT5Le21bslkwh9mnCDRTIi+Tfl/x8PtCF95jJQcF3\\nuatin3PTm2hupt7sDVDV06eM/LTgdKrxFaFn6eEyPR7LsqNRO4fHoeXONvphN+/j\\nrfgTQsfsyNlmbsaaqk2BkE6d+f8HU8g136B14TA14tpC2m/XuUvx5MZ6aHeERhAK\\nfRj4gm4YPEhJSXJRJ6orsYEdbxzq+vgWrfJTxVd9qPs2m2DOQCutRwEcbKWdHTqv\\nz3jGX569AUNGp6+4M/LSaKNw/D7xVm9MecIsQJb6AkdVJ8eyPMAHi39tywARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VUtKQlhKN1dTTzc2R0xaN0ZBS1NKU0hRRUYz\\nT0dXTjM0VzNWVUZQWURaVFFPQ05DRDVTRzQ2U1BJSDZNNFJJWUkyRkpBMlZLNzNG\\nREROVjJGWDNMN0I2TVdYVktITTNFNFdNRkQzQT0+iQI/BBMBCgApBQJbzlOuAhsv\\nBQkB4JuSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQQqyrJapUHeCs3Q/+\\nIWYg+AFSY9PJLmC/m/oqv4Y8IHfXxOxWvoiQBodbdcKxOyjTgm6QItA5jP3t+t0J\\n9CjcVCa0rSqC3/p8X/WtoZHcJCU6MmBPaDdbh+3zpKWPdHRUzdHFO7sWYmOL9Kmu\\nPmed4nz46CvfHcBjGAHeAsbsxM+3i+yPT1rKUpqPYsk4ZrAi0B4OHKowwVkV723n\\nZNlpNeQXMcwYVylR9+10vTf8lFh9hMRisk99FJ16R3p/Lamy6I1lqLiBOgDLmLt0\\nSO0qOK5jI1qTBUNDaxay7JAKpFYQftN3JzCnGJZPEsc3+Y2hJF6RPw8OlU10Bocv\\nmkM9N2pBbbiAVIqiaB0hFHxLNihnbYqhmhksxofbEqLk744fb9p8Y8yhIPw7jCZ2\\niqiGARmdAQ2ZNXaq5FqrT7nvkReONrAQ1sQ0FVk9h1A7NfYN9eqXV7U3FjnFf8Uy\\n9EvmgTYNDBGA4ZI6bgTyVI3zFeToKz9OWRnN+EunoAuvuzqzcPMTUsHsjCnMST8W\\nuTyU7nEUHN/Li9TE2vW8vvpkl46XWBNBtsD+DGwstyfjqGQfZPHDbM+Ikjo/amMw\\nod4WT07+zXlz4PGzTpEENE0MQW/eaw9iI2DqrhX++plZljoORdqDMvqzbXDWIaHc\\nYU7zX9Ff163XuaDuIDqekUo2DP83qGWq9brLfg6qxoo=\\n=jT2/\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:48:15.508121Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/remove_star\", + \n \"replies_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/replies\", + \n \"submissions_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/submissions\", + \n \"url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4\", + \n \"uuid\": \"f1ed565f-ed3f-4316-9de8-56dd8af3b4a4\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"downstairs depth\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU7ABEADagsl6IqF46/B502qxTKB2OS6FsqQT3BOyseZpALgvrs7tBmsU\\n9qZrEZ5mEVKQK0wA/4Axt+J0rwNieC3egz/hSfJrxdedIEeX6GYJpN9C2tGj2X1Q\\nn9OCPT7GtgVuwUX+2WUyVsmcikF0gQL+VgFAW3TRAT1qWZ2TROYloQGvZZNJM7cx\\n/UKZDOBxyuuhgn1OqSXQF9W/tzZB+7TfN1xdxMDlfr4JVMuh8H2dK+KLdfcaw3BK\\ndOEw8XWTkqDK9E7ZHbzQImOqWJG0TMvo1k02zuPiA2E4JQHg7+mnL8rrRjZ92k+3\\ndsfWoNhKqlcy8Yd9uxb4OY3uo4u+VF6fShTpbYngYmFImg/54C1rge0UpZX0uc1f\\ndYJP6GH41NC/+kaUROTq66tVsKZM+jewIs+FvgvUmLF0jH2Tv/o2K0urw8LNiY9W\\nc+3zkNAq+K/Q+QjhLF7fFXUf7JVT7z3pyjuphrLmUT+yyJvFGOjAOau0YKygCoiG\\nHWmneB1SFoY2d5CnyWW1tfaG2TcN8Beiv1tOLayvLmweVCyyrziidOjwRx3yKDdd\\nD0XyJ2ducIfN4z04OVb14Bfbq4D9s1MpZ4P+jRQcEx+F6xS+Zm/UWOrZgGElCDMs\\nKzVGy4G090xGGKdyqt3d+yEMVHoI1TbWnHdIMzALL4SpIBL36aPouWa56QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SENCQ040SVpVTjY0RkEyNTNCTlVLTkMzNUFE\\nRk5DQlgzRkhJSjVIRElSQk1DUEdDSTZSQk03T1M0VUgyV1NUQzI1WkVaU1JOWFkz\\nU1VZV1ZNN1ZTWUhMNEJPTjNNWUhDTVg2RzVUQT0+iQI/BBMBCgApBQJbzlOwAhsv\\nBQkB4JuQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQJa7v8Llgs7oVBA/9\\nHZMYvqlcRBca1UHTF8TVR3DhB97TN34smOvGNlh8OJEoPQ+4GKIcbToJ1cgWSf6Q\\nHECs/++DJYSlEj1fRi3xPDxMOKerkzCU6Hm0g1FzX7O/v/p0OpTGgLC3PSFMTZ26\\neP+1r5EfdEr4f0yvT7LhiUOWpPJSlobgQtb0up75eVjJeuSlYd2l2DYi8Lo6K+pX\\ndq1g532s/Elc7GpJfvanfR8lz5NVerAe1oYccjWF4iukiID1MsdVS0LMk4zRklND\\nolOoHOY+Set6jdvbC2y8bDr/o92wgBiTVL1tBqY66xIDN/F+sxFtF7slg9hMrIN8\\nIlhCEURDm/H6HeJn4hqGSCfbCL2DwZb1/X5eYc0w1y69tyzCgiGVUdwMu34LfurU\\nxQeX+CLXhNrbi4iVUJkH8L3NRhSIiemfss032oswXWzidwDjv9iwAYC6dbYy/4al\\n39Prp9chEt23bWJ20F/t7nsyDyGO3u1Y2wFUXev5FZ0seNAuDRkjwSltgvAumB+x\\noB7n6MeN8wHckbVMLYkwKxg2PT+V7mj8zVdwTMfmfV7opoDRxHtvLzCJAveUOhnR\\n6iwt4dtDm08FjBoot1bVz15jqtR+MLbdoYGMFnuBOXJ7jym0mmQjLb3kGpbEwD03\\ndUPFTKGdN/KLrYD005pi8cBIFKznKKs/WZkSQGnUG7Q=\\n=AoO+\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:48:17.821470Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/remove_star\", + \n \"replies_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/replies\", + \n \"submissions_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/submissions\", + \n \"url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90\", + \n \"uuid\": \"eb01cec4-7216-4112-b542-fcc9c3979b90\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5244'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:42 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDo0MiBHTVQifX0.Dl6X2g.S93ySXwdE3jYuOkvcWzLAdwJOf8; + Date: ['Mon, 22 Oct 2018 22:48:28 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0ODoyOCBHTVQifX0.Dq_lPA.xCBt3s1su7-BcVhsHXG7gP-oQD0; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e + uri: http://localhost:8081/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4 response: body: {string: "{\n \"message\": \"Source and submissions deleted\"\n}\n"} headers: Content-Length: ['50'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:42 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDo0MiBHTVQifX0.Dl6X2g.S93ySXwdE3jYuOkvcWzLAdwJOf8; + Date: ['Mon, 22 Oct 2018 22:48:28 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0ODoyOCBHTVQifX0.Dq_lPA.xCBt3s1su7-BcVhsHXG7gP-oQD0; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"downstairs depth\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU7ABEADagsl6IqF46/B502qxTKB2OS6FsqQT3BOyseZpALgvrs7tBmsU\\n9qZrEZ5mEVKQK0wA/4Axt+J0rwNieC3egz/hSfJrxdedIEeX6GYJpN9C2tGj2X1Q\\nn9OCPT7GtgVuwUX+2WUyVsmcikF0gQL+VgFAW3TRAT1qWZ2TROYloQGvZZNJM7cx\\n/UKZDOBxyuuhgn1OqSXQF9W/tzZB+7TfN1xdxMDlfr4JVMuh8H2dK+KLdfcaw3BK\\ndOEw8XWTkqDK9E7ZHbzQImOqWJG0TMvo1k02zuPiA2E4JQHg7+mnL8rrRjZ92k+3\\ndsfWoNhKqlcy8Yd9uxb4OY3uo4u+VF6fShTpbYngYmFImg/54C1rge0UpZX0uc1f\\ndYJP6GH41NC/+kaUROTq66tVsKZM+jewIs+FvgvUmLF0jH2Tv/o2K0urw8LNiY9W\\nc+3zkNAq+K/Q+QjhLF7fFXUf7JVT7z3pyjuphrLmUT+yyJvFGOjAOau0YKygCoiG\\nHWmneB1SFoY2d5CnyWW1tfaG2TcN8Beiv1tOLayvLmweVCyyrziidOjwRx3yKDdd\\nD0XyJ2ducIfN4z04OVb14Bfbq4D9s1MpZ4P+jRQcEx+F6xS+Zm/UWOrZgGElCDMs\\nKzVGy4G090xGGKdyqt3d+yEMVHoI1TbWnHdIMzALL4SpIBL36aPouWa56QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SENCQ040SVpVTjY0RkEyNTNCTlVLTkMzNUFE\\nRk5DQlgzRkhJSjVIRElSQk1DUEdDSTZSQk03T1M0VUgyV1NUQzI1WkVaU1JOWFkz\\nU1VZV1ZNN1ZTWUhMNEJPTjNNWUhDTVg2RzVUQT0+iQI/BBMBCgApBQJbzlOwAhsv\\nBQkB4JuQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQJa7v8Llgs7oVBA/9\\nHZMYvqlcRBca1UHTF8TVR3DhB97TN34smOvGNlh8OJEoPQ+4GKIcbToJ1cgWSf6Q\\nHECs/++DJYSlEj1fRi3xPDxMOKerkzCU6Hm0g1FzX7O/v/p0OpTGgLC3PSFMTZ26\\neP+1r5EfdEr4f0yvT7LhiUOWpPJSlobgQtb0up75eVjJeuSlYd2l2DYi8Lo6K+pX\\ndq1g532s/Elc7GpJfvanfR8lz5NVerAe1oYccjWF4iukiID1MsdVS0LMk4zRklND\\nolOoHOY+Set6jdvbC2y8bDr/o92wgBiTVL1tBqY66xIDN/F+sxFtF7slg9hMrIN8\\nIlhCEURDm/H6HeJn4hqGSCfbCL2DwZb1/X5eYc0w1y69tyzCgiGVUdwMu34LfurU\\nxQeX+CLXhNrbi4iVUJkH8L3NRhSIiemfss032oswXWzidwDjv9iwAYC6dbYy/4al\\n39Prp9chEt23bWJ20F/t7nsyDyGO3u1Y2wFUXev5FZ0seNAuDRkjwSltgvAumB+x\\noB7n6MeN8wHckbVMLYkwKxg2PT+V7mj8zVdwTMfmfV7opoDRxHtvLzCJAveUOhnR\\n6iwt4dtDm08FjBoot1bVz15jqtR+MLbdoYGMFnuBOXJ7jym0mmQjLb3kGpbEwD03\\ndUPFTKGdN/KLrYD005pi8cBIFKznKKs/WZkSQGnUG7Q=\\n=AoO+\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:48:17.821470Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/remove_star\", + \n \"replies_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/replies\", + \n \"submissions_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/submissions\", + \n \"url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90\", + \n \"uuid\": \"eb01cec4-7216-4112-b542-fcc9c3979b90\"\n }\n ]\n}\n"} headers: - Content-Length: ['2630'] + Content-Length: ['2628'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:42 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDo0MiBHTVQifX0.Dl6X2g.S93ySXwdE3jYuOkvcWzLAdwJOf8; + Date: ['Mon, 22 Oct 2018 22:48:28 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0ODoyOCBHTVQifX0.Dq_lPA.xCBt3s1su7-BcVhsHXG7gP-oQD0; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index 2a23a30b8..2b08f7205 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -4,159 +4,132 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"actionable\ - \ aloofness\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BrQBEACw/XhUrSvJKTPBo/p3YcDI0hj3/tCbDIkZ2zjGiz/f5EbF7g0E\\\ - noN/+vM/uPNs7QEo8ry7wMYgZG/ep19AxIA/+eu3gzHIjoibyHB2Mm7QqLCTTlhor\\nkBZ7uDxpqqM0WuEcF8IuODXC6HoaVELS0oK4Edoa5gsvSt5iWaGP4AwwirfAE0dN\\\ - nuABim0CW69TVv9WbJX/OyBL5Uh2tpWDKqd+FijLCLXRRgsw0IoCheuEHt+S4YSJZ\\nyT40bcwP31J9kkp3cXaCJNj56orep+5Y3baK1EUHijo8apJhXX1O2CrT2mfYnOXm\\\ - npsRaLtsKA1FuIaVt0OOrARA/LNVT04z3v720JAsFO8j+/kc3gQKmo7tX2dEszctl\\n1beRw6EK7N7hxdYfFLuhAfRqJdRWNBv6YofwPvy98Gtl2ZKIjCX9GPalLnt/wC4C\\\ - nraYDrNZjSvNsmV2r85xNN/HQ/CWTDpSOl3jmOPDC959IfDmca+2zS6QyM6efeDiY\\n33IB85DL0G/tNCfWtiw3SEURFhBmb+XYMTtS9rnIXebd1HjsEsL5jtAInba+Nw0K\\\ - nv3U4RIqfyqhPHgsxMCURrMgS9yjF7W8R/dxt5DwUFFWv5mq/tdtxGX7ADYa4Jn8t\\nNqWvqO38J1bE0nXT3du55e6Yp23qTWJTb7ynIA4FPYxun6zBPGAK6aq8fQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QVRXSEJQQk5MNTVRVElDT01VRjVQNDJTNUc1\\nWTJBT0tNNVRZWUhRQUlZWVBOVENTNlYyQ1RDTVJRWkZSNjJSNkJGT1BER0NLSUpN\\\ - nS0pCQVVCN09HU0JQM1k1RFgyU0hRWFNORVBKUT0+iQI/BBMBCgApBQJbfQa0Ahsv\\nBQkB4X0MBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsTbrutc0Qtub1xAA\\\ - nq9MAG1IdEVEcStGQ2UdVfberCBfSuWBXbahE3hC8iBrGEHnVESi1smlKgDEa9Yuy\\nFhB0ScSQKLawMUPrCDINTj74PAfndshsYtnW1eMW7llLQ0vXv8Stfl0nP+ytdQuF\\\ - nxi/5SyAZXJTVSjmoI4JqCdPaHMrR8UxZwYc/7LwF0ydQfdzB+OJyWQSQsWzmL+u+\\nndThDKitMQBbrRag2c7oVscg2Z9MM/FRE4jiLweFsFIJ05wAmxq0F9rdJCaVXNHR\\\ - n5tY+U+rIvHmXxZ+3qLBFuDyjWVsStlQAkEeilFC2a5ionN6lX8PQp3YfUgfrytu+\\nHo171laiyw3bxUxEzkiuwljzk290GpA0JG3PkKJyLdBr8G/r0nag1/rHqJkrB+uB\\\ - nOp0Q6diazwxNC5c8dmEFrlotfExXdEarrwVYnoA2NaBOYQRPI6nsmTjL3Q48gpYV\\nK5IuqoXwPmQgUQOMGaso22dcs28Jo1Pp4R1R9IAo10FhuE5BaW5PPEx7TTtUFSDr\\\ - n5Ks5/lW5lVXZIrRv9ACNWawv9DE7Dq3fM7o7X2DgSdPaxHi6S/oFez1M8d6kUNHc\\noS7qnVvDHyVd2A9hs3zBh+hdZyvNFmdKTuj9cNlC7UQ2wp1gAYQRqhvZ9UKuKfJv\\\ - nCSlHymQiqYdshNtmNXwVEnQhdQCLNNL/00GzYKuY2aw=\\n=Xp0+\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:46:15.287689Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions\"\ - , \n \"url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ - , \n \"uuid\": \"0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"lurid lecithin\"\ - , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ - n\\nmQINBFt9BrwBEADeSxgFEMM4oc7ClnilLflwOf2kiFz7W0j4j1S/xDf+TcacNtmV\\ngwQxv34g1fKBMF4fXO3EelSM4hsxeJdnm60fmBEdzFY5UpD2l/2hWUXxFEcPO0V/\\\ - nIIGq8CdwREzUjg6uZYw0sOz6bmk673dKZWYegbhEm1uXKwWtr42vLyeplJgRCgvF\\npQHFTZSKsZr/hhX8CZXCBKBcd9HgQWZ+MllE2uV2CkBy6RuJMo7wJNNn1jtC9Kp8\\\ - ncrrJvVRZt/3PwlKBFQlsxcRpQd8OBdD4i5iut+gA4YLSGelgSd/5DVYixz+LQsVD\\n80C5GX67iyfb35+DFXYPeUdWPBvtQoyFgZzWTHSjY3QUKZRPO1Cc5KnyH7mPy44x\\\ - nuEJpexd8URxkWe20o20LK2RbKEfBm70eUZYRg4R/TGKsFL9KcNtHUyk38rO+I5Vt\\nM1PGi9rIhjltkLUWVkuXlYTYngOdpSVskZBihuqOH5VZdxfQciURQDuiCMT4A9b6\\\ - nlqG/keD9ACE1DxHwGxekUMnDJ+2Sj4fckWssEewmkDE+meWtUlhyPgmnb6B40YxG\\nxD/CPdBoU3E6rJCfXWFy7Ei8ek3SWMqOotIbhdZSzjqSHKux3Bt9ZTa6/vff1jQU\\\ - nddhNMdYc44/1mdWx+Zwt65tE8e7sL3tNdzBSPuH5j0+jabGLlWe3NOvW0wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SVQ1RFJaSkIzVkU3Uk5MRFNXRzZNSkI3RlJQ\\\ - nSEVFRFNDSURFUkZVQk9NRFBWUTZDN0ZLNFg1TVJPVVBPQUVWWkI3U1JaTkRBRVRH\\nQUczNlY2NUM0Wko3WVdPTEpJS1ZHV0JINFNYWT0+iQI/BBMBCgApBQJbfQa8Ahsv\\\ - nBQkB4X0EBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQAOTp6iSfEsXlRQ/+\\nIFXWeE/JZQ4KwvnZRebTQ5hdBLO0zbZz8dudyYJcRJkPz600jbbesdCiKYGhAV/f\\\ - nnp1nUtHg6gZt8chjs4+zyuRhnuiudr5a2nwTypseemuL95eGj6w72Cashp85YNB/\\nOTz33UaXeyoUkYKCX1ujVMX9yyTo5qcc26hzOvLh8jDfkM17Byl5RX2m+TQVEges\\\ - nSGLL1LHSKynCqS0Cw+ijFcEgeTAKd2NhfqcznYO8k7ZlICnPhI8uP5qt3yas8MQx\\nAcpomJ75A+ej3+rpYr0gcrwTNxelMT5ZMUvAEQn4hCOuVJG//ZCVoY67zFXCetm4\\\ - nTanNl7hsa/fOR7u6aYUZmJmMmIW1VwvkZotYJpdmkKurwXyge6ZuJpdBR8fV1rvq\\nkWlwvpOKRXhcpxIKQVquGugb4zNBpmdQ6cuy4E/RdDyUD3Q6SsmaMMWX1qsIYHzk\\\ - nBH00FEtAy5Hrzvjp1O7GeJfJZ/FBYBpJjq9FACO+xj5SdogkHuTOXHARmkB8fD/m\\ncb+lHwL2mekpyJYf1bxdO1LbC+UAoBQrSpaRhO0XFDJfRYIj956YTAzSo3nApt9o\\\ - nl6bXtk042xZ6+3KgOXMqe7iURQ/UVlI2sNfoI4fSwkvsnqQ9O/ySUvTvcMC5WLyI\\ntcQmGjKtnskwRzd7Mi2ZI02p2C84Jzy7u6SnR4/JnEY=\\\ - n=XyNl\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ - \n }, \n \"last_updated\": \"2018-08-22T06:46:22.818014Z\", \n \ - \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ - \ \"remove_star_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions\"\ - , \n \"url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859\"\ - , \n \"uuid\": \"9930c24a-7829-427a-b602-77fd383b3859\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"divided sawdust\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU/oBEACxBiAEh6pYDlmjdMjEJ9CDGMtnBGZLLHZ5BuHAHUwuIO2iHUGj\\nc6jdlUDdp/NUuV7pGXIEvqMXaKMuds8lJCE/iRQm151NNMKe9eHLwzXPAFJVslGU\\nPgW1aYcCrg3p7Wb71R+kGdHiUcENU7isMuVCp9hMkZnsI7nXRI96dkJalIaFS7im\\nFr1BncjXE/5dOEKAQszx8ud+OY6x2zpMOASTHUKXPZq5ShyEGHt4MYMQJxx5zBXE\\nnXa022NHF/JxkRniae7/P1qO1DAHVU7Pk23mRPWcN/7yZfhY0l516sUhlD5+P4/c\\nQdat1Ewlrulvk4v4Ehf3boJ40DyWWzziFjxJRyU6ZIfPdu98kKS1jlmqj/6ku/vL\\nokpWgtaLA3HQxsAXaN5mH9BDbGkpXZMxJbl0vzcWpOyo++4JnpPgDj5CoCjzjxcu\\nFadPaPM5JhbGgr2WUULawanYUkEAnFm/dUQ0TljzdoqBfuZ6nJgTZsLmqQkB9VlH\\nSJmocmXYsOIIR0Epyg74dJdINlA8gbW02J34Rlsq+wJ8Km2vP9aKXAtuYlBP6QVC\\nIKo/zVfuvN7TwwtuXmA21Io1xP7EbUXOQoi+Y6P/6Dv44OZ66OlqpxqwoN63K6S1\\n0I3JG00AU/X1ipudC8G98pL11HKcgTMzrTJlgh+z3O49QUiVyA8c04ihJQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SUJWV0dUNFJRV1laN1FPRUhOTjNET09NV0VY\\nTkRaVjVZQ0dSTTdSTkhDSEdLRU1SWDNJVEdGWkpYMk9TNjdOUUw1MjVYUEI1NEVG\\nSkRXQ1ZDQ0tKSkdaWkxDSlJFUkNUR0tFT1dJST0+iQI/BBMBCgApBQJbzlP6Ahsv\\nBQkB4JtGBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQUohvvi8yjn+iAxAA\\nrLVWY1bUpzb5cLTD/F470jMXsWHcdFwtWHUt556esgN2ZX7RtIkDX7NtMxThJmy6\\nf6RH3OXdNLDzuZMzoO8B9CvxJAxjLPsfeeQr7vDgbyoEjCUdPGAdkhHhKkh20zBV\\nkXD0xBuy6DQoKMGidLXoMC9P7HIByFINV8A+FEkZfIld2VgP54vmrsIzJT6y+Gdi\\n8bfrfsOxxrjXQb/6aWEOUafm3f9EUmBUuuWdH6AsBATQK9QdbECRC9znWmV21A1g\\nizGuDb/YrXZtuakHaGHwtAU4Y5EomMjK+VZaIKtMNok63+0kgey/+VdF3ESNRKUe\\nOPhXZl5SlH5zxy7yv5w1SgSiHRaYGwU9KXJ8WyeuGwNlIgk70sAdl7LvvGDa42ba\\nBFVWoXBSa+b6jWjVkBel9bRDWMlPhVndlFZjYcA6mAZ3CRHeXi68Yz84ULdVgHMv\\n+YY/SDENOIwK8KXQin6+u5xxeQ9u3oh63mcc6BebsF0TUz2k0FQ5uhtuCIBdW1n3\\nINR+jlM2v06jzf4JjfNvIedDzzHo3M40AUrlpV5bE/GHELMcM3RNY8XplLBpdSSB\\nZaAbV3zvwQ1Z82DRXZ5wUjmHcTIwNfVD5lS+NsBtZ/nfMEz2aeX6gIpknDX7U9t0\\n1piF2Y74gdV1e82uurrc4EpCkkar37fKRlLAsxxV1/E=\\n=W9AO\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:49:32.268753Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/remove_star\", + \n \"replies_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/replies\", + \n \"submissions_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions\", + \n \"url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", + \n \"uuid\": \"83442bde-13e7-49a7-b162-646e7f8f87f4\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"uniform boondoggle\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU/0BEADa7ktrBGdmCHbEXQAXlZzvesuMA+lAOQN8Ovh5LywKYlHLZ67I\\n7vqdDMxNw/OCiRspJORyxStr4fHRidh6nbdlj0Y8ejFOQK+wbXAX9VztZ/pV8rp/\\n3iM+6JpV/ECeaQztN6g3gUYZYTONUqpmCYXNsp4vCtqBmSgONCf6YkbPAJhrqtXb\\n/gkibdt043o4SkJpOcdIMGqc9TwpIn0f4ryWXSpTZlTArzZ/gO0TEJcN0hZRvOqF\\n1WJAzsvJyL0mmWBd+fvnmXWfGRDuxDdUQN46qHYiUGK6B/VnalXpvmIPCivqwlKV\\nED5Gyw/iCTsOPoOFAdvshv9umlaJXbdapervOLmm7bQu/3EQx9Yrw92V2H2jtOek\\nYIS2WOXhhr6aPYUmwW8AEgv0719Gk8CSGO6XLlMS+aJ055diVZHhjXkxvU3Kauo5\\nP7m6s3FQQcZHpxePkSqDJbf87/O4g7jkFfc7QaY6s/B3WWNeMtSCdN00NKmWrcJw\\nvprdJpqcoOZ9ic6X1cGuErpu09rHq+BSUWa47oQ0lQBtq3Mmq8fOT6Cob1qBHR1Q\\nBrKX95Z5MQW8aRL1+SpobGZYOa2ohfg2IN9mR/4Bs7wkIrjWN+v0Nh8wza9AdRGP\\n7hL+qozUtadCURs3SgIisO6rUO4gCkVY9fDNf48RkAtBRwtTeAyAIN2B2wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NjVaNkRBQTdISDNaRlFGTVFMNjdSR04zRDMz\\nRkI2WVFRNkJXNlpMTEY1TENaTjNBTktSS0VJTkpQWlNCUUczSU9MN0EyS05DTVlU\\nVERKRzJBQUZBTUFaTUFDT0dRVUgyN0tRSzRRUT0+iQI/BBMBCgApBQJbzlP9Ahsv\\nBQkB4JtDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQc1VGGGgsAaiOdg/8\\nC5DXgkl/e14v7hcl28k+lkC/dNBHbjCmOW+Ew5IAXvjYwf6K6NPyqpq/+L5lrbPL\\naWgVfFexU9CGNfJwr87cjYU+g8AVYq1N7k0YPdq0i7uHZjPHox/GKzXpB1PmlK3D\\nhxIPKqVTTRDzV1yZaxLHJk0mcl5Ow/kbruRMcL4wdiV94a3LxGAuC+Ca73UOOioK\\nxCViP2v+HWXFrHkF5GzWbAKpn3EoEB0bdh8xogamFCvBJ3fprnFnefMGpcgAI3/o\\npGZrjhUE/+hsFe+5KkgBDbEbySY0WcNvEpLBiX7Jall9JzzURu4XTl8QcB0SicYd\\nOPG95BE1C5EBQgZVapHCmx1EASR97WHkynL33JXLdLXZi8Lv+yw30I7uSZQ02A/r\\nSKXmnInD+bJbMMjg/QLHpJ/IUa9gNbhW2h/mVSGIhzwSWq4PQ9E5gXU6PaDYL00v\\ndKhEaOFyF9hEh+8aRjAE/8ztXpTJ98LwE6vF1KhKj19vk8SrPlfNDxmlBxb2P85A\\nPmzcSKMpPvAscM5I/m5h3xLX1ppq9qVHmNx/sn0ChZVBXbu1VyRWBHd7n0IK+rEv\\npVTJdgvttTk6xkIFTweAVKtUa/zS6A55TskHdtYQSJfTTEgpWgXQxDrsS0GMFl/c\\nI3+YE6cx/ACuyq1vS2OclhisZSG0fyFSX8O0NxrJg/w=\\n=vNwL\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:49:34.518303Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/remove_star\", + \n \"replies_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/replies\", + \n \"submissions_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions\", + \n \"url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1\", + \n \"uuid\": \"6ef758d0-c06b-4e8e-9cad-fe97a95037d1\"\n }\n ]\n}\n"} headers: - Content-Length: ['5237'] + Content-Length: ['5236'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; + Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions + uri: http://localhost:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/c1bff57a-113f-4b85-9b78-7a7d137f4ca4/download\"\ - , \n \"filename\": \"1-actionable_aloofness-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ - , \n \"submission_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/c1bff57a-113f-4b85-9b78-7a7d137f4ca4\"\ - , \n \"uuid\": \"c1bff57a-113f-4b85-9b78-7a7d137f4ca4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42/download\"\ - , \n \"filename\": \"2-actionable_aloofness-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ - , \n \"submission_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\ - , \n \"uuid\": \"1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3/download\", + \n \"filename\": \"1-divided_sawdust-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", + \n \"submission_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3\", + \n \"uuid\": \"5b157795-1f3f-47ad-96ce-a8b6fe69f6e3\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8/download\", + \n \"filename\": \"2-divided_sawdust-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", + \n \"submission_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8\", + \n \"uuid\": \"50207602-863b-41cd-8451-2af42e45ece8\"\n }\n ]\n}\n"} headers: - Content-Length: ['1043'] + Content-Length: ['1033'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; + Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/c1bff57a-113f-4b85-9b78-7a7d137f4ca4 + uri: http://localhost:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3 response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: Content-Length: ['38'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; + Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE4NSwiaWF0IjoxNTM0OTIwMzg1fQ.eyJpZCI6MX0.Vm7XrsBlHW_PV9ZMOAYWnBs4FC0d4j2xBkV1-JM-g4w] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42/download\"\ - , \n \"filename\": \"2-actionable_aloofness-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676\"\ - , \n \"submission_url\": \"/api/v1/sources/0b913c74-ca3e-4ff4-9450-061d0a5ef676/submissions/1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\ - , \n \"uuid\": \"1ce60367-655e-4fd0-adcd-816e4fbd0e42\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/386a76f2-726c-416c-9368-db1a670e30d3/download\"\ - , \n \"filename\": \"1-lurid_lecithin-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859\"\ - , \n \"submission_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/386a76f2-726c-416c-9368-db1a670e30d3\"\ - , \n \"uuid\": \"386a76f2-726c-416c-9368-db1a670e30d3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/bc4a5846-3ff3-4de4-9f43-bb3b9cb822af/download\"\ - , \n \"filename\": \"2-lurid_lecithin-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859\"\ - , \n \"submission_url\": \"/api/v1/sources/9930c24a-7829-427a-b602-77fd383b3859/submissions/bc4a5846-3ff3-4de4-9f43-bb3b9cb822af\"\ - , \n \"uuid\": \"bc4a5846-3ff3-4de4-9f43-bb3b9cb822af\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8/download\", + \n \"filename\": \"2-divided_sawdust-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", + \n \"submission_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8\", + \n \"uuid\": \"50207602-863b-41cd-8451-2af42e45ece8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/158ed35e-63b2-467f-9603-27b135abff1c/download\", + \n \"filename\": \"1-uniform_boondoggle-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1\", + \n \"submission_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/158ed35e-63b2-467f-9603-27b135abff1c\", + \n \"uuid\": \"158ed35e-63b2-467f-9603-27b135abff1c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/9642eccb-e210-4bc3-8025-2cd4f019a582/download\", + \n \"filename\": \"2-uniform_boondoggle-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1\", + \n \"submission_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/9642eccb-e210-4bc3-8025-2cd4f019a582\", + \n \"uuid\": \"9642eccb-e210-4bc3-8025-2cd4f019a582\"\n }\n ]\n}\n"} headers: - Content-Length: ['1540'] + Content-Length: ['1543'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:46:26 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NjoyNiBHTVQifX0.Dl6YQg.YRA53d23cGi2hNDfhQzmiyB3HaM; + Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 8aac7f0d6..58277c5e2 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -4,98 +4,99 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE1MCwiaWF0IjoxNTM0OTIwMzUwfQ.eyJpZCI6MX0.gADcy0eDjFAvFap5f2hTbHQjeBMtMeMtdYspHokrV0U] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/49e25441-b455-4372-8272-f670bcd685f0/download\"\ - , \n \"filename\": \"1-outstretched_washbasin-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b\"\ - , \n \"submission_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/49e25441-b455-4372-8272-f670bcd685f0\"\ - , \n \"uuid\": \"49e25441-b455-4372-8272-f670bcd685f0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f/download\"\ - , \n \"filename\": \"2-outstretched_washbasin-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b\"\ - , \n \"submission_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f\"\ - , \n \"uuid\": \"8660c146-338e-4cf1-871d-dd89230b533f\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0/download\"\ - , \n \"filename\": \"1-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ - , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\ - , \n \"uuid\": \"f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca/download\"\ - , \n \"filename\": \"2-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ - , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca\"\ - , \n \"uuid\": \"6ce92d10-d865-4a86-8a34-3e063a9264ca\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff/download\", + \n \"filename\": \"1-unfulfilled_ardor-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19\", + \n \"submission_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff\", + \n \"uuid\": \"e476e1a2-0f8b-4708-977a-23ce0c5ce2ff\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8/download\", + \n \"filename\": \"2-unfulfilled_ardor-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19\", + \n \"submission_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8\", + \n \"uuid\": \"25670770-6772-439b-8ce4-733799dc32f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece/download\", + \n \"filename\": \"1-smooth-skinned_salad-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", + \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece\", + \n \"uuid\": \"3b11ac7b-6533-4911-936f-c3e8eb484ece\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916/download\", + \n \"filename\": \"2-smooth-skinned_salad-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", + \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916\", + \n \"uuid\": \"0fdd8eee-1145-44f2-9cc7-7b5b64575916\"\n }\n ]\n}\n"} headers: - Content-Length: ['2049'] + Content-Length: ['2055'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:45:51 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NTo1MSBHTVQifX0.Dl6YHw.4WsxwYmCtaVOkiwxh4wiVeWvZ7M; + Date: ['Mon, 22 Oct 2018 22:49:15 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OToxNSBHTVQifX0.Dq_law.s7_brzLOZRLNGAyi6O99Upfpq8o; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE1MCwiaWF0IjoxNTM0OTIwMzUwfQ.eyJpZCI6MX0.gADcy0eDjFAvFap5f2hTbHQjeBMtMeMtdYspHokrV0U] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/49e25441-b455-4372-8272-f670bcd685f0 + uri: http://localhost:8081/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: Content-Length: ['38'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:45:51 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NTo1MSBHTVQifX0.Dl6YHw.4WsxwYmCtaVOkiwxh4wiVeWvZ7M; + Date: ['Mon, 22 Oct 2018 22:49:15 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OToxNSBHTVQifX0.Dq_law.s7_brzLOZRLNGAyi6O99Upfpq8o; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTE1MCwiaWF0IjoxNTM0OTIwMzUwfQ.eyJpZCI6MX0.gADcy0eDjFAvFap5f2hTbHQjeBMtMeMtdYspHokrV0U] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f/download\"\ - , \n \"filename\": \"2-outstretched_washbasin-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b\"\ - , \n \"submission_url\": \"/api/v1/sources/01db3a8d-da48-4f8f-a148-d0296984935b/submissions/8660c146-338e-4cf1-871d-dd89230b533f\"\ - , \n \"uuid\": \"8660c146-338e-4cf1-871d-dd89230b533f\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0/download\"\ - , \n \"filename\": \"1-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ - , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\ - , \n \"uuid\": \"f9bb52ce-dd72-425d-a4f5-d902ebcfb3c0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca/download\"\ - , \n \"filename\": \"2-thrifty_lure-msg.gpg\", \n \"is_read\": false,\ - \ \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc\"\ - , \n \"submission_url\": \"/api/v1/sources/f5dfbbb5-ed29-4d93-984b-1a982161c2fc/submissions/6ce92d10-d865-4a86-8a34-3e063a9264ca\"\ - , \n \"uuid\": \"6ce92d10-d865-4a86-8a34-3e063a9264ca\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8/download\", + \n \"filename\": \"2-unfulfilled_ardor-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19\", + \n \"submission_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8\", + \n \"uuid\": \"25670770-6772-439b-8ce4-733799dc32f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece/download\", + \n \"filename\": \"1-smooth-skinned_salad-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", + \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece\", + \n \"uuid\": \"3b11ac7b-6533-4911-936f-c3e8eb484ece\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916/download\", + \n \"filename\": \"2-smooth-skinned_salad-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", + \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916\", + \n \"uuid\": \"0fdd8eee-1145-44f2-9cc7-7b5b64575916\"\n }\n ]\n}\n"} headers: - Content-Length: ['1538'] + Content-Length: ['1549'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:45:51 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NTo1MSBHTVQifX0.Dl6YHw.4WsxwYmCtaVOkiwxh4wiVeWvZ7M; + Date: ['Mon, 22 Oct 2018 22:49:15 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OToxNSBHTVQifX0.Dq_law.s7_brzLOZRLNGAyi6O99Upfpq8o; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index e4431732b..a21ef8c4c 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -4,88 +4,89 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1Njk0NCwiaWF0IjoxNTM0OTI4MTQ0fQ.eyJpZCI6MX0.uPnfhnix_IzYesxsCgkR0OegnvlvMrrEkaAJDKMciko] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-iconoclastic_yoga-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"4f74b9f2-5947-4cf6-bb95-7a260f555353\"\ - , \n \"reply_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029/replies/3b58a5ed-311b-400b-b0db-5386e7827dbd\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029\"\ - , \n \"uuid\": \"3b58a5ed-311b-400b-b0db-5386e7827dbd\"\n }, \n \ - \ {\n \"filename\": \"4-iconoclastic_yoga-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"4f74b9f2-5947-4cf6-bb95-7a260f555353\", \n \"reply_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029/replies/09460b7a-ca13-478a-8e86-18d4aea5d1e2\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029\"\ - , \n \"uuid\": \"09460b7a-ca13-478a-8e86-18d4aea5d1e2\"\n }, \n \ - \ {\n \"filename\": \"3-depopulated_match-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"4f74b9f2-5947-4cf6-bb95-7a260f555353\", \n \"reply_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963/replies/a2ed2400-c36a-45f5-98da-f57b4c1fe3cb\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963\"\ - , \n \"uuid\": \"a2ed2400-c36a-45f5-98da-f57b4c1fe3cb\"\n }, \n \ - \ {\n \"filename\": \"4-depopulated_match-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"4f74b9f2-5947-4cf6-bb95-7a260f555353\", \n \"reply_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963/replies/1c0d7ad8-2de2-4942-ac9e-55775f9a6801\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/54dab7ea-364a-4a79-8676-7a138aeaa963\"\ - , \n \"uuid\": \"1c0d7ad8-2de2-4942-ac9e-55775f9a6801\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-bumptious_arthropod-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"5f3d3409-9399-498d-a8d1-f02ab450f885\", + \n \"reply_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/e1f1db54-9cd7-41f3-907d-6a260e269a60\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8\", + \n \"uuid\": \"e1f1db54-9cd7-41f3-907d-6a260e269a60\"\n }, \n {\n + \ \"filename\": \"4-bumptious_arthropod-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"5f3d3409-9399-498d-a8d1-f02ab450f885\", \n \"reply_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/9aa8387b-227f-4d3b-b47d-3c5c96fd3f60\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8\", + \n \"uuid\": \"9aa8387b-227f-4d3b-b47d-3c5c96fd3f60\"\n }, \n {\n + \ \"filename\": \"3-spoken_rhubarb-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"5f3d3409-9399-498d-a8d1-f02ab450f885\", \n \"reply_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3/replies/ffba8ed5-f980-44b3-8dd1-49c3a3f6d71c\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3\", + \n \"uuid\": \"ffba8ed5-f980-44b3-8dd1-49c3a3f6d71c\"\n }, \n {\n + \ \"filename\": \"4-spoken_rhubarb-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"5f3d3409-9399-498d-a8d1-f02ab450f885\", \n \"reply_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3/replies/34542cad-5ccb-4928-85cc-0c60ca9c1331\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3\", + \n \"uuid\": \"34542cad-5ccb-4928-85cc-0c60ca9c1331\"\n }\n ]\n}\n"} headers: - Content-Length: ['1965'] + Content-Length: ['1963'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 08:57:28 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMDo1NzoyOCBHTVQifX0.Dl62-A.jd5Kl_FcmI-R8d3OgLcuwByh5mk; + Date: ['Mon, 22 Oct 2018 23:04:01 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDowMSBHTVQifX0.Dq_o4Q.qFKcGIvoRsQLKve19AOUFXqLA4M; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk1Njk0NCwiaWF0IjoxNTM0OTI4MTQ0fQ.eyJpZCI6MX0.uPnfhnix_IzYesxsCgkR0OegnvlvMrrEkaAJDKMciko] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/07994d71-ffc5-4621-aca1-ba9b88d8c029/replies/3b58a5ed-311b-400b-b0db-5386e7827dbd/download + uri: http://localhost:8081/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/e1f1db54-9cd7-41f3-907d-6a260e269a60/download response: body: string: !!binary | - hQIMAw8uxjT2wyWpAQ/8Cx2i4ZxRuYMhs4/qsTRVKmNJ4F63IZs7YdxEj54ZeF6AOOzCZIV2c44h - kJAOUxjWJ2k5z63PZL5Hrfy3FEQ0u9BsMLVzTbfnP+s+KK7EuwY5OkZDTCpctGYfRWblksQg8fTT - 26ZjxX0MMcu4nshwBHun3yUMuMSvHIV48RrgoQR3bzr2LU2AALrcNTwSmAatcxuGW2dlmhFlDA5y - gNBAmFtgtBPDiQg+1geq8eA7YR4zWkVggj6k4MPyFKniCYpU4enzxnb7k6xSNh63epVU/1uJ2wKS - n4r33z5wRgD9QpmPF7sLiI3zslrAWYMGYygrRDdiUcDv8ahgvCKn+o2UMmKbt0Y4nC8VYETtdvj9 - CjN/o5h/7j7fFXpUVfVgIg+wtnIsb8iW5CuTa3ZfeQyjlk1myd5ff/BGhduCipQDkp4py/ndcWcD - EvGv2cQc8lh81NGO2KeQ47Tq8GBwK0kkJjuFIYcaW7eBTkL/B9C3F3XJKr1HKQjxXWq3vx91vN3C - VQH8LqC6XClaad2ZCpeKA324+ibx9886zELxC/cRF53Kjsyb7QmwBYaIMHRPm5LD1QoeiVSRHXFG - NKDpg50+72Zl+ixKT7SRwLi+iseYSCj2stxd3bEmS+m2nfbp/yCaWUZPFTq+h1mOwA+a7b3csGJ0 - LxGZSKr8fYyJGHFIA26FAgwDw+fEwKIgGyoBD/wNm5yYTmiGQF5OhCXH79j1zuz4BG0NBVIQtNHw - zhhOxCUSBtIqIprS5NIva4ocRj7fL4mZjOhjUcFD59agZzRcYjrIi6xn8z+nMAFg67/dL91ekJvL - kN4+MBE1dN4lkBHuXPVfopNXEIP/GPXfMX4iWmh+72w7tkVzc6tLDviMshaRY3K9WjtX/9PFKK/D - OZvqliHSLutUYs7LnEdUnLnGYvjBFIvMD3pfnd+LHfYxgutQq/X+W7Rlm/SHxGrr6UjiQVUNI+Cx - bCazDh9XpridV2RBNG5wfzE11u1JVV/pcOPUyjBvBONMI762nbTSwLv0sVW9Qd2O1vykcbQeV/r7 - 2czLBKiH6OG35nP2Lt4JBbPHFGLycQJIHtUhZKES+HbaawnFbJzUHlIXJ+aSPXQVK7iF4N6IVlMg - YyETSDOuxlH9jywmETwCHrna1CzCzkYe5v2ABAGbiJfyfFdTgHMNctHghPyr22IzKsCHQZh/q0WC - tPtCf6RjRkYk9PuS6br9QSlkGb116heO3mTdMaKxBoU7vrpq96qRE5gOfOxBe9abPaYI2JWb75eP - Q1O7mBFi7D/Bd0ri0mZSVXyTGCkvZoyv9uE3OQyszLM6+sj1A5j2ewGDWzhkHN5m7kHNLiSBJ0Za - oql059Mu4pDx8R4YYOvFffk+rcgteuhMwTWyX9I8AcQu4NSX+Q+7j5xbaTtmvToSubIOc/Wq908A - WcUuNtqYmDOb4Hmv1e5/7yGTLEsp5mnnp5BPtj/NZtuz + hQIMA4yXuu5TVfRnAQ/+LS3mPSxrYhYfTp0By8svlMJ2DBCUmZMn74quKHIJ9ElpYfj/1zgYdLgF + dtEiPWuABXEZI0RofFKecBO42Jh3Vh3p8DeuqhXTcjXgrT7wm2XXyDtb/OuaniS2zgPuHtvdC4Kj + h948h/10Irl/RhWwA9wyGpZmDrw79c8j5HqvsYyZw8Cs3PlrW3trLLl/2X2oviEflADiBuhysDlF + f4AUp7mhleR6lS6Fz/6LVrGlhTyKrAlBtfQO98hJnpVly1vlBQ9ygWMYTColISv3jqQb/sXJnXY2 + Hu7oyQIny4VdrEadPXfy9mH8uizhyPFrl7aY5NW2YWUGoh8nrgSSfRlJCBfzrjoAlbCAOo7rsv3X + ypWG66m5e8qKlxWlA93UD4gtDUTHCkYNoqPfY0egdM7BhrxTh8Y1jDOf968eZ/C2N5J2CsEK/cre + 9didltAuAwa7w3lqwanIka3LsVOhm2pCO3YRgXfC+j9UMmyHm95aggQthwHK5sKUhdoHfmJvWMwr + AVK2rti9WNM7ms0r6mbeZuDMxkyqlkAeaB1QF8iGgWzdIwp0Il/5tDJIKXrfD0n1QgOS4pHly8V+ + q5YIr+esp0mXKIGX3BgG6n5XSGFXGbEZajMupi5futzmI/HwEmMVDbWMZIrEMmRw+XDJRVbaSPYP + mDpoZAVQoiPZa4xpg0OFAgwDw+fEwKIgGyoBD/0U2i+krFhtwoO1QCu29BfrwWZ8xROe2MtOsonO + u/uO1PCStaLW0CH9hWxfCux5OxTyE7wGEf5murs7wA/AMbGQvT+q35syYBfbwMOJlZNfr5yCWp52 + rS2M9jnuhHvjYwxbhX5YZoAPwj7dMOFpc3jnyaWSH66ZCRhtQuZ2wlE2p7fG8znx4Rom6ZBeWbMY + 0AL8UZxarwEzZtxjE5zUPsus8QGgIg8s9zeTgH/J6N8IiyktSFDqwno3MhnIdadrUFTNTK1V191D + SsWFetoT1RH8uWV7XQ+VnqKGJKnOWrdh+hqrChXxenfeWsidXD3M6JrfkBHONbEngIcpncd10624 + NVnKv0vTl0PefdFGnMuWQnv1yLKGNeFxOX4SWh/3O7S3AixPHXRSlD/3uLutaTzP0pJDlcCQkClb + sDLW3Qd7z33uP7Mt1bYlbDNTHWdXVOtREaCsHDo2o6PbH6RCChdmO051a+reK8erYzUxi8p0E42M + lEAE+Ga1v8b/zjF63Xr8QDMOrTtHh1PItct5Vdr3nu3Od09IjxQml06aqLsNz4Ui8LhjIhmjydLl + 8S3eQJynPWTJFHrj8BimpwaFQtf4X+xFbS0NfgdpRGg74A/DBpqB3KgzH4ttIaEjfKJb8wzytngk + klLiCx+quHm8diS+0YvXGlUpj3eMeHUAKJfuw9I8AQwaDb3TfkswePxjJTYEVeuyOu8o9HKHRSfU + aGrsr+1AOL3vU9X3dWHI1hEv/lIHZos2l9um6cQ2Yuao headers: Cache-Control: ['public, max-age=43200'] - Content-Disposition: [attachment; filename=3-iconoclastic_yoga-reply.gpg] + Content-Disposition: [attachment; filename=3-bumptious_arthropod-reply.gpg] Content-Length: ['1116'] Content-Type: [application/pgp-encrypted] - Date: ['Wed, 22 Aug 2018 08:57:28 GMT'] - Etag: ['"sha256:64ec96de6ec4d1900e66b32583d5c8954d392cd2b3632acb2ded857d904917f7"'] - Expires: ['Wed, 22 Aug 2018 20:57:28 GMT'] - Last-Modified: ['Wed, 22 Aug 2018 08:54:01 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAxMDo1NzoyOCBHTVQifX0.Dl62-A.jd5Kl_FcmI-R8d3OgLcuwByh5mk; + Date: ['Mon, 22 Oct 2018 23:04:01 GMT'] + Etag: ['"sha256:5ce907bd53310f2eb28d9d5720bb24ae183ced608a80ffd58f2f83d4cd8a8f53"'] + Expires: ['Tue, 23 Oct 2018 11:04:01 GMT'] + Last-Modified: ['Mon, 22 Oct 2018 23:03:57 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDowMSBHTVQifX0.Dq_o4Q.qFKcGIvoRsQLKve19AOUFXqLA4M; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 394379f16..dc25557dc 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -4,103 +4,105 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ - , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ - , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ - , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ - , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497/download\"\ - , \n \"filename\": \"1-disaffected_caliph-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497\"\ - , \n \"uuid\": \"68b16231-aaae-4a40-bfa0-348f3a69b497\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10/download\"\ - , \n \"filename\": \"2-disaffected_caliph-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10\"\ - , \n \"uuid\": \"8a46abf1-fade-4015-8abf-490c43356a10\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download\", + \n \"filename\": \"1-structural_ageratum-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75\", + \n \"submission_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6\", + \n \"uuid\": \"455db36c-16c5-455e-b06f-5e3e8fc6a8b6\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/c456dc43-66a6-4354-82af-b026f455348d/download\", + \n \"filename\": \"2-structural_ageratum-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75\", + \n \"submission_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/c456dc43-66a6-4354-82af-b026f455348d\", + \n \"uuid\": \"c456dc43-66a6-4354-82af-b026f455348d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/9228136d-999a-4479-a63a-eb4a37c40e60/download\", + \n \"filename\": \"1-self-imposed_newscast-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15\", + \n \"submission_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/9228136d-999a-4479-a63a-eb4a37c40e60\", + \n \"uuid\": \"9228136d-999a-4479-a63a-eb4a37c40e60\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/28d4557e-e975-4c5f-8348-661e1669a457/download\", + \n \"filename\": \"2-self-imposed_newscast-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15\", + \n \"submission_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/28d4557e-e975-4c5f-8348-661e1669a457\", + \n \"uuid\": \"28d4557e-e975-4c5f-8348-661e1669a457\"\n }\n ]\n}\n"} headers: Content-Length: ['2061'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; + Date: ['Mon, 22 Oct 2018 23:02:22 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjoyMiBHTVQifX0.Dq_ofg.H18TQ5BtFmSC8t41wtBHhGSZFu8; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download + uri: http://localhost:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqARAAvo/AHEoBE4pjo+5C6F+fG+hc7u12EBuZF/WdhUkvPDtZ0/k71ztAflrI - jakoaJ8kyWhNY1i8XDteFRELkLxGg79LKK97VDDgMjz2/L6pNzTAixCwUKowx2RJunF5EL3UqOE2 - P4PELlO2LBSMsf0ZmzY4oYyQs3v+EGO40rekwU6e6XMEtRP6RI2c124qqLt+g6ZUvJ1bq8Eori2v - +dMq/PKzmDbah2vlxpq55jo2WFF416ELuxutssXLhcxKYS/+IiF0loYpveHvW6/OH1tr6PfWAYzS - 6o3xm71f/R5D/HKgmBQF/251SNh+kUgdfX4s3ZplPZ3WK8MQcPpjUiiKnZxxBOjMWTeSwDGaF/kJ - 30uXLvPTDO8H8KDswdrIaPWtMwGUUSb+PqFwNlYc2X7K7G21+BvMo1MRgLJ6T0EkaLSb/lUAf+rS - 1xGV6WGUg7VxrBYfnYBN9AwQAAdD8Jb60rfgHZrtkvhVRMuxQ1rBBleiXxMWznlF8PJ0/XUYHf35 - lfGfIntHv2Na6zELJgyZG4dLCVA6/uJqIZIwc7cISYVQa+ZC8LdnJN04TJoWg2cefc01Njc1F5bG - X6dlTci/eF4yj1tch0aODozd6Lto/IHRV5NDgrjzefZj6Q2PAas2iubN9zSrRCYXs+S1oSuePdDZ - z9A1GpueLbn3wBlGR8PSSwHX0FE686fmYY4RsNBJhxjqEmIqjZt+nddMXoA7m+bFwscZlQ4Ea8Ue - vj0k498FTnDYOUSo03m4GMtyakmGjMYHWbEwzBnouvnaUA== + hQIMA8PnxMCiIBsqARAA18buNXUm88NJsVQeNErUakSi+AuxGY8pX264uXhqUyvCOwEzi8HXfyAm + K93WpmGQimRFXEevbawyvFk7kRg3ORW0em/AY1oy8fABJS+ODIt1TvUtva3i+aQpALYo20UWzl/v + rKNbN+5/+nI4av4vvAq5uOzJRYwSrWV0QZ+QM6O/hZ/g+Fb8Gk9Jl9KvcSpBlAn2EENYniF53GL1 + hEk1SRZhMleTiSKar7n+U+DC3lTTqr2ogkfhdlMZ1N7Tvuf6iT0l11KKAo+LAQD2qifzXOliT2Gw + SiSpbohyjovnK/ritSejDjt4e37NCPrlVqaEylRGOS4nVGXIvY2+OSuMaOeTy6438eE1Is4MnrGi + hjtc+DFId12HigUNx2fxAMjVH6rdtA1R9a5pp5s/sw3bvlPghyi3/+ci3+r9diqm9UYhfjXqotGR + XE73FvYZMKcS82dNCmQIUAYyx1eb7ec0UH17ZRpBf2g/B9VAcZdU9gXp9Mso/GgP6/ilb506YqHl + QTyKSjdpD7UKR7S9iGQVAcuCQt/3hq/3o66kGNswj17WuJH5RBDpYyRS3hsaXTEZRcD1wS0ZeXG0 + Q+kMDzpozCd5CyS4oXbbx4FNablcilFcc7xbbkSraovBPOogY02YHvVyeuoSSini0j/7jcnfhQyb + 7ShE4QZXEokIP+3TlavSSwE9dr9G/WXJhQaXjlu1izF45h75VMpbatXcYOWhuUlP0jqUhzb1RaaG + HdZnPwLrd8qrP7QCbDOI6mRgPLHogpIXyj/VemYV0p8y1w== headers: Cache-Control: ['public, max-age=43200'] - Content-Disposition: [attachment; filename=1-humanistic_recognition-msg.gpg] + Content-Disposition: [attachment; filename=1-structural_ageratum-msg.gpg] Content-Length: ['604'] Content-Type: [application/pgp-encrypted] - Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] - Etag: ['"sha256:3d0d9ca622db774e1d63cfd9ff221cf610d71df0ab16ad4ad497cf366980bbae"'] - Expires: ['Wed, 22 Aug 2018 18:44:09 GMT'] - Last-Modified: ['Wed, 22 Aug 2018 06:43:45 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; + Date: ['Mon, 22 Oct 2018 23:02:22 GMT'] + Etag: ['"sha256:f1ba835050c7ae3dc2802136469b71585a40ef954bda8857d09fe05f863f0570"'] + Expires: ['Tue, 23 Oct 2018 11:02:22 GMT'] + Last-Modified: ['Mon, 22 Oct 2018 23:02:15 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjoyMiBHTVQifX0.Dq_ofg.H18TQ5BtFmSC8t41wtBHhGSZFu8; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd + uri: http://localhost:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6 response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ - , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ - , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n}\n"} + body: {string: "{\n \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download\", + \n \"filename\": \"1-structural_ageratum-msg.gpg\", \n \"is_read\": true, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75\", + \n \"submission_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6\", + \n \"uuid\": \"455db36c-16c5-455e-b06f-5e3e8fc6a8b6\"\n}\n"} headers: - Content-Length: ['472'] + Content-Length: ['469'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; + Date: ['Mon, 22 Oct 2018 23:02:22 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjoyMiBHTVQifX0.Dq_ofg.H18TQ5BtFmSC8t41wtBHhGSZFu8; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index 10b2c9c77..fb595dd54 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -4,92 +4,65 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"maternal birth\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVpcBEAC0qAIEBjmz+B08teRCg0IXAvF08GBBO2LGgLrq9P0nNICOuEkR\\nKUEbtlzoQUib0eG7G7pGU0rZYNgda3s/iZ8pmfvh0iH6vYXL3KPbDywLURDpZGzd\\nhbl4aE+aRk354S2hrW6vFDdHlveyhRwgDyrdJNuTdRUlDGctp68LNW0Ghm3kjLwF\\nQvTzRAKNaj3VBuXkQ6dmE6iQWR/pCHLYdeSlVxRgolnIYVMdEm9FljfY+msNPSNT\\n7k/6vuMXvrYtI7FNurD8SGTMjdITm0XiYkAHwgKSYez7v6Sp3wmvxkxiWOIbbjjV\\noQZOydOxgxpbj3apXrTwDdaI3OJWJthVVOQbspResv/4hQ88zDz38GMrcG4TnMV9\\n9nqGR2i7hPcbISm7uEbJR6xGk7qIZEyXuS++C0vpG2FwPBcWBocGltzvm8S5mWUR\\n9yrKpkTUhFzvNJsK2iZ+3y76AJYz1RcFaeH/Nz8t7MGKx+/fJ3J5hJ6blgudTC7u\\nWpYQY6AMfSjbxGWRLAjvvK8lX7CHnaO5KOJsmaaZV8l4H7haEJ6Nwe3nL/YSS1+k\\nwSuhyzyXLrLCSHC0yykwRyLMTX8GKis1ziC0y9mZXWhEbuOJCPNq+IK95orADKhV\\ntlYf/nXF5+S+XcrD6xvkG5onrhiGju4MIZi1lPClatZSEcjQUj/F1bHdFwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UkY3U0xLWk9CM1ZRM05PVDdIVEFCRk83N0xG\\nVUxESElWWERCWkpRRlYzVUlYU0NCWU1CMzQ2Vk1YUUk3TllXUlBGR1pJMlBTUE1Z\\nUkhUTFpGREtOQkJGREpWTEU1SDJPWVlYVkZDST0+iQI/BBMBCgApBQJbzlaXAhsv\\nBQkB4JipBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ9wmJlwMgcpnXwxAA\\nlwIA+mSz73cxBJJTCOhSZ0+ZLZ7I09jF2DQ0hRGHNYiRK7TfCIWhKJ3mvTzWbdt3\\nAZIZ+R2w3Z4BzC9ddQhJ4xnma5HXngh+R7837tkd1aFmER+VjHCm3c7H4AXqJXz9\\nY14cKU8tb4lFR176R8HmmgiyO4DTwCt5beieKx2qKEPR9ThmCb9GdnJNIE/0WjD8\\nnfPN5hjXArKp2DM+rYiQhsa4dhgaLz5k7q9i6/gbJljiOzUuIO/VN3shNv/lB9aP\\nAQDxb90IJL0Kp7o1fALOpOpb8cVE92nU+QW5pMomw03gZWQQLn3zJ5zvP4oPCYoM\\nJKCVYA1xS+/vdi2qzr4XEk+fbmDML+SEF+vIfqxPrgR+jo8O4TELiruseulUyXva\\nQ6nhdoTM7kJMhRYN2H5DEMAOgpFwkprPuImEs36O2riv9e60hhVlJkGVrpYLfEMJ\\n4U8Ho/rg3ZrKXh6wUQ99Mzs8Ew0GgEndUBT4y5tqaYort50hF/AYix6+21uYJrWq\\nI5ludpHUViioA4yI4FV6onG2N8R4q0ng9EohZRakJOHg1ggSOiACOMKl65JhTNq+\\nPlaQVwCFDB4/xWEejOcIic7u0SD/f6bhPRw/aajaDV3eZBzdpnlcLS8SZdrwnYt0\\nMZTuiaucpWtLEDnaEecXxfXkEA32QhLx9kts1L9EG2o=\\n=zgqT\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:00:40.344855Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/remove_star\", + \n \"replies_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/replies\", + \n \"submissions_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/submissions\", + \n \"url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d\", + \n \"uuid\": \"c3d4c09c-8bc5-4465-a980-a16c747a869d\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"dowdy smasher\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVpkBEACaLlXEDQqwdaOuQlpCliOCiNyYZFtEFR1M2yFcG1bfcUA95y3L\\nrBc1cVHM3XMw4przZ/vgAG7xv+tcxF3WqGpO12tevVnGHMT5rkv7TNmJewwa8A8V\\nrF+SxaTXggyeaWnVjsK2uB7oOtSqTqmzAJq2QWkgPW239m8Tmv29jjs/q8vorDdb\\nLz59fUGr41T2MkaJNE8/4De6QVFm8xRBkVq+UYmHwHzieFgL57m3JkO0+sbEijLh\\nrDUNKTbkKzXy19Cf5kqKtcuwims9hZs7BnZrxUMyAdiUJAMAeKfurrnQXhmvS2dX\\nqhBJqFWKtVUmgT6eCtCk9b4DLFPPB1cQenJSCGYyaHFvwZPenEseQW7QJlwvtBJn\\neoGSF/yJto2BWCdo9jhX6Rv/kN+y2RBYv3NWpvwYeAW987gUzo93zJqu5wQVMoxb\\nIl7c9BpVMYcfZ3sGcB3kw+p4JJib8Em9Ho6xN5buWmYsp1kPW7pn43Cf3hTcDY6k\\nCniuvjL/ewuwA9t5o4ZOlx0JxtvvQwVhNb5ztNdlqs/Qvua6rURqLj0rV+a6cMSI\\nWEnJnabkSDCYs7HHC3LFciHVfwCgtMIAytToVDkHroGRzea8+xVdzUe4aOfW26Eq\\nhxytgHPv/bTe7sV0FRfrjJL7at3dmHrGT7h+yoFDikkeu5h7dDov8jCLeQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RElHS0FHNVJMRkFSRUhaSURSNVZNUE1SR0Yz\\nQzZGRTRHUlRDVERORTc3VUlRN1BJQTRZRlBMUkJaQVhCRU5KNDRIWVZSM01MSjdP\\nUE9ENUNZQUJWVzdDT0xCVDNQTUQzRFpMVlozWT0+iQI/BBMBCgApBQJbzlaZAhsv\\nBQkB4JinBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQWHUstq7k6I2n4A/5\\nAUKBeRIfJvvPua3Z1bvpsTiIuchB9W98yl64QyGJGw5Mjk6wwMePuLdp9lPZmHpR\\n9WcvHN5LxHzaLQvW/BYPk9ztgqQ0nkmc/SENn1WufTFZnAQpQpPbqT4Qbh5WLR39\\nUJzUJWGB6GYT2J5sdKdD1Z0xk8oHricUhg0Sffvtll4LrOlwzMU8YZULHGds1hhm\\nI3cdjr3PwRfIXLvfOKtModQ6XgQKJfumvYppeA3Mm/G2NWjmsn2UxWUlg5XChYrj\\neiRRLyP9AjxTH++U+8TbjP6AhCLZKETHijXDSo5QC4+o8TwUcRIcK99ac5p4MgXq\\nbgsidXt1hgiVAqNyNhH83MUUSeTLMoJyFSYt+toiS/v783zklp42PZPGjm+cToiP\\nwFhyCml6DOxJRTWpdASRRewHbPpp3/EgSoj9vTU+BQbMN6phqjArao12UT1znS6/\\nzE95/6ZhLMwEmLVAfy81OkJmJURfned1uuqZ8DgExmOsVBMS2TcyuBXxhRienVfK\\noHUfyC1QSLxTrDWxgaipUT3kQbcBKUq0UjvVjOJMhUiloUMuV/cl5Bt2pt9gYK8B\\nbvD2oIpmi67feAT9m0tl4iqOPytulQXjYZhJpV+eueLNF9Ug28Mx2aAjSURAg8TQ\\nfxdjcFlzddPWHmllIXr9qHDnnvq3xx092d53Me5y14I=\\n=JC7o\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:00:42.581038Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/remove_star\", + \n \"replies_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/replies\", + \n \"submissions_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/submissions\", + \n \"url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3\", + \n \"uuid\": \"2fef8d25-37b5-43e5-8f28-9db7e31ccce3\"\n }\n ]\n}\n"} headers: - Content-Length: ['5243'] + Content-Length: ['5230'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; + Date: ['Mon, 22 Oct 2018 23:00:47 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMDo0NyBHTVQifX0.Dq_oHw.zIU7k3SdUk37PmJX7jRn7N1RdXA; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: '{"reply": "hello"}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['18'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies + uri: http://localhost:8081/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/replies response: body: {string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n"} headers: Content-Length: ['56'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; + Date: ['Mon, 22 Oct 2018 23:00:47 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMDo0NyBHTVQifX0.Dq_oHw.zIU7k3SdUk37PmJX7jRn7N1RdXA; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 400, message: BAD REQUEST} version: 1 diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index fac0eecb5..c43a65f7c 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -4,22 +4,23 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources/not%20there response: - body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested\ - \ URL was not found on the server. If you entered the URL manually please\ - \ check your spelling and try again.\"\n}\n"} + body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested + URL was not found on the server. If you entered the URL manually please check + your spelling and try again.\"\n}\n"} headers: Content-Length: ['166'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:09 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDowOSBHTVQifX0.Dl6XuQ.ffZc58j5hgb6n-RFw5mZPJsKOXo; + Date: ['Mon, 22 Oct 2018 22:43:50 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Mzo0OSBHTVQifX0.Dq_kJg.-zvE2PBta07XHKi7rmXFI3v6o6o; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 404, message: NOT FOUND} version: 1 diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index bf7bef323..06f2aebcf 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -4,136 +4,97 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"thrilled decimation\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU4EBEAC+cO1VqBDD3WemjQL47kuiJTBLF40SEDdBwbuYcTvhXfVLkhun\\nvfwW64y8Ynwz2iwAg7GtfYPVEviUp5eDpZ/uQMdMuiUTY8prDRsFmyFxc9HwPAUS\\nAvRUy5jFcwZRL7z8y8aIT82FMYRQW3roetdXR4xcbOcVKiGdIYlCRfphnmd5GHJz\\nU91ZKdoYrsgo7v+8oKrLvMDXLM7+FCpIhH5xn8Npczhxxbo5H9KnJqVkfcGXua42\\nx4vPoMggGXJnTwSt2ZHwnGPNK9w4pSpwLtRK/L9tQG7CyCIDU5L7Zkfsm8xN3bN7\\nqQiN/oiLHpc5YSmRGkeVh+ViSo0Nq7Gey6UgrHw9yLzP2Bx5JAsJQFDPb8NKIxZ0\\n+tDOaN+nap+k5nBJHZwEs1raCCapP7eo3VobHibn/qY97YpreBW/h5xDcpOxW+dT\\n9VbPmzOElOPNucjdrjFbBoHxj0uM3KFJpltpIz8TF3AQhSneshJrWqzAUi5AMbwW\\nn0qt/OGAFlfHDW/xmaoGclNcixuBz3mrYabjQ73dYe8WZhdNQt3lnuQLYlX2fn4w\\nX4jusmkIEpA7IZGQsq7+xohm4W9VnsCqrQatlIiy2E6jr76BwFuIMLST2+uwH4Or\\ntjm4Epb5/UsAwsqSv+XfH7ybNq0L23IvSdEksbbMPx5IDw9Cvw3NwMFaxwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RzRTNFpVTkJGWlJEVVdZWFZLU0k2V1FHMlFY\\nVjRWNkhSUjUyRVQ3TjNINVpFRUZJN0hDSjQzSVpKM1BWVVpJR1Y1Q0pJWFFDU1RG\\nS0ZUSDVLREhPTEIzTjRXRENDQ1g1M09RUFRMQT0+iQI/BBMBCgApBQJbzlOBAhsv\\nBQkB4Ju/BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQs6eWVj1rjqlc8RAA\\nmbyiccGl+FPyrGr3OkMnfRjrXz38y6fnY4ax+I32IOcMxajuTlxq7KNAHEb9n4Y2\\nkOq56Yl5wzt1aH/pcKpl5l5OW1xpVZGnRe/zoHcidiycVFANXpa6SyplQCxL7u5a\\n3DD7mobK6uf9NluSYgQSSAL9WwnubIjLEpMzpdIRe3xNyrw/mPIp0219LegUwnyV\\nCjddUNUMuci4gEf1DQLflROm8hCDLUTW7s5MPlqjhifJgWp8q1eThbbHLIdjO7Ff\\neIUcru+9QApvzXFmcAYbrTbe7Hk6hRpL+BZKtGC91Q8XswWdNLPZN1QzI/I83Qfq\\nIFsY4RKlICOw014RF4jgTWAMI4yPkjwbas4vB7xK1cdPtgylL/hKl0arHJeC4w40\\n3kldl98eP+bvJl4xm+f5ekWDQaphQm/z/EvXok+zcse6XUSZWuZ0cbURWCNqQ8yA\\nLOxzhWbf/901UJbA94vq2UlYHrLDXQHMCoP8S6xZzKzDER+TtjMhQra6gTjPNrcW\\nrrMB+dmhQXReKDqLgNbsTgfH/Rat53Yyd6gelyh4rkn82G/NKTUPM4FhHnSQSqme\\nDRQdqRhfBuZSRE1ZPyB7r9va1ucZnmNIA9mlmfvNfXZNxwJyPBvwN8By72fH1lZz\\nzIoNbJbbSq6E89y7/x2R6C5gXeLxP9cSLdipBX4GTjI=\\n=XUgr\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:47:30.463842Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/remove_star\", + \n \"replies_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/replies\", + \n \"submissions_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/submissions\", + \n \"url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a\", + \n \"uuid\": \"bee5c707-de42-4087-886a-1a5cc382467a\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"moronic money\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU4MBEACwNOButPZs91a8LYRMyC8W+TlrDMf4PlpjgLS/Rg82HL5VOOIw\\nnRGX/aWvf4amS11LhAbv/XBBZLOG4RlWBKAk9nV57kd+vMyil6G/urmq94nOsmcK\\nvYVGzh9YKEWC3VU3hkMwfEz47Sr/SaTkluevP1TWJ5W1F2Yt4lN68+GgXFA29rmw\\nUH2KiOgyEUnT2vPkVii/2OtSSqSaMZVCkLlHahSARtQmTMD+NRgr6nSLfsH7JodJ\\n3CpBrD85Sa+0KnRKq3/tsP/EitAwKy+lAoEXWp1qlBF2cZODS83AJdMmjRpr79kC\\n7f//z7uYVz/gJhhk27hqDcEHw5dn6twVevbq5mQr4js+XvgLHjQayHzw2EOfqj+x\\n47LUSqs7I/3sebVLYpz/uRLpiBacVkhrcI2fyPg95JtzFnGBYvKnrkXWPkYaQL+l\\ndBqIcAB/PsVDmbQcX3fttROpFsRZEJlvWSJxoeIN/R4LqJB85nUZ1h5Gz5ufOn1g\\nXDNgxPKYoftFyvspIdQYFeW8MLnfaMqGhLfZtbBpv7xs2PyjhOA4gXo8VW/EYgoy\\n0FUSFgyMfn9kp+nxcyaaZSA42UK9dBaLXpuZlzsFaYdWugZJK8CNWFM+ceIabx5i\\njtrOE2o1LJ45maGOyR3DZAbIPK9kKn6FcRT6faSbT0nUvmZIQ7DOoaxkwwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NEdZQUdXV1E3WVFJQ1BWQTZMUFdSTFhKVjdN\\nREM0UVpNWE9CUElZR0hZQzVHRjJYUElTTlhDT0xSR0xOM0ZYUUxVWlpQT0JUVURD\\nTUhLTENURjI0VFNFVEFNVlpQNUNTTFpGN1hQWT0+iQI/BBMBCgApBQJbzlODAhsv\\nBQkB4Ju9BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ9npUlQt699zcmhAA\\nnUrLuN+c/5kUy8h0gSeqE3W9lple5jqPYduyX0PvUYY64zhUufQfy9UANYX8YNUk\\n4sXDuxRcNuv2GdFrjHI0A6nreILHovSqoektMv6UI6Ic51IHwz0sOcKMLRRHZcpR\\nm+Ig+unjOzuDFPwvlwvTmlsFmvosRgVdHtC/ShYC2kadKLnGhaimdB2x1W311DdN\\ncW1oof57mU5/4AopkAfV0hMWweIV6C94fQPE2oSUhJhAcJpDs48OTf7QyYokOq5N\\nbv4Nua5z/DEpgtcmEFngf4yL7XVEB2boidu+v2M0NEQvVMnuVfMvYEXPAUvX6tMC\\njN+T01zhaso5DTcXy0xwoMHmeXisC3NFSdvV8a9ooI2hxMlL6PfnWtwjLRdKqImc\\nwZlCjorn65U4LSnwgkssI/nNRuPqHSFp0ur5NjGF6f5z4qdSVFwv6qrOvlfNlCnk\\nUcOEM09EoWjU7+UFlcff9JCfumpVJE0qOnenXxQO6paimjCpP0dC52NM/fCHmCvk\\nlVDIMdTfIAm8CPTteCtU3WV9xjDbKgjIgULjDLFYPJ1LJTj4o3CNzuFI5a3nAwXj\\nDy00W8PZS2EmMyVxyVuyeLwGCPZpRskwJdBVKcm3BFx1mYmAcIQLXojZjoWAcu1V\\nB1yKl7xFW597svfLGwWnZeYjRiv4A5tAeqOpBP2/tq0=\\n=6opB\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:47:32.142924Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/replies\", + \n \"submissions_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/submissions\", + \n \"url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c\", + \n \"uuid\": \"f4bdfc53-43bd-4612-8c6d-828b3db6d79c\"\n }\n ]\n}\n"} headers: - Content-Length: ['5243'] + Content-Length: ['5235'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 22:47:37 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NzozNyBHTVQifX0.Dq_lCQ.vJEiukhl-YcHLzNsXv_umPYOpDM; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/flag + uri: http://localhost:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/flag response: body: {string: "{\n \"message\": \"Source flagged for reply\"\n}\n"} headers: Content-Length: ['44'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 22:47:38 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NzozNyBHTVQifX0.Dq_lCg.ZEaK7UrXWyry4JkU8AiD5dRXPXU; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e + uri: http://localhost:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"humanistic recognition\", \n \"\ - key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n \"\ - number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\", \n\ - \ \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n}\n"} + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\": + false, \n \"journalist_designation\": \"thrilled decimation\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU4EBEAC+cO1VqBDD3WemjQL47kuiJTBLF40SEDdBwbuYcTvhXfVLkhun\\nvfwW64y8Ynwz2iwAg7GtfYPVEviUp5eDpZ/uQMdMuiUTY8prDRsFmyFxc9HwPAUS\\nAvRUy5jFcwZRL7z8y8aIT82FMYRQW3roetdXR4xcbOcVKiGdIYlCRfphnmd5GHJz\\nU91ZKdoYrsgo7v+8oKrLvMDXLM7+FCpIhH5xn8Npczhxxbo5H9KnJqVkfcGXua42\\nx4vPoMggGXJnTwSt2ZHwnGPNK9w4pSpwLtRK/L9tQG7CyCIDU5L7Zkfsm8xN3bN7\\nqQiN/oiLHpc5YSmRGkeVh+ViSo0Nq7Gey6UgrHw9yLzP2Bx5JAsJQFDPb8NKIxZ0\\n+tDOaN+nap+k5nBJHZwEs1raCCapP7eo3VobHibn/qY97YpreBW/h5xDcpOxW+dT\\n9VbPmzOElOPNucjdrjFbBoHxj0uM3KFJpltpIz8TF3AQhSneshJrWqzAUi5AMbwW\\nn0qt/OGAFlfHDW/xmaoGclNcixuBz3mrYabjQ73dYe8WZhdNQt3lnuQLYlX2fn4w\\nX4jusmkIEpA7IZGQsq7+xohm4W9VnsCqrQatlIiy2E6jr76BwFuIMLST2+uwH4Or\\ntjm4Epb5/UsAwsqSv+XfH7ybNq0L23IvSdEksbbMPx5IDw9Cvw3NwMFaxwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RzRTNFpVTkJGWlJEVVdZWFZLU0k2V1FHMlFY\\nVjRWNkhSUjUyRVQ3TjNINVpFRUZJN0hDSjQzSVpKM1BWVVpJR1Y1Q0pJWFFDU1RG\\nS0ZUSDVLREhPTEIzTjRXRENDQ1g1M09RUFRMQT0+iQI/BBMBCgApBQJbzlOBAhsv\\nBQkB4Ju/BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQs6eWVj1rjqlc8RAA\\nmbyiccGl+FPyrGr3OkMnfRjrXz38y6fnY4ax+I32IOcMxajuTlxq7KNAHEb9n4Y2\\nkOq56Yl5wzt1aH/pcKpl5l5OW1xpVZGnRe/zoHcidiycVFANXpa6SyplQCxL7u5a\\n3DD7mobK6uf9NluSYgQSSAL9WwnubIjLEpMzpdIRe3xNyrw/mPIp0219LegUwnyV\\nCjddUNUMuci4gEf1DQLflROm8hCDLUTW7s5MPlqjhifJgWp8q1eThbbHLIdjO7Ff\\neIUcru+9QApvzXFmcAYbrTbe7Hk6hRpL+BZKtGC91Q8XswWdNLPZN1QzI/I83Qfq\\nIFsY4RKlICOw014RF4jgTWAMI4yPkjwbas4vB7xK1cdPtgylL/hKl0arHJeC4w40\\n3kldl98eP+bvJl4xm+f5ekWDQaphQm/z/EvXok+zcse6XUSZWuZ0cbURWCNqQ8yA\\nLOxzhWbf/901UJbA94vq2UlYHrLDXQHMCoP8S6xZzKzDER+TtjMhQra6gTjPNrcW\\nrrMB+dmhQXReKDqLgNbsTgfH/Rat53Yyd6gelyh4rkn82G/NKTUPM4FhHnSQSqme\\nDRQdqRhfBuZSRE1ZPyB7r9va1ucZnmNIA9mlmfvNfXZNxwJyPBvwN8By72fH1lZz\\nzIoNbJbbSq6E89y7/x2R6C5gXeLxP9cSLdipBX4GTjI=\\n=XUgr\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:47:30.463842Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/remove_star\", + \n \"replies_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/replies\", + \n \"submissions_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/submissions\", + \n \"url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a\", \n + \ \"uuid\": \"bee5c707-de42-4087-886a-1a5cc382467a\"\n}\n"} headers: - Content-Length: ['2534'] + Content-Length: ['2531'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 22:47:38 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NzozOCBHTVQifX0.Dq_lCg.jP-lL0SbTCbWG6wnxr2FQZV2Ebo; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index 32efb1d4c..b26e7d5d1 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -4,42 +4,41 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-humanistic_recognition-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n }, \n \ - \ {\n \"filename\": \"4-humanistic_recognition-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n\ - \ \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\n }, \n \ - \ {\n \"filename\": \"3-disaffected_caliph-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"ae696839-47b6-4360-a91e-eebd5032012e\", \n \"reply_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies/10cd69e9-5a8a-488b-b896-f28ea5315dda\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"10cd69e9-5a8a-488b-b896-f28ea5315dda\"\n }, \n \ - \ {\n \"filename\": \"4-disaffected_caliph-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"ae696839-47b6-4360-a91e-eebd5032012e\", \n \"reply_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies/383daca4-8794-4f29-9b1c-3a355ff0f8b2\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"383daca4-8794-4f29-9b1c-3a355ff0f8b2\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-concealed_straight-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", + \n \"reply_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b/replies/1a8708b0-485f-4f29-b884-daf5423670d1\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b\", + \n \"uuid\": \"1a8708b0-485f-4f29-b884-daf5423670d1\"\n }, \n {\n + \ \"filename\": \"4-concealed_straight-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", \n \"reply_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b/replies/57aa044b-7714-4b58-b988-fe9f433c2b14\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b\", + \n \"uuid\": \"57aa044b-7714-4b58-b988-fe9f433c2b14\"\n }, \n {\n + \ \"filename\": \"3-consecutive_effector-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", \n \"reply_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074/replies/33d9b85f-83fb-410b-94d2-6a33939b2694\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074\", + \n \"uuid\": \"33d9b85f-83fb-410b-94d2-6a33939b2694\"\n }, \n {\n + \ \"filename\": \"4-consecutive_effector-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", \n \"reply_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074/replies/d1bec437-a109-4df3-a710-b0812e40ac63\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074\", + \n \"uuid\": \"d1bec437-a109-4df3-a710-b0812e40ac63\"\n }\n ]\n}\n"} headers: - Content-Length: ['1977'] + Content-Length: ['1973'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:03:39 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzozOSBHTVQifX0.Dq_oyw.XbiV8NzpzDbPdFsmVRhX5v1mcNY; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index e4a8a24b1..519b91171 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -4,40 +4,40 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ - , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ - , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ - , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ - , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497/download\"\ - , \n \"filename\": \"1-disaffected_caliph-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/68b16231-aaae-4a40-bfa0-348f3a69b497\"\ - , \n \"uuid\": \"68b16231-aaae-4a40-bfa0-348f3a69b497\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10/download\"\ - , \n \"filename\": \"2-disaffected_caliph-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"submission_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions/8a46abf1-fade-4015-8abf-490c43356a10\"\ - , \n \"uuid\": \"8a46abf1-fade-4015-8abf-490c43356a10\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/32bbe523-9262-4fcd-a859-25c729b6dca5/download\", + \n \"filename\": \"1-vibrational_sleep-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633\", + \n \"submission_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/32bbe523-9262-4fcd-a859-25c729b6dca5\", + \n \"uuid\": \"32bbe523-9262-4fcd-a859-25c729b6dca5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/18ee5d01-7ef9-4537-b868-3942557485ae/download\", + \n \"filename\": \"2-vibrational_sleep-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633\", + \n \"submission_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/18ee5d01-7ef9-4537-b868-3942557485ae\", + \n \"uuid\": \"18ee5d01-7ef9-4537-b868-3942557485ae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/316ffed1-adf0-4361-ba23-45771c483063/download\", + \n \"filename\": \"1-salty_intractability-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600\", + \n \"submission_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/316ffed1-adf0-4361-ba23-45771c483063\", + \n \"uuid\": \"316ffed1-adf0-4361-ba23-45771c483063\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/69fba3ab-ea14-4ac8-98f1-e00d5c03476e/download\", + \n \"filename\": \"2-salty_intractability-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600\", + \n \"submission_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/69fba3ab-ea14-4ac8-98f1-e00d5c03476e\", + \n \"uuid\": \"69fba3ab-ea14-4ac8-98f1-e00d5c03476e\"\n }\n ]\n}\n"} headers: - Content-Length: ['2060'] + Content-Length: ['2055'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 22:46:49 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Njo0OSBHTVQifX0.Dq_k2Q.DXePrrb4lUHEsHftmciBinEuKOQ; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index 05d298855..9afb3c850 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -4,22 +4,22 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/user response: - body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-08-22T06:44:09.595366Z\"\ - , \n \"username\": \"journalist\", \n \"uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ - \n}\n"} + body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-10-22T23:00:06.845751Z\", + \n \"username\": \"journalist\", \n \"uuid\": \"16db39ec-0f92-4299-a15d-f6053b3d52a7\"\n}\n"} headers: Content-Length: ['151'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:00:12 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMDoxMiBHTVQifX0.Dq_n_A.ati4ypL2flydeIpO5E3gW0YX364; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index bd8b0d288..1388ed31f 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -4,103 +4,74 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"make-believe pharmacist\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVwsBEADeySdQaMkRqff0/5Giry2iGDG61kbrUOmP2mb0QbfKc304Iilz\\nurxQfnfv5TVw4UJvGG07Va9l3cXyvh+Y1CVpV8NePOvi2PaUcAh8es2jRNKWuD5P\\nyyoxf7w2FRZgtG6pRH3gyg6Jy0sO4EOHzn6bA/Jjq+RVbR0MlTaKrEb2CE/qnQdY\\nAjT7PlC5styI5tARQNsEAJh+en6Mt+OS/cowK5PBDk6BfetSfbTtoR7HAZV3In3N\\nQtAheip6OVjRNMtl4smhT5zbB/A6wxBZGOWQLET9lTF5/EfM8Q6Or+/R+R4q5QbU\\nSESHhw4bhkFl9NIOfHTgJGl2Aq4crPOCh29ZGb8QQJBYHK3b+ddSn05kAwd1J4Sn\\nrvL0hhwdwu2bimyHa2y28S9EMOAd+XC6RequuFQsrwvxgd4KnHBm9ZZ7OAGsYmNL\\n/GtFiu7BMP04KOFLwNQHqV6Fg1M2skoT7WjU9HIaFii3kV64oY/mecfqfZslLENN\\nTVgayeMZ3YI6D0m1xv11b9nnbMFToaatH+VRQniXeI4P8GFBeEYcnjeLyWD9O/i0\\nj49lBAVK1ajxRI3rXMzIcnqLzSy+noe4XaWb+KEq1OzJ8XR6nV2PJ6wGmNkugW3I\\nKctKZy/EA9Pyx7zPPvY4zUKMRCZmDEKl4+ewSu2oHpqkO8s2UHgzi5l96wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8Q1E1TlVGSzY0NE1MNkIzS1lCN1pYT1BZQ1c1\\nVFhLQlFMQzNJV0ZKNTJEWUpXMzNMWEVQSFVGVk1BNUZFU1VYWlBPTk9NSk0zUzZC\\nSlYzRTdZU0VSUE5PWVFBV1RFNExEQ0RRQTRaWT0+iQI/BBMBCgApBQJbzlcLAhsv\\nBQkB4Jg1BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ0HbT1Onm8LWHIRAA\\nysZLcVJEpIdQTIQC0uPawGhFjixTatv7wHp7Awm2leb/ZchV+BwWM62QYL0T7G+Q\\n95IwU/Qoi6HaAm/JkRN2Y6C7SAieaT/3VqtkVjoZdxMpPjdg/m0vbRPzOBTy6vIX\\nzxFzUoYJafiFIGOLJQABrcj4jGT0c4kQRTW020ksO4h1S61Jqjz0jBK7Pab5pS2H\\n9hEiqGRVJdtiw7m5d+PclE7m4fA8bfRdW76uCPsuo1BWD7uoWTrZChE9yoDzDzMf\\n6aTVe1oRCLWlYtD33FiMUGVJBq5mqSH0qIO5TZtMQPm6273ExhmsWR47qxO6BXl/\\nN2lfb6P/pbW3LmvsfEaL2hlsq/CQTiASA3jcsfr6N1YnQUmQ/asNLAUDuZWTAyGL\\nu8gZ5CgYkmPi86j5U2KZVRfKBAvO4GedSIEOWzYlVh7hqei0w6yVm+G7FK0ztoWt\\n1JcjAVQEO2+mRvD9MHqlQPMOlIFK6BN8PQlTafqddbzyriAeCtUUE7VScN+Yqm2j\\nbZhmy5wo52oJtuRX92c9y9HThtGwWpGT1OezlQxAgH4Tktws7lUFO1QWg4fOYzjH\\nKFN/mbNDbsNuaLl0wpBxk4NDEa057EYE8vB7ogu0HqxJcZ4wr+VrDpqdP8uxu2y0\\nWNybvKNtGtcZ9lDYuCbOgZH2DI2n4q/pMcIx7ODG+6A=\\n=zN9o\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:02:37.971245Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/remove_star\", + \n \"replies_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies\", + \n \"submissions_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/submissions\", + \n \"url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\", + \n \"uuid\": \"1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"hilarious climatology\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVw8BEACnnCfkrVt/TP9N6Xaoyo//yJG0ZGV0i4XB7uKe7QnwiP/QXZJc\\nMNsnll0d+r5hKYNMXoAY2Bqp79241GcWnkZSje9TRtfU8hXtsfBDTtnu8NJqBVfz\\nEozDNPumhkje6biDPFkfde3FfLB6uZYdoyhG8htvudhfUjTDyacTkqcIyJBNhdtf\\ngMunbIz8hwJVW0h95Hu4HH6RDludDUdr8gEOIQm4JiX1l4iecpisDuXpLLFwsM1C\\n02qyyk9Byhp3IQFeJ+ErQwQ2lCZ7MGmHo0/qgTXLIQzkSYCJCAcqtUjc1bYwkfS2\\nKKp5i6hX6+6znLpwIdY2Y7OXN+CS4N5k7eLedybbqH0vnxsrIAWgOOfFPza1i/CS\\nRE7uAUu3adxBziGqfe6lAti1LhYd0iyfa1cGOQdl8xuudWNHdKODrTDyne2TLKKx\\nIBrSaC86N0AZxEaH0VBR4ICuywNBdn4hp11WrVmqXqR1MLSzxgK1xwpFDDKw0JOO\\nkv4Crbl0jhHKiIqCbqmrq3mN+Ut5CM6zI5CY0y/ASpDSkbOCNiMEFJ+9d8lROOiU\\n5NabIyRIazI3YMbX7TzNCz8ikJP7GDtzHC3MVHzIqNbxgR8x9tDYPJeaFxQxI2+j\\nOVS6ZiWtuZw6x/yuPUicfJM8fNTouTIm0ZEg/igWEhm4RY7jy+IRjFuTfwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NUVONVNGVVVDU0lVQ1NJUFpTTEpHNVQ3NFcz\\nVlhRSDdCTUNUUEJRTlRTUDJKN1c0UzM0S01LSEZEWVg1WEJJWVpQSVg3S1dRVzRF\\nU0hWNVoyMlRXV0tMNTI1SDRDQ1hUUllST0NXQT0+iQI/BBMBCgApBQJbzlcPAhsv\\nBQkB4JgxBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ9d3404sMUL4NHA/+\\nKJbZUj0pwOWEkGsj0FpkX90hG+cMrLUDp4NtV2cMBJd2nYb7kFwhcQ1kHkjZE2n5\\n6uDhc3wkVlUUnNzZzvUW1gFiXPme02Sg9jSqNTSJKFobujfn47pMSq1BKVIJi+cG\\nxqKz544Rfl/LRuekeChtXB/Jpzfactc5eKzfJI0EyvSLpRrSdK8brLy2zQI1YwK4\\n2RjbXJ/ygOH3fqoUdeKX3/6HvApww6uBjL/Wu9yIYsFFcvw3oTezGYdyMf/5E3ic\\nJBw1cZLF2v4qEvRuKkJlhBAjHtcg+JDguPBoEqD+FmzAWpvj0Sz+pfA2YZeHtN7l\\nAWhQpKEN/sofLZCNVOgXSm2+rV098ssE6Q8W/fouV/AHgy/pkCfyKy+NCKXfm+d+\\nsQuC2SyBCgYPjkfZsERSwwuu1eRauB65/VsckTYiDryeaESDeOwRipgrcko7sYO8\\nULh0gQCzwzRlCiYQTw3m6BxQW+KCzewhRNBTO3iAaTQf7SzlpBLivDAanu65vZMg\\n9D9ayVKS1gKzI6X6heBDQ1tK0Xdv/TkKGJl1HH+SBSCVI4YyZQzi7ft8U4o7qCda\\n9nO53VYA8KcBErvM05Sn0WUOpVfL51BP1Pk14MdpE9Yb6q4SLdiS3OQRuUivm6NK\\nIF/t/xYEBmE7Qrynzup84rRoOU1KHmKz2CC8p3kS/cg=\\n=VILh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:02:40.707390Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/remove_star\", + \n \"replies_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/replies\", + \n \"submissions_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/submissions\", + \n \"url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995\", + \n \"uuid\": \"da9e4d3d-e8e9-48ee-9d19-e2734c7ae995\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5247'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:02:44 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjo0NCBHTVQifX0.Dq_olA.wX1oQ3GIdHyPm51slPeirKT84YQ; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies + uri: http://localhost:8081/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-humanistic_recognition-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n }, \n \ - \ {\n \"filename\": \"4-humanistic_recognition-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n\ - \ \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-make-believe_pharmacist-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"27237818-5cec-4ee7-989e-0183f710bfea\", + \n \"reply_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies/97e42dd4-a493-4e03-ab42-8e7aba16e88e\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\", + \n \"uuid\": \"97e42dd4-a493-4e03-ab42-8e7aba16e88e\"\n }, \n {\n + \ \"filename\": \"4-make-believe_pharmacist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"27237818-5cec-4ee7-989e-0183f710bfea\", \n \"reply_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies/4fd4ea5c-3eba-474a-a5f1-a4891489a994\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\", + \n \"uuid\": \"4fd4ea5c-3eba-474a-a5f1-a4891489a994\"\n }\n ]\n}\n"} headers: - Content-Length: ['1003'] + Content-Length: ['1005'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:02:44 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjo0NCBHTVQifX0.Dq_olA.wX1oQ3GIdHyPm51slPeirKT84YQ; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index 88dd89997..44466a724 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -4,129 +4,100 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"unabated dysphagia\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVyQBEACk8yFQ3aO3L/fQbmiDEVCaJK+2GzQMWbmYLsFQwS6JLRBP03no\\nL4XO13EvL2F/oC5StWO6QSxoK1k2/0ItqLvgN8IwL8XmiWID2FI3PBR7VyPLH3/r\\njQRLnSgUf/4phyV0aL8tv8sPksQZ4zLRW/DktwVGFbxlaIuP0pqI48PsKJI5TyD6\\na/yFRXAaO6KimzwyyfVoqkNI4v83gwZ07T6muCzKIctDnr2ygulSukWXA6qa9a62\\nSLlwVTviIA1hnufCpq/VFU1duPuq0mN8BfBkBKySnqGkVmEhUhxu6BNFrHEzA0m2\\nJWc+7owEO2RfxnRa32adu6lKQFMllc+7nOc0k+aHqDbEq1qyHT1RVHw+at3hlC9U\\nDxIPiRovWSATka6mAL1D/4rNNQQTsMLLRfO+x+sFoZKQUmyy2l2a2cmEjK0MImew\\nB6YMU96xjqIb+tTWv+B8IOPFoyasxcCVmDBlZ+BuZZDMndmV3PD/7sCRs+LPotUg\\n1fNgagTkBGekoHMMYF+A44nJcK76DLK4z0wWsdHLCFkYz4EhQ2oUYZ2jZwuYVykN\\nZbDc4C4KGmCk62vajfpSv2bPN9EechrsPvxtMD52YNC9vCawmOQMpQ8sy6/pWayR\\nwfJLh7SqZDifDYmdPDXtmTeFby3r9Ng0ujULOBOrM/WstnTVUlBajdhB4wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VjRXRUZCSVBSV0hRN0RNTkJNU0haVUxHTUUz\\nMkFQREtRUFk1T0FVTTJWU1ZSSDdDU1lZUVVCNENSTjZZUktBVlFNNzJNNVJQUFFM\\nSDNYVVlKWFJCWFdISlhQNUlCWTdUWktSQ1pMST0+iQI/BBMBCgApBQJbzlckAhsv\\nBQkB4JgcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQpfm40TT/9QFRtw//\\ncwtRPZyIhiB1EWd2WkQrLE9+SU8z8minE3CgshTcMIXl0jbSNOphIEz5bRhs7jj6\\nZQhp0aKIOo/yQ/DsKmhLoTR5dUXh6otMzu9K9yFUzE5+vvuhaqlyiuzHx+/B+ftI\\nrs8kTCRfQsr2ONMlNdi37hwOogjRmVlXayCdJCl7saBIPNxsJ9MmdG9q8e1l813B\\n9C7DljZW3zR7v+LwZw7JQ9ihK+Css7YmJvUeC0IfwRPd6AAx68yngMh/dMt+ETc2\\n1XC+9MPop0ctN1hVHR7wtvZhMVzDFPhAacpC/ItehBRD77H6Az+yKvl4aUG6cFob\\nZVVGnazp6D4Gl2X1qzZ1UbUNmiJ6xRMnpfjF0xMIfbH47oRNVK8b27ElDV3QLkG4\\n/PITG/qKOqWxmiDm+nUnAhCKnGhBaq2RXk8bX4qks1vSbEEbw+7yuOwPRY34POBm\\nl+K+LRbj0fth/73Mjrge4VQBoikvuz8io50rZn8YcrV5B6BP6heoZE/UkX1XUlsN\\nb0FcmjYhT68+FXd2QiKpZZO0p+wfmuuUBqx4vhiyOkB0ZidLGkFf9cJdMUkaAW0r\\n+c06BTU9cZX4YzWBb+uSHrsMb0t1AhtXLHFrZnL76r4P2/mKHCrAW/NfWLWctLOM\\nYfg2YitdC0AeutWLm/iEYFrksf7g2vZHHCPsTcV5YBw=\\n=YfiF\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:03:01.645115Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/remove_star\", + \n \"replies_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies\", + \n \"submissions_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/submissions\", + \n \"url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", + \n \"uuid\": \"562bc2f3-6c23-4168-8218-be8309463bd1\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"shadowy dogmatist\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVycBEACuHkUzZb8yRB9K8Vi0rIvrdDjy8rC2tjUx0elJupxHF/FjVAsN\\na59Q/ijCYFBZdMhwbYdLmKur+1JmNhOUhEQ2hQQZamj4JO8U0SfAmv3TYJP/nooL\\nCxELC9a8yxDWFIvdaQZIcAW798qXfslg1N9W77tkQ9SEDBZgbNl0JfOBsVbNNi3g\\n0dU+gonddkCY+z8ZQ4ug+iGaz/yd+Oj+6IA6ib3PI0dvB1wgAkhBR7s2Z7HbsHTU\\nncoMIuWO2m6wG9WkPCQt1rjR04mJzRIL+RO1mtMQuAtPrs2dlHF8SQ411g82/jAN\\npv0sveDkX9Dio46EZOwkqR8ARFxjLiPs0zmAYuE90MvtOoLDcet7Y9cKjszlPHeW\\n5YGsYbszc5c0iRXvs0aWx7H1iLlgcCU/USEROCWGSCfzvcg66fGV/EQRpIHMCOJ1\\nHLYqcE0O6mhtFvCU7A4/kE6qNS/N19r1UbOLNwMq4aYhmb/l7K12n9/I+8KNtW1l\\n7wH9aicHW6N0lSiJ8riWIr87FybuOuvezRg3L9GFY/79sU50Ye8F9UiUo3KO3Div\\n9EZj2y19UKn+SzvFC5whHuHa+2vIGv09g4cgF/PQWn9CmqYFbSyonJFlYJmxbPtQ\\nK0hbYxFdldxMG4LBpTznwkKAXr0fHpfTuUT8FlEKiHSOAn1dYFlY2UrKcwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SDI1QVY0R1I0NTdKQzVNUllZU0VDUkFXM0xR\\nVldXUkRGSkhBV0ZUWFBXQUxDRkc1SzdHWE4yQUZDSlBIRlM0VkJWVUlBRkpEVDNC\\nMk5IWldJMlo1WUpDT0taUElWVDZOUTJNQkoyQT0+iQI/BBMBCgApBQJbzlcnAhsv\\nBQkB4JgZBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQLB1Rhd9uHmjDCA/+\\nOtahdf/WnsMjATKBA69UGFqa43RhW2dp3GpohkSL+iKUWNGjd54s/2HolpQZxUc6\\nKIkxP3iRNcVt8QExJYIvh7/Ucewqd9sZzh8rDKE40fJpBf/8REOTZpOdBKjRf5T4\\nAtegAEIp0cIRr3kdf3HHmeay0cNPjxZKm5DtP+ZPKSLNf5vov197mTM2gYZRypdb\\nJlWIICbUNHHL1ayvMwhBpGtNCzpnxXMOAHgfKM7RPLypwa3U1b0gCLrQakmIMUW9\\n6OBt/BKRRBQKk7SsJyjP2T46TUHHNpM4V3lWlwwqsHnjwv8xypt8KTb26BIoubVa\\nV1pwth8xMH9CR40a6nieNl0r+EtRrlaixgtB4q9nlT7X9ZHRdC6dzFc2TKgeedlW\\nevocx8Tk5vgjl3dqXUSVOTYaC3tsk+C6JTf0EjvaTZ8TXQqLB5V3GBKPLToayxPG\\nH+SPVpTraAE5bbBr0YMaHQlT1RyK8DLpbnGrYOawAyeCd2zUglfQaBF//gUmOlSi\\nXQyMHsqjlKslgtJJQ6Y54tBmh8i3RJhPTvaupb9jsKtq02eI4L1LJjjFuqbOI8Iv\\nBZreys1hdS7xD0YMVdAeDAjU1Svd8gUFhFApBRF5okuR+kV6NqdPHGC0liFm7TCy\\n+hzRmMeU+l4zTP9UFSctrxILnJtdrU7iMO4W9rqv/m8=\\n=OBU0\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:03:06.236936Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/replies\", + \n \"submissions_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/submissions\", + \n \"url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25\", + \n \"uuid\": \"a90a1a64-3dec-4446-bf2c-d8405ee5de25\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5238'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:03:12 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzoxMiBHTVQifX0.Dq_osA.GKwpYrZa6lpSNh5eezPTa1TGUJw; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies + uri: http://localhost:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-humanistic_recognition-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n }, \n \ - \ {\n \"filename\": \"4-humanistic_recognition-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n\ - \ \"reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"1689e6dd-779d-46ff-8af6-2c57afae4fe1\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-unabated_dysphagia-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"d51ee479-f494-4646-9216-ae6b114b13e9\", + \n \"reply_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", + \n \"uuid\": \"c6cb5121-3585-4587-99de-7c82a46cc74e\"\n }, \n {\n + \ \"filename\": \"4-unabated_dysphagia-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"d51ee479-f494-4646-9216-ae6b114b13e9\", \n \"reply_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/31c8f700-2636-44d4-b635-6e9b20932898\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", + \n \"uuid\": \"31c8f700-2636-44d4-b635-6e9b20932898\"\n }\n ]\n}\n"} headers: - Content-Length: ['1003'] + Content-Length: ['995'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:03:12 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzoxMiBHTVQifX0.Dq_osA.GKwpYrZa6lpSNh5eezPTa1TGUJw; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77 + uri: http://localhost:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e response: - body: {string: "{\n \"filename\": \"3-humanistic_recognition-reply.gpg\", \n\ - \ \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\"\ - , \n \"journalist_uuid\": \"ae696839-47b6-4360-a91e-eebd5032012e\", \n \"\ - reply_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies/5ed5a8e7-1e51-473e-be07-3326a733ed77\"\ - , \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"5ed5a8e7-1e51-473e-be07-3326a733ed77\"\n}\n"} + body: {string: "{\n \"filename\": \"3-unabated_dysphagia-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"d51ee479-f494-4646-9216-ae6b114b13e9\", \n \"reply_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e\", + \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", + \n \"uuid\": \"c6cb5121-3585-4587-99de-7c82a46cc74e\"\n}\n"} headers: - Content-Length: ['449'] + Content-Length: ['445'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 23:03:12 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzoxMiBHTVQifX0.Dq_osA.GKwpYrZa6lpSNh5eezPTa1TGUJw; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 90122c816..900503b64 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -4,114 +4,74 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"encroaching thrombin\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUlsBEADJBD7CrWdSw0onvipUUR08oXYjnT8yOTLr5JegDvUEUD9G1780\\neZyCYpzDltMLulk7wi5XsS2S556HEBOfcu2cmoRnTxsawFCKx1a39JT3Ql5P8shP\\n4WKD4MRmwDUlrX8RfuzmbHS/mp4cEUQdEJGlLJyxUDrTaog9plbKBmnIArLB9HpY\\nKgYmsX/SrvJk87s2cK3sRhsEUlY5UNEh2MeWIlWjac0apuIQTPTEPyyI8hVu8nNs\\n9SkK7T/YQ0QKLbwl5axd/oEmXg71QbuZW0Xpds8Ce+wbveLwD51uuELweIYLfnKm\\nOJiQfpWiFXpJ1fLovXiD8seOYh3a7Ak9xels6r9CWawOdMLvy1BZAUOfIRdINRnK\\nE95lcvXY3Hl/876KTgwDErTDtkBWFPBCxwJDUVDZczCDdPB9yLm0A0/pngMuXjq5\\nP1uS5LoEQNMB1Gl6LT1TmuteITWpavKRce8iBY4kmf/YYuP1J5YWgXx7kcoMXteC\\nub6KvatKCj3FOrCzJc3EzwjKk73OZKy7Mgzkod0PHIoHp4vVu9ohQjdGT75laQ2a\\nuZSNjNrWmQ4vR8vncs0Sn3cVsABpSx19dsAR0gnJzi3h40F1BSrdB3/dW1QQqAgE\\nvHfuz28kjn4DJ26ZUFGA4EicVGluB52tPcnxxXylgRNlQzonPsaYhNomYwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QklGRFlER05ZV1BSRFhQNEtTRU9MNlhNQUdQ\\nWklBVVlUM1hWVDZKT1BCNFVGN1dRUFBUR0JCM0NVUlVaU0xNQUtENkJNNVE3SE1I\\nTFBWWFRCVkpURlVBRDVQNDZBRUJONFFCWFBBUT0+iQI/BBMBCgApBQJbzlJbAhsv\\nBQkB4JzlBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQvdhJSu7wPN0mqQ/9\\nEdHB2un0t0FnxVXJcEJ4Uxq9f9MadAKKyGxkLvIkrZsb5gOhHNoRaBXlxh+TKnvT\\nZKYzJ//iXZ5lsHc9cuVai4LkBn+bB81BoArQlwVOvLRED+PZ/j3EVkv8L8DGbTOa\\nM0VhhNL0MKVayUngsIySuVgCOEw7CaI3B+f0jI68FuyIk5bPxSLKSd7KZjINJfD3\\nNPGKS4jKUWCwbbhQ3Fu6jHvGmLKgTvHp/5+uVVaZGeVTzRVgqsr+n/fkqvV6q0GR\\nViXjIRey2GAGlox8/OktsbSTbXwUjlxUVeZvjvfYwEaQsuL0w+mije62w5oH3fG4\\nIjJvpKaaVojvOUVOJdWREHGlAoDNkVicNYBS9bXYnzA/kCshqIXYe5nT7vzBxlWk\\nfaPnb4DdPUYNiYH4EVCiPuM7L4rDgjxP+Q4TZ3InJv38Kz0ujGejlPGyfg+nZsUU\\nK7nh+CdGvrxnWEaz46VR7MIOMYG0BNvHH95nOWiCIFXAmSLywgi4ijHGxoF29jek\\nc/s5zPzUjAple9iGRS7NnQ2qlD3HyId5cWx4VTLqkaShaosnn9wlEeQXF1g1FByI\\n3UAL3IKiXjXwwb9X9q7cQaz+20/uLInFPNBTMOEHxBY4S/tbHN/SL2DsHcknyzBx\\nGtaq3CXwiabS4OcYLpfYZEPviTKHu+5Zx/QOVI5bdiM=\\n=bGv9\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:35.770457Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/replies\", + \n \"submissions_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/submissions\", + \n \"url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc\", + \n \"uuid\": \"a2c25dff-cecb-4194-95b8-8a1cae5c86fc\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"sound wallop\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUl0BEADG7IE7KeyE/qi4DTRgXs+gdrTRxp+XZdq7MqSTc46v2Nop2j2L\\nfYYZYXKZrp0E8LYzQwbG0YOGExj+euNxakdrVOYCS+G4GDeqmu5zOuePTCtkMXkJ\\nwV88RLwi9VJRHTdrlRLVqII5ivcJTGNg3bDzCneTHifGEBTe4EwvX4Xi++idKsoG\\nEjtjF0lilYEylWMbOjWY2vKxOMYlFER6QBH2goGD0BuAX89CR6n+Fhqcbsz3DfOz\\n2nZTXU4ljjuMHooDHFltIkHDEVxdubCFA2anjAMgxDcrBNyk+542tOMp0rFBLjwz\\nB7VIfuEQwvxGdP3lWb9aVeYYvGCEvwLAs+r/X0mIsQ898ez8GqFxTZygjCJpoyuv\\nd/apPH009z6E8it7C2L7tPxsTZR58fxpDeKha6dwekYP0Ei4omAawZ45eeYo6qo2\\nUA0ya4tN6IhlrMltoIXQND7zfzfYclvJCjCWtpL6P1CLkG2NUH+E/2yoMZskAqYw\\nkfrS4L0saLAPzCj3wOgSr/0XpuZSpk7n3IprziRoLCqH1E0YoP9M5N6t6nr0knzM\\nKgMp8cgcF9bkx8mjdH0ccwb7lGaVkGhIY2SQ3g+uzIFpBmMqwQHetO7cbM6XNEDO\\nDLiY4jQXHJ5CABjlXSnMBwqxLirO2aCCQOYXjwTyj9Hga2iuOFJoxv/0iQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TlJHUzRUT0JLVlQ3TUVNWUlOR0hKMzdUWU9G\\nUEFIWUZITEVMVFIzTEdDRzQ0SDNUMk1QRDdSVlIzWTJWTVRJRjMzNE1OWTQ2M1ZO\\nQUtJTjUyRENDUUw1V1NPTFk2RDVRNk9DM0dRWT0+iQI/BBMBCgApBQJbzlJdAhsv\\nBQkB4JzjBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ2q87hxHMEIkVBA/7\\nBrorMcHxVDBJ/naCqIV65nPHvuwEZTXJWH8f8eSRv81LZBp53I6BCx6eMFyBdm41\\nLMvl34iqa77zJnApduda+48mdV1Fei9wmDBbgS2khhRWuunSSHkvro9aALqXXeWO\\nJBpMkYM/htFnSe9Ckz6FzhM4FglacCRrR1POhEq2Dkx1V0aDM1F+36wOj/RteT8v\\nK0AeEZ98um8keuz3BPBKBJnM70jak+YZ7T8mlVJPZHKe418OGnGteFDc7YV/lPlZ\\nyniUk0lxC0SqeG2yeplG3IMpsiYZ6JlVk4bfC6n8R2ZDq/ho7JGTYor3SoWnHHbx\\nbX3WIeJKccpvUqgWa+te8NA6o698HF7v36flrHIFC6LIR7IBLNN8RuMqb1/pEECD\\nrgmgpoS1Q6E8O9Rfm7kpT6Hzbs2Oa7iICn3GVUP1u/Lul7qdGBl6crPIdxtYILd2\\nNJLXr/mpRLR904yfBsXwSnMEDow7PcIJPij+b3L3ikNOWyqpgB0Khl1zJGOFjpJ1\\nuVLbvLmv/4FlPNQCOHujfRYwNQ+q8AOuJCL1T3OGUaearI9b5Sdo9Cqe0hTsEo1+\\nTgWXABQjrgT7OlyumBEx6e8hzb+Vp16rQd+B9GSLip6kQZZ4rSBg++3zXpIjgyRA\\ntDCjQNoSrC2D3rc/fFOvpBPHp1lSC8nT4Zf0uk4DZnc=\\n=N2Ir\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:37.648791Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/remove_star\", + \n \"replies_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/replies\", + \n \"submissions_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/submissions\", + \n \"url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac\", + \n \"uuid\": \"c27b0df9-02c7-4add-923f-1b3e73793bac\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5235'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 22:42:48 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Mjo0OCBHTVQifX0.Dq_j6A.ZIXV7QFjwhUsqO1i4iEjYAy3CJE; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e + uri: http://localhost:8081/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"humanistic recognition\", \n \"\ - key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n \"\ - number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\", \n\ - \ \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n}\n"} + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"encroaching thrombin\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUlsBEADJBD7CrWdSw0onvipUUR08oXYjnT8yOTLr5JegDvUEUD9G1780\\neZyCYpzDltMLulk7wi5XsS2S556HEBOfcu2cmoRnTxsawFCKx1a39JT3Ql5P8shP\\n4WKD4MRmwDUlrX8RfuzmbHS/mp4cEUQdEJGlLJyxUDrTaog9plbKBmnIArLB9HpY\\nKgYmsX/SrvJk87s2cK3sRhsEUlY5UNEh2MeWIlWjac0apuIQTPTEPyyI8hVu8nNs\\n9SkK7T/YQ0QKLbwl5axd/oEmXg71QbuZW0Xpds8Ce+wbveLwD51uuELweIYLfnKm\\nOJiQfpWiFXpJ1fLovXiD8seOYh3a7Ak9xels6r9CWawOdMLvy1BZAUOfIRdINRnK\\nE95lcvXY3Hl/876KTgwDErTDtkBWFPBCxwJDUVDZczCDdPB9yLm0A0/pngMuXjq5\\nP1uS5LoEQNMB1Gl6LT1TmuteITWpavKRce8iBY4kmf/YYuP1J5YWgXx7kcoMXteC\\nub6KvatKCj3FOrCzJc3EzwjKk73OZKy7Mgzkod0PHIoHp4vVu9ohQjdGT75laQ2a\\nuZSNjNrWmQ4vR8vncs0Sn3cVsABpSx19dsAR0gnJzi3h40F1BSrdB3/dW1QQqAgE\\nvHfuz28kjn4DJ26ZUFGA4EicVGluB52tPcnxxXylgRNlQzonPsaYhNomYwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QklGRFlER05ZV1BSRFhQNEtTRU9MNlhNQUdQ\\nWklBVVlUM1hWVDZKT1BCNFVGN1dRUFBUR0JCM0NVUlVaU0xNQUtENkJNNVE3SE1I\\nTFBWWFRCVkpURlVBRDVQNDZBRUJONFFCWFBBUT0+iQI/BBMBCgApBQJbzlJbAhsv\\nBQkB4JzlBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQvdhJSu7wPN0mqQ/9\\nEdHB2un0t0FnxVXJcEJ4Uxq9f9MadAKKyGxkLvIkrZsb5gOhHNoRaBXlxh+TKnvT\\nZKYzJ//iXZ5lsHc9cuVai4LkBn+bB81BoArQlwVOvLRED+PZ/j3EVkv8L8DGbTOa\\nM0VhhNL0MKVayUngsIySuVgCOEw7CaI3B+f0jI68FuyIk5bPxSLKSd7KZjINJfD3\\nNPGKS4jKUWCwbbhQ3Fu6jHvGmLKgTvHp/5+uVVaZGeVTzRVgqsr+n/fkqvV6q0GR\\nViXjIRey2GAGlox8/OktsbSTbXwUjlxUVeZvjvfYwEaQsuL0w+mije62w5oH3fG4\\nIjJvpKaaVojvOUVOJdWREHGlAoDNkVicNYBS9bXYnzA/kCshqIXYe5nT7vzBxlWk\\nfaPnb4DdPUYNiYH4EVCiPuM7L4rDgjxP+Q4TZ3InJv38Kz0ujGejlPGyfg+nZsUU\\nK7nh+CdGvrxnWEaz46VR7MIOMYG0BNvHH95nOWiCIFXAmSLywgi4ijHGxoF29jek\\nc/s5zPzUjAple9iGRS7NnQ2qlD3HyId5cWx4VTLqkaShaosnn9wlEeQXF1g1FByI\\n3UAL3IKiXjXwwb9X9q7cQaz+20/uLInFPNBTMOEHxBY4S/tbHN/SL2DsHcknyzBx\\nGtaq3CXwiabS4OcYLpfYZEPviTKHu+5Zx/QOVI5bdiM=\\n=bGv9\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:35.770457Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/replies\", + \n \"submissions_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/submissions\", + \n \"url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc\", \n + \ \"uuid\": \"a2c25dff-cecb-4194-95b8-8a1cae5c86fc\"\n}\n"} headers: - Content-Length: ['2534'] + Content-Length: ['2533'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:10 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMCBHTVQifX0.Dl6Xug.toKbzc-0cb6jvYxA9TxHKjzeJdU; + Date: ['Mon, 22 Oct 2018 22:42:48 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Mjo0OCBHTVQifX0.Dq_j6A.ZIXV7QFjwhUsqO1i4iEjYAy3CJE; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index 2659dda97..c480c172d 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -4,70 +4,42 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"disgruntled grasshopper\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUiQBEACbAiwRG/qz8uikq1HLlrwoeGy142rnvuxURse3/C8q7f2z1/yX\\np/wuoHGRyucfGyl33Qa5rocyxJeK+/Vpvn6GC6j5KQVmnodVbzoIR6AOyJSFwVFE\\nxuwzlZJFhlk/U6LNYDrm3M2Nb19T+h5NaH1Lw/s2DfDRzmqv15Gs8K+HsVtRPOV8\\njY7AvA/u7zffh8/X7eYP/RQCww/QKfVzAtVDo6oXlRO/q5VhIYYwrQUPkju0vru7\\nVZGwkCQxiubi0BkpicaQeCX136Zxh38m1b9dERvJWxgzCJvOjumEUrPytgFlOGIJ\\nSBex+xnl3IPPO9Q63TBS6Et3Qi219y+et1QGKr1xiRvmUVA0H/nn1tVz2oD+WVfO\\nDZ71nhIhYjuRZYw37MlQb7Ivgdkrj9n0zSXBXxCXuNHCk2/VQn0SpND6vnQMQp5r\\nF5sO9PAlPpDcEjOyqic25Bn/wkCxJPLR90Fybc6K23w76B5Cx9cOdVsT9yeycwOS\\niBw3HGc7MDagTXnYBDNMW61D51eH/Fdi9fZ4MtcdfBNRweV/Js/rD9DIK/mwyiwQ\\nWh/RG9vkvx9Qoa7ykcT3wN4gQh4H5M5HyGHpOgYiXYVcNfuTo6TF1QOML7o/ptEa\\nafGSEbBdIE9ILVy263DdNqktjBFKUb6GJGpXakCSrmubWrXek2llkkwKqQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WVJRSTNDNFpOSjdTWjRIUVlXSjJCSTVYU0JG\\nUk5FQUY2Nzc2V09VNkxXWFRVUlBaSVhFVVZNQ082WjdCRlU2WlZPVURLV1VYQlRK\\nWkhUWFpMTUJCM09YU1A3SFJIWEhWWElRSkNNQT0+iQI/BBMBCgApBQJbzlIkAhsv\\nBQkB4J0cBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQPwX94hLOzsSNPxAA\\nkcWWQKz/ehr0KVOibxUz+YgdAPshbsACFfMWv2A5MlmilWkl+lUWGaplmJEscybr\\nuW09ZJMIu+HJ8tevCA0vKwEVFBwqx6YmT2Bz0KkcENKaBXhK/MJg77A2d8LLHzGD\\nWSjCFU4EnG0UF8eCD4k2U5jox22GkmwbbU8HOSNZrQooBK5mAIgYAdn46Z/FRanP\\nkfjiSeTzd4Z6f7qPyrR5tmvYSQEcoLZSIyY9FAiN84kV6CKvJwAQXgiwYeHvvaBI\\nR9YmHULq9R9Na7PzykJo7QkxsR4sWsChz5yA6NAZk7nR6ktZWk51MAQhoe+INM7O\\nvZLt6508H0dxHZ2WZ/otX3WO0qLU6AOpddlPP0qP90hYOmVlpb9l4bGjbED2D858\\nykZokJ+TIp/AMRB10LiYeGlBxauR4HeXDQ4gDinmZkNfOhffOYS3fIouOpK5SSEI\\nHenXccDE8OmRYI7d6KpuRiZSC/203HM1jQV3UaVnTAfUs73pu72jz/A76NjWq+Sl\\nV2KZpqxfO/umqXZ94zlxQSyatNuoQ9JBzXM9/pgtg0e23o+0c19sr6PcXja/Bt8a\\nf1qemG7w9pGAfYn4zJJVUUYWEWBEWCYYSk0feBQRK647nBZ/vWPnExVeXK1oz8cB\\ngVbcU2KMRdXDCHgVEBgy/7BpF+Gd50VB4SbdO8A9XH4=\\n=J0A0\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:41:41.599393Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/remove_star\", + \n \"replies_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/replies\", + \n \"submissions_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/submissions\", + \n \"url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0\", + \n \"uuid\": \"c7abe6eb-e9f6-4bea-9d82-740ffcf833b0\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"crescent hammerhead\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUiYBEAC/LvvPFnDNksgboyivTh6zsd1/dgx4XJSbssapQ6jxvOBc7YXf\\nz+JY7fySyW+JGdinpF56p+wKZynMMFurBcePO3FFq4p1oMeKJNayWbcqWxNpZBrr\\njdczh+bv5NJ80i54eyNqbk5xB8kzyAbVEryRE3FlcxNfWL8Cukpmxkqhaa6FuTVx\\nWL4sOpfEXA9a3q6BKYkXdm3qu7WE0wWJvJtrcwHvDLOioT7ui7vTltT7fRCMPH35\\nfOxTwMBzDVHdOi4OtRAeRbAG0kC2seNturh+uNzluROqDeCX8vJfVrzWvHruCtjT\\nfWPU24qb683Hga1gXKrQqGsScxK6keJhdDGS4LIflClHs4IKItCGmfahjmbH+ba5\\nSOceMIhdT9+iPegs5TTUWB3euheg0PzDhAA/y3/AeqKKci29erQuIkDlJGSdNpvy\\nnMqzqh47Fxi2F2pavhIMuNuUEXf6CkBN7oq5Mpuvb1iFkwepThm2uEo7rxZ8hOPK\\nSqgocyOe7Zrd91hJPl6MJAkYDQZLZ9/Mfiv5ZV1myPo4nvcRLk+kNClh8KKDb+Ao\\nHcZJgbKUkYEdeTZ6sGStHHx92tU9R0wwlEXJMC50gO4K1BLuVvbeoyQ2zuQUWSyN\\n7G3RIWGGTwNHHxnauO9EUkFM3Fd7KnoyMJsgIy1zcSN6baP/c1OS+G9sswARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NjRYMlVQNEpURFhMT1hWRko3VENORFpLR1VP\\nWEg2WUQ0R0RFSTNHVkJIUVAyVERFNVlYVlBIS1RKVldVUUtTRkpKVkhWQkxBWVlB\\nNlJaREs3M1NYWjdOM1AzMlRPT0FUTVhOS0VYUT0+iQI/BBMBCgApBQJbzlImAhsv\\nBQkB4J0aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQFZngoIN/lTR3ng/+\\nMml7B9vPfCKaaehCilTqCj7s4o7Tt4wGjientC2ZcaEJCkJtSK/Z0wKUcUZD7q3f\\nyqFdEeHA5jawZZ/vIc+BwuqTI/66MmgeNja5EtSeAPxY70txoci3Tl/K8A5OHD/I\\nRDpOWmlTJGY6bRs/lwDu127kEcEjH+a9f8T7luOg7WnBsKQoLhQrcAm6ZfelPajJ\\nb9zwQDj2v/4cLqYfESqnQQ1QD7TLkHkUOvfEVhoLsf2NZvniZZIJ5f4A9EHzz17o\\n4UorreLmgpW2Z0loSczvoxhpoA48ffYKBakcdlISUDcxP3XnyJh0C5+6wCMVqz7/\\n34y2EeM0hbE8+b4ZPFW/Jb9HMPxVVaG20UhA2g5rK1xjju+NWXfs3O0Q2ZhbuAhX\\nR2p/qRvCkf0KvHUY1AGVIHkzlQ0pQlscxUzj21KWtWWfTBxJy1ocypjeVP3bxVKf\\nu+Du8JUiZjOkDqps8pNgpop8kuEEPgIpj/y0lNMpzBJizEl6M/mLYWZionuW2ccW\\npe+1zYa6dE9A2mGBOQv9EaNXz0CuOYV7MuIWvZqg0g1Joz9oWkjD6a/inldSZ4Fh\\nJbU8/kTP43UzkWcPhW3HXnasZu+3db9ACmqcqPNP7rO3uUmIfIe0fSDiWjfzhEwz\\nVNIAZ0ngTazQDSpz35NzZ+pTLCjBc6D1My0l4jZOSbU=\\n=cO9u\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:41:44.151239Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/remove_star\", + \n \"replies_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/replies\", + \n \"submissions_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/submissions\", + \n \"url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240\", + \n \"uuid\": \"9eaca32b-b1b7-40f2-b290-cdb3665df240\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5245'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:41:58 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MTo1OCBHTVQifX0.Dq_jtg.QIkHRFQrSFIxNmv3awdJjiXXT18; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index 770253150..9ce4ec0ec 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -4,126 +4,99 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"liked crockery\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUtcBEADdTdl0L1u8ODCNOBvDG/Fts9EFsZ+ptsLnOsXinvwgz//n1rSs\\nlAK6lmdC4sy6xjprtK9/9wcE2YQOvn8jF42Ngwbb1bII2TluX3i+4vnihBRR6DRE\\nEyEhHmdj6QV9++3byT1NDSXCi4j5RqYzagBKOvAOxyJwdjkUqCHLPxLaZD4B9Lyu\\ns/4pqVb2DlJaqdDp0N4+/AMZwMzSCB3a2ehOpU91vSZ+PNSEHwZTbveoWoH1R1AW\\nmgFkoIAOMrapTat6JWgGCCmtsIcxSA+drtk0ejv/5FeFqn6qnF9CyI74kLOvpWGs\\nuccHULc/1TrFNId/DmsWXIT9hWEE5BJXamQE230AvUuOjsiPQSuDFvD+vOcnhcVB\\nET5QZBKiBDE2WbcoNmq5i1LWw48Q9tZgMuvCtjzXf4QvaQsb9JHsEPPQeRAmBqWm\\nnlYUNfKpPuIB8q9Mg5DTX6nJ2jSr+PsLFQOz4RE9cZS/s516K9wRf92DZiPMxLEv\\ney4SHXyjK60OdclFU8MVg8HySabQV0ffTSSn5S4R4N0Qy0NndrkW5ll1tCKSeB7O\\npzwwaJuLT3VC+rLkEeqajqWQa5SIgwUXmBl3bQkbpbO9hgEBvzdczsbYvAh6WgNY\\n9l3dlqL3HojEvlvjrB38En6qUgmWyJgiLAz6cf91WhmkIlfvdD9kfPJ2lwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SkNSQ05OTDVLUEZCQlZRQ0hNN0ZENFBQWkNS\\nRklUN040WVBOVjdaNUVMQlJLS1lGUFVYQ0NQRFFORFhaUFlZRlJIWjNLUkxKSk9H\\nUkE1R1dEWTdWQ0NPNzRMQ0tBNEtPWVFaVE9ZUT0+iQI/BBMBCgApBQJbzlLXAhsv\\nBQkB4JxpBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQelrz0V6nPsqkcRAA\\nhNUJMDpFe76xHtLgcZwzxvbFmop40VQPJCJXWl5JsE0rEvrXa64qrDzgyj7a0F8v\\n9pk8M9OvNXXFMQEsqtYqbJGdfA3H53uLO4doj4OrQmappqqBSlof3xqRHJrbWVGk\\n20/ZKUrJvbvFlU9OD0lmWbXS60W9UfPRhCe7p++rKftpF/JZCOicD9DvtqyJalVW\\n7UDpektYL5bovLqcYCofNDoBpARPEeN4eXI6ltWj+92HMwvvYOwkLQO9dz+oCtux\\nBcBDiw15mYrvLqESGBUpDxN9B/iR5VKnq/kyUVNNbXdSZadaVtpwJD2DOXnffGd1\\nnVJ/0ok3DZFcb62IjCJTeQMT9E/fGdfk6ncQ3ocnvWf7zih4GqxskHHSVGpGxiXf\\n2tnxY6VOtU/NuOL7wsvWtAre+c3JgvulklbuDxgPLJpmYB9Uu/5C+l8ToTsfm6w8\\nNHMIILqNd1iY55yLDApky68nuKT856eZ4t1j8eh6wZWResWthIN9eox+nLDX39r3\\neeIFQC1NloXsyxWB2W1LYco1wTaVvr1U47omGNNHG7m+X52m5xjros2vPGJswNdo\\nirlrXBBMcSIY/XuPoYij69EpeHcL/7OcH0XKmgHNeE+agGuct3AXSnXEZ2/GrmBH\\nxyaSMA/Z7nRmKtj5lJyHqSoGcydnQ/UlXLPz47HbXbk=\\n=bwVa\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:44:39.563172Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/replies\", + \n \"submissions_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions\", + \n \"url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", + \n \"uuid\": \"812948a6-796f-4d2b-8112-5dd25e09130e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"adherent competition\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUtgBEAC+wZoYqH2/S0O7kZd46DwKEuHbiL1E5FRjZYMEn1ZxdHJAMkpU\\nOl8agjDMwqDTSn3XV5xP0CICChBXytd9VWByyL4BTcNHtg6j9d6XjDe6q/IHP92b\\niBd+IdKAQnzZ+IFhT54mNJzX3rRVMt23RiMxjAhfK9d3c584Fyd7LDbj6DINCg+q\\n7SSYso9Lxhl7F7n30wesqgTyOnFkgGawjiyOzWZeeeHlKmm3Zqhkni22GoP/zGT+\\nQHPATDxHhShAdB9i3+yeT7m3TCwvJ9ReK+GPcBBHVYyxxhrF8XIbAOHODiCU1v2L\\nYSa9nhNtWo+xSYt6VYKzXPnXKJDdrGPROmTQWgpb+5n1WawJx4AMn7ZeNQWKoS3d\\nyx6DmFMyi2xbvtLrXHAMrL2XlhPh/lt5T0KvdqEaBLjau6OYwvax9BkmFtnZJkrW\\nagWoyxEBXOxWfQYYQYLhnG4Sx33rNV/Lv/+Zc06wFWyNFfM/2i1Sw6p0X36Ykjlo\\nRsfib/AM9Y4CNtlz5Vmy3A6635xETp0Bo0244sF7hjxcSRgW3rpNS42ELYdvmKxn\\nW4PvvIMMZJ3Ev0pWWtnUDGYwykm+X7P2/PIiIO8t6DVsqVxX4Wk6V4tnAdE3k0P+\\ngi+WZLhe0U1YQIJPAcOBnjdToghmEZKHjpNIGANRZ42YecfOJxhCWw/sRwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TElaRFhITlVEUFFNVUc1SzdBVVVGSjI3TTc0\\nM0k2UVpRVExUVlY2MzNNQ0NFVzNPN0VMSlQzM1hVM0tZWlZZTkhYSElJUlo0N0RN\\nUUZQWFlXR0gzSE5RRzcyR0w3U1FDQUU3Q0VYQT0+iQI/BBMBCgApBQJbzlLYAhsv\\nBQkB4JxoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsLqvJ5AlM6LfhA/+\\nOj2WZO0++uZumsjizWW+F0gytLxT7JhIcs2u+BGdFCNt0FM1Nkwi6d4+iTTKApPf\\nqFfbXKkUwMy5hnRCZYLp0rTnuJ/lfbCOziZ0oSsQtoPUC7g80nGpRt2LZgGTnLh3\\nT/m9Z80lDHskhUURgfYATQPOdiH02Ml2GJhzAVKd8xfwOZ0lwL/ZwR8OZffMKUs6\\n2MD+8rxzebNF0/Oau4l8g8tLc8OnYYC+EB5mpWP1BzOXK8B6EaKft6jo8eNSHAVl\\nk8BPAdQeY5vOxI6c7eBke7bVhqkU66pV6INfrhQSTms9SzRhCFkZt3PGpqOGAfxA\\nxNQfXNNYo3SOcvZ4l+CAuZ0XKk9fxUB5yvN9ng8WOiuA5et3/FsqF5owYiX0qOWX\\niy8obcCSvK1ye7mweSaIlXxpH5eWMGNvsa6LcF5+jQyc/nsQkauf0kdRxhRrZ/k1\\n2fCUA4m4rw7jFFQDM4vetXAtP0JOI+grvK7PYkAzUZqoFqeUk2tqG0tA3oEFef98\\nHKPMZS7buQyuMFtaylA8qmbLQ4Iu+xrKoakOXsj9+hQW7AjTxNv2kTbIea+TIWC7\\neglLznBmrNU9bvYSE9mH7pIsKESnRatPyOxkND7YKXJGbSbgZvL4RtQFkiVPvE+8\\nlNdFeUoU0B1znKWRUltex6qwo0ulxT93P1XUFoQjbbI=\\n=SYrM\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:44:41.526914Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/remove_star\", + \n \"replies_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/replies\", + \n \"submissions_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/submissions\", + \n \"url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1\", + \n \"uuid\": \"0fe2a494-cda9-4201-9fb5-b4c672568eb1\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5237'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:44:45 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDo0NSBHTVQifX0.Dq_kXQ.xvFvIVdu41OSbLqQ8INC6cxUcyk; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions + uri: http://localhost:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ - , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ - , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ - , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ - , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da/download\", + \n \"filename\": \"1-liked_crockery-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", + \n \"submission_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da\", + \n \"uuid\": \"fd20e9ce-663b-48c8-8cc2-bdaff00f95da\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/f0dcf445-271f-4b7d-9b77-f1701c81b11b/download\", + \n \"filename\": \"2-liked_crockery-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", + \n \"submission_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/f0dcf445-271f-4b7d-9b77-f1701c81b11b\", + \n \"uuid\": \"f0dcf445-271f-4b7d-9b77-f1701c81b11b\"\n }\n ]\n}\n"} headers: - Content-Length: ['1046'] + Content-Length: ['1031'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:44:45 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDo0NSBHTVQifX0.Dq_kXQ.xvFvIVdu41OSbLqQ8INC6cxUcyk; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd + uri: http://localhost:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ - , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ - , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n}\n"} + body: {string: "{\n \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da/download\", + \n \"filename\": \"1-liked_crockery-msg.gpg\", \n \"is_read\": false, \n + \ \"size\": 604, \n \"source_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", + \n \"submission_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da\", + \n \"uuid\": \"fd20e9ce-663b-48c8-8cc2-bdaff00f95da\"\n}\n"} headers: - Content-Length: ['472'] + Content-Length: ['465'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:44:45 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDo0NSBHTVQifX0.Dq_kXQ.xvFvIVdu41OSbLqQ8INC6cxUcyk; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index 3517d926a..f34fff883 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -4,101 +4,73 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"edifying skirl\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUr0BEACvcCyZhtHIISBjknSpJdjfKdqg3BHpVCgMEwCU0X1OgMgeRhCv\\np1SEDuIMYA4j35imZmohVFZMkDJTGzwaSGHpcUeOfzTtmSWBSNdpSuMwg4+xteEL\\nBY6o3gfu+L92Q3b9T2wAhGsHBJ+YODW3ShkWSF7hms1fdCMtm0z2C2GraoQGL91c\\nhr1KAQ/AZ5Sp/2ZV7T6AODT0HxETGM8FwWs2PNFtjAiKKC3wnAZswGPcEnfFj+ds\\nbRBZ1ebdEtYGAJ9q08suvoKLdNkBN0qsv5ws72C4tzSAeYTrXLvGdnABh/MjUxI4\\n6Hp0yYjTGbWHfvXOKtCDpvW48ZJTVumwiaeNWCh45UAnpFUa5LnESD7aUgemWUXh\\nkV2ot0Z8hGdvyW+NqrQkj7LrrHSKGGsbDOtdeIZZvyLoSzGYzxjqFOw2fqFLxJlf\\nOmmd1fOWh3MR2f99Nuh83szU13on4PttbSYZBEZbexMV0InHBxfMT+MvG32LcE1B\\n2WTev1yRDaqIUFFXNppdjv5xhncnO7DPduxw2NTd8oJQdvC2k5PqlJuyRci5q+Ke\\n2qyaSe0e6mWq3LCSq/CDWWN6LSvmp4Wn7wGwe+ueT8H0d4bnyQARkpmzNimZVBNX\\nks5cuZNY3kYxOS77Bk8tw913LJIoIzFRM2YuCmPRkJNJJ3WO3pAWpeQigwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RURPSDNKNjcyVFpKNVlCN1VYVElLRDNKUFRG\\nSUJHNUgzSkdLSEsyM1o2SEJHTTVITFpPSzJIUldVMlAzTlBITVBJVEQ3Szc0SUhH\\nNkRSUzNIVktTTUVONVAyQ0UzRVRWT1c3Rko3UT0+iQI/BBMBCgApBQJbzlK9Ahsv\\nBQkB4JyDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQZAGdNw3GjJ0k8BAA\\nrCtl1OLHdjkYccJjuxmVXqYHLWANnkOgYdbT4sxx8NxnQwIGYnEkHs9NrPg9lstX\\n/FaVyfdq0dSDVT9GsJlpd6puDYBq+pQFCv1IT5IF7ZVhsA3XjKardkd4imzgZ1T0\\nzMPbCBOjrkBVBSKqadYUgGRemQagJs6xvmwkpRFf4iUqp/KuJQ7Fv3+jeHJSi+TS\\n5uRjg01rGuNT/6kGBrc1tD6aAKNhZsi96r0vlidvqMQ8GLUidyY+wDSB8UeqSV1+\\ntXiMlGSe9jvUrMPSORsqDqw+noBt3Z/Df7AkreIpr0qaWtSYJmxx0pRtJ8rYxozY\\npqzpxnspZC7bd+w4PnjZ+4Abh1EgrAMbbKIT2FeED/4ODxFgUQ+/6hQC4ITyaukb\\nJygNpdLIQleCezNWMpYqW5lIQwLaSf+/F8ehHwd/KcceozcHXzexojyGZ71BPGfv\\nDECEB7q3m758sy1F1OEejHCNb7VtXdhANQftYMwtOIvWpaQDJoCuqisHVhwTvZmM\\n0/dks45ha6k5TmqST8FW3bye98FVO5upFaFH9pr0pBPfRbNztpkjfU+u071gPDuQ\\ntV1TpRaLYnz8mc0sFEzEFtz3fVeDpgEAPgBdgd6vGYr7Q9L4FjRPMwzYgxd+71zz\\ndsgG2Ilor0elEnh4eofJ3GvQVeDpxEXRQByOG07q6c8=\\n=Si7y\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:44:14.624438Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/remove_star\", + \n \"replies_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/replies\", + \n \"submissions_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions\", + \n \"url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664\", + \n \"uuid\": \"26fe81f9-4d35-4999-9fd6-70963e9fd664\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"fair dependence\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUr8BEADKa2dGTB4HWmaJ1GW38NSsG5gBnL5ff/bw+Ck/o3KFCWnSBhA6\\nLSbsAQRmjJyy3XM/MRDmnE+gdG6h0TerOSej6dEJtjDptmD2aO35qrp1qStbfo8k\\n6jA43syX0b87atMKCYvMO+LZPOTteFjlae4Jayg0ZEsuyST2Gjae+VuXF7TMoPf0\\nVdz+ZVhbJmulorN6sScRlCyxNW3uPR8e+iijQn2vJOKDP5HWny2JbpxEWbz5ltnN\\nM9zWkvbdJz4+YdUou0PKftM7QHtJlY5mooN96OqGxGUoN3DhBjWsJQKxLA6dRG2c\\nqu4AZ/g/dirsc8+PCBM7581ngsnJr6hh4l6n67rRPgl4kFttbAVrUPn1EyPbbV2u\\nKD6D3nqEm2F07+5R20+/F3gezLNl4xducv0zVjS+0lxXTKnnS1a++iqG4HfM8gbV\\nWp9OUxlcFoGBjKHknEYUYxvi510SvisuZzIgLy2XzQAofIk1JyyqI6HeX4S6qLW9\\nSEH/GsJmd+W+AP5zDCaUOrxdATqcIXKvfbvPECjbZsgp66p5pDf4aWHhQrDw2Vbr\\nag/RngRS3PdHomVQTE0iI7dqY5zmXAAkDYvsobh+0fSJ3xAofF9UXEFxICnbIit3\\ngpK824P/qTzdiY8s0iNkSZOwkQm5IAKllh3A/1gSsK0kDKY65wGwvFUFeQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U1JFTlo3T1U1NVQzSFFaQVpWTTJRSklCUlBG\\nVU1XNUdBUDNVUzNVMlFRREdQNVpTS0lTV1NMQVlVTzNVUFpXT0NYWTdRREJFUDdH\\nM1NDVUNSQVJVSENQREtFWlQ2R0pXVlBTWFFRUT0+iQI/BBMBCgApBQJbzlK/Ahsv\\nBQkB4JyBBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ5/jlXeWpiJjfVA/+\\nO5ve6MyFPWT8DPb7UumsbP5iypQ2T4AwpyLHwWdV1Kcpxo6zStLjhAqX+sjivRG+\\nCvHOuduFBliKS47XoPfPdaZqKIKCz3w1Zmc3apBPfsNyvIZotuphT/3I7KJlD7nq\\noBQ77iybOiEZ/J/LhVuEb73n2EiKU5YmmfaHbG1M0NwXgdDPr3Frw1E4Hl/1iINF\\nGqrTGr9lnFxUSnyPvyeri4MQRJq2UH4RnVecam6PstqH79n5DHP2+Xw1sDzdszja\\nehQaMS2xNLa/U0KEYF8932ti2eqWzPKGaKe6aTQH0NPk89oBCeVOLQNnvsZlnkBp\\npWQRrSlBEOYThQMCs+2+Zn4pVv40wgccpfyepZVOf7l7JxyBm/V3MS8orbpVZ2Z2\\nmglEtNNfGnTdEZ2q7NrEMp27nze7BfP0TE5VZJ75ADZQubGhAWOEuXBiZlnqN1CE\\nDfg66Au38EhUJ95nwSoQHv9P+ipn2hvt/oAu2asV7zJUKIZcQJeMXOq2HoQ7vT8S\\nGXL/I78EIbwUJzZ0CtYuqRdmVPkJ6A7Ah1tFyvU8sDyfOuBrN8CSHyESaH9vTsFT\\nT6a24wHNGJmkEcDeypk5osa0/zmy14zVv4BbgLwBqSg/Fzzl0u14pzAO64KVaSWr\\neHt/yxwIukpnAp/REuPpLZ56AZLRIWBeOwDsSrQQOxg=\\n=g/yZ\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:44:16.419089Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/replies\", + \n \"submissions_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/submissions\", + \n \"url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b\", + \n \"uuid\": \"7fc4c7ed-444d-4492-91e3-f2260cb5239b\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5232'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:44:21 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDoyMCBHTVQifX0.Dq_kRQ.odwxnimAyJkaGlMzCFh2lQfcNHc; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions + uri: http://localhost:8081/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd/download\"\ - , \n \"filename\": \"1-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\ - , \n \"uuid\": \"cd279501-8858-4695-bf58-6c5c3bf7d5bd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a/download\"\ - , \n \"filename\": \"2-humanistic_recognition-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"submission_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions/11317ba5-cb99-4374-a243-694efb5ce74a\"\ - , \n \"uuid\": \"11317ba5-cb99-4374-a243-694efb5ce74a\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/0f939198-de40-4689-bacd-983c1c678bbd/download\", + \n \"filename\": \"1-edifying_skirl-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664\", + \n \"submission_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/0f939198-de40-4689-bacd-983c1c678bbd\", + \n \"uuid\": \"0f939198-de40-4689-bacd-983c1c678bbd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/9eb3e575-eec2-40b0-8a78-02317d60dce8/download\", + \n \"filename\": \"2-edifying_skirl-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664\", + \n \"submission_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/9eb3e575-eec2-40b0-8a78-02317d60dce8\", + \n \"uuid\": \"9eb3e575-eec2-40b0-8a78-02317d60dce8\"\n }\n ]\n}\n"} headers: - Content-Length: ['1046'] + Content-Length: ['1031'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:44:21 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDoyMSBHTVQifX0.Dq_kRQ.hifQv31Sq4zxpiDgIxXxB1_hDSU; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index f9f75b5e0..23311c7a6 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -4,93 +4,66 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"listed discharge\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUw4BEADXCkiULPPQSCYHTT87jL87VI2PY5GKeJYt5dErdbmLHQcp+Uv9\\nf9m41YQyw7t5RuQrXabrzlJunx2msGQiqoyorMsZEYKj6wGwcsohGnN6XTo3i19X\\nQGEkt3JHOrH+0wkO63kWstmSEb03bPFcVRZOwJW2FvixEB5kxeV/7/eFnNE2TZeG\\nfV5pOoJXe8yNJkw87Lv5a+nxDx3KZC48Y1jrQNoUwE8pv5bTLtpCJmIB9T/tQhL8\\ntnwV0M+FPzOhUAtRBNvoOcVXs4KlIZF+Gamqae4J1I8/hj9dd5qCBC6JMVQTiFJA\\n+dktwA6LDptLnyjTIRLrZb5G1aV8HEuDnimUIeC+Kxek/O3NUtmnk/edsMr5J0Vi\\nuGph/L1e6BgJl7nlCKDyOr0a3pCdpzboHglc//PLpmRUDwXr17v6UnizcYwlVFqg\\n+wbGm/mh/abABty/Skwf0E0nUQT67D2Px6CO+I7UbyqqQS4X9ellmy+1OFSvHgJN\\nlfa5MCH8+Ct/Hp+nVgoc8TibQClztrKFPS6hkwgjNUsJOKHPAzfKaRPNp9SPCdEx\\nH5O7H4FrogYqRyqW7xiSdKBzNunH1e+Xk4hu001DgtnjKRkZhJgOJ3dwWMrfH6v0\\nsqcKDLWfOeKRf5TbSz1K2er6/KSqH3v5tXlykqBC9kaRFUB7JTEhShK1GQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VkxJQllPT0JVTDVWVERBSkFWWkJMSjYyQjZI\\nMlY1UTRVTUM1NUI2WFlUSVNSM0pEWlVIUFRYWFo1UFVKRzdWSFBQVFZBRERWS0JO\\nTEtPTU1CVVNMWDZUTlJQTUw2SVk1M0NKN1BXQT0+iQI/BBMBCgApBQJbzlMOAhsv\\nBQkB4JwyBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQY4c40rWx3BwJjg//\\nUj1F65v29lEgbnUL5wUfKTAP1QSe8IX77E+tgdZcWxS+hE9V5Of3cm1xe6ykQGZH\\n4+NK5fd4bGM6pEw4kNTFLiqs7gBM3Ckm9LzTkoC621zNkzbbZ0GpVpa64N3JFLM8\\nQgCakaI7rkM1oPKduvSbGhE10Mh/Ez3fuByej/PUutDqD9EKg3kbFzWaWVkEwJDl\\n4mM2tABAVdLLJIVsMonmZAzlmatzlJXHB1RYbhtb8Kn/6bVivOcPen3f2gVy4PiO\\ns6aVUFYTI2VqgNfpMGcBhlDoRGFv2TH2/4R7sDwsKfJ5eTum9CvvXXM6Y39EEv9K\\nFNJBI2afijtH+CMUpBCw/CrsxD8OSA/YIhu1XjTa3o60Q19V4duzRJyPSq64h1ly\\nH4/FMtH8mMqHpoRFuJRt8fqJ0xjl3OOQBpstqrgfNoRdeALeFR4CxzPyJEiX1frI\\nNfCoa3iYlOqCtkriiLOqZUs+iRT2SsnDu2DnwP9L0eEmCfn7xmRAUWj6o+cLRTAB\\nnyY91NhyGYEsL89YgAGPo3dThdOgWHyoZ0NigrrxBDZP582YdAgAjdvTIZoXUhLK\\nSNpQCSmizL/7s/errNGu+bx5dPt0RkjEHVNbTcatz8rdbqTMVfMWYcx/n3o2SMi4\\nFAYEMfb3aoUIlh32gVDcnWctPicat2NYmF846+cWKS4=\\n=khYV\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:45:35.806763Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/replies\", + \n \"submissions_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/submissions\", + \n \"url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c\", + \n \"uuid\": \"e1f8baab-2a97-4590-8295-06f08d43731c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"green melancholy\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUxEBEAC3j9Jp7NlagBl+F3MQzrVWNHr4FULlu56E1zOPyz2lHG04JdoC\\n0T2tDTc5yDGb2uoCXfmf4YdIdTufqeAQLshPLtASwI/Ut3snztMYmPM1R7NFai+L\\n9eZCG68/wWePUuSbxx4hT1gfuUBwVdOUx/FMz6IdbLH8sKwbYH/WPozJQwnpc3Jt\\ntRWAut63QjC7/qgAdq4xZCN4p/kUEG9cpK3l2FD8VOVKCjY2nsMh/5tYGSMnll8Y\\nKX2ljSn6r2Jf8oe++3BX5OKqXMSA1yA7e3pNxSOFakrcgke3Vgc3GKwp1YmmPozf\\nrVy2TanHVOWrWAqF7sTtWV3XkJikJ+mgUOIZCOza6pDXPG4QWf5aKE/WIkI3ubFv\\nLDJEWj44r6bgbRNRGqSmolQE0GYvCGN+KzxhmIKqfKogWJ3/EIpFBBvNLnYERP9z\\nwE6n/WuQQ+hS0JlkveRhSc/UbCDt5vfPuyxnTvDsY/VZNW7VtDeGBFpzU5dU/GVF\\n7TFZJhMx4xTXxenQpN4KIC/tmI2aqq8wFVc8lBhqpHrDVkFdTaNM/Di3JreDjQov\\nTmzGpE4O4aPHmwBPTW6/0E0TW0lCVrzMv2mNbizyeZrO2l9laURhjhjfEcg9d3SF\\ngd7i3d6qbkdKoCftZ0VZjwkuDPOMIoFWekv9pSg16ywokd+Ty4BOO5/PYQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TlBIWUlNSEFQVERDNEdFNFBCVTdKS1dSV0ZP\\nWVk3SERFSDJVNEk2MkpEQjJZSUxEWDdNNko3WDM0UlVXSkpUUENTTjI3UjRGSTNZ\\nWkwzNUJLSzc1RUNVNjUyTVc1NzNGWkVPVkJNST0+iQI/BBMBCgApBQJbzlMRAhsv\\nBQkB4JwvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQklSQKhNOKvsW2A//\\ndHcw7rTMhTlV/LUGoVyoXCdKuniRu/LMqU2RP5GCVOX9C2xGb47eICJMNh9LgjP+\\nwFrfvZWA//n2qrPoy/fW7lm3M7CjEWUGABoi54/iFWRSpUZFSkRuFJYq0BAXG28Q\\nfigBbnCgxw+ImuH0OfYVz2RBqlRyUh82htzS/Gu5QOhNaSUGz6bd4fZUqCrHJcrw\\nnlW5INdT4CDFUMkNHsn1G8DSKl+xf5eHv4flInYEpE/jkxKgH7k8692aVZwxHjEn\\n1mB9IEpPktz8L1GFIZQbX28k/fpk+647w5zdF721sMpaFXD8ju4lBSw0gUbNJk/c\\nrfZUFb9BuQYLgx6YRWrwTI5ev2PwNLhTMhwvJvV+SJ+TGUzlMDXup2sVFikvAHfK\\nvyselV1vV6FpdimaGQ8d2qG4FDDGJ+BB7hc26H2rRLmzmi1S6gWcmFXI4DJ038I8\\nnVlvsUtD2Iyqk5ObboGgGXxVgiIFDvN1FoX1RHk3p/xd1dXBm6Gg9CPbHFSdQ6Du\\n40FlHPBjthd2m6brFji1JwBi/KusSDuJqDzxgPULL6EGxwdCCNWWOqD+iWYSKxpl\\n/oJCd77ph+bBrfNwOMiZ9kIdzOHFmQjnomHGMX5xVJLjYx+zvXWZpVJ/Mk2KuJ/L\\n+jiwGWkUP1qgZpWSX5CrU5I2GaUqL+TKVApKhA7LgKk=\\n=5blK\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:45:38.020061Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/remove_star\", + \n \"replies_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/replies\", + \n \"submissions_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/submissions\", + \n \"url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10\", + \n \"uuid\": \"4aa5efbc-7793-46bb-b5f5-85ab66f40b10\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5235'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:46:22 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NjoyMSBHTVQifX0.Dq_kvg.nj6Bk6SAiKWrtzV-KKT3ieUHxH4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources/rofl-missing/submissions response: - body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested\ - \ URL was not found on the server. If you entered the URL manually please\ - \ check your spelling and try again.\"\n}\n"} + body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested + URL was not found on the server. If you entered the URL manually please check + your spelling and try again.\"\n}\n"} headers: Content-Length: ['166'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 22:46:22 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NjoyMiBHTVQifX0.Dq_kvg.O3TdpgxMzRQ74hSdEl29o7bHWW4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 404, message: NOT FOUND} version: 1 diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index da3cab061..b8e69db99 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -4,71 +4,43 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"punctual thermocouple\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVq4BEADUx70hRgVWDI3N7NzUu2ufh4TEUOFpjbUQeS9tANimRVRYixn5\\n1gIv2skkBMIiEycGaOx6lkTvG/qDmNJfQ5kUdl4JcC9NBB+WhEmHiYu5+Ez1FieI\\nZz4ERx9N2AV3ADAcXAAyMKR78LhjQAp/bvvaj3zDhIpSp5eFtdzjue0Q2jsWnSEK\\n+elbWnfVudfze9J2ZrKDH0OnASKvTpCAK8Wan160zyI37ydCFd3qQryC0GRDBslE\\nQN1CbPt6TlHK9mQSHTtX92eyh0AoqYjA7h/pvlX0XXnDSsdw3XFOMjoqjZwBS+T8\\ns5DWrYUwZU4jLj6InXIqWrtvhvf542PiROz/f4FbPTooDuLRGLLCkyZPL6f9liZt\\njGjRtWA+GAabVcFVbtViSJ610/Sq3Dl/cvPSmMdjseh8TWbIexRtQ8WdP2dVjfjF\\n77LUIyBACmRJQMXamF74f+xj3LM7mrBF4smeHjzj+toxA+s8oyK3B7qNxmcY9APl\\nhm+5lSzK1oA+LbBJzEixTFguTqbTP/UBoqW568raqqDTDyYr5YDCGNqeqstZdzJp\\nVjDYRS083UggYP40zkXeP8xSla/g11nLSHQMGIauCivnDOjCoa3oxPcT68TV2ypd\\nvw3GUHa6113pg1WFSWQCn4aRaAoTQl4qNh4ZCChGaWLCS6GXu8vfFcJ9YwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8MkpGVVNPRk1PSkhORUVWRVVLNUY1WFdPR1g1\\nVVhRREhRSlNLR05RTkJZT1dQVFVQUFlNUFM3TjNNNUkzN0hMRFU1VU9PNkVJT0c2\\nWEdJRkZVQVpUNkwzNUdURUpSSjVNWktFVFI2UT0+iQI/BBMBCgApBQJbzlauAhsv\\nBQkB4JiSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQV6amEXNOzlKFyA/+\\nOL+kRHKti3V5ytCxk9Jv0qFrH9QtTajD3CswZg8TRqQmr50YWiKZXP91Zo6MyMA8\\nki0IVtVuHc+HdCqUJV5xKrXc7V7lRmiOH39hFG3wvI0stgJ6/4BzVNPpAf2UoSyR\\nY9u2L3C3t15ED/GOPv2JH+P7Q37Bi9n0Fk0Ck82rbiN85KJl92L6zOs75leFbD+0\\nL6Ja1Q2SpHNrSF2m94+0GjyNbHLlY091d0xo6UL16Ck5Ycannr+yY6H8GNyedCII\\nDuqrpPiNG/XdOmo5tyt/7hD2VpgBxsDD8dtj1tuF9a4nE9FTH+5hB7rPgIOAFt6C\\nAqImlxJs2AdWSMsJZ5YEFGbTVfEHx5paAY10hqCxsBBekwfsu560gcQNirIboVEp\\n5+DIPA91uGL2R5ZIiVaPchqLQfPc+gce+/f3ymf25co+DLuGX06PSxxABsgb+xe5\\n3kV2An0C0PK14oFZpplJTQTQ7R/PqOygtYbk0yCfMqfkNjjKO+3TaWOAPZ0h9EXG\\nKnZn21ADBmDQ2R3fPMK5hg7QQOPdUlRkN5oJXk7HS+Yu2dztarflHJN1jlq0weoq\\n/97na/yr4XjXryhDks2CBVOk9VvukzBjMbdk1MITU7hnTPtmL8Ns3GRvvUJEOGff\\nOoI3qsD+XlcaAvuHcuVpSoa5yOZHD3o9Iy72x/EZq6g=\\n=VVjH\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:01:02.983957Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/remove_star\", + \n \"replies_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/replies\", + \n \"submissions_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/submissions\", + \n \"url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4\", + \n \"uuid\": \"5afc9480-7d30-42b1-9463-4990a940b5d4\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"cowled spaghettini\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVrABEADyyEAEpHHQ/QyHugIEpiDKTa+0bYE6BVNjz19t79qN1zHZoyWY\\nXtRJ4CFa6/VivNW+SAhaghIz5pu++gPCzafWeaurTDK+SppGy6spA1NE6t0minZ8\\nddMCdStcaoRWBl1sHTOCd1OycaAQU8i6URkD/ofVSmgPQvXQDEBD9l4S1EwolVbP\\n7LNfQfEhb0L32pnJWwtulu1cP0Pjz0J00loPsP+B7bHQB9eBCa6Z41pClb4rj8fn\\ndu5g5oIXCxNS3PYT2KCBm6gCoQI/BqbJP+RsbumKi04ApHt+ShzNvlQFO4SEymW0\\nWeIB/KGuyVvUwv0zZnIM7ib7jcA0f+o4MSTYe0h+rhmJGKEoNEhXpRTq3xwdffdr\\nVHmmUCdtmIVNd99CBOAUw/3mupsorCZVOJ/YXdje6jFygNv6ATxLuHYGL2bBVazU\\nNIIkRyLek6Trs4WX0ALeun04KXDA2rBcE/Xjo7/w0OFMhQnXVgUhBTqdIcEuL1Q+\\nGUoecbQJ7O9aSur+Dw59D7yYrw+T5a1YRWWxO7mBidvMDR7oxvvMUFpUbuWBQlnX\\nVmB/QjcB7KwgpVjy0z10ebgYHOCWJ9AN55cD2UjPl95pKvWhLFq1Fcdj3HIFhLAK\\nnJO6ZN+iNKikETBI8sS9gFZlH5aNWm9vYn/MQmo+Vly93+2kgtcXaZBNHQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QjRZVU5WUVZWN1lMRU1GTVVIRFIzV1lOQ1ZZ\\nRkRQRURTM0g0M1RCQkZRTks2WkFHV01HVEYyMlFGT1lYWlhEU0JVM1cyRFpYWkNY\\nN0tEMktZVExPUUNZUzJMTUdFQlYzRVIzT0E1QT0+iQI/BBMBCgApBQJbzlawAhsv\\nBQkB4JiQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQaG1XFldw7iX2Kg/6\\nAoKq5gXEt+kb9koHs6TG40wGSKYfTzwxDta6Nhzy/MUwjUZ3LaO21kP6Ytxz1K7n\\n7nlZeucHQslps1rj9ZTwZDsPSIXYf4GT8Y1XMHJ8EqFKuE7IlvbCRp5GOBe7aGMe\\nw4gfbKN4NZVXeQT3xxDdFnn0PniJ2e3H6ePhCGSEJsInMxIEbbQ9+j+avFhuI5g/\\nPwVi+DDdUirgP/3cVlB1BeoK6/4EqRkYS/JHx34RqKmX1PdqQWRT/HWqpY6I0iiV\\n3JyZQo1lFPTfTLuUvyw6dnggmAjceUdXW2r+4J0LKB2oNJaRc5KQB1v2T2RQCfp5\\nzozo7tCKoyIq1QWiyvsycdAvhmV6JV+b/XCC5CR7ZH/ksatnMgAUbhS1665o4ncC\\nDlr8WuUX+raPChMzUZP95xL3zc/bbRZMwj5eU7NI2EG9IJ89Nmgcr5vhbqu+oQls\\n/vQ/kYuMH8HBOr6+0A1FQuFHQxd16rMUjKokEKvJQ9NLl9EswBJvVcofjMaEbVec\\ng19VYPrSTzdOu/QW3ZBJcfTlvAzuyLEOsNPNgjL/9v/QfUBQzSUXN8Ne8RbElgN5\\neaoVARTQC9WlXWgAM4uxd9BGBp4YYJ6zCydN9f/IFIa/znFPObr33DbDOhrgL1w7\\nYmH5l8Mxpdf5Ny03Ti60IVcvYDz79lGz3K8PwPPUYYg=\\n=C3zc\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T23:01:05.894221Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/remove_star\", + \n \"replies_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/replies\", + \n \"submissions_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/submissions\", + \n \"url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816\", + \n \"uuid\": \"5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816\"\n }\n ]\n}\n"} headers: Content-Length: ['5242'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 23:01:54 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMTo1NCBHTVQifX0.Dq_oYg.QlTn_AmPmf04PhAy5RtuDzbd4q4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: '{"reply": "-----BEGIN PGP MESSAGE-----\n\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\n=686S\n-----END @@ -76,21 +48,22 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['926'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies + uri: http://localhost:8081/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/replies response: body: {string: "{\n \"message\": \"Your reply has been stored\"\n}\n"} headers: Content-Length: ['46'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:11 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6Xuw.K-G3xjRZm0x94j9n8kSSCTX2JeA; + Date: ['Mon, 22 Oct 2018 23:01:54 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMTo1NCBHTVQifX0.Dq_oYg.QlTn_AmPmf04PhAy5RtuDzbd4q4; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 201, message: CREATED} version: 1 diff --git a/data/test-setup.yml b/data/test-setup.yml index 733934251..da771c36f 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,25 +1,25 @@ interactions: - request: - body: '{"one_time_code": "393600", "username": "journalist", "passphrase": "correct + body: '{"one_time_code": "378795", "username": "journalist", "passphrase": "correct horse battery staple profanity oil chewy"}' headers: Accept: ['*/*'] Accept-Encoding: ['gzip, deflate'] Connection: [keep-alive] Content-Length: ['119'] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: POST uri: http://localhost:8081/api/v1/token response: - body: {string: "{\n \"expiration\": \"2018-08-22T14:50:25.227570Z\", \n \"token\"\ - : \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTQyNSwiaWF0IjoxNTM0OTIwNjI1fQ.eyJpZCI6MX0.E_kW0WVV8WctTdccjI29xM3MWqFEyQEC-aRXREkxWUc\"\ - \n}\n"} + body: {string: "{\n \"expiration\": \"2018-10-23T06:41:58.606548Z\", \n \"token\": + \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720\"\n}\n"} headers: Content-Length: ['188'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:50:25 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo1MDoyNCBHTVQifX0.Dl6ZMQ.DBxiUGUc0tZq3pu_2_KVaCXRug8; + Date: ['Mon, 22 Oct 2018 22:41:58 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MTo1OCBHTVQifX0.Dq_jtg.QIkHRFQrSFIxNmv3awdJjiXXT18; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index d6eddc7ef..613ab53cb 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -4,185 +4,131 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"simplified countenance\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkYBEADFQFGsBxfF+U9fMbLGQ0CPT5zu0N4llekm/YitLdMcrx1ZYTM8\\ngTZVbwR0Wn4TEPNlDA6NDNQqL0aYFFEurZ2d9hMVqHLeDDjZ1a86esZYqM8ezRgA\\nBdKLbtYv3goaT4xcZ382LsLWpTC77wHd6woxdQQLbf32i5BFdJ2LzT/gGLEXI7qg\\npiWElSROUhXeWLWGz/OF2XMsDKEzQ8EePq9ZK/LYeTvs4Zi628Cu55yDGaMxY3e0\\n01qiZXD2jWZnVwVmvHX2ZM0ajb/uLPOHSiDYGF/a4ZFCC4GFgGaPuB/EhLS1Rz9c\\ngHlaZ/fFjUxy8s01/Imdg/pvC1yL4TRu2Hw+JDyxbyGxrnZ+GWe76+77Ts5wlQHC\\nUlJ0rcZy8z2dwxgl/qm5sYgPjQjKidiZyEJvTRA6itQ09vFACt8i79ZzrG45NgCn\\nQFhzBHmX/YDXhPMvFhJ74jltmY7EGbI8RuEoePrBxIkTS+DiCakLhA3XRfEm5p/r\\nd8Ujpq6v04WzErDAPzRm9TQz595t8MBuMoKCOAy6HK7YbtLkQWGHm/P0SHOMO4o6\\nyoku3pLBqO0bsooWbt1t9SWmlEpnQYxEgn9MsygDmAKNe9QyRqZ6IXXgpSt82PdH\\nmt7gbvla/HAYJAXj0iHocsfY5Hg36MCN4tD2C3I8M6NeiQLfpgU5oe2vTwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VENXUFpPNVVPSEU0UE1TUVdZT1RIUUFFUklN\\nSDNWTU9NS1hQQ1czUDVRTUE3NldEMkNNSVBMWExFUUdBSTZNWVFQWkVXTVUzT1Ra\\nNTYzWkJVSjdLN0lZS1FBN0lKWkdURTQyV0xNQT0+iQI/BBMBCgApBQJbzlJGAhsv\\nBQkB4Jz6BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQc94RIYU+9eZ9Tw/+\\nOzlH5RSs31JSbjgWaTOrvFUz5kbiIW2qRgUjzLtXhVU79im1osyPb058rtethydy\\nSfFQ1mfhVhdLqH+bQiyYuIxzgX9Kft4OgdXxWjFCcenMwPlqJhcPQDC0aQsIQOfp\\nW/6QGm3cq0Vh/StOwlhfrjl7uPaqNwxQsV2VXYMSXsZLyFUgnrr7clDpROBAcSaH\\nJRGUItvLMMFhR187L5froGctrA5h7KbDyShCF8RQa4nh/h4QbWxdX9bkufjOV7i8\\nGpCivtNohgdJ0UjnhhZmf0AlD/dBFH1bfjTQPD0rl48xDGEDRoSNYgbAx6pibr+K\\nXKj/DQc92PTFJz5DzRzmQbA/WopsSr1KWyZNpaQPuB3Y7qK4KudqC0Y8VTy3Fwdq\\nqO+kSB0R0o6LeprcDevEd/tB5iyHcXaYN90is7zijzJ8FPWtsOmTAtmSnDU8RLq2\\nc9MGNcXCC+sDFSaAEKUO0kodyde/KAZznBsUJ2bCe9vd6ulDBTGNPHhmNPtNEOpe\\nqkDa+X7Ul2X7HUrsBKAqjeGAhKIimRiJp2ApaxpTTjVLfIu2AYLPPeyh6Iu6MIFW\\nduMxWMxYuH7e7EOicGZXjKw/J2DJxr3Gk2Tqc6uGoNz/ofrOmW4R6VIOVW+gMMJE\\ngckgURKb5Y3/0vsHwbzCosytSf8JRalW9xWTY7bOMmY=\\n=NEsZ\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:16.040774Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/replies\", + \n \"submissions_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/submissions\", + \n \"url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c\", + \n \"uuid\": \"d9235b36-b3d4-49f1-b5df-dea96179342c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"melodic ignition\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkkBEAD3w4vil9pCDsExhuofFmRu5332eIHLSZl5HONFzNOtHOlh9U5H\\nfxpLCLL0cXR7bAnsbQaC7ctEAQs0DCD4IdetOaqDmOFRvWktimWwJdHjlwp3zu1l\\nssFvbh9DFs3XEcKtf0CS7Gr1cfRh5j0D3r9zgP0/1EsBMDv8kGJPAuav8t9qvNPT\\ngH9avjxbOXzqciGBjKnhjtcwSlCa6TPVNqxqdnU1QS5U1mPGejmeE63n0Wa8kcZZ\\nN2UgoR3JK6Izj/OQTGumLD+uYpdJlBlNdkQ3YJHGVLe6ZQ0ZvYrWtwrjPQ3nrFHe\\nHnbhqIF4h+GYr8UmFOGvkbSgm4cUOPuk+ByDSqvW8dS5Dw9/owuJyrN/anVoi29K\\nMDlRCkFeo0f5EUTpH193PVfTfbuzVVcjmqkxU8c573yImoShl6NztW4tfDwK1Zig\\nuYzl8HW8HsyPFEh+bfoGF2Fb3x9kV623tn0EOaM6Bdwmh5hRA7XmjSJASqb6vCgD\\n7m3tPgp4KqxpJvNvTtlQEJtZbX3T21Q17pc4BswEnspwHLEgsuX5PxIJrnIgSQb6\\nDfwpsYQlqCLLyeM2AmrrbYj45K1CRxwgZzMlmqVd14JkaOiJCbDX8+P39KloNjdM\\nniLd1IEloOPyEkn2e4gGRLJEHceXkHSbZeawbmhsJs6X74eeq2EHD2++VQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0RST1RMU0lQR1BPQUtaVE80WlUyS0FGNFNI\\nSUg2UlNZU1ZNQURYWkcyR0NGM1JZTjRDWjNGV1I2VTVEU1RaTkE2U0xGUjYyRTJB\\nRkJBSEpZVk5YSU9ER00yQ1haV0daTkxDT0RMUT0+iQI/BBMBCgApBQJbzlJJAhsv\\nBQkB4Jz3BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+nVriNq1LtN+nw/+\\nPxs+S/US+0p2YoyQS0pTbxyMDTifv1Y9I/BT9XSqeXFQyHW5ZVBXP+GI3LWladep\\nzxQqzUdwbfuLOwKloXDDpWMWT96TtF54zzyUK/RgJKVtLJQakSNdst5559PdZHKZ\\nm+q+xSQ8ZIRVwXVIs/lqYG77Jo3Hp8f1ox1f/uTV+5stW7N/8a82QghSmn9LOaly\\nh+vXfYsl0tb25OcUPR6oDgdsKGecUjJyt1k9vxvJr/Fn6EJJ5RHtYsjifYzdnly8\\nF+21lC4Ol7CzbxdD8K9Hcf21SnsYGF3PRW5/9pOUuIQqgasUur6KFr51cKsN0nzv\\nDp9sDntVM5SHO6e/wNTHwOA3f1/2+/YFGI5sm64v3P8laZSqkpnY88Iq9RkFSCqo\\nrExHVKhRLt/154M+/LP6moqSLzsZVAfIZ/ZvdVRkZz0Wn+Q7EOWx3woY5rfWEvEM\\nvi0NTctMWgi+iwZAED9r+hN0rDFehK/5Fvgw48VQu1oB3O/XZ2xYe1oFOprPDF0C\\nv7j6l0vKg5YNa+u11nUB68eF45+WNX+GiTJqY2oh2DiFK/EZNvKh4SEtddGKBtDZ\\nZBZUaHBMuRJMa9k6ZwTpOOJPhstl0Y2lyh9H4xuIYA03dpbDzCigpFyo9FA2yn/I\\nBofS5ogdjN4soc/c0x2tUtR5LZr4FuW0E36CT5d49E4=\\n=Nhlo\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:18.753919Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/remove_star\", + \n \"replies_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/replies\", + \n \"submissions_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/submissions\", + \n \"url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201\", + \n \"uuid\": \"34f31db0-e3f4-4371-b42a-1fa6105c8201\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5241'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMSBHTVQifX0.Dl6XvA.DLtNn0WBbVnVXddF7Ud4gGnaAOM; + Date: ['Mon, 22 Oct 2018 22:42:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzA.r0s0ntQL8OomTTpNXi9qXa1YpzA; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star + uri: http://localhost:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star response: body: {string: "{\n \"message\": \"Star added\"\n}\n"} headers: Content-Length: ['30'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMiBHTVQifX0.Dl6XvA.UUCn7xPk5-T3OG_cdfd020ktn2M; + Date: ['Mon, 22 Oct 2018 22:42:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzA.r0s0ntQL8OomTTpNXi9qXa1YpzA; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 201, message: CREATED} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star + uri: http://localhost:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star response: body: {string: "{\n \"message\": \"Star removed\"\n}\n"} headers: Content-Length: ['32'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMiBHTVQifX0.Dl6XvA.UUCn7xPk5-T3OG_cdfd020ktn2M; + Date: ['Mon, 22 Oct 2018 22:42:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzA.r0s0ntQL8OomTTpNXi9qXa1YpzA; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzNDk0OTA0OSwiaWF0IjoxNTM0OTIwMjQ5fQ.eyJpZCI6MX0.xNU4HC10fDaXwOFGIFxxuyft8sSDyNowOqkL4rnb28g] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] - User-Agent: [python-requests/2.19.1] + User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/add_star\"\ - , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"humanistic\ - \ recognition\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFt9Bh0BEADBtzFogrYPtI+Kgpt/fbWd1Q28WcjH5ForWnjSghD/FediQudJ\\\ - nzH1CKB0M1cF00Uvaq/TqsQxM0CG26OSDbbIhng4O3p4u186KqSL1GxXLvhaidLb+\\nrl449FCvJR1twjTj/tqWXrxIZG4QW7T2LU5d4pQxtVXy3PEloQsXYEhuM6pFCmKU\\\ - nri/lLsWEplalFy3v+BBd1vVbM2oVhfBja51l7V/1XEAimNN3uBfOUOOl2tKTC01Y\\nsqG9i3NaU1Vf3uNtjwqfsZC6XfTiHNCrgn1mGDqWlmrLICGxGOmfFT2zfrFONV0V\\\ - n5kixfYiZdFhV8f4zT1Ian6i53HhbuDhezY54FcScjBPzC8qrQLcuyE/Ey1AJPv6g\\nfT0vKfiMVI3NWcA+BL5oKDLifDwSp5WP7NUPUG9qbhRhNQgBR6oo3bVpsfw7d3Po\\\ - nAfLMWLmdN5xT628SUb92g8msxWyxFy8uD3zytqnS8bYrrnbss+oSD2um3AAunGF4\\nkcKrtcT6ri4akseHL0o0W7flf+pD+goawjU8P8gKAYwRzy6aaW6F1vQP+lHUZmVZ\\\ - nKQABvTLWbo6CuOcFrEvNOYWgkp3MD2TWihICzh445+GQAu1d4Rd8KiUMe+RCx/Nt\\nQ96peIQApdxRKDC9/60LHF7MHLITfkoAB2XmMMCWPzEWxnkiQ0srTfYHnwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WFFQRUlLQ0pTTFFBNjZGWlZUTTVFREFNWklY\\nRDZFSDU0QUM2S1VJSlg0Nk9WTVBLTTZDSFpZVlBBVzdVMjM1VFRaR0RUS1JVQzNW\\\ - nVklMWEpBQ1M0Mk5UMkEzUDY1VEJaT1pFRVdXUT0+iQI/BBMBCgApBQJbfQYdAhsv\\nBQkB4X2jBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQCX/S51ZK7cjB9w/9\\\ - nFwcOQdrvb02GomWjugHAyQ+Yw/xXIhCI0U9fm3K2SgmGl0y0oGVQMNSG+fFv3u4G\\nA6AJyD1L2cCmkzhFo4Jz4K5WNshkeZjgF2VlstyVkKFF7RfojMqSmzrGBU4ySkUv\\\ - nQQIDoa2AoLpq17sFt3sdgi9wm2MGowODAykO3D5HhCTnT4FJpU9jBcwJdaPDqK/i\\nEHuSfehzgtCJJ3ntP/Qat6e/aQ/XH/PH1/C/V5ZfxskxsuU7hJNkEgXVKz/kZ+t1\\\ - njYuoK69+cNsARQtv4TwWz7qoqtYuy8+CfNmEtd67XgGi1NEA7/zdGcVa9UhYEP96\\n6lUlY9/o7uiYec/QwMdZdUtI5xufKP1ko8qOxHHxK/Vvm4fQEAjeGTNTl/zPT4bd\\\ - nFBUxS+ul/Pkjs90ol9OMsJZXHy5GTZnSAAbNHw1RLE/lod/6a0NMepHkbJlobfyk\\nnaoJ5Xgu7tbEmInsa7FpPYzckL2o1GqGcOEjZvsp7owky2lfw9f5PIduUsjfTpXw\\\ - nJr9KiGafvWenBf7dp31OX0Up5P6yY/PCfV3zy5JV8mdldVXpukxd/rQ6GoJ10X6X\\nabjun8x9/Z/5Ir8w5AQEIkrPk4my6PQC0F68W/TrTKIq36gRrkzHLVk5jbM5nvbA\\\ - nWXHZM1gyVTx0JWUsKsrHhHwXjMrBTCi34GnBKl2gecQ=\\n=jbWk\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:45.506944Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\ - , \n \"uuid\": \"fd61a83e-6157-4b13-b1c4-596dc2ccf81e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"disaffected\ - \ caliph\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFt9BiYBEACsLGG2YX1ljDk4j93VDsNlHn7ruzK063XYFUTveVVFSg2BHvZj\\\ - n/AaDilAyM0Ht0Zk1GhuXk5IDu7lqJcHJvBqJLTQRb3jQel9jY2v7ZDNtVdyWHUVe\\nU28A/i3+vm0tPmt/LCXjNaptnLVClOJUoDWJqVhgkWtkbE6Yqhg62a+skXMn+EUE\\\ - nV8rXnU5qMhu4di7ACVP5z2l+VnKD8BZGOMeFx0nlOFZLFmV/Tucel8mMYF0B0oG7\\nLxYEu9GfdAJeZH1gsqoNx+yqSHpdG9AsYzKCOqzLhQmTD0ES9QJh3qS6VlAF3NOC\\\ - nTMBJEQ1DqhAJtGerO6mYkxfZ0EWqyOOg4yMfGyLpvWVKo8+KP1fmU0v6bm1HDlFd\\noCr67p4NHrO6LPYc2MyzHC6IS6yDTpNmUQo9f0dRSOs3AWl4VGXTZJfl/SISmSIy\\\ - nWuzjt9cYnq+uOv8ivhFfRlxuKQQTgKShr7AyMLRQeHFth5EPhprIgPMk163+9zp6\\ni29TBabnynJd2zFnc+moCzDO9rwPoaOeizwrzQWTpkyv7pcGATK/MJP5Ztvaocnp\\\ - nMx0kxfpP3+ITUw5Yet/DFDfRvQxxhwfeqn7y8gjT4nzDxL/IKW/lUEws3Mbc9TK2\\nJBKITsflrOo737cugme0VR5l8bsJPfJcoNfHEttAbi8xGLCWz4HZxho7MwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TERPTkxYMzJZSk5NVUZMTjNINE03WEVQWlJZ\\nM0JaRE1GMkIzWE9QQVhGRUVNRE9ERkNPSTNJQUZLVEdIUzQ2U09PUlZOMkNUREU1\\\ - nM0FUUko3NVZDNk9UUEJZUzJRTlMzVVZKNEtFWT0+iQI/BBMBCgApBQJbfQYmAhsv\\nBQkB4X2aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQwA0i80gzkCqdIxAA\\\ - ni/FNrkqOhbnC4ovn+61+HqI9h08+qeLrHgK5JSZsj+5ZxRyVddjLtychVDyfMFcP\\nmeiUbWK7+kiyumQCd5mI7A9tWVgbUD+JUNcmQpSyx1oi/gf3/i8FChYdF0OLPeF9\\\ - nZvF8r18E2y/JhPSB02rCixS8USStfv+Sc3uqKYvN7pJhgCW8fqYd3MNCqZtMMl/W\\noSDT0hM8I1IiRbhqo+YnlHV/tYLH0HkXWOuv++9KvuRLkPAzNp4TtvnBGO6JniXM\\\ - nJJetjksEOpgZaQnCQxdVCSBx17Y6wZ2nxWIVnMiRgr4xkycN/648gZc/5dk1EG38\\nBVriXEEhAbIrTVXgnQkwWZTbh9wH73GinMH5ae5jaS2SYLRMbpJ2loYeLxr85FFV\\\ - n3EJWj3m6JFWMivE9z3LG+jHUx+gDbhjbCOxjBj8/X6UkbbfeYRxC4Y+y5GJOIhEz\\nvPnH2wWR+jnEqv+BIV9QVY4MuYB9H7tmAOVBZFO0vBFtUQ8Sd6vkL2DImzri+TQn\\\ - nbWYvEjM/O59slydttNhnXaIQ+5RYpwl83ZI0Vv+h+ZqPcnAhOQ3UKno1s8ZnmUq7\\naBM5jf2jIFSbUiziloSSZXNHEPxZB4jJEcC7EY21M50JFaxV0o+eu+zwxdPpMOR8\\\ - nInPXqQkjltNZ507tqfW6Y4BtAVzQWMnNpLgDh9LqIHs=\\n=IM7J\\n-----END PGP PUBLIC\ - \ KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\"\ - : \"2018-08-22T06:43:52.318245Z\", \n \"number_of_documents\": 0, \n\ - \ \"number_of_messages\": 2, \n \"remove_star_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262/submissions\"\ - , \n \"url\": \"/api/v1/sources/9091cf36-5195-49d5-a1a4-f6360b849262\"\ - , \n \"uuid\": \"9091cf36-5195-49d5-a1a4-f6360b849262\"\n }\n ]\n\ - }\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"simplified countenance\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkYBEADFQFGsBxfF+U9fMbLGQ0CPT5zu0N4llekm/YitLdMcrx1ZYTM8\\ngTZVbwR0Wn4TEPNlDA6NDNQqL0aYFFEurZ2d9hMVqHLeDDjZ1a86esZYqM8ezRgA\\nBdKLbtYv3goaT4xcZ382LsLWpTC77wHd6woxdQQLbf32i5BFdJ2LzT/gGLEXI7qg\\npiWElSROUhXeWLWGz/OF2XMsDKEzQ8EePq9ZK/LYeTvs4Zi628Cu55yDGaMxY3e0\\n01qiZXD2jWZnVwVmvHX2ZM0ajb/uLPOHSiDYGF/a4ZFCC4GFgGaPuB/EhLS1Rz9c\\ngHlaZ/fFjUxy8s01/Imdg/pvC1yL4TRu2Hw+JDyxbyGxrnZ+GWe76+77Ts5wlQHC\\nUlJ0rcZy8z2dwxgl/qm5sYgPjQjKidiZyEJvTRA6itQ09vFACt8i79ZzrG45NgCn\\nQFhzBHmX/YDXhPMvFhJ74jltmY7EGbI8RuEoePrBxIkTS+DiCakLhA3XRfEm5p/r\\nd8Ujpq6v04WzErDAPzRm9TQz595t8MBuMoKCOAy6HK7YbtLkQWGHm/P0SHOMO4o6\\nyoku3pLBqO0bsooWbt1t9SWmlEpnQYxEgn9MsygDmAKNe9QyRqZ6IXXgpSt82PdH\\nmt7gbvla/HAYJAXj0iHocsfY5Hg36MCN4tD2C3I8M6NeiQLfpgU5oe2vTwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VENXUFpPNVVPSEU0UE1TUVdZT1RIUUFFUklN\\nSDNWTU9NS1hQQ1czUDVRTUE3NldEMkNNSVBMWExFUUdBSTZNWVFQWkVXTVUzT1Ra\\nNTYzWkJVSjdLN0lZS1FBN0lKWkdURTQyV0xNQT0+iQI/BBMBCgApBQJbzlJGAhsv\\nBQkB4Jz6BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQc94RIYU+9eZ9Tw/+\\nOzlH5RSs31JSbjgWaTOrvFUz5kbiIW2qRgUjzLtXhVU79im1osyPb058rtethydy\\nSfFQ1mfhVhdLqH+bQiyYuIxzgX9Kft4OgdXxWjFCcenMwPlqJhcPQDC0aQsIQOfp\\nW/6QGm3cq0Vh/StOwlhfrjl7uPaqNwxQsV2VXYMSXsZLyFUgnrr7clDpROBAcSaH\\nJRGUItvLMMFhR187L5froGctrA5h7KbDyShCF8RQa4nh/h4QbWxdX9bkufjOV7i8\\nGpCivtNohgdJ0UjnhhZmf0AlD/dBFH1bfjTQPD0rl48xDGEDRoSNYgbAx6pibr+K\\nXKj/DQc92PTFJz5DzRzmQbA/WopsSr1KWyZNpaQPuB3Y7qK4KudqC0Y8VTy3Fwdq\\nqO+kSB0R0o6LeprcDevEd/tB5iyHcXaYN90is7zijzJ8FPWtsOmTAtmSnDU8RLq2\\nc9MGNcXCC+sDFSaAEKUO0kodyde/KAZznBsUJ2bCe9vd6ulDBTGNPHhmNPtNEOpe\\nqkDa+X7Ul2X7HUrsBKAqjeGAhKIimRiJp2ApaxpTTjVLfIu2AYLPPeyh6Iu6MIFW\\nduMxWMxYuH7e7EOicGZXjKw/J2DJxr3Gk2Tqc6uGoNz/ofrOmW4R6VIOVW+gMMJE\\ngckgURKb5Y3/0vsHwbzCosytSf8JRalW9xWTY7bOMmY=\\n=NEsZ\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:16.040774Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/replies\", + \n \"submissions_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/submissions\", + \n \"url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c\", + \n \"uuid\": \"d9235b36-b3d4-49f1-b5df-dea96179342c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"melodic ignition\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkkBEAD3w4vil9pCDsExhuofFmRu5332eIHLSZl5HONFzNOtHOlh9U5H\\nfxpLCLL0cXR7bAnsbQaC7ctEAQs0DCD4IdetOaqDmOFRvWktimWwJdHjlwp3zu1l\\nssFvbh9DFs3XEcKtf0CS7Gr1cfRh5j0D3r9zgP0/1EsBMDv8kGJPAuav8t9qvNPT\\ngH9avjxbOXzqciGBjKnhjtcwSlCa6TPVNqxqdnU1QS5U1mPGejmeE63n0Wa8kcZZ\\nN2UgoR3JK6Izj/OQTGumLD+uYpdJlBlNdkQ3YJHGVLe6ZQ0ZvYrWtwrjPQ3nrFHe\\nHnbhqIF4h+GYr8UmFOGvkbSgm4cUOPuk+ByDSqvW8dS5Dw9/owuJyrN/anVoi29K\\nMDlRCkFeo0f5EUTpH193PVfTfbuzVVcjmqkxU8c573yImoShl6NztW4tfDwK1Zig\\nuYzl8HW8HsyPFEh+bfoGF2Fb3x9kV623tn0EOaM6Bdwmh5hRA7XmjSJASqb6vCgD\\n7m3tPgp4KqxpJvNvTtlQEJtZbX3T21Q17pc4BswEnspwHLEgsuX5PxIJrnIgSQb6\\nDfwpsYQlqCLLyeM2AmrrbYj45K1CRxwgZzMlmqVd14JkaOiJCbDX8+P39KloNjdM\\nniLd1IEloOPyEkn2e4gGRLJEHceXkHSbZeawbmhsJs6X74eeq2EHD2++VQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0RST1RMU0lQR1BPQUtaVE80WlUyS0FGNFNI\\nSUg2UlNZU1ZNQURYWkcyR0NGM1JZTjRDWjNGV1I2VTVEU1RaTkE2U0xGUjYyRTJB\\nRkJBSEpZVk5YSU9ER00yQ1haV0daTkxDT0RMUT0+iQI/BBMBCgApBQJbzlJJAhsv\\nBQkB4Jz3BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+nVriNq1LtN+nw/+\\nPxs+S/US+0p2YoyQS0pTbxyMDTifv1Y9I/BT9XSqeXFQyHW5ZVBXP+GI3LWladep\\nzxQqzUdwbfuLOwKloXDDpWMWT96TtF54zzyUK/RgJKVtLJQakSNdst5559PdZHKZ\\nm+q+xSQ8ZIRVwXVIs/lqYG77Jo3Hp8f1ox1f/uTV+5stW7N/8a82QghSmn9LOaly\\nh+vXfYsl0tb25OcUPR6oDgdsKGecUjJyt1k9vxvJr/Fn6EJJ5RHtYsjifYzdnly8\\nF+21lC4Ol7CzbxdD8K9Hcf21SnsYGF3PRW5/9pOUuIQqgasUur6KFr51cKsN0nzv\\nDp9sDntVM5SHO6e/wNTHwOA3f1/2+/YFGI5sm64v3P8laZSqkpnY88Iq9RkFSCqo\\nrExHVKhRLt/154M+/LP6moqSLzsZVAfIZ/ZvdVRkZz0Wn+Q7EOWx3woY5rfWEvEM\\nvi0NTctMWgi+iwZAED9r+hN0rDFehK/5Fvgw48VQu1oB3O/XZ2xYe1oFOprPDF0C\\nv7j6l0vKg5YNa+u11nUB68eF45+WNX+GiTJqY2oh2DiFK/EZNvKh4SEtddGKBtDZ\\nZBZUaHBMuRJMa9k6ZwTpOOJPhstl0Y2lyh9H4xuIYA03dpbDzCigpFyo9FA2yn/I\\nBofS5ogdjN4soc/c0x2tUtR5LZr4FuW0E36CT5d49E4=\\n=Nhlo\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2018-10-22T22:42:18.753919Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/remove_star\", + \n \"replies_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/replies\", + \n \"submissions_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/submissions\", + \n \"url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201\", + \n \"uuid\": \"34f31db0-e3f4-4371-b42a-1fa6105c8201\"\n }\n ]\n}\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5241'] Content-Type: [application/json] - Date: ['Wed, 22 Aug 2018 06:44:12 GMT'] - Server: [Werkzeug/0.12.2 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiV2VkLCAyMiBBdWcgMjAxOCAwODo0NDoxMiBHTVQifX0.Dl6XvA.UUCn7xPk5-T3OG_cdfd020ktn2M; + Date: ['Mon, 22 Oct 2018 22:42:21 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzQ.QdLLFqWe0-9BW_-AXmvjpiOYpt0; HttpOnly; Path=/] + Vary: [Cookie] status: {code: 200, message: OK} version: 1 From 6ce8a6cb2c2095a2d0f1d1e78f8ce303925d3856 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Fri, 12 Oct 2018 17:22:40 +0530 Subject: [PATCH 105/751] Use urljoin instead of string concat for urls --- sdclientapi/__init__.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 0892832a5..2e95d5f5e 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -4,6 +4,7 @@ import json import requests from subprocess import PIPE, Popen +from urllib.parse import urljoin from typing import Optional, Dict, List, Tuple @@ -77,12 +78,15 @@ def _send_json_request(self, method, path_query, body=None, headers=None): else: # We are not using the Qubes securedrop-proxy if method == "POST": - result = requests.post(self.server + path_query, - headers=headers, data=body) + result = requests.post( + urljoin(self.server, path_query), headers=headers, data=body + ) elif method == "GET": - result = requests.get(self.server + path_query, headers=headers) + result = requests.get(urljoin(self.server, path_query), headers=headers) elif method == "DELETE": - result = requests.delete(self.server + path_query, headers=headers) + result = requests.delete( + urljoin(self.server, path_query), headers=headers + ) # Because when we download a file there is no JSON in the body if path_query.find("/download") != -1: From 077cf885b2b8cbf35a84c3780a525a2106f889f5 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 25 Oct 2018 16:34:08 -0700 Subject: [PATCH 106/751] Enable Replies to be instantiated using only a UUID --- sdclientapi/sdlocalobjects.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index 7957b8598..b85dff947 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -56,6 +56,11 @@ def __init__(self, **kwargs) -> None: self.source_uuid = "" # type: str self.uuid = "" # type: str + if ["uuid"] == list(kwargs.keys()): + # Then we are creating an object for fetching from the server. + self.uuid = kwargs["uuid"] + return + for key in [ "filename", "journalist_username", From d5eb08e7c7a87683d7ab2c3095f726204fa72b55 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 26 Oct 2018 08:30:05 -0700 Subject: [PATCH 107/751] securedrop-sdk 0.0.3 --- CHANGELOG.md | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6149d210e..ff530163f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.0.3 +----- + +* Support UUID-only creation of Replies (#31). + 0.0.2 ----- diff --git a/setup.py b/setup.py index 70700ec24..bffe57651 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.2", + version="0.0.3", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From a62583e1c4dbb255c8c01743a3bdd9547c30d64f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 1 Nov 2018 13:07:20 +0530 Subject: [PATCH 108/751] Fixes #37, get stderr text in our process in Qubes --- sdclientapi/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 2e95d5f5e..755e963e4 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -32,6 +32,7 @@ def json_query(data): ["/usr/lib/qubes/qrexec-client-vm", proxyvmname, "securedrop.Proxy"], stdin=PIPE, stdout=PIPE, + stderr=PIPE, ) p.stdin.write(data.encode("utf-8")) d = p.communicate() From 66bcf95bb04b1f521c3076123b8f3c190c722d39 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 2 Nov 2018 01:52:54 +0530 Subject: [PATCH 109/751] Adds lock file and requirements files as required for packaging --- Pipfile.lock | 200 +++++++++++++++++++++++++++++++++++++++++ qubes/securedrop.Proxy | 0 requirements-build.txt | 10 +++ requirements.txt | 10 +++ 4 files changed, 220 insertions(+) create mode 100644 Pipfile.lock mode change 100644 => 100755 qubes/securedrop.Proxy create mode 100644 requirements-build.txt create mode 100644 requirements.txt diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 000000000..fe9c5e31a --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,200 @@ +{ + "_meta": { + "hash": { + "sha256": "58ba4d066d275717a5b571cfe5195a63f95cbfec1b2a12d1ba40ecfcb6d00c6d" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.5" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638", + "sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a" + ], + "version": "==2018.8.24" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "furl": { + "hashes": [ + "sha256:17654103b8d0cbe42798592db099c728165ac12057d49fe2e69de967d87bf29b" + ], + "index": "pypi", + "version": "==1.2.1" + }, + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "version": "==2.7" + }, + "orderedmultidict": { + "hashes": [ + "sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b", + "sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5" + ], + "version": "==1.0" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "index": "pypi", + "version": "==3.13" + }, + "requests": { + "hashes": [ + "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", + "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + ], + "index": "pypi", + "version": "==2.19.1" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, + "urllib3": { + "hashes": [ + "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", + "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + ], + "markers": "python_version != '3.1.*' and python_version < '4' and python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.3.*' and python_version >= '2.6'", + "version": "==1.23" + }, + "werkzeug": { + "hashes": [ + "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c", + "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b" + ], + "index": "pypi", + "version": "==0.14.1" + } + }, + "develop": { + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "version": "==2.7" + }, + "multidict": { + "hashes": [ + "sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b", + "sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64", + "sha256:136f5a4a6a4adeacc4dc820b8b22f0a378fb74f326e259c54d1817639d1d40a0", + "sha256:14906ad3347c7d03e9101749b16611cf2028547716d0840838d3c5e2b3b0f2d3", + "sha256:1ade4a3b71b1bf9e90c5f3d034a87fe4949c087ef1f6cd727fdd766fe8bbd121", + "sha256:22939a00a511a59f9ecc0158b8db728afef57975ce3782b3a265a319d05b9b12", + "sha256:2b86b02d872bc5ba5b3a4530f6a7ba0b541458ab4f7c1429a12ac326231203f7", + "sha256:3c11e92c3dfc321014e22fb442bc9eb70e01af30d6ce442026b0c35723448c66", + "sha256:4ba3bd26f282b201fdbce351f1c5d17ceb224cbedb73d6e96e6ce391b354aacc", + "sha256:4c6e78d042e93751f60672989efbd6a6bc54213ed7ff695fff82784bbb9ea035", + "sha256:4d80d1901b89cc935a6cf5b9fd89df66565272722fe2e5473168927a9937e0ca", + "sha256:4fcf71d33178a00cc34a57b29f5dab1734b9ce0f1c97fb34666deefac6f92037", + "sha256:52f7670b41d4b4d97866ebc38121de8bcb9813128b7c4942b07794d08193c0ab", + "sha256:5368e2b7649a26b7253c6c9e53241248aab9da49099442f5be238fde436f18c9", + "sha256:5bb65fbb48999044938f0c0508e929b14a9b8bf4939d8263e9ea6691f7b54663", + "sha256:60672bb5577472800fcca1ac9dae232d1461db9f20f055184be8ce54b0052572", + "sha256:669e9be6d148fc0283f53e17dd140cde4dc7c87edac8319147edd5aa2a830771", + "sha256:6a0b7a804e8d1716aa2c72e73210b48be83d25ba9ec5cf52cf91122285707bb1", + "sha256:79034ea3da3cf2a815e3e52afdc1f6c1894468c98bdce5d2546fa2342585497f", + "sha256:79247feeef6abcc11137ad17922e865052f23447152059402fc320f99ff544bb", + "sha256:81671c2049e6bf42c7fd11a060f8bc58f58b7b3d6f3f951fc0b15e376a6a5a98", + "sha256:82ac4a5cb56cc9280d4ae52c2d2ebcd6e0668dd0f9ef17f0a9d7c82bd61e24fa", + "sha256:9436267dbbaa49dad18fbbb54f85386b0f5818d055e7b8e01d219661b6745279", + "sha256:94e4140bb1343115a1afd6d84ebf8fca5fb7bfb50e1c2cbd6f2fb5d3117ef102", + "sha256:a2cab366eae8a0ffe0813fd8e335cf0d6b9bb6c5227315f53bb457519b811537", + "sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f", + "sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2", + "sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306", + "sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd" + ], + "markers": "python_version >= '3.4.1'", + "version": "==4.4.2" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "index": "pypi", + "version": "==3.13" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, + "vcrpy": { + "hashes": [ + "sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3", + "sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f" + ], + "index": "pypi", + "version": "==2.0.1" + }, + "wrapt": { + "hashes": [ + "sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6" + ], + "version": "==1.10.11" + }, + "yarl": { + "hashes": [ + "sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9", + "sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee", + "sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308", + "sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357", + "sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78", + "sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8", + "sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1", + "sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4", + "sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7" + ], + "markers": "python_version >= '3.4'", + "version": "==1.2.6" + } + } +} diff --git a/qubes/securedrop.Proxy b/qubes/securedrop.Proxy old mode 100644 new mode 100755 diff --git a/requirements-build.txt b/requirements-build.txt new file mode 100644 index 000000000..594b6dc85 --- /dev/null +++ b/requirements-build.txt @@ -0,0 +1,10 @@ +orderedmultidict==1.0 --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 +idna==2.7 --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 +certifi==2018.8.24 --hash=sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638 --hash=sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a +requests==2.19.1 --hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 --hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a +urllib3==1.23 --hash=sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf --hash=sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5 +werkzeug==0.14.1 --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b +pyyaml==3.13 --hash=sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b --hash=sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf --hash=sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a --hash=sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3 --hash=sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1 --hash=sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1 --hash=sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613 --hash=sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04 --hash=sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f --hash=sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537 --hash=sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531 +chardet==3.0.4 --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +six==1.11.0 --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb +furl==1.2.1 --hash=sha256:17654103b8d0cbe42798592db099c728165ac12057d49fe2e69de967d87bf29b diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..be31b955b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +./localwheels/Werkzeug-0.14.1-py2.py3-none-any.whl --hash=sha256:e224b7be15904cc4fbfdcd0d13dff5c7500d026e634af48c85766d5362fa7b36 +./localwheels/PyYAML-3.13-cp35-cp35m-linux_x86_64.whl --hash=sha256:da7175daaeff8a86a56cc398fb6628d3c3a6965f282789c2c9898e274e4691cd +./localwheels/chardet-3.0.4-py2.py3-none-any.whl --hash=sha256:e22445af14d9591037e995ee6c59a68b8d7df85b9a47b49a4b28d8601c405ff3 +./localwheels/requests-2.19.1-py2.py3-none-any.whl --hash=sha256:ed6aedaa095be7005b77b157936338883144d9b9c41cbe7665523a313343cca8 +./localwheels/idna-2.7-py2.py3-none-any.whl --hash=sha256:6e8569c478f0343de79c76418c80b7cd13dc93631ede79225dd1314bc8eaf2ed +./localwheels/urllib3-1.23-py2.py3-none-any.whl --hash=sha256:fc12686dea2604ce4967c45f6aabaf102016320020fd68175f4b0914e017aca5 +./localwheels/orderedmultidict-1.0-py3-none-any.whl --hash=sha256:0519055d46a45f8b44a950f97a8fa7c36f8c5adeb44f3f1a0910a674c95ffbc9 +./localwheels/furl-1.2.1-py3-none-any.whl --hash=sha256:af82dc925eb94ec60fd7ab06ab7ba11209d1dc40a7ee3fa8c9e9c08c6889c94f +./localwheels/six-1.11.0-py2.py3-none-any.whl --hash=sha256:c2dac6747d031463c7d5873d1ea5d43d4c20ce888f4762d457908f567997c670 +./localwheels/certifi-2018.8.24-py2.py3-none-any.whl --hash=sha256:d232833167262107f3aa658b00e1051d31a6ec095669710eeb8f8f8c888033f9 From 6aca77cc5c7c9df24f0dee7c122d55b016792f49 Mon Sep 17 00:00:00 2001 From: Julia Yatsenko Date: Tue, 30 Oct 2018 21:16:27 -0400 Subject: [PATCH 110/751] fix #30: changed incorrect error message when downloading a file that 404s --- sdclientapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 2e95d5f5e..370142373 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -460,7 +460,7 @@ def download_submission( ) if status_code == 404: - raise WrongUUIDError("Missing reply {}".format(submission.uuid)) + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) # Get the headers headers = headers From 43ed2e33e65308a09faa7efb013efd5a3864b910 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Sat, 3 Nov 2018 02:42:24 +0530 Subject: [PATCH 111/751] Fixes #15 updates requirements.txt files To be used like below. pip3 install -r requirements.txt --index-url https://dev-bin.ops.securedrop.org/simple --- Pipfile.lock | 25 ++++++++++++------------- requirements-build.txt | 10 ---------- requirements-dev.txt | 7 +++++++ requirements.txt | 20 ++++++++++---------- 4 files changed, 29 insertions(+), 33 deletions(-) delete mode 100644 requirements-build.txt create mode 100644 requirements-dev.txt diff --git a/Pipfile.lock b/Pipfile.lock index fe9c5e31a..f2aee454c 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -18,10 +18,10 @@ "default": { "certifi": { "hashes": [ - "sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638", - "sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a" + "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", + "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" ], - "version": "==2018.8.24" + "version": "==2018.10.15" }, "chardet": { "hashes": [ @@ -32,10 +32,11 @@ }, "furl": { "hashes": [ - "sha256:17654103b8d0cbe42798592db099c728165ac12057d49fe2e69de967d87bf29b" + "sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018", + "sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec" ], "index": "pypi", - "version": "==1.2.1" + "version": "==2.0.0" }, "idna": { "hashes": [ @@ -70,11 +71,11 @@ }, "requests": { "hashes": [ - "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", - "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", + "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" ], "index": "pypi", - "version": "==2.19.1" + "version": "==2.20.0" }, "six": { "hashes": [ @@ -85,11 +86,10 @@ }, "urllib3": { "hashes": [ - "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", - "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" ], - "markers": "python_version != '3.1.*' and python_version < '4' and python_version != '3.2.*' and python_version != '3.0.*' and python_version != '3.3.*' and python_version >= '2.6'", - "version": "==1.23" + "version": "==1.24.1" }, "werkzeug": { "hashes": [ @@ -140,7 +140,6 @@ "sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306", "sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd" ], - "markers": "python_version >= '3.4.1'", "version": "==4.4.2" }, "pyyaml": { diff --git a/requirements-build.txt b/requirements-build.txt deleted file mode 100644 index 594b6dc85..000000000 --- a/requirements-build.txt +++ /dev/null @@ -1,10 +0,0 @@ -orderedmultidict==1.0 --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 -idna==2.7 --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 -certifi==2018.8.24 --hash=sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638 --hash=sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a -requests==2.19.1 --hash=sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1 --hash=sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a -urllib3==1.23 --hash=sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf --hash=sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5 -werkzeug==0.14.1 --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b -pyyaml==3.13 --hash=sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b --hash=sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf --hash=sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a --hash=sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3 --hash=sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1 --hash=sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1 --hash=sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613 --hash=sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04 --hash=sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f --hash=sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537 --hash=sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531 -chardet==3.0.4 --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 -six==1.11.0 --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb -furl==1.2.1 --hash=sha256:17654103b8d0cbe42798592db099c728165ac12057d49fe2e69de967d87bf29b diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 000000000..fa6bd625f --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,7 @@ +idna==2.7 +multidict==4.4.2 ; python_version >= '3.4.1' +pyyaml==3.13 +six==1.11.0 +vcrpy==2.0.1 +wrapt==1.10.11 +yarl==1.2.6 ; python_version >= '3.4' diff --git a/requirements.txt b/requirements.txt index be31b955b..f2fcac3ab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ -./localwheels/Werkzeug-0.14.1-py2.py3-none-any.whl --hash=sha256:e224b7be15904cc4fbfdcd0d13dff5c7500d026e634af48c85766d5362fa7b36 -./localwheels/PyYAML-3.13-cp35-cp35m-linux_x86_64.whl --hash=sha256:da7175daaeff8a86a56cc398fb6628d3c3a6965f282789c2c9898e274e4691cd -./localwheels/chardet-3.0.4-py2.py3-none-any.whl --hash=sha256:e22445af14d9591037e995ee6c59a68b8d7df85b9a47b49a4b28d8601c405ff3 -./localwheels/requests-2.19.1-py2.py3-none-any.whl --hash=sha256:ed6aedaa095be7005b77b157936338883144d9b9c41cbe7665523a313343cca8 -./localwheels/idna-2.7-py2.py3-none-any.whl --hash=sha256:6e8569c478f0343de79c76418c80b7cd13dc93631ede79225dd1314bc8eaf2ed -./localwheels/urllib3-1.23-py2.py3-none-any.whl --hash=sha256:fc12686dea2604ce4967c45f6aabaf102016320020fd68175f4b0914e017aca5 -./localwheels/orderedmultidict-1.0-py3-none-any.whl --hash=sha256:0519055d46a45f8b44a950f97a8fa7c36f8c5adeb44f3f1a0910a674c95ffbc9 -./localwheels/furl-1.2.1-py3-none-any.whl --hash=sha256:af82dc925eb94ec60fd7ab06ab7ba11209d1dc40a7ee3fa8c9e9c08c6889c94f -./localwheels/six-1.11.0-py2.py3-none-any.whl --hash=sha256:c2dac6747d031463c7d5873d1ea5d43d4c20ce888f4762d457908f567997c670 -./localwheels/certifi-2018.8.24-py2.py3-none-any.whl --hash=sha256:d232833167262107f3aa658b00e1051d31a6ec095669710eeb8f8f8c888033f9 +certifi==2018.10.15 +chardet==3.0.4 +furl==2.0.0 +idna==2.7 +orderedmultidict==1.0 +pyyaml==3.13 +requests==2.20.0 +six==1.11.0 +urllib3==1.24.1 +werkzeug==0.14.1 From fc8a1d05f5f93fb372581aac3df1620cbd0a8b49 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 5 Nov 2018 14:26:41 +0100 Subject: [PATCH 112/751] repling to source returns a reply object --- sdclientapi/__init__.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 2e95d5f5e..41449aa82 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -541,7 +541,7 @@ def get_current_user(self): return data - def reply_source(self, source: Source, msg: str) -> bool: + def reply_source(self, source: Source, msg: str) -> Reply: """ This method is used to reply to a given source. The message should be preencrypted with the source's GPG public key. @@ -568,9 +568,10 @@ def reply_source(self, source: Source, msg: str) -> bool: raise AuthError(data["error"]) if "message" in data and data["message"] == "Your reply has been stored": - return True - # We should never reach here - return False + if "uuid" in data: + return Reply(uuid=data["uuid"]) + + raise BaseError("Error handling HTTP response to sending a reply") def get_replies_from_source(self, source: Source) -> List[Reply]: """ From 3d629258c6c13bfda858ee9d3a268dd04304e2c2 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 5 Nov 2018 14:32:45 +0100 Subject: [PATCH 113/751] updated test data --- data/test-reply-source.yml | 2 +- data/test_reply_source.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index b8e69db99..1c59ddd8d 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -56,7 +56,7 @@ interactions: method: POST uri: http://localhost:8081/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/replies response: - body: {string: "{\n \"message\": \"Your reply has been stored\"\n}\n"} + body: {string: "{\n \"message\": \"Your reply has been stored\"\n, \"uuid\": \"4efb9719-57f4-4fad-870f-207b1931ac14\"}\n"} headers: Content-Length: ['46'] Content-Type: [application/json] diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 305d66486..129b299df 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\",\\\"uuid\\\":\\\"4efb9719-57f4-4fad-870f-207b1931ac14\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}"} From 62e1e8f52929fca424a46f191fedc0e383e13afc Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 7 Nov 2018 16:10:23 -0800 Subject: [PATCH 114/751] securedrop-proxy 0.1.1 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index dff5d4a80..2b462566a 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-proxy", - version="0.1.0", + version="0.1.1", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Qubes proxy service", From 1e1ffb63bd13a2b0810d21a3e40cf804e0a15865 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 9 Nov 2018 21:10:13 -0500 Subject: [PATCH 115/751] Rename sd-journalist to sd-proxy --- sdclientapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index ac0271f83..5dfd9c2fc 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -11,7 +11,7 @@ from .sdlocalobjects import * -proxyvmname = "sd-journalist" +proxyvmname = "sd-proxy" def json_query(data): From 128583e808549e2c117938563caeb750426672eb Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 9 Nov 2018 18:49:15 -0800 Subject: [PATCH 116/751] securedrop-sdk 0.0.4 --- CHANGELOG.md | 8 ++++++++ setup.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff530163f..c77565450 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========= +0.0.4 +----- + +* Rename default proxy VM from sd-journalist to sd-proxy (#43). +* Get stderr text when using Qubes proxy (#38). +* Parse reply UUID (#42). +* Fix incorrect error message when downloading a file (#36). + 0.0.3 ----- diff --git a/setup.py b/setup.py index bffe57651..62f676379 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.3", + version="0.0.4", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From d1af063334f13ca81ca535276e837a6a75a04827 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Mon, 12 Nov 2018 16:12:17 -0800 Subject: [PATCH 117/751] Update README with additional context (Based on work done during 2018-11-12 documentation sprint by @redshiftzero @conorsch @emkll @eloquence) --- README.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c502396d1..21317d8c4 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,25 @@ -## Python Client for SecureDrop +## Python SDK for SecureDrop + +This SDK provides a convenient Python interface to the [SecureDrop Journalist Interface API](https://docs.securedrop.org/en/latest/development/journalist_api.html). The development of the SDK was primarily motivated by the creation of the [SecureDrop Workstation](https://github.com/freedomofpress/securedrop-workstation) based on Qubes OS. + +The SDK is currently used by the [SecureDrop Client](https://github.com/freedomofpress/securedrop-client) that is a component of the SecureDrop Workstation. When used in Qubes OS, the SDK uses the [securedrop-proxy](https://github.com/freedomofpress/securedrop-proxy) service, as the VM which runs the client does not have network access by design. + +**IMPORTANT:** This project is still under active development. We do not recommend using it in any production context. ### Development This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. -This is a Python3 project. +This is a Python 3 project. We are using [mypy](http://mypy-lang.org) for type annotation checks. -We cover all the API calls of SecureDrop. - -Note: The `get_source` will get an update to take a Source object as an input. - -We will also add a bunch of more tests. +We cover all the API calls supported by the SecureDrop Journalist Interface API. +Additional tests will be added in future. ### Testing -To test the code, you will need to run the SecureDrop `make dev` command in the same system. The test suite for +To test the code, you will need to run the SecureDrop `make dev` command on the same system. The test suite for this project will test against that development container. ### License: GPLv3+ From 64ad7afb10c94233dad191eb89e765b55b7b6209 Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 13 Nov 2018 16:08:24 -0500 Subject: [PATCH 118/751] Pin library versions in Pipfile This will ensure pipenv lock command does not update package versions unless explicitly specified in the Pipfile. Since we have automatic security checks for vulnerabilities in python libraries, this will ensure more consistency when building and testing our packages, and avoid drift in our requirements.txt and Pipfile.lock files. --- Pipfile | 19 ++++++++++++------- Pipfile.lock | 10 +++++++++- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Pipfile b/Pipfile index 92ec11e86..2b8930fbc 100644 --- a/Pipfile +++ b/Pipfile @@ -7,12 +7,17 @@ verify_ssl = true python_version = "3.5" [dev-packages] -vcrpy = "*" -mypy = "*" -pyotp = "*" -sphinx = "*" -pytest = "*" -pytest-cov = "*" +coverage = "==4.5.1" +markupsafe = "==1.0" +pyparsing = "==2.2.2" +pytz = "==2018.5" +vcrpy = "==2.0.1" +mypy = "==0.641" +pyotp = "==2.2.6" +sphinx = "==1.8.1" +pytest = "==3.9.1" +pytest-cov = "==2.6.0" [packages] -requests = "*" +requests = "==2.20.0" +urllib3 = "==1.24" diff --git a/Pipfile.lock b/Pipfile.lock index 645c680f9..a3a394869 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "48e88afaff5fc1d2185f12d9d60e7beccb413ebb49387f6259151f201ceb4777" + "sha256": "66165b2c3cd742dd3a6763416d2b0f0de98d9878c26b48987fe8983380a0ab20" }, "pipfile-spec": 6, "requires": { @@ -50,6 +50,7 @@ "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" ], + "index": "pypi", "version": "==1.24" } }, @@ -100,6 +101,7 @@ "hashes": [ "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", + "sha256:0bf8cbbd71adfff0ef1f3a1531e6402d13b7b01ac50a79c97ca15f030dba6306", "sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95", "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", "sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd", @@ -128,8 +130,10 @@ "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", + "sha256:f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e", "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80" ], + "index": "pypi", "version": "==4.5.1" }, "docutils": { @@ -165,6 +169,7 @@ "hashes": [ "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" ], + "index": "pypi", "version": "==1.0" }, "more-itertools": { @@ -273,6 +278,7 @@ "sha256:bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a", "sha256:d29593d8ebe7b57d6967b62494f8c72b03ac0262b1eed63826c6f788b3606401" ], + "index": "pypi", "version": "==2.2.2" }, "pytest": { @@ -296,6 +302,7 @@ "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053", "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277" ], + "index": "pypi", "version": "==2018.5" }, "pyyaml": { @@ -384,6 +391,7 @@ "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" ], + "index": "pypi", "version": "==1.24" }, "vcrpy": { From 09865221c5d81335d1d21cba68c989869c5fe8ef Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 13 Nov 2018 16:13:46 -0500 Subject: [PATCH 119/751] Pin library versions in Pipfile This will ensure pipenv lock command does not update package versions unless explicitly specified in the Pipfile. Since we have automatic security checks for vulnerabilities in python libraries, this will ensure more consistency when building and testing our packages, and avoid drift in our requirements.txt and Pipfile.lock files. --- Pipfile | 10 +++++----- Pipfile.lock | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Pipfile b/Pipfile index 3b58e620f..c87b2d468 100644 --- a/Pipfile +++ b/Pipfile @@ -7,10 +7,10 @@ verify_ssl = true python_version = "3.5" [packages] -furl = "*" -pyyaml = "*" -requests = "*" -werkzeug = "*" +furl = "==2.0.0" +pyyaml = "==3.13" +requests = "==2.20.0" +werkzeug = "==0.14.1" [dev-packages] -vcrpy = "*" +vcrpy = "==2.0.1" diff --git a/Pipfile.lock b/Pipfile.lock index f2aee454c..dc88d1339 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "58ba4d066d275717a5b571cfe5195a63f95cbfec1b2a12d1ba40ecfcb6d00c6d" + "sha256": "86be16c12e06dc67fd9e95334532a13dec41da47cee17103e2ee74de62d00ed1" }, "pipfile-spec": 6, "requires": { From 885d24d5728bfc4f8f686ffcdf8359d2f541e6a1 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 13 Nov 2018 13:46:27 -0800 Subject: [PATCH 120/751] Runs pipenv safety checks for dependencies in CI The other SecureDrop Workstation components already use the built-in "safety" checks via `pipenv check` in CI, adding here for parity. --- .circleci/config.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c6902b78d..570cdaa1c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -29,4 +29,6 @@ jobs: path: test-results - store_artifacts: path: test-results -destination: tr1 \ No newline at end of file + - run: + command: pipenv check +destination: tr1 From 020df5524d07d500b4e5f071f81a9439578c3231 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 14 Nov 2018 15:23:43 -0800 Subject: [PATCH 121/751] Remove now unnecessary requirements-dev.txt requirements*.txt files are only used at build time. Since development requirements are not needed at build time, this file should not clutter up the repository. --- requirements-dev.txt | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 requirements-dev.txt diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index fa6bd625f..000000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,7 +0,0 @@ -idna==2.7 -multidict==4.4.2 ; python_version >= '3.4.1' -pyyaml==3.13 -six==1.11.0 -vcrpy==2.0.1 -wrapt==1.10.11 -yarl==1.2.6 ; python_version >= '3.4' From 4aad014be2fcdec341e39f4505b879c786667bee Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 16 Nov 2018 00:59:47 +0530 Subject: [PATCH 122/751] Fresh wheels's sha256sums from the s3 bucket --- requirements.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/requirements.txt b/requirements.txt index f2fcac3ab..923665a2c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ -certifi==2018.10.15 -chardet==3.0.4 -furl==2.0.0 -idna==2.7 -orderedmultidict==1.0 -pyyaml==3.13 -requests==2.20.0 -six==1.11.0 -urllib3==1.24.1 -werkzeug==0.14.1 +certifi==2018.10.15 --hash=sha256:a5471c55b011bd45d6155f5c3629310c1d2f1e1a5a899b7e438a223343de583d +chardet==3.0.4 --hash=sha256:9f178988ca4c86e8a319b51aac1185b6fe5192328eb5a163c286f4bf50b7b3d8 +furl==2.0.0 --hash=sha256:cc0eb8998dcc7c5b58bc8625891a9ff563e2765e112024fa3d1e3521481de8b6 +idna==2.7 --hash=sha256:954e65e127d0433a352981f43f291a438423d5b385ebf643c70fd740e0634111 +orderedmultidict==1.0 --hash=sha256:25489716d76d2cc8aa656bfb00cd40b6ca29d5e11ccde0db60c2b46ad52bb40a +pyyaml==3.13 --hash=sha256:59fa6f097310e25248d5aa1d7b7e619ea22dfaada67e9c65262457b3e5b3a5c8 +requests==2.20.0 --hash=sha256:2a539dd6af40a611f3b8eb3f99d3567781352ece1698b2fab42bf4c2218705b5 +six==1.11.0 --hash=sha256:4663c7a1dbed033cfb294f2d534bd6151c0698dc12ecabb4eaa3cb041d758528 +urllib3==1.24.1 --hash=sha256:ac4755b0ae019d670d5fb420c39cb531389ab6ca8b652e12f56259f5cbc0ce21 +werkzeug==0.14.1 --hash=sha256:177ea4248bf0475cbc060edb35a0bdcf6e6daeac9e1296de5ddb3493e5ec15b9 From 1a674a407fd968b3bfe4037d4cbed2c291730885 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 15 Nov 2018 16:10:58 -0500 Subject: [PATCH 123/751] Bump version to 0.1.2 --- securedrop_proxy/proxy.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 2108d1a48..770db4d57 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -18,7 +18,7 @@ def __init__(self, status): self.status = status self.body = None self.headers = {} - self.version = "0.1.1" + self.version = "0.1.2" class Proxy: diff --git a/setup.py b/setup.py index 2b462566a..940af036a 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-proxy", - version="0.1.1", + version="0.1.2", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Qubes proxy service", From 622fea03177e8a95cb7e80319d9915c594924230 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 11 Jan 2019 12:02:27 +0100 Subject: [PATCH 124/751] added optional client side uuid selection for replies --- sdclientapi/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 5dfd9c2fc..9bfa7f304 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -542,18 +542,22 @@ def get_current_user(self): return data - def reply_source(self, source: Source, msg: str) -> Reply: + def reply_source(self, source: Source, msg: str, reply_uuid: str = None) -> Reply: """ This method is used to reply to a given source. The message should be preencrypted with the source's GPG public key. :param source: Source object we want to reply. :param msg: Encrypted message with Source's GPG public key. + :param reply_uuid: The UUID that will be used to identify the reply on the server. """ path_query = "api/v1/sources/{}/replies".format(source.uuid) method = "POST" reply = {"reply": msg} + if reply_uuid: + reply["uuid"] = reply_uuid + try: data, status_code, headers = self._send_json_request( method, path_query, body=json.dumps(reply), headers=self.auth_header From 8e745bceadc76c571bca6bbc321a10ffbdbaa59a Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 11 Jan 2019 13:31:21 +0100 Subject: [PATCH 125/751] added test for reply with client side uuid --- data/test-reply-source-with-uuid.yml | 93 ++++++++++++++++++++++++++++ tests/test_api.py | 25 +++++--- 2 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 data/test-reply-source-with-uuid.yml diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml new file mode 100644 index 000000000..07286349a --- /dev/null +++ b/data/test-reply-source-with-uuid.yml @@ -0,0 +1,93 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0NzIzODU3MywiaWF0IjoxNTQ3MjA5NzczfQ.eyJpZCI6MX0.VYoJPy_DIQhsnZ2Tnn2bEq6ejcTc3R-bRn2UtvEqtRs] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adventitious\ + \ decentralization\", \n \"key\": {\n \"public\": \"-----BEGIN\ + \ PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEACqV6dzvCVmqriX7/PFrVQn6CjgYyhbVBXkRn6Hcu4lraBMBwtB\\\ + nNjZxjXqebw9THLTZaaf8BvznjcpNI8N6XeiS7UBbk1H4ey7oPBIUXPFIynkiveLg\\nCyA8/bZcx3zYWD6BZR8trM0RbbSK7Ng5Ur6n5JiCBgmjX22eCF0FiDH9cMCN/6LF\\\ + n4glXSQI5hZ+A/78yAKIgFm8KZkUfcGMUigt+pk0uTIXGXHpU+gEBmAxMGB8EawAj\\nXxgj6d0lJranq7lcbbPjiOkr0/4WVzsIO4XG49p94rsDgHo5XX11kEzOFELZOnBN\\\ + nveJoQARsp1SgaWapT7lhwiHm5AEYdIjE1ABKJwheQp6/naF0rCnzpkt0+M+Gg+g6\\nvuV1e6rjY8wybZ6lZ0CQHnqFb4caA31B1DqVJcgMm8WpjkXhRfxc54UfID0DAfrh\\\ + nuTgsjRCVC90Jp+w0ikULCjsqKUOyNCdDA00b3voUaDHDKgK7hnHUE9y6XKHAuL+5\\nORw2HHlgPcPCVmGkbkykJwKG63pIeUg9jOYXsnopDtvJPM33KVdWAaCGbVqjUnbU\\\ + nGXf/FEfxYH4py2KWrN91KIXVp8Kts8Y+Z7w7UDokcu4ah1w+xrmZQFu/QpPbroeA\\nJP4GR24GvoQSJtqJhTRlmsoNF3lLIS0jG+qY7cSmHX3dHn3rFII+uG5FgQARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UllNN1NNWEI0WkFKVFRLTlNNVDYzWUhGS0E3\\nM0QyWTNER0NVWVE1NkZITFRKRk5MVURMT0lGU1VZQ0hNTTRNVVhCQ1JLSTc2RkhS\\\ + nVkJORVRISFNQUkpHSUhFN0JJRzNRNTc0QUI1QT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQpKEC6n7NelGg4Q/+PmC+nik1\\\ + nzkxuyGoAmZC7fdp86uzQ/sm0AYlCkpFrg02ExntZYSzeels4jtDlhJtnVgroFhXI\\nUuPEAs9BR/WBG+S2zmgkeS3hs60NC4pBhsxq02C3j6eh7Sd+5TlbczihvEbapk42\\\ + nS2dXeQrUmwKRlnXTl/zcrx5F5cO0a9IFcsbPnRAathEMQnYmNVdtko3+GURUzc9A\\n+Hn68BdS61HNsJ6FXNLRWNVz3XJzsCsan88gweVKt2neZStVDCXOnik+yWP2HiUd\\\ + n86tXPgp5TLezygmXYlWC0oGw5mhlnKOXdlWLRQNYsz10ZVW3Eh+Kwnh2IXAB/0tS\\nziwoeEQ3cQxO+zujBuQK7i3Wua5P3RaaQ1Gv2hS+9rCVwmgArudivnCdOFCL3S/X\\\ + nzJR5vxZLCx1rfSEn1RurI18NYIsBAKZE6Tdvo0mY2cI0uc9w2fK9y5rB9VZAFpr5\\nn52bSSShbzspDq8uckZg71H0x2YcYr5oUWKRvM+CP7acmzojmbVdADcdt6nqMRw2\\\ + npCUE1w2YSDXqBFArWD95mK1rzEqnugWKP0uDqnxbGzlWwh47s2RATb9qpuv6JzBj\\nu+rv/+6OtUjQJzgzc3QY/GNpWOpUiKD53q8n2WXEvZp20RRqVTim6xyxdt/ZNNfB\\\ + n7q1u5RV7vvqImSgQDOCCk5DC97o10x9Yins=\\n=hRiM\\n-----END PGP PUBLIC KEY BLOCK-----\\\ + n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-11T09:36:35.728746Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/submissions\"\ + , \n \"url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726\"\ + , \n \"uuid\": \"b1461156-3326-478b-afab-8771ab251726\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"frenzied sedation\"\ + , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ + n\\nmQINBFGRfoABEADBdMTK70O10p/irJoFIDEObSwVM4IVrLO65NPMcfRiXtrtSqPR\\nseG4vRnXJP2tQetv47+rI3MF4WKggVOX4c8d8JBBWQbPF3EZ9DDVY3rbmvNB1i2f\\\ + nLARYvvXDBkIILOZVdua9V2wy596aOEuwbH60mD7M+/Ww7JtEScbTokM05wQbYwHq\\nmaZ+u0D+NHNqvb5l9BIkR+zYmIcnUF/Ciu1oQ3i+rvp0e6C2KvpQcuhCJBychjgr\\\ + nvY3KhA8ewm1EMNdulDuMHSt01hRJTx5cBghj6xKphcNBLW5MbqwO3q7nkwpuvT+F\\nQbwQPNwgFYeKskUenN5fRBw37f7QeS11189Vet5bSFHa9bt0wAaMfslSwnxqWl7l\\\ + nV12qMAUqFLp1ENSM3rCUpxTuFAkUvH0PXo9yljzQBNfy5OIp9L4qzsY89UvZwkps\\ncSvBxK8URIPNbCqZ5ctTNtdQtmyMJVweflmMVyy1DUnmSJmTO+IsHqQXsCzq3OB3\\\ + nuIKBoPUCwDeMXAnQktWepxqaSSJkRlUvtv1f0Qk9kXLnDWCI4ONrf2p+AjAfAsi0\\n0yh2/UomT4js1pNnyz3r0ZmCI2vM2ZaN+Qhk/o+XVWXACcKMNYvnEwqB5kvWI2fV\\\ + nju05I7gH2DpN4oku99NPpJjx0DmTQDku1QA83hk6OrpCfrcQBwWfxyYzrwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TjVCSUhMS1VaVVdaN1NYTE5DMkNIWjNYQkZI\\\ + nUVRDUzY1N0kyM09JVDNOTUZUQzJRNE9LUUg3VzM1SDZCREo2Qk9NNkZQQzJPS1ZX\\nRVQ2RksyNlZEVVk1MlFDSVJENUdDT1g1VUNMQT0+iQI5BBMBCgAjBQJRkX6AAhsv\\\ + nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQkgFy2s9+/27WKRAAwHhvXDYa\\nV54Prh9/wAt6GrDOCj6oaNF1HdULZXGYpdy7be0Hhy0vvcvbYU7XAS/dpqwMc2gS\\\ + n+9gsXNf6hRVBhW6C8rh8j8oArpTciOAVcTIGihmLEzBbldKv0q2rbDeA+IBG/Rkv\\nInTb4hbwFGZVwS+CeHZegVRTnFPUsWrz6Z4T7uci8hQWNeZXIpqvTCIGn2jOfAwO\\\ + nPwZlbh4hwT0UrSZlhdb4Sc0yRlLjoLC+kDt4Mo1BvsxqrJKIbJPCZMHgU6aYa7pi\\ndVvq9/uzlqZzOggM5AJxgw/w4ZqDu/dl5wkuKkqE1DFrIzyx0yPq19za9ZI2r84m\\\ + nzO7n2VKh/j3ij3jluRhSeM26dkAFt0YH7jIu0Jo9NhbX1EVpfoIT7n4mAAbTliBN\\nhEq2rkiMCNvE8ouMH9cuawNrieUKuFIfejxT+dwCJXtSGIOTwiKndGgoi3ZNlngI\\\ + nCpcPakLdXPPidB6inNB4Y+pKlPmdZ4bwqKscEsDy9+6SMRtBa0F6iIYTiB3QNelL\\nmJ4ymUhbVgHtMDacxSAW2Qc/+ILV0naHb4MYO0P5p0DUnuuIZhhjj8oHXWGs8dy7\\\ + n2ucWzgcVLxCrVuse1EGIUOASOdngmjshFnG6GesA3sjaPav651qGY2cNF1VtmhGe\\n63zdUzrbb25wXChFeSbqifOGJyXqcXib9YA=\\\ + n=vGVV\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ + \n }, \n \"last_updated\": \"2019-01-11T09:36:41.986215Z\", \n \ + \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ + \ \"remove_star_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/submissions\"\ + , \n \"url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0\"\ + , \n \"uuid\": \"5af7a9f6-d0eb-479d-8ee6-32b5df429cb0\"\n }\n ]\n\ + }\n"} + headers: + Content-Length: ['5233'] + Content-Type: [application/json] + Date: ['Fri, 11 Jan 2019 12:29:34 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + status: {code: 200, message: OK} +- request: + body: '{"reply": "-----BEGIN PGP MESSAGE-----\n\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\n=686S\n-----END + PGP MESSAGE-----\n\n", "uuid": "e467868c-1fbb-4b5e-bca2-87944ea83855"}' + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0NzIzODU3MywiaWF0IjoxNTQ3MjA5NzczfQ.eyJpZCI6MX0.VYoJPy_DIQhsnZ2Tnn2bEq6ejcTc3R-bRn2UtvEqtRs] + Connection: [keep-alive] + Content-Length: ['974'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: http://localhost:8081/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/replies + response: + body: {string: "{\n \"message\": \"Your reply has been stored\", \n \"uuid\"\ + : \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\n}\n"} + headers: + Content-Length: ['97'] + Content-Type: [application/json] + Date: ['Fri, 11 Jan 2019 12:29:34 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.6] + status: {code: 201, message: CREATED} +version: 1 diff --git a/tests/test_api.py b/tests/test_api.py index 224f99bda..320ded100 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,17 +1,17 @@ -from pprint import pprint -import os -import time -import json import hashlib +import json +import os +import pyotp import shutil import tempfile +import time import unittest +import vcr +from pprint import pprint + from sdclientapi import * from utils import * -import vcr -import pyotp - class TestAPI(unittest.TestCase): @vcr.use_cassette("data/test-setup.yml") @@ -186,6 +186,17 @@ def test_reply_source(self): self.assertTrue(self.api.reply_source(s, data)) + @vcr.use_cassette("data/test-reply-source-with-uuid.yml") + def test_reply_source_with_uuid(self): + s = self.api.get_sources()[0] + dirname = os.path.dirname(__file__) + with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: + data = fobj.read() + + msg_uuid = 'e467868c-1fbb-4b5e-bca2-87944ea83855' + reply = self.api.reply_source(s, data, msg_uuid) + assert reply.uuid == msg_uuid + @vcr.use_cassette("data/test-download-submission.yml") def test_download_submission(self): s = self.api.get_all_submissions()[0] From 659bbc29189e3a8ef7d28f2027cde66d576a4267 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 11 Jan 2019 13:34:23 +0100 Subject: [PATCH 126/751] make test for reply_source more accurate on checking return type --- tests/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_api.py b/tests/test_api.py index 320ded100..527d6af3f 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -184,7 +184,7 @@ def test_reply_source(self): with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: data = fobj.read() - self.assertTrue(self.api.reply_source(s, data)) + self.assertTrue(isinstance(self.api.reply_source(s, data), Reply)) @vcr.use_cassette("data/test-reply-source-with-uuid.yml") def test_reply_source_with_uuid(self): From e0af13a5419381ebc57dda430c57827a0d34a8a9 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 14 Jan 2019 20:14:07 +0530 Subject: [PATCH 127/751] Updates to release 0.0.5 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 62f676379..45d1b8229 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.4", + version="0.0.5", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 72476f5bd01544ac5c746d25ac62e6e995892993 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 21 Jan 2019 18:49:37 +0100 Subject: [PATCH 128/751] parse filename when posting reply --- data/test-reply-source-with-uuid.yml | 115 ++++++++++++++------------- data/test-reply-source.yml | 97 +++++++++++++--------- data/test_reply_source.json | 2 +- sdclientapi/__init__.py | 3 +- sdclientapi/sdlocalobjects.py | 3 +- tests/test_api.py | 7 +- 6 files changed, 128 insertions(+), 99 deletions(-) diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index 07286349a..1dba51d6d 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -4,68 +4,68 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0NzIzODU3MywiaWF0IjoxNTQ3MjA5NzczfQ.eyJpZCI6MX0.VYoJPy_DIQhsnZ2Tnn2bEq6ejcTc3R-bRn2UtvEqtRs] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adventitious\ - \ decentralization\", \n \"key\": {\n \"public\": \"-----BEGIN\ - \ PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEACqV6dzvCVmqriX7/PFrVQn6CjgYyhbVBXkRn6Hcu4lraBMBwtB\\\ - nNjZxjXqebw9THLTZaaf8BvznjcpNI8N6XeiS7UBbk1H4ey7oPBIUXPFIynkiveLg\\nCyA8/bZcx3zYWD6BZR8trM0RbbSK7Ng5Ur6n5JiCBgmjX22eCF0FiDH9cMCN/6LF\\\ - n4glXSQI5hZ+A/78yAKIgFm8KZkUfcGMUigt+pk0uTIXGXHpU+gEBmAxMGB8EawAj\\nXxgj6d0lJranq7lcbbPjiOkr0/4WVzsIO4XG49p94rsDgHo5XX11kEzOFELZOnBN\\\ - nveJoQARsp1SgaWapT7lhwiHm5AEYdIjE1ABKJwheQp6/naF0rCnzpkt0+M+Gg+g6\\nvuV1e6rjY8wybZ6lZ0CQHnqFb4caA31B1DqVJcgMm8WpjkXhRfxc54UfID0DAfrh\\\ - nuTgsjRCVC90Jp+w0ikULCjsqKUOyNCdDA00b3voUaDHDKgK7hnHUE9y6XKHAuL+5\\nORw2HHlgPcPCVmGkbkykJwKG63pIeUg9jOYXsnopDtvJPM33KVdWAaCGbVqjUnbU\\\ - nGXf/FEfxYH4py2KWrN91KIXVp8Kts8Y+Z7w7UDokcu4ah1w+xrmZQFu/QpPbroeA\\nJP4GR24GvoQSJtqJhTRlmsoNF3lLIS0jG+qY7cSmHX3dHn3rFII+uG5FgQARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UllNN1NNWEI0WkFKVFRLTlNNVDYzWUhGS0E3\\nM0QyWTNER0NVWVE1NkZITFRKRk5MVURMT0lGU1VZQ0hNTTRNVVhCQ1JLSTc2RkhS\\\ - nVkJORVRISFNQUkpHSUhFN0JJRzNRNTc0QUI1QT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQpKEC6n7NelGg4Q/+PmC+nik1\\\ - nzkxuyGoAmZC7fdp86uzQ/sm0AYlCkpFrg02ExntZYSzeels4jtDlhJtnVgroFhXI\\nUuPEAs9BR/WBG+S2zmgkeS3hs60NC4pBhsxq02C3j6eh7Sd+5TlbczihvEbapk42\\\ - nS2dXeQrUmwKRlnXTl/zcrx5F5cO0a9IFcsbPnRAathEMQnYmNVdtko3+GURUzc9A\\n+Hn68BdS61HNsJ6FXNLRWNVz3XJzsCsan88gweVKt2neZStVDCXOnik+yWP2HiUd\\\ - n86tXPgp5TLezygmXYlWC0oGw5mhlnKOXdlWLRQNYsz10ZVW3Eh+Kwnh2IXAB/0tS\\nziwoeEQ3cQxO+zujBuQK7i3Wua5P3RaaQ1Gv2hS+9rCVwmgArudivnCdOFCL3S/X\\\ - nzJR5vxZLCx1rfSEn1RurI18NYIsBAKZE6Tdvo0mY2cI0uc9w2fK9y5rB9VZAFpr5\\nn52bSSShbzspDq8uckZg71H0x2YcYr5oUWKRvM+CP7acmzojmbVdADcdt6nqMRw2\\\ - npCUE1w2YSDXqBFArWD95mK1rzEqnugWKP0uDqnxbGzlWwh47s2RATb9qpuv6JzBj\\nu+rv/+6OtUjQJzgzc3QY/GNpWOpUiKD53q8n2WXEvZp20RRqVTim6xyxdt/ZNNfB\\\ - n7q1u5RV7vvqImSgQDOCCk5DC97o10x9Yins=\\n=hRiM\\n-----END PGP PUBLIC KEY BLOCK-----\\\ - n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-11T09:36:35.728746Z\"\ + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/add_star\"\ + , \n \"interaction_count\": 5, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"amendable\ + \ oxalate\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFGRfoABEADCT3t+bjtqkXjPdwR9uij7LFmenP1rl4nKNXaVBUTuB9AaDC20\\\ + nK8clNbYM2rXqxk48u1ofIlIy10fK94GY1nIN2OUk9++XZsgwpRfsGOg5dK94cf3G\\nlMNisP+fK+9kR32BPOIOJ9A1gye4/JjVon1JM0XOskC3FvWztS+Pd421nSFuKCHp\\\ + nmtFij1Oi1wrk90Pm8pC2gjkEIi/x4iudJQbtYJ6d2MjdfiA/5OX3U6rWedAa8E5e\\nGlMkVCee3DSjRhvK/lbe/TQgCyeM45G6pgLJupOo1aetVzPTUosLYpzHl9RZpguL\\\ + n2/y168odljHzy3DGJftDwEstx/8kWRYkjUYqyaSfkmJp/f2f70mAzoL3ml1sLXvw\\nA1wEiSSaczDkXL62MRyTpoGVTffDZ2NBN8JLK/SQ8C3UvGq7x0a89TcZ6aqfVyU1\\\ + ntLWMWKmdqvLEU926PsoxLzhGEahdNYRRbFtW4FQKAO97NTTlCL//j4wTXWBLpyD8\\nLBEb6j4l1IvOFG9q3uop9IZhuf8E0n3jafp5FBPC05/i6Wi12rs7gzJIZxcRx+ve\\\ + nWmB/B8xKaiiQxfdMswDQRmvUNIkoMaXPhoznP4L8IWYGthsseFK+rY/RB1o/fwOw\\nnDjvpt/P4L/+M8wtbtmc56nj5GQWOfxgwmaBXVfu0wxrFcYRxSt37nxQiwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T0ZQTVRVSVU1TVZQUDVESFFRVVJWTVBLTkpL\\nNlFZU0s0SUxQTkhNQVRLUFpNQlNBT0E1Tks0VlpPUTMzWE5WNjdLSzdZWlJMQVpX\\\ + nU0RDT1FFS1NQTjY3UFkzSExOUkZVWVhVMjNRWT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQMtLAlDosbglOnA//Y8i65QvX\\\ + n8SDmi+qVDC1lOjDcXTQMSgeSTDW+0XBwJMaQ6rIFaN6NBIudoTwGLYbrgDBmy0CA\\n9qHSIEreng2Hz/EgOPdUMpz0HViDn1EJxvckBBwVKZY684NHMf8f2XVPSvoZj8sA\\\ + nZyi0TpZbVJWGwZPMfTxVNuNuJFuvpUyX769FFiP32Vooxy5wXwvq1Npd0mMRtsMt\\nrnxxOmrzzoq4/nirJg0L0aPHog0ta63t6L5z8OgbtzZs1Su70UtHc+0sxd84xuXV\\\ + nJ8zIGC1iOqum68HzRc7j5JvpkynZJNgy3k2bxuG/OtNuI0CRsY+Pci5WY/Oz0qvk\\nhiF9pKa1uQglbATUi6t9pBTEJCuu2dS6vYHtm+k/FbIoJ7nVrRrgvI+nUqu+aMh9\\\ + ngamKZBdHcVrVccWsxn7nvBFU4heoQVovQ0JuFfxlGAmhIY3gs47ZG7CV9wDrRkrI\\n+RR+MwFq46I1dO8PdY7mEMstpsLhSbE+m2cHy2j3CkQd6hCRwLnIIHy7t8tKZZW6\\\ + nF074MPc0SiFeur1LmO4egL6PzIMYAaaDoWRAzXRb2Kdz50f5qjdvRkTg9Z47vrrC\\n5MiTOSR88XLr25P4Ei6oVwnTDDz9DhFuBhCG+er42T/1VC4udUYqv2cOp8k69Da4\\\ + nbWnUkSalxPHNH5H+PS7R3SJGFhLtgaInKL0=\\n=eEar\\n-----END PGP PUBLIC KEY BLOCK-----\\\ + n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:39.545978Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/submissions\"\ - , \n \"url\": \"/api/v1/sources/b1461156-3326-478b-afab-8771ab251726\"\ - , \n \"uuid\": \"b1461156-3326-478b-afab-8771ab251726\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/submissions\"\ + , \n \"url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\ + , \n \"uuid\": \"6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"frenzied sedation\"\ - , \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\ - n\\nmQINBFGRfoABEADBdMTK70O10p/irJoFIDEObSwVM4IVrLO65NPMcfRiXtrtSqPR\\nseG4vRnXJP2tQetv47+rI3MF4WKggVOX4c8d8JBBWQbPF3EZ9DDVY3rbmvNB1i2f\\\ - nLARYvvXDBkIILOZVdua9V2wy596aOEuwbH60mD7M+/Ww7JtEScbTokM05wQbYwHq\\nmaZ+u0D+NHNqvb5l9BIkR+zYmIcnUF/Ciu1oQ3i+rvp0e6C2KvpQcuhCJBychjgr\\\ - nvY3KhA8ewm1EMNdulDuMHSt01hRJTx5cBghj6xKphcNBLW5MbqwO3q7nkwpuvT+F\\nQbwQPNwgFYeKskUenN5fRBw37f7QeS11189Vet5bSFHa9bt0wAaMfslSwnxqWl7l\\\ - nV12qMAUqFLp1ENSM3rCUpxTuFAkUvH0PXo9yljzQBNfy5OIp9L4qzsY89UvZwkps\\ncSvBxK8URIPNbCqZ5ctTNtdQtmyMJVweflmMVyy1DUnmSJmTO+IsHqQXsCzq3OB3\\\ - nuIKBoPUCwDeMXAnQktWepxqaSSJkRlUvtv1f0Qk9kXLnDWCI4ONrf2p+AjAfAsi0\\n0yh2/UomT4js1pNnyz3r0ZmCI2vM2ZaN+Qhk/o+XVWXACcKMNYvnEwqB5kvWI2fV\\\ - nju05I7gH2DpN4oku99NPpJjx0DmTQDku1QA83hk6OrpCfrcQBwWfxyYzrwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TjVCSUhMS1VaVVdaN1NYTE5DMkNIWjNYQkZI\\\ - nUVRDUzY1N0kyM09JVDNOTUZUQzJRNE9LUUg3VzM1SDZCREo2Qk9NNkZQQzJPS1ZX\\nRVQ2RksyNlZEVVk1MlFDSVJENUdDT1g1VUNMQT0+iQI5BBMBCgAjBQJRkX6AAhsv\\\ - nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQkgFy2s9+/27WKRAAwHhvXDYa\\nV54Prh9/wAt6GrDOCj6oaNF1HdULZXGYpdy7be0Hhy0vvcvbYU7XAS/dpqwMc2gS\\\ - n+9gsXNf6hRVBhW6C8rh8j8oArpTciOAVcTIGihmLEzBbldKv0q2rbDeA+IBG/Rkv\\nInTb4hbwFGZVwS+CeHZegVRTnFPUsWrz6Z4T7uci8hQWNeZXIpqvTCIGn2jOfAwO\\\ - nPwZlbh4hwT0UrSZlhdb4Sc0yRlLjoLC+kDt4Mo1BvsxqrJKIbJPCZMHgU6aYa7pi\\ndVvq9/uzlqZzOggM5AJxgw/w4ZqDu/dl5wkuKkqE1DFrIzyx0yPq19za9ZI2r84m\\\ - nzO7n2VKh/j3ij3jluRhSeM26dkAFt0YH7jIu0Jo9NhbX1EVpfoIT7n4mAAbTliBN\\nhEq2rkiMCNvE8ouMH9cuawNrieUKuFIfejxT+dwCJXtSGIOTwiKndGgoi3ZNlngI\\\ - nCpcPakLdXPPidB6inNB4Y+pKlPmdZ4bwqKscEsDy9+6SMRtBa0F6iIYTiB3QNelL\\nmJ4ymUhbVgHtMDacxSAW2Qc/+ILV0naHb4MYO0P5p0DUnuuIZhhjj8oHXWGs8dy7\\\ - n2ucWzgcVLxCrVuse1EGIUOASOdngmjshFnG6GesA3sjaPav651qGY2cNF1VtmhGe\\n63zdUzrbb25wXChFeSbqifOGJyXqcXib9YA=\\\ - n=vGVV\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\ - \n }, \n \"last_updated\": \"2019-01-11T09:36:41.986215Z\", \n \ - \ \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \ - \ \"remove_star_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0/submissions\"\ - , \n \"url\": \"/api/v1/sources/5af7a9f6-d0eb-479d-8ee6-32b5df429cb0\"\ - , \n \"uuid\": \"5af7a9f6-d0eb-479d-8ee6-32b5df429cb0\"\n }\n ]\n\ + \ \"is_starred\": false, \n \"journalist_designation\": \"unpopular\ + \ immunoassay\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADMxLgS/OCizJBcu37Fy0/irYv6Fd/kgY8FsrNP/3R73YWvlWDK\\\ + nMqZZ27LzXpEQwViiQ/co/dYMBCbcxF/EV9AtTTtcAkhjdQ869EnMwbf+bMKk3aKg\\n24MZcIfP/T7G5dk2z1w51UmOUSq5f7+mCh3aIioPVUsZ3DMzNlXPP8xLBh1Wq+jI\\\ + nZcvkBprlQZ+YeMjSdyrUNi6NlJ9Ex4goUU/h4xKO5GMU5CSmm+foheGqAE/MR8mN\\n7pUhSOrf5i/YTMa6m1SiUlN+QT3pBDXaer72fGskxWbboHBD1l090sJ50aQ0FGnv\\\ + npyqCuqFaMb8bv7YHZ+CAQPvwRQGRMp2gVy0NGJ8j6qmQ7V5KZAlPM/dNn1lY2h8I\\nD0G2VhsRdonsBiwCSpf4WGtoz+nBcvbmm4sbaT2jYvDu/8l5zkpNgL4csXNu7bXg\\\ + nH6cTc60edFDPQtlfI9J3nbNRTF3CZP6U2Jsh9uXKRDjxysxNfrSKSbMInXWOh7Jz\\nw32mES5VNfOKqhngkRnpzAh6bDwG+EjXj7dlOoB2GhNfV46j95YM7NVM38S7s/MM\\\ + n5F8Hcrn5ZRk3d19PLFjinzmsSFkVbCdtymw8/hjidgeayXQe21iZtoLq6d2VMvV7\\nmpdgvHxfo5AOK+qHqvq/PQ2Pc3wULt1OausEyJNauu8FWLd8EYy6InS6LwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U0I3RUtIWVhaUlo1T0JFVklFTTZPU0ZXNFlC\\nQkdURlBURE9MSDNPVElBNEQzVEhaQUNNUE9TNTJWNzRSVUJRVTdQQUFRVENaUTJY\\\ + nMzNCT0paTERMNkRFTEg2QjdYRUVPUko1WFZEUT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+rtHWFtfS4baWBAAu/mc8woq\\\ + n78FJrJwys0OAolnhyBelk0tsASwsKUosR9ObRbEwcDAAc0a8sCMZ/bxsxGPG8keJ\\nk5CVfQ5WJk6Jl5wL2xmG+0OHZAwezGDoO6SGtY3H2iPM+Bq4rimnWWbbTrZFx4ny\\\ + nixVj3N4lW9J13NvRnBPz8DmHfPep09lTVgNiIVwvwqsmdxAnMZerzwpjIrdtud+s\\nz+LxVcAFeKmmzQLNYlrP2jsxjIE1gYLEkM10Jm/NuXZaXbyiT56uCdCI4oRti/Q5\\\ + n3NfzZZ7vfUwsr/PMjPMrGyjvtZy2BHoP4i+83wudoHezVomVlYxUsK24d24Ifj6X\\n/hhItJvZIE0YrOxzRaRi19wfTV9IbVH/Y7aOMZJRn0e61HLEGfAa7FiDtpox3T+M\\\ + nX6/NPGhlXphrCO4jjpVBLt1/F1Vz7ZKC60aPzEPCuUtXjTjttOMW/aUE1ktXVT7L\\nz6KixK04cg9CGvBkxAsZ4TGP+hAy3rmvnxn4kG62kzDPEQqBCzlEL6a+LG/LX503\\\ + n/VcazAUIZ12rTwZSV+0EQ9ZAC0q/vIwM17IqMtgeR/OgK7q79Je83D0mx5UUPLZQ\\nNUvrQBGFWLczaVYo69G53U2G4npVVo6f5/0G1dVZtRrnUxwy9mxZZFboHJ0FanjY\\\ + nSevPdl75hJ6kKp+X+278M6CiNm1NWETjCY4=\\n=wgEJ\\n-----END PGP PUBLIC KEY BLOCK-----\\\ + n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:43.241603Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/submissions\"\ + , \n \"url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\ + , \n \"uuid\": \"c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\n }\n ]\n\ }\n"} headers: - Content-Length: ['5233'] + Content-Length: ['5225'] Content-Type: [application/json] - Date: ['Fri, 11 Jan 2019 12:29:34 GMT'] + Date: ['Mon, 21 Jan 2019 17:13:11 GMT'] Server: [Werkzeug/0.14.1 Python/2.7.6] status: {code: 200, message: OK} - request: @@ -74,20 +74,21 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0NzIzODU3MywiaWF0IjoxNTQ3MjA5NzczfQ.eyJpZCI6MX0.VYoJPy_DIQhsnZ2Tnn2bEq6ejcTc3R-bRn2UtvEqtRs] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Length: ['974'] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/b1461156-3326-478b-afab-8771ab251726/replies + uri: http://localhost:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies response: - body: {string: "{\n \"message\": \"Your reply has been stored\", \n \"uuid\"\ - : \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\n}\n"} + body: {string: "{\n \"filename\": \"6-amendable_oxalate-reply.gpg\", \n \"message\"\ + : \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\ + \n}\n"} headers: - Content-Length: ['97'] + Content-Length: ['145'] Content-Type: [application/json] - Date: ['Fri, 11 Jan 2019 12:29:34 GMT'] + Date: ['Mon, 21 Jan 2019 17:13:11 GMT'] Server: [Werkzeug/0.14.1 Python/2.7.6] status: {code: 201, message: CREATED} version: 1 diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index 1c59ddd8d..31ee63e65 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -4,43 +4,69 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://localhost:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"punctual thermocouple\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVq4BEADUx70hRgVWDI3N7NzUu2ufh4TEUOFpjbUQeS9tANimRVRYixn5\\n1gIv2skkBMIiEycGaOx6lkTvG/qDmNJfQ5kUdl4JcC9NBB+WhEmHiYu5+Ez1FieI\\nZz4ERx9N2AV3ADAcXAAyMKR78LhjQAp/bvvaj3zDhIpSp5eFtdzjue0Q2jsWnSEK\\n+elbWnfVudfze9J2ZrKDH0OnASKvTpCAK8Wan160zyI37ydCFd3qQryC0GRDBslE\\nQN1CbPt6TlHK9mQSHTtX92eyh0AoqYjA7h/pvlX0XXnDSsdw3XFOMjoqjZwBS+T8\\ns5DWrYUwZU4jLj6InXIqWrtvhvf542PiROz/f4FbPTooDuLRGLLCkyZPL6f9liZt\\njGjRtWA+GAabVcFVbtViSJ610/Sq3Dl/cvPSmMdjseh8TWbIexRtQ8WdP2dVjfjF\\n77LUIyBACmRJQMXamF74f+xj3LM7mrBF4smeHjzj+toxA+s8oyK3B7qNxmcY9APl\\nhm+5lSzK1oA+LbBJzEixTFguTqbTP/UBoqW568raqqDTDyYr5YDCGNqeqstZdzJp\\nVjDYRS083UggYP40zkXeP8xSla/g11nLSHQMGIauCivnDOjCoa3oxPcT68TV2ypd\\nvw3GUHa6113pg1WFSWQCn4aRaAoTQl4qNh4ZCChGaWLCS6GXu8vfFcJ9YwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8MkpGVVNPRk1PSkhORUVWRVVLNUY1WFdPR1g1\\nVVhRREhRSlNLR05RTkJZT1dQVFVQUFlNUFM3TjNNNUkzN0hMRFU1VU9PNkVJT0c2\\nWEdJRkZVQVpUNkwzNUdURUpSSjVNWktFVFI2UT0+iQI/BBMBCgApBQJbzlauAhsv\\nBQkB4JiSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQV6amEXNOzlKFyA/+\\nOL+kRHKti3V5ytCxk9Jv0qFrH9QtTajD3CswZg8TRqQmr50YWiKZXP91Zo6MyMA8\\nki0IVtVuHc+HdCqUJV5xKrXc7V7lRmiOH39hFG3wvI0stgJ6/4BzVNPpAf2UoSyR\\nY9u2L3C3t15ED/GOPv2JH+P7Q37Bi9n0Fk0Ck82rbiN85KJl92L6zOs75leFbD+0\\nL6Ja1Q2SpHNrSF2m94+0GjyNbHLlY091d0xo6UL16Ck5Ycannr+yY6H8GNyedCII\\nDuqrpPiNG/XdOmo5tyt/7hD2VpgBxsDD8dtj1tuF9a4nE9FTH+5hB7rPgIOAFt6C\\nAqImlxJs2AdWSMsJZ5YEFGbTVfEHx5paAY10hqCxsBBekwfsu560gcQNirIboVEp\\n5+DIPA91uGL2R5ZIiVaPchqLQfPc+gce+/f3ymf25co+DLuGX06PSxxABsgb+xe5\\n3kV2An0C0PK14oFZpplJTQTQ7R/PqOygtYbk0yCfMqfkNjjKO+3TaWOAPZ0h9EXG\\nKnZn21ADBmDQ2R3fPMK5hg7QQOPdUlRkN5oJXk7HS+Yu2dztarflHJN1jlq0weoq\\n/97na/yr4XjXryhDks2CBVOk9VvukzBjMbdk1MITU7hnTPtmL8Ns3GRvvUJEOGff\\nOoI3qsD+XlcaAvuHcuVpSoa5yOZHD3o9Iy72x/EZq6g=\\n=VVjH\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:01:02.983957Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/remove_star\", - \n \"replies_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/replies\", - \n \"submissions_url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/submissions\", - \n \"url\": \"/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4\", - \n \"uuid\": \"5afc9480-7d30-42b1-9463-4990a940b5d4\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"cowled spaghettini\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVrABEADyyEAEpHHQ/QyHugIEpiDKTa+0bYE6BVNjz19t79qN1zHZoyWY\\nXtRJ4CFa6/VivNW+SAhaghIz5pu++gPCzafWeaurTDK+SppGy6spA1NE6t0minZ8\\nddMCdStcaoRWBl1sHTOCd1OycaAQU8i6URkD/ofVSmgPQvXQDEBD9l4S1EwolVbP\\n7LNfQfEhb0L32pnJWwtulu1cP0Pjz0J00loPsP+B7bHQB9eBCa6Z41pClb4rj8fn\\ndu5g5oIXCxNS3PYT2KCBm6gCoQI/BqbJP+RsbumKi04ApHt+ShzNvlQFO4SEymW0\\nWeIB/KGuyVvUwv0zZnIM7ib7jcA0f+o4MSTYe0h+rhmJGKEoNEhXpRTq3xwdffdr\\nVHmmUCdtmIVNd99CBOAUw/3mupsorCZVOJ/YXdje6jFygNv6ATxLuHYGL2bBVazU\\nNIIkRyLek6Trs4WX0ALeun04KXDA2rBcE/Xjo7/w0OFMhQnXVgUhBTqdIcEuL1Q+\\nGUoecbQJ7O9aSur+Dw59D7yYrw+T5a1YRWWxO7mBidvMDR7oxvvMUFpUbuWBQlnX\\nVmB/QjcB7KwgpVjy0z10ebgYHOCWJ9AN55cD2UjPl95pKvWhLFq1Fcdj3HIFhLAK\\nnJO6ZN+iNKikETBI8sS9gFZlH5aNWm9vYn/MQmo+Vly93+2kgtcXaZBNHQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QjRZVU5WUVZWN1lMRU1GTVVIRFIzV1lOQ1ZZ\\nRkRQRURTM0g0M1RCQkZRTks2WkFHV01HVEYyMlFGT1lYWlhEU0JVM1cyRFpYWkNY\\nN0tEMktZVExPUUNZUzJMTUdFQlYzRVIzT0E1QT0+iQI/BBMBCgApBQJbzlawAhsv\\nBQkB4JiQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQaG1XFldw7iX2Kg/6\\nAoKq5gXEt+kb9koHs6TG40wGSKYfTzwxDta6Nhzy/MUwjUZ3LaO21kP6Ytxz1K7n\\n7nlZeucHQslps1rj9ZTwZDsPSIXYf4GT8Y1XMHJ8EqFKuE7IlvbCRp5GOBe7aGMe\\nw4gfbKN4NZVXeQT3xxDdFnn0PniJ2e3H6ePhCGSEJsInMxIEbbQ9+j+avFhuI5g/\\nPwVi+DDdUirgP/3cVlB1BeoK6/4EqRkYS/JHx34RqKmX1PdqQWRT/HWqpY6I0iiV\\n3JyZQo1lFPTfTLuUvyw6dnggmAjceUdXW2r+4J0LKB2oNJaRc5KQB1v2T2RQCfp5\\nzozo7tCKoyIq1QWiyvsycdAvhmV6JV+b/XCC5CR7ZH/ksatnMgAUbhS1665o4ncC\\nDlr8WuUX+raPChMzUZP95xL3zc/bbRZMwj5eU7NI2EG9IJ89Nmgcr5vhbqu+oQls\\n/vQ/kYuMH8HBOr6+0A1FQuFHQxd16rMUjKokEKvJQ9NLl9EswBJvVcofjMaEbVec\\ng19VYPrSTzdOu/QW3ZBJcfTlvAzuyLEOsNPNgjL/9v/QfUBQzSUXN8Ne8RbElgN5\\neaoVARTQC9WlXWgAM4uxd9BGBp4YYJ6zCydN9f/IFIa/znFPObr33DbDOhrgL1w7\\nYmH5l8Mxpdf5Ny03Ti60IVcvYDz79lGz3K8PwPPUYYg=\\n=C3zc\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:01:05.894221Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/remove_star\", - \n \"replies_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/replies\", - \n \"submissions_url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816/submissions\", - \n \"url\": \"/api/v1/sources/5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816\", - \n \"uuid\": \"5dcf1264-6dd8-44f4-8e19-5cb7f3bc3816\"\n }\n ]\n}\n"} + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"amendable\ + \ oxalate\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ + \ KEY BLOCK-----\\n\\nmQINBFGRfoABEADCT3t+bjtqkXjPdwR9uij7LFmenP1rl4nKNXaVBUTuB9AaDC20\\\ + nK8clNbYM2rXqxk48u1ofIlIy10fK94GY1nIN2OUk9++XZsgwpRfsGOg5dK94cf3G\\nlMNisP+fK+9kR32BPOIOJ9A1gye4/JjVon1JM0XOskC3FvWztS+Pd421nSFuKCHp\\\ + nmtFij1Oi1wrk90Pm8pC2gjkEIi/x4iudJQbtYJ6d2MjdfiA/5OX3U6rWedAa8E5e\\nGlMkVCee3DSjRhvK/lbe/TQgCyeM45G6pgLJupOo1aetVzPTUosLYpzHl9RZpguL\\\ + n2/y168odljHzy3DGJftDwEstx/8kWRYkjUYqyaSfkmJp/f2f70mAzoL3ml1sLXvw\\nA1wEiSSaczDkXL62MRyTpoGVTffDZ2NBN8JLK/SQ8C3UvGq7x0a89TcZ6aqfVyU1\\\ + ntLWMWKmdqvLEU926PsoxLzhGEahdNYRRbFtW4FQKAO97NTTlCL//j4wTXWBLpyD8\\nLBEb6j4l1IvOFG9q3uop9IZhuf8E0n3jafp5FBPC05/i6Wi12rs7gzJIZxcRx+ve\\\ + nWmB/B8xKaiiQxfdMswDQRmvUNIkoMaXPhoznP4L8IWYGthsseFK+rY/RB1o/fwOw\\nnDjvpt/P4L/+M8wtbtmc56nj5GQWOfxgwmaBXVfu0wxrFcYRxSt37nxQiwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T0ZQTVRVSVU1TVZQUDVESFFRVVJWTVBLTkpL\\nNlFZU0s0SUxQTkhNQVRLUFpNQlNBT0E1Tks0VlpPUTMzWE5WNjdLSzdZWlJMQVpX\\\ + nU0RDT1FFS1NQTjY3UFkzSExOUkZVWVhVMjNRWT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQMtLAlDosbglOnA//Y8i65QvX\\\ + n8SDmi+qVDC1lOjDcXTQMSgeSTDW+0XBwJMaQ6rIFaN6NBIudoTwGLYbrgDBmy0CA\\n9qHSIEreng2Hz/EgOPdUMpz0HViDn1EJxvckBBwVKZY684NHMf8f2XVPSvoZj8sA\\\ + nZyi0TpZbVJWGwZPMfTxVNuNuJFuvpUyX769FFiP32Vooxy5wXwvq1Npd0mMRtsMt\\nrnxxOmrzzoq4/nirJg0L0aPHog0ta63t6L5z8OgbtzZs1Su70UtHc+0sxd84xuXV\\\ + nJ8zIGC1iOqum68HzRc7j5JvpkynZJNgy3k2bxuG/OtNuI0CRsY+Pci5WY/Oz0qvk\\nhiF9pKa1uQglbATUi6t9pBTEJCuu2dS6vYHtm+k/FbIoJ7nVrRrgvI+nUqu+aMh9\\\ + ngamKZBdHcVrVccWsxn7nvBFU4heoQVovQ0JuFfxlGAmhIY3gs47ZG7CV9wDrRkrI\\n+RR+MwFq46I1dO8PdY7mEMstpsLhSbE+m2cHy2j3CkQd6hCRwLnIIHy7t8tKZZW6\\\ + nF074MPc0SiFeur1LmO4egL6PzIMYAaaDoWRAzXRb2Kdz50f5qjdvRkTg9Z47vrrC\\n5MiTOSR88XLr25P4Ei6oVwnTDDz9DhFuBhCG+er42T/1VC4udUYqv2cOp8k69Da4\\\ + nbWnUkSalxPHNH5H+PS7R3SJGFhLtgaInKL0=\\n=eEar\\n-----END PGP PUBLIC KEY BLOCK-----\\\ + n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:39.545978Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/submissions\"\ + , \n \"url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\ + , \n \"uuid\": \"6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"unpopular\ + \ immunoassay\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ + \ PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADMxLgS/OCizJBcu37Fy0/irYv6Fd/kgY8FsrNP/3R73YWvlWDK\\\ + nMqZZ27LzXpEQwViiQ/co/dYMBCbcxF/EV9AtTTtcAkhjdQ869EnMwbf+bMKk3aKg\\n24MZcIfP/T7G5dk2z1w51UmOUSq5f7+mCh3aIioPVUsZ3DMzNlXPP8xLBh1Wq+jI\\\ + nZcvkBprlQZ+YeMjSdyrUNi6NlJ9Ex4goUU/h4xKO5GMU5CSmm+foheGqAE/MR8mN\\n7pUhSOrf5i/YTMa6m1SiUlN+QT3pBDXaer72fGskxWbboHBD1l090sJ50aQ0FGnv\\\ + npyqCuqFaMb8bv7YHZ+CAQPvwRQGRMp2gVy0NGJ8j6qmQ7V5KZAlPM/dNn1lY2h8I\\nD0G2VhsRdonsBiwCSpf4WGtoz+nBcvbmm4sbaT2jYvDu/8l5zkpNgL4csXNu7bXg\\\ + nH6cTc60edFDPQtlfI9J3nbNRTF3CZP6U2Jsh9uXKRDjxysxNfrSKSbMInXWOh7Jz\\nw32mES5VNfOKqhngkRnpzAh6bDwG+EjXj7dlOoB2GhNfV46j95YM7NVM38S7s/MM\\\ + n5F8Hcrn5ZRk3d19PLFjinzmsSFkVbCdtymw8/hjidgeayXQe21iZtoLq6d2VMvV7\\nmpdgvHxfo5AOK+qHqvq/PQ2Pc3wULt1OausEyJNauu8FWLd8EYy6InS6LwARAQAB\\\ + ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U0I3RUtIWVhaUlo1T0JFVklFTTZPU0ZXNFlC\\nQkdURlBURE9MSDNPVElBNEQzVEhaQUNNUE9TNTJWNzRSVUJRVTdQQUFRVENaUTJY\\\ + nMzNCT0paTERMNkRFTEg2QjdYRUVPUko1WFZEUT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+rtHWFtfS4baWBAAu/mc8woq\\\ + n78FJrJwys0OAolnhyBelk0tsASwsKUosR9ObRbEwcDAAc0a8sCMZ/bxsxGPG8keJ\\nk5CVfQ5WJk6Jl5wL2xmG+0OHZAwezGDoO6SGtY3H2iPM+Bq4rimnWWbbTrZFx4ny\\\ + nixVj3N4lW9J13NvRnBPz8DmHfPep09lTVgNiIVwvwqsmdxAnMZerzwpjIrdtud+s\\nz+LxVcAFeKmmzQLNYlrP2jsxjIE1gYLEkM10Jm/NuXZaXbyiT56uCdCI4oRti/Q5\\\ + n3NfzZZ7vfUwsr/PMjPMrGyjvtZy2BHoP4i+83wudoHezVomVlYxUsK24d24Ifj6X\\n/hhItJvZIE0YrOxzRaRi19wfTV9IbVH/Y7aOMZJRn0e61HLEGfAa7FiDtpox3T+M\\\ + nX6/NPGhlXphrCO4jjpVBLt1/F1Vz7ZKC60aPzEPCuUtXjTjttOMW/aUE1ktXVT7L\\nz6KixK04cg9CGvBkxAsZ4TGP+hAy3rmvnxn4kG62kzDPEQqBCzlEL6a+LG/LX503\\\ + n/VcazAUIZ12rTwZSV+0EQ9ZAC0q/vIwM17IqMtgeR/OgK7q79Je83D0mx5UUPLZQ\\nNUvrQBGFWLczaVYo69G53U2G4npVVo6f5/0G1dVZtRrnUxwy9mxZZFboHJ0FanjY\\\ + nSevPdl75hJ6kKp+X+278M6CiNm1NWETjCY4=\\n=wgEJ\\n-----END PGP PUBLIC KEY BLOCK-----\\\ + n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:43.241603Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/submissions\"\ + , \n \"url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\ + , \n \"uuid\": \"c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\n }\n ]\n\ + }\n"} headers: - Content-Length: ['5242'] + Content-Length: ['5225'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:01:54 GMT'] + Date: ['Mon, 21 Jan 2019 17:13:03 GMT'] Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMTo1NCBHTVQifX0.Dq_oYg.QlTn_AmPmf04PhAy5RtuDzbd4q4; - HttpOnly; Path=/] - Vary: [Cookie] status: {code: 200, message: OK} - request: body: '{"reply": "-----BEGIN PGP MESSAGE-----\n\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\n=686S\n-----END @@ -48,22 +74,21 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Length: ['926'] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/5afc9480-7d30-42b1-9463-4990a940b5d4/replies + uri: http://localhost:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies response: - body: {string: "{\n \"message\": \"Your reply has been stored\"\n, \"uuid\": \"4efb9719-57f4-4fad-870f-207b1931ac14\"}\n"} + body: {string: "{\n \"filename\": \"5-amendable_oxalate-reply.gpg\", \n \"message\"\ + : \"Your reply has been stored\", \n \"uuid\": \"122f1449-2f4e-46c1-8605-0158fe9f3341\"\ + \n}\n"} headers: - Content-Length: ['46'] + Content-Length: ['145'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:01:54 GMT'] + Date: ['Mon, 21 Jan 2019 17:13:03 GMT'] Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMTo1NCBHTVQifX0.Dq_oYg.QlTn_AmPmf04PhAy5RtuDzbd4q4; - HttpOnly; Path=/] - Vary: [Cookie] status: {code: 201, message: CREATED} version: 1 diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 129b299df..071ee8e0f 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\",\\\"uuid\\\":\\\"4efb9719-57f4-4fad-870f-207b1931ac14\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}"} +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\",\\\"uuid\\\":\\\"4efb9719-57f4-4fad-870f-207b1931ac14\\\"\\n,\\\"filename\\\":\\\"3-starry-eyed_shaping-msg.gpg\\\"}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}"} diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 9bfa7f304..3c8033b37 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -573,8 +573,7 @@ def reply_source(self, source: Source, msg: str, reply_uuid: str = None) -> Repl raise AuthError(data["error"]) if "message" in data and data["message"] == "Your reply has been stored": - if "uuid" in data: - return Reply(uuid=data["uuid"]) + return Reply(uuid=data["uuid"], filename=data["filename"]) raise BaseError("Error handling HTTP response to sending a reply") diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index b85dff947..1b7dcd633 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -56,9 +56,10 @@ def __init__(self, **kwargs) -> None: self.source_uuid = "" # type: str self.uuid = "" # type: str - if ["uuid"] == list(kwargs.keys()): + if {"uuid", "filename"} == set(kwargs.keys()): # Then we are creating an object for fetching from the server. self.uuid = kwargs["uuid"] + self.filename = kwargs["filename"] return for key in [ diff --git a/tests/test_api.py b/tests/test_api.py index 527d6af3f..9bddc7055 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -184,7 +184,10 @@ def test_reply_source(self): with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: data = fobj.read() - self.assertTrue(isinstance(self.api.reply_source(s, data), Reply)) + reply = self.api.reply_source(s, data) + assert isinstance(reply, Reply) + assert reply.uuid + assert reply.filename @vcr.use_cassette("data/test-reply-source-with-uuid.yml") def test_reply_source_with_uuid(self): @@ -193,7 +196,7 @@ def test_reply_source_with_uuid(self): with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: data = fobj.read() - msg_uuid = 'e467868c-1fbb-4b5e-bca2-87944ea83855' + msg_uuid = "e467868c-1fbb-4b5e-bca2-87944ea83855" reply = self.api.reply_source(s, data, msg_uuid) assert reply.uuid == msg_uuid From 0b1fe9e2936f543fd6814c5cb9e86c8f23c3690a Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 25 Jan 2019 09:04:12 +0100 Subject: [PATCH 129/751] fix auth header to use "Token" and not "token" --- sdclientapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 3c8033b37..61ce9ccdd 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -127,7 +127,7 @@ def authenticate(self, totp="") -> bool: def update_auth_header(self): self.auth_header = { - "Authorization": "token " + self.token["token"], + "Authorization": "Token " + self.token["token"], "Content-Type": "application/json", "Accept": "application/json", } From 0b2de02db72b8d4b1ef93815c0ed692c366d8b52 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 25 Jan 2019 09:04:47 +0100 Subject: [PATCH 130/751] updated test cassettes for token fix --- data/test-delete-reply.yml | 6 +++--- data/test-delete-source.yml | 6 +++--- data/test-delete-submission-from-string.yml | 8 ++++---- data/test-delete-submission.yml | 6 +++--- data/test-download-reply.yml | 4 ++-- data/test-download-submission.yml | 6 +++--- data/test-error-unencrypted-reply.yml | 4 ++-- data/test-failed-single-source.yml | 2 +- data/test-flag-source.yml | 6 +++--- data/test-get-all-replies.yml | 2 +- data/test-get-all-submissions.yml | 2 +- data/test-get-current-user.yml | 2 +- data/test-get-replies-from-source.yml | 4 ++-- data/test-get-reply-from-source.yml | 6 +++--- data/test-get-single-source.yml | 4 ++-- data/test-get-sources.yml | 2 +- data/test-get-submission.yml | 6 +++--- data/test-get-submissions.yml | 4 ++-- data/test-get-wrong-submissions.yml | 4 ++-- data/test-reply-source-with-uuid.yml | 4 ++-- data/test-reply-source.yml | 4 ++-- data/test-star-add-remove.yml | 8 ++++---- 22 files changed, 50 insertions(+), 50 deletions(-) diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index 6941307ec..80c148f63 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -46,7 +46,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -69,7 +69,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index 36241bd0d..627c872a1 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -70,7 +70,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index 2b08f7205..c978252db 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -78,7 +78,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -101,7 +101,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 58277c5e2..1e4691ba7 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -45,7 +45,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -68,7 +68,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index a21ef8c4c..ceae626df 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -46,7 +46,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index dc25557dc..4c9d9f133 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -45,7 +45,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -84,7 +84,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index fb595dd54..b586ea8d6 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['18'] Content-Type: [application/json] diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index c43a65f7c..5d4f0fcdf 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index 06f2aebcf..ada9fe02f 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -70,7 +70,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index b26e7d5d1..0e5f8c250 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 519b91171..52a34ae94 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index 9afb3c850..26df5ac13 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index 1388ed31f..9b81bf2c5 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index 44466a724..fb56910e0 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -79,7 +79,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 900503b64..b3f988100 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index c480c172d..f64082bc3 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index 9ce4ec0ec..e2d1b3515 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -78,7 +78,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index f34fff883..6468fcede 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index 23311c7a6..12bd36305 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index 1dba51d6d..5f4f00f46 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -74,7 +74,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Length: ['974'] Content-Type: [application/json] diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index 31ee63e65..ef980d3ea 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -74,7 +74,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] Connection: [keep-alive] Content-Length: ['926'] Content-Type: [application/json] diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 613ab53cb..55eb36cf2 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -4,7 +4,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] @@ -47,7 +47,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -70,7 +70,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] @@ -93,7 +93,7 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] From 990f1637e77f25d26e06205c235b26984bfac645 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 25 Jan 2019 20:53:41 +0530 Subject: [PATCH 131/751] Updates setup.py to 0.0.6 release --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 45d1b8229..3a5a1d707 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.5", + version="0.0.6", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 1594b33f1cc6b7a9ccbbfb7950366b432d879c1b Mon Sep 17 00:00:00 2001 From: heartsucker Date: Wed, 30 Jan 2019 18:29:58 +0100 Subject: [PATCH 132/751] remove explict pins in the pipfile note that we keep urllib3 since we explicitly import that in __init__.p --- Pipfile | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Pipfile b/Pipfile index 2b8930fbc..35dd19eae 100644 --- a/Pipfile +++ b/Pipfile @@ -6,18 +6,14 @@ verify_ssl = true [requires] python_version = "3.5" -[dev-packages] -coverage = "==4.5.1" -markupsafe = "==1.0" -pyparsing = "==2.2.2" -pytz = "==2018.5" -vcrpy = "==2.0.1" -mypy = "==0.641" -pyotp = "==2.2.6" -sphinx = "==1.8.1" -pytest = "==3.9.1" -pytest-cov = "==2.6.0" - [packages] -requests = "==2.20.0" -urllib3 = "==1.24" +requests = "*" +urllib3 = "*" + +[dev-packages] +coverage = "*" +pyotp = "*" +pytest = "*" +pytest-cov = "*" +sphinx = "*" +vcrpy = "*" From 1c7c5a4af2e092597dfb407702231909fae9c582 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 28 Jan 2019 19:43:27 +0100 Subject: [PATCH 133/751] updated ci to use --keep-outdated flag --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 570cdaa1c..5d50c4776 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: - run: command: | sudo pip install pipenv - pipenv install -d + pipenv install --keep-outdated --dev - save_cache: key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} paths: @@ -30,5 +30,5 @@ jobs: - store_artifacts: path: test-results - run: - command: pipenv check + command: pipenv check --keep-outdated destination: tr1 From fc9fa8c8c2ad608e0880a35b5dfedba9c487e68c Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 28 Jan 2019 19:43:43 +0100 Subject: [PATCH 134/751] added --keep-outdated not to readme --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 21317d8c4..7b7b934f1 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,8 @@ The SDK is currently used by the [SecureDrop Client](https://github.com/freedomo ### Development This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. -This is a Python 3 project. - -We are using [mypy](http://mypy-lang.org) for type annotation checks. +This is a Python 3 project. When using `pipenv` locally, ensure you used the `--keep-outdated` flag to prevent +dependencies from being unnecessarily upgraded during normal development. We cover all the API calls supported by the SecureDrop Journalist Interface API. From 6d074e6a53e1091505032cbf4f96a41dc08295e6 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 28 Jan 2019 19:44:54 +0100 Subject: [PATCH 135/751] updated makefile to not include pipenv invocation --- .circleci/config.yml | 3 +-- Makefile | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5d50c4776..9c7890f56 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,8 +23,7 @@ jobs: - "/usr/local/bin" - "/usr/local/lib/python3.5/site-packages" - run: - command: | - pipenv run python -m unittest discover -v tests/ + command: pipenv run make test - store_test_results: path: test-results - store_artifacts: diff --git a/Makefile b/Makefile index cd5d80638..30f8546af 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ format: ## Run the formatter TESTS ?= tests .PHONY: test test: ## Run the test suite - @pipenv run python -m pytest -v --cov sdclientapi --cov-report html --cov-report term-missing $(TESTS) + @python -m pytest -v --cov sdclientapi --cov-report html --cov-report term-missing $(TESTS) .PHONY: open-coverage-report open-coverage-report: ## Open the coverage report in your browser From d29027bc3df97b4f74310a06cd09d2c4b7a3dbfb Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 28 Jan 2019 20:06:12 +0100 Subject: [PATCH 136/751] added urllib3 to setup.py note that we keep urllib3 since we explicitly import that in __init__.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3a5a1d707..65e8aa345 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ long_description=long_description, long_description_content_type="text/markdown", license="GPLv3+", - install_requires=["requests"], + install_requires=["requests", "urllib3"], python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-sdk", packages=setuptools.find_packages(exclude=["docs", "tests"]), From 04e524eabee31215d8303e7332f8844bf6737940 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:25:46 +0100 Subject: [PATCH 137/751] added flake8/mypy to dev dependencies --- Pipfile | 2 + Pipfile.lock | 224 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 132 insertions(+), 94 deletions(-) diff --git a/Pipfile b/Pipfile index 35dd19eae..544bb9227 100644 --- a/Pipfile +++ b/Pipfile @@ -12,6 +12,8 @@ urllib3 = "*" [dev-packages] coverage = "*" +flake8 = "*" +mypy = "*" pyotp = "*" pytest = "*" pytest-cov = "*" diff --git a/Pipfile.lock b/Pipfile.lock index a3a394869..7bd95e888 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "66165b2c3cd742dd3a6763416d2b0f0de98d9878c26b48987fe8983380a0ab20" + "sha256": "465ada309c90d437e5e6c38d3b7782430f03ffd987df26fd50f3a308ab478a4c" }, "pipfile-spec": 6, "requires": { @@ -18,10 +18,10 @@ "default": { "certifi": { "hashes": [ - "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", - "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" + "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", + "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" ], - "version": "==2018.10.15" + "version": "==2018.11.29" }, "chardet": { "hashes": [ @@ -85,10 +85,10 @@ }, "certifi": { "hashes": [ - "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", - "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" + "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", + "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" ], - "version": "==2018.10.15" + "version": "==2018.11.29" }, "chardet": { "hashes": [ @@ -144,6 +144,21 @@ ], "version": "==0.14" }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "flake8": { + "hashes": [ + "sha256:545c8faa8425cafcd9800538b4fa324a543cdec0ac273cf698ddd6a954123401", + "sha256:e9ca1bb84d76511315e565a2cdd292d916b08b0d639aa3e323d8c7d895a03897" + ], + "index": "pypi", + "version": "==3.7.1" + }, "idna": { "hashes": [ "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", @@ -172,47 +187,54 @@ "index": "pypi", "version": "==1.0" }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, "more-itertools": { "hashes": [ - "sha256:c187a73da93e7a8acc0001572aebc7e3c69daf7bf6881a2cea10650bd4420092", - "sha256:c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e", - "sha256:fcbfeaea0be121980e15bc97b3817b5202ca73d0eae185b4550cbfce2a3ebb3d" + "sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4", + "sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc", + "sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9" ], - "version": "==4.3.0" + "version": "==5.0.0" }, "multidict": { "hashes": [ - "sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b", - "sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64", - "sha256:136f5a4a6a4adeacc4dc820b8b22f0a378fb74f326e259c54d1817639d1d40a0", - "sha256:14906ad3347c7d03e9101749b16611cf2028547716d0840838d3c5e2b3b0f2d3", - "sha256:1ade4a3b71b1bf9e90c5f3d034a87fe4949c087ef1f6cd727fdd766fe8bbd121", - "sha256:22939a00a511a59f9ecc0158b8db728afef57975ce3782b3a265a319d05b9b12", - "sha256:2b86b02d872bc5ba5b3a4530f6a7ba0b541458ab4f7c1429a12ac326231203f7", - "sha256:3c11e92c3dfc321014e22fb442bc9eb70e01af30d6ce442026b0c35723448c66", - "sha256:4ba3bd26f282b201fdbce351f1c5d17ceb224cbedb73d6e96e6ce391b354aacc", - "sha256:4c6e78d042e93751f60672989efbd6a6bc54213ed7ff695fff82784bbb9ea035", - "sha256:4d80d1901b89cc935a6cf5b9fd89df66565272722fe2e5473168927a9937e0ca", - "sha256:4fcf71d33178a00cc34a57b29f5dab1734b9ce0f1c97fb34666deefac6f92037", - "sha256:52f7670b41d4b4d97866ebc38121de8bcb9813128b7c4942b07794d08193c0ab", - "sha256:5368e2b7649a26b7253c6c9e53241248aab9da49099442f5be238fde436f18c9", - "sha256:5bb65fbb48999044938f0c0508e929b14a9b8bf4939d8263e9ea6691f7b54663", - "sha256:60672bb5577472800fcca1ac9dae232d1461db9f20f055184be8ce54b0052572", - "sha256:669e9be6d148fc0283f53e17dd140cde4dc7c87edac8319147edd5aa2a830771", - "sha256:6a0b7a804e8d1716aa2c72e73210b48be83d25ba9ec5cf52cf91122285707bb1", - "sha256:79034ea3da3cf2a815e3e52afdc1f6c1894468c98bdce5d2546fa2342585497f", - "sha256:79247feeef6abcc11137ad17922e865052f23447152059402fc320f99ff544bb", - "sha256:81671c2049e6bf42c7fd11a060f8bc58f58b7b3d6f3f951fc0b15e376a6a5a98", - "sha256:82ac4a5cb56cc9280d4ae52c2d2ebcd6e0668dd0f9ef17f0a9d7c82bd61e24fa", - "sha256:9436267dbbaa49dad18fbbb54f85386b0f5818d055e7b8e01d219661b6745279", - "sha256:94e4140bb1343115a1afd6d84ebf8fca5fb7bfb50e1c2cbd6f2fb5d3117ef102", - "sha256:a2cab366eae8a0ffe0813fd8e335cf0d6b9bb6c5227315f53bb457519b811537", - "sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f", - "sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2", - "sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306", - "sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd" - ], - "version": "==4.4.2" + "sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f", + "sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3", + "sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef", + "sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b", + "sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73", + "sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc", + "sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3", + "sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd", + "sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351", + "sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941", + "sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d", + "sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1", + "sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b", + "sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a", + "sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3", + "sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7", + "sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0", + "sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0", + "sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014", + "sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5", + "sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036", + "sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d", + "sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a", + "sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce", + "sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1", + "sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a", + "sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9", + "sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7", + "sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b" + ], + "version": "==4.5.2" }, "mypy": { "hashes": [ @@ -231,25 +253,25 @@ }, "packaging": { "hashes": [ - "sha256:0886227f54515e592aaa2e5a553332c73962917f2831f1b0f9b9f4380a4b9807", - "sha256:f95a1e147590f204328170981833854229bb2912ac3d5f89e2a8ccd2834800c9" + "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", + "sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3" ], - "version": "==18.0" + "version": "==19.0" }, "pathlib2": { "hashes": [ - "sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83", - "sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a" + "sha256:25199318e8cc3c25dcb45cbe084cc061051336d5a9ea2a12448d3d8cb748f742", + "sha256:5887121d7f7df3603bca2f710e7219f3eca0eb69e0b7cc6e0a022e155ac931a7" ], "markers": "python_version < '3.6'", - "version": "==2.3.2" + "version": "==2.3.3" }, "pluggy": { "hashes": [ - "sha256:447ba94990e8014ee25ec853339faf7b0fc8050cdc3289d4d71f7f410fb90095", - "sha256:bde19360a8ec4dfd8a20dcb811780a30998101f078fc7ded6162f0076f50508f" + "sha256:8ddc32f03971bfdf900a81961a48ccf2fb677cf7715108f85295c67405798616", + "sha256:980710797ff6a041e9a73a5787804f848996ecaa6f8a1b1e08224a5894f2074a" ], - "version": "==0.8.0" + "version": "==0.8.1" }, "py": { "hashes": [ @@ -258,12 +280,26 @@ ], "version": "==1.7.0" }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pyflakes": { + "hashes": [ + "sha256:5e8c00e30c464c99e0b501dc160b13a14af7f27d4dffb529c556e30a159e231d", + "sha256:f277f9ca3e55de669fba45b7393a1449009cff5a37d1af10ebb76c52765269cd" + ], + "version": "==2.1.0" + }, "pygments": { "hashes": [ - "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", - "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" + "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", + "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d" ], - "version": "==2.2.0" + "version": "==2.3.1" }, "pyotp": { "hashes": [ @@ -331,10 +367,10 @@ }, "six": { "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" ], - "version": "==1.11.0" + "version": "==1.12.0" }, "snowballstemmer": { "hashes": [ @@ -360,31 +396,29 @@ }, "typed-ast": { "hashes": [ - "sha256:0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", - "sha256:10703d3cec8dcd9eef5a630a04056bbc898abc19bac5691612acba7d1325b66d", - "sha256:1f6c4bd0bdc0f14246fd41262df7dfc018d65bb05f6e16390b7ea26ca454a291", - "sha256:25d8feefe27eb0303b73545416b13d108c6067b846b543738a25ff304824ed9a", - "sha256:29464a177d56e4e055b5f7b629935af7f49c196be47528cc94e0a7bf83fbc2b9", - "sha256:2e214b72168ea0275efd6c884b114ab42e316de3ffa125b267e732ed2abda892", - "sha256:3e0d5e48e3a23e9a4d1a9f698e32a542a4a288c871d33ed8df1b092a40f3a0f9", - "sha256:519425deca5c2b2bdac49f77b2c5625781abbaf9a809d727d3a5596b30bb4ded", - "sha256:57fe287f0cdd9ceaf69e7b71a2e94a24b5d268b35df251a88fef5cc241bf73aa", - "sha256:668d0cec391d9aed1c6a388b0d5b97cd22e6073eaa5fbaa6d2946603b4871efe", - "sha256:68ba70684990f59497680ff90d18e756a47bf4863c604098f10de9716b2c0bdd", - "sha256:6de012d2b166fe7a4cdf505eee3aaa12192f7ba365beeefaca4ec10e31241a85", - "sha256:79b91ebe5a28d349b6d0d323023350133e927b4de5b651a8aa2db69c761420c6", - "sha256:8550177fa5d4c1f09b5e5f524411c44633c80ec69b24e0e98906dd761941ca46", - "sha256:898f818399cafcdb93cbbe15fc83a33d05f18e29fb498ddc09b0214cdfc7cd51", - "sha256:94b091dc0f19291adcb279a108f5d38de2430411068b219f41b343c03b28fb1f", - "sha256:a26863198902cda15ab4503991e8cf1ca874219e0118cbf07c126bce7c4db129", - "sha256:a8034021801bc0440f2e027c354b4eafd95891b573e12ff0418dec385c76785c", - "sha256:bc978ac17468fe868ee589c795d06777f75496b1ed576d308002c8a5756fb9ea", - "sha256:c05b41bc1deade9f90ddc5d988fe506208019ebba9f2578c622516fd201f5863", - "sha256:c9b060bd1e5a26ab6e8267fd46fc9e02b54eb15fffb16d112d4c7b1c12987559", - "sha256:edb04bdd45bfd76c8292c4d9654568efaedf76fe78eb246dde69bdb13b2dad87", - "sha256:f19f2a4f547505fe9072e15f6f4ae714af51b5a681a97f187971f50c283193b6" - ], - "version": "==1.1.0" + "sha256:0cf0c406af2a6472a02254fe1ced40cb81a7c1215b7ceba88a3bb9c3a864f851", + "sha256:1b784cd3c6778cd7b99afb41ddcaa1eb5b35a399210db7fcf24ed082670e0070", + "sha256:2d7a322c1df6cccff2381c0475c1ebf82d3e9a331e48ed4ea89bbc72a8dedca6", + "sha256:4304399ff89452871348f6fb7a7112454cd508fbe3eb49b5ed711cce9b99fe9e", + "sha256:4658aebc30c0af80e63b579e917c04b592bdf10ef40da381b2fd179075b5d1b6", + "sha256:471a7f12e55ad22f7a4bb2c3e62e39e3ab78008b24c61c48c9042e63b7359bb9", + "sha256:57cb23412dac214383c6b6f0f7b0aec2d0c001a936af20f0b53542bbe4ba08a7", + "sha256:5eb14e6b3aa5ff5d7e964b978a718227b5576b3965f1dd71dd055f71054233a5", + "sha256:8219b6147af4d609096b6db2c797281e19fd3f7232ef35932bc74a812ff417a0", + "sha256:8a7e9635cf0aaca04b2a4d4b3501c0dbc5c49a140b2e55b00e218d41ed2a69c8", + "sha256:935157ada4aa115d61c59e759e43c5862b04d19ffe6fe5c9d735716587535cb7", + "sha256:9525f4cbe3eb7b9e19a87c765ca9bbc1147ce18f75059e15138eb7fc59ce02e3", + "sha256:99c140583eef6b50f3de4af44718a4fc63108671b29c468b5ff83ed383facf6d", + "sha256:9e358ce6d4c43a90c15b99b76261adc852998680628c780f26fd64bc21adb9fa", + "sha256:aaf63a024b54d2788cff3400de79009ee8a23594b581d4f33d90b7c67f8c05bd", + "sha256:c3313b3fa1b6b722866eda370c14fd8f4962b6bcd1f6d43f42d6818a8b29d998", + "sha256:c9342947e5f3480473d836754d69965a12ac2237d99ae85d1e3fdd1c1722669f", + "sha256:cb1c7e5b3195103f5a784db7969fc55463cfae9b354e3b97cc219d32293d5e65", + "sha256:d2d2cce74165cae2663167c921e331fb0eecfff2e93254dfdb16beb99716e519", + "sha256:d6fc3b9fbf67d556223aa5493501022e1d585b9a1892fa87ba1257627763c461", + "sha256:fa4eafaa57074958f065c2a6222d8f11162739f8c9db125472a1f04794a0b91d" + ], + "version": "==1.1.2" }, "urllib3": { "hashes": [ @@ -404,24 +438,26 @@ }, "wrapt": { "hashes": [ - "sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6" + "sha256:4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533" ], - "version": "==1.10.11" + "version": "==1.11.1" }, "yarl": { "hashes": [ - "sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9", - "sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee", - "sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308", - "sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357", - "sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78", - "sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8", - "sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1", - "sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4", - "sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7" + "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9", + "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f", + "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb", + "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320", + "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842", + "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0", + "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829", + "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310", + "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4", + "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8", + "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1" ], "markers": "python_version >= '3.4'", - "version": "==1.2.6" + "version": "==1.3.0" } } } From 0a5f518250c421b4d91e41cc416c94ee14fdd7cc Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:26:12 +0100 Subject: [PATCH 138/751] added lint and type check make targts --- Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Makefile b/Makefile index 30f8546af..ae6e3460e 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,17 @@ TESTS ?= tests test: ## Run the test suite @python -m pytest -v --cov sdclientapi --cov-report html --cov-report term-missing $(TESTS) +.PHONY: lint +lint: ## Run the flake8 lints + @flake8 sdclientapi tests + +.PHONY: mypy +mypy: ## Run the mypy typechecker + @mypy sdclientapi + +.PHONY: check +check: lint mypy test ## Run all checks and tests + .PHONY: open-coverage-report open-coverage-report: ## Open the coverage report in your browser @$(OPEN) htmlcov/index.html From 663f654f025d70055f2f665563771d21cd6e54f5 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:26:25 +0100 Subject: [PATCH 139/751] added mypy cache to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8faf865de..37e689d01 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ testtoken.json +.mypy_cache # Byte-compiled / optimized / DLL files __pycache__/ From c8686edc7f53a60675337d64aa66cd76ae8e8267 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:26:47 +0100 Subject: [PATCH 140/751] added flake8/mypy config options --- setup.cfg | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..69c7cb933 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,18 @@ +[flake8] +max_line_length = 100 + +[mypy] +python_version = 3.5 +show_column_numbers = True +show_error_context = True +disallow_subclassing_any = True +disallow_untyped_calls = True +disallow_untyped_defs = True +disallow_incomplete_defs = True +check_untyped_defs = True +disallow_untyped_decorators = True +no_implicit_optional = True +warn_redundant_casts = True +warn_return_any = True +warn_unused_configs = True +warn_unused_ignores = True From 15d42c8e8f7d3e4c7a7ce3397b2bb1a13c3443d6 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:27:18 +0100 Subject: [PATCH 141/751] renamed utils.py --- tests/{utils/__init__.py => utils.py} | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) rename tests/{utils/__init__.py => utils.py} (96%) diff --git a/tests/utils/__init__.py b/tests/utils.py similarity index 96% rename from tests/utils/__init__.py rename to tests/utils.py index 93527120f..e7320e569 100644 --- a/tests/utils/__init__.py +++ b/tests/utils.py @@ -1,10 +1,8 @@ -import os import json -from pprint import pprint -from sdclientapi import json_query +import os from unittest.mock import MagicMock, patch -from typing import Optional, Dict, List, Tuple +from sdclientapi import json_query # We are making calls to securedrop.Proxy qrexec service # in the QubesOS to get the data from the server. This is difficult to test @@ -40,7 +38,7 @@ def internal_sideeffect(*args, **kwargs): python_args["body"] = json.dumps(value, sort_keys=True) newargs = json.dumps(python_args, sort_keys=True) arguments = (newargs,) - except: + except Exception: pass # Means no body in the call # Now remove the authorization token from the key @@ -52,7 +50,7 @@ def internal_sideeffect(*args, **kwargs): python_args["headers"] = json.dumps(value, sort_keys=True) newargs = json.dumps(python_args, sort_keys=True) arguments = (newargs,) - except Exception as err: + except Exception: pass # Means no Authorization token in the call key = arguments[0] + "+" + str(CALLNUMBER) From 5ef77f514ad3bb17bb7b4a02ec5105cc67d894ec Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:27:37 +0100 Subject: [PATCH 142/751] added linting and type checking to ci --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9c7890f56..6df16bf3a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,7 +23,7 @@ jobs: - "/usr/local/bin" - "/usr/local/lib/python3.5/site-packages" - run: - command: pipenv run make test + command: pipenv run make check - store_test_results: path: test-results - store_artifacts: From bb8896936fe26649908a5dda26cb347e76613712 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Thu, 31 Jan 2019 21:28:26 +0100 Subject: [PATCH 143/751] mostly fix type checking and linting --- sdclientapi/__init__.py | 138 +++++++++++++++++++++------------- sdclientapi/sdlocalobjects.py | 34 +++++---- tests/test_api.py | 18 +++-- tests/test_apiproxy.py | 12 +-- 4 files changed, 119 insertions(+), 83 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 61ce9ccdd..317604a44 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,20 +1,26 @@ -from pprint import pprint -import os import configparser import json +import os import requests +from datetime import datetime from subprocess import PIPE, Popen +from typing import List, Tuple, Dict, Optional, Any from urllib.parse import urljoin -from typing import Optional, Dict, List, Tuple - -from .sdlocalobjects import * - +from .sdlocalobjects import ( + BaseError, + WrongUUIDError, + AuthError, + ReplyError, + Source, + Reply, + Submission, +) proxyvmname = "sd-proxy" -def json_query(data): +def json_query(data: str) -> str: """ Takes a json based query and passes to the network proxy. Returns the JSON output from the proxy. @@ -25,7 +31,7 @@ def json_query(data): if os.path.exists("/etc/sd-sdk.conf"): config.read("/etc/sd-sdk.conf") proxyvmname = config["proxy"]["name"] - except: + except Exception: pass # We already have a default name p = Popen( @@ -35,8 +41,8 @@ def json_query(data): stderr=PIPE, ) p.stdin.write(data.encode("utf-8")) - d = p.communicate() - output = d[0].decode("utf-8") + stdout, _ = p.communicate() # type: (bytes, bytes) + output = stdout.decode("utf-8") return output.strip() @@ -51,24 +57,43 @@ class API: :returns: An object of API class. """ - def __init__(self, address, username, passphrase, totp, proxy=False) -> None: + def __init__( + self, + address: str, + username: str, + passphrase: str, + totp: str, + proxy: bool = False, + ) -> None: """ Primary API class, this is the only thing which will make network call. """ - self.server = address # type: str - self.username = username # type: str - self.passphrase = passphrase # type: str - self.totp = totp # type: str - self.token = {"token": "", "expiration": ""} - self.auth_header = {"Authorization": ""} # type: Dict + self.server = address + self.username = username + self.passphrase = passphrase + self.totp = totp + self.token = None # type: Optional[str] + self.token_expiration = None # type: Optional[datetime] + self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool - def _send_json_request(self, method, path_query, body=None, headers=None): + def _send_json_request( + self, + method: str, + path_query: str, + body: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + ) -> Tuple[Any, int, Dict[str, str]]: + if self.proxy: # We are using the Qubes securedrop-proxy if method == "POST": - data = {"method": method, "path_query": path_query, "body": body} - if headers: + data = { + "method": method, + "path_query": path_query, + "body": body, + } # type: Dict[str, Any] + if headers is not None and headers: data["headers"] = headers elif method == "GET" or method == "DELETE": data = {"method": method, "path_query": path_query, "headers": headers} @@ -94,14 +119,15 @@ def _send_json_request(self, method, path_query, body=None, headers=None): return result, result.status_code, result.headers return result.json(), result.status_code, result.headers - def authenticate(self, totp="") -> bool: + def authenticate(self, totp: Optional[str] = None) -> None: """ Authenticate the user and fetches the token from the server. :returns: True if authentication is successful, raise AuthError otherwise. """ - if not totp: + if totp is None: totp = self.totp + user_data = { "username": self.username, "passphrase": self.passphrase, @@ -118,19 +144,21 @@ def authenticate(self, totp="") -> bool: ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") - if not "expiration" in token_data: + if "expiration" not in token_data: raise AuthError("Authentication error") - self.token = token_data + self.token = token_data["token"] + self.token_expiration = datetime.strptime( + token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) self.update_auth_header() - return True - - def update_auth_header(self): - self.auth_header = { - "Authorization": "Token " + self.token["token"], - "Content-Type": "application/json", - "Accept": "application/json", - } + def update_auth_header(self) -> None: + if self.token is not None: + self.req_headers = { + "Authorization": "Token " + self.token, + "Content-Type": "application/json", + "Accept": "application/json", + } def get_sources(self) -> List[Source]: """ @@ -143,7 +171,7 @@ def get_sources(self) -> List[Source]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -172,7 +200,7 @@ def get_source(self, source: Source) -> Source: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -210,7 +238,7 @@ def delete_source(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -252,7 +280,7 @@ def add_star(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -275,7 +303,7 @@ def remove_star(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -299,7 +327,7 @@ def get_submissions(self, source: Source) -> List[Submission]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -334,7 +362,7 @@ def get_submission(self, submission: Submission) -> Submission: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -371,7 +399,7 @@ def get_all_submissions(self) -> List[Submission]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -405,7 +433,7 @@ def delete_submission(self, submission: Submission) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -457,7 +485,7 @@ def download_submission( try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -500,7 +528,7 @@ def flag_source(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -514,7 +542,7 @@ def flag_source(self, source: Source) -> bool: return True - def get_current_user(self): + def get_current_user(self) -> Any: """ Returns a dictionary of the current user data. @@ -531,7 +559,7 @@ def get_current_user(self): try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) except json.decoder.JSONDecodeError: @@ -542,10 +570,12 @@ def get_current_user(self): return data - def reply_source(self, source: Source, msg: str, reply_uuid: str = None) -> Reply: + def reply_source( + self, source: Source, msg: str, reply_uuid: Optional[str] = None + ) -> Reply: """ - This method is used to reply to a given source. The message should be preencrypted with the source's - GPG public key. + This method is used to reply to a given source. The message should be preencrypted with the + source's GPG public key. :param source: Source object we want to reply. :param msg: Encrypted message with Source's GPG public key. @@ -560,7 +590,7 @@ def reply_source(self, source: Source, msg: str, reply_uuid: str = None) -> Repl try: data, status_code, headers = self._send_json_request( - method, path_query, body=json.dumps(reply), headers=self.auth_header + method, path_query, body=json.dumps(reply), headers=self.req_headers ) if status_code == 400: @@ -589,7 +619,7 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -621,7 +651,7 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -648,7 +678,7 @@ def get_all_replies(self) -> List[Reply]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) except json.decoder.JSONDecodeError: @@ -686,7 +716,7 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: @@ -735,7 +765,7 @@ def delete_reply(self, reply: Reply) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.auth_header + method, path_query, headers=self.req_headers ) if status_code == 404: diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index 1b7dcd633..a3d79ceda 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -1,3 +1,9 @@ +import typing + +if typing.TYPE_CHECKING: + from typing import Dict + + class BaseError(Exception): pass @@ -5,38 +11,38 @@ class BaseError(Exception): class ReplyError(BaseError): "For errors on reply messages" - def __init__(self, message): + def __init__(self, message: str) -> None: self.msg = message - def __str__(self): + def __str__(self) -> str: return repr(self.msg) class WrongUUIDError(BaseError): "For missing UUID, can be for source or submission" - def __init__(self, message): + def __init__(self, message: str) -> None: self.msg = message - def __str__(self): + def __str__(self) -> str: return repr(self.msg) class AuthError(BaseError): "For Authentication errors" - def __init__(self, message): + def __init__(self, message: str) -> None: self.msg = message - def __str__(self): + def __str__(self) -> str: return repr(self.msg) class AttributeError(BaseError): - def __init__(self, message): + def __init__(self, message: str) -> None: self.msg = message - def __str__(self): + def __str__(self) -> str: return repr(self.msg) @@ -45,7 +51,7 @@ class Reply: This class represents a reply to the source. """ - def __init__(self, **kwargs) -> None: + def __init__(self, **kwargs) -> None: # type: ignore self.filename = "" # type: str self.journalist_username = "" # type: str self.journalist_uuid = "" # type: str @@ -72,7 +78,7 @@ def __init__(self, **kwargs) -> None: "source_url", "uuid", ]: - if not key in kwargs: + if key not in kwargs: AttributeError("Missing key {}".format(key)) setattr(self, key, kwargs[key]) @@ -86,7 +92,7 @@ class Submission: This class represents a submission object in the server. """ - def __init__(self, **kwargs) -> None: + def __init__(self, **kwargs) -> None: # type: ignore self.download_url = "" # type: str self.filename = "" # type: str self.is_read = False # type: bool @@ -110,7 +116,7 @@ def __init__(self, **kwargs) -> None: "submission_url", "uuid", ]: - if not key in kwargs: + if key not in kwargs: AttributeError("Missing key {}".format(key)) setattr(self, key, kwargs[key]) _, self.source_uuid = self.source_url.rsplit("/", 1) @@ -121,7 +127,7 @@ class Source: This class represents a source object in the server. """ - def __init__(self, **kwargs): + def __init__(self, **kwargs) -> None: # type: ignore self.add_star_url = "" # type: str self.interaction_count = 0 # type: int self.is_flagged = False # type: bool @@ -158,6 +164,6 @@ def __init__(self, **kwargs): "url", "uuid", ]: - if not key in kwargs: + if key not in kwargs: AttributeError("Missing key {}".format(key)) setattr(self, key, kwargs[key]) diff --git a/tests/test_api.py b/tests/test_api.py index 9bddc7055..290817f38 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,5 +1,3 @@ -import hashlib -import json import os import pyotp import shutil @@ -7,10 +5,16 @@ import time import unittest import vcr -from pprint import pprint -from sdclientapi import * -from utils import * +from sdclientapi import API +from sdclientapi.sdlocalobjects import ( + BaseError, + WrongUUIDError, + ReplyError, + Reply, + Source, +) +from utils import load_auth, save_auth class TestAPI(unittest.TestCase): @@ -212,7 +216,7 @@ def test_download_submission(self): # now let us read the downloaded file with open(filepath, "rb") as fobj: - data = fobj.read() + fobj.read() # Now the submission should have is_read as True. @@ -256,7 +260,7 @@ def test_download_reply(self): # now let us read the downloaded file with open(filepath, "rb") as fobj: - data = fobj.read() + fobj.read() # Let us remove the temporary directory shutil.rmtree(tmpdir) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 32cfd2fea..3e98ca684 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,15 +1,11 @@ -from pprint import pprint import os +import pyotp import time -import json -import hashlib -import shutil -import tempfile import unittest -from sdclientapi import * -from utils import * -import pyotp +from sdclientapi import API +from sdclientapi.sdlocalobjects import BaseError, WrongUUIDError, ReplyError, Source +from utils import load_auth, save_auth, dastollervey_datasaver class TestAPIProxy(unittest.TestCase): From 8e2c9658117af9f12f2b707c30470c6a29cf80dc Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 8 Feb 2019 12:46:50 +0100 Subject: [PATCH 144/751] updated pipenv usage --- docs/development.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development.rst b/docs/development.rst index ac40b462d..e202a1815 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -9,7 +9,7 @@ environment. The second command is to enable the virtual environment. :: - pipenv install + pipenv sync --dev pipenv shell From b6b14f2c60b8373d8099dd18366be1e71ac31557 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Fri, 8 Feb 2019 12:47:03 +0100 Subject: [PATCH 145/751] update ci to prevent updating dependencies --- .circleci/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6df16bf3a..a2c2ec375 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,8 +14,9 @@ jobs: key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} - run: command: | + set -e sudo pip install pipenv - pipenv install --keep-outdated --dev + pipenv sync --dev - save_cache: key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} paths: @@ -29,5 +30,5 @@ jobs: - store_artifacts: path: test-results - run: - command: pipenv check --keep-outdated + command: pipenv check destination: tr1 From 837dafe61a6b585653d63ce57d4e6ae715f03aa6 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 25 Jan 2019 11:29:35 -0800 Subject: [PATCH 146/751] ci: add test job vs external API also adding it as a nightly job in case changes are made on the API side --- .circleci/config.yml | 70 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a2c2ec375..69310962b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,6 @@ version: 2 jobs: - build: + test-run: working_directory: ~/sdclientapi docker: - image: circleci/python:3.5.3 @@ -13,6 +13,7 @@ jobs: - restore_cache: key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} - run: + name: Install dependencies command: | set -e sudo pip install pipenv @@ -24,11 +25,68 @@ jobs: - "/usr/local/bin" - "/usr/local/lib/python3.5/site-packages" - run: + name: Run linters command: pipenv run make check - - store_test_results: - path: test-results - - store_artifacts: - path: test-results - run: + name: Run tests + command: | + pipenv run python -m unittest discover -v tests/ + - run: + name: Check for known CVEs command: pipenv check -destination: tr1 + test-against-latest-api: + working_directory: ~/project + machine: + enabled: true + environment: + DOCKER_API_VERSION: 1.23 + steps: + - checkout + - run: + name: Install dependencies + command: | + sudo pip install pipenv + pipenv install -d + - run: + name: Download SecureDrop server code + command: git clone https://github.com/freedomofpress/securedrop.git + - run: + name: Start spinning up the SecureDrop server container + command: | + cd securedrop + make -C securedrop dev + background: true + - run: # As suggested in https://discuss.circleci.com/t/prevent-race-conditions-by-waiting-for-services-with-dockerize/11215 + name: Install dockerize + command: | + wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && + sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && + rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz + environment: + DOCKERIZE_VERSION: v0.6.1 + - run: + name: Wait for server to be up + command: | + dockerize -wait tcp://127.0.0.1:8080 -timeout 15m + sleep 10 + - run: + name: Remove VCR cassettes and run tests against latest API + command: | + rm data/*.yml # Removing VCR cassettes + pipenv run python -m unittest discover -v tests/ +workflows: + version: 2 + securedrop_ci: + jobs: + - test-run + - test-against-latest-api + nightly: + triggers: + - schedule: + cron: "0 4 * * *" + filters: + branches: + only: + - master + jobs: + - test-against-latest-api From e261a3f937a1e88e56af9b1b8d0b9e6cfce671b1 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 25 Jan 2019 14:30:18 -0800 Subject: [PATCH 147/751] tests: update server host --- tests/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_api.py b/tests/test_api.py index 290817f38..a17282764 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -23,7 +23,7 @@ def setUp(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" - self.server = "http://localhost:8081/" + self.server = "http://127.0.0.1:8081/" self.api = API(self.server, self.username, self.password, str(self.totp.now())) for i in range(3): try: From 293a39e408c51843ce5cafdb6e483f729b18310d Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 25 Jan 2019 17:18:28 -0800 Subject: [PATCH 148/751] test: update cassettes to point to 127.0.0.1 --- data/test-delete-reply.yml | 6 +++--- data/test-delete-source.yml | 6 +++--- data/test-delete-submission-from-string.yml | 8 ++++---- data/test-delete-submission.yml | 6 +++--- data/test-download-reply.yml | 4 ++-- data/test-download-submission.yml | 6 +++--- data/test-error-unencrypted-reply.yml | 4 ++-- data/test-failed-single-source.yml | 2 +- data/test-flag-source.yml | 6 +++--- data/test-get-all-replies.yml | 2 +- data/test-get-all-submissions.yml | 2 +- data/test-get-current-user.yml | 2 +- data/test-get-replies-from-source.yml | 4 ++-- data/test-get-reply-from-source.yml | 6 +++--- data/test-get-single-source.yml | 4 ++-- data/test-get-sources.yml | 2 +- data/test-get-submission.yml | 6 +++--- data/test-get-submissions.yml | 4 ++-- data/test-get-wrong-submissions.yml | 4 ++-- data/test-reply-source-with-uuid.yml | 4 ++-- data/test-reply-source.yml | 4 ++-- data/test-setup.yml | 2 +- data/test-star-add-remove.yml | 8 ++++---- 23 files changed, 51 insertions(+), 51 deletions(-) diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index 80c148f63..269321b0b 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/replies + uri: http://127.0.0.1:8081/api/v1/replies response: body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-die-hard_chancellor-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/68603968-b307-4607-80f7-cc7856f90f2f + uri: http://127.0.0.1:8081/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/68603968-b307-4607-80f7-cc7856f90f2f response: body: {string: "{\n \"message\": \"Reply deleted\"\n}\n"} headers: @@ -74,7 +74,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/replies + uri: http://127.0.0.1:8081/api/v1/replies response: body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-die-hard_chancellor-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index 627c872a1..984bfc4e9 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -53,7 +53,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4 + uri: http://127.0.0.1:8081/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4 response: body: {string: "{\n \"message\": \"Source and submissions deleted\"\n}\n"} headers: @@ -75,7 +75,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index c978252db..c763253e2 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions + uri: http://127.0.0.1:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3/download\", \n \"filename\": \"1-divided_sawdust-msg.gpg\", \n \"is_read\": @@ -84,7 +84,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3 + uri: http://127.0.0.1:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3 response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: @@ -106,7 +106,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/submissions + uri: http://127.0.0.1:8081/api/v1/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8/download\", \n \"filename\": \"2-divided_sawdust-msg.gpg\", \n \"is_read\": diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 1e4691ba7..b61f86a23 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/submissions + uri: http://127.0.0.1:8081/api/v1/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff/download\", \n \"filename\": \"1-unfulfilled_ardor-msg.gpg\", \n \"is_read\": @@ -51,7 +51,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff + uri: http://127.0.0.1:8081/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: @@ -73,7 +73,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/submissions + uri: http://127.0.0.1:8081/api/v1/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8/download\", \n \"filename\": \"2-unfulfilled_ardor-msg.gpg\", \n \"is_read\": diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index ceae626df..1612ecd70 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/replies + uri: http://127.0.0.1:8081/api/v1/replies response: body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-bumptious_arthropod-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": @@ -51,7 +51,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/e1f1db54-9cd7-41f3-907d-6a260e269a60/download + uri: http://127.0.0.1:8081/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/e1f1db54-9cd7-41f3-907d-6a260e269a60/download response: body: string: !!binary | diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 4c9d9f133..7c2e2803c 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/submissions + uri: http://127.0.0.1:8081/api/v1/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download\", \n \"filename\": \"1-structural_ageratum-msg.gpg\", \n \"is_read\": @@ -50,7 +50,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download + uri: http://127.0.0.1:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download response: body: string: !!binary | @@ -89,7 +89,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6 + uri: http://127.0.0.1:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6 response: body: {string: "{\n \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download\", \n \"filename\": \"1-structural_ageratum-msg.gpg\", \n \"is_read\": true, diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index b586ea8d6..6bf5f7e0f 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -53,7 +53,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/replies + uri: http://127.0.0.1:8081/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/replies response: body: {string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n"} headers: diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index 5d4f0fcdf..52c34b8d1 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/not%20there + uri: http://127.0.0.1:8081/api/v1/sources/not%20there response: body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL was not found on the server. If you entered the URL manually please check diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index ada9fe02f..e062636b5 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -53,7 +53,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/flag + uri: http://127.0.0.1:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/flag response: body: {string: "{\n \"message\": \"Source flagged for reply\"\n}\n"} headers: @@ -75,7 +75,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a + uri: http://127.0.0.1:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a response: body: {string: "{\n \"add_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\": diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index 0e5f8c250..ae71afa85 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/replies + uri: http://127.0.0.1:8081/api/v1/replies response: body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-concealed_straight-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 52a34ae94..611c5bf3e 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/submissions + uri: http://127.0.0.1:8081/api/v1/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/32bbe523-9262-4fcd-a859-25c729b6dca5/download\", \n \"filename\": \"1-vibrational_sleep-msg.gpg\", \n \"is_read\": diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index 26df5ac13..6b615698c 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/user + uri: http://127.0.0.1:8081/api/v1/user response: body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-10-22T23:00:06.845751Z\", \n \"username\": \"journalist\", \n \"uuid\": \"16db39ec-0f92-4299-a15d-f6053b3d52a7\"\n}\n"} diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index 9b81bf2c5..373b87db3 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies + uri: http://127.0.0.1:8081/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies response: body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-make-believe_pharmacist-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index fb56910e0..39a1f1d2e 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies + uri: http://127.0.0.1:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies response: body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-unabated_dysphagia-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": @@ -84,7 +84,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e + uri: http://127.0.0.1:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e response: body: {string: "{\n \"filename\": \"3-unabated_dysphagia-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index b3f988100..7491ecb44 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc + uri: http://127.0.0.1:8081/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc response: body: {string: "{\n \"add_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index f64082bc3..6286dd444 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index e2d1b3515..6a37acb12 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions + uri: http://127.0.0.1:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da/download\", \n \"filename\": \"1-liked_crockery-msg.gpg\", \n \"is_read\": false, @@ -83,7 +83,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da + uri: http://127.0.0.1:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da response: body: {string: "{\n \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da/download\", \n \"filename\": \"1-liked_crockery-msg.gpg\", \n \"is_read\": false, \n diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index 6468fcede..bb2eb316d 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions + uri: http://127.0.0.1:8081/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions response: body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/0f939198-de40-4689-bacd-983c1c678bbd/download\", \n \"filename\": \"1-edifying_skirl-msg.gpg\", \n \"is_read\": false, diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index 12bd36305..007cfa0b7 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -52,7 +52,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources/rofl-missing/submissions + uri: http://127.0.0.1:8081/api/v1/sources/rofl-missing/submissions response: body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL was not found on the server. If you entered the URL manually please check diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index 5f4f00f46..e45b2bc5f 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/add_star\"\ , \n \"interaction_count\": 5, \n \"is_flagged\": false, \n \ @@ -80,7 +80,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies + uri: http://127.0.0.1:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies response: body: {string: "{\n \"filename\": \"6-amendable_oxalate-reply.gpg\", \n \"message\"\ : \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\ diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index ef980d3ea..3fdf54fce 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ @@ -80,7 +80,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies + uri: http://127.0.0.1:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies response: body: {string: "{\n \"filename\": \"5-amendable_oxalate-reply.gpg\", \n \"message\"\ : \"Your reply has been stored\", \n \"uuid\": \"122f1449-2f4e-46c1-8605-0158fe9f3341\"\ diff --git a/data/test-setup.yml b/data/test-setup.yml index da771c36f..03485ba84 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -9,7 +9,7 @@ interactions: Content-Length: ['119'] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/token + uri: http://127.0.0.1:8081/api/v1/token response: body: {string: "{\n \"expiration\": \"2018-10-23T06:41:58.606548Z\", \n \"token\": \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720\"\n}\n"} diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 55eb36cf2..9d0f7a18d 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -9,7 +9,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": @@ -53,7 +53,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: POST - uri: http://localhost:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star + uri: http://127.0.0.1:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star response: body: {string: "{\n \"message\": \"Star added\"\n}\n"} headers: @@ -76,7 +76,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://localhost:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star + uri: http://127.0.0.1:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star response: body: {string: "{\n \"message\": \"Star removed\"\n}\n"} headers: @@ -98,7 +98,7 @@ interactions: Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://localhost:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/sources response: body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": From de2ce49f9b62921c43efb63d506b67c96a7b2aa9 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 18 Mar 2019 14:30:01 -0700 Subject: [PATCH 149/751] readme: add circle ci badge for master branch build status --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7b7b934f1..e41ddd835 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ## Python SDK for SecureDrop +[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/master.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/master) + This SDK provides a convenient Python interface to the [SecureDrop Journalist Interface API](https://docs.securedrop.org/en/latest/development/journalist_api.html). The development of the SDK was primarily motivated by the creation of the [SecureDrop Workstation](https://github.com/freedomofpress/securedrop-workstation) based on Qubes OS. The SDK is currently used by the [SecureDrop Client](https://github.com/freedomofpress/securedrop-client) that is a component of the SecureDrop Workstation. When used in Qubes OS, the SDK uses the [securedrop-proxy](https://github.com/freedomofpress/securedrop-proxy) service, as the VM which runs the client does not have network access by design. From 0874869aaf3c1d3172d3bcb71cdbfc14c5791288 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 18 Mar 2019 15:12:03 -0700 Subject: [PATCH 150/751] Pipfile.lock: set yarl==1.2.0 1.3.0 does not install on python 3.5 https://github.com/aio-libs/yarl/compare/v1.2.0...v1.3.0 --- Pipfile.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 7bd95e888..622495fcc 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -444,20 +444,20 @@ }, "yarl": { "hashes": [ - "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9", - "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f", - "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb", - "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320", - "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842", - "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0", - "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829", - "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310", - "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4", - "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8", - "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1" + "sha256:ee506bc321b455b4a410724ec9c0ad4940932553523c6e7b69f0155269793734", + "sha256:4c2d780cb0b669bf027da57a0834d4968ed55c89f1593cfd11be8108bff699e2", + "sha256:8765ebd034d0dc812a311b31251dffb434c753fc7124487912a5bca7baeb5c9b", + "sha256:3278209d78d534d59ee44f595e54ee4d3a164fa77319ffbd418b1978edf71748", + "sha256:32a52453fc20153e34d2cf99f1a2f4c3d144e320896f1f89b5ee89bb41e877be", + "sha256:48f3807855b69414a41e70908e502d6dbf563e3eca22f73d1344aad9270a4ff9", + "sha256:a2dda88459cfe50f4f6a225d2f51e3fffb0c3c18f4c3a3ac38d9dc054f8c37b0", + "sha256:ac574aa2c45185e038489ff8f3bebd9269dd8327e86c72d9a7f83a1d3ad9eec4", + "sha256:ce5963f2451661a435721d8907a824daea52aad6e3bee9b4104e75d19269cdae", + "sha256:cec06d4272c2ced65308daf63360daeea5061c030fe28f75e499afd735cee860", + "sha256:fbbb10276d53629c0300cfd4a2092e3bbfa9a5aa95cd49808e01c59492052077" ], "markers": "python_version >= '3.4'", - "version": "==1.3.0" + "version": "==1.2.0" } } } From 41254db1bb411969ed874bf09e1687bb24b0be4d Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 19 Mar 2019 10:42:09 -0700 Subject: [PATCH 151/751] ci: use new NUM_SOURCES env var --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 69310962b..a0ab8294e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -54,7 +54,7 @@ jobs: name: Start spinning up the SecureDrop server container command: | cd securedrop - make -C securedrop dev + NUM_SOURCES=5 make -C securedrop dev background: true - run: # As suggested in https://discuss.circleci.com/t/prevent-race-conditions-by-waiting-for-services-with-dockerize/11215 name: Install dockerize @@ -65,10 +65,10 @@ jobs: environment: DOCKERIZE_VERSION: v0.6.1 - run: - name: Wait for server to be up + name: Wait for server to be up and for test sources to load command: | dockerize -wait tcp://127.0.0.1:8080 -timeout 15m - sleep 10 + sleep 30 - run: name: Remove VCR cassettes and run tests against latest API command: | From 3157be8d2b541f2843097525f7351fcd709ccd2f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 18 Mar 2019 15:29:37 -0700 Subject: [PATCH 152/751] test: rework test suite to pass vs external server container --- data/test-delete-reply.yml | 132 ++++++++++------- data/test-delete-source.yml | 127 ++++++++++------ data/test-delete-submission-from-string.yml | 155 +++++++++++--------- data/test-delete-submission.yml | 141 +++++++++++------- data/test-get-all-replies.yml | 85 ++++++++--- data/test-get-all-submissions.yml | 51 +++---- data/test-get-replies-from-source.yml | 78 +++++----- data/test-get-sources.yml | 47 +++--- data/test-get-submission.yml | 136 +++++++++-------- data/test-get-submissions.yml | 80 +++++----- data/test-setup.yml | 17 +-- tests/test_api.py | 58 +++++--- 12 files changed, 633 insertions(+), 474 deletions(-) diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index 269321b0b..a332ce08f 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -4,101 +4,131 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-die-hard_chancellor-reply.gpg\", + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-raging_azure-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"719a8c13-9352-4380-9619-3015030b0e49\", - \n \"reply_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/68603968-b307-4607-80f7-cc7856f90f2f\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5\", - \n \"uuid\": \"68603968-b307-4607-80f7-cc7856f90f2f\"\n }, \n {\n - \ \"filename\": \"4-die-hard_chancellor-reply.gpg\", \n \"is_deleted_by_source\": + \"journalist\", \n \"journalist_uuid\": \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", + \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/0403af8d-b948-46ac-bf76-237f51f1b908\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"0403af8d-b948-46ac-bf76-237f51f1b908\"\n }, \n {\n + \ \"filename\": \"4-raging_azure-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/dddc31e4-c720-4ca4-bd31-62242d91fe6c\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5\", - \n \"uuid\": \"dddc31e4-c720-4ca4-bd31-62242d91fe6c\"\n }, \n {\n - \ \"filename\": \"3-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/ac8730b9-7644-434b-8ca5-996805a511c6\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"ac8730b9-7644-434b-8ca5-996805a511c6\"\n }, \n {\n + \ \"filename\": \"3-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/19f7dba0-56dd-4124-9b32-07642b28d95e\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", - \n \"uuid\": \"19f7dba0-56dd-4124-9b32-07642b28d95e\"\n }, \n {\n - \ \"filename\": \"4-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/dd8d3cde-2506-4fe0-a129-3a81f95dad12\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"dd8d3cde-2506-4fe0-a129-3a81f95dad12\"\n }, \n {\n + \ \"filename\": \"4-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/131455ca-6135-49df-a178-4fa50238050a\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", - \n \"uuid\": \"131455ca-6135-49df-a178-4fa50238050a\"\n }\n ]\n}\n"} + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/849e868d-4826-47d3-b8cc-c9a1848e77c0\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"849e868d-4826-47d3-b8cc-c9a1848e77c0\"\n }\n ]\n}\n"} headers: - Content-Length: ['1967'] + Content-Length: ['1959'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:04:56 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDo1NiBHTVQifX0.Dq_pGA.iIM2KMQyp3YFlgF-KPoheeNv0U4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://127.0.0.1:8081/api/v1/replies + response: + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-raging_azure-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_username\": + \"journalist\", \n \"journalist_uuid\": \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", + \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/0403af8d-b948-46ac-bf76-237f51f1b908\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"0403af8d-b948-46ac-bf76-237f51f1b908\"\n }, \n {\n + \ \"filename\": \"4-raging_azure-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/ac8730b9-7644-434b-8ca5-996805a511c6\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"ac8730b9-7644-434b-8ca5-996805a511c6\"\n }, \n {\n + \ \"filename\": \"3-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/dd8d3cde-2506-4fe0-a129-3a81f95dad12\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"dd8d3cde-2506-4fe0-a129-3a81f95dad12\"\n }, \n {\n + \ \"filename\": \"4-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/849e868d-4826-47d3-b8cc-c9a1848e77c0\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"849e868d-4826-47d3-b8cc-c9a1848e77c0\"\n }\n ]\n}\n"} + headers: + Content-Length: ['1959'] + Content-Type: [application/json] + Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/68603968-b307-4607-80f7-cc7856f90f2f + uri: http://127.0.0.1:8081/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/0403af8d-b948-46ac-bf76-237f51f1b908 response: body: {string: "{\n \"message\": \"Reply deleted\"\n}\n"} headers: Content-Length: ['33'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:04:56 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDo1NiBHTVQifX0.Dq_pGA.iIM2KMQyp3YFlgF-KPoheeNv0U4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-die-hard_chancellor-reply.gpg\", + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-raging_azure-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"719a8c13-9352-4380-9619-3015030b0e49\", - \n \"reply_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5/replies/dddc31e4-c720-4ca4-bd31-62242d91fe6c\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/664259e9-bd0e-41a0-85b2-bd0d618038c5\", - \n \"uuid\": \"dddc31e4-c720-4ca4-bd31-62242d91fe6c\"\n }, \n {\n - \ \"filename\": \"3-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + \"journalist\", \n \"journalist_uuid\": \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", + \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/ac8730b9-7644-434b-8ca5-996805a511c6\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"ac8730b9-7644-434b-8ca5-996805a511c6\"\n }, \n {\n + \ \"filename\": \"3-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/19f7dba0-56dd-4124-9b32-07642b28d95e\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", - \n \"uuid\": \"19f7dba0-56dd-4124-9b32-07642b28d95e\"\n }, \n {\n - \ \"filename\": \"4-sidereal_eclipse-reply.gpg\", \n \"is_deleted_by_source\": + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/dd8d3cde-2506-4fe0-a129-3a81f95dad12\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"dd8d3cde-2506-4fe0-a129-3a81f95dad12\"\n }, \n {\n + \ \"filename\": \"4-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"719a8c13-9352-4380-9619-3015030b0e49\", \n \"reply_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81/replies/131455ca-6135-49df-a178-4fa50238050a\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/c32cddea-ddbb-4ccc-9d22-67caa9da1b81\", - \n \"uuid\": \"131455ca-6135-49df-a178-4fa50238050a\"\n }\n ]\n}\n"} + \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/849e868d-4826-47d3-b8cc-c9a1848e77c0\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"849e868d-4826-47d3-b8cc-c9a1848e77c0\"\n }\n ]\n}\n"} headers: - Content-Length: ['1479'] + Content-Length: ['1478'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:04:56 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDo1NiBHTVQifX0.Dq_pGA.iIM2KMQyp3YFlgF-KPoheeNv0U4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index 984bfc4e9..9f9d2eef8 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -4,97 +4,128 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/add_star\", + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"yellow-white fecklessness\", - \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU64BEADXKtc0RnZlzIpI2fM7rH0fhWXJ2oJqTMl9HEX3/G4d05PqSu9R\\nxXczPVAAeCpWR+1PwiBndkeLZ3wBJX7ergkHc+c8zas41HVoPpEKydXSi3n/CgZP\\nDs8t8KbT9N6D5ZCMOGfqr3CXSTtUOYT7BRU/mo47fQgp+5EfL1TKoU7/E65KETK/\\nH7NPJY5F+LFh9X8QjpiwUTcna2l+rWVLHBmhV7s+tnSKpO8bF6ah49QbKPZV7QGG\\nsI0KGOiOK+R5eHPtkImPE2s6EvdLKOerbYD0aZI+B/71sQM2jwvjr1+1eS9iWTNs\\nYQ42ba62/3Uz+3yEk9P9/2nArxthrZZmRxrXRrVNqYBc9oAiGmxdf7aBPP3zaJmU\\nrv9maAfMEdxKIQIhhBfw+GWhT5Le21bslkwh9mnCDRTIi+Tfl/x8PtCF95jJQcF3\\nuatin3PTm2hupt7sDVDV06eM/LTgdKrxFaFn6eEyPR7LsqNRO4fHoeXONvphN+/j\\nrfgTQsfsyNlmbsaaqk2BkE6d+f8HU8g136B14TA14tpC2m/XuUvx5MZ6aHeERhAK\\nfRj4gm4YPEhJSXJRJ6orsYEdbxzq+vgWrfJTxVd9qPs2m2DOQCutRwEcbKWdHTqv\\nz3jGX569AUNGp6+4M/LSaKNw/D7xVm9MecIsQJb6AkdVJ8eyPMAHi39tywARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VUtKQlhKN1dTTzc2R0xaN0ZBS1NKU0hRRUYz\\nT0dXTjM0VzNWVUZQWURaVFFPQ05DRDVTRzQ2U1BJSDZNNFJJWUkyRkpBMlZLNzNG\\nREROVjJGWDNMN0I2TVdYVktITTNFNFdNRkQzQT0+iQI/BBMBCgApBQJbzlOuAhsv\\nBQkB4JuSBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQQqyrJapUHeCs3Q/+\\nIWYg+AFSY9PJLmC/m/oqv4Y8IHfXxOxWvoiQBodbdcKxOyjTgm6QItA5jP3t+t0J\\n9CjcVCa0rSqC3/p8X/WtoZHcJCU6MmBPaDdbh+3zpKWPdHRUzdHFO7sWYmOL9Kmu\\nPmed4nz46CvfHcBjGAHeAsbsxM+3i+yPT1rKUpqPYsk4ZrAi0B4OHKowwVkV723n\\nZNlpNeQXMcwYVylR9+10vTf8lFh9hMRisk99FJ16R3p/Lamy6I1lqLiBOgDLmLt0\\nSO0qOK5jI1qTBUNDaxay7JAKpFYQftN3JzCnGJZPEsc3+Y2hJF6RPw8OlU10Bocv\\nmkM9N2pBbbiAVIqiaB0hFHxLNihnbYqhmhksxofbEqLk744fb9p8Y8yhIPw7jCZ2\\niqiGARmdAQ2ZNXaq5FqrT7nvkReONrAQ1sQ0FVk9h1A7NfYN9eqXV7U3FjnFf8Uy\\n9EvmgTYNDBGA4ZI6bgTyVI3zFeToKz9OWRnN+EunoAuvuzqzcPMTUsHsjCnMST8W\\nuTyU7nEUHN/Li9TE2vW8vvpkl46XWBNBtsD+DGwstyfjqGQfZPHDbM+Ikjo/amMw\\nod4WT07+zXlz4PGzTpEENE0MQW/eaw9iI2DqrhX++plZljoORdqDMvqzbXDWIaHc\\nYU7zX9Ff163XuaDuIDqekUo2DP83qGWq9brLfg6qxoo=\\n=jT2/\\n-----END + false, \n \"journalist_designation\": \"raging azure\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADEQMD9oHNCk7gvgk6/W2kx+DkaoM1I24fDlx3soKXqmRjyK1MK\\nx/ecx6ta3I1KRIwl6Iy1QCEhGjmR3PNEY61n6n2Jv8n2NtDx31Gagp1f8ckhPtYq\\n2BP9VzxkTIqbwi6oOaKl3GCarkZD1/detSH8Sdzk9uzlE49Qn/wCsFyW69GtJBFT\\nVZ0F5hPJItXOAT1mHrRc1Hl/lsmax61rqLGuvuCxnpe3UrDKtfxL2uNKzGYm687P\\nAxVBbHE7HlOLJ8YAVlIJQzcWXHvj5yBE2U6ANYrUYqLsuOImA5Ruwb/UwhKP+zQ5\\nhGOgizEmE3NvH5Hmex2ir+Bl3FKSn8QgvbOwXhSxkNcn+YREB8exNxZJ2SH80JvQ\\ndYR0Onfcr9W2Qn4xdvpaaR1i1faGJ9Mc2O1bg/lubpJKNh0KJsqX5yZMWFbA5nQJ\\nAO7/3tU1a9BSISEc5ICeAD+DSHYc+vsDoBcN8Fmh/p0fzDAM6AXfpl5vggzhPXTN\\ncJlJGVBTPZh4SLDLmL1lvEytoLBErzjF+rYpLDrQurflN3bGdWEKoQZxwc1I5f/h\\n/v3ZkHFwIcOV1TwVfRvmYP2Q3H+86pHeFFStb1mCh0EuS+ygwMkPIirQnIpDa3iB\\nNRLTZvdQW0T8XswQWisGL/R+mKUX1HkMkqYp/lPAqmFuNtzgWcg4pTeOmQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M0hBT0VaUzVVSkZUQ0tOU0FGNjRHSDJaT082\\nN0NCSUhGWkxXTEdaTTI2MzYzQ1BEQ1ZERUtBSEdIWU1HVlFJTk5OUVVDQVRHREJQ\\nRFNJRlYyUEoyWFE2UFpZWllSN09VNkROWUFXST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEL+uIhVjsHuRvuMP/16AhT5kbRJQ\\n109ZhDfH7pOl4avUutY7OYPHDEgFR+6BwStKZcmP/1Amx+2eUcRno8dAlSbTKYFI\\nq1gss9e/xwz1xK7qtUDFxfZL2dbNq877kmCEjNY63kLkme6O6ltCxNJ+TINKK2ff\\nkOanD3t58xILFV4nxzZd2GRWy1IEYJb3OCZ9UD0alCAZcV2RHJjJoMCRqTSfW7rV\\njrZlQZEQHIocDBlYLM461ZyP/TnCwfc/quz0GoJR+qVU+hY5sYrUh1M62cT+bKxd\\nL5Rnk/4DIx89QvcQKR0l330iB9Pu16+Ks7DaOU85M17Smg7Pjc9nYsUwgS6vQQmV\\nU6Rjlfqa7JglA54cWPd9WkRlT+cUlCUlctowgpTiAA0uzc3bu6YQ7RefGU5qnLIH\\ndDtAzIDTCeJdaJZvd2MaV0KICe4mU2RpJYlDSVUfzVb/xK6vVN6maN5tnJ6dpirj\\nA6WhGl+aKA4Ou6ok1mOHLEfAcCEbUrR8FF1MPZ9/DWRYpQpJhAfBG3pSfUByf5/w\\nt3WVNpiXWet/DXwFLsUpra7sNAb5+BFaEv22Y2bFF0TEkai39PdKUnVzc7jjSRvZ\\n84cfRurWK9GR8ynSLEmu47/beWzRIO5qBe3VIdDUL2w0PhH/rKiGg5zBDy8b8otz\\n2OCPH1/t36o/CP6SrIJdE1l1Z6RoS0C/\\n=DXES\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:48:15.508121Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/remove_star\", - \n \"replies_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/replies\", - \n \"submissions_url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4/submissions\", - \n \"url\": \"/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4\", - \n \"uuid\": \"f1ed565f-ed3f-4316-9de8-56dd8af3b4a4\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/add_star\", + \"2019-03-18T22:23:44.186714Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/remove_star\", + \n \"replies_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies\", + \n \"submissions_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/submissions\", + \n \"url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"d9eb4d27-b7c8-4599-ba22-daee6d939f17\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"downstairs depth\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU7ABEADagsl6IqF46/B502qxTKB2OS6FsqQT3BOyseZpALgvrs7tBmsU\\n9qZrEZ5mEVKQK0wA/4Axt+J0rwNieC3egz/hSfJrxdedIEeX6GYJpN9C2tGj2X1Q\\nn9OCPT7GtgVuwUX+2WUyVsmcikF0gQL+VgFAW3TRAT1qWZ2TROYloQGvZZNJM7cx\\n/UKZDOBxyuuhgn1OqSXQF9W/tzZB+7TfN1xdxMDlfr4JVMuh8H2dK+KLdfcaw3BK\\ndOEw8XWTkqDK9E7ZHbzQImOqWJG0TMvo1k02zuPiA2E4JQHg7+mnL8rrRjZ92k+3\\ndsfWoNhKqlcy8Yd9uxb4OY3uo4u+VF6fShTpbYngYmFImg/54C1rge0UpZX0uc1f\\ndYJP6GH41NC/+kaUROTq66tVsKZM+jewIs+FvgvUmLF0jH2Tv/o2K0urw8LNiY9W\\nc+3zkNAq+K/Q+QjhLF7fFXUf7JVT7z3pyjuphrLmUT+yyJvFGOjAOau0YKygCoiG\\nHWmneB1SFoY2d5CnyWW1tfaG2TcN8Beiv1tOLayvLmweVCyyrziidOjwRx3yKDdd\\nD0XyJ2ducIfN4z04OVb14Bfbq4D9s1MpZ4P+jRQcEx+F6xS+Zm/UWOrZgGElCDMs\\nKzVGy4G090xGGKdyqt3d+yEMVHoI1TbWnHdIMzALL4SpIBL36aPouWa56QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SENCQ040SVpVTjY0RkEyNTNCTlVLTkMzNUFE\\nRk5DQlgzRkhJSjVIRElSQk1DUEdDSTZSQk03T1M0VUgyV1NUQzI1WkVaU1JOWFkz\\nU1VZV1ZNN1ZTWUhMNEJPTjNNWUhDTVg2RzVUQT0+iQI/BBMBCgApBQJbzlOwAhsv\\nBQkB4JuQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQJa7v8Llgs7oVBA/9\\nHZMYvqlcRBca1UHTF8TVR3DhB97TN34smOvGNlh8OJEoPQ+4GKIcbToJ1cgWSf6Q\\nHECs/++DJYSlEj1fRi3xPDxMOKerkzCU6Hm0g1FzX7O/v/p0OpTGgLC3PSFMTZ26\\neP+1r5EfdEr4f0yvT7LhiUOWpPJSlobgQtb0up75eVjJeuSlYd2l2DYi8Lo6K+pX\\ndq1g532s/Elc7GpJfvanfR8lz5NVerAe1oYccjWF4iukiID1MsdVS0LMk4zRklND\\nolOoHOY+Set6jdvbC2y8bDr/o92wgBiTVL1tBqY66xIDN/F+sxFtF7slg9hMrIN8\\nIlhCEURDm/H6HeJn4hqGSCfbCL2DwZb1/X5eYc0w1y69tyzCgiGVUdwMu34LfurU\\nxQeX+CLXhNrbi4iVUJkH8L3NRhSIiemfss032oswXWzidwDjv9iwAYC6dbYy/4al\\n39Prp9chEt23bWJ20F/t7nsyDyGO3u1Y2wFUXev5FZ0seNAuDRkjwSltgvAumB+x\\noB7n6MeN8wHckbVMLYkwKxg2PT+V7mj8zVdwTMfmfV7opoDRxHtvLzCJAveUOhnR\\n6iwt4dtDm08FjBoot1bVz15jqtR+MLbdoYGMFnuBOXJ7jym0mmQjLb3kGpbEwD03\\ndUPFTKGdN/KLrYD005pi8cBIFKznKKs/WZkSQGnUG7Q=\\n=AoO+\\n-----END + false, \n \"journalist_designation\": \"untrammeled dancing\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADzzNyczWaTEHPlB0YCa6Kxu4tXmXl7VOXdfCPb7G6XkjWGBSKN\\nQqPJ0rsfilX00vRLf2xxf4036zZ0CO358405eDmN/BNBtLahP8EJBTDi40NebdXf\\nxNE0gaos/MkMIL9fL2SJHcUvJZj7+YfBe+9FatRf1M7+m4Zh4KfRK3xaF0VYGRuo\\nGZ551+16D7243TaM+KNy1oEy3kYXxU32/pdqrxJ4jAGy4J6l++M47o5i0drNbQ4D\\nVNQgYihhCLWGdMAIcF8ORg8j3s196Xv9tQSl89eofw22ccAfqoHCVdcbvcZQ0YKU\\noVXrUoALdueS4imyksmOaKjhJANCxs7ChEnHRNcpGN0XbGITwT6rjLeNCYAVdYVM\\nb4fqM2wHA/y+g3hElrBiBHXvc0hp8S9162CQPSJj60hIe0dJw1dkrAZUFMLA0nvm\\n8SWCnE+2r8J52pI515CY5G6ndnwtrruIigoDazKfIWU/SQWi+eDR0QGzsNzOTJ5L\\n5T4EEO3cXj9DIdBHwaYJ1CvNyxI1mfP2yiDi6Jpb1dVfExh1/yhrZyCkEQfbEAFG\\npvUSIBlh/n6ZDGiUDFmH8wOoNMC0C3Q7N458Y/L8VhliCisANhh2R0SXiY+gAUK2\\nisN3N/+/ed5sglP4HCFn2hgog1vAO1FV3PMWOfiE+8sVixi7xVhatJqw5QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WURLRk4zQUtWVUJIWURSVVlCTkFZVEVZNjdB\\nRTdaRkJXTVRCS0ZMU1BSQjJLUTVUVU9IVTVITlkzUDZVUk1LVlRPWEVVUlFVWFlS\\nRklCUVhUS1JJMlJVRU1BRjdVUzdHNE5WWjRWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEHKp8dqMthpjUyoP/2wgVwZYK7Cr\\nM+RP6jrEyV3WV/LqE9hUp5r5pTI6qAslp3APLCBp6Q1BuNWEsx4b/GFhkPrhwZpS\\nJkngPmxw7JHo0aK0SX9+/jBTwb2+orDIHcs+IiDpyRjkpKi8KV87cfvGLvaTE+Jc\\niopTsafJ9O9IE5WpVlwyA7CxESe+2M7cLWknbpImcytlcxPot61a87oIdWk/BZv1\\nwDpsfO/Tv3q5YFbNaGn5kPvUGaVbxhRODqaNcxE/24AxgtrimPpbaf3s5zWERf5k\\nTC6PUq2z3qEmtuKUkj8skBv5DFkaAeq7Ulx4PPkaeguLvQOIhRHDie3pX9cuak2B\\nb/7lFs4FKpMGE4XSkOqXJY4q/kkKlEk7x9sTqI29tkOVbhYaUBw6vDT+O/zLxjg1\\nvKPXFO7ylegdAECUSIJnzDqyN9v+hVOXxt726EYYfMQqIo384zZOp/JOngNWKNfr\\nT2VhBnANjeLCqLcN3ofwJK8jY9fidqqpidZ50IX5lEI2s3/QaouldLhlAKqKH0e5\\nCgmg2F68MJN1o/LbYPCt5hE8xCI9i3Q//MefQKG3GspFRdS3BiXyoLwTf7HrGOoC\\nXzC7byFTxOMYPYj/EYTQd8I6NByvjGbRYMZrv6Dy6NAqZobq9QdrR/F7kYiTLRF/\\ncd3FLzg6d15rMyHMeEQQCj/8Bzrbx0QV\\n=e2OF\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:48:17.821470Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/remove_star\", - \n \"replies_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/replies\", - \n \"submissions_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/submissions\", - \n \"url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90\", - \n \"uuid\": \"eb01cec4-7216-4112-b542-fcc9c3979b90\"\n }\n ]\n}\n"} + \"2019-03-18T22:23:46.635201Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/remove_star\", + \n \"replies_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies\", + \n \"submissions_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/submissions\", + \n \"url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"8b8325d9-20a5-4687-8bdf-f0d45408ca38\"\n }\n ]\n}\n"} headers: - Content-Length: ['5244'] + Content-Length: ['5210'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:48:28 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0ODoyOCBHTVQifX0.Dq_lPA.xCBt3s1su7-BcVhsHXG7gP-oQD0; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://127.0.0.1:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"raging azure\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADEQMD9oHNCk7gvgk6/W2kx+DkaoM1I24fDlx3soKXqmRjyK1MK\\nx/ecx6ta3I1KRIwl6Iy1QCEhGjmR3PNEY61n6n2Jv8n2NtDx31Gagp1f8ckhPtYq\\n2BP9VzxkTIqbwi6oOaKl3GCarkZD1/detSH8Sdzk9uzlE49Qn/wCsFyW69GtJBFT\\nVZ0F5hPJItXOAT1mHrRc1Hl/lsmax61rqLGuvuCxnpe3UrDKtfxL2uNKzGYm687P\\nAxVBbHE7HlOLJ8YAVlIJQzcWXHvj5yBE2U6ANYrUYqLsuOImA5Ruwb/UwhKP+zQ5\\nhGOgizEmE3NvH5Hmex2ir+Bl3FKSn8QgvbOwXhSxkNcn+YREB8exNxZJ2SH80JvQ\\ndYR0Onfcr9W2Qn4xdvpaaR1i1faGJ9Mc2O1bg/lubpJKNh0KJsqX5yZMWFbA5nQJ\\nAO7/3tU1a9BSISEc5ICeAD+DSHYc+vsDoBcN8Fmh/p0fzDAM6AXfpl5vggzhPXTN\\ncJlJGVBTPZh4SLDLmL1lvEytoLBErzjF+rYpLDrQurflN3bGdWEKoQZxwc1I5f/h\\n/v3ZkHFwIcOV1TwVfRvmYP2Q3H+86pHeFFStb1mCh0EuS+ygwMkPIirQnIpDa3iB\\nNRLTZvdQW0T8XswQWisGL/R+mKUX1HkMkqYp/lPAqmFuNtzgWcg4pTeOmQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M0hBT0VaUzVVSkZUQ0tOU0FGNjRHSDJaT082\\nN0NCSUhGWkxXTEdaTTI2MzYzQ1BEQ1ZERUtBSEdIWU1HVlFJTk5OUVVDQVRHREJQ\\nRFNJRlYyUEoyWFE2UFpZWllSN09VNkROWUFXST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEL+uIhVjsHuRvuMP/16AhT5kbRJQ\\n109ZhDfH7pOl4avUutY7OYPHDEgFR+6BwStKZcmP/1Amx+2eUcRno8dAlSbTKYFI\\nq1gss9e/xwz1xK7qtUDFxfZL2dbNq877kmCEjNY63kLkme6O6ltCxNJ+TINKK2ff\\nkOanD3t58xILFV4nxzZd2GRWy1IEYJb3OCZ9UD0alCAZcV2RHJjJoMCRqTSfW7rV\\njrZlQZEQHIocDBlYLM461ZyP/TnCwfc/quz0GoJR+qVU+hY5sYrUh1M62cT+bKxd\\nL5Rnk/4DIx89QvcQKR0l330iB9Pu16+Ks7DaOU85M17Smg7Pjc9nYsUwgS6vQQmV\\nU6Rjlfqa7JglA54cWPd9WkRlT+cUlCUlctowgpTiAA0uzc3bu6YQ7RefGU5qnLIH\\ndDtAzIDTCeJdaJZvd2MaV0KICe4mU2RpJYlDSVUfzVb/xK6vVN6maN5tnJ6dpirj\\nA6WhGl+aKA4Ou6ok1mOHLEfAcCEbUrR8FF1MPZ9/DWRYpQpJhAfBG3pSfUByf5/w\\nt3WVNpiXWet/DXwFLsUpra7sNAb5+BFaEv22Y2bFF0TEkai39PdKUnVzc7jjSRvZ\\n84cfRurWK9GR8ynSLEmu47/beWzRIO5qBe3VIdDUL2w0PhH/rKiGg5zBDy8b8otz\\n2OCPH1/t36o/CP6SrIJdE1l1Z6RoS0C/\\n=DXES\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2019-03-18T22:23:44.186714Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/remove_star\", + \n \"replies_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies\", + \n \"submissions_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/submissions\", + \n \"url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", + \n \"uuid\": \"d9eb4d27-b7c8-4599-ba22-daee6d939f17\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"untrammeled dancing\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADzzNyczWaTEHPlB0YCa6Kxu4tXmXl7VOXdfCPb7G6XkjWGBSKN\\nQqPJ0rsfilX00vRLf2xxf4036zZ0CO358405eDmN/BNBtLahP8EJBTDi40NebdXf\\nxNE0gaos/MkMIL9fL2SJHcUvJZj7+YfBe+9FatRf1M7+m4Zh4KfRK3xaF0VYGRuo\\nGZ551+16D7243TaM+KNy1oEy3kYXxU32/pdqrxJ4jAGy4J6l++M47o5i0drNbQ4D\\nVNQgYihhCLWGdMAIcF8ORg8j3s196Xv9tQSl89eofw22ccAfqoHCVdcbvcZQ0YKU\\noVXrUoALdueS4imyksmOaKjhJANCxs7ChEnHRNcpGN0XbGITwT6rjLeNCYAVdYVM\\nb4fqM2wHA/y+g3hElrBiBHXvc0hp8S9162CQPSJj60hIe0dJw1dkrAZUFMLA0nvm\\n8SWCnE+2r8J52pI515CY5G6ndnwtrruIigoDazKfIWU/SQWi+eDR0QGzsNzOTJ5L\\n5T4EEO3cXj9DIdBHwaYJ1CvNyxI1mfP2yiDi6Jpb1dVfExh1/yhrZyCkEQfbEAFG\\npvUSIBlh/n6ZDGiUDFmH8wOoNMC0C3Q7N458Y/L8VhliCisANhh2R0SXiY+gAUK2\\nisN3N/+/ed5sglP4HCFn2hgog1vAO1FV3PMWOfiE+8sVixi7xVhatJqw5QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WURLRk4zQUtWVUJIWURSVVlCTkFZVEVZNjdB\\nRTdaRkJXTVRCS0ZMU1BSQjJLUTVUVU9IVTVITlkzUDZVUk1LVlRPWEVVUlFVWFlS\\nRklCUVhUS1JJMlJVRU1BRjdVUzdHNE5WWjRWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEHKp8dqMthpjUyoP/2wgVwZYK7Cr\\nM+RP6jrEyV3WV/LqE9hUp5r5pTI6qAslp3APLCBp6Q1BuNWEsx4b/GFhkPrhwZpS\\nJkngPmxw7JHo0aK0SX9+/jBTwb2+orDIHcs+IiDpyRjkpKi8KV87cfvGLvaTE+Jc\\niopTsafJ9O9IE5WpVlwyA7CxESe+2M7cLWknbpImcytlcxPot61a87oIdWk/BZv1\\nwDpsfO/Tv3q5YFbNaGn5kPvUGaVbxhRODqaNcxE/24AxgtrimPpbaf3s5zWERf5k\\nTC6PUq2z3qEmtuKUkj8skBv5DFkaAeq7Ulx4PPkaeguLvQOIhRHDie3pX9cuak2B\\nb/7lFs4FKpMGE4XSkOqXJY4q/kkKlEk7x9sTqI29tkOVbhYaUBw6vDT+O/zLxjg1\\nvKPXFO7ylegdAECUSIJnzDqyN9v+hVOXxt726EYYfMQqIo384zZOp/JOngNWKNfr\\nT2VhBnANjeLCqLcN3ofwJK8jY9fidqqpidZ50IX5lEI2s3/QaouldLhlAKqKH0e5\\nCgmg2F68MJN1o/LbYPCt5hE8xCI9i3Q//MefQKG3GspFRdS3BiXyoLwTf7HrGOoC\\nXzC7byFTxOMYPYj/EYTQd8I6NByvjGbRYMZrv6Dy6NAqZobq9QdrR/F7kYiTLRF/\\ncd3FLzg6d15rMyHMeEQQCj/8Bzrbx0QV\\n=e2OF\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2019-03-18T22:23:46.635201Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/remove_star\", + \n \"replies_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies\", + \n \"submissions_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/submissions\", + \n \"url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"8b8325d9-20a5-4687-8bdf-f0d45408ca38\"\n }\n ]\n}\n"} + headers: + Content-Length: ['5210'] + Content-Type: [application/json] + Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/f1ed565f-ed3f-4316-9de8-56dd8af3b4a4 + uri: http://127.0.0.1:8081/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17 response: body: {string: "{\n \"message\": \"Source and submissions deleted\"\n}\n"} headers: Content-Length: ['50'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:48:28 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0ODoyOCBHTVQifX0.Dq_lPA.xCBt3s1su7-BcVhsHXG7gP-oQD0; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/add_star\", + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"downstairs depth\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU7ABEADagsl6IqF46/B502qxTKB2OS6FsqQT3BOyseZpALgvrs7tBmsU\\n9qZrEZ5mEVKQK0wA/4Axt+J0rwNieC3egz/hSfJrxdedIEeX6GYJpN9C2tGj2X1Q\\nn9OCPT7GtgVuwUX+2WUyVsmcikF0gQL+VgFAW3TRAT1qWZ2TROYloQGvZZNJM7cx\\n/UKZDOBxyuuhgn1OqSXQF9W/tzZB+7TfN1xdxMDlfr4JVMuh8H2dK+KLdfcaw3BK\\ndOEw8XWTkqDK9E7ZHbzQImOqWJG0TMvo1k02zuPiA2E4JQHg7+mnL8rrRjZ92k+3\\ndsfWoNhKqlcy8Yd9uxb4OY3uo4u+VF6fShTpbYngYmFImg/54C1rge0UpZX0uc1f\\ndYJP6GH41NC/+kaUROTq66tVsKZM+jewIs+FvgvUmLF0jH2Tv/o2K0urw8LNiY9W\\nc+3zkNAq+K/Q+QjhLF7fFXUf7JVT7z3pyjuphrLmUT+yyJvFGOjAOau0YKygCoiG\\nHWmneB1SFoY2d5CnyWW1tfaG2TcN8Beiv1tOLayvLmweVCyyrziidOjwRx3yKDdd\\nD0XyJ2ducIfN4z04OVb14Bfbq4D9s1MpZ4P+jRQcEx+F6xS+Zm/UWOrZgGElCDMs\\nKzVGy4G090xGGKdyqt3d+yEMVHoI1TbWnHdIMzALL4SpIBL36aPouWa56QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SENCQ040SVpVTjY0RkEyNTNCTlVLTkMzNUFE\\nRk5DQlgzRkhJSjVIRElSQk1DUEdDSTZSQk03T1M0VUgyV1NUQzI1WkVaU1JOWFkz\\nU1VZV1ZNN1ZTWUhMNEJPTjNNWUhDTVg2RzVUQT0+iQI/BBMBCgApBQJbzlOwAhsv\\nBQkB4JuQBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQJa7v8Llgs7oVBA/9\\nHZMYvqlcRBca1UHTF8TVR3DhB97TN34smOvGNlh8OJEoPQ+4GKIcbToJ1cgWSf6Q\\nHECs/++DJYSlEj1fRi3xPDxMOKerkzCU6Hm0g1FzX7O/v/p0OpTGgLC3PSFMTZ26\\neP+1r5EfdEr4f0yvT7LhiUOWpPJSlobgQtb0up75eVjJeuSlYd2l2DYi8Lo6K+pX\\ndq1g532s/Elc7GpJfvanfR8lz5NVerAe1oYccjWF4iukiID1MsdVS0LMk4zRklND\\nolOoHOY+Set6jdvbC2y8bDr/o92wgBiTVL1tBqY66xIDN/F+sxFtF7slg9hMrIN8\\nIlhCEURDm/H6HeJn4hqGSCfbCL2DwZb1/X5eYc0w1y69tyzCgiGVUdwMu34LfurU\\nxQeX+CLXhNrbi4iVUJkH8L3NRhSIiemfss032oswXWzidwDjv9iwAYC6dbYy/4al\\n39Prp9chEt23bWJ20F/t7nsyDyGO3u1Y2wFUXev5FZ0seNAuDRkjwSltgvAumB+x\\noB7n6MeN8wHckbVMLYkwKxg2PT+V7mj8zVdwTMfmfV7opoDRxHtvLzCJAveUOhnR\\n6iwt4dtDm08FjBoot1bVz15jqtR+MLbdoYGMFnuBOXJ7jym0mmQjLb3kGpbEwD03\\ndUPFTKGdN/KLrYD005pi8cBIFKznKKs/WZkSQGnUG7Q=\\n=AoO+\\n-----END + false, \n \"journalist_designation\": \"untrammeled dancing\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADzzNyczWaTEHPlB0YCa6Kxu4tXmXl7VOXdfCPb7G6XkjWGBSKN\\nQqPJ0rsfilX00vRLf2xxf4036zZ0CO358405eDmN/BNBtLahP8EJBTDi40NebdXf\\nxNE0gaos/MkMIL9fL2SJHcUvJZj7+YfBe+9FatRf1M7+m4Zh4KfRK3xaF0VYGRuo\\nGZ551+16D7243TaM+KNy1oEy3kYXxU32/pdqrxJ4jAGy4J6l++M47o5i0drNbQ4D\\nVNQgYihhCLWGdMAIcF8ORg8j3s196Xv9tQSl89eofw22ccAfqoHCVdcbvcZQ0YKU\\noVXrUoALdueS4imyksmOaKjhJANCxs7ChEnHRNcpGN0XbGITwT6rjLeNCYAVdYVM\\nb4fqM2wHA/y+g3hElrBiBHXvc0hp8S9162CQPSJj60hIe0dJw1dkrAZUFMLA0nvm\\n8SWCnE+2r8J52pI515CY5G6ndnwtrruIigoDazKfIWU/SQWi+eDR0QGzsNzOTJ5L\\n5T4EEO3cXj9DIdBHwaYJ1CvNyxI1mfP2yiDi6Jpb1dVfExh1/yhrZyCkEQfbEAFG\\npvUSIBlh/n6ZDGiUDFmH8wOoNMC0C3Q7N458Y/L8VhliCisANhh2R0SXiY+gAUK2\\nisN3N/+/ed5sglP4HCFn2hgog1vAO1FV3PMWOfiE+8sVixi7xVhatJqw5QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WURLRk4zQUtWVUJIWURSVVlCTkFZVEVZNjdB\\nRTdaRkJXTVRCS0ZMU1BSQjJLUTVUVU9IVTVITlkzUDZVUk1LVlRPWEVVUlFVWFlS\\nRklCUVhUS1JJMlJVRU1BRjdVUzdHNE5WWjRWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEHKp8dqMthpjUyoP/2wgVwZYK7Cr\\nM+RP6jrEyV3WV/LqE9hUp5r5pTI6qAslp3APLCBp6Q1BuNWEsx4b/GFhkPrhwZpS\\nJkngPmxw7JHo0aK0SX9+/jBTwb2+orDIHcs+IiDpyRjkpKi8KV87cfvGLvaTE+Jc\\niopTsafJ9O9IE5WpVlwyA7CxESe+2M7cLWknbpImcytlcxPot61a87oIdWk/BZv1\\nwDpsfO/Tv3q5YFbNaGn5kPvUGaVbxhRODqaNcxE/24AxgtrimPpbaf3s5zWERf5k\\nTC6PUq2z3qEmtuKUkj8skBv5DFkaAeq7Ulx4PPkaeguLvQOIhRHDie3pX9cuak2B\\nb/7lFs4FKpMGE4XSkOqXJY4q/kkKlEk7x9sTqI29tkOVbhYaUBw6vDT+O/zLxjg1\\nvKPXFO7ylegdAECUSIJnzDqyN9v+hVOXxt726EYYfMQqIo384zZOp/JOngNWKNfr\\nT2VhBnANjeLCqLcN3ofwJK8jY9fidqqpidZ50IX5lEI2s3/QaouldLhlAKqKH0e5\\nCgmg2F68MJN1o/LbYPCt5hE8xCI9i3Q//MefQKG3GspFRdS3BiXyoLwTf7HrGOoC\\nXzC7byFTxOMYPYj/EYTQd8I6NByvjGbRYMZrv6Dy6NAqZobq9QdrR/F7kYiTLRF/\\ncd3FLzg6d15rMyHMeEQQCj/8Bzrbx0QV\\n=e2OF\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:48:17.821470Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/remove_star\", - \n \"replies_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/replies\", - \n \"submissions_url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90/submissions\", - \n \"url\": \"/api/v1/sources/eb01cec4-7216-4112-b542-fcc9c3979b90\", - \n \"uuid\": \"eb01cec4-7216-4112-b542-fcc9c3979b90\"\n }\n ]\n}\n"} + \"2019-03-18T22:23:46.635201Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/remove_star\", + \n \"replies_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies\", + \n \"submissions_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/submissions\", + \n \"url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", + \n \"uuid\": \"8b8325d9-20a5-4687-8bdf-f0d45408ca38\"\n }\n ]\n}\n"} headers: - Content-Length: ['2628'] + Content-Length: ['2619'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:48:28 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0ODoyOCBHTVQifX0.Dq_lPA.xCBt3s1su7-BcVhsHXG7gP-oQD0; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index c763253e2..9d6de67c2 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -4,132 +4,143 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://127.0.0.1:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", + \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", + \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", + \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", + \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + headers: + Content-Length: ['1550'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/add_star\", + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"divided sawdust\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU/oBEACxBiAEh6pYDlmjdMjEJ9CDGMtnBGZLLHZ5BuHAHUwuIO2iHUGj\\nc6jdlUDdp/NUuV7pGXIEvqMXaKMuds8lJCE/iRQm151NNMKe9eHLwzXPAFJVslGU\\nPgW1aYcCrg3p7Wb71R+kGdHiUcENU7isMuVCp9hMkZnsI7nXRI96dkJalIaFS7im\\nFr1BncjXE/5dOEKAQszx8ud+OY6x2zpMOASTHUKXPZq5ShyEGHt4MYMQJxx5zBXE\\nnXa022NHF/JxkRniae7/P1qO1DAHVU7Pk23mRPWcN/7yZfhY0l516sUhlD5+P4/c\\nQdat1Ewlrulvk4v4Ehf3boJ40DyWWzziFjxJRyU6ZIfPdu98kKS1jlmqj/6ku/vL\\nokpWgtaLA3HQxsAXaN5mH9BDbGkpXZMxJbl0vzcWpOyo++4JnpPgDj5CoCjzjxcu\\nFadPaPM5JhbGgr2WUULawanYUkEAnFm/dUQ0TljzdoqBfuZ6nJgTZsLmqQkB9VlH\\nSJmocmXYsOIIR0Epyg74dJdINlA8gbW02J34Rlsq+wJ8Km2vP9aKXAtuYlBP6QVC\\nIKo/zVfuvN7TwwtuXmA21Io1xP7EbUXOQoi+Y6P/6Dv44OZ66OlqpxqwoN63K6S1\\n0I3JG00AU/X1ipudC8G98pL11HKcgTMzrTJlgh+z3O49QUiVyA8c04ihJQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SUJWV0dUNFJRV1laN1FPRUhOTjNET09NV0VY\\nTkRaVjVZQ0dSTTdSTkhDSEdLRU1SWDNJVEdGWkpYMk9TNjdOUUw1MjVYUEI1NEVG\\nSkRXQ1ZDQ0tKSkdaWkxDSlJFUkNUR0tFT1dJST0+iQI/BBMBCgApBQJbzlP6Ahsv\\nBQkB4JtGBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQUohvvi8yjn+iAxAA\\nrLVWY1bUpzb5cLTD/F470jMXsWHcdFwtWHUt556esgN2ZX7RtIkDX7NtMxThJmy6\\nf6RH3OXdNLDzuZMzoO8B9CvxJAxjLPsfeeQr7vDgbyoEjCUdPGAdkhHhKkh20zBV\\nkXD0xBuy6DQoKMGidLXoMC9P7HIByFINV8A+FEkZfIld2VgP54vmrsIzJT6y+Gdi\\n8bfrfsOxxrjXQb/6aWEOUafm3f9EUmBUuuWdH6AsBATQK9QdbECRC9znWmV21A1g\\nizGuDb/YrXZtuakHaGHwtAU4Y5EomMjK+VZaIKtMNok63+0kgey/+VdF3ESNRKUe\\nOPhXZl5SlH5zxy7yv5w1SgSiHRaYGwU9KXJ8WyeuGwNlIgk70sAdl7LvvGDa42ba\\nBFVWoXBSa+b6jWjVkBel9bRDWMlPhVndlFZjYcA6mAZ3CRHeXi68Yz84ULdVgHMv\\n+YY/SDENOIwK8KXQin6+u5xxeQ9u3oh63mcc6BebsF0TUz2k0FQ5uhtuCIBdW1n3\\nINR+jlM2v06jzf4JjfNvIedDzzHo3M40AUrlpV5bE/GHELMcM3RNY8XplLBpdSSB\\nZaAbV3zvwQ1Z82DRXZ5wUjmHcTIwNfVD5lS+NsBtZ/nfMEz2aeX6gIpknDX7U9t0\\n1piF2Y74gdV1e82uurrc4EpCkkar37fKRlLAsxxV1/E=\\n=W9AO\\n-----END + false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:49:32.268753Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/remove_star\", - \n \"replies_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/replies\", - \n \"submissions_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions\", - \n \"url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", - \n \"uuid\": \"83442bde-13e7-49a7-b162-646e7f8f87f4\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/add_star\", + \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 1, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", + \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", + \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", + \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"uniform boondoggle\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU/0BEADa7ktrBGdmCHbEXQAXlZzvesuMA+lAOQN8Ovh5LywKYlHLZ67I\\n7vqdDMxNw/OCiRspJORyxStr4fHRidh6nbdlj0Y8ejFOQK+wbXAX9VztZ/pV8rp/\\n3iM+6JpV/ECeaQztN6g3gUYZYTONUqpmCYXNsp4vCtqBmSgONCf6YkbPAJhrqtXb\\n/gkibdt043o4SkJpOcdIMGqc9TwpIn0f4ryWXSpTZlTArzZ/gO0TEJcN0hZRvOqF\\n1WJAzsvJyL0mmWBd+fvnmXWfGRDuxDdUQN46qHYiUGK6B/VnalXpvmIPCivqwlKV\\nED5Gyw/iCTsOPoOFAdvshv9umlaJXbdapervOLmm7bQu/3EQx9Yrw92V2H2jtOek\\nYIS2WOXhhr6aPYUmwW8AEgv0719Gk8CSGO6XLlMS+aJ055diVZHhjXkxvU3Kauo5\\nP7m6s3FQQcZHpxePkSqDJbf87/O4g7jkFfc7QaY6s/B3WWNeMtSCdN00NKmWrcJw\\nvprdJpqcoOZ9ic6X1cGuErpu09rHq+BSUWa47oQ0lQBtq3Mmq8fOT6Cob1qBHR1Q\\nBrKX95Z5MQW8aRL1+SpobGZYOa2ohfg2IN9mR/4Bs7wkIrjWN+v0Nh8wza9AdRGP\\n7hL+qozUtadCURs3SgIisO6rUO4gCkVY9fDNf48RkAtBRwtTeAyAIN2B2wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NjVaNkRBQTdISDNaRlFGTVFMNjdSR04zRDMz\\nRkI2WVFRNkJXNlpMTEY1TENaTjNBTktSS0VJTkpQWlNCUUczSU9MN0EyS05DTVlU\\nVERKRzJBQUZBTUFaTUFDT0dRVUgyN0tRSzRRUT0+iQI/BBMBCgApBQJbzlP9Ahsv\\nBQkB4JtDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQc1VGGGgsAaiOdg/8\\nC5DXgkl/e14v7hcl28k+lkC/dNBHbjCmOW+Ew5IAXvjYwf6K6NPyqpq/+L5lrbPL\\naWgVfFexU9CGNfJwr87cjYU+g8AVYq1N7k0YPdq0i7uHZjPHox/GKzXpB1PmlK3D\\nhxIPKqVTTRDzV1yZaxLHJk0mcl5Ow/kbruRMcL4wdiV94a3LxGAuC+Ca73UOOioK\\nxCViP2v+HWXFrHkF5GzWbAKpn3EoEB0bdh8xogamFCvBJ3fprnFnefMGpcgAI3/o\\npGZrjhUE/+hsFe+5KkgBDbEbySY0WcNvEpLBiX7Jall9JzzURu4XTl8QcB0SicYd\\nOPG95BE1C5EBQgZVapHCmx1EASR97WHkynL33JXLdLXZi8Lv+yw30I7uSZQ02A/r\\nSKXmnInD+bJbMMjg/QLHpJ/IUa9gNbhW2h/mVSGIhzwSWq4PQ9E5gXU6PaDYL00v\\ndKhEaOFyF9hEh+8aRjAE/8ztXpTJ98LwE6vF1KhKj19vk8SrPlfNDxmlBxb2P85A\\nPmzcSKMpPvAscM5I/m5h3xLX1ppq9qVHmNx/sn0ChZVBXbu1VyRWBHd7n0IK+rEv\\npVTJdgvttTk6xkIFTweAVKtUa/zS6A55TskHdtYQSJfTTEgpWgXQxDrsS0GMFl/c\\nI3+YE6cx/ACuyq1vS2OclhisZSG0fyFSX8O0NxrJg/w=\\n=vNwL\\n-----END + false, \n \"journalist_designation\": \"exasperating microscope\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:49:34.518303Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/remove_star\", - \n \"replies_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/replies\", - \n \"submissions_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions\", - \n \"url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1\", - \n \"uuid\": \"6ef758d0-c06b-4e8e-9cad-fe97a95037d1\"\n }\n ]\n}\n"} + \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", + \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", + \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", + \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} headers: - Content-Length: ['5236'] + Content-Length: ['5214'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://127.0.0.1:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions + uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3/download\", - \n \"filename\": \"1-divided_sawdust-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", - \n \"submission_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3\", - \n \"uuid\": \"5b157795-1f3f-47ad-96ce-a8b6fe69f6e3\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8/download\", - \n \"filename\": \"2-divided_sawdust-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", - \n \"submission_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8\", - \n \"uuid\": \"50207602-863b-41cd-8451-2af42e45ece8\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }\n ]\n}\n"} headers: - Content-Length: ['1033'] + Content-Length: ['526'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/5b157795-1f3f-47ad-96ce-a8b6fe69f6e3 + uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80 response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: Content-Length: ['38'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8/download\", - \n \"filename\": \"2-divided_sawdust-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4\", - \n \"submission_url\": \"/api/v1/sources/83442bde-13e7-49a7-b162-646e7f8f87f4/submissions/50207602-863b-41cd-8451-2af42e45ece8\", - \n \"uuid\": \"50207602-863b-41cd-8451-2af42e45ece8\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/158ed35e-63b2-467f-9603-27b135abff1c/download\", - \n \"filename\": \"1-uniform_boondoggle-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1\", - \n \"submission_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/158ed35e-63b2-467f-9603-27b135abff1c\", - \n \"uuid\": \"158ed35e-63b2-467f-9603-27b135abff1c\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/9642eccb-e210-4bc3-8025-2cd4f019a582/download\", - \n \"filename\": \"2-uniform_boondoggle-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1\", - \n \"submission_url\": \"/api/v1/sources/6ef758d0-c06b-4e8e-9cad-fe97a95037d1/submissions/9642eccb-e210-4bc3-8025-2cd4f019a582\", - \n \"uuid\": \"9642eccb-e210-4bc3-8025-2cd4f019a582\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", + \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", + \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", + \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", + \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} headers: - Content-Length: ['1543'] + Content-Length: ['1049'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:49 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OTo0OSBHTVQifX0.Dq_ljQ.eWUawzaEbcP3fX6I2CgzCxXybP4; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index b61f86a23..1f8b304f3 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -4,99 +4,128 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff/download\", - \n \"filename\": \"1-unfulfilled_ardor-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19\", - \n \"submission_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff\", - \n \"uuid\": \"e476e1a2-0f8b-4708-977a-23ce0c5ce2ff\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8/download\", - \n \"filename\": \"2-unfulfilled_ardor-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19\", - \n \"submission_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8\", - \n \"uuid\": \"25670770-6772-439b-8ce4-733799dc32f8\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece/download\", - \n \"filename\": \"1-smooth-skinned_salad-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", - \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece\", - \n \"uuid\": \"3b11ac7b-6533-4911-936f-c3e8eb484ece\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916/download\", - \n \"filename\": \"2-smooth-skinned_salad-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", - \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916\", - \n \"uuid\": \"0fdd8eee-1145-44f2-9cc7-7b5b64575916\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", + \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", + \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", + \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", + \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", + \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", + \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} headers: - Content-Length: ['2055'] + Content-Length: ['2051'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:15 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OToxNSBHTVQifX0.Dq_law.s7_brzLOZRLNGAyi6O99Upfpq8o; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://127.0.0.1:8081/api/v1/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", + \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", + \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", + \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", + \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", + \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", + \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + headers: + Content-Length: ['2051'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/e476e1a2-0f8b-4708-977a-23ce0c5ce2ff + uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3 response: body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} headers: Content-Length: ['38'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:15 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OToxNSBHTVQifX0.Dq_law.s7_brzLOZRLNGAyi6O99Upfpq8o; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8/download\", - \n \"filename\": \"2-unfulfilled_ardor-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19\", - \n \"submission_url\": \"/api/v1/sources/58393a75-75b4-4c9b-9696-9b15741d0e19/submissions/25670770-6772-439b-8ce4-733799dc32f8\", - \n \"uuid\": \"25670770-6772-439b-8ce4-733799dc32f8\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece/download\", - \n \"filename\": \"1-smooth-skinned_salad-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", - \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/3b11ac7b-6533-4911-936f-c3e8eb484ece\", - \n \"uuid\": \"3b11ac7b-6533-4911-936f-c3e8eb484ece\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916/download\", - \n \"filename\": \"2-smooth-skinned_salad-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb\", - \n \"submission_url\": \"/api/v1/sources/1535642d-7070-46b3-876a-e466a89addbb/submissions/0fdd8eee-1145-44f2-9cc7-7b5b64575916\", - \n \"uuid\": \"0fdd8eee-1145-44f2-9cc7-7b5b64575916\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", + \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", + \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", + \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", + \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} headers: - Content-Length: ['1549'] + Content-Length: ['1550'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:49:15 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0OToxNSBHTVQifX0.Dq_law.s7_brzLOZRLNGAyi6O99Upfpq8o; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index ae71afa85..f79dd561e 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -4,41 +4,78 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODIyNiwiaWF0IjoxNTUzMDE5NDI2fQ.eyJpZCI6MX0.qO9kEj8hcA2p2_hGHde8ZGuu2PfvylxTYkoQpt8evvc] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://127.0.0.1:8081/api/v1/sources + response: + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 0, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", + \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", + \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", + \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"exasperating microscope\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", + \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", + \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", + \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} + headers: + Content-Length: ['5214'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:17:07 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODIyNiwiaWF0IjoxNTUzMDE5NDI2fQ.eyJpZCI6MX0.qO9kEj8hcA2p2_hGHde8ZGuu2PfvylxTYkoQpt8evvc] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-concealed_straight-reply.gpg\", + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-seamed_betel-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", - \n \"reply_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b/replies/1a8708b0-485f-4f29-b884-daf5423670d1\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b\", - \n \"uuid\": \"1a8708b0-485f-4f29-b884-daf5423670d1\"\n }, \n {\n - \ \"filename\": \"4-concealed_straight-reply.gpg\", \n \"is_deleted_by_source\": + \"journalist\", \n \"journalist_uuid\": \"63904448-542f-4f17-94c3-61d2f1bd0999\", + \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\"\n }, \n {\n + \ \"filename\": \"4-seamed_betel-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", \n \"reply_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b/replies/57aa044b-7714-4b58-b988-fe9f433c2b14\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/9be62de0-f299-49c9-87bc-ebfa4632ee1b\", - \n \"uuid\": \"57aa044b-7714-4b58-b988-fe9f433c2b14\"\n }, \n {\n - \ \"filename\": \"3-consecutive_effector-reply.gpg\", \n \"is_deleted_by_source\": + \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/15114b75-e9eb-425d-8a80-1b0b42fa765b\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"15114b75-e9eb-425d-8a80-1b0b42fa765b\"\n }, \n {\n + \ \"filename\": \"3-exasperating_microscope-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", \n \"reply_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074/replies/33d9b85f-83fb-410b-94d2-6a33939b2694\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074\", - \n \"uuid\": \"33d9b85f-83fb-410b-94d2-6a33939b2694\"\n }, \n {\n - \ \"filename\": \"4-consecutive_effector-reply.gpg\", \n \"is_deleted_by_source\": + \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies/b11e3bbf-c7e7-41d3-ba8c-ee56792bedd9\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"uuid\": \"b11e3bbf-c7e7-41d3-ba8c-ee56792bedd9\"\n }, \n {\n + \ \"filename\": \"4-exasperating_microscope-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"aa5b3342-edfa-4b4c-bf11-5a541b464184\", \n \"reply_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074/replies/d1bec437-a109-4df3-a710-b0812e40ac63\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/f9b8f60d-875c-4c7b-9012-daaba46bf074\", - \n \"uuid\": \"d1bec437-a109-4df3-a710-b0812e40ac63\"\n }\n ]\n}\n"} + \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies/39818849-d051-4796-8a40-129212195891\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"uuid\": \"39818849-d051-4796-8a40-129212195891\"\n }\n ]\n}\n"} headers: - Content-Length: ['1973'] + Content-Length: ['1967'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:03:39 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzozOSBHTVQifX0.Dq_oyw.XbiV8NzpzDbPdFsmVRhX5v1mcNY; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:17:07 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 611c5bf3e..80bceb6d7 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -4,40 +4,37 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0NzYzOSwiaWF0IjoxNTUzMDE4ODM5fQ.eyJpZCI6MX0.zBrH3qVfk0ttGcMNVWYZMMOVARSQbuQMrIDUumzMXU4] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/32bbe523-9262-4fcd-a859-25c729b6dca5/download\", - \n \"filename\": \"1-vibrational_sleep-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633\", - \n \"submission_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/32bbe523-9262-4fcd-a859-25c729b6dca5\", - \n \"uuid\": \"32bbe523-9262-4fcd-a859-25c729b6dca5\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/18ee5d01-7ef9-4537-b868-3942557485ae/download\", - \n \"filename\": \"2-vibrational_sleep-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633\", - \n \"submission_url\": \"/api/v1/sources/0ec00900-64ab-4f76-8e09-faaf577e5633/submissions/18ee5d01-7ef9-4537-b868-3942557485ae\", - \n \"uuid\": \"18ee5d01-7ef9-4537-b868-3942557485ae\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/316ffed1-adf0-4361-ba23-45771c483063/download\", - \n \"filename\": \"1-salty_intractability-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600\", - \n \"submission_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/316ffed1-adf0-4361-ba23-45771c483063\", - \n \"uuid\": \"316ffed1-adf0-4361-ba23-45771c483063\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/69fba3ab-ea14-4ac8-98f1-e00d5c03476e/download\", - \n \"filename\": \"2-salty_intractability-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600\", - \n \"submission_url\": \"/api/v1/sources/afc9f4af-1223-402d-bbe1-4cdd2b44a600/submissions/69fba3ab-ea14-4ac8-98f1-e00d5c03476e\", - \n \"uuid\": \"69fba3ab-ea14-4ac8-98f1-e00d5c03476e\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", + \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", + \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", + \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", + \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", + \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", + \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} headers: - Content-Length: ['2055'] + Content-Length: ['2051'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:46:49 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Njo0OSBHTVQifX0.Dq_k2Q.DXePrrb4lUHEsHftmciBinEuKOQ; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:07:19 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index 373b87db3..c40bc8360 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -4,74 +4,68 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODI1NiwiaWF0IjoxNTUzMDE5NDU2fQ.eyJpZCI6MX0.HOWcVss7bM9KuFyqW5OmSX4G-pwH7P4KKWU_nqytS3E] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/add_star\", + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"make-believe pharmacist\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVwsBEADeySdQaMkRqff0/5Giry2iGDG61kbrUOmP2mb0QbfKc304Iilz\\nurxQfnfv5TVw4UJvGG07Va9l3cXyvh+Y1CVpV8NePOvi2PaUcAh8es2jRNKWuD5P\\nyyoxf7w2FRZgtG6pRH3gyg6Jy0sO4EOHzn6bA/Jjq+RVbR0MlTaKrEb2CE/qnQdY\\nAjT7PlC5styI5tARQNsEAJh+en6Mt+OS/cowK5PBDk6BfetSfbTtoR7HAZV3In3N\\nQtAheip6OVjRNMtl4smhT5zbB/A6wxBZGOWQLET9lTF5/EfM8Q6Or+/R+R4q5QbU\\nSESHhw4bhkFl9NIOfHTgJGl2Aq4crPOCh29ZGb8QQJBYHK3b+ddSn05kAwd1J4Sn\\nrvL0hhwdwu2bimyHa2y28S9EMOAd+XC6RequuFQsrwvxgd4KnHBm9ZZ7OAGsYmNL\\n/GtFiu7BMP04KOFLwNQHqV6Fg1M2skoT7WjU9HIaFii3kV64oY/mecfqfZslLENN\\nTVgayeMZ3YI6D0m1xv11b9nnbMFToaatH+VRQniXeI4P8GFBeEYcnjeLyWD9O/i0\\nj49lBAVK1ajxRI3rXMzIcnqLzSy+noe4XaWb+KEq1OzJ8XR6nV2PJ6wGmNkugW3I\\nKctKZy/EA9Pyx7zPPvY4zUKMRCZmDEKl4+ewSu2oHpqkO8s2UHgzi5l96wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8Q1E1TlVGSzY0NE1MNkIzS1lCN1pYT1BZQ1c1\\nVFhLQlFMQzNJV0ZKNTJEWUpXMzNMWEVQSFVGVk1BNUZFU1VYWlBPTk9NSk0zUzZC\\nSlYzRTdZU0VSUE5PWVFBV1RFNExEQ0RRQTRaWT0+iQI/BBMBCgApBQJbzlcLAhsv\\nBQkB4Jg1BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ0HbT1Onm8LWHIRAA\\nysZLcVJEpIdQTIQC0uPawGhFjixTatv7wHp7Awm2leb/ZchV+BwWM62QYL0T7G+Q\\n95IwU/Qoi6HaAm/JkRN2Y6C7SAieaT/3VqtkVjoZdxMpPjdg/m0vbRPzOBTy6vIX\\nzxFzUoYJafiFIGOLJQABrcj4jGT0c4kQRTW020ksO4h1S61Jqjz0jBK7Pab5pS2H\\n9hEiqGRVJdtiw7m5d+PclE7m4fA8bfRdW76uCPsuo1BWD7uoWTrZChE9yoDzDzMf\\n6aTVe1oRCLWlYtD33FiMUGVJBq5mqSH0qIO5TZtMQPm6273ExhmsWR47qxO6BXl/\\nN2lfb6P/pbW3LmvsfEaL2hlsq/CQTiASA3jcsfr6N1YnQUmQ/asNLAUDuZWTAyGL\\nu8gZ5CgYkmPi86j5U2KZVRfKBAvO4GedSIEOWzYlVh7hqei0w6yVm+G7FK0ztoWt\\n1JcjAVQEO2+mRvD9MHqlQPMOlIFK6BN8PQlTafqddbzyriAeCtUUE7VScN+Yqm2j\\nbZhmy5wo52oJtuRX92c9y9HThtGwWpGT1OezlQxAgH4Tktws7lUFO1QWg4fOYzjH\\nKFN/mbNDbsNuaLl0wpBxk4NDEa057EYE8vB7ogu0HqxJcZ4wr+VrDpqdP8uxu2y0\\nWNybvKNtGtcZ9lDYuCbOgZH2DI2n4q/pMcIx7ODG+6A=\\n=zN9o\\n-----END + false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:02:37.971245Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/remove_star\", - \n \"replies_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies\", - \n \"submissions_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/submissions\", - \n \"url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\", - \n \"uuid\": \"1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/add_star\", + \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 0, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", + \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", + \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", + \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"hilarious climatology\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVw8BEACnnCfkrVt/TP9N6Xaoyo//yJG0ZGV0i4XB7uKe7QnwiP/QXZJc\\nMNsnll0d+r5hKYNMXoAY2Bqp79241GcWnkZSje9TRtfU8hXtsfBDTtnu8NJqBVfz\\nEozDNPumhkje6biDPFkfde3FfLB6uZYdoyhG8htvudhfUjTDyacTkqcIyJBNhdtf\\ngMunbIz8hwJVW0h95Hu4HH6RDludDUdr8gEOIQm4JiX1l4iecpisDuXpLLFwsM1C\\n02qyyk9Byhp3IQFeJ+ErQwQ2lCZ7MGmHo0/qgTXLIQzkSYCJCAcqtUjc1bYwkfS2\\nKKp5i6hX6+6znLpwIdY2Y7OXN+CS4N5k7eLedybbqH0vnxsrIAWgOOfFPza1i/CS\\nRE7uAUu3adxBziGqfe6lAti1LhYd0iyfa1cGOQdl8xuudWNHdKODrTDyne2TLKKx\\nIBrSaC86N0AZxEaH0VBR4ICuywNBdn4hp11WrVmqXqR1MLSzxgK1xwpFDDKw0JOO\\nkv4Crbl0jhHKiIqCbqmrq3mN+Ut5CM6zI5CY0y/ASpDSkbOCNiMEFJ+9d8lROOiU\\n5NabIyRIazI3YMbX7TzNCz8ikJP7GDtzHC3MVHzIqNbxgR8x9tDYPJeaFxQxI2+j\\nOVS6ZiWtuZw6x/yuPUicfJM8fNTouTIm0ZEg/igWEhm4RY7jy+IRjFuTfwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NUVONVNGVVVDU0lVQ1NJUFpTTEpHNVQ3NFcz\\nVlhRSDdCTUNUUEJRTlRTUDJKN1c0UzM0S01LSEZEWVg1WEJJWVpQSVg3S1dRVzRF\\nU0hWNVoyMlRXV0tMNTI1SDRDQ1hUUllST0NXQT0+iQI/BBMBCgApBQJbzlcPAhsv\\nBQkB4JgxBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ9d3404sMUL4NHA/+\\nKJbZUj0pwOWEkGsj0FpkX90hG+cMrLUDp4NtV2cMBJd2nYb7kFwhcQ1kHkjZE2n5\\n6uDhc3wkVlUUnNzZzvUW1gFiXPme02Sg9jSqNTSJKFobujfn47pMSq1BKVIJi+cG\\nxqKz544Rfl/LRuekeChtXB/Jpzfactc5eKzfJI0EyvSLpRrSdK8brLy2zQI1YwK4\\n2RjbXJ/ygOH3fqoUdeKX3/6HvApww6uBjL/Wu9yIYsFFcvw3oTezGYdyMf/5E3ic\\nJBw1cZLF2v4qEvRuKkJlhBAjHtcg+JDguPBoEqD+FmzAWpvj0Sz+pfA2YZeHtN7l\\nAWhQpKEN/sofLZCNVOgXSm2+rV098ssE6Q8W/fouV/AHgy/pkCfyKy+NCKXfm+d+\\nsQuC2SyBCgYPjkfZsERSwwuu1eRauB65/VsckTYiDryeaESDeOwRipgrcko7sYO8\\nULh0gQCzwzRlCiYQTw3m6BxQW+KCzewhRNBTO3iAaTQf7SzlpBLivDAanu65vZMg\\n9D9ayVKS1gKzI6X6heBDQ1tK0Xdv/TkKGJl1HH+SBSCVI4YyZQzi7ft8U4o7qCda\\n9nO53VYA8KcBErvM05Sn0WUOpVfL51BP1Pk14MdpE9Yb6q4SLdiS3OQRuUivm6NK\\nIF/t/xYEBmE7Qrynzup84rRoOU1KHmKz2CC8p3kS/cg=\\n=VILh\\n-----END + false, \n \"journalist_designation\": \"exasperating microscope\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:02:40.707390Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/remove_star\", - \n \"replies_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/replies\", - \n \"submissions_url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995/submissions\", - \n \"url\": \"/api/v1/sources/da9e4d3d-e8e9-48ee-9d19-e2734c7ae995\", - \n \"uuid\": \"da9e4d3d-e8e9-48ee-9d19-e2734c7ae995\"\n }\n ]\n}\n"} + \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", + \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", + \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", + \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} headers: - Content-Length: ['5247'] + Content-Length: ['5214'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:02:44 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjo0NCBHTVQifX0.Dq_olA.wX1oQ3GIdHyPm51slPeirKT84YQ; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:17:36 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODI1NiwiaWF0IjoxNTUzMDE5NDU2fQ.eyJpZCI6MX0.HOWcVss7bM9KuFyqW5OmSX4G-pwH7P4KKWU_nqytS3E] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://127.0.0.1:8081/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies + uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-make-believe_pharmacist-reply.gpg\", + body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-seamed_betel-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"27237818-5cec-4ee7-989e-0183f710bfea\", - \n \"reply_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies/97e42dd4-a493-4e03-ab42-8e7aba16e88e\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\", - \n \"uuid\": \"97e42dd4-a493-4e03-ab42-8e7aba16e88e\"\n }, \n {\n - \ \"filename\": \"4-make-believe_pharmacist-reply.gpg\", \n \"is_deleted_by_source\": + \"journalist\", \n \"journalist_uuid\": \"63904448-542f-4f17-94c3-61d2f1bd0999\", + \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\"\n }, \n {\n + \ \"filename\": \"4-seamed_betel-reply.gpg\", \n \"is_deleted_by_source\": false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"27237818-5cec-4ee7-989e-0183f710bfea\", \n \"reply_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4/replies/4fd4ea5c-3eba-474a-a5f1-a4891489a994\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f2f6b0e-a152-4ae1-92aa-7e9953ee9db4\", - \n \"uuid\": \"4fd4ea5c-3eba-474a-a5f1-a4891489a994\"\n }\n ]\n}\n"} + \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/15114b75-e9eb-425d-8a80-1b0b42fa765b\", + \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"15114b75-e9eb-425d-8a80-1b0b42fa765b\"\n }\n ]\n}\n"} headers: - Content-Length: ['1005'] + Content-Length: ['983'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:02:44 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjo0NCBHTVQifX0.Dq_olA.wX1oQ3GIdHyPm51slPeirKT84YQ; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:17:36 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index 6286dd444..3c27ad902 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -4,42 +4,39 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODMzMywiaWF0IjoxNTUzMDE5NTMzfQ.eyJpZCI6MX0.ddYrDcarObwI5eqbYKHslN1MGzpb1LVIfrLByLuZyfk] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/add_star\", + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"disgruntled grasshopper\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUiQBEACbAiwRG/qz8uikq1HLlrwoeGy142rnvuxURse3/C8q7f2z1/yX\\np/wuoHGRyucfGyl33Qa5rocyxJeK+/Vpvn6GC6j5KQVmnodVbzoIR6AOyJSFwVFE\\nxuwzlZJFhlk/U6LNYDrm3M2Nb19T+h5NaH1Lw/s2DfDRzmqv15Gs8K+HsVtRPOV8\\njY7AvA/u7zffh8/X7eYP/RQCww/QKfVzAtVDo6oXlRO/q5VhIYYwrQUPkju0vru7\\nVZGwkCQxiubi0BkpicaQeCX136Zxh38m1b9dERvJWxgzCJvOjumEUrPytgFlOGIJ\\nSBex+xnl3IPPO9Q63TBS6Et3Qi219y+et1QGKr1xiRvmUVA0H/nn1tVz2oD+WVfO\\nDZ71nhIhYjuRZYw37MlQb7Ivgdkrj9n0zSXBXxCXuNHCk2/VQn0SpND6vnQMQp5r\\nF5sO9PAlPpDcEjOyqic25Bn/wkCxJPLR90Fybc6K23w76B5Cx9cOdVsT9yeycwOS\\niBw3HGc7MDagTXnYBDNMW61D51eH/Fdi9fZ4MtcdfBNRweV/Js/rD9DIK/mwyiwQ\\nWh/RG9vkvx9Qoa7ykcT3wN4gQh4H5M5HyGHpOgYiXYVcNfuTo6TF1QOML7o/ptEa\\nafGSEbBdIE9ILVy263DdNqktjBFKUb6GJGpXakCSrmubWrXek2llkkwKqQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WVJRSTNDNFpOSjdTWjRIUVlXSjJCSTVYU0JG\\nUk5FQUY2Nzc2V09VNkxXWFRVUlBaSVhFVVZNQ082WjdCRlU2WlZPVURLV1VYQlRK\\nWkhUWFpMTUJCM09YU1A3SFJIWEhWWElRSkNNQT0+iQI/BBMBCgApBQJbzlIkAhsv\\nBQkB4J0cBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQPwX94hLOzsSNPxAA\\nkcWWQKz/ehr0KVOibxUz+YgdAPshbsACFfMWv2A5MlmilWkl+lUWGaplmJEscybr\\nuW09ZJMIu+HJ8tevCA0vKwEVFBwqx6YmT2Bz0KkcENKaBXhK/MJg77A2d8LLHzGD\\nWSjCFU4EnG0UF8eCD4k2U5jox22GkmwbbU8HOSNZrQooBK5mAIgYAdn46Z/FRanP\\nkfjiSeTzd4Z6f7qPyrR5tmvYSQEcoLZSIyY9FAiN84kV6CKvJwAQXgiwYeHvvaBI\\nR9YmHULq9R9Na7PzykJo7QkxsR4sWsChz5yA6NAZk7nR6ktZWk51MAQhoe+INM7O\\nvZLt6508H0dxHZ2WZ/otX3WO0qLU6AOpddlPP0qP90hYOmVlpb9l4bGjbED2D858\\nykZokJ+TIp/AMRB10LiYeGlBxauR4HeXDQ4gDinmZkNfOhffOYS3fIouOpK5SSEI\\nHenXccDE8OmRYI7d6KpuRiZSC/203HM1jQV3UaVnTAfUs73pu72jz/A76NjWq+Sl\\nV2KZpqxfO/umqXZ94zlxQSyatNuoQ9JBzXM9/pgtg0e23o+0c19sr6PcXja/Bt8a\\nf1qemG7w9pGAfYn4zJJVUUYWEWBEWCYYSk0feBQRK647nBZ/vWPnExVeXK1oz8cB\\ngVbcU2KMRdXDCHgVEBgy/7BpF+Gd50VB4SbdO8A9XH4=\\n=J0A0\\n-----END + false, \n \"journalist_designation\": \"polycrystalline belch\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEAC5C3SwDH5xGvby2ByI8XBtzUtExsXWq4BJA8agVtjWtc5h8ChI\\nYLkJVv3yOdokpJhaOHPEI/FkoiTv9yGrcS7RGItCDYMWQelB9LhOWU/nNwJgWAKH\\nGdf0951TcTzf1FsfeXtmNhfZlpnoaPegdp6qHSEp7rL9AzbhiGmDEi5esN74NZST\\nSwYTMOgOfNOPOkByerdjVSxWkPFelI4GBzfRP7+bvqjguSrQQaTeW3buSZw5ZjuW\\nVnIt5F21Hn6hwspJJXAxqO9MjKkUjtQMz6R6bTnTC13KO8cdYINsLNXYl/VSde4C\\nQ4VKb00+FT3zyzBnF50Uf76eDJoohiJ7OWxzd2mN7nPdnKxwoGV2WlSO9x64YtZU\\nyHqGM3sb90Mhu9VvACBq/UNUNsTtriXbN9NETMJtMp4CNRuaDraK1nbDW4IF27yk\\nHpAap2kA9gx1MrxwaGpradBffUbfolZPagFvIfN4Z6CKJ8DZ/ykgGZm7K75Q+60b\\n0KrWBOviBYAI4j6/AsqCTEAz6X9W0oEMcWdL3wISLzLQgGd/cLXFvBHxUsAqsroW\\niBb5DdYs0gOoEY7zfBFNt1U1zNin1qCftfn8lf9+eOvCqjeXTqSKwzXg0+ffyauL\\nY49XqTrpkR4NKZxFfpkZ3BYjD91BGdijzZM6B6BJQxclXxFPrZECWAP+4QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TlRIQkpDVklaWlFCV1lTREo3T1lCRTNWRTVT\\nNkhZSUVUVk1BWUFFM1hLVkJZRkc0UTdIWVdNS1NVTEJRMjQyR1hVV0xPTDVFS0dU\\nWFUzVlVJUUJPRjYzRDRZNEJFVUNRN1VMRkxGUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEMO0d7F1N2cEgdAP/AmVvya7+M4F\\ncU6YFpeBJshGQ1Zikpye+Qp/YoiDsuZuQfYk1SsI+bWATRz8Wp/Q1Z0U/w5DVyyJ\\nD3Bx/g4+0z0jzDFbZ3srqlNoUmA+JKUmARQAvGpRyCYuFat0Xi2P6dKeLlGXM5/c\\nD8l5Te0kSbHizCD12BOWNoyiB/Txjs9Py4R/rbCMGubhWxlPoqQ/+vbL4rYvnDXs\\ng/UW3PTVFMwG21PuG6vrcIhoJGsCISL3equgYFjdBA4Anl787ARr8mpc8oxZg0P8\\nJJe0Er4UfNh+fnQmyNouP7PqsQNB978Im3fGGchMhgpy7QNwGA5NPFmlL7J8HV9N\\nhix0J0cy70N/YXobfiISQvQ7oVDE06udPSiEJvP4VVdWr191nv525z0rubvdIOYR\\n22nZpu6qZXV/DmpACrCccjrzUc2S+CjKNp9FquxxcHGEZC88H5devLmOApnXwi+1\\npuTYgWuQfp56KXXrvOq5JfXa/z36bgiWhuzWE8ZeoPj4gKr6vnWVpgV1LjASRDs4\\n3+LI8GhEUThQvNgVX9LkzZCdYRMA6lmpJb0c2sjtR6ogSh1eRb+bVD/Xx+fnqBjG\\nv7FbysXda6Zf5M/44Xlqu4/V3CiMulkavaRZMIvOXUbZGQc4mRXDP09l7ACEPoOX\\nJJf1lMqec+QCExd+VWwGSs5rG2ixxNyZ\\n=sJFr\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:41:41.599393Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/remove_star\", - \n \"replies_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/replies\", - \n \"submissions_url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0/submissions\", - \n \"url\": \"/api/v1/sources/c7abe6eb-e9f6-4bea-9d82-740ffcf833b0\", - \n \"uuid\": \"c7abe6eb-e9f6-4bea-9d82-740ffcf833b0\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/add_star\", + \"2019-03-19T18:18:37.336005Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/remove_star\", + \n \"replies_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/replies\", + \n \"submissions_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/submissions\", + \n \"url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82\", + \n \"uuid\": \"14738aa1-b256-4049-8f89-8c97e77d6b82\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"crescent hammerhead\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUiYBEAC/LvvPFnDNksgboyivTh6zsd1/dgx4XJSbssapQ6jxvOBc7YXf\\nz+JY7fySyW+JGdinpF56p+wKZynMMFurBcePO3FFq4p1oMeKJNayWbcqWxNpZBrr\\njdczh+bv5NJ80i54eyNqbk5xB8kzyAbVEryRE3FlcxNfWL8Cukpmxkqhaa6FuTVx\\nWL4sOpfEXA9a3q6BKYkXdm3qu7WE0wWJvJtrcwHvDLOioT7ui7vTltT7fRCMPH35\\nfOxTwMBzDVHdOi4OtRAeRbAG0kC2seNturh+uNzluROqDeCX8vJfVrzWvHruCtjT\\nfWPU24qb683Hga1gXKrQqGsScxK6keJhdDGS4LIflClHs4IKItCGmfahjmbH+ba5\\nSOceMIhdT9+iPegs5TTUWB3euheg0PzDhAA/y3/AeqKKci29erQuIkDlJGSdNpvy\\nnMqzqh47Fxi2F2pavhIMuNuUEXf6CkBN7oq5Mpuvb1iFkwepThm2uEo7rxZ8hOPK\\nSqgocyOe7Zrd91hJPl6MJAkYDQZLZ9/Mfiv5ZV1myPo4nvcRLk+kNClh8KKDb+Ao\\nHcZJgbKUkYEdeTZ6sGStHHx92tU9R0wwlEXJMC50gO4K1BLuVvbeoyQ2zuQUWSyN\\n7G3RIWGGTwNHHxnauO9EUkFM3Fd7KnoyMJsgIy1zcSN6baP/c1OS+G9sswARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NjRYMlVQNEpURFhMT1hWRko3VENORFpLR1VP\\nWEg2WUQ0R0RFSTNHVkJIUVAyVERFNVlYVlBIS1RKVldVUUtTRkpKVkhWQkxBWVlB\\nNlJaREs3M1NYWjdOM1AzMlRPT0FUTVhOS0VYUT0+iQI/BBMBCgApBQJbzlImAhsv\\nBQkB4J0aBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQFZngoIN/lTR3ng/+\\nMml7B9vPfCKaaehCilTqCj7s4o7Tt4wGjientC2ZcaEJCkJtSK/Z0wKUcUZD7q3f\\nyqFdEeHA5jawZZ/vIc+BwuqTI/66MmgeNja5EtSeAPxY70txoci3Tl/K8A5OHD/I\\nRDpOWmlTJGY6bRs/lwDu127kEcEjH+a9f8T7luOg7WnBsKQoLhQrcAm6ZfelPajJ\\nb9zwQDj2v/4cLqYfESqnQQ1QD7TLkHkUOvfEVhoLsf2NZvniZZIJ5f4A9EHzz17o\\n4UorreLmgpW2Z0loSczvoxhpoA48ffYKBakcdlISUDcxP3XnyJh0C5+6wCMVqz7/\\n34y2EeM0hbE8+b4ZPFW/Jb9HMPxVVaG20UhA2g5rK1xjju+NWXfs3O0Q2ZhbuAhX\\nR2p/qRvCkf0KvHUY1AGVIHkzlQ0pQlscxUzj21KWtWWfTBxJy1ocypjeVP3bxVKf\\nu+Du8JUiZjOkDqps8pNgpop8kuEEPgIpj/y0lNMpzBJizEl6M/mLYWZionuW2ccW\\npe+1zYa6dE9A2mGBOQv9EaNXz0CuOYV7MuIWvZqg0g1Joz9oWkjD6a/inldSZ4Fh\\nJbU8/kTP43UzkWcPhW3HXnasZu+3db9ACmqcqPNP7rO3uUmIfIe0fSDiWjfzhEwz\\nVNIAZ0ngTazQDSpz35NzZ+pTLCjBc6D1My0l4jZOSbU=\\n=cO9u\\n-----END + false, \n \"journalist_designation\": \"unapproachable socialization\", + \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADZLdX2qxqfxtJ/tbuloGq9v3cnVWvn2+Aw4HIloWpdOr90Mf2u\\n7vFYHIlxWmzq2ECRnqeSYC5+mC1FAd41EiWQIS6ouWVdE2IKQqoflmiTW0w1ozPd\\n1PHcCpSGtm36/J3YjPNezuowh7cObI67QXloug/3hK1ds2/ZSPguu83koCWZfqWu\\naScBmG9vRTKSiJ5fARE8y9CYTWYQH7grX24Fh+++mJk3gjsvuMpa3eXsN28EHYhZ\\n6Ce7BXgYqgQKhJxwg4HyFJE60hnQUalibg19kOcGkpVPWjZ5WMBv17Lt4mE7Qc2E\\nhHYaBeyrZRVrkBt0n+V0CRhPtPAiwVGYQQ+8OC+xCSfReiMjcRe6BlQR+zLfmpIy\\nkNw/LkkI03onMQZKpt+qdn0brTROo8GD4R9tp5yvOOuMrx0wxQTvNKL3ccnqRE6M\\ntsxHFEvt6CXckYqcYnCePToMmFdKjYlRwjgaLMwoRe34CYdu3DGGnIzLCWoAT84S\\nGBZfg2pRevzwGwrZlC3bJX50j6wzSBN+czIlIsQU4ph7xwFn0FSndLqpPyI/H0tA\\nwM0aYcFUqauazWb2UacoBmPpwlfCgptxjMbVCF0MgTwMQF5FWvOis5mV3tgGKkWa\\now6D1xmwIjQptoTCH1O6d81vejA/WOuPqzlBe8IQfeEUnmEy1WqE9OsoLwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WDNZWldTSllNSTJYWVRUSVNQQ1MzV0xCN0xM\\nS0NaWUxTNlhUV1g2QkdaQ01WSTZMTzdNWDc0NURaTkJWUlBGQ1A1VFVOWkQ3UVNQ\\nSklKUlBaUEtMVDI1V09BMjNZUDREM0xWN1RCUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEJpbTCl+0Do/UFcQAKwmzEWYVRv+\\n4YFZMVt4/1sqjVRrAh3Hs1PHlWnQLUklKK9/RrtGXDlnK+qkhcx/Ros2C2CCfHyB\\nOM6/hinZnvKdEtfn04Zp4ETTJJTd1rPvswEmWwpI6d7q16Ei+ySbCzvFU9L9AW7M\\nd6F83bF6c97VeMONoCmS0YZDvWtje7ehRBwH1psCkqm7wrCEH80taZMsHbMuaVbk\\nNdzscM8cqu1QU90FgLTTd1KEwQJcKIsZzw3gC/uRqBO5Czao6zJCKkQHgFKJ5UG8\\n+20OD2ZcgteMRqL0R/F4wCU6YhWwpMDo4Wv65FfCEUdmPcldLJ/OQLrm5qPHtcYb\\nGQjrk1l6mo4suRbIE4i4mBajyE/WNKGLflGB4+MQjhvGDgS7suWDr9ddFxi9hr+d\\nHS48zN8hL9ARlSMhxbNINmJBEdsHxjPJvIMHHA6eO2mRdyQfHZTmfprLY+92XyXN\\nWixUpqAGI2MnhXohd7Wyz3si9Cf2oi+rmOunWki/BJ2o6QAuG1soFkYOebvGzY+k\\nLtCL1nLt7EydlcWbBENbTkMJH0drdqO22D8U2vEzbLnVoZ84XBeWqypEcBxXXqqP\\n7VwLAcXbjMj9P35/mJUs7N8cngUPb9tTHeBOybqsay7NMpv97wYdgEFYkFaKXPeB\\n/usPcLR/AMOZLM9VSJbuf00sY7S5/L9p\\n=KNNT\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:41:44.151239Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/remove_star\", - \n \"replies_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/replies\", - \n \"submissions_url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240/submissions\", - \n \"url\": \"/api/v1/sources/9eaca32b-b1b7-40f2-b290-cdb3665df240\", - \n \"uuid\": \"9eaca32b-b1b7-40f2-b290-cdb3665df240\"\n }\n ]\n}\n"} + \"2019-03-19T18:18:39.659948Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/remove_star\", + \n \"replies_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/replies\", + \n \"submissions_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/submissions\", + \n \"url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23\", + \n \"uuid\": \"6152a42d-fb5e-40d4-a94d-9eea7caf4f23\"\n }\n ]\n}\n"} headers: - Content-Length: ['5245'] + Content-Length: ['5228'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:41:58 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MTo1OCBHTVQifX0.Dq_jtg.QIkHRFQrSFIxNmv3awdJjiXXT18; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:18:53 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index 6a37acb12..24993f6f8 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -4,99 +4,117 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://127.0.0.1:8081/api/v1/sources + uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"liked crockery\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUtcBEADdTdl0L1u8ODCNOBvDG/Fts9EFsZ+ptsLnOsXinvwgz//n1rSs\\nlAK6lmdC4sy6xjprtK9/9wcE2YQOvn8jF42Ngwbb1bII2TluX3i+4vnihBRR6DRE\\nEyEhHmdj6QV9++3byT1NDSXCi4j5RqYzagBKOvAOxyJwdjkUqCHLPxLaZD4B9Lyu\\ns/4pqVb2DlJaqdDp0N4+/AMZwMzSCB3a2ehOpU91vSZ+PNSEHwZTbveoWoH1R1AW\\nmgFkoIAOMrapTat6JWgGCCmtsIcxSA+drtk0ejv/5FeFqn6qnF9CyI74kLOvpWGs\\nuccHULc/1TrFNId/DmsWXIT9hWEE5BJXamQE230AvUuOjsiPQSuDFvD+vOcnhcVB\\nET5QZBKiBDE2WbcoNmq5i1LWw48Q9tZgMuvCtjzXf4QvaQsb9JHsEPPQeRAmBqWm\\nnlYUNfKpPuIB8q9Mg5DTX6nJ2jSr+PsLFQOz4RE9cZS/s516K9wRf92DZiPMxLEv\\ney4SHXyjK60OdclFU8MVg8HySabQV0ffTSSn5S4R4N0Qy0NndrkW5ll1tCKSeB7O\\npzwwaJuLT3VC+rLkEeqajqWQa5SIgwUXmBl3bQkbpbO9hgEBvzdczsbYvAh6WgNY\\n9l3dlqL3HojEvlvjrB38En6qUgmWyJgiLAz6cf91WhmkIlfvdD9kfPJ2lwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SkNSQ05OTDVLUEZCQlZRQ0hNN0ZENFBQWkNS\\nRklUN040WVBOVjdaNUVMQlJLS1lGUFVYQ0NQRFFORFhaUFlZRlJIWjNLUkxKSk9H\\nUkE1R1dEWTdWQ0NPNzRMQ0tBNEtPWVFaVE9ZUT0+iQI/BBMBCgApBQJbzlLXAhsv\\nBQkB4JxpBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQelrz0V6nPsqkcRAA\\nhNUJMDpFe76xHtLgcZwzxvbFmop40VQPJCJXWl5JsE0rEvrXa64qrDzgyj7a0F8v\\n9pk8M9OvNXXFMQEsqtYqbJGdfA3H53uLO4doj4OrQmappqqBSlof3xqRHJrbWVGk\\n20/ZKUrJvbvFlU9OD0lmWbXS60W9UfPRhCe7p++rKftpF/JZCOicD9DvtqyJalVW\\n7UDpektYL5bovLqcYCofNDoBpARPEeN4eXI6ltWj+92HMwvvYOwkLQO9dz+oCtux\\nBcBDiw15mYrvLqESGBUpDxN9B/iR5VKnq/kyUVNNbXdSZadaVtpwJD2DOXnffGd1\\nnVJ/0ok3DZFcb62IjCJTeQMT9E/fGdfk6ncQ3ocnvWf7zih4GqxskHHSVGpGxiXf\\n2tnxY6VOtU/NuOL7wsvWtAre+c3JgvulklbuDxgPLJpmYB9Uu/5C+l8ToTsfm6w8\\nNHMIILqNd1iY55yLDApky68nuKT856eZ4t1j8eh6wZWResWthIN9eox+nLDX39r3\\neeIFQC1NloXsyxWB2W1LYco1wTaVvr1U47omGNNHG7m+X52m5xjros2vPGJswNdo\\nirlrXBBMcSIY/XuPoYij69EpeHcL/7OcH0XKmgHNeE+agGuct3AXSnXEZ2/GrmBH\\nxyaSMA/Z7nRmKtj5lJyHqSoGcydnQ/UlXLPz47HbXbk=\\n=bwVa\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:44:39.563172Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/remove_star\", - \n \"replies_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/replies\", - \n \"submissions_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions\", - \n \"url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", - \n \"uuid\": \"812948a6-796f-4d2b-8112-5dd25e09130e\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"adherent competition\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUtgBEAC+wZoYqH2/S0O7kZd46DwKEuHbiL1E5FRjZYMEn1ZxdHJAMkpU\\nOl8agjDMwqDTSn3XV5xP0CICChBXytd9VWByyL4BTcNHtg6j9d6XjDe6q/IHP92b\\niBd+IdKAQnzZ+IFhT54mNJzX3rRVMt23RiMxjAhfK9d3c584Fyd7LDbj6DINCg+q\\n7SSYso9Lxhl7F7n30wesqgTyOnFkgGawjiyOzWZeeeHlKmm3Zqhkni22GoP/zGT+\\nQHPATDxHhShAdB9i3+yeT7m3TCwvJ9ReK+GPcBBHVYyxxhrF8XIbAOHODiCU1v2L\\nYSa9nhNtWo+xSYt6VYKzXPnXKJDdrGPROmTQWgpb+5n1WawJx4AMn7ZeNQWKoS3d\\nyx6DmFMyi2xbvtLrXHAMrL2XlhPh/lt5T0KvdqEaBLjau6OYwvax9BkmFtnZJkrW\\nagWoyxEBXOxWfQYYQYLhnG4Sx33rNV/Lv/+Zc06wFWyNFfM/2i1Sw6p0X36Ykjlo\\nRsfib/AM9Y4CNtlz5Vmy3A6635xETp0Bo0244sF7hjxcSRgW3rpNS42ELYdvmKxn\\nW4PvvIMMZJ3Ev0pWWtnUDGYwykm+X7P2/PIiIO8t6DVsqVxX4Wk6V4tnAdE3k0P+\\ngi+WZLhe0U1YQIJPAcOBnjdToghmEZKHjpNIGANRZ42YecfOJxhCWw/sRwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TElaRFhITlVEUFFNVUc1SzdBVVVGSjI3TTc0\\nM0k2UVpRVExUVlY2MzNNQ0NFVzNPN0VMSlQzM1hVM0tZWlZZTkhYSElJUlo0N0RN\\nUUZQWFlXR0gzSE5RRzcyR0w3U1FDQUU3Q0VYQT0+iQI/BBMBCgApBQJbzlLYAhsv\\nBQkB4JxoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsLqvJ5AlM6LfhA/+\\nOj2WZO0++uZumsjizWW+F0gytLxT7JhIcs2u+BGdFCNt0FM1Nkwi6d4+iTTKApPf\\nqFfbXKkUwMy5hnRCZYLp0rTnuJ/lfbCOziZ0oSsQtoPUC7g80nGpRt2LZgGTnLh3\\nT/m9Z80lDHskhUURgfYATQPOdiH02Ml2GJhzAVKd8xfwOZ0lwL/ZwR8OZffMKUs6\\n2MD+8rxzebNF0/Oau4l8g8tLc8OnYYC+EB5mpWP1BzOXK8B6EaKft6jo8eNSHAVl\\nk8BPAdQeY5vOxI6c7eBke7bVhqkU66pV6INfrhQSTms9SzRhCFkZt3PGpqOGAfxA\\nxNQfXNNYo3SOcvZ4l+CAuZ0XKk9fxUB5yvN9ng8WOiuA5et3/FsqF5owYiX0qOWX\\niy8obcCSvK1ye7mweSaIlXxpH5eWMGNvsa6LcF5+jQyc/nsQkauf0kdRxhRrZ/k1\\n2fCUA4m4rw7jFFQDM4vetXAtP0JOI+grvK7PYkAzUZqoFqeUk2tqG0tA3oEFef98\\nHKPMZS7buQyuMFtaylA8qmbLQ4Iu+xrKoakOXsj9+hQW7AjTxNv2kTbIea+TIWC7\\neglLznBmrNU9bvYSE9mH7pIsKESnRatPyOxkND7YKXJGbSbgZvL4RtQFkiVPvE+8\\nlNdFeUoU0B1znKWRUltex6qwo0ulxT93P1XUFoQjbbI=\\n=SYrM\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:44:41.526914Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/remove_star\", - \n \"replies_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/replies\", - \n \"submissions_url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1/submissions\", - \n \"url\": \"/api/v1/sources/0fe2a494-cda9-4201-9fb5-b4c672568eb1\", - \n \"uuid\": \"0fe2a494-cda9-4201-9fb5-b4c672568eb1\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a/download\", + \n \"filename\": \"1-saurian_parley-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", + \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a\", + \n \"uuid\": \"52f8cd06-9930-4df3-91be-d85ce7ad150a\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164/download\", + \n \"filename\": \"2-saurian_parley-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", + \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164\", + \n \"uuid\": \"16c4b949-ce72-4630-afe1-3edc6fb9a164\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/59d06a2b-a175-4d46-94c8-1c4d928c115b/download\", + \n \"filename\": \"1-archival_advancement-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600\", + \n \"submission_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/59d06a2b-a175-4d46-94c8-1c4d928c115b\", + \n \"uuid\": \"59d06a2b-a175-4d46-94c8-1c4d928c115b\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/1cf8dd19-a9bc-487f-9505-355daea34e85/download\", + \n \"filename\": \"2-archival_advancement-msg.gpg\", \n \"is_read\": + false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600\", + \n \"submission_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/1cf8dd19-a9bc-487f-9505-355daea34e85\", + \n \"uuid\": \"1cf8dd19-a9bc-487f-9505-355daea34e85\"\n }\n ]\n}\n"} headers: - Content-Length: ['5237'] + Content-Length: ['2049'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:44:45 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDo0NSBHTVQifX0.Dq_kXQ.xvFvIVdu41OSbLqQ8INC6cxUcyk; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://127.0.0.1:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions + uri: http://127.0.0.1:8081/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114 response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da/download\", - \n \"filename\": \"1-liked_crockery-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", - \n \"submission_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da\", - \n \"uuid\": \"fd20e9ce-663b-48c8-8cc2-bdaff00f95da\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/f0dcf445-271f-4b7d-9b77-f1701c81b11b/download\", - \n \"filename\": \"2-liked_crockery-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", - \n \"submission_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/f0dcf445-271f-4b7d-9b77-f1701c81b11b\", - \n \"uuid\": \"f0dcf445-271f-4b7d-9b77-f1701c81b11b\"\n }\n ]\n}\n"} + body: {string: "{\n \"add_star_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/add_star\", + \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"saurian parley\", \n \"key\": {\n + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEACybFLV8+B4SkE/Ier8Zw/FTUa0QHpRAXzQfZYJQ7AIe9nmvwmL\\nha8yvLH/2TVu9h9vqMqVDdSOGq7AyqzZJUSvO9g3YJD+reMXzrHCQynlBp1ljFyZ\\nDcfH2WXG0GougWuxcC5FRixUb55t3Oi3jUecQyBa8sTp5GvuFZ5TTpzmXBJn8oa8\\nwXJlZFkg99fkSvhGCjG7rR80PNB2NaAKFI2yXxCNsrpMktzbKF/683LJxiPWRmqS\\nSeJHKynwyE8TXdUTkdvp18NR2VV+rXyAoQJZBcer1e96SSyNrnNuXnznOuHyc0Tz\\nxLEgLECeu7bt8tKRPzn+2e+EqDRceeK67p+annHMDSsIegVeQllR9cDD7MoRduOM\\nT9hWUldcajjpDA0exap+p8vXzxhbdRxZREgqCl1eMxmvT5ggv3xErcw3xJqMpYl2\\npx2ZVZnlwbgXS757qhhS8CPukBIQVsh/jeA9UHyI1IwsKExzy7Yyam6/gimkDlE+\\ntgS6z5axEGc3nI1MPP0IUm4ifHKixEGClGAE3TZvLex+tcXDHmzB2LKUaHUGEIZV\\nNGnH6o2kxqxwCgMCTmA1HlGLUqCLOq+8XQ8QZXRmvkUL6C8C0JJB9x+7yBw996g0\\nSOaibc1tfGJz+0tus7lklt8cwVpPwWc9Rj1J0KRgPoSTeriToKChYmf0iwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFlTNDY3SFdOQjdRUkhHWTROS1g1Mk4ySkE2\\nN1hWV0JNR0tZU0tDRTZVTURKUUhQT0ZBTE1MUExORjM0SUNWSFpEVVAzV0MzRTVa\\nNlNOVk5TRVpRNllYWTRKNUpIVU42UVdYQTdOUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDGBnpwhwH88AlYQAJWQm6EE1NCr\\ndOM1grKGsPZx7ELb/6+4lQRlO2mEQfy9ngOMmJygQXdULGfY53f1QohBsEV2dvCQ\\niVlVNA42CF7TcEQW9qXR8hZbMF/WWxsGHjm/Andvb5NA4NYdd4WoVQs38ws/VV0z\\nggGsM6o99/9HamhQjXUZNcXhj1INf7jG7I/mFECV/ZUWs5Q6ChfONnw65Tg6CBoL\\nmieTK8snhepq0pmBABtsiN5MPn3XfcWBZXB5Lm4429IBHVRBNTt4L/g/3n+iQ9j/\\nPE/40GRBSOvoTlfxrnskA3TYaSodxz4yX1qlYTGPhL/tIRzJHTRZYF60+DKsgitH\\nI5wanH5KA11ZjuhfL025Uvi2uBBEwWRQaY67Hj8qg8ptxfw9CDznssnh2Fx6cOX8\\n+AlELuJ0avubvKc9m7hpWfrrlWSBltVDs9ZDOdA9ZGg2Jdo8MIky/nYevVOUZQ7X\\nJ/02VJx0b6gSTtMxsXoYi7YoU61qmV1UYJFyebhSC1NRtGyiHhdRT/oizKFNmAUE\\n1lokWTxMqV8Nyc+DqdCfMLKYXrqJodJdBSPFbVOI4q7M3Pvh3m2mzp76uXCl1pRg\\nGyRqYDRTlpmRz2AGm7xSpVFNnRCqUwCXEpQTudwkPv+eEx4nseNDNHYdSd36Teva\\nKBVvCg5ykdCYpaeSSVRWwXVdxJK74MmM\\n=7Ki5\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2019-03-19T18:53:26.366059Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/remove_star\", + \n \"replies_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/replies\", + \n \"submissions_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions\", + \n \"url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", \n + \ \"uuid\": \"92ce92a4-81aa-4a68-8d9f-4636e0d00114\"\n}\n"} + headers: + Content-Length: ['2515'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] + Connection: [keep-alive] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: GET + uri: http://127.0.0.1:8081/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions + response: + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a/download\", + \n \"filename\": \"1-saurian_parley-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", + \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a\", + \n \"uuid\": \"52f8cd06-9930-4df3-91be-d85ce7ad150a\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164/download\", + \n \"filename\": \"2-saurian_parley-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", + \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164\", + \n \"uuid\": \"16c4b949-ce72-4630-afe1-3edc6fb9a164\"\n }\n ]\n}\n"} headers: Content-Length: ['1031'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:44:45 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDo0NSBHTVQifX0.Dq_kXQ.xvFvIVdu41OSbLqQ8INC6cxUcyk; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://127.0.0.1:8081/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da + uri: http://127.0.0.1:8081/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da/download\", - \n \"filename\": \"1-liked_crockery-msg.gpg\", \n \"is_read\": false, \n - \ \"size\": 604, \n \"source_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e\", - \n \"submission_url\": \"/api/v1/sources/812948a6-796f-4d2b-8112-5dd25e09130e/submissions/fd20e9ce-663b-48c8-8cc2-bdaff00f95da\", - \n \"uuid\": \"fd20e9ce-663b-48c8-8cc2-bdaff00f95da\"\n}\n"} + body: {string: "{\n \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a/download\", + \n \"filename\": \"1-saurian_parley-msg.gpg\", \n \"is_read\": false, \n + \ \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", + \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a\", + \n \"uuid\": \"52f8cd06-9930-4df3-91be-d85ce7ad150a\"\n}\n"} headers: Content-Length: ['465'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:44:45 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDo0NSBHTVQifX0.Dq_kXQ.xvFvIVdu41OSbLqQ8INC6cxUcyk; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index bb2eb316d..88d89f6e6 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -4,73 +4,67 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0NzYxMywiaWF0IjoxNTUzMDE4ODEzfQ.eyJpZCI6MX0.S1gNx3iwOmQgjjY7Pqhmkpbk3JCszng0eu31LbMOQhM] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/add_star\", + body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"edifying skirl\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUr0BEACvcCyZhtHIISBjknSpJdjfKdqg3BHpVCgMEwCU0X1OgMgeRhCv\\np1SEDuIMYA4j35imZmohVFZMkDJTGzwaSGHpcUeOfzTtmSWBSNdpSuMwg4+xteEL\\nBY6o3gfu+L92Q3b9T2wAhGsHBJ+YODW3ShkWSF7hms1fdCMtm0z2C2GraoQGL91c\\nhr1KAQ/AZ5Sp/2ZV7T6AODT0HxETGM8FwWs2PNFtjAiKKC3wnAZswGPcEnfFj+ds\\nbRBZ1ebdEtYGAJ9q08suvoKLdNkBN0qsv5ws72C4tzSAeYTrXLvGdnABh/MjUxI4\\n6Hp0yYjTGbWHfvXOKtCDpvW48ZJTVumwiaeNWCh45UAnpFUa5LnESD7aUgemWUXh\\nkV2ot0Z8hGdvyW+NqrQkj7LrrHSKGGsbDOtdeIZZvyLoSzGYzxjqFOw2fqFLxJlf\\nOmmd1fOWh3MR2f99Nuh83szU13on4PttbSYZBEZbexMV0InHBxfMT+MvG32LcE1B\\n2WTev1yRDaqIUFFXNppdjv5xhncnO7DPduxw2NTd8oJQdvC2k5PqlJuyRci5q+Ke\\n2qyaSe0e6mWq3LCSq/CDWWN6LSvmp4Wn7wGwe+ueT8H0d4bnyQARkpmzNimZVBNX\\nks5cuZNY3kYxOS77Bk8tw913LJIoIzFRM2YuCmPRkJNJJ3WO3pAWpeQigwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RURPSDNKNjcyVFpKNVlCN1VYVElLRDNKUFRG\\nSUJHNUgzSkdLSEsyM1o2SEJHTTVITFpPSzJIUldVMlAzTlBITVBJVEQ3Szc0SUhH\\nNkRSUzNIVktTTUVONVAyQ0UzRVRWT1c3Rko3UT0+iQI/BBMBCgApBQJbzlK9Ahsv\\nBQkB4JyDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQZAGdNw3GjJ0k8BAA\\nrCtl1OLHdjkYccJjuxmVXqYHLWANnkOgYdbT4sxx8NxnQwIGYnEkHs9NrPg9lstX\\n/FaVyfdq0dSDVT9GsJlpd6puDYBq+pQFCv1IT5IF7ZVhsA3XjKardkd4imzgZ1T0\\nzMPbCBOjrkBVBSKqadYUgGRemQagJs6xvmwkpRFf4iUqp/KuJQ7Fv3+jeHJSi+TS\\n5uRjg01rGuNT/6kGBrc1tD6aAKNhZsi96r0vlidvqMQ8GLUidyY+wDSB8UeqSV1+\\ntXiMlGSe9jvUrMPSORsqDqw+noBt3Z/Df7AkreIpr0qaWtSYJmxx0pRtJ8rYxozY\\npqzpxnspZC7bd+w4PnjZ+4Abh1EgrAMbbKIT2FeED/4ODxFgUQ+/6hQC4ITyaukb\\nJygNpdLIQleCezNWMpYqW5lIQwLaSf+/F8ehHwd/KcceozcHXzexojyGZ71BPGfv\\nDECEB7q3m758sy1F1OEejHCNb7VtXdhANQftYMwtOIvWpaQDJoCuqisHVhwTvZmM\\n0/dks45ha6k5TmqST8FW3bye98FVO5upFaFH9pr0pBPfRbNztpkjfU+u071gPDuQ\\ntV1TpRaLYnz8mc0sFEzEFtz3fVeDpgEAPgBdgd6vGYr7Q9L4FjRPMwzYgxd+71zz\\ndsgG2Ilor0elEnh4eofJ3GvQVeDpxEXRQByOG07q6c8=\\n=Si7y\\n-----END + false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": + {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:44:14.624438Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/remove_star\", - \n \"replies_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/replies\", - \n \"submissions_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions\", - \n \"url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664\", - \n \"uuid\": \"26fe81f9-4d35-4999-9fd6-70963e9fd664\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/add_star\", + \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", + \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", + \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", + \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"fair dependence\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUr8BEADKa2dGTB4HWmaJ1GW38NSsG5gBnL5ff/bw+Ck/o3KFCWnSBhA6\\nLSbsAQRmjJyy3XM/MRDmnE+gdG6h0TerOSej6dEJtjDptmD2aO35qrp1qStbfo8k\\n6jA43syX0b87atMKCYvMO+LZPOTteFjlae4Jayg0ZEsuyST2Gjae+VuXF7TMoPf0\\nVdz+ZVhbJmulorN6sScRlCyxNW3uPR8e+iijQn2vJOKDP5HWny2JbpxEWbz5ltnN\\nM9zWkvbdJz4+YdUou0PKftM7QHtJlY5mooN96OqGxGUoN3DhBjWsJQKxLA6dRG2c\\nqu4AZ/g/dirsc8+PCBM7581ngsnJr6hh4l6n67rRPgl4kFttbAVrUPn1EyPbbV2u\\nKD6D3nqEm2F07+5R20+/F3gezLNl4xducv0zVjS+0lxXTKnnS1a++iqG4HfM8gbV\\nWp9OUxlcFoGBjKHknEYUYxvi510SvisuZzIgLy2XzQAofIk1JyyqI6HeX4S6qLW9\\nSEH/GsJmd+W+AP5zDCaUOrxdATqcIXKvfbvPECjbZsgp66p5pDf4aWHhQrDw2Vbr\\nag/RngRS3PdHomVQTE0iI7dqY5zmXAAkDYvsobh+0fSJ3xAofF9UXEFxICnbIit3\\ngpK824P/qTzdiY8s0iNkSZOwkQm5IAKllh3A/1gSsK0kDKY65wGwvFUFeQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U1JFTlo3T1U1NVQzSFFaQVpWTTJRSklCUlBG\\nVU1XNUdBUDNVUzNVMlFRREdQNVpTS0lTV1NMQVlVTzNVUFpXT0NYWTdRREJFUDdH\\nM1NDVUNSQVJVSENQREtFWlQ2R0pXVlBTWFFRUT0+iQI/BBMBCgApBQJbzlK/Ahsv\\nBQkB4JyBBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ5/jlXeWpiJjfVA/+\\nO5ve6MyFPWT8DPb7UumsbP5iypQ2T4AwpyLHwWdV1Kcpxo6zStLjhAqX+sjivRG+\\nCvHOuduFBliKS47XoPfPdaZqKIKCz3w1Zmc3apBPfsNyvIZotuphT/3I7KJlD7nq\\noBQ77iybOiEZ/J/LhVuEb73n2EiKU5YmmfaHbG1M0NwXgdDPr3Frw1E4Hl/1iINF\\nGqrTGr9lnFxUSnyPvyeri4MQRJq2UH4RnVecam6PstqH79n5DHP2+Xw1sDzdszja\\nehQaMS2xNLa/U0KEYF8932ti2eqWzPKGaKe6aTQH0NPk89oBCeVOLQNnvsZlnkBp\\npWQRrSlBEOYThQMCs+2+Zn4pVv40wgccpfyepZVOf7l7JxyBm/V3MS8orbpVZ2Z2\\nmglEtNNfGnTdEZ2q7NrEMp27nze7BfP0TE5VZJ75ADZQubGhAWOEuXBiZlnqN1CE\\nDfg66Au38EhUJ95nwSoQHv9P+ipn2hvt/oAu2asV7zJUKIZcQJeMXOq2HoQ7vT8S\\nGXL/I78EIbwUJzZ0CtYuqRdmVPkJ6A7Ah1tFyvU8sDyfOuBrN8CSHyESaH9vTsFT\\nT6a24wHNGJmkEcDeypk5osa0/zmy14zVv4BbgLwBqSg/Fzzl0u14pzAO64KVaSWr\\neHt/yxwIukpnAp/REuPpLZ56AZLRIWBeOwDsSrQQOxg=\\n=g/yZ\\n-----END + false, \n \"journalist_designation\": \"exasperating microscope\", \n + \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:44:16.419089Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/remove_star\", - \n \"replies_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/replies\", - \n \"submissions_url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b/submissions\", - \n \"url\": \"/api/v1/sources/7fc4c7ed-444d-4492-91e3-f2260cb5239b\", - \n \"uuid\": \"7fc4c7ed-444d-4492-91e3-f2260cb5239b\"\n }\n ]\n}\n"} + \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", + \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", + \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", + \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", + \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} headers: - Content-Length: ['5232'] + Content-Length: ['5214'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:44:21 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDoyMCBHTVQifX0.Dq_kRQ.odwxnimAyJkaGlMzCFh2lQfcNHc; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:06:53 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} - request: body: null headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0NzYxMywiaWF0IjoxNTUzMDE4ODEzfQ.eyJpZCI6MX0.S1gNx3iwOmQgjjY7Pqhmkpbk3JCszng0eu31LbMOQhM] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET - uri: http://127.0.0.1:8081/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions + uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/0f939198-de40-4689-bacd-983c1c678bbd/download\", - \n \"filename\": \"1-edifying_skirl-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664\", - \n \"submission_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/0f939198-de40-4689-bacd-983c1c678bbd\", - \n \"uuid\": \"0f939198-de40-4689-bacd-983c1c678bbd\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/9eb3e575-eec2-40b0-8a78-02317d60dce8/download\", - \n \"filename\": \"2-edifying_skirl-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664\", - \n \"submission_url\": \"/api/v1/sources/26fe81f9-4d35-4999-9fd6-70963e9fd664/submissions/9eb3e575-eec2-40b0-8a78-02317d60dce8\", - \n \"uuid\": \"9eb3e575-eec2-40b0-8a78-02317d60dce8\"\n }\n ]\n}\n"} + body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", + \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", + \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", + \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, + \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", + \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", + \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }\n ]\n}\n"} headers: - Content-Length: ['1031'] + Content-Length: ['1027'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:44:21 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NDoyMSBHTVQifX0.Dq_kRQ.hifQv31Sq4zxpiDgIxXxB1_hDSU; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:06:53 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test-setup.yml b/data/test-setup.yml index 03485ba84..9fd4b4198 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,7 +1,7 @@ interactions: - request: - body: '{"one_time_code": "378795", "username": "journalist", "passphrase": "correct - horse battery staple profanity oil chewy"}' + body: '{"one_time_code": "278592", "passphrase": "correct horse battery staple + profanity oil chewy", "username": "journalist"}' headers: Accept: ['*/*'] Accept-Encoding: ['gzip, deflate'] @@ -11,15 +11,12 @@ interactions: method: POST uri: http://127.0.0.1:8081/api/v1/token response: - body: {string: "{\n \"expiration\": \"2018-10-23T06:41:58.606548Z\", \n \"token\": - \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720\"\n}\n"} + body: {string: "{\n \"expiration\": \"2019-03-20T02:56:30.121480Z\", \n \"journalist_uuid\": + \"f775c4e9-e616-4fd4-9d87-e42cef293c3b\", \n \"token\": \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0\"\n}\n"} headers: - Content-Length: ['188'] + Content-Length: ['250'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:41:58 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MTo1OCBHTVQifX0.Dq_jtg.QIkHRFQrSFIxNmv3awdJjiXXT18; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/tests/test_api.py b/tests/test_api.py index a17282764..1762e1067 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -17,6 +17,9 @@ from utils import load_auth, save_auth +NUM_REPLIES_PER_SOURCE = 2 + + class TestAPI(unittest.TestCase): @vcr.use_cassette("data/test-setup.yml") def setUp(self): @@ -45,7 +48,11 @@ def test_api_auth(self): @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): sources = self.api.get_sources() - self.assertEqual(len(sources), 2) + for source in sources: + # Assert expected fields are present + assert source.journalist_designation + assert source.uuid + assert source.last_updated @vcr.use_cassette("data/test-star-add-remove.yml") def test_star_add_remove(self): @@ -84,11 +91,14 @@ def test_get_submissions(self): s = self.api.get_sources()[0] subs = self.api.get_submissions(s) - self.assertEqual(len(subs), 2) + for submission in subs: + assert submission.filename @vcr.use_cassette("data/test-get-submission.yml") def test_get_submission(self): - s = self.api.get_sources()[0] + # Get a source with submissions + source_uuid = self.api.get_all_submissions()[0].source_uuid + s = self.api.get_source(Source(uuid=source_uuid)) subs = self.api.get_submissions(s) sub = self.api.get_submission(subs[0]) @@ -96,7 +106,9 @@ def test_get_submission(self): @vcr.use_cassette("data/test-get-submission.yml") def test_get_submission_from_string(self): - s = self.api.get_sources()[0] + # Get a source with submissions + source_uuid = self.api.get_all_submissions()[0].source_uuid + s = self.api.get_source(Source(uuid=source_uuid)) subs = self.api.get_submissions(s) sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) @@ -112,7 +124,8 @@ def test_get_wrong_submissions(self): @vcr.use_cassette("data/test-get-all-submissions.yml") def test_get_all_submissions(self): subs = self.api.get_all_submissions() - self.assertEqual(len(subs), 4) + for submission in subs: + assert submission.filename @vcr.use_cassette("data/test-flag-source.yml") def test_flag_source(self): @@ -124,29 +137,35 @@ def test_flag_source(self): @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source(self): + number_of_sources_before = len(self.api.get_sources()) + s = self.api.get_sources()[0] self.assertTrue(self.api.delete_source(s)) - # Now there should be one source left + # Now there should be one less source sources = self.api.get_sources() - self.assertEqual(len(sources), 1) + self.assertEqual(len(sources), number_of_sources_before - 1) @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source_from_string(self): + number_of_sources_before = len(self.api.get_sources()) + s = self.api.get_sources()[0] self.assertTrue(self.api.delete_source_from_string(s.uuid)) - # Now there should be one source left + # Now there should be one less source sources = self.api.get_sources() - self.assertEqual(len(sources), 1) + self.assertEqual(len(sources), number_of_sources_before - 1) @vcr.use_cassette("data/test-delete-submission.yml") def test_delete_submission(self): + number_of_submissions_before = len(self.api.get_all_submissions()) + subs = self.api.get_all_submissions() self.assertTrue(self.api.delete_submission(subs[0])) new_subs = self.api.get_all_submissions() - # We now should have 3 submissions - self.assertEqual(len(new_subs), 3) + # We now should have 1 less submission + self.assertEqual(len(new_subs), number_of_submissions_before - 1) # Let us make sure that sub[0] is not there for s in new_subs: @@ -154,14 +173,16 @@ def test_delete_submission(self): @vcr.use_cassette("data/test-delete-submission-from-string.yml") def test_delete_submission_from_string(self): + number_of_submissions_before = len(self.api.get_all_submissions()) + s = self.api.get_sources()[0] subs = self.api.get_submissions(s) self.assertTrue(self.api.delete_submission(subs[0])) new_subs = self.api.get_all_submissions() - # We now should have 3 submissions - self.assertEqual(len(new_subs), 3) + # We now should have 1 less submission + self.assertEqual(len(new_subs), number_of_submissions_before - 1) # Let us make sure that sub[0] is not there for s in new_subs: @@ -230,7 +251,7 @@ def test_download_submission(self): def test_get_replies_from_source(self): s = self.api.get_sources()[0] replies = self.api.get_replies_from_source(s) - self.assertEqual(len(replies), 2) + self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE) @vcr.use_cassette("data/test-get-reply-from-source.yml") def test_get_reply_from_source(self): @@ -247,8 +268,9 @@ def test_get_reply_from_source(self): @vcr.use_cassette("data/test-get-all-replies.yml") def test_get_all_replies(self): + num_sources = len(self.api.get_sources()) replies = self.api.get_all_replies() - self.assertEqual(len(replies), 4) + self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE * num_sources) @vcr.use_cassette("data/test-download-reply.yml") def test_download_reply(self): @@ -269,7 +291,9 @@ def test_download_reply(self): def test_delete_reply(self): r = self.api.get_all_replies()[0] + number_of_replies_before = len(self.api.get_all_replies()) + self.assertTrue(self.api.delete_reply(r)) - # We deleted one, so there must be 3 replies left - self.assertEqual(len(self.api.get_all_replies()), 3) + # We deleted one, so there must be 1 less reply now + self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) From 7a723260324f049d40df7063052a286ea7b4e94d Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 25 Mar 2019 13:00:01 +0100 Subject: [PATCH 153/751] added changelog entries for 0.0.5 and 0.0.6 --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c77565450..474697568 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,17 @@ Changelog ========= +0.0.6 +----- + +* Fix auth header to user "Token" and not "token" (#56). +* Parse the new required field `filename` in the response when posting a reply (#54). + +0.0.5 +----- + +* Allow clients to set UUID of replies via API (#49). + 0.0.4 ----- From 98433b4a8699b0b0f26470dfe86f2d53c7bc528d Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 8 Apr 2019 15:49:57 +0200 Subject: [PATCH 154/751] skip pipenv's locking mechanism in CI --- .circleci/config.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a0ab8294e..7dada36b6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,7 +17,8 @@ jobs: command: | set -e sudo pip install pipenv - pipenv sync --dev + pipenv install --dev --skip-lock + pipenv run pip freeze - save_cache: key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} paths: @@ -46,7 +47,8 @@ jobs: name: Install dependencies command: | sudo pip install pipenv - pipenv install -d + pipenv install --dev --skip-lock + pipenv run pip freeze - run: name: Download SecureDrop server code command: git clone https://github.com/freedomofpress/securedrop.git From f59344db3144a450ae829521434989a3a4e718a9 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 8 Apr 2019 15:50:54 +0200 Subject: [PATCH 155/751] use consistent make targest do ci matches dev --- .circleci/config.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7dada36b6..612893754 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,11 +27,10 @@ jobs: - "/usr/local/lib/python3.5/site-packages" - run: name: Run linters - command: pipenv run make check + command: pipenv run make lint mypy - run: name: Run tests - command: | - pipenv run python -m unittest discover -v tests/ + command: pipenv run make test - run: name: Check for known CVEs command: pipenv check @@ -75,7 +74,7 @@ jobs: name: Remove VCR cassettes and run tests against latest API command: | rm data/*.yml # Removing VCR cassettes - pipenv run python -m unittest discover -v tests/ + pipenv run make test workflows: version: 2 securedrop_ci: From fa85ca206902e9d44d8a51d39120d4dad86ee50b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 12 Apr 2019 09:39:22 -0700 Subject: [PATCH 156/751] doc: explain how to make a release and update on PyPI --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index e41ddd835..a801203b5 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,14 @@ Additional tests will be added in future. To test the code, you will need to run the SecureDrop `make dev` command on the same system. The test suite for this project will test against that development container. +### Release + +To make a release, you should: + +1. Update the version in `setup.py`. +2. Update the changelog. +3. Commit the changes, and `git tag`. +4. Create a PR, push the new tag, and get the PR reviewed and merged into `master`. +5. Push the new release to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). + ### License: GPLv3+ From 219d72e4e948ed43e5e08a148b375cc63a6177b9 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Fri, 12 Apr 2019 18:21:32 -0400 Subject: [PATCH 157/751] Update PyYAML to 5.1. Fixes #52. --- CHANGELOG.md | 5 +++++ Pipfile | 1 + Pipfile.lock | 29 +++++++++++++++-------------- setup.py | 2 +- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 474697568..0516c4bcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.0.7 +----- + +* Update PyYAML dependency to 5.1 + 0.0.6 ----- diff --git a/Pipfile b/Pipfile index 544bb9227..672087bb9 100644 --- a/Pipfile +++ b/Pipfile @@ -19,3 +19,4 @@ pytest = "*" pytest-cov = "*" sphinx = "*" vcrpy = "*" +pyyaml = ">=5.1,<6" diff --git a/Pipfile.lock b/Pipfile.lock index 622495fcc..69e925ab2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "465ada309c90d437e5e6c38d3b7782430f03ffd987df26fd50f3a308ab478a4c" + "sha256": "438b38b762b42f6b272a27811c4e01d9ad2a3ccbca8c1d93103efd636cb21ce9" }, "pipfile-spec": 6, "requires": { @@ -343,19 +343,20 @@ }, "pyyaml": { "hashes": [ - "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", - "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", - "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", - "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", - "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", - "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", - "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", - "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", - "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", - "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", - "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" - ], - "version": "==3.13" + "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", + "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", + "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", + "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", + "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", + "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", + "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", + "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", + "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", + "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", + "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" + ], + "index": "pypi", + "version": "==5.1" }, "requests": { "hashes": [ diff --git a/setup.py b/setup.py index 65e8aa345..78e90d115 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.6", + version="0.0.7", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 68e8b4dd07e13513d34e66394473bae830767fe7 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 15 Apr 2019 13:24:39 +0200 Subject: [PATCH 158/751] clean up header for documentation root --- docs/index.rst | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index da9e181ce..169a6139f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,10 +1,7 @@ -.. sdconfigapi documentation master file, created by - sphinx-quickstart on Thu Aug 2 16:55:50 2018. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. +.. sdconfigapi documentation master file -Welcome to sdconfigapi's documentation! -======================================= +SecureDrop SDK Documentation +============================ .. toctree:: :maxdepth: 2 From 1ca0ea6e4b2edc59b48d3bbdd7fb66a1edfa334b Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 15 Apr 2019 16:07:29 +0200 Subject: [PATCH 159/751] remove unused docs file --- docs/index.rst | 1 - docs/install.rst | 4 ---- 2 files changed, 5 deletions(-) delete mode 100644 docs/install.rst diff --git a/docs/index.rst b/docs/index.rst index 169a6139f..6161c20c0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,7 +7,6 @@ SecureDrop SDK Documentation :maxdepth: 2 :caption: Contents: - install development diff --git a/docs/install.rst b/docs/install.rst deleted file mode 100644 index 59a38def5..000000000 --- a/docs/install.rst +++ /dev/null @@ -1,4 +0,0 @@ -Installation -============ - -TODO From ff5588d1d903f2eb64992e7d10b34920db78ee25 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 15 Apr 2019 16:23:22 +0200 Subject: [PATCH 160/751] sync docs to match current behavior --- docs/development.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/development.rst b/docs/development.rst index e202a1815..a23c19dc9 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -7,7 +7,7 @@ the project. Git clone the project repo, and use the following command to create a new dev environment. The second command is to enable the virtual environment. -:: +.. code:: sh pipenv sync --dev pipenv shell @@ -26,13 +26,13 @@ allow to have real token from the server. To run all the test cases, use the following command. -:: +.. code:: sh - $ python -m unittest discover -v tests/ + make test To run a single test, use this following command, replace the test case name at the end. -:: +.. code:: sh - $ python -m unittest -v tests.test_api.TestAPI.test_error_unencrypted_reply + make test TESTS=tests/test_api.py::TestAPI::test_error_unencrypted_reply From 3f3f452a8b463e91a71896a6997b02f3579ac788 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 15 Apr 2019 16:30:31 +0200 Subject: [PATCH 161/751] better formatting of original text --- docs/development.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development.rst b/docs/development.rst index a23c19dc9..578d1c700 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -17,11 +17,11 @@ environment. The second command is to enable the virtual environment. Testing ======== -The `tests` directory contains the test cases for API. We are using `vcrpy +The ``tests`` directory contains the test cases for API. We are using `vcrpy `_ to mock out the test calls. If you want to run the tests against an actual SecureDrop environment, please -comment out the `@vcr` decorator of the `setUp` method in the test. This will +comment out the ``@vcr`` decorator of the ``setUp`` method in the test. This will allow to have real token from the server. To run all the test cases, use the following command. From 9b8c08aa695cec1bf1e64941e787b5d07a0c5cb8 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 15 Apr 2019 17:11:18 +0200 Subject: [PATCH 162/751] updated dev docs --- README.md | 34 +++++++++++----------------------- docs/development.rst | 40 +++++++++++++++++++++++++++++----------- docs/index.rst | 17 +++++++++++++++-- 3 files changed, 55 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index a801203b5..67ba6bbdc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Python SDK for SecureDrop +# Python SDK for SecureDrop [![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/master.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/master) @@ -8,29 +8,17 @@ The SDK is currently used by the [SecureDrop Client](https://github.com/freedomo **IMPORTANT:** This project is still under active development. We do not recommend using it in any production context. -### Development +## Developer Quick Start -This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. -This is a Python 3 project. When using `pipenv` locally, ensure you used the `--keep-outdated` flag to prevent -dependencies from being unnecessarily upgraded during normal development. +```bash +pip install -U pipenv +pipenv sync --dev +pipenv shell +make test +``` -We cover all the API calls supported by the SecureDrop Journalist Interface API. +More complete documentation can be found in the [`docs`](./docs) directory. -Additional tests will be added in future. +## License -### Testing - -To test the code, you will need to run the SecureDrop `make dev` command on the same system. The test suite for -this project will test against that development container. - -### Release - -To make a release, you should: - -1. Update the version in `setup.py`. -2. Update the changelog. -3. Commit the changes, and `git tag`. -4. Create a PR, push the new tag, and get the PR reviewed and merged into `master`. -5. Push the new release to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). - -### License: GPLv3+ +The Python SecureDrop SDK is licensed in the GPLv3. See [`LICENSE`](./LICENSE) for more details. diff --git a/docs/development.rst b/docs/development.rst index 578d1c700..06127a017 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -1,8 +1,11 @@ Development ============ -We are using `pipenv `_ to manage the dependencies of -the project. +This project uses `pipenv `_ to manage all dependencies. +This is a Python 3 project. When using ``pipenv`` locally, ensure you used the ``--keep-outdated`` +flag to prevent dependencies from being unnecessarily upgraded during normal development. + +We cover all the API calls supported by the SecureDrop Journalist Interface API. Git clone the project repo, and use the following command to create a new dev environment. The second command is to enable the virtual environment. @@ -13,16 +16,13 @@ environment. The second command is to enable the virtual environment. pipenv shell - Testing ======== -The ``tests`` directory contains the test cases for API. We are using `vcrpy -`_ to mock out the test calls. - -If you want to run the tests against an actual SecureDrop environment, please -comment out the ``@vcr`` decorator of the ``setUp`` method in the test. This will -allow to have real token from the server. +The tests are located in the ``tests`` directory. This project uses `vcrpy +`_ to record and then reply the API calls so that +developers will have repeatable results so that they may work offline. ``vcrpy`` stores YAML +recordings of the API calls in the ``data`` directory. To run all the test cases, use the following command. @@ -30,9 +30,27 @@ To run all the test cases, use the following command. make test -To run a single test, use this following command, replace the test case name -at the end. +To run a single test, use this following command, replace the test case name at the end. .. code:: sh make test TESTS=tests/test_api.py::TestAPI::test_error_unencrypted_reply + + +To test against a live development server, you will need to run the SecureDrop developent +container from the main SecureDrop repository on your host. This can be done via ``make -C securedrop dev``. + +In this repo, comment out the ``@vcr`` decorator of the ``setUp`` method and which ever tests +you want to run. If you want to re-run all tests against the API, remove all the ``.yml`` files +in the ``data`` directory. + +Releasing +========= + +To make a release, you should: + +1. Update the version in ``setup.py`` +2. Update the changelog +3. Commit the changes, and ``git tag``. +4. Create a PR, push the new tag, and get the PR reviewed and merged into ``master``. +5. Push the new release to the PSF's PyPI `following this documentation `_. diff --git a/docs/index.rst b/docs/index.rst index 6161c20c0..1191eea2c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,15 +3,28 @@ SecureDrop SDK Documentation ============================ + +Developer Quick Start +--------------------- + +.. code:: sh + + pip install -U pipenv + pipenv sync --dev + pipenv shell + make test + +Table of Contents +----------------- + .. toctree:: :maxdepth: 2 - :caption: Contents: development Indices and tables -================== +------------------ * :ref:`genindex` * :ref:`modindex` From 5967991f2b9fe542263c67bbc08e8a995365be84 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Mon, 15 Apr 2019 17:06:47 -0400 Subject: [PATCH 163/751] 0.1.3: Update PyYAML to 5.1 Also simplify package versioning with a VERSION file containing the version string, e.g. 0.1.3, which will be read in setup.py and securedrop_proxy/version.py. Now we just have to remember to update the package version in one place. Add a test making sure that the proxy reports the same version used in setup.py. --- MANIFEST.in | 11 ++++++----- Pipfile | 2 +- Pipfile.lock | 26 +++++++++++++------------- securedrop_proxy/VERSION | 1 + securedrop_proxy/proxy.py | 28 +++++++++++++++------------- securedrop_proxy/version.py | 3 +++ setup.py | 13 ++++++------- tests/test_proxy.py | 13 ++++++++++++- 8 files changed, 57 insertions(+), 40 deletions(-) create mode 100644 securedrop_proxy/VERSION create mode 100644 securedrop_proxy/version.py diff --git a/MANIFEST.in b/MANIFEST.in index 315d5e4ef..d097841f9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,9 +1,10 @@ -include securedrop_proxy/*.py -include requirements.txt -include README.md include LICENSE -include setup.py include Pipfile include Pipfile.lock -include qubes/securedrop.Proxy +include README.md +include VERSION include config-example.yaml +include qubes/securedrop.Proxy +include requirements.txt +include securedrop_proxy/*.py +include setup.py diff --git a/Pipfile b/Pipfile index c87b2d468..df9a66bcb 100644 --- a/Pipfile +++ b/Pipfile @@ -8,7 +8,7 @@ python_version = "3.5" [packages] furl = "==2.0.0" -pyyaml = "==3.13" +pyyaml = ">=5.1,<6" requests = "==2.20.0" werkzeug = "==0.14.1" diff --git a/Pipfile.lock b/Pipfile.lock index dc88d1339..64e5dd6ff 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "86be16c12e06dc67fd9e95334532a13dec41da47cee17103e2ee74de62d00ed1" + "sha256": "30eddf2618171a8245e3e40f8c42d389e9d5e2b1e0246dbdd66d5e742cda0391" }, "pipfile-spec": 6, "requires": { @@ -54,20 +54,20 @@ }, "pyyaml": { "hashes": [ - "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", - "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", - "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", - "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", - "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", - "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", - "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", - "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", - "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", - "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", - "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", + "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", + "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", + "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", + "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", + "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", + "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", + "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", + "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", + "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", + "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" ], "index": "pypi", - "version": "==3.13" + "version": "==5.1" }, "requests": { "hashes": [ diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION new file mode 100644 index 000000000..b1e80bb24 --- /dev/null +++ b/securedrop_proxy/VERSION @@ -0,0 +1 @@ +0.1.3 diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 770db4d57..9e0f3a191 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -4,24 +4,26 @@ import json import werkzeug -class Req: +import securedrop_proxy.version as version + +class Req: def __init__(self): - self.method = '' - self.path_query = '' + self.method = "" + self.path_query = "" self.body = None self.headers = {} -class Response: +class Response: def __init__(self, status): self.status = status self.body = None self.headers = {} - self.version = "0.1.2" + self.version = version.version -class Proxy: +class Proxy: @staticmethod def _on_done(res): print(json.dumps(res.__dict__)) @@ -63,15 +65,15 @@ def prep_request(self): method = self.req.method if not self.valid_path(path): - self.simple_error(400, 'Path provided in request did not look valid') - raise ValueError('Path provided was invalid') + self.simple_error(400, "Path provided in request did not look valid") + raise ValueError("Path provided was invalid") try: url = furl.furl("{}://{}:{}/{}".format(scheme, host, port, path)) except Exception as e: - self.simple_error(500, 'Proxy error while generating URL to request') - raise ValueError('Error generating URL from provided values') + self.simple_error(500, "Proxy error while generating URL to request") + raise ValueError("Error generating URL from provided values") url.path.normalize() @@ -113,7 +115,7 @@ def handle_non_json_response(self): def handle_response(self): - ctype = werkzeug.http.parse_options_header(self._presp.headers['content-type']) + ctype = werkzeug.http.parse_options_header(self._presp.headers["content-type"]) if ctype[0] == "application/json": self.handle_json_response() @@ -128,8 +130,8 @@ def proxy(self): try: if self.on_save is None: - self.simple_error(400, 'Request callback is not set.') - raise ValueError('Request callback is not set.') + self.simple_error(400, "Request callback is not set.") + raise ValueError("Request callback is not set.") self.prep_request() s = requests.Session() diff --git a/securedrop_proxy/version.py b/securedrop_proxy/version.py new file mode 100644 index 000000000..430dd11dc --- /dev/null +++ b/securedrop_proxy/version.py @@ -0,0 +1,3 @@ +import pkgutil + +version = pkgutil.get_data("securedrop_proxy", "VERSION").decode("utf-8") diff --git a/setup.py b/setup.py index 940af036a..f8e2cc7e2 100644 --- a/setup.py +++ b/setup.py @@ -1,18 +1,21 @@ +import pkgutil import setuptools with open("README.md", "r") as fh: long_description = fh.read() +version = pkgutil.get_data("securedrop_proxy", "VERSION").decode("utf-8") + setuptools.setup( name="securedrop-proxy", - version="0.1.2", + version=version, author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Qubes proxy service", long_description=long_description, long_description_content_type="text/markdown", license="GPLv3+", - install_requires=["requests","furl", "pyyaml", "werkzeug"], + install_requires=["requests", "furl", "pyyaml", "werkzeug"], python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-proxy", packages=setuptools.find_packages(exclude=["docs", "tests"]), @@ -24,9 +27,5 @@ "Intended Audience :: Developers", "Operating System :: OS Independent", ), - entry_points={ - 'console_scripts': [ - 'sd-proxy = securedrop_proxy.entrypoint:start', - ], - }, + entry_points={"console_scripts": ["sd-proxy = securedrop_proxy.entrypoint:start"]}, ) diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 22aac3def..6278dce45 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -1,11 +1,11 @@ import json -import subprocess import vcr import unittest import uuid from securedrop_proxy import proxy from securedrop_proxy import config +from securedrop_proxy import version class TestProxyValidConfig(unittest.TestCase): @@ -25,6 +25,17 @@ def on_done(self, res): res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] res.headers['Content-Type'] = 'application/json' + def test_version(self): + req = proxy.Req() + req.method = 'GET' + req.path_query = '' + req.headers = {'Accept': 'application/json'} + + p = proxy.Proxy() + p.proxy() + + self.assertEqual(p.res.version, version.version) + def test_400_if_callback_not_set(self): req = proxy.Req() req.method = 'GET' From 5f092fbd9c3706a7d34800be6c348b0ef01db252 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 16 Apr 2019 17:34:43 -0700 Subject: [PATCH 164/751] followup from pyyaml update During review I missed that: 1. We had another set of pyyaml hashes in the Pipfile.lock that were not updated and, 2. We did not update the load -> safe_load call in the prod code. --- Pipfile.lock | 24 ++++++++++++------------ securedrop_proxy/config.py | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 64e5dd6ff..eda907903 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -144,20 +144,20 @@ }, "pyyaml": { "hashes": [ - "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", - "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", - "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", - "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", - "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", - "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", - "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", - "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", - "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", - "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", - "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", + "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", + "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", + "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", + "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", + "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", + "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", + "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", + "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", + "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", + "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" ], "index": "pypi", - "version": "==3.13" + "version": "==5.1" }, "six": { "hashes": [ diff --git a/securedrop_proxy/config.py b/securedrop_proxy/config.py index e5c133250..461edd5e8 100644 --- a/securedrop_proxy/config.py +++ b/securedrop_proxy/config.py @@ -15,7 +15,7 @@ def read_conf(conf_path, p): try: fh = open(conf_path, 'r') - conf_in = yaml.load(fh) + conf_in = yaml.safe_load(fh) except yaml.YAMLError: p.simple_error(500, 'YAML syntax error while reading configuration file {}'.format(conf_path)) p.on_done(p.res) From eb6ab0c99a84bd6f5857325815e55d34f24ea4ac Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 19 Apr 2019 14:00:01 +0530 Subject: [PATCH 165/751] Updates the decorator to store keys with sorted order Previously for body section of the call, sometimes the sorting of the keys were not happening. It is now fixed using OrderedDict. --- tests/utils.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/tests/utils.py b/tests/utils.py index e7320e569..73354f85f 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,5 +1,6 @@ import json import os +from collections import OrderedDict from unittest.mock import MagicMock, patch from sdclientapi import json_query @@ -36,8 +37,8 @@ def internal_sideeffect(*args, **kwargs): value = json.loads(value_str) del value["one_time_code"] python_args["body"] = json.dumps(value, sort_keys=True) - newargs = json.dumps(python_args, sort_keys=True) - arguments = (newargs,) + # newargs = json.dumps(python_args, sort_keys=True) + # arguments = (newargs,) except Exception: pass # Means no body in the call @@ -48,12 +49,33 @@ def internal_sideeffect(*args, **kwargs): value = python_args["headers"] del value["Authorization"] python_args["headers"] = json.dumps(value, sort_keys=True) - newargs = json.dumps(python_args, sort_keys=True) - arguments = (newargs,) + # newargs = json.dumps(python_args, sort_keys=True) + # arguments = (newargs,) except Exception: pass # Means no Authorization token in the call + # Make sure the body is also sorted + # This will work incase one_time_code is still missing + # and there is a body in the call. + try: + value_str = python_args["body"] + value = json.loads(value_str) + dkeys = list(value.keys()) + dkeys.sort() + print("\nDKEYS: ", dkeys) + print("\n") + od = OrderedDict() + for k in dkeys: + od[k] = value[k] + python_args["body"] = json.dumps(od) + except: + pass + + newargs = json.dumps(python_args, sort_keys=True) + arguments = (newargs,) + key = arguments[0] + "+" + str(CALLNUMBER) + print("\nKEY: {}".format(key)) answer = RES.get(key, None) if not answer: # Means it is not in cache. From 67af6720b6db88cb51fa36ca52443d65b975d67a Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 19 Apr 2019 14:01:29 +0530 Subject: [PATCH 166/751] Updates tests with similar tests from test_api This commit also updates the JSON data files for tests. --- data/setUp.json | 2 +- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_reply_source.json | 2 +- data/test_reply_source_with_uuid.json | 1 + data/test_star_add_remove.json | 2 +- tests/test_apiproxy.py | 135 ++++++++++++++----- 27 files changed, 127 insertions(+), 59 deletions(-) create mode 100644 data/test_reply_source_with_uuid.json diff --git a/data/setUp.json b/data/setUp.json index f8ec29e61..8153303ce 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"body\": \"{\\n \\\"expiration\\\": \\\"2018-10-15T18:50:30.596706Z\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTUzOTYyOTQzMCwiaWF0IjoxNTM5NjAwNjMwfQ.eyJpZCI6MX0.DxMon85hJuDUFMJdeWdICVQ7slqQHsIx2aNC2F88Ljk\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Content-Length\": \"188\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MDozMCBHTVQifX0.DqYCdg.JSb0AxCyX5KKX8QeFaHOM32pJvM; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:50:30 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} \ No newline at end of file diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 681de883f..39bdae048 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"73\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:39:04 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNCBHTVQifX0.DqX_yA.EV_fWPcFtNbKcms0sYAzPKtvPyM; HttpOnly; Path=/\"}, \"version\": \"0.1.1\", \"status\": 403, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-unmanly_salmonellosis-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/e76b4ac1-01a3-497c-bc0f-8ea5bbd846f1\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a\\\", \\n \\\"uuid\\\": \\\"e76b4ac1-01a3-497c-bc0f-8ea5bbd846f1\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unmanly_salmonellosis-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/98393589-7442-45b9-83b6-3cb45f3f7b2a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a\\\", \\n \\\"uuid\\\": \\\"98393589-7442-45b9-83b6-3cb45f3f7b2a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/71327942-53dd-4d03-917c-645e1f0c7ed7\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"71327942-53dd-4d03-917c-645e1f0c7ed7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/e2ea71b4-7403-4592-a96f-679207f17b14\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"e2ea71b4-7403-4592-a96f-679207f17b14\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNSBHTVQifX0.DqX_yQ.64wh2borsgv4MfYZnoBTbYNeQxY; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:39:05 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"1969\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/e76b4ac1-01a3-497c-bc0f-8ea5bbd846f1\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:39:06 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNiBHTVQifX0.DqX_yg.0uR9ucOz50EqOTDgn6AuRBKKfNg; HttpOnly; Path=/\", \"Content-Length\": \"33\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+3": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-unmanly_salmonellosis-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a/replies/98393589-7442-45b9-83b6-3cb45f3f7b2a\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2d7bda5-0f50-4baf-ba3b-591cf65c6a3a\\\", \\n \\\"uuid\\\": \\\"98393589-7442-45b9-83b6-3cb45f3f7b2a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/71327942-53dd-4d03-917c-645e1f0c7ed7\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"71327942-53dd-4d03-917c-645e1f0c7ed7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-bulimic_redress-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe/replies/e2ea71b4-7403-4592-a96f-679207f17b14\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/103be2d8-7ab8-4188-94ef-4f98e9c398fe\\\", \\n \\\"uuid\\\": \\\"e2ea71b4-7403-4592-a96f-679207f17b14\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTowNiBHTVQifX0.DqX_yw.BR8eGjBy2Nxz7Nn-EY88EpHfiGo; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:39:07 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"1479\"}, \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+2": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:12 GMT\", \"Content-Length\": \"4899\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/34074608-4b95-43b3-a8b2-159ff341cf28\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"34074608-4b95-43b3-a8b2-159ff341cf28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/d72d6d47-343e-414f-b227-cce4c582a14e\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"d72d6d47-343e-414f-b227-cce4c582a14e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+4": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/34074608-4b95-43b3-a8b2-159ff341cf28\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"34074608-4b95-43b3-a8b2-159ff341cf28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/d72d6d47-343e-414f-b227-cce4c582a14e\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"d72d6d47-343e-414f-b227-cce4c582a14e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"4418\", \"Date\": \"Fri, 19 Apr 2019 08:27:13 GMT\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"4899\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/34074608-4b95-43b3-a8b2-159ff341cf28\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"34074608-4b95-43b3-a8b2-159ff341cf28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/d72d6d47-343e-414f-b227-cce4c582a14e\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"d72d6d47-343e-414f-b227-cce4c582a14e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/ede2b9aa-eb73-4609-a6da-3afd9ab7283a\"}+3": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:13 GMT\", \"Content-Length\": \"33\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index e181cac97..d52935fe2 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"receptive herald\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcNgBEACwzyiYcLvntPZ7fWONQBwD8IeuunhTXTsyAX0kPUVTD6tqP0cU\\\\nF2xcYACVOjglSL+dnLkAUI8aszEdI8oX74OYfLrzGnmACr7wQfwZ3Y7m3U95DsNU\\\\nOMMAjot5Y4OA9cvf7RWDYLTfT7Me5mMwadmfNmXXgLf3QDnUGldZCe15U3Q7K1pG\\\\nS7V+a2VS9leGl3vRrQosyjpaVmtQOBWEb3/Xij8ntXUQIFT4wBATth2nGQ5fYHoe\\\\nxoe5dQBpUZwsXNnGZ+emQM8EJE/Xxm0T7ZZngHsU9DsES5SUMmkPaAdivWTvPvEt\\\\nOSThzdO6qnvBwNHTCmlOkkm7NFxBt8kxiOjB+21wtVnz6noVqvht1Ca1p7W+2A4M\\\\nfo2QvTHwYeG09204lrJljUF9MasvVeuViuxIdtHkPnC7smr25nPMucGqKwS/R2qr\\\\nF0kBE+BXioPfl8BSO7PVU4MapGaGZxbGTU0w0b5HUC2oHQlv3TKkhskyyUDtQaAb\\\\ni7aCjVvC3hVJvD2zhbaKuyAwqNewDOMEcHbYiUNAWm1pP+frhSfxedAatZhdDuLQ\\\\nZyJOofAk1QVJRkfW2DAoJU41558y4VszrJ3+uzn8IE+BJzJuTQWacXkvECu7SymQ\\\\nxrrM0LRHKhX8bz5X4TE//d3SCgDDu6z/PprAAVvgeXLFnByJHks3nxic3QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VllSUlVaT1ZSUEI3WjM0WENUSklZUVRRNlY2\\\\nMzM1VVRTVU0zNEdLMzJYVVM2MjMzUEZQSEtaTEtSSkMzSkxVUjVVNEZaSUZHN040\\\\nWUFMRFRJSExaMkNNN1VUQVJBVlpEWlpUSEFJUT0+iQI/BBMBCgApBQJbxHDYAhsv\\\\nBQkB4UPoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ4rTHOiUed4OHHw//\\\\napPfPv1aPc/AkvCJVm4qettEK5Fw+IR1JZzFQbcPE38maO1hxJ+UUyXckoxtJirL\\\\n2Mm1+6lpfukYe/t+OZV4dP4bPrzn9B8j2JzG7W6bVKqhL/LsRkReW+ijbvmVafx7\\\\nLCYZ8XvHYB0ZUjjidX6S55RZw5v0gh/htu0MyLrFm42cdtMHm25vauIb1t4W/6Ou\\\\nKx+AbUzLrsPYazxmk9Zubd809fWq5cXJrrJyILIWfDn9evZtuQqYdAkTdSl92Ejn\\\\nrc63BlJHlJTQC7oDtWH2qbBp51CHlpxmeT8IIlLhlXEoNWMNQ68Q/ZL4bGiW2b4m\\\\nViUhqzn8glzQg9AIWnT5l9ewkB+OMW/MB2yu0LJVBIbVDX1azSJaudibGi0rM6dr\\\\n08qRei8ee72MQgSHWfyhLO75d0xJK/BSh9j+qaC99hrh3wpfMWeDbiHzLyiKEqE6\\\\nR6uOMmcvQKJ+01X5iB0JBfo0lc5mQGUJE1PVPi/nSdM0m1pXe/F+dO+E/cT3Q4Ky\\\\niXhCPzc/ZwXFEnMrDihs45fcNBosvr3wpyGPNIMSj62JZVp9bVTKsTumKQVe8A/Y\\\\n0KxacDSsxNXq9bcDZgGHoxJ2hYYdHN7iQXTHWYBkTqDqvRAAz1WKOsh1nN3i9/6Y\\\\nNB8vfRFCHXiVxtYMez9oMYK0bpe9J4QvbomxDc2nFMg=\\\\n=d4Np\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:04.759461Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\\\", \\n \\\"uuid\\\": \\\"ec973f69-7afc-43fa-b810-dd3090fd1fba\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowMyBHTVQifX0.DqYDDw.RitzC--vVUjS-a5gMBXQ1EHFFVA; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:53:03 GMT\", \"Content-Length\": \"5239\"}, \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\"}+2": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Length\": \"50\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"2632\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:16 GMT\", \"Content-Length\": \"10419\"}, \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"13010\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:15 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"grey catalog\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADHVnyB4CfVHvlxk9pHDNTPsc/Gsu331+RX1WNzFFMyLx1SvqoO\\\\nffHPIA5bdq6lVZHP2xz8DtxnheN/A3V3uWbwJ3Rz/L0AdZ5UpUYFgES4tHHeAvE0\\\\nJe8e0o2AmgCUUU2p0le8fDgcm+oD/PLKdEWcWD5NW5+Bqi7zbR/IWTNmDxHHYSca\\\\nJii63g2kUtuPWYJp9oq+rwgtE/jO7jlFwaKPc3gbJl8wfXHbcWM/RwA9/JyncyHQ\\\\nTumk7pTNpwzhbOuCAxpxA1+Sh6ik8iT0oQb9PtYY9hIzau1dCE+89y/HSfiDW5pr\\\\n+5uiP2tkyby/ctGHqPxhW7vO8eyYuwkiQILaZZYoWi0+PNVMccag+8NimVG+jbHI\\\\n5CyQlAlm6cf1jliCRzYlvF7AGO47/0BjW+fnXlDXra3kLusWGm2cMfDWdGffRThJ\\\\n3jagjBgBKPK0janWzkh9aVPFxuB9O5NFM+8vy3ArOmiGg103oMurXMjlLTWRrnuO\\\\nYgq1b3UiwvioYFVj4VHWLK6HoGYQKn+U0NXAZxlbQx2rtF+wKeaZYKWm+HaTSW+U\\\\nDP959GtF/8wpspzrD5S7U0hSA2IWVMxoDnemBwIoZq2IkgACn0D1/GdU8XRAUOQa\\\\ng5JLwuBbe7v7K8rnawCjKL0xTM4WPqSmirOsxkgFHCzlxq2fg4RrGy81ewARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VlJIMzNOMjNaRkk3RFRXRFVEWkRYN0RCNDQz\\\\nNEJJTzJOMlczSkxCRVBNQjNHV1VJVExXSFZaTTVDSzJDQjRaWkZYTFBGVUFSVFBU\\\\nRDRUSEFNRVRWMllMT0tIQTY3WlpSNjQyMzQyWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEN4dNKkG7iSzDzkP/R53AiznBgCc\\\\n8D9g5ixe//C43oeOYU9hsss/tw+eDSee/DXxPDRbT0NjLM6rciiMOHj8/PkPUxFW\\\\naZCIvDgcBSQGhWP55pd6EY0oewFHo1J2geeUVJEmUFsUtm1GBahz6BXAF5ZTCUIZ\\\\nW7xd1ZkAVW3UcHmVpTFOoaR6cJVQUytujzhThdG3zXLWqfjPraGSynPaVs25PlMI\\\\nrabfMopPSMfLSZfyL/YdgbBxaoT3O5WFZgpu0OVPnA8A36zz4lyUz/T1Ke1M3rI5\\\\nnrFAbWl5BYxwmUtCjkHiy6g5cfCuQg/2N1BZPr0EZzo24tQQ5Gn0n/0Zu8fO0fxe\\\\nYIjVN38/lB8G0yKlx2OEsO6ir4b17YO2Odb1+Xd2qjTxAq1NXMQ7EpG4/+2YZLXL\\\\ntjBf+ASIQ9ILz0SMImCPqH4GrI+6z+ih+SKud4cRwSujjKK8P4UImbi5NXNZXIRQ\\\\nNDsVt0KkDCNV5jN/PwpLrBKyREGamE2bg4GuT3sYVN9vOwTLvTVqBvpMRXrf8EGB\\\\nJ5MGf4Bzsz7WPWbHxSrFkovF5MCti6PcJsf97i5rL96Wlk4q9pkj+qEr8+fk42A5\\\\nRMiyATP2BJgx1aDq7QD7uni2X88vfICgJaCIkb/OsAZyjnv8XvV3wmXUw7ERgYo1\\\\nq9xf+zvij+WXRbn5J4OegpW9XRZOMNst\\\\n=ZPuK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:51.042866Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\"}+3": "{\"headers\": {\"Content-Length\": \"50\", \"Date\": \"Fri, 19 Apr 2019 08:27:16 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"grey catalog\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADHVnyB4CfVHvlxk9pHDNTPsc/Gsu331+RX1WNzFFMyLx1SvqoO\\\\nffHPIA5bdq6lVZHP2xz8DtxnheN/A3V3uWbwJ3Rz/L0AdZ5UpUYFgES4tHHeAvE0\\\\nJe8e0o2AmgCUUU2p0le8fDgcm+oD/PLKdEWcWD5NW5+Bqi7zbR/IWTNmDxHHYSca\\\\nJii63g2kUtuPWYJp9oq+rwgtE/jO7jlFwaKPc3gbJl8wfXHbcWM/RwA9/JyncyHQ\\\\nTumk7pTNpwzhbOuCAxpxA1+Sh6ik8iT0oQb9PtYY9hIzau1dCE+89y/HSfiDW5pr\\\\n+5uiP2tkyby/ctGHqPxhW7vO8eyYuwkiQILaZZYoWi0+PNVMccag+8NimVG+jbHI\\\\n5CyQlAlm6cf1jliCRzYlvF7AGO47/0BjW+fnXlDXra3kLusWGm2cMfDWdGffRThJ\\\\n3jagjBgBKPK0janWzkh9aVPFxuB9O5NFM+8vy3ArOmiGg103oMurXMjlLTWRrnuO\\\\nYgq1b3UiwvioYFVj4VHWLK6HoGYQKn+U0NXAZxlbQx2rtF+wKeaZYKWm+HaTSW+U\\\\nDP959GtF/8wpspzrD5S7U0hSA2IWVMxoDnemBwIoZq2IkgACn0D1/GdU8XRAUOQa\\\\ng5JLwuBbe7v7K8rnawCjKL0xTM4WPqSmirOsxkgFHCzlxq2fg4RrGy81ewARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VlJIMzNOMjNaRkk3RFRXRFVEWkRYN0RCNDQz\\\\nNEJJTzJOMlczSkxCRVBNQjNHV1VJVExXSFZaTTVDSzJDQjRaWkZYTFBGVUFSVFBU\\\\nRDRUSEFNRVRWMllMT0tIQTY3WlpSNjQyMzQyWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEN4dNKkG7iSzDzkP/R53AiznBgCc\\\\n8D9g5ixe//C43oeOYU9hsss/tw+eDSee/DXxPDRbT0NjLM6rciiMOHj8/PkPUxFW\\\\naZCIvDgcBSQGhWP55pd6EY0oewFHo1J2geeUVJEmUFsUtm1GBahz6BXAF5ZTCUIZ\\\\nW7xd1ZkAVW3UcHmVpTFOoaR6cJVQUytujzhThdG3zXLWqfjPraGSynPaVs25PlMI\\\\nrabfMopPSMfLSZfyL/YdgbBxaoT3O5WFZgpu0OVPnA8A36zz4lyUz/T1Ke1M3rI5\\\\nnrFAbWl5BYxwmUtCjkHiy6g5cfCuQg/2N1BZPr0EZzo24tQQ5Gn0n/0Zu8fO0fxe\\\\nYIjVN38/lB8G0yKlx2OEsO6ir4b17YO2Odb1+Xd2qjTxAq1NXMQ7EpG4/+2YZLXL\\\\ntjBf+ASIQ9ILz0SMImCPqH4GrI+6z+ih+SKud4cRwSujjKK8P4UImbi5NXNZXIRQ\\\\nNDsVt0KkDCNV5jN/PwpLrBKyREGamE2bg4GuT3sYVN9vOwTLvTVqBvpMRXrf8EGB\\\\nJ5MGf4Bzsz7WPWbHxSrFkovF5MCti6PcJsf97i5rL96Wlk4q9pkj+qEr8+fk42A5\\\\nRMiyATP2BJgx1aDq7QD7uni2X88vfICgJaCIkb/OsAZyjnv8XvV3wmXUw7ERgYo1\\\\nq9xf+zvij+WXRbn5J4OegpW9XRZOMNst\\\\n=ZPuK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:51.042866Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:14 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"13010\"}}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index e181cac97..3be9ceeca 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"receptive herald\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcNgBEACwzyiYcLvntPZ7fWONQBwD8IeuunhTXTsyAX0kPUVTD6tqP0cU\\\\nF2xcYACVOjglSL+dnLkAUI8aszEdI8oX74OYfLrzGnmACr7wQfwZ3Y7m3U95DsNU\\\\nOMMAjot5Y4OA9cvf7RWDYLTfT7Me5mMwadmfNmXXgLf3QDnUGldZCe15U3Q7K1pG\\\\nS7V+a2VS9leGl3vRrQosyjpaVmtQOBWEb3/Xij8ntXUQIFT4wBATth2nGQ5fYHoe\\\\nxoe5dQBpUZwsXNnGZ+emQM8EJE/Xxm0T7ZZngHsU9DsES5SUMmkPaAdivWTvPvEt\\\\nOSThzdO6qnvBwNHTCmlOkkm7NFxBt8kxiOjB+21wtVnz6noVqvht1Ca1p7W+2A4M\\\\nfo2QvTHwYeG09204lrJljUF9MasvVeuViuxIdtHkPnC7smr25nPMucGqKwS/R2qr\\\\nF0kBE+BXioPfl8BSO7PVU4MapGaGZxbGTU0w0b5HUC2oHQlv3TKkhskyyUDtQaAb\\\\ni7aCjVvC3hVJvD2zhbaKuyAwqNewDOMEcHbYiUNAWm1pP+frhSfxedAatZhdDuLQ\\\\nZyJOofAk1QVJRkfW2DAoJU41558y4VszrJ3+uzn8IE+BJzJuTQWacXkvECu7SymQ\\\\nxrrM0LRHKhX8bz5X4TE//d3SCgDDu6z/PprAAVvgeXLFnByJHks3nxic3QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VllSUlVaT1ZSUEI3WjM0WENUSklZUVRRNlY2\\\\nMzM1VVRTVU0zNEdLMzJYVVM2MjMzUEZQSEtaTEtSSkMzSkxVUjVVNEZaSUZHN040\\\\nWUFMRFRJSExaMkNNN1VUQVJBVlpEWlpUSEFJUT0+iQI/BBMBCgApBQJbxHDYAhsv\\\\nBQkB4UPoBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ4rTHOiUed4OHHw//\\\\napPfPv1aPc/AkvCJVm4qettEK5Fw+IR1JZzFQbcPE38maO1hxJ+UUyXckoxtJirL\\\\n2Mm1+6lpfukYe/t+OZV4dP4bPrzn9B8j2JzG7W6bVKqhL/LsRkReW+ijbvmVafx7\\\\nLCYZ8XvHYB0ZUjjidX6S55RZw5v0gh/htu0MyLrFm42cdtMHm25vauIb1t4W/6Ou\\\\nKx+AbUzLrsPYazxmk9Zubd809fWq5cXJrrJyILIWfDn9evZtuQqYdAkTdSl92Ejn\\\\nrc63BlJHlJTQC7oDtWH2qbBp51CHlpxmeT8IIlLhlXEoNWMNQ68Q/ZL4bGiW2b4m\\\\nViUhqzn8glzQg9AIWnT5l9ewkB+OMW/MB2yu0LJVBIbVDX1azSJaudibGi0rM6dr\\\\n08qRei8ee72MQgSHWfyhLO75d0xJK/BSh9j+qaC99hrh3wpfMWeDbiHzLyiKEqE6\\\\nR6uOMmcvQKJ+01X5iB0JBfo0lc5mQGUJE1PVPi/nSdM0m1pXe/F+dO+E/cT3Q4Ky\\\\niXhCPzc/ZwXFEnMrDihs45fcNBosvr3wpyGPNIMSj62JZVp9bVTKsTumKQVe8A/Y\\\\n0KxacDSsxNXq9bcDZgGHoxJ2hYYdHN7iQXTHWYBkTqDqvRAAz1WKOsh1nN3i9/6Y\\\\nNB8vfRFCHXiVxtYMez9oMYK0bpe9J4QvbomxDc2nFMg=\\\\n=d4Np\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:04.759461Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\\\", \\n \\\"uuid\\\": \\\"ec973f69-7afc-43fa-b810-dd3090fd1fba\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowMyBHTVQifX0.DqYDDw.RitzC--vVUjS-a5gMBXQ1EHFFVA; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:53:03 GMT\", \"Content-Length\": \"5239\"}, \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/ec973f69-7afc-43fa-b810-dd3090fd1fba\"}+2": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Length\": \"50\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+3": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"raising electroplate\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEcN8BEAC3pD6oGMqSN/YNvKxtxen4TYd7itO/dyN8qTGAeK/mSD7089ux\\\\nwf7mWrBPHcxbMOUj5mCfJIf1g9OGfb/Wl6W3Ndn+xAD7dXwFjWlW0dAs/VYZ9fvJ\\\\n2oDO8pJISebYFLB9GiZkiFxjrZvJwfbMVWKfZ988XdDw1N8wEd4UjUKWLh+y4b+Q\\\\n3fsoqhYVSQaeuJAyqVXEW0TYpQ6zLNpqyY4PVrHl7rR4xh3pFgmA4t09sg95z+is\\\\ncc9ChucDeKbvzg8Apbjy6NXSRWQz5+fWJ5gEakL6GwThC9J93jOS9auLmgnnXzoQ\\\\nf/b5z6+zLQhMwIKT+z4EL1XaI7pBTmR4eC1dFvwMGrzUsrUbGTT4vnAygfVnc25J\\\\nhdtDVwoaE5esME246cIji485w8Kwfh7ih3HJRRSRJl1spx77ZKVZdWszdfiLXaV6\\\\nUHg/Qe6F19CiXF5TPFt8ck1P4X2viVqoA0GPNQk/EmlsLqDd7VqVPjnSoA1tNJKl\\\\nHhouqxCttwV6QBKrtFuQ3KTfDKRBs8Cs372L6vX8AS9CXYuK4Ne2kbWk+PVlr9hO\\\\nvfjXuO1OE/448/vJUvcndRbKt0P1+NscWRj6rMS8DC27Rrd32QY3bupy5r5ztUeY\\\\naVH3jFM5MwH8+9M2ExrOqhtWnhxiyn/ouUNFZX0jWWBhhELOubj4KoI0awARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UlpJNkY2TktOMlNDSUpNQ0FTN1hXVzJGM1ZM\\\\nR1ZPQVdHSVpYWUNOSzRBVk9WQ1RGRDdJQjdMRjY3SjNNRUk1S1lDRkNXNFk2U0JB\\\\nNjRRVVhRTFZOMjVGVjJXQ0hBS05YNUhWQzdZST0+iQI/BBMBCgApBQJbxHDfAhsv\\\\nBQkB4UPhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgxInu0B2qA+pYQ/+\\\\nJuLjhArDN0ndA+viedkDr2TxzalrOWQhIdHD4AK1RQGaYZeBu6/gHGnPUpD20ja4\\\\n6mdA6shp2VW6RIXFTignClpDkfgcDfYmFGAoqbTbNwy5Vf3y5lfV/ckcIp25aaQq\\\\nMQt5cySNyQs8Pfos9sHUwCIgGathOmvohdyaPjhN9/dTFUekQPK4wTxbtv0+mOjS\\\\n6NVWOpNdekTiLjTX6vz/pHGp2c/8sKm10XP65OA9gn/HlrtpXdPOCwAc9nr1QFxW\\\\naQnO07jPW/DORrWJACHwKl+VUlPROY6l1L5xF7n+wCynwJYgvbx3+CmDizpFsMc1\\\\nWoMKcxQsgKFMPYeoDA47cOiCGySYXRsDnN/CLLho9f/VCRA6m3uo3wUW2ZdjJUdW\\\\nx6ySidtHd9I/mV7wapIZM3g5x53vHGqFjPcqRH1Ms8fhDuK4x9suz5otKBuqxvtm\\\\nbgIT7EXMjb3evZFwLwi9rEb09an00pOV7qCha21G+TCdA9/kDtfTBYIvwaTcx1WZ\\\\nO71hayr6Qijn3pdy8j9MDT21MJGaT8oRDRq/Z2rU4ZeAYRJUP0BWJYT/WyrPiba6\\\\nnUSPOg9SX62II3K22D3vy/ftgPbUbC9n6QsYC2Dcij6AoFqVZRxM/beltg02vS4U\\\\nE3sQDNAupjiBXn34pZzjec1/PyQuIhk07UejJhgg6tQ=\\\\n=t9WV\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:50:08.360591Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b4071b88-a05b-452f-9c6e-2aa1191c085b\\\", \\n \\\"uuid\\\": \\\"b4071b88-a05b-452f-9c6e-2aa1191c085b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:53:04 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1MzowNCBHTVQifX0.DqYDEA.d60t9CZ1CIcD0bo5HHxI_l-awyQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"2632\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:19 GMT\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"7814\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:19 GMT\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+2": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"10419\", \"Date\": \"Fri, 19 Apr 2019 08:27:18 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"10419\", \"Date\": \"Fri, 19 Apr 2019 08:27:17 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index c30f0f7c6..61cdbb35f 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NToyNSBHTVQifX0.DqYDnQ.rrygdqGK86afft7ACBBMPuW7id8; HttpOnly; Path=/\", \"Content-Length\": \"2049\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:55:25 GMT\", \"Vary\": \"Cookie\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/bccb8dee-5a2f-4e6e-b640-a66fc47bff17/download\\\", \\n \\\"filename\\\": \\\"1-palatable_flue-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/bccb8dee-5a2f-4e6e-b640-a66fc47bff17\\\", \\n \\\"uuid\\\": \\\"bccb8dee-5a2f-4e6e-b640-a66fc47bff17\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46/download\\\", \\n \\\"filename\\\": \\\"2-palatable_flue-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\", \\n \\\"uuid\\\": \\\"4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1/download\\\", \\n \\\"filename\\\": \\\"1-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1\\\", \\n \\\"uuid\\\": \\\"e6bac35e-4042-4a13-89d7-4412ec3150c1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a/download\\\", \\n \\\"filename\\\": \\\"2-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\", \\n \\\"uuid\\\": \\\"c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/bccb8dee-5a2f-4e6e-b640-a66fc47bff17\"}+2": "{\"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NToyNiBHTVQifX0.DqYDng.7XCpAhg6n3srTEg_3511rP-26o8; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Date\": \"Mon, 15 Oct 2018 10:55:26 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+3": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46/download\\\", \\n \\\"filename\\\": \\\"2-palatable_flue-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/c3ddd7a5-6763-4ab8-978f-4329f9db2e55/submissions/4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\", \\n \\\"uuid\\\": \\\"4ef58591-2dda-4f6a-ac3a-415347d5ab46\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1/download\\\", \\n \\\"filename\\\": \\\"1-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/e6bac35e-4042-4a13-89d7-4412ec3150c1\\\", \\n \\\"uuid\\\": \\\"e6bac35e-4042-4a13-89d7-4412ec3150c1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a/download\\\", \\n \\\"filename\\\": \\\"2-penny-wise_telepathy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0f9faa3a-4fd7-4798-9a70-ebd5760d5670/submissions/c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\", \\n \\\"uuid\\\": \\\"c7f7548c-6b0c-4ab0-b52d-00467f456a4a\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NToyNyBHTVQifX0.DqYDnw.lYtUHx_O_y-K-HRQsKjQMJDiylI; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1546\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:55:27 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+4": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:22 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2562\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837/download\\\", \\n \\\"filename\\\": \\\"1-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837\\\", \\n \\\"uuid\\\": \\\"03802a39-0969-4d24-b02b-3a169b98c837\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"3071\", \"Date\": \"Fri, 19 Apr 2019 08:27:20 GMT\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837\"}+3": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:21 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837/download\\\", \\n \\\"filename\\\": \\\"1-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837\\\", \\n \\\"uuid\\\": \\\"03802a39-0969-4d24-b02b-3a169b98c837\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:21 GMT\", \"Content-Length\": \"3071\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index 327204918..2ca0e3da5 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shortish theodicy\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEck8BEACiZLEiPmPtpsi2ayPjHs2Yc3/wIMiwK8P8uq89NtnnpW+nTshj\\\\nzhgRtKLy72hVmXovlv+RLckUgCWoeOcKU+HZOHVHDnbs4Orvh8tWP3kObHrKWy0A\\\\nPu/4lKY9IafAgBRWjBdouhqMtbmD+LS68WmRNxbaMxa3noK5dNy45TRgGEaQyh0v\\\\nqt4z7BU4efZWJhNK6Bjhpla9pfbKxUfAbz0eAq3ME2aeOiAqnSEYjwzcK4NkVC2r\\\\nPdMK/C36UWeZDsmAqC0uLsrHAebP8uYhA+ITKAqjTZcsKT9FhjKfUlmKMIQfCNVO\\\\nzk9pA6WxhMudyaPwdZX/jtAfnAXO4h5ryfDyxkMJXo0dog8E+RK2GjmI9wd46/Z7\\\\ndveCOFHQdmMHmJPzMAzcTNzfZ7Xft/ikO6rkiuhMyPP92yA2wNwf8DZnrT8Q880T\\\\neWfgzUUdoWRS1pVDYTBIrB6XlpsJesTwy8xt9ZesICmEZ+vNWvQWbVHcv24T+kxj\\\\nyckcgI8f0WcZ+vBl++Bzz3zaihtcylbHRai0W0vcYQgTQyhgfdGOO5bM3ZNvDwQ8\\\\nQXWwIVYd/J95RAGBgPWlxkiHMYeAV0wf7ih4MXMaTOPn6SQkmujbplFi6tt5r2Hz\\\\n/KvenzCvIj6iLv4ktczN8/UVFHPut0T22BrZbjEScZFsQxjPih+kZ/OBVQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VFNFQzVFMk1ETlRBTVpQR0FEUEJPWENaUEFK\\\\nVzNJWUJKSlI0S05KM0lWTFlRTEsyUVZUQVdWRTZRRzVFR1FKQzUzNlk3TlZQTEo0\\\\nM0pQS09XNDZKVFVVUVVGSDY0RE5PTFhBQ01EST0+iQI/BBMBCgApBQJbxHJPAhsv\\\\nBQkB4UJxBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQyXRC/oDy7x2Peg/7\\\\nBrT3tsGbQxuT8TO2Y/cn0K+LlDOSOq4N6TSaSG+fE4gXOaiXySc9V3X1FFyHaS70\\\\nLjYGkmDV6QsHgz42f3X2J+VeGelx4ua6PFTLcZRjVfxLpoB9L3U+t7rY+z5PJokn\\\\n3uTN3ur8W9cinbwJa2lTzXp8anPS3dTH9Qoe2D8mIARvSNs38p2Vf3q5gdNCLG3Y\\\\nqI7uqm6ABAFA8C5rkh9Stm64yyCOAfWAteyX3ym48Avw2fAVaOO0I3YM0T8aPWyG\\\\nGMY6Y9Ir5QpPsPd7lLdvMmjf72ix+8mUON6OeUS/OWp5nWumRWCEj98awI51MgOC\\\\nd9qtxpm2lg0AKv2DhphRbPGwQnnLADqiAxDcr9wNROnov2jJw3b/1JMeb2gDWGq5\\\\nmaRjYdxYDfCIxkZA+lWY4isFtaltIjrSOUuhP8jhuDbH/wI1Qqrob2HILVbyQMaD\\\\n5zNkZlIZU3dfUJ/kuHIRg/xi+7aLpbC5/7IfWRC6PiLQBRaApyM8DM4jchWH90dJ\\\\n7PRXfY4paCSmmn4jKd/Vy2gj+XEdaT6E0CBFoo44tLd7OLAxVIunT8NWtQ8R3CrZ\\\\nBndspGnSyDRVW8G4s1U7tNttaqRVBWoXq6c4FWhC9qSL7m2GsNzfeQNfUn+GFhCc\\\\nm9u2HGDD6XQAEkLGlaMS4APme26ntuGKdBJaMoLG3Gk=\\\\n=hRQT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:56:19.305183Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"uuid\\\": \\\"8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"floored schnapps\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEclUBEAC+yFNCYrJ9O4ictZ2BCmqF4uNjVFVv+QpYc+1rqONdv9mH5XLt\\\\nMcxTwaUfNZopZ3+0iYBfm7P86dwJzPdDBE4hQ5taUZiPWf4dJaV8lUz/UcnEGT9O\\\\n+oLO/Ak7vRsZsRur40mmLaM2Gmz+dzUz0G8NLiVFTKJdY5lK9OZ18HELNbryeVaQ\\\\nXLIdmom2+OMK6nAgTj2ekBIFAXLV4jzSIK23L9bM+ZqJljonGnrKuILH9vhbrQpT\\\\nBxlTjezp+JhQaI/6QiwmZgFtBBl1bBMTKt3PCvXJwS1W3R5QseOp7pcaG8HYDpGu\\\\nb9BjC6GZYURVeehugGEw0rSe2qpuedCZMZfVrGAm6Aum7z0LKHJMvBopc0hLWZeY\\\\naRPy0pcxyyJUUFbgss9bld8+RC+gL8YvcYSio19EttrmprUNIrgGLEIOeTEAtE5Y\\\\njkjhvrzeZvpb2cQkyoelnoZeHnF+BKsmJbEBeCFmmW9Luu7fMpTnzrOQYVbSLVHu\\\\nowtadXvZaPG/7MJHzmEbdR+PmidU8cHbDA37pstBdUCjbq8pqTPjMzQOmD0/mxgF\\\\nnjVJQz7JVbiQF/HPaO1pBLjQyRYiPR3rARJCoW/U1CcTgzuASfw3j/lR8/UkW2ff\\\\nBCeBTLywxL1ZHqopi2ElejkSXWoYmbqPFLHJ08Cb5AkUFC8s5wooTgYf7QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SURHMzRVNFdNSERWUjJKVU1CVkpDWklHWEVC\\\\nRkhVM0xKSkZIT01GTFc3N1ZJM0o2NUNYNVlPNVJZQ1ZHRUlaT1ZJVEFMVEJPQzZL\\\\nWlVVWUJQV0U1U1FCUlYzT0xDNEZSRllISVFKWT0+iQI/BBMBCgApBQJbxHJVAhsv\\\\nBQkB4UJrBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQGjQVeSld0t6CPhAA\\\\ntpm7fY89ZKI/dt6zH/7JxFOutVG2bvvyEkyHaCCu4fnsBdSkdhMPaMOtolyuSg5/\\\\nw8MbeYhVZAURbSXInwxfaF9Q6DvLPF9Q0Z9q/vgP6N5D183p3f+n3TZsL2tPJwbL\\\\nJI2vlqbhxCG2wlN8EgTRpzNEPYc67VxQIAx/ibiM9NGTBukmKX9KjPTJqwae7R1d\\\\nCZSNQsMozMDIuHXzLC8fM6oFU9Ik8y4umvzxnEE1nM8CCwY/se1D9JTvVsWRmjp9\\\\n8tZ4YOdyxK2kg9tAaLUKOyTuAvoF/YyTtV87zwerd+Xxx3D1QayVTnPPjtql1vJ/\\\\n3myaYVa4GU/BdQUQl/TWbnQS00P6NUsvPbsbjXRAUI7y6aW4s33Tx0lVY1uu5Lc8\\\\nzGii0wSUWWrFNf04QHIZlGyQk8FmIQeulcQn8h/l6YWE97SM/aMsnnsTD7HRJGnz\\\\n0x60mxFV1FmMFSMn3CuNd9AhGDtuC8MXCNglyMW+sGDG2Zma0D3F4/i8ESfs0kVA\\\\nRakUlJIsbkFmih0Ibb7VsnD65/PbKUjEp855Z/U579mS9378sX3kbD6jMubqq1XC\\\\nApDf46LJIO94FkKsZkDKTkgOXfsX4R+J6+MBzRIr63bZp1aa3n2NuchqwZyxxclu\\\\nD3opUPcNPNiNQM7KrnYH6FYR0163CadXOSuk20d2Nas=\\\\n=A3nz\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:56:24.989780Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416\\\", \\n \\\"uuid\\\": \\\"a961f0ed-d0e5-4f25-badc-4cf220a71416\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"5236\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxMiBHTVQifX0.DqYECA.wm4pyK7Cu38V518Gm1wpIHubwM8; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:57:12 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions\"}+2": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/2a5fcb1d-6512-4408-a572-21062f2df334/download\\\", \\n \\\"filename\\\": \\\"1-shortish_theodicy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/2a5fcb1d-6512-4408-a572-21062f2df334\\\", \\n \\\"uuid\\\": \\\"2a5fcb1d-6512-4408-a572-21062f2df334\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585/download\\\", \\n \\\"filename\\\": \\\"2-shortish_theodicy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585\\\", \\n \\\"uuid\\\": \\\"5b149c74-8b6f-43b1-a142-2f740019d585\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:57:13 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxMyBHTVQifX0.DqYECQ.4zSc7PL_zv50jK8c1sNOkUxcK2c; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"1037\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/2a5fcb1d-6512-4408-a572-21062f2df334\"}+3": "{\"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxMyBHTVQifX0.DqYECQ.4zSc7PL_zv50jK8c1sNOkUxcK2c; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:57:13 GMT\", \"Content-Length\": \"38\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+4": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"1541\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo1NzoxNCBHTVQifX0.DqYECg.CK6x9P4C1Wb07zm7MGTTg6qb5ew; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:57:14 GMT\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585/download\\\", \\n \\\"filename\\\": \\\"2-shortish_theodicy-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/8bf7dc9e-f93a-4f30-9171-0733b886e2f4/submissions/5b149c74-8b6f-43b1-a142-2f740019d585\\\", \\n \\\"uuid\\\": \\\"5b149c74-8b6f-43b1-a142-2f740019d585\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/0092e003-7bc6-41e2-8e30-ef41eae27746/download\\\", \\n \\\"filename\\\": \\\"1-floored_schnapps-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/0092e003-7bc6-41e2-8e30-ef41eae27746\\\", \\n \\\"uuid\\\": \\\"0092e003-7bc6-41e2-8e30-ef41eae27746\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/bf2168b7-95a4-4c8a-bbc5-14738c38014b/download\\\", \\n \\\"filename\\\": \\\"2-floored_schnapps-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/a961f0ed-d0e5-4f25-badc-4cf220a71416/submissions/bf2168b7-95a4-4c8a-bbc5-14738c38014b\\\", \\n \\\"uuid\\\": \\\"bf2168b7-95a4-4c8a-bbc5-14738c38014b\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\"}+4": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"38\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:25 GMT\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\"}+3": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"534\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:25 GMT\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+5": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:26 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2053\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2562\", \"Date\": \"Fri, 19 Apr 2019 08:27:23 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+2": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:24 GMT\", \"Content-Length\": \"7814\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index 58e78775c..cb9f95686 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/a884c037-320d-40d0-9764-0af4241eb35b\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"a884c037-320d-40d0-9764-0af4241eb35b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/7c8945b4-7f59-413d-994d-37a85da429b8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"7c8945b4-7f59-413d-994d-37a85da429b8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0MTowMSBHTVQifX0.DqYAPQ.Fh6DlFTKUWOGxS1xm6BjCiRyb4Y; HttpOnly; Path=/\", \"Content-Length\": \"1973\", \"Date\": \"Mon, 15 Oct 2018 10:41:01 GMT\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68/download\"}+2": "{\"body\": \"{\\\"filename\\\": \\\"80eed7a8-9fd6-4f95-baa4-fc740a7b1b5b\\\"}\", \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0MTowMiBHTVQifX0.DqYAPg.Opm78odeqggdZxWWC4NbqiiatMM; HttpOnly; Path=/\", \"Cache-Control\": \"public, max-age=43200\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Last-Modified\": \"Mon, 15 Oct 2018 10:40:29 GMT\", \"Content-Disposition\": \"attachment; filename=3-starry-eyed_shaping-reply.gpg\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Etag\": \"\\\"sha256:c8a250d083f37d2ea184dc37b84b887af5a9e1c09f260049a8668ad91e9e05cd\\\"\", \"X-Origin-Content-Type\": \"application/json\", \"Expires\": \"Mon, 15 Oct 2018 22:41:02 GMT\", \"Date\": \"Mon, 15 Oct 2018 10:41:02 GMT\", \"Content-Length\": \"1116\"}, \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45/download\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\\"filename\\\": \\\"16325bd9-6c6b-46fb-89a7-6bf710fdb18c\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-acknowledged_amalgam-reply.gpg\", \"Content-Length\": \"1134\", \"Etag\": \"\\\"sha256:e2f8e703863589cdb3c4bccec7a11eb9eccabe83189072caf3108b38129f316d\\\"\", \"Last-Modified\": \"Thu, 18 Apr 2019 18:25:55 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:28 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Fri, 19 Apr 2019 20:27:28 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:27 GMT\", \"Content-Length\": \"2947\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index a9a4517b7..4582e960d 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372/download\\\", \\n \\\"filename\\\": \\\"1-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372\\\", \\n \\\"uuid\\\": \\\"8d71c240-6997-4836-9652-f3db95908372\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8/download\\\", \\n \\\"filename\\\": \\\"2-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\", \\n \\\"uuid\\\": \\\"9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NDoyOSBHTVQifX0.DqYBDQ.VdOIVvB-wp6QMdqIfO9JTh8nthw; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:44:29 GMT\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"2057\", \"Content-Type\": \"application/json\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\"}+2": "{\"headers\": {\"Cache-Control\": \"public, max-age=43200\", \"Content-Disposition\": \"attachment; filename=1-starry-eyed_shaping-msg.gpg\", \"Last-Modified\": \"Mon, 15 Oct 2018 10:40:29 GMT\", \"Vary\": \"Cookie\", \"Etag\": \"\\\"sha256:aacdde2b18d477a6f40d3c91d0e8ed41ddcfb3b4a2055535013cfaf859b29026\\\"\", \"Date\": \"Mon, 15 Oct 2018 10:44:30 GMT\", \"Content-Length\": \"604\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Expires\": \"Mon, 15 Oct 2018 22:44:30 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NDozMCBHTVQifX0.DqYBDg.fiu8AhZ_1VJFS6XVzFe4iqMTcJs; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"X-Origin-Content-Type\": \"application/json\"}, \"body\": \"{\\\"filename\\\": \\\"0b949046-0baa-4a23-bedf-088bfff66660\\\"}\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NDozMSBHTVQifX0.DqYBDw.vt3ieWFsgnUGvJdeJgP9ewEhrtg; HttpOnly; Path=/\", \"Content-Length\": \"469\", \"Date\": \"Mon, 15 Oct 2018 10:44:31 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Length\": \"2053\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:29 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\"}+2": "{\"body\": \"{\\\"filename\\\": \\\"4c8541b4-53d0-408f-aa8c-f0b6b3846d84\\\"}\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Etag\": \"\\\"sha256:f6694c3a24601656b585e89e6844bab093f90b1e21a7583d51fe034c80eaf3f6\\\"\", \"Date\": \"Fri, 19 Apr 2019 08:27:30 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Disposition\": \"attachment; filename=1-irresolute_legatee-msg.gpg\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Fri, 19 Apr 2019 20:27:30 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Last-Modified\": \"Thu, 18 Apr 2019 18:25:58 GMT\", \"Content-Length\": \"604\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:31 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"468\"}}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index fd3902d74..eac1efd0d 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"5241\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:45:06 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NTowNiBHTVQifX0.DqYBMg.2aEX-76z4uuXPkirkKQaw0M7Xv8; HttpOnly; Path=/\"}, \"status\": 200}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"56\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NTowNiBHTVQifX0.DqYBMg.2aEX-76z4uuXPkirkKQaw0M7Xv8; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:45:06 GMT\"}, \"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"status\": 400, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 400, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:33 GMT\", \"Content-Length\": \"56\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7814\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:32 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 2a23aac02..0f5ba2815 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\", \"headers\": {\"Content-Length\": \"73\", \"Date\": \"Mon, 15 Oct 2018 10:39:23 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOToyMyBHTVQifX0.DqX_2w.Sik0joWMM7s1KwgKUB7IUL7Q_tI; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"status\": 403, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\"}+1": "{\"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOToyMyBHTVQifX0.DqX_2w.Sik0joWMM7s1KwgKUB7IUL7Q_tI; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"166\", \"Date\": \"Mon, 15 Oct 2018 10:39:23 GMT\"}, \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\"}+1": "{\"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:33 GMT\", \"Content-Length\": \"166\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 404, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index 5df96db12..6d7827d08 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5241\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNCBHTVQifX0.DqYBbA.pLo6QcfFWehvNU7t8DTjQQm4MAQ; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/flag\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNSBHTVQifX0.DqYBbQ.ndjLePg2lNaN6seJpMXz7Gh8el4; HttpOnly; Path=/\", \"Content-Length\": \"44\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+3": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:46:06 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNiBHTVQifX0.DqYBbg.M7lNhjK3NZ73r_G98uky_HSQlkY; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/flag\"}+2": "{\"headers\": {\"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:35 GMT\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\"}+3": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:36 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2520\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"7814\", \"Date\": \"Fri, 19 Apr 2019 08:27:34 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index ed6ab880a..74e974e68 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5241\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNCBHTVQifX0.DqYBbA.pLo6QcfFWehvNU7t8DTjQQm4MAQ; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/flag\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNSBHTVQifX0.DqYBbQ.ndjLePg2lNaN6seJpMXz7Gh8el4; HttpOnly; Path=/\", \"Content-Length\": \"44\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+3": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:46:06 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNiBHTVQifX0.DqYBbg.M7lNhjK3NZ73r_G98uky_HSQlkY; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:47:53 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"1973\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Nzo1MyBHTVQifX0.DqYB2Q.mRegrKhwxli3z0JUEhBO6l9xgcw; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/a884c037-320d-40d0-9764-0af4241eb35b\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"a884c037-320d-40d0-9764-0af4241eb35b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/7c8945b4-7f59-413d-994d-37a85da429b8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"7c8945b4-7f59-413d-994d-37a85da429b8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+2": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2947\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:38 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"7813\", \"Date\": \"Fri, 19 Apr 2019 08:27:37 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index 35cfa0ecb..9ba70b55c 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:04 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"5241\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNCBHTVQifX0.DqYBbA.pLo6QcfFWehvNU7t8DTjQQm4MAQ; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/flag\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:05 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNSBHTVQifX0.DqYBbQ.ndjLePg2lNaN6seJpMXz7Gh8el4; HttpOnly; Path=/\", \"Content-Length\": \"44\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+3": "{\"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:46:06 GMT\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjowNiBHTVQifX0.DqYBbg.M7lNhjK3NZ73r_G98uky_HSQlkY; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:47:53 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"1973\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Nzo1MyBHTVQifX0.DqYB2Q.mRegrKhwxli3z0JUEhBO6l9xgcw; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/a884c037-320d-40d0-9764-0af4241eb35b\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"a884c037-320d-40d0-9764-0af4241eb35b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-datable_syncopation-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies/7c8945b4-7f59-413d-994d-37a85da429b8\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"7c8945b4-7f59-413d-994d-37a85da429b8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:47:55 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2056\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Nzo1NSBHTVQifX0.DqYB2w.ZsC9zECVmUJJOiftGbF0aXddmrI; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372/download\\\", \\n \\\"filename\\\": \\\"1-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/8d71c240-6997-4836-9652-f3db95908372\\\", \\n \\\"uuid\\\": \\\"8d71c240-6997-4836-9652-f3db95908372\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8/download\\\", \\n \\\"filename\\\": \\\"2-datable_syncopation-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions/9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\", \\n \\\"uuid\\\": \\\"9d71e656-fae1-4f1c-b7dd-9c6a77b23ce8\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"2052\", \"Date\": \"Fri, 19 Apr 2019 08:27:39 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index 54ab1391f..bb5b196e3 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+2": "{\"version\": \"0.1.1\", \"status\": 403, \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOToyOSBHTVQifX0.DqX_4Q.aaA3zESPgWZWhqRfJBX2EIJ1JOY; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\", \"Content-Length\": \"73\", \"Date\": \"Mon, 15 Oct 2018 10:39:29 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"error\\\": \\\"Forbidden\\\", \\n \\\"message\\\": \\\"Token authentication failed.\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Length\": \"151\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjozOTozMCBHTVQifX0.DqX_4g.ZqmyWKUsiiLezPcUqa_RXv6rfn4; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:39:30 GMT\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2018-10-15T10:39:03.762045Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"eb4a8050-7eb7-496a-ae75-1ef66db677bc\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:39 GMT\", \"Content-Length\": \"151\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2019-04-19T08:27:11.268953Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\"\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index 7a9db5e47..8570b8d68 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:25 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjoyNSBHTVQifX0.DqYBgQ.dharDRwzCrb64xPr3M6G8N5uA7E; HttpOnly; Path=/\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0NjoyNiBHTVQifX0.DqYBgg.t1ZrcNszo0nyGfeB7QXUg1Nym4k; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Content-Length\": \"997\", \"Content-Type\": \"application/json\", \"Date\": \"Mon, 15 Oct 2018 10:46:26 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:41 GMT\", \"Content-Length\": \"999\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:40 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\"}}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 1dadf79ba..46172cc6d 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Date\": \"Mon, 15 Oct 2018 10:46:46 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo0NiBHTVQifX0.DqYBlg.AOU-MLcIop4rWxjsG1ETiZmDjHE; HttpOnly; Path=/\", \"Content-Length\": \"5240\", \"Content-Type\": \"application/json\", \"Vary\": \"Cookie\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo0NyBHTVQifX0.DqYBlw.KU8mEDN47bUI2Rs8wNp8CyTAGrY; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Length\": \"997\", \"Date\": \"Mon, 15 Oct 2018 10:46:47 GMT\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"3a1ae2ec-2e73-447c-be9f-cfcebdb4e38e\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\"}+3": "{\"status\": 200, \"headers\": {\"Content-Length\": \"446\", \"Date\": \"Mon, 15 Oct 2018 10:46:48 GMT\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo0OCBHTVQifX0.DqYBmA.1ta1GvpAOgufHGL-ENfK38e2HUo; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"body\": \"{\\n \\\"filename\\\": \\\"3-starry-eyed_shaping-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"bc175c3f-7559-46a6-b26b-d7c88ed5b136\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies/eb750345-5c40-4ced-acf2-6f8b27298c68\\\", \\n \\\"size\\\": 1116, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"eb750345-5c40-4ced-acf2-6f8b27298c68\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"999\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:42 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\"}+3": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:43 GMT\", \"Content-Length\": \"447\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:42 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index 04f24a4d2..341b5953e 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\"}+2": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2520\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:45 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:44 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"7813\"}}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index 04f24a4d2..df328386f 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\"}+2": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2520\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:46 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:46 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"7813\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index 04f24a4d2..ad552058a 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"7813\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:47 GMT\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index 49dc59990..cd4c7b0de 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\"}+3": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:50 GMT\", \"Content-Length\": \"1038\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:48 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2052\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544\"}+2": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2519\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:49 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\"}+4": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"468\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:50 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index 49dc59990..49ecba5a7 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"1038\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:53 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"status\": 200, \"headers\": {\"Content-Length\": \"2052\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:51 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2519\", \"Date\": \"Fri, 19 Apr 2019 08:27:52 GMT\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\"}+4": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:53 GMT\", \"Content-Length\": \"468\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index 49dc59990..265097679 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\"}+2": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:55 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"24\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:54 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index 477a4a4e1..9e79e23ce 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"status\": 404, \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:56 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"166\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:55 GMT\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 071ee8e0f..e3bb8c664 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\",\\\"uuid\\\":\\\"4efb9719-57f4-4fad-870f-207b1931ac14\\\"\\n,\\\"filename\\\":\\\"3-starry-eyed_shaping-msg.gpg\\\"}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}"} +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"body\": \"{\\n \\\"filename\\\": \\\"5-acknowledged_amalgam-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"adf3a3a8-dcbf-468c-857d-00ec296ecec0\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"148\", \"Date\": \"Fri, 19 Apr 2019 08:27:58 GMT\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"status\": 201}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:57 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source_with_uuid.json b/data/test_reply_source_with_uuid.json new file mode 100644 index 000000000..b55f7b8d0 --- /dev/null +++ b/data/test_reply_source_with_uuid.json @@ -0,0 +1 @@ +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"headers\": {\"Content-Length\": \"148\", \"Date\": \"Fri, 19 Apr 2019 08:27:59 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 201, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"filename\\\": \\\"6-acknowledged_amalgam-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:58 GMT\", \"Content-Length\": \"7813\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index e83c9cabe..b91505db2 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"5240\", \"Date\": \"Mon, 15 Oct 2018 10:46:58 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OCBHTVQifX0.DqYBog.fYCzbmIRuA6u65naeoL3F6rUSoc; HttpOnly; Path=/\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n}\\n\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0Njo1OSBHTVQifX0.DqYBow.94-bnoWUIk3LjjHM9jBQJ7z6eFg; HttpOnly; Path=/\", \"Date\": \"Mon, 15 Oct 2018 10:46:59 GMT\", \"Vary\": \"Cookie\", \"Content-Length\": \"2531\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b/download\\\", \\n \\\"filename\\\": \\\"2-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\", \\n \\\"uuid\\\": \\\"98a79db7-2f34-4d08-ae00-6b4ab8a31b1b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMSBHTVQifX0.DqYB4Q.gZRj3stxg_oPAqFYMJhffTcu8hM; HttpOnly; Path=/\", \"Content-Length\": \"1040\", \"Date\": \"Mon, 15 Oct 2018 10:48:01 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\"}+3": "{\"headers\": {\"Content-Length\": \"469\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowMiBHTVQifX0.DqYB4g.NvIYBZdgnQqn9Kwtqxum-6miRaQ; HttpOnly; Path=/\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:02 GMT\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d/download\\\", \\n \\\"filename\\\": \\\"1-starry-eyed_shaping-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions/1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\", \\n \\\"uuid\\\": \\\"1961c82d-466f-40c6-a7f6-7251f3dfbb7d\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"status\": 404, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:06 GMT\", \"Content-Length\": \"166\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowNiBHTVQifX0.DqYB5g.btHtkB969m2bV8nZJS_h8VGkiTk; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\"}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Your reply has been stored\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"46\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:08 GMT\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOCBHTVQifX0.DqYB6A.atUC9gjGCTAEbe8mPEAQcsCDWvU; HttpOnly; Path=/\"}}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"status\": 201, \"version\": \"0.1.1\", \"headers\": {\"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODowOSBHTVQifX0.DqYB6Q.0UMdHuVZ4MNd4q0uPqO5wh47YRs; HttpOnly; Path=/\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:09 GMT\", \"Vary\": \"Cookie\", \"Content-Type\": \"application/json\", \"Content-Length\": \"30\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\"}+3": "{\"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODoxMCBHTVQifX0.DqYB6g.GJUBWnr-jXRbJWsmFA5Ww-oMXXg; HttpOnly; Path=/\", \"Vary\": \"Cookie\", \"Date\": \"Mon, 15 Oct 2018 10:48:10 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.6\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"starry-eyed shaping\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbpwBEADBnicdUU5S1cy/omybzgInOXu3TaAcw3eIuvPVZMrgSqDOsW3w\\\\nXzu/zwZ4npnXT9mDkR7wGDVzMlbfPST393/53OeFVTwQWBhdeoWSA+XGAA4HQWKt\\\\nfe2oCJCyA/5p3384iTSjWOYvCkjVZNHFLwlf4MwJ1gYpjx70sP+p+sofzwbOLjD0\\\\nVk0ipa6F73DA8nuCpNKz422BhMy+b8/T7xrKRtuiH58ibdFYE5cIsFg905ohP+Aq\\\\nCu2R2hqIA7dEPJ4Ij8AMh6UsAg00H6i6bB9phOwqGMw5An+akK+z6iYKghsnWpR1\\\\nimtSJ0fMEMg9JmlXvvznZOsv9KT4zviD+slxuUBknLcqhhDOxf4uWI5xvCsnTlJq\\\\ngVw9qtvQQH+6Dly/XuBvUIWbeCzmWrnG/fIk2APsCrl0t3bQgv6Iw4a1pUwILByF\\\\nQSeS1xSiCzzM8ADLuiWzjFaAQgQgA7KkFi+D7Cg3EPur1pLC60BhwXDrlJQ/yyzb\\\\n4D9iRZOdrUxrEtUCtyLimFuCixsT2XcD1TYdcM4mB1h6yUpEzyfIEgQ+OW5Ec4NO\\\\nErJ7U6X+2kpH/E6u5szD2ZSVuQPBjY2riDpzJkAC1C7s0dU9JK8ini+Wce2EQt7+\\\\nBltumD5vEsZGcpTaKTLsQ9RWvtvg0A5Viv7q+/eLyvMFRzNF1Tp3EsI84QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UDNIWTRTMkhPQkVGR1M0R0JTTExURkNNTFFL\\\\nU0lMR1g2NVlDRk42NlFVWVdSS1RIUFJOV1hWRjNFUU9XSkFFRFJZQlQ3QVlLQ1VX\\\\nWU1aSVFES0FHWVZZUEZMSU1NSlhOVFROUU9NQT0+iQI/BBMBCgApBQJbxG6cAhsv\\\\nBQkB4UYkBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ7lj3fkt9c+iMDRAA\\\\njjLrabgn2e2012+n5eIUus6cdHFQDM5R4TO6O6i6h7nvBGIA61j6tkKirG+8a/kT\\\\neCYdXu/nAgNbglkF0Gsg36KvipkQ7N003Cp9r0rofbA2ERSmT/SkCiMCDECGidx+\\\\n3YnCvEj5Xq+mqooKeyA3sRJe/TS/p0/RoY6hbXZhjcjnKfZL8030rL/wahQSdRXi\\\\nsEo2DdWum0E4ptqDZOv1E9Ek1xTL6sJ4hs83N1LI2TX5wcS58+y7di0KDTlxCFRn\\\\nd6Z5YQZWbssoHCMJt8J9kLg9vWfJSCERpuD/RDgCP5F2FwlC231aA2zrQBzU5kZt\\\\nUwElnIDI1WnZTXBz9y3FBpblohqr33XVsHZKl0yMbrT5JJPCZe30kZMz91p+mKZM\\\\nRV0C2gSKpylsUeGocaS5p0kf5QMTwDOlZoHJDRqYJVr0Uvcu8JMBFrNHVOU1iCPY\\\\nOTohSpG0VPGoNL7gog7npbbscZ8gWZiqykpGdyyL6N1I7JX0M49clt9RZHLbsMzA\\\\niOsEUF36WiPBzrchgwWPs+TEIQSQ2HU8MXWybEDdExmYbZZTMj6tk/wCn7RbvK2f\\\\nOYO13pLTM4fuQIPn8CYyRtvoXMeJCxQiHn/qy6rRcdLDPwRac4p/lFKI8SRVxoUs\\\\nrmKFON9P6wN3ooXv9kG5rc8ewLxYrkgidzrD/GOVpcM=\\\\n=MPWa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:29.248380Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\", \\n \\\"uuid\\\": \\\"5f891a3a-0b2a-40b7-9c9a-49c4ca7252b2\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"datable syncopation\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFvEbp8BEADLk6fQ9ZYVCV1nzEB62akW3uK3ry/fVx37XHjJkP1ouqZOS4+X\\\\nyLy/TsHZEiP+NnWTAsMlkVlYxnO6KfsaEe/HMEXHddMV0B2Z5VMqmyPjotPXc/k3\\\\nzPe5HToQl917pPCbZE3uuHhJodqKwaieFhj2DoLouP8PAGDsJVu/9fxfEYHrPQgD\\\\ncwDVtj3gzM6iulIGgDVIIIAqI8CJl9qJTrqTVu34rBKwctSd+IEhWzmCZD02xt7a\\\\nTain0KHle+WACz0rdRf4uhkczufh9Q7TzSq1h0omZDZQq5CKVJQZg12Rka8hMs1w\\\\ney3/ZpQQMOnYAoWAj7Dhf365roh2crDL2SfXqGE3gYhZr9z/QdgY8BfKzhpQXpmh\\\\njmQPFxUXgJFh+xWqb/trY0tI/86WdDSS06o8U5qiYih3m0vrHSyi3S0m87P/Ce4V\\\\nOjnw6Nna5RCOynUquzK0vJx2m1dUbDsMSg810II49N10QIR/U8UwBcDgAiQhicki\\\\n+tTjDBfAP0lT8Xa8zF5bMMp4iNf7ouzpHkC4WyfbyzycJYLw38mfIrr5Ijdte/24\\\\nTKN+clhFgnNHA//C/n7ZmS91bkXfFWG8sYD4j1i0qDzVMKOT673ksDAXSMc2pupr\\\\nwi5F79T/5JnxAhWsIgFoaPIxYfL9NMnPFuqnWHNZfYXn1dRWr9GiArGzTQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M04zQVVIWVhWSFVGR0E2QzJUV0tZVDQ1QUVH\\\\nWFBVUUxTTjY2SjI1RlgyN0tOQktPSVRDNkhMQllRWTRKN0JMVjNENU41QUVCRkxO\\\\nQVZVNU1UTzdFWkJOSldMRVNJSUYyTUZOT1VNQT0+iQI/BBMBCgApBQJbxG6fAhsv\\\\nBQkB4UYhBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQn6EGbC8pRwXMYw//\\\\nfHo/CLGbpyaUGDh6jCU6ZtstCuWwjiyG4gawCS/f5WTShmcamGDN0L3QVzFK10cq\\\\nDpnJ1bb53bG9lqTdUapru6YEYV/F+snRGxUXAqBPFo7zr3qyiJL+UmftNKZiQN26\\\\nb8bvf4vvhHOMlj4Z46wxuBBZlDfJSa+geXeObxLOkhnwpFCBxIf6qErIliwCcIGj\\\\ntrHSJcChPthaKzfE2iZaQyIWaVQ4i5N9aJ61yhFyz/zBulCVBhr++5QVki8rav0+\\\\nrzxDQADly6vWPctiHh4giMfeZq1yOXfV5D62w6WhM0hmpQwikuxu9CkSEmcKbtjS\\\\nh/2BgfZGUMwyX90cJfFgKSB7mWYyxiMQLLehtVH7utMY8tmvBHQCMmwmm06XLLYa\\\\nuRDnh/NKIfGsYaAdoH5DoQohZeEpOk8jj047zZ4yJYLQFSF1Couo/wSYp2gzGQR1\\\\nb4ZtplZorLWHN3YeQqx8UkR1+Cy6DKUUFWCku4HnSLoMQldnrgEhySz1e2r5P7gl\\\\nKnta++yC3j82AFonKYzagauLGjuGWb126pC4+iMaQIRq/QH5C5FE8s3g99sv7oIe\\\\nySMOLY+rZwsTyTxHw6knPNErEd80QUpH1vUt1x3SjnW+l9Lvqll5I7dU6WuM1Ufs\\\\n3QgpNC6OHYMzlW9adGmyVBCW2erWALJnpJBaA+R4+8Y=\\\\n=5bhM\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2018-10-15T10:40:37.601298Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\", \\n \\\"uuid\\\": \\\"e94ad028-52d4-4b48-bd8a-61e886aac9dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.6\", \"Date\": \"Mon, 15 Oct 2018 10:48:11 GMT\", \"Content-Length\": \"5240\", \"Vary\": \"Cookie\", \"Set-Cookie\": \"js=eyJleHBpcmVzIjp7IiBkIjoiTW9uLCAxNSBPY3QgMjAxOCAxMjo0ODoxMSBHTVQifX0.DqYB6w.GxCan9EsD8IljXM3eXTm34vS_2c; HttpOnly; Path=/\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\"}+3": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"32\", \"Date\": \"Fri, 19 Apr 2019 08:28:01 GMT\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:28:02 GMT\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\"}+2": "{\"status\": 201, \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:28:00 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"30\"}, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:28:00 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 3e98ca684..db7aae45b 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,12 +1,22 @@ import os import pyotp import time +import shutil +import tempfile import unittest from sdclientapi import API -from sdclientapi.sdlocalobjects import BaseError, WrongUUIDError, ReplyError, Source +from sdclientapi.sdlocalobjects import ( + BaseError, + WrongUUIDError, + ReplyError, + Reply, + Source, +) from utils import load_auth, save_auth, dastollervey_datasaver +NUM_REPLIES_PER_SOURCE = 2 + class TestAPIProxy(unittest.TestCase): @dastollervey_datasaver @@ -38,7 +48,11 @@ def test_api_auth(self): @dastollervey_datasaver def test_get_sources(self): sources = self.api.get_sources() - self.assertEqual(len(sources), 2) + for source in sources: + # Assert expected fields are present + assert source.journalist_designation + assert source.uuid + assert source.last_updated @dastollervey_datasaver def test_star_add_remove(self): @@ -77,11 +91,14 @@ def test_get_submissions(self): s = self.api.get_sources()[0] subs = self.api.get_submissions(s) - self.assertEqual(len(subs), 2) + for submission in subs: + assert submission.filename @dastollervey_datasaver def test_get_submission(self): - s = self.api.get_sources()[0] + # Get a source with submissions + source_uuid = self.api.get_all_submissions()[0].source_uuid + s = self.api.get_source(Source(uuid=source_uuid)) subs = self.api.get_submissions(s) sub = self.api.get_submission(subs[0]) @@ -89,7 +106,9 @@ def test_get_submission(self): @dastollervey_datasaver def test_get_submission_from_string(self): - s = self.api.get_sources()[0] + # Get a source with submissions + source_uuid = self.api.get_all_submissions()[0].source_uuid + s = self.api.get_source(Source(uuid=source_uuid)) subs = self.api.get_submissions(s) sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) @@ -98,7 +117,6 @@ def test_get_submission_from_string(self): @dastollervey_datasaver def test_get_wrong_submissions(self): s = self.api.get_sources()[0] - s.submissions_url = "/api/v1/sources/rofl-missing/submissions/2334" s.uuid = "rofl-missing" with self.assertRaises(WrongUUIDError): self.api.get_submissions(s) @@ -106,7 +124,8 @@ def test_get_wrong_submissions(self): @dastollervey_datasaver def test_get_all_submissions(self): subs = self.api.get_all_submissions() - self.assertEqual(len(subs), 4) + for submission in subs: + assert submission.filename @dastollervey_datasaver def test_flag_source(self): @@ -118,29 +137,35 @@ def test_flag_source(self): @dastollervey_datasaver def test_delete_source(self): + number_of_sources_before = len(self.api.get_sources()) + s = self.api.get_sources()[0] self.assertTrue(self.api.delete_source(s)) - # Now there should be one source left + # Now there should be one less source sources = self.api.get_sources() - self.assertEqual(len(sources), 1) + self.assertEqual(len(sources), number_of_sources_before - 1) @dastollervey_datasaver def test_delete_source_from_string(self): + number_of_sources_before = len(self.api.get_sources()) + s = self.api.get_sources()[0] self.assertTrue(self.api.delete_source_from_string(s.uuid)) - # Now there should be one source left + # Now there should be one less source sources = self.api.get_sources() - self.assertEqual(len(sources), 1) + self.assertEqual(len(sources), number_of_sources_before - 1) @dastollervey_datasaver def test_delete_submission(self): + number_of_submissions_before = len(self.api.get_all_submissions()) + subs = self.api.get_all_submissions() self.assertTrue(self.api.delete_submission(subs[0])) new_subs = self.api.get_all_submissions() - # We now should have 3 submissions - self.assertEqual(len(new_subs), 3) + # We now should have 1 less submission + self.assertEqual(len(new_subs), number_of_submissions_before - 1) # Let us make sure that sub[0] is not there for s in new_subs: @@ -148,14 +173,16 @@ def test_delete_submission(self): @dastollervey_datasaver def test_delete_submission_from_string(self): + number_of_submissions_before = len(self.api.get_all_submissions()) + s = self.api.get_sources()[0] subs = self.api.get_submissions(s) self.assertTrue(self.api.delete_submission(subs[0])) new_subs = self.api.get_all_submissions() - # We now should have 3 submissions - self.assertEqual(len(new_subs), 3) + # We now should have 1 less submission + self.assertEqual(len(new_subs), number_of_submissions_before - 1) # Let us make sure that sub[0] is not there for s in new_subs: @@ -182,13 +209,51 @@ def test_reply_source(self): with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: data = fobj.read() - self.assertTrue(self.api.reply_source(s, data)) + reply = self.api.reply_source(s, data) + assert isinstance(reply, Reply) + assert reply.uuid + assert reply.filename + + @dastollervey_datasaver + def test_reply_source_with_uuid(self): + s = self.api.get_sources()[0] + dirname = os.path.dirname(__file__) + with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: + data = fobj.read() + + msg_uuid = "e467868c-1fbb-4b5e-bca2-87944ea83855" + reply = self.api.reply_source(s, data, msg_uuid) + assert reply.uuid == msg_uuid + + @dastollervey_datasaver + def test_download_submission(self): + s = self.api.get_all_submissions()[0] + + self.assertFalse(s.is_read) + + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + _, filepath = self.api.download_submission(s, tmpdir) + + # Uncomment the followig part only on QubesOS + # for testing against real server. + # now let us read the downloaded file + # with open(filepath, "rb") as fobj: + # fobj.read() + + # Now the submission should have is_read as True. + + s = self.api.get_submission(s) + self.assertTrue(s.is_read) + + # Let us remove the temporary directory + shutil.rmtree(tmpdir) @dastollervey_datasaver def test_get_replies_from_source(self): s = self.api.get_sources()[0] replies = self.api.get_replies_from_source(s) - self.assertEqual(len(replies), 2) + self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE) @dastollervey_datasaver def test_get_reply_from_source(self): @@ -205,32 +270,34 @@ def test_get_reply_from_source(self): @dastollervey_datasaver def test_get_all_replies(self): + num_sources = len(self.api.get_sources()) replies = self.api.get_all_replies() - self.assertEqual(len(replies), 4) + self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE * num_sources) @dastollervey_datasaver - def test_delete_reply(self): + def test_download_reply(self): r = self.api.get_all_replies()[0] - self.assertTrue(self.api.delete_reply(r)) + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + _, filepath = self.api.download_reply(r, tmpdir) - # We deleted one, so there must be 3 replies left - self.assertEqual(len(self.api.get_all_replies()), 3) - - @dastollervey_datasaver - def test_download_reply(self): - r = self.api.get_all_replies()[0] + # Uncomment the followig part only on QubesOS + # for testing against real server. + # now let us read the downloaded file + # with open(filepath, "rb") as fobj: + # fobj.read() - _, filepath = self.api.download_reply(r) + # Let us remove the temporary directory + shutil.rmtree(tmpdir) @dastollervey_datasaver - def test_download_submission(self): - s = self.api.get_all_submissions()[0] + def test_delete_reply(self): + r = self.api.get_all_replies()[0] - self.assertFalse(s.is_read) + number_of_replies_before = len(self.api.get_all_replies()) - _, filepath = self.api.download_submission(s) + self.assertTrue(self.api.delete_reply(r)) - # Now the submission should have is_read as True. - s = self.api.get_submission(s) - self.assertTrue(s.is_read) + # We deleted one, so there must be 1 less reply now + self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) From 3d22f004052de625f52c1d33f1771ee862411ba9 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 19 Apr 2019 14:11:47 +0530 Subject: [PATCH 167/751] Fixes lint issue with exception handling --- tests/test_apiproxy.py | 4 ++-- tests/utils.py | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index db7aae45b..89668545f 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -235,7 +235,7 @@ def test_download_submission(self): tmpdir = tempfile.mkdtemp() _, filepath = self.api.download_submission(s, tmpdir) - # Uncomment the followig part only on QubesOS + # Uncomment the following part only on QubesOS # for testing against real server. # now let us read the downloaded file # with open(filepath, "rb") as fobj: @@ -282,7 +282,7 @@ def test_download_reply(self): tmpdir = tempfile.mkdtemp() _, filepath = self.api.download_reply(r, tmpdir) - # Uncomment the followig part only on QubesOS + # Uncomment the following part only on QubesOS # for testing against real server. # now let us read the downloaded file # with open(filepath, "rb") as fobj: diff --git a/tests/utils.py b/tests/utils.py index 73354f85f..a20c83089 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -37,8 +37,6 @@ def internal_sideeffect(*args, **kwargs): value = json.loads(value_str) del value["one_time_code"] python_args["body"] = json.dumps(value, sort_keys=True) - # newargs = json.dumps(python_args, sort_keys=True) - # arguments = (newargs,) except Exception: pass # Means no body in the call @@ -49,8 +47,6 @@ def internal_sideeffect(*args, **kwargs): value = python_args["headers"] del value["Authorization"] python_args["headers"] = json.dumps(value, sort_keys=True) - # newargs = json.dumps(python_args, sort_keys=True) - # arguments = (newargs,) except Exception: pass # Means no Authorization token in the call @@ -68,7 +64,7 @@ def internal_sideeffect(*args, **kwargs): for k in dkeys: od[k] = value[k] python_args["body"] = json.dumps(od) - except: + except Exception: pass newargs = json.dumps(python_args, sort_keys=True) From 0d9b4c6f2a2a63889cf6a20e00433703454961fd Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 25 Apr 2019 01:20:07 +0530 Subject: [PATCH 168/751] Adds new sha256sums for PyYAML 5.1 and new release Updates setup.py for new release of 0.1.3 It also adds the VERSION file as the right package data, and fixes the following error due to the newline in that file. /home/user/.local/lib/python3.5/site-packages/setuptools/dist.py:398: UserWarning: Normalizing '0.1.3 ' to '0.1.3' normalized_version, --- requirements.txt | 2 +- setup.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 923665a2c..8e2c8bb46 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ chardet==3.0.4 --hash=sha256:9f178988ca4c86e8a319b51aac1185b6fe5192328eb5a163c28 furl==2.0.0 --hash=sha256:cc0eb8998dcc7c5b58bc8625891a9ff563e2765e112024fa3d1e3521481de8b6 idna==2.7 --hash=sha256:954e65e127d0433a352981f43f291a438423d5b385ebf643c70fd740e0634111 orderedmultidict==1.0 --hash=sha256:25489716d76d2cc8aa656bfb00cd40b6ca29d5e11ccde0db60c2b46ad52bb40a -pyyaml==3.13 --hash=sha256:59fa6f097310e25248d5aa1d7b7e619ea22dfaada67e9c65262457b3e5b3a5c8 +pyyaml==5.1 --hash=sha256:b8d80623e9d4e348c59ea726ce3032a2eb15abca6a48d3828362d11c6014a0a7 requests==2.20.0 --hash=sha256:2a539dd6af40a611f3b8eb3f99d3567781352ece1698b2fab42bf4c2218705b5 six==1.11.0 --hash=sha256:4663c7a1dbed033cfb294f2d534bd6151c0698dc12ecabb4eaa3cb041d758528 urllib3==1.24.1 --hash=sha256:ac4755b0ae019d670d5fb420c39cb531389ab6ca8b652e12f56259f5cbc0ce21 diff --git a/setup.py b/setup.py index f8e2cc7e2..1e3f4ca6c 100644 --- a/setup.py +++ b/setup.py @@ -5,6 +5,7 @@ long_description = fh.read() version = pkgutil.get_data("securedrop_proxy", "VERSION").decode("utf-8") +version = version.strip() setuptools.setup( name="securedrop-proxy", @@ -19,6 +20,9 @@ python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-proxy", packages=setuptools.find_packages(exclude=["docs", "tests"]), + package_data={ + 'securedrop_proxy': ['VERSION'], + }, classifiers=( "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", From 12174860498b1929fddbcb1e95524c45e27f6a6b Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 19 Apr 2019 18:49:02 +0530 Subject: [PATCH 169/751] Adds docs on generating test data for APIProxy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This contains steps on QubesOS about how to generate test data for `test_apiproxy.py` file 🌈 --- docs/development.rst | 67 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/docs/development.rst b/docs/development.rst index 06127a017..786aa3e72 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -37,12 +37,69 @@ To run a single test, use this following command, replace the test case name at make test TESTS=tests/test_api.py::TestAPI::test_error_unencrypted_reply -To test against a live development server, you will need to run the SecureDrop developent -container from the main SecureDrop repository on your host. This can be done via ``make -C securedrop dev``. +To test against a live development server, you will need to run the SecureDrop +developent container from the main SecureDrop repository on your host. This +can be done via ``NUM_SOURCES=5 make -C securedrop dev``. + +In this repo, comment out the ``@vcr`` decorator of the ``setUp`` method in +`test_api.py` and execute which ever tests you want to run. If you want to +re-run all tests against the API, remove all the ``.yml`` files in the +``data`` directory. + + +Gererating test data for `APIProxy` +----------------------------------- + + +To test or to generate new test data file for the `APIProxy` class in +`test_apiproxy.py` file, you will have to setup +`QubesOS `_ system. + +There should be one VM (let us call it `sd-journalist`), where we can run +latest securedrop server code from the development branch using +``NUM_SOURCES=5 make -C securedrop dev`` command. The same VM should also have +`securedrop-proxy` project installed, either from the source by hand or using +the latest Debian package from the FPF repository. + +Below is an example configuration for proxy `/etc/sd-proxy.yaml` + +:: + + host: 127.0.0.1 + scheme: http + port: 8081 + target_vm: sd-svs + dev: False + +Then we can create our second developent VM called `sd-svs`, in which we can checkout/develop +the `securedrop-sdk` project. The required configuration file is at `/etc/sd-sdk.conf` + +:: + + [proxy] + name=sd-journalist + +We should also add a corresponding entry in `/etc/qubes-rpc/policy/securedrop.Proxy` file +in **dom0**. + +:: + + sd-svs sd-journalist allow + $anyvm $anyvm deny + + +The above mentioned setup can also be created using `securedrop-workstation` project. + + +Now, delete any related JSON file under `data/` directory, or remove all of +them, and then execute ``make test TEST=tests/test_apiproxy.py``. This is +command will generate the new data files, which can be used in CI or any other +system. + +.. note:: + Remember that file download checks don't read actual file path in the `APIProxy` tests as it + requires QubesOS setup. You can manually uncomment those lines to execute them on QubesOS setup. -In this repo, comment out the ``@vcr`` decorator of the ``setUp`` method and which ever tests -you want to run. If you want to re-run all tests against the API, remove all the ``.yml`` files -in the ``data`` directory. Releasing ========= From 091583b79486eda06b15d500b5ca2c94f1e6a9de Mon Sep 17 00:00:00 2001 From: John Hensley Date: Thu, 18 Apr 2019 18:49:09 -0400 Subject: [PATCH 170/751] Revert API.authenticate return type to bool In bb8896936fe26649908a5dda26cb347e76613712, the "return True" at the end of API.authenticates was removed. This caused errors in the SD client despite successful authentication. Reverted, type signature adjusted accordingly, test added. Also, the value assigned to API's self.token changed from the full token_data to just the token, which again broke the client. Reverted, adjusted update_auth_header, but kept self.token_expiration. Added a few tests of auth failures. --- .isort.cfg | 9 ++++++++ CHANGELOG.md | 5 +++++ data/test-badotp.yml | 21 +++++++++++++++++ data/test-badpassword.yml | 20 +++++++++++++++++ data/test-baduser.yml | 21 +++++++++++++++++ sdclientapi/__init__.py | 10 +++++---- setup.py | 2 +- tests/test_api.py | 47 +++++++++++++++++++++++++++++---------- 8 files changed, 118 insertions(+), 17 deletions(-) create mode 100644 .isort.cfg create mode 100644 data/test-badotp.yml create mode 100644 data/test-badpassword.yml create mode 100644 data/test-baduser.yml diff --git a/.isort.cfg b/.isort.cfg new file mode 100644 index 000000000..340d44089 --- /dev/null +++ b/.isort.cfg @@ -0,0 +1,9 @@ +[settings] +line_length = 100 +indent = 4 +force_single_line = true +case_sensitive = true +# force_sort_within_sections = true +default_section = THIRDPARTY +sections = FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER +known_first_party = sdclientapi diff --git a/CHANGELOG.md b/CHANGELOG.md index 0516c4bcf..a98efd279 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.0.8 +----- + +* Revert return type of API.authenticate to bool + 0.0.7 ----- diff --git a/data/test-badotp.yml b/data/test-badotp.yml new file mode 100644 index 000000000..7c21e4a06 --- /dev/null +++ b/data/test-badotp.yml @@ -0,0 +1,21 @@ +interactions: +- request: + body: '{"one_time_code": "no", "passphrase": "correct horse battery staple + profanity oil chewy", "username": "journalist"}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['119'] + User-Agent: [python-requests/2.20.0] + method: POST + uri: http://127.0.0.1:8081/api/v1/token + response: + body: {string: "{\n \"error\": \"Forbidden\",\n \"message\": \"Token authentication failed.\"\n}\n"} + headers: + Content-Length: ['73'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 403, message: FORBIDDEN} +version: 1 diff --git a/data/test-badpassword.yml b/data/test-badpassword.yml new file mode 100644 index 000000000..252ebb988 --- /dev/null +++ b/data/test-badpassword.yml @@ -0,0 +1,20 @@ +interactions: +- request: + body: '{"one_time_code": "278592", "passphrase": "no", "username": "journalist"}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['119'] + User-Agent: [python-requests/2.20.0] + method: POST + uri: http://127.0.0.1:8081/api/v1/token + response: + body: {string: "{\n \"error\": \"Forbidden\",\n \"message\": \"Token authentication failed.\"\n}\n"} + headers: + Content-Length: ['73'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 403, message: FORBIDDEN} +version: 1 diff --git a/data/test-baduser.yml b/data/test-baduser.yml new file mode 100644 index 000000000..e5a84ad8b --- /dev/null +++ b/data/test-baduser.yml @@ -0,0 +1,21 @@ +interactions: +- request: + body: '{"one_time_code": "278592", "passphrase": "correct horse battery staple + profanity oil chewy", "username": "no"}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['119'] + User-Agent: [python-requests/2.20.0] + method: POST + uri: http://127.0.0.1:8081/api/v1/token + response: + body: {string: "{\n \"error\": \"Forbidden\",\n \"message\": \"Token authentication failed.\"\n}\n"} + headers: + Content-Length: ['73'] + Content-Type: [application/json] + Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 403, message: FORBIDDEN} +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 317604a44..cc1c0eb9a 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -73,7 +73,7 @@ def __init__( self.username = username self.passphrase = passphrase self.totp = totp - self.token = None # type: Optional[str] + self.token = None # type: Optional[Dict[str, str]] self.token_expiration = None # type: Optional[datetime] self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool @@ -119,7 +119,7 @@ def _send_json_request( return result, result.status_code, result.headers return result.json(), result.status_code, result.headers - def authenticate(self, totp: Optional[str] = None) -> None: + def authenticate(self, totp: Optional[str] = None) -> bool: """ Authenticate the user and fetches the token from the server. @@ -146,16 +146,18 @@ def authenticate(self, totp: Optional[str] = None) -> None: raise BaseError("Error in parsing JSON") if "expiration" not in token_data: raise AuthError("Authentication error") - self.token = token_data["token"] + self.token = token_data self.token_expiration = datetime.strptime( token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ" ) self.update_auth_header() + return True + def update_auth_header(self) -> None: if self.token is not None: self.req_headers = { - "Authorization": "Token " + self.token, + "Authorization": "Token " + self.token["token"], "Content-Type": "application/json", "Accept": "application/json", } diff --git a/setup.py b/setup.py index 78e90d115..209ef2c44 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.7", + version="0.0.8", author="Kushal Das", author_email="kushal@freedom.press", description="Python client API to access SecureDrop Journalist REST API", diff --git a/tests/test_api.py b/tests/test_api.py index 1762e1067..7d4ab2aa8 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,21 +1,22 @@ +import collections import os -import pyotp import shutil import tempfile import time import unittest + +import pyotp import vcr +from utils import load_auth +from utils import save_auth from sdclientapi import API -from sdclientapi.sdlocalobjects import ( - BaseError, - WrongUUIDError, - ReplyError, - Reply, - Source, -) -from utils import load_auth, save_auth - +from sdclientapi.sdlocalobjects import AuthError +from sdclientapi.sdlocalobjects import BaseError +from sdclientapi.sdlocalobjects import Reply +from sdclientapi.sdlocalobjects import ReplyError +from sdclientapi.sdlocalobjects import Source +from sdclientapi.sdlocalobjects import WrongUUIDError NUM_REPLIES_PER_SOURCE = 2 @@ -30,7 +31,8 @@ def setUp(self): self.api = API(self.server, self.username, self.password, str(self.totp.now())) for i in range(3): try: - self.api.authenticate() + result = self.api.authenticate() + self.assertTrue(result is True) except BaseError: token = load_auth() if token: @@ -42,8 +44,29 @@ def setUp(self): save_auth(self.api.token) break + @vcr.use_cassette("data/test-baduser.yml") + def test_auth_baduser(self): + self.api = API(self.server, "no", self.password, str(self.totp.now())) + with self.assertRaises(AuthError): + self.api.authenticate() + + @vcr.use_cassette("data/test-badpassword.yml") + def test_auth_badpassword(self): + self.api = API(self.server, self.username, "no", str(self.totp.now())) + with self.assertRaises(AuthError): + self.api.authenticate() + + @vcr.use_cassette("data/test-badotp.yml") + def test_auth_badotp(self): + self.api = API(self.server, self.username, self.password, "no") + with self.assertRaises(AuthError): + self.api.authenticate() + def test_api_auth(self): - self.assertTrue(self.api.token) + self.assertTrue(isinstance(self.api.token, collections.Mapping)) + self.assertTrue("expiration" in self.api.token) + self.assertTrue("journalist_uuid" in self.api.token) + self.assertTrue("token" in self.api.token) @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): From 3d41b67a88b3cf94da95b07ac69af6edd1026421 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Mon, 29 Apr 2019 13:25:21 -0400 Subject: [PATCH 171/751] Resolve review comments Revert the reversion of API.token to the dict received from the server. Instead, keep API.token as the token itself, restore token_expiration as a datetime, and add token_journalist_uuid. The client will have to be updated to get the UUID from that attribute instead of extracting it from API.token. Keep the change to return True from API.authenticate, but indicate problems with exceptions. --- data/setUp.json | 2 +- sdclientapi/__init__.py | 11 +++++++---- tests/test_api.py | 12 +++++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/data/setUp.json b/data/setUp.json index 8153303ce..de46f4c90 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index cc1c0eb9a..103869e50 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -73,8 +73,9 @@ def __init__( self.username = username self.passphrase = passphrase self.totp = totp - self.token = None # type: Optional[Dict[str, str]] + self.token = None # type: Optional[str] self.token_expiration = None # type: Optional[datetime] + self.token_journalist_uuid = None # type: Optional[str] self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool @@ -85,7 +86,6 @@ def _send_json_request( body: Optional[str] = None, headers: Optional[Dict[str, str]] = None, ) -> Tuple[Any, int, Dict[str, str]]: - if self.proxy: # We are using the Qubes securedrop-proxy if method == "POST": data = { @@ -146,10 +146,13 @@ def authenticate(self, totp: Optional[str] = None) -> bool: raise BaseError("Error in parsing JSON") if "expiration" not in token_data: raise AuthError("Authentication error") - self.token = token_data + + self.token = token_data["token"] self.token_expiration = datetime.strptime( token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ" ) + self.token_journalist_uuid = token_data["journalist_uuid"] + self.update_auth_header() return True @@ -157,7 +160,7 @@ def authenticate(self, totp: Optional[str] = None) -> bool: def update_auth_header(self) -> None: if self.token is not None: self.req_headers = { - "Authorization": "Token " + self.token["token"], + "Authorization": "Token " + self.token, "Content-Type": "application/json", "Accept": "application/json", } diff --git a/tests/test_api.py b/tests/test_api.py index 7d4ab2aa8..33fb2fc79 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,4 +1,4 @@ -import collections +import datetime import os import shutil import tempfile @@ -31,8 +31,7 @@ def setUp(self): self.api = API(self.server, self.username, self.password, str(self.totp.now())) for i in range(3): try: - result = self.api.authenticate() - self.assertTrue(result is True) + self.api.authenticate() except BaseError: token = load_auth() if token: @@ -63,10 +62,9 @@ def test_auth_badotp(self): self.api.authenticate() def test_api_auth(self): - self.assertTrue(isinstance(self.api.token, collections.Mapping)) - self.assertTrue("expiration" in self.api.token) - self.assertTrue("journalist_uuid" in self.api.token) - self.assertTrue("token" in self.api.token) + self.assertTrue(isinstance(self.api.token, str)) + self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) + self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): From afe172cf3efe5f5e678cf6bb13e8f14b5e56dba7 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Mon, 29 Apr 2019 15:12:02 -0400 Subject: [PATCH 172/751] Also test authentication results in test_apiproxy.py --- tests/test_apiproxy.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 89668545f..d014d0905 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,3 +1,4 @@ +import datetime import os import pyotp import time @@ -43,7 +44,9 @@ def setUp(self): break def test_api_auth(self): - self.assertTrue(self.api.token) + self.assertTrue(isinstance(self.api.token, str)) + self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) + self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) @dastollervey_datasaver def test_get_sources(self): From b28038262da325ac93695a0d61e0b3cc43ed86a1 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Mon, 29 Apr 2019 15:43:14 -0400 Subject: [PATCH 173/751] Remove isort config file --- .isort.cfg | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .isort.cfg diff --git a/.isort.cfg b/.isort.cfg deleted file mode 100644 index 340d44089..000000000 --- a/.isort.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[settings] -line_length = 100 -indent = 4 -force_single_line = true -case_sensitive = true -# force_sort_within_sections = true -default_section = THIRDPARTY -sections = FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER -known_first_party = sdclientapi From 56be7a7a17f4633ba8f3eb755c05b7b4c95869ce Mon Sep 17 00:00:00 2001 From: heartsucker Date: Tue, 7 May 2019 17:07:38 +0200 Subject: [PATCH 174/751] remove mutable global state from API class --- sdclientapi/__init__.py | 31 +++++++++++++++---------------- tests/utils.py | 2 +- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 103869e50..12ccec161 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -17,25 +17,16 @@ Submission, ) -proxyvmname = "sd-proxy" +DEFAULT_PROXY_VM_NAME = "sd-proxy" -def json_query(data: str) -> str: +def json_query(proxy_vm_name: str, data: str) -> str: """ Takes a json based query and passes to the network proxy. Returns the JSON output from the proxy. """ - global proxyvmname - config = configparser.ConfigParser() - try: - if os.path.exists("/etc/sd-sdk.conf"): - config.read("/etc/sd-sdk.conf") - proxyvmname = config["proxy"]["name"] - except Exception: - pass # We already have a default name - p = Popen( - ["/usr/lib/qubes/qrexec-client-vm", proxyvmname, "securedrop.Proxy"], + ["/usr/lib/qubes/qrexec-client-vm", proxy_vm_name, "securedrop.Proxy"], stdin=PIPE, stdout=PIPE, stderr=PIPE, @@ -68,7 +59,6 @@ def __init__( """ Primary API class, this is the only thing which will make network call. """ - self.server = address self.username = username self.passphrase = passphrase @@ -79,6 +69,15 @@ def __init__( self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool + self.proxy_vm_name = DEFAULT_PROXY_VM_NAME + config = configparser.ConfigParser() + try: + if os.path.exists("/etc/sd-sdk.conf"): + config.read("/etc/sd-sdk.conf") + self.proxy_vm_name = config["proxy"]["name"] + except Exception: + pass # We already have a default name + def _send_json_request( self, method: str, @@ -99,7 +98,7 @@ def _send_json_request( data = {"method": method, "path_query": path_query, "headers": headers} data_str = json.dumps(data, sort_keys=True) - result = json.loads(json_query(data_str)) + result = json.loads(json_query(self.proxy_vm_name, data_str)) return json.loads(result["body"]), result["status"], result["headers"] else: # We are not using the Qubes securedrop-proxy @@ -511,7 +510,7 @@ def download_submission( else: filepath = os.path.join( - "/home/user/QubesIncoming/", proxyvmname, data["filename"] + "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] ) # Return the tuple of sha256sum, filepath # Returning empty string instead of sha256sum due to this @@ -742,7 +741,7 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: else: filepath = os.path.join( - "/home/user/QubesIncoming/", proxyvmname, data["filename"] + "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] ) # Return the tuple of sha256sum, filepath # Returning empty string instead of sha256sum due to this diff --git a/tests/utils.py b/tests/utils.py index a20c83089..95b871e11 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -30,7 +30,7 @@ def internal_sideeffect(*args, **kwargs): arguments = tuple(args) # Now remove the one time code # As it will be a different value every time. - python_args = json.loads(args[0]) + python_args = json.loads(args[1]) try: value_str = python_args["body"] From 2d7c3a95f02cfd20b748fdb589be1abe24bc6673 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Tue, 7 May 2019 17:23:14 +0200 Subject: [PATCH 175/751] simplify handling of http and rpc calls --- sdclientapi/__init__.py | 72 ++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 12ccec161..645229086 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -86,37 +86,51 @@ def _send_json_request( headers: Optional[Dict[str, str]] = None, ) -> Tuple[Any, int, Dict[str, str]]: if self.proxy: # We are using the Qubes securedrop-proxy - if method == "POST": - data = { - "method": method, - "path_query": path_query, - "body": body, - } # type: Dict[str, Any] - if headers is not None and headers: - data["headers"] = headers - elif method == "GET" or method == "DELETE": - data = {"method": method, "path_query": path_query, "headers": headers} - - data_str = json.dumps(data, sort_keys=True) - result = json.loads(json_query(self.proxy_vm_name, data_str)) - return json.loads(result["body"]), result["status"], result["headers"] - + func = self._send_rpc_json_request else: # We are not using the Qubes securedrop-proxy - if method == "POST": - result = requests.post( - urljoin(self.server, path_query), headers=headers, data=body - ) - elif method == "GET": - result = requests.get(urljoin(self.server, path_query), headers=headers) - elif method == "DELETE": - result = requests.delete( - urljoin(self.server, path_query), headers=headers - ) + func = self._send_http_json_request + + return func(method, path_query, body, headers) + + def _send_http_json_request( + self, + method: str, + path_query: str, + body: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + ) -> Tuple[Any, int, Dict[str, str]]: + url = urljoin(self.server, path_query) + kwargs = {"headers": headers} # type: Dict[str, Any] + + if method == "POST": + kwargs["data"] = body + + result = requests.request(method, url, **kwargs) + + # Because when we download a file there is no JSON in the body + if path_query.endswith("/download"): + return result, result.status_code, dict(result.headers) + + return result.json(), result.status_code, dict(result.headers) + + def _send_rpc_json_request( + self, + method: str, + path_query: str, + body: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + ) -> Tuple[Any, int, Dict[str, str]]: + data = {"method": method, "path_query": path_query} # type: Dict[str, Any] + + if method == "POST": + data["body"] = body + + if headers is not None and headers: + data["headers"] = headers - # Because when we download a file there is no JSON in the body - if path_query.find("/download") != -1: - return result, result.status_code, result.headers - return result.json(), result.status_code, result.headers + data_str = json.dumps(data, sort_keys=True) + result = json.loads(json_query(self.proxy_vm_name, data_str)) + return json.loads(result["body"]), result["status"], result["headers"] def authenticate(self, totp: Optional[str] = None) -> bool: """ From 14e6f8347d6bf042c42e051d1aff860242c636c0 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Tue, 7 May 2019 19:44:50 +0200 Subject: [PATCH 176/751] added timeouts to requests --- sdclientapi/__init__.py | 155 +++++++++++++++++++++++++++------- sdclientapi/sdlocalobjects.py | 2 +- 2 files changed, 127 insertions(+), 30 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 645229086..9cf34f24e 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -3,7 +3,8 @@ import os import requests from datetime import datetime -from subprocess import PIPE, Popen +from requests.exceptions import ConnectTimeout, ReadTimeout +from subprocess import PIPE, Popen, TimeoutExpired from typing import List, Tuple, Dict, Optional, Any from urllib.parse import urljoin @@ -18,9 +19,20 @@ ) DEFAULT_PROXY_VM_NAME = "sd-proxy" +DEFAULT_REQUEST_TIMEOUT = 20 # 20 seconds +DEFAULT_DOWNLOAD_TIMEOUT = 60 * 60 # 60 minutes -def json_query(proxy_vm_name: str, data: str) -> str: +class RequestTimeoutError(Exception): + """ + Error raisted if a request times out. + """ + + def __init__(self) -> None: + super().__init__("The request timed out.") + + +def json_query(proxy_vm_name: str, data: str, timeout: Optional[int] = None) -> str: """ Takes a json based query and passes to the network proxy. Returns the JSON output from the proxy. @@ -32,9 +44,18 @@ def json_query(proxy_vm_name: str, data: str) -> str: stderr=PIPE, ) p.stdin.write(data.encode("utf-8")) - stdout, _ = p.communicate() # type: (bytes, bytes) - output = stdout.decode("utf-8") - return output.strip() + + try: + stdout, _ = p.communicate(timeout=timeout) # type: (bytes, bytes) + except TimeoutExpired: + try: + p.terminate() + except Exception: + pass + raise RequestTimeoutError + else: + output = stdout.decode("utf-8") + return output.strip() class API: @@ -45,6 +66,9 @@ class API: :param username: Journalist username :param passphrase: Journalist passphrase :param totp: Current TOTP value + :param proxy: Whether the API class should use the RPC proxy + :param default_request_timeout: Default timeout for a request (non-download) in seconds + :param default_download_timeout: Default timeout for a request (download only) in seconds :returns: An object of API class. """ @@ -55,6 +79,8 @@ def __init__( passphrase: str, totp: str, proxy: bool = False, + default_request_timeout: Optional[int] = None, + default_download_timeout: Optional[int] = None, ) -> None: """ Primary API class, this is the only thing which will make network call. @@ -68,6 +94,12 @@ def __init__( self.token_journalist_uuid = None # type: Optional[str] self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool + self.default_request_timeout = ( + default_request_timeout or DEFAULT_REQUEST_TIMEOUT + ) + self.default_download_timeout = ( + default_download_timeout or DEFAULT_DOWNLOAD_TIMEOUT + ) self.proxy_vm_name = DEFAULT_PROXY_VM_NAME config = configparser.ConfigParser() @@ -84,13 +116,14 @@ def _send_json_request( path_query: str, body: Optional[str] = None, headers: Optional[Dict[str, str]] = None, + timeout: Optional[int] = None, ) -> Tuple[Any, int, Dict[str, str]]: if self.proxy: # We are using the Qubes securedrop-proxy func = self._send_rpc_json_request else: # We are not using the Qubes securedrop-proxy func = self._send_http_json_request - return func(method, path_query, body, headers) + return func(method, path_query, body, headers, timeout) def _send_http_json_request( self, @@ -98,14 +131,21 @@ def _send_http_json_request( path_query: str, body: Optional[str] = None, headers: Optional[Dict[str, str]] = None, + timeout: Optional[int] = None, ) -> Tuple[Any, int, Dict[str, str]]: url = urljoin(self.server, path_query) kwargs = {"headers": headers} # type: Dict[str, Any] + if timeout: + kwargs["timeout"] = timeout + if method == "POST": kwargs["data"] = body - result = requests.request(method, url, **kwargs) + try: + result = requests.request(method, url, **kwargs) + except (ConnectTimeout, ReadTimeout): + raise RequestTimeoutError # Because when we download a file there is no JSON in the body if path_query.endswith("/download"): @@ -119,6 +159,7 @@ def _send_rpc_json_request( path_query: str, body: Optional[str] = None, headers: Optional[Dict[str, str]] = None, + timeout: Optional[int] = None, ) -> Tuple[Any, int, Dict[str, str]]: data = {"method": method, "path_query": path_query} # type: Dict[str, Any] @@ -128,8 +169,8 @@ def _send_rpc_json_request( if headers is not None and headers: data["headers"] = headers - data_str = json.dumps(data, sort_keys=True) - result = json.loads(json_query(self.proxy_vm_name, data_str)) + data_str = json.dumps(data) + result = json.loads(json_query(self.proxy_vm_name, data_str, timeout)) return json.loads(result["body"]), result["status"], result["headers"] def authenticate(self, totp: Optional[str] = None) -> bool: @@ -153,10 +194,11 @@ def authenticate(self, totp: Optional[str] = None) -> bool: try: token_data, status_code, headers = self._send_json_request( - method, path_query, body=body + method, path_query, body=body, timeout=self.default_request_timeout ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") + if "expiration" not in token_data: raise AuthError("Authentication error") @@ -189,7 +231,10 @@ def get_sources(self) -> List[Source]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -218,7 +263,10 @@ def get_source(self, source: Source) -> Source: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -256,7 +304,10 @@ def delete_source(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -298,7 +349,10 @@ def add_star(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -321,7 +375,10 @@ def remove_star(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -345,7 +402,10 @@ def get_submissions(self, source: Source) -> List[Submission]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -380,7 +440,10 @@ def get_submission(self, submission: Submission) -> Submission: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -417,7 +480,10 @@ def get_all_submissions(self) -> List[Submission]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") @@ -451,7 +517,10 @@ def delete_submission(self, submission: Submission) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -481,7 +550,7 @@ def delete_submission_from_string(self, uuid: str, source_uuid: str) -> bool: return self.delete_submission(s) def download_submission( - self, submission: Submission, path: str = "" + self, submission: Submission, path: str = "", timeout: Optional[int] = None ) -> Tuple[str, str]: """ Returns a tuple of sha256sum and file path for a given Submission object. This method @@ -503,7 +572,10 @@ def download_submission( try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=timeout or self.default_download_timeout, ) if status_code == 404: @@ -546,7 +618,10 @@ def flag_source(self, source: Source) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -577,7 +652,10 @@ def get_current_user(self) -> Any: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) except json.decoder.JSONDecodeError: @@ -608,7 +686,11 @@ def reply_source( try: data, status_code, headers = self._send_json_request( - method, path_query, body=json.dumps(reply), headers=self.req_headers + method, + path_query, + body=json.dumps(reply), + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 400: @@ -637,7 +719,10 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -669,7 +754,10 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -696,7 +784,10 @@ def get_all_replies(self) -> List[Reply]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) except json.decoder.JSONDecodeError: @@ -734,7 +825,10 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -783,7 +877,10 @@ def delete_reply(self, reply: Reply) -> bool: try: data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index a3d79ceda..e689c00f1 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -1,7 +1,7 @@ import typing if typing.TYPE_CHECKING: - from typing import Dict + from typing import Dict # noqa: F401 class BaseError(Exception): From 60a51f919d6b1426dc096c8b4933005c08f14f81 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 13 May 2019 12:40:35 +0200 Subject: [PATCH 177/751] added pytest-mock to dependencies --- Pipfile | 1 + Pipfile.lock | 385 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 233 insertions(+), 153 deletions(-) diff --git a/Pipfile b/Pipfile index 672087bb9..546e16438 100644 --- a/Pipfile +++ b/Pipfile @@ -20,3 +20,4 @@ pytest-cov = "*" sphinx = "*" vcrpy = "*" pyyaml = ">=5.1,<6" +pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 69e925ab2..00b10cdde 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "438b38b762b42f6b272a27811c4e01d9ad2a3ccbca8c1d93103efd636cb21ce9" + "sha256": "4cdc00b2f615bf3233d0d02e4878b495cbb43f978c72dded0d3c37246c1a9218" }, "pipfile-spec": 6, "requires": { @@ -18,10 +18,10 @@ "default": { "certifi": { "hashes": [ - "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", - "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" + "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", + "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" ], - "version": "==2018.11.29" + "version": "==2019.3.9" }, "chardet": { "hashes": [ @@ -32,26 +32,26 @@ }, "idna": { "hashes": [ - "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", - "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" ], - "version": "==2.7" + "version": "==2.8" }, "requests": { "hashes": [ - "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", - "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" ], "index": "pypi", - "version": "==2.20.0" + "version": "==2.21.0" }, "urllib3": { "hashes": [ - "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", - "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" + "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", + "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" ], "index": "pypi", - "version": "==1.24" + "version": "==1.24.3" } }, "develop": { @@ -64,17 +64,17 @@ }, "atomicwrites": { "hashes": [ - "sha256:0312ad34fcad8fac3704d441f7b317e50af620823353ec657a53e981f92920c0", - "sha256:ec9ae8adaae229e4f8446952d204a3e4b5fdd2d099f9be3aaf556120135fb3ee" + "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", + "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" ], - "version": "==1.2.1" + "version": "==1.3.0" }, "attrs": { "hashes": [ - "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69", - "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb" + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" ], - "version": "==18.2.0" + "version": "==19.1.0" }, "babel": { "hashes": [ @@ -85,10 +85,10 @@ }, "certifi": { "hashes": [ - "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", - "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" + "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", + "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" ], - "version": "==2018.11.29" + "version": "==2019.3.9" }, "chardet": { "hashes": [ @@ -99,42 +99,40 @@ }, "coverage": { "hashes": [ - "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", - "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", - "sha256:0bf8cbbd71adfff0ef1f3a1531e6402d13b7b01ac50a79c97ca15f030dba6306", - "sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95", - "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", - "sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd", - "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", - "sha256:2a5b73210bad5279ddb558d9a2bfedc7f4bf6ad7f3c988641d83c40293deaec1", - "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", - "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", - "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", - "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", - "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", - "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", - "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", - "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", - "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", - "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", - "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", - "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", - "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", - "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", - "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", - "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", - "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", - "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", - "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", - "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", - "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", - "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", - "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", - "sha256:f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e", - "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80" + "sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9", + "sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74", + "sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390", + "sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8", + "sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe", + "sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf", + "sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e", + "sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741", + "sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09", + "sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd", + "sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034", + "sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420", + "sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c", + "sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab", + "sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba", + "sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e", + "sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609", + "sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2", + "sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49", + "sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b", + "sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d", + "sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce", + "sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9", + "sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4", + "sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773", + "sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723", + "sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c", + "sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f", + "sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1", + "sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260", + "sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a" ], "index": "pypi", - "version": "==4.5.1" + "version": "==4.5.3" }, "docutils": { "hashes": [ @@ -153,18 +151,18 @@ }, "flake8": { "hashes": [ - "sha256:545c8faa8425cafcd9800538b4fa324a543cdec0ac273cf698ddd6a954123401", - "sha256:e9ca1bb84d76511315e565a2cdd292d916b08b0d639aa3e323d8c7d895a03897" + "sha256:859996073f341f2670741b51ec1e67a01da142831aa1fdc6242dbf88dffbe661", + "sha256:a796a115208f5c03b18f332f7c11729812c8c3ded6c46319c59b53efd3819da8" ], "index": "pypi", - "version": "==3.7.1" + "version": "==3.7.7" }, "idna": { "hashes": [ - "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", - "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" ], - "version": "==2.7" + "version": "==2.8" }, "imagesize": { "hashes": [ @@ -175,17 +173,43 @@ }, "jinja2": { "hashes": [ - "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", - "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" + "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", + "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" ], - "version": "==2.10" + "version": "==2.10.1" }, "markupsafe": { "hashes": [ - "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" - ], - "index": "pypi", - "version": "==1.0" + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" + ], + "version": "==1.1.1" }, "mccabe": { "hashes": [ @@ -196,11 +220,11 @@ }, "more-itertools": { "hashes": [ - "sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4", - "sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc", - "sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9" + "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", + "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" ], - "version": "==5.0.0" + "markers": "python_version > '2.7'", + "version": "==7.0.0" }, "multidict": { "hashes": [ @@ -238,11 +262,20 @@ }, "mypy": { "hashes": [ - "sha256:8e071ec32cc226e948a34bbb3d196eb0fd96f3ac69b6843a5aff9bd4efa14455", - "sha256:fb90c804b84cfd8133d3ddfbd630252694d11ccc1eb0166a1b2efb5da37ecab2" + "sha256:2afe51527b1f6cdc4a5f34fc90473109b22bf7f21086ba3e9451857cf11489e6", + "sha256:56a16df3e0abb145d8accd5dbb70eba6c4bd26e2f89042b491faa78c9635d1e2", + "sha256:5764f10d27b2e93c84f70af5778941b8f4aa1379b2430f85c827e0f5464e8714", + "sha256:5bbc86374f04a3aa817622f98e40375ccb28c4836f36b66706cf3c6ccce86eda", + "sha256:6a9343089f6377e71e20ca734cd8e7ac25d36478a9df580efabfe9059819bf82", + "sha256:6c9851bc4a23dc1d854d3f5dfd5f20a016f8da86bcdbb42687879bb5f86434b0", + "sha256:b8e85956af3fcf043d6f87c91cbe8705073fc67029ba6e22d3468bfee42c4823", + "sha256:b9a0af8fae490306bc112229000aa0c2ccc837b49d29a5c42e088c132a2334dd", + "sha256:bbf643528e2a55df2c1587008d6e3bda5c0445f1240dfa85129af22ae16d7a9a", + "sha256:c46ab3438bd21511db0f2c612d89d8344154c0c9494afc7fbc932de514cf8d15", + "sha256:f7a83d6bd805855ef83ec605eb01ab4fa42bcef254b13631e451cbb44914a9b0" ], "index": "pypi", - "version": "==0.641" + "version": "==0.701" }, "mypy-extensions": { "hashes": [ @@ -268,17 +301,17 @@ }, "pluggy": { "hashes": [ - "sha256:8ddc32f03971bfdf900a81961a48ccf2fb677cf7715108f85295c67405798616", - "sha256:980710797ff6a041e9a73a5787804f848996ecaa6f8a1b1e08224a5894f2074a" + "sha256:25a1bc1d148c9a640211872b4ff859878d422bccb59c9965e04eed468a0aa180", + "sha256:964cedd2b27c492fbf0b7f58b3284a09cf7f99b0f715941fb24a439b3af1bd1a" ], - "version": "==0.8.1" + "version": "==0.11.0" }, "py": { "hashes": [ - "sha256:bf92637198836372b520efcba9e020c330123be8ce527e535d185ed4b6f45694", - "sha256:e76826342cefe3c3d5f7e8ee4316b80d1dd8a300781612ddbc765c17ba25a6c6" + "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", + "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" ], - "version": "==1.7.0" + "version": "==1.8.0" }, "pycodestyle": { "hashes": [ @@ -289,57 +322,63 @@ }, "pyflakes": { "hashes": [ - "sha256:5e8c00e30c464c99e0b501dc160b13a14af7f27d4dffb529c556e30a159e231d", - "sha256:f277f9ca3e55de669fba45b7393a1449009cff5a37d1af10ebb76c52765269cd" + "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", + "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" ], - "version": "==2.1.0" + "version": "==2.1.1" }, "pygments": { "hashes": [ - "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", - "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d" + "sha256:31cba6ffb739f099a85e243eff8cb717089fdd3c7300767d9fc34cb8e1b065f5", + "sha256:5ad302949b3c98dd73f8d9fcdc7e9cb592f120e32a18e23efd7f3dc51194472b" ], - "version": "==2.3.1" + "version": "==2.4.0" }, "pyotp": { "hashes": [ - "sha256:8f0df1fcf9e86cec41f0a31c91212b1a04fca6dd353426917222b21864b9310b", - "sha256:dd9130dd91a0340d89a0f06f887dbd76dd07fb95a8886dc4bc401239f2eebd69" + "sha256:1e3dc3d16919c4efac528d1dbecc17de1a97c4ecfdacb89d7726ed2c6645adff", + "sha256:be0ffeabddaa5ee53e7204e7740da842d070cf69168247a3d0c08541b84de602" ], "index": "pypi", - "version": "==2.2.6" + "version": "==2.2.7" }, "pyparsing": { "hashes": [ - "sha256:bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a", - "sha256:d29593d8ebe7b57d6967b62494f8c72b03ac0262b1eed63826c6f788b3606401" + "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", + "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" ], - "index": "pypi", - "version": "==2.2.2" + "version": "==2.4.0" }, "pytest": { "hashes": [ - "sha256:10e59f84267370ab20cec9305bafe7505ba4d6b93ecbf66a1cce86193ed511d5", - "sha256:8c827e7d4816dfe13e9329c8226aef8e6e75d65b939bc74fda894143b6d1df59" + "sha256:1a8aa4fa958f8f451ac5441f3ac130d9fc86ea38780dd2715e6d5c5882700b24", + "sha256:b8bf138592384bd4e87338cb0f256bf5f615398a649d4bd83915f0e4047a5ca6" ], "index": "pypi", - "version": "==3.9.1" + "version": "==4.5.0" }, "pytest-cov": { "hashes": [ - "sha256:513c425e931a0344944f84ea47f3956be0e416d95acbd897a44970c8d926d5d7", - "sha256:e360f048b7dae3f2f2a9a4d067b2dd6b6a015d384d1577c994a43f3f7cbad762" + "sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6", + "sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a" ], "index": "pypi", - "version": "==2.6.0" + "version": "==2.7.1" }, - "pytz": { + "pytest-mock": { "hashes": [ - "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053", - "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277" + "sha256:43ce4e9dd5074993e7c021bb1c22cbb5363e612a2b5a76bc6d956775b10758b7", + "sha256:5bf5771b1db93beac965a7347dc81c675ec4090cb841e49d9d34637a25c30568" ], "index": "pypi", - "version": "==2018.5" + "version": "==1.10.4" + }, + "pytz": { + "hashes": [ + "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", + "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" + ], + "version": "==2019.1" }, "pyyaml": { "hashes": [ @@ -360,11 +399,11 @@ }, "requests": { "hashes": [ - "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", - "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" ], "index": "pypi", - "version": "==2.20.0" + "version": "==2.21.0" }, "six": { "hashes": [ @@ -382,52 +421,85 @@ }, "sphinx": { "hashes": [ - "sha256:652eb8c566f18823a022bb4b6dbc868d366df332a11a0226b5bc3a798a479f17", - "sha256:d222626d8356de702431e813a05c68a35967e3d66c6cd1c2c89539bb179a7464" + "sha256:423280646fb37944dd3c85c58fb92a20d745793a9f6c511f59da82fa97cd404b", + "sha256:de930f42600a4fef993587633984cc5027dedba2464bcf00ddace26b40f8d9ce" ], "index": "pypi", - "version": "==1.8.1" + "version": "==2.0.1" }, - "sphinxcontrib-websupport": { + "sphinxcontrib-applehelp": { "hashes": [ - "sha256:68ca7ff70785cbe1e7bccc71a48b5b6d965d79ca50629606c7861a21b206d9dd", - "sha256:9de47f375baf1ea07cdb3436ff39d7a9c76042c10a769c52353ec46e4e8fc3b9" + "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", + "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" ], - "version": "==1.1.0" + "version": "==1.0.1" + }, + "sphinxcontrib-devhelp": { + "hashes": [ + "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", + "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-htmlhelp": { + "hashes": [ + "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", + "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-jsmath": { + "hashes": [ + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-qthelp": { + "hashes": [ + "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", + "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-serializinghtml": { + "hashes": [ + "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", + "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" + ], + "version": "==1.1.3" }, "typed-ast": { "hashes": [ - "sha256:0cf0c406af2a6472a02254fe1ced40cb81a7c1215b7ceba88a3bb9c3a864f851", - "sha256:1b784cd3c6778cd7b99afb41ddcaa1eb5b35a399210db7fcf24ed082670e0070", - "sha256:2d7a322c1df6cccff2381c0475c1ebf82d3e9a331e48ed4ea89bbc72a8dedca6", - "sha256:4304399ff89452871348f6fb7a7112454cd508fbe3eb49b5ed711cce9b99fe9e", - "sha256:4658aebc30c0af80e63b579e917c04b592bdf10ef40da381b2fd179075b5d1b6", - "sha256:471a7f12e55ad22f7a4bb2c3e62e39e3ab78008b24c61c48c9042e63b7359bb9", - "sha256:57cb23412dac214383c6b6f0f7b0aec2d0c001a936af20f0b53542bbe4ba08a7", - "sha256:5eb14e6b3aa5ff5d7e964b978a718227b5576b3965f1dd71dd055f71054233a5", - "sha256:8219b6147af4d609096b6db2c797281e19fd3f7232ef35932bc74a812ff417a0", - "sha256:8a7e9635cf0aaca04b2a4d4b3501c0dbc5c49a140b2e55b00e218d41ed2a69c8", - "sha256:935157ada4aa115d61c59e759e43c5862b04d19ffe6fe5c9d735716587535cb7", - "sha256:9525f4cbe3eb7b9e19a87c765ca9bbc1147ce18f75059e15138eb7fc59ce02e3", - "sha256:99c140583eef6b50f3de4af44718a4fc63108671b29c468b5ff83ed383facf6d", - "sha256:9e358ce6d4c43a90c15b99b76261adc852998680628c780f26fd64bc21adb9fa", - "sha256:aaf63a024b54d2788cff3400de79009ee8a23594b581d4f33d90b7c67f8c05bd", - "sha256:c3313b3fa1b6b722866eda370c14fd8f4962b6bcd1f6d43f42d6818a8b29d998", - "sha256:c9342947e5f3480473d836754d69965a12ac2237d99ae85d1e3fdd1c1722669f", - "sha256:cb1c7e5b3195103f5a784db7969fc55463cfae9b354e3b97cc219d32293d5e65", - "sha256:d2d2cce74165cae2663167c921e331fb0eecfff2e93254dfdb16beb99716e519", - "sha256:d6fc3b9fbf67d556223aa5493501022e1d585b9a1892fa87ba1257627763c461", - "sha256:fa4eafaa57074958f065c2a6222d8f11162739f8c9db125472a1f04794a0b91d" - ], - "version": "==1.1.2" + "sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b", + "sha256:18141c1484ab8784006c839be8b985cfc82a2e9725837b0ecfa0203f71c4e39d", + "sha256:2baf617f5bbbfe73fd8846463f5aeafc912b5ee247f410700245d68525ec584a", + "sha256:3d90063f2cbbe39177e9b4d888e45777012652d6110156845b828908c51ae462", + "sha256:4304b2218b842d610aa1a1d87e1dc9559597969acc62ce717ee4dfeaa44d7eee", + "sha256:4983ede548ffc3541bae49a82675996497348e55bafd1554dc4e4a5d6eda541a", + "sha256:5315f4509c1476718a4825f45a203b82d7fdf2a6f5f0c8f166435975b1c9f7d4", + "sha256:6cdfb1b49d5345f7c2b90d638822d16ba62dc82f7616e9b4caa10b72f3f16649", + "sha256:7b325f12635598c604690efd7a0197d0b94b7d7778498e76e0710cd582fd1c7a", + "sha256:8d3b0e3b8626615826f9a626548057c5275a9733512b137984a68ba1598d3d2f", + "sha256:8f8631160c79f53081bd23446525db0bc4c5616f78d04021e6e434b286493fd7", + "sha256:912de10965f3dc89da23936f1cc4ed60764f712e5fa603a09dd904f88c996760", + "sha256:b010c07b975fe853c65d7bbe9d4ac62f1c69086750a574f6292597763781ba18", + "sha256:c908c10505904c48081a5415a1e295d8403e353e0c14c42b6d67f8f97fae6616", + "sha256:c94dd3807c0c0610f7c76f078119f4ea48235a953512752b9175f9f98f5ae2bd", + "sha256:ce65dee7594a84c466e79d7fb7d3303e7295d16a83c22c7c4037071b059e2c21", + "sha256:eaa9cfcb221a8a4c2889be6f93da141ac777eb8819f077e1d09fb12d00a09a93", + "sha256:f3376bc31bad66d46d44b4e6522c5c21976bf9bca4ef5987bb2bf727f4506cbb", + "sha256:f9202fa138544e13a4ec1a6792c35834250a85958fde1251b6a22e07d1260ae7" + ], + "version": "==1.3.5" }, "urllib3": { "hashes": [ - "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", - "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" + "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", + "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" ], "index": "pypi", - "version": "==1.24" + "version": "==1.24.3" }, "vcrpy": { "hashes": [ @@ -437,6 +509,13 @@ "index": "pypi", "version": "==2.0.1" }, + "wcwidth": { + "hashes": [ + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + ], + "version": "==0.1.7" + }, "wrapt": { "hashes": [ "sha256:4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533" @@ -445,20 +524,20 @@ }, "yarl": { "hashes": [ - "sha256:ee506bc321b455b4a410724ec9c0ad4940932553523c6e7b69f0155269793734", - "sha256:4c2d780cb0b669bf027da57a0834d4968ed55c89f1593cfd11be8108bff699e2", - "sha256:8765ebd034d0dc812a311b31251dffb434c753fc7124487912a5bca7baeb5c9b", - "sha256:3278209d78d534d59ee44f595e54ee4d3a164fa77319ffbd418b1978edf71748", - "sha256:32a52453fc20153e34d2cf99f1a2f4c3d144e320896f1f89b5ee89bb41e877be", - "sha256:48f3807855b69414a41e70908e502d6dbf563e3eca22f73d1344aad9270a4ff9", - "sha256:a2dda88459cfe50f4f6a225d2f51e3fffb0c3c18f4c3a3ac38d9dc054f8c37b0", - "sha256:ac574aa2c45185e038489ff8f3bebd9269dd8327e86c72d9a7f83a1d3ad9eec4", - "sha256:ce5963f2451661a435721d8907a824daea52aad6e3bee9b4104e75d19269cdae", - "sha256:cec06d4272c2ced65308daf63360daeea5061c030fe28f75e499afd735cee860", - "sha256:fbbb10276d53629c0300cfd4a2092e3bbfa9a5aa95cd49808e01c59492052077" + "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9", + "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f", + "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb", + "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320", + "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842", + "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0", + "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829", + "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310", + "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4", + "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8", + "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1" ], "markers": "python_version >= '3.4'", - "version": "==1.2.0" + "version": "==1.3.0" } } } From 51e931d30cbb45568a7e010d0d2bcb7de9703658 Mon Sep 17 00:00:00 2001 From: heartsucker Date: Mon, 13 May 2019 12:57:43 +0200 Subject: [PATCH 178/751] added tests for api/proxy timeouts --- tests/test_api.py | 18 +++++++++++++++++- tests/test_apiproxy.py | 20 +++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index 33fb2fc79..9ebf8244d 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,5 +1,6 @@ import datetime import os +import pytest import shutil import tempfile import time @@ -7,10 +8,11 @@ import pyotp import vcr +from requests.exceptions import ConnectTimeout, ReadTimeout from utils import load_auth from utils import save_auth -from sdclientapi import API +from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import AuthError from sdclientapi.sdlocalobjects import BaseError from sdclientapi.sdlocalobjects import Reply @@ -318,3 +320,17 @@ def test_delete_reply(self): # We deleted one, so there must be 1 less reply now self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + + +def test_request_connect_timeout(mocker): + api = API("mock", "mock", "mock", "mock", proxy=False) + mocker.patch("sdclientapi.requests.request", side_effect=ConnectTimeout) + with pytest.raises(RequestTimeoutError): + api.authenticate() + + +def test_request_read_timeout(mocker): + api = API("mock", "mock", "mock", "mock", proxy=False) + mocker.patch("sdclientapi.requests.request", side_effect=ReadTimeout) + with pytest.raises(RequestTimeoutError): + api.authenticate() diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index d014d0905..8fe3a5ad8 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,12 +1,15 @@ import datetime import os import pyotp +import pytest import time import shutil import tempfile import unittest -from sdclientapi import API +from subprocess import TimeoutExpired + +from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import ( BaseError, WrongUUIDError, @@ -304,3 +307,18 @@ def test_delete_reply(self): # We deleted one, so there must be 1 less reply now self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + + +def test_request_timeout(mocker): + class MockedPopen: + def __init__(self, *nargs, **kwargs) -> None: + self.stdin = mocker.MagicMock() + + def communicate(self, *nargs, **kwargs) -> None: + raise TimeoutExpired(["mock"], 123) + + api = API("mock", "mock", "mock", "mock", proxy=True) + mocker.patch("sdclientapi.Popen", MockedPopen) + + with pytest.raises(RequestTimeoutError): + api.authenticate() From 7222223db8eab449a3becc0afd352113101f4d4f Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 13 May 2019 13:48:37 -0700 Subject: [PATCH 179/751] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a98efd279..7ca0395b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +0.0.9 +----- + +* Create a timeout exception to catch all possible timeouts from `requests` / Qubes RPC +* Remove mutable global state for the proxy VM name + 0.0.8 ----- From 24d3d4348f210e86276ecdf52049bf6af95ad3c7 Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 13 May 2019 14:10:06 -0700 Subject: [PATCH 180/751] Update setup.py --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 209ef2c44..e4c933715 100644 --- a/setup.py +++ b/setup.py @@ -5,9 +5,9 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.8", - author="Kushal Das", - author_email="kushal@freedom.press", + version="0.0.9", + author="Freedom of the Press Foundation", + author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", long_description=long_description, long_description_content_type="text/markdown", From ab54d86762cf2d21c577b869a347a3d4cd7c85a1 Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 13 May 2019 14:15:29 -0700 Subject: [PATCH 181/751] Create CONTRIBUTING.md --- CONTRIBUTING.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..63a45e294 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,10 @@ +## How to Contribute to SecureDrop + +See the [introduction for contributors](https://docs.securedrop.org/en/latest/development/contributing.html) and [Contributing Guidelines](https://docs.securedrop.org/en/latest/development/contributor_guidelines.html). + +Check out our [Development Roadmap](https://github.com/freedomofpress/securedrop/wiki/Development-Roadmap) to see our plans and priorities for upcoming releases. + +For translators, see the [Translator Guide](https://docs.securedrop.org/en/stable/development/l10n.html) to learn how to get started with SecureDrop translations +in our [translation portal](https://weblate.securedrop.org/). + +We also have a public [Gitter channel](https://gitter.im/freedomofpress/securedrop) and a [public Discourse forum](https://forum.securedrop.org/) where you can discuss SecureDrop and ask questions. From be45c03f9f31894370d914a6c65adc8055846288 Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 13 May 2019 14:17:16 -0700 Subject: [PATCH 182/751] Rename CONTRIBUTING.md to CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 196 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..901b605a2 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,196 @@ +# SecureDrop Community Code of Conduct + +## Preamble + +Like the broader technical and activism communities as a whole, the SecureDrop +community is made up of a mixture of staff and volunteers from all over the world, +engaged in various activities—including operations, software +development, mentorship, and building connections with great people and +organizations. + +To work together effectively in a large, diverse and open community, we have a +few ground rules that we expect everyone to adhere to, be it paid staff and +board members, volunteers and event attendees; mentors, veterans, novices, or +those seeking help and guidance. + +This isn't an exhaustive list of things that you cannot do. Rather, take it in +the spirit in which it’s intended: a guide to make it easier to enrich all of +us and the communities in which we participate. + +This code of conduct applies to all spaces and events under the responsibility of someone who belongs to the +SecureDrop Community. This includes physical offices, GitHub repositories, online chat +systems, the Support Forum, SecureDrop hosted or sponsored events, and any other +forums created by the SecureDrop Community which are used for communication. +In addition, we take violations of this code outside these spaces into account +when determining a person's ability to participate within them. + +## Summary + +The SecureDrop Community should be a place where people feel safe and welcome. +They should enjoy participating in discussions and contributing. To these ends, +members of the community should: + +- Be friendly and patient +- Assume good faith and good intentions +- Be welcoming, considerate, and respectful +- Be careful in the words they choose +- Listen to each other, and communicate openly and honestly + +Members of the community should not: + +- Intimidate, harass, or insult each other +- Follow the letter of this Code of Conduct while disregarding its spirit + +Members of the community should not hesitate to contact the Community Moderation +and Safety Team ("Community Team") if they feel someone has violated this Code of +Conduct, or if they have questions or concerns. + +## Behavioral Guidelines + +As a member of the community, you are expected to: + +- Be friendly and patient. Your work will be used by other people, and you in + turn will depend on the work of others. Any decision you take will affect + human beings, and you should take those consequences into account when making + decisions. Remember that our community is international, and that the people + you interact with may be communicating with you in a language that is not + their native tongue. + +- Assume good faith and good intentions. Disagreements — both social and + technical — happen all the time. Our diverse backgrounds give us the ability + to see things from many different perspectives, but they can also lead to + misunderstandings. It is important that we resolve disagreements + constructively, and that we do not jump to conclusions about each other's + motives. + +- Be welcoming, considerate, and respectful. We strive to be a community that + welcomes and supports people of all backgrounds and identities. This includes, + but is not limited to, members of any race, ethnicity, culture, national + origin, color, immigration status, social and economic class, educational + level, sex, sexual orientation, gender identity and expression, age, size, + family status, political belief, religion and mental and physical ability. + +- Be careful in the words you choose. Exclusionary behavior is absolutely + unacceptable. This includes, but is not limited to: + + - Discriminatory (e.g., racist or sexist) jokes and language + - Inappropriate names for user accounts, servers, files, repositories, etc. + - Posting sexually explicit or violent material + - Personal insults + - Misgendering or deadnaming + - Unwelcome sexual attention + - Advocating for, or encouraging, any of the above behavior + +- Listen and communicate openly and honestly. Yield the floor to + others, and help to make sure that everyone gets heard. In other words, try to + be your best self. In doing so, you contribute the health and longevity of + this community. + +As a member of the SecureDrop Community, you are expected to never engage in the +following behaviors: + +- Intimidation, harassments, or insults. This includes but is not limited to: + - Physical intimidation or threats against someone's physical safety + - Obscene or intimidating gestures + - Stalking + - Demeaning another person + - Unwelcome following + - Enlisting the help of others, whether in person or online, in order to + target an individual + - Taking photographs, video, or audio recordings or recordings without consent + - Shouting + - Sustained disruption of talks and events + - Disruption of meetings + - Inappropriate physical contact + - Unwelcome sexual attention + - Posting (or threatening to post) other people's personally identifying + information ("doxing") + - Respect people's stated personal boundaries + +- Following the letter of this Code of Conduct while disregarding its spirit. + When judging whether certain behavior represents a violation of this code, we + will consider a violation in spirit (e.g., clearly behaving in a damaging or + obnoxious manner in a way not explicitly specified) to be no different from + any other violation of this code. That includes trolling and other forms of + consistently disruptive behavior. + +## Enforcement + +We do not tolerate unacceptable behavior from any community member, and there +are no exceptions for those in positions of power such as maintainers, +sponsors, funders, or other individuals with decision making authority. +Further, people in positions of power can wield it to exacerbate the effects of +harassment and to diminish the repercussions. For these reasons, those who are +informal or formal leaders are held to a higher standard. + +Anyone asked by another community member to stop unacceptable behavior is +expected to comply immediately. However, you should not step in on someone +else's behalf without their consent. + +### How to get help + +The Community Team is made up established members of the community who +assist with resolving conflicts within the community. + +Currently the Community Team consists of: + +- Jen Helsby (`@redshiftzero`) - Lead Engineer - [jen@freedom.press](mailto:jen@freedom.press) + +You should contact the Community Team if you have questions or concerns about +the Code of Conduct (including improvements) or if you feel that you have +witnessed a Code of Conduct violation. In the even of a violation either +directed at yourself or someone else, please contact the Community Team as +soon as possible through whatever analog or digital medium you are most +comfortable with. + +Should your report be about any member of the Community Team or if there is a +conflict of interest, that member will recuse themselves from the conflict +resolution proceedings. They will not be involved with the discussion, +documentation, communications, or decisions made by the rest of the Community +Team with regards to the incident. + +## What the person reporting a violation can expect + +The Community Team will respond to reports as quickly as possible. When +responding to a report, the Community Team will prioritize the safety of the +person(s) who have been harmed or are at risk of harm and the reporter(s). No +actions will be taken without the consent of the person who has been harmed or +is at risk of harm except in cases where danger or harm are imminent. + +All reports to the Community Team, no matter how minor or severe, will be +taken seriously and looked into. + +## How the Community Team responds to incidents + +The Community Team does not have a fixed of set responses to some enumerated +set of incidents that may occur. The Community Team operates on a +case-by-case basis taking into account past behavior; the relationship between +the person(s) who were harmed and the person(s) causing the harm; the responses +of the person(s) who caused harm; and the perceived threat of future harm. + +Actions the Community Team may take to mitigate harm include, but are not +limited to: + +- A simple warning +- Informal mediation +- A temporary ban from email lists, chat channels, repositories, or other online + communication mediums +- A temporary ban from events or community spaces +- Permanent expulsion from the community + +Once the Community Team has reached a decision on how to mitigate the harm or +risk of harm, the person(s) on the receiving end of the mitigation(s) may appeal +the decision by writing or otherwise communicating with the Community Team. + +## License and Attribution + +Parts of this code of conduct are derived from or inspired by: + +- The Citizen Code of Conduct +- The Django Code of Conduct +- The Tor Project Code of Conduct +- The OpenStack Foundation Community Code of Conduct +- The Freedom of the Press Foundation Code of Conduct + +This Code of Conduct is shared under a Creative Commons CC-BY-SA 4.0 International +license. From 4b1345ae32180e411777d9a70c38dc8043337196 Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 13 May 2019 15:06:00 -0700 Subject: [PATCH 183/751] Update README.md --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 67ba6bbdc..d15212579 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,30 @@ make test More complete documentation can be found in the [`docs`](./docs) directory. +## Deployment +### Pre-release +1. Create a branch named "release-[VERSION]" +2. Update `CHANGELOG.md` and `setup.py` +3. Open a PR against the `master` branch +4. Create and push the new tag +5. Checkout the new tag before moving on to step #6 +6. Build wheels and create the tarball package + + Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions + +7. Push the package up to our PyPi mirror: https://pypi.org/simple + +### Release +Follow instructions in [securedrop-debian-packaging](https://github.com/freedomofpress/securedrop-debian-packaging). This is where you'll rebuild the wheels in a secure environment, verify hashes, make the debian package, update the debian package changelog to point to the changelog that you edited during the **Pre-release** step, and then push the wheels out to the test apt server. Once QA is finished, you'll push the wheels to the production apt server. + +## Contributing + +Please read [CONTRIBUTING.md](https://github.com/freedomofpress/secureddrop-sdk/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. + +## Versioning + +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/freedomofpress/secureddrop-sdk/tags). + ## License The Python SecureDrop SDK is licensed in the GPLv3. See [`LICENSE`](./LICENSE) for more details. From 37e24385069900a03f19c0fad2dcac25f602c667 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 13 May 2019 15:48:51 -0700 Subject: [PATCH 184/751] docs: Centralize docs for discoverability, get rid of docs/ dir --- README.md | 115 ++++++++++++++++++++++++++----- docs/Makefile | 20 ------ docs/conf.py | 161 ------------------------------------------- docs/development.rst | 113 ------------------------------ docs/index.rst | 31 --------- 5 files changed, 97 insertions(+), 343 deletions(-) delete mode 100644 docs/Makefile delete mode 100644 docs/conf.py delete mode 100644 docs/development.rst delete mode 100644 docs/index.rst diff --git a/README.md b/README.md index d15212579..8b0f4723a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ The SDK is currently used by the [SecureDrop Client](https://github.com/freedomo **IMPORTANT:** This project is still under active development. We do not recommend using it in any production context. -## Developer Quick Start +# Development + +## Quick Start ```bash pip install -U pipenv @@ -17,32 +19,109 @@ pipenv shell make test ``` -More complete documentation can be found in the [`docs`](./docs) directory. +This project uses `pipenv `_ to manage all dependencies. +This is a Python 3 project. When using ``pipenv`` locally, ensure you used the ``--keep-outdated`` +flag to prevent dependencies from being unnecessarily upgraded during normal development. -## Deployment -### Pre-release -1. Create a branch named "release-[VERSION]" -2. Update `CHANGELOG.md` and `setup.py` -3. Open a PR against the `master` branch -4. Create and push the new tag -5. Checkout the new tag before moving on to step #6 -6. Build wheels and create the tarball package +We cover all the API calls supported by the SecureDrop Journalist Interface API. + +## Testing + +The tests are located in the `tests` directory. This project uses [vcrpy] +(http://vcrpy.readthedocs.io/en/latest/) to record and then reply the API calls so that +developers will have repeatable results so that they may work offline. `vcrpy` stores YAML +recordings of the API calls in the `data` directory. + +To run all the test cases, use the following command. + +```bash +make test +``` + +To run a single test, use this following command, replace the test case name at the end. + +```bash +make test TESTS=tests/test_api.py::TestAPI::test_error_unencrypted_reply +``` + +To test against a live development server, you will need to run the SecureDrop +developent container from the main SecureDrop repository on your host. This +can be done via `NUM_SOURCES=5 make -C securedrop dev`. + +In this repo, comment out the `@vcr` decorator of the `setUp` method in +`test_api.py` and execute which ever tests you want to run. If you want to +re-run all tests against the API, remove all the `.yml` files in the +`data` directory. + +## Generating test data for `APIProxy` + +To test or to generate new test data file for the `APIProxy` class in +`test_apiproxy.py` file, you will have to setup +`QubesOS `_ system. + +There should be one VM (let us call it `sd-journalist`), where we can run +latest securedrop server code from the development branch using +``NUM_SOURCES=5 make -C securedrop dev`` command. The same VM should also have +`securedrop-proxy` project installed, either from the source by hand or using +the latest Debian package from the FPF repository. - Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions +Below is an example configuration for proxy `/etc/sd-proxy.yaml`: -7. Push the package up to our PyPi mirror: https://pypi.org/simple +``` +host: 127.0.0.1 +scheme: http +port: 8081 +target_vm: sd-svs +dev: False +``` + +Then we can create our second developent VM called `sd-svs`, in which we can checkout/develop +the `securedrop-sdk` project. The required configuration file is at `/etc/sd-sdk.conf` + +``` +[proxy] +name=sd-journalist +``` + +We should also add a corresponding entry in `/etc/qubes-rpc/policy/securedrop.Proxy` file +in **dom0**. + +``` +sd-svs sd-journalist allow +$anyvm $anyvm deny +``` + +The above mentioned setup can also be created using `securedrop-workstation` project. + +Now, delete any related JSON file under `data/` directory, or remove all of +them, and then execute ``make test TEST=tests/test_apiproxy.py``. This is +command will generate the new data files, which can be used in CI or any other +system. + +**Note:** Remember that file download checks don't read actual file path in the `APIProxy` tests as it requires QubesOS setup. You can manually uncomment those lines to execute them on QubesOS setup. + +# Releasing + +To make a release, you should: + +1. Create a branch named "release-[VERSION]" +2. Update `CHANGELOG.md` and `setup.py` +3. Commit the changes. +4. Create a PR and get the PR reviewed and merged into ``master``. +5. ``git tag`` and push the new tag. +6. Checkout the new tag locally. +7. Push the new release source tarball to the PSF's PyPI `following this documentation `_. -### Release -Follow instructions in [securedrop-debian-packaging](https://github.com/freedomofpress/securedrop-debian-packaging). This is where you'll rebuild the wheels in a secure environment, verify hashes, make the debian package, update the debian package changelog to point to the changelog that you edited during the **Pre-release** step, and then push the wheels out to the test apt server. Once QA is finished, you'll push the wheels to the production apt server. +8. If you want to publish the new SDK release to the FPF PyPI mirror, Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions to push the package up to our PyPI mirror: https://pypi.org/simple -## Contributing +# Contributing -Please read [CONTRIBUTING.md](https://github.com/freedomofpress/secureddrop-sdk/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. +Please read [CONTRIBUTING.md](https://github.com/freedomofpress/securedrop-sdk/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. -## Versioning +# Versioning We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/freedomofpress/secureddrop-sdk/tags). -## License +# License The Python SecureDrop SDK is licensed in the GPLv3. See [`LICENSE`](./LICENSE) for more details. diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index cfbea1b81..000000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = sdconfigapi -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index cf74f7412..000000000 --- a/docs/conf.py +++ /dev/null @@ -1,161 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Configuration file for the Sphinx documentation builder. -# -# This file does only contain a selection of the most common options. For a -# full list see the documentation: -# http://www.sphinx-doc.org/en/master/config - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -project = "sdconfigapi" -copyright = "2018, Kushal Das" -author = "Kushal Das " - -# The short X.Y version -version = "0.1.0" -# The full version, including alpha/beta/rc tags -release = "0.1.0" - - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = ["sphinx.ext.autodoc", "sphinx.ext.intersphinx", "sphinx.ext.viewcode"] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" - -# The master toctree document. -master_doc = "index" - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path . -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -# html_sidebars = {} - - -# -- Options for HTMLHelp output --------------------------------------------- - -# Output file base name for HTML help builder. -htmlhelp_basename = "sdconfigapidoc" - - -# -- Options for LaTeX output ------------------------------------------------ - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, "sdconfigapi.tex", "sdconfigapi Documentation", "Kushal Das", "manual") -] - - -# -- Options for manual page output ------------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(master_doc, "sdconfigapi", "sdconfigapi Documentation", [author], 1)] - - -# -- Options for Texinfo output ---------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - master_doc, - "sdconfigapi", - "sdconfigapi Documentation", - author, - "sdconfigapi", - "One line description of project.", - "Miscellaneous", - ) -] - - -# -- Extension configuration ------------------------------------------------- - -# -- Options for intersphinx extension --------------------------------------- - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {"https://docs.python.org/": None} diff --git a/docs/development.rst b/docs/development.rst deleted file mode 100644 index 786aa3e72..000000000 --- a/docs/development.rst +++ /dev/null @@ -1,113 +0,0 @@ -Development -============ - -This project uses `pipenv `_ to manage all dependencies. -This is a Python 3 project. When using ``pipenv`` locally, ensure you used the ``--keep-outdated`` -flag to prevent dependencies from being unnecessarily upgraded during normal development. - -We cover all the API calls supported by the SecureDrop Journalist Interface API. - -Git clone the project repo, and use the following command to create a new dev -environment. The second command is to enable the virtual environment. - -.. code:: sh - - pipenv sync --dev - pipenv shell - - -Testing -======== - -The tests are located in the ``tests`` directory. This project uses `vcrpy -`_ to record and then reply the API calls so that -developers will have repeatable results so that they may work offline. ``vcrpy`` stores YAML -recordings of the API calls in the ``data`` directory. - -To run all the test cases, use the following command. - -.. code:: sh - - make test - -To run a single test, use this following command, replace the test case name at the end. - -.. code:: sh - - make test TESTS=tests/test_api.py::TestAPI::test_error_unencrypted_reply - - -To test against a live development server, you will need to run the SecureDrop -developent container from the main SecureDrop repository on your host. This -can be done via ``NUM_SOURCES=5 make -C securedrop dev``. - -In this repo, comment out the ``@vcr`` decorator of the ``setUp`` method in -`test_api.py` and execute which ever tests you want to run. If you want to -re-run all tests against the API, remove all the ``.yml`` files in the -``data`` directory. - - -Gererating test data for `APIProxy` ------------------------------------ - - -To test or to generate new test data file for the `APIProxy` class in -`test_apiproxy.py` file, you will have to setup -`QubesOS `_ system. - -There should be one VM (let us call it `sd-journalist`), where we can run -latest securedrop server code from the development branch using -``NUM_SOURCES=5 make -C securedrop dev`` command. The same VM should also have -`securedrop-proxy` project installed, either from the source by hand or using -the latest Debian package from the FPF repository. - -Below is an example configuration for proxy `/etc/sd-proxy.yaml` - -:: - - host: 127.0.0.1 - scheme: http - port: 8081 - target_vm: sd-svs - dev: False - -Then we can create our second developent VM called `sd-svs`, in which we can checkout/develop -the `securedrop-sdk` project. The required configuration file is at `/etc/sd-sdk.conf` - -:: - - [proxy] - name=sd-journalist - -We should also add a corresponding entry in `/etc/qubes-rpc/policy/securedrop.Proxy` file -in **dom0**. - -:: - - sd-svs sd-journalist allow - $anyvm $anyvm deny - - -The above mentioned setup can also be created using `securedrop-workstation` project. - - -Now, delete any related JSON file under `data/` directory, or remove all of -them, and then execute ``make test TEST=tests/test_apiproxy.py``. This is -command will generate the new data files, which can be used in CI or any other -system. - -.. note:: - Remember that file download checks don't read actual file path in the `APIProxy` tests as it - requires QubesOS setup. You can manually uncomment those lines to execute them on QubesOS setup. - - -Releasing -========= - -To make a release, you should: - -1. Update the version in ``setup.py`` -2. Update the changelog -3. Commit the changes, and ``git tag``. -4. Create a PR, push the new tag, and get the PR reviewed and merged into ``master``. -5. Push the new release to the PSF's PyPI `following this documentation `_. diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 1191eea2c..000000000 --- a/docs/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. sdconfigapi documentation master file - -SecureDrop SDK Documentation -============================ - - -Developer Quick Start ---------------------- - -.. code:: sh - - pip install -U pipenv - pipenv sync --dev - pipenv shell - make test - -Table of Contents ------------------ - -.. toctree:: - :maxdepth: 2 - - development - - -Indices and tables ------------------- - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` From d7e62d65030e76ca1ad82a4907182148cb569079 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 13 May 2019 16:24:12 -0700 Subject: [PATCH 185/751] docs: fix links in README --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8b0f4723a..b4733342b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ pipenv shell make test ``` -This project uses `pipenv `_ to manage all dependencies. +This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. This is a Python 3 project. When using ``pipenv`` locally, ensure you used the ``--keep-outdated`` flag to prevent dependencies from being unnecessarily upgraded during normal development. @@ -27,8 +27,7 @@ We cover all the API calls supported by the SecureDrop Journalist Interface API. ## Testing -The tests are located in the `tests` directory. This project uses [vcrpy] -(http://vcrpy.readthedocs.io/en/latest/) to record and then reply the API calls so that +The tests are located in the `tests` directory. This project uses [vcrpy](http://vcrpy.readthedocs.io/en/latest/) to record and then reply the API calls so that developers will have repeatable results so that they may work offline. `vcrpy` stores YAML recordings of the API calls in the `data` directory. @@ -57,7 +56,7 @@ re-run all tests against the API, remove all the `.yml` files in the To test or to generate new test data file for the `APIProxy` class in `test_apiproxy.py` file, you will have to setup -`QubesOS `_ system. +[QubesOS](https://qubes-os.org) system. There should be one VM (let us call it `sd-journalist`), where we can run latest securedrop server code from the development branch using @@ -110,7 +109,7 @@ To make a release, you should: 4. Create a PR and get the PR reviewed and merged into ``master``. 5. ``git tag`` and push the new tag. 6. Checkout the new tag locally. -7. Push the new release source tarball to the PSF's PyPI `following this documentation `_. +7. Push the new release source tarball to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). 8. If you want to publish the new SDK release to the FPF PyPI mirror, Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions to push the package up to our PyPI mirror: https://pypi.org/simple From 9e1ebdc720240dddfc2d2e79573ccea5893cffe3 Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 13 May 2019 17:27:58 -0700 Subject: [PATCH 186/751] Fix README typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8b0f4723a..65d996f8f 100644 --- a/README.md +++ b/README.md @@ -116,11 +116,11 @@ To make a release, you should: # Contributing -Please read [CONTRIBUTING.md](https://github.com/freedomofpress/securedrop-sdk/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. +Please read [CONTRIBUTING.md](https://github.com/freedomofpress/securedrop-sdk/blob/master/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. # Versioning -We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/freedomofpress/secureddrop-sdk/tags). +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/freedomofpress/securedrop-sdk/tags). # License From cc64c089f2fbd442f953ae6535c68de807b6b60e Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 14 May 2019 16:52:45 -0700 Subject: [PATCH 187/751] requirements: requirements.txt -> build-requirements.txt --- requirements.txt => build-requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename requirements.txt => build-requirements.txt (100%) diff --git a/requirements.txt b/build-requirements.txt similarity index 100% rename from requirements.txt rename to build-requirements.txt From 40635b6dab055e2fa9a4d8f16015e7b47e6daf2c Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 14 May 2019 17:02:04 -0700 Subject: [PATCH 188/751] requirements: Pipenv -> pip-tools --- .circleci/config.yml | 10 ++- Makefile | 43 +++++++++- Pipfile | 16 ---- Pipfile.lock | 199 ------------------------------------------- README.md | 14 ++- dev-requirements.in | 9 ++ dev-requirements.txt | 110 ++++++++++++++++++++++++ entrypoint.sh | 6 +- requirements.in | 9 ++ requirements.txt | 46 ++++++++++ 10 files changed, 237 insertions(+), 225 deletions(-) delete mode 100644 Pipfile delete mode 100644 Pipfile.lock create mode 100644 dev-requirements.in create mode 100644 dev-requirements.txt create mode 100644 requirements.in create mode 100644 requirements.txt diff --git a/.circleci/config.yml b/.circleci/config.yml index f752adb5b..7a7e5b79f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,10 +9,14 @@ jobs: - run: name: Install requirements and run tests command: | - pipenv install --dev - pipenv run python -m unittest -v + virtualenv .venv + source .venv/bin/activate + pip install --require-hashes -r dev-requirements.txt + make test - run: name: Check Python dependencies for CVEs command: | - pipenv check + set -e + source .venv/bin/activate + make safety diff --git a/Makefile b/Makefile index cdffb28c4..9b894c3b6 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,41 @@ -install: - pipenv install - sudo cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy +# Bandit is a static code analysis tool to detect security vulnerabilities in Python applications +# https://wiki.openstack.org/wiki/Security/Projects/Bandit +.PHONY: bandit +bandit: ## Run bandit with medium level excluding test-related folders + pip install --upgrade pip && \ + pip install --upgrade bandit!=1.6.0 && \ + bandit -ll --recursive . --exclude tests,.venv +.PHONY: safety +safety: ## Runs `safety check` to check python dependencies for vulnerabilities + pip install --upgrade safety && \ + for req_file in `find . -type f -name '*requirements.txt'`; do \ + echo "Checking file $$req_file" \ + && safety check --full-report -r $$req_file \ + && echo -e '\n' \ + || exit 1; \ + done + +.PHONY: update-pip-requirements +update-pip-requirements: ## Updates all Python requirements files via pip-compile. + pip-compile --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in + pip-compile --generate-hashes --output-file requirements.txt requirements.in + +.PHONY: test test: - pipenv run python -m unittest -v + python -m unittest -v + +# Explaination of the below shell command should it ever break. +# 1. Set the field separator to ": ##" and any make targets that might appear between : and ## +# 2. Use sed-like syntax to remove the make targets +# 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption +# 4. Pass this file as an arg to awk +# 5. Sort it alphabetically +# 6. Format columns with colon as delimiter. +.PHONY: help +help: ## Print this message and exit. + @printf "Makefile for developing and testing the SecureDrop proxy.\n" + @printf "Subcommands:\n\n" + @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ + | sort \ + | column -s ':' -t diff --git a/Pipfile b/Pipfile deleted file mode 100644 index df9a66bcb..000000000 --- a/Pipfile +++ /dev/null @@ -1,16 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -name = "pypi" -verify_ssl = true - -[requires] -python_version = "3.5" - -[packages] -furl = "==2.0.0" -pyyaml = ">=5.1,<6" -requests = "==2.20.0" -werkzeug = "==0.14.1" - -[dev-packages] -vcrpy = "==2.0.1" diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index eda907903..000000000 --- a/Pipfile.lock +++ /dev/null @@ -1,199 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "30eddf2618171a8245e3e40f8c42d389e9d5e2b1e0246dbdd66d5e742cda0391" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.5" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "certifi": { - "hashes": [ - "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", - "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" - ], - "version": "==2018.10.15" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "furl": { - "hashes": [ - "sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018", - "sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec" - ], - "index": "pypi", - "version": "==2.0.0" - }, - "idna": { - "hashes": [ - "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", - "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" - ], - "version": "==2.7" - }, - "orderedmultidict": { - "hashes": [ - "sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b", - "sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5" - ], - "version": "==1.0" - }, - "pyyaml": { - "hashes": [ - "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", - "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", - "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", - "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", - "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", - "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", - "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", - "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", - "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", - "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", - "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" - ], - "index": "pypi", - "version": "==5.1" - }, - "requests": { - "hashes": [ - "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", - "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" - ], - "index": "pypi", - "version": "==2.20.0" - }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" - }, - "urllib3": { - "hashes": [ - "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", - "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" - ], - "version": "==1.24.1" - }, - "werkzeug": { - "hashes": [ - "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c", - "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b" - ], - "index": "pypi", - "version": "==0.14.1" - } - }, - "develop": { - "idna": { - "hashes": [ - "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", - "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" - ], - "version": "==2.7" - }, - "multidict": { - "hashes": [ - "sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b", - "sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64", - "sha256:136f5a4a6a4adeacc4dc820b8b22f0a378fb74f326e259c54d1817639d1d40a0", - "sha256:14906ad3347c7d03e9101749b16611cf2028547716d0840838d3c5e2b3b0f2d3", - "sha256:1ade4a3b71b1bf9e90c5f3d034a87fe4949c087ef1f6cd727fdd766fe8bbd121", - "sha256:22939a00a511a59f9ecc0158b8db728afef57975ce3782b3a265a319d05b9b12", - "sha256:2b86b02d872bc5ba5b3a4530f6a7ba0b541458ab4f7c1429a12ac326231203f7", - "sha256:3c11e92c3dfc321014e22fb442bc9eb70e01af30d6ce442026b0c35723448c66", - "sha256:4ba3bd26f282b201fdbce351f1c5d17ceb224cbedb73d6e96e6ce391b354aacc", - "sha256:4c6e78d042e93751f60672989efbd6a6bc54213ed7ff695fff82784bbb9ea035", - "sha256:4d80d1901b89cc935a6cf5b9fd89df66565272722fe2e5473168927a9937e0ca", - "sha256:4fcf71d33178a00cc34a57b29f5dab1734b9ce0f1c97fb34666deefac6f92037", - "sha256:52f7670b41d4b4d97866ebc38121de8bcb9813128b7c4942b07794d08193c0ab", - "sha256:5368e2b7649a26b7253c6c9e53241248aab9da49099442f5be238fde436f18c9", - "sha256:5bb65fbb48999044938f0c0508e929b14a9b8bf4939d8263e9ea6691f7b54663", - "sha256:60672bb5577472800fcca1ac9dae232d1461db9f20f055184be8ce54b0052572", - "sha256:669e9be6d148fc0283f53e17dd140cde4dc7c87edac8319147edd5aa2a830771", - "sha256:6a0b7a804e8d1716aa2c72e73210b48be83d25ba9ec5cf52cf91122285707bb1", - "sha256:79034ea3da3cf2a815e3e52afdc1f6c1894468c98bdce5d2546fa2342585497f", - "sha256:79247feeef6abcc11137ad17922e865052f23447152059402fc320f99ff544bb", - "sha256:81671c2049e6bf42c7fd11a060f8bc58f58b7b3d6f3f951fc0b15e376a6a5a98", - "sha256:82ac4a5cb56cc9280d4ae52c2d2ebcd6e0668dd0f9ef17f0a9d7c82bd61e24fa", - "sha256:9436267dbbaa49dad18fbbb54f85386b0f5818d055e7b8e01d219661b6745279", - "sha256:94e4140bb1343115a1afd6d84ebf8fca5fb7bfb50e1c2cbd6f2fb5d3117ef102", - "sha256:a2cab366eae8a0ffe0813fd8e335cf0d6b9bb6c5227315f53bb457519b811537", - "sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f", - "sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2", - "sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306", - "sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd" - ], - "version": "==4.4.2" - }, - "pyyaml": { - "hashes": [ - "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", - "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", - "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", - "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", - "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", - "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", - "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", - "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", - "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", - "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", - "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" - ], - "index": "pypi", - "version": "==5.1" - }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" - }, - "vcrpy": { - "hashes": [ - "sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3", - "sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f" - ], - "index": "pypi", - "version": "==2.0.1" - }, - "wrapt": { - "hashes": [ - "sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6" - ], - "version": "==1.10.11" - }, - "yarl": { - "hashes": [ - "sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9", - "sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee", - "sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308", - "sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357", - "sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78", - "sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8", - "sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1", - "sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4", - "sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7" - ], - "markers": "python_version >= '3.4'", - "version": "==1.2.6" - } - } -} diff --git a/README.md b/README.md index f742855f0..b4e253b78 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,17 @@ be poked at and demonstrated. To try the proxy script, first use `pipenv` to create an environment and install requirements. In the root of the project directory, run - pipenv install +``` +virtualenv .venv +source .venv/bin/activate +pip install --require-hashes -r dev-requirements.txt +``` + +#### Update dependencies + +To add or update a dependency, modify either `dev-requirements.in` and `requirements.in` and then run `make update-pip-dependencies`. This will generate `dev-requirements.txt` and `requirements.txt`. + +**IMPORTANT:** Do not modify `build-requirements.txt` during normal development. We use a pip mirror for our build process and the hashes in that file point to wheels on our mirror. #### configuration @@ -90,7 +100,7 @@ this documentation, we assume the client is running in Edit `qubes/securedrop.Proxy` to reflect the path to `entrypoint.sh` in this repo. Also edit the directory to this repo code in `entrypoint.sh`. -Next, run `make install`, which will move `securedrop.Proxy` +Next, run `sudo cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy`, which will move `securedrop.Proxy` (the qubes-rpc "server path definition" file) into place in `/etc/qubes-rpc/`. diff --git a/dev-requirements.in b/dev-requirements.in new file mode 100644 index 000000000..4b9bd528d --- /dev/null +++ b/dev-requirements.in @@ -0,0 +1,9 @@ +flake8==3.5.0 +multidict==4.4.2 +pip-tools==3.1.0 +pycodestyle==2.3.1 +pyflakes==1.6.0 +six==1.11.0 +vcrpy==2.0.1 +wrapt==1.10.11 +yarl==1.2.6 diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 000000000..db5afdafe --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,110 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in +# +certifi==2018.10.15 \ + --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ + --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a +chardet==3.0.4 \ + --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +click==7.0 \ + --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ + --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ + # via pip-tools +flake8==3.5.0 \ + --hash=sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0 \ + --hash=sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37 +furl==2.0.0 \ + --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ + --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec +idna==2.7 \ + --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ + --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 +mccabe==0.6.1 \ + --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ + # via flake8 +multidict==4.4.2 \ + --hash=sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b \ + --hash=sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64 \ + --hash=sha256:136f5a4a6a4adeacc4dc820b8b22f0a378fb74f326e259c54d1817639d1d40a0 \ + --hash=sha256:14906ad3347c7d03e9101749b16611cf2028547716d0840838d3c5e2b3b0f2d3 \ + --hash=sha256:1ade4a3b71b1bf9e90c5f3d034a87fe4949c087ef1f6cd727fdd766fe8bbd121 \ + --hash=sha256:22939a00a511a59f9ecc0158b8db728afef57975ce3782b3a265a319d05b9b12 \ + --hash=sha256:2b86b02d872bc5ba5b3a4530f6a7ba0b541458ab4f7c1429a12ac326231203f7 \ + --hash=sha256:3c11e92c3dfc321014e22fb442bc9eb70e01af30d6ce442026b0c35723448c66 \ + --hash=sha256:4ba3bd26f282b201fdbce351f1c5d17ceb224cbedb73d6e96e6ce391b354aacc \ + --hash=sha256:4c6e78d042e93751f60672989efbd6a6bc54213ed7ff695fff82784bbb9ea035 \ + --hash=sha256:4d80d1901b89cc935a6cf5b9fd89df66565272722fe2e5473168927a9937e0ca \ + --hash=sha256:4fcf71d33178a00cc34a57b29f5dab1734b9ce0f1c97fb34666deefac6f92037 \ + --hash=sha256:52f7670b41d4b4d97866ebc38121de8bcb9813128b7c4942b07794d08193c0ab \ + --hash=sha256:5368e2b7649a26b7253c6c9e53241248aab9da49099442f5be238fde436f18c9 \ + --hash=sha256:5bb65fbb48999044938f0c0508e929b14a9b8bf4939d8263e9ea6691f7b54663 \ + --hash=sha256:60672bb5577472800fcca1ac9dae232d1461db9f20f055184be8ce54b0052572 \ + --hash=sha256:669e9be6d148fc0283f53e17dd140cde4dc7c87edac8319147edd5aa2a830771 \ + --hash=sha256:6a0b7a804e8d1716aa2c72e73210b48be83d25ba9ec5cf52cf91122285707bb1 \ + --hash=sha256:79034ea3da3cf2a815e3e52afdc1f6c1894468c98bdce5d2546fa2342585497f \ + --hash=sha256:79247feeef6abcc11137ad17922e865052f23447152059402fc320f99ff544bb \ + --hash=sha256:81671c2049e6bf42c7fd11a060f8bc58f58b7b3d6f3f951fc0b15e376a6a5a98 \ + --hash=sha256:82ac4a5cb56cc9280d4ae52c2d2ebcd6e0668dd0f9ef17f0a9d7c82bd61e24fa \ + --hash=sha256:9436267dbbaa49dad18fbbb54f85386b0f5818d055e7b8e01d219661b6745279 \ + --hash=sha256:94e4140bb1343115a1afd6d84ebf8fca5fb7bfb50e1c2cbd6f2fb5d3117ef102 \ + --hash=sha256:a2cab366eae8a0ffe0813fd8e335cf0d6b9bb6c5227315f53bb457519b811537 \ + --hash=sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f \ + --hash=sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2 \ + --hash=sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306 \ + --hash=sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd +orderedmultidict==1.0 \ + --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ + --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 +pip-tools==3.1.0 \ + --hash=sha256:31b43e5f8d605fc84f7506199025460abcb98a29d12cc99db268f73e39cf55e5 \ + --hash=sha256:b1ceca03b4a48346b2f6870565abb09d8d257d5b1524b4c6b222185bf26c3870 +pycodestyle==2.3.1 \ + --hash=sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766 \ + --hash=sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9 +pyflakes==1.6.0 \ + --hash=sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f \ + --hash=sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805 +pyyaml==5.1 \ + --hash=sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c \ + --hash=sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95 \ + --hash=sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2 \ + --hash=sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4 \ + --hash=sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad \ + --hash=sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba \ + --hash=sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1 \ + --hash=sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e \ + --hash=sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673 \ + --hash=sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13 \ + --hash=sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19 +requests==2.20.0 \ + --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ + --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 +six==1.11.0 \ + --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ + --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb +urllib3==1.24.1 \ + --hash=sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39 \ + --hash=sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22 +vcrpy==2.0.1 \ + --hash=sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3 \ + --hash=sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f +werkzeug==0.14.1 \ + --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c \ + --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b +wrapt==1.10.11 \ + --hash=sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6 +yarl==1.2.6 \ + --hash=sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9 \ + --hash=sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee \ + --hash=sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308 \ + --hash=sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357 \ + --hash=sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78 \ + --hash=sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8 \ + --hash=sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1 \ + --hash=sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4 \ + --hash=sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7 diff --git a/entrypoint.sh b/entrypoint.sh index 35815f05b..7ff5723d5 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,4 +1,8 @@ #!/bin/sh cd /home/user/projects/securedrop-proxy -pipenv run ./sd-proxy.py ./config.yaml +virtualenv .venv +source .venv/bin/activate +pip install --require-hashes -r requirements.txt +pip install --require-hashes -r dev-requirements.txt +./sd-proxy.py ./config.yaml diff --git a/requirements.in b/requirements.in new file mode 100644 index 000000000..ed7f5c309 --- /dev/null +++ b/requirements.in @@ -0,0 +1,9 @@ +certifi==2018.10.15 +chardet==3.0.4 +furl==2.0.0 +idna==2.7 +orderedmultidict==1.0 +PyYAML==5.1 +requests==2.20.0 +urllib3==1.24.1 +Werkzeug==0.14.1 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..f9ec42579 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --generate-hashes --output-file requirements.txt requirements.in +# +certifi==2018.10.15 \ + --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ + --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a +chardet==3.0.4 \ + --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +furl==2.0.0 \ + --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ + --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec +idna==2.7 \ + --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ + --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 +orderedmultidict==1.0 \ + --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ + --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 +pyyaml==5.1 \ + --hash=sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c \ + --hash=sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95 \ + --hash=sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2 \ + --hash=sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4 \ + --hash=sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad \ + --hash=sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba \ + --hash=sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1 \ + --hash=sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e \ + --hash=sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673 \ + --hash=sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13 \ + --hash=sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19 +requests==2.20.0 \ + --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ + --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 +six==1.12.0 \ + --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ + --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ + # via furl, orderedmultidict +urllib3==1.24.1 \ + --hash=sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39 \ + --hash=sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22 +werkzeug==0.14.1 \ + --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c \ + --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b From f946fe38f4dc0b4b71cff3ea8d318fcca1599c09 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 15 May 2019 12:55:01 -0700 Subject: [PATCH 189/751] security updates: urllib3==1.24.3 urllib>=1.24.2 due to CVE-2019-11324 --- dev-requirements.txt | 6 +++--- requirements.in | 2 +- requirements.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index db5afdafe..aeb1983f6 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -87,9 +87,9 @@ requests==2.20.0 \ six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb -urllib3==1.24.1 \ - --hash=sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39 \ - --hash=sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22 +urllib3==1.24.3 \ + --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ + --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb vcrpy==2.0.1 \ --hash=sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3 \ --hash=sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f diff --git a/requirements.in b/requirements.in index ed7f5c309..6a3de347c 100644 --- a/requirements.in +++ b/requirements.in @@ -5,5 +5,5 @@ idna==2.7 orderedmultidict==1.0 PyYAML==5.1 requests==2.20.0 -urllib3==1.24.1 +urllib3==1.24.3 Werkzeug==0.14.1 diff --git a/requirements.txt b/requirements.txt index f9ec42579..d98ecc1b0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,9 +38,9 @@ six==1.12.0 \ --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ # via furl, orderedmultidict -urllib3==1.24.1 \ - --hash=sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39 \ - --hash=sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22 +urllib3==1.24.3 \ + --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ + --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb werkzeug==0.14.1 \ --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c \ --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b From 5625bb19ef2583ff9f8051e8532db5a71591a030 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 17 May 2019 13:13:32 -0700 Subject: [PATCH 190/751] update MANIFEST.in for packaging --- MANIFEST.in | 2 -- README.md | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index d097841f9..65ba732ea 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,4 @@ include LICENSE -include Pipfile -include Pipfile.lock include README.md include VERSION include config-example.yaml diff --git a/README.md b/README.md index b4e253b78..0207698be 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ be poked at and demonstrated. #### install requirements -To try the proxy script, first use `pipenv` to create an environment +To try the proxy script, first use `venv` to create an environment and install requirements. In the root of the project directory, run ``` From d51a259e615af2cb71a800d77df6b446b97d3a32 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 17 May 2019 21:39:47 -0700 Subject: [PATCH 191/751] requirements: keep six consistent between dev/prod --- requirements.in | 1 + requirements.txt | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements.in b/requirements.in index 6a3de347c..15019974a 100644 --- a/requirements.in +++ b/requirements.in @@ -4,6 +4,7 @@ furl==2.0.0 idna==2.7 orderedmultidict==1.0 PyYAML==5.1 +six==1.11.0 requests==2.20.0 urllib3==1.24.3 Werkzeug==0.14.1 diff --git a/requirements.txt b/requirements.txt index d98ecc1b0..0cbecb33e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,10 +34,9 @@ pyyaml==5.1 \ requests==2.20.0 \ --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 -six==1.12.0 \ - --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ - --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ - # via furl, orderedmultidict +six==1.11.0 \ + --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ + --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb urllib3==1.24.3 \ --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb From d13412024c3c03521f1c7c95c922af877aa3adb9 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 6 Jun 2019 19:21:26 +0530 Subject: [PATCH 192/751] Fixes #51 supports logout endpoint --- data/test-logout.yml | 22 ++++++++++++++++++++++ data/test_logout.json | 1 + sdclientapi/__init__.py | 26 ++++++++++++++++++++++++++ tests/test_api.py | 5 +++++ tests/test_apiproxy.py | 5 +++++ 5 files changed, 59 insertions(+) create mode 100644 data/test-logout.yml create mode 100644 data/test_logout.json diff --git a/data/test-logout.yml b/data/test-logout.yml new file mode 100644 index 000000000..e225fc487 --- /dev/null +++ b/data/test-logout.yml @@ -0,0 +1,22 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1OTg1NjEzNiwiaWF0IjoxNTU5ODI3MzM2fQ.eyJpZCI6MX0.UlITSFSmIoMtloqyUzMJ0KplL_x5l8I_zJL-ROMpSIM] + Connection: [keep-alive] + Content-Length: ['0'] + Content-Type: [application/json] + User-Agent: [python-requests/2.20.0] + method: POST + uri: http://127.0.0.1:8081/api/v1/logout + response: + body: {string: "{\n \"message\": \"Your token has been revoked.\"\n}\n"} + headers: + Content-Length: ['48'] + Content-Type: [application/json] + Date: ['Thu, 06 Jun 2019 13:22:16 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] + status: {code: 200, message: OK} +version: 1 diff --git a/data/test_logout.json b/data/test_logout.json new file mode 100644 index 000000000..0cd9f1570 --- /dev/null +++ b/data/test_logout.json @@ -0,0 +1 @@ +{"{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\"}+1": "{\"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"48\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 06 Jun 2019 13:14:28 GMT\"}}"} \ No newline at end of file diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 9cf34f24e..7d964b1e6 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -895,3 +895,29 @@ def delete_reply(self, reply: Reply) -> bool: return True # We should never reach here return False + + def logout(self) -> bool: + """ + Logsout the current user + """ + path_query = "api/v1/logout" + method = "POST" + + try: + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) + + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + if "error" in data: + raise AuthError(data["error"]) + + if "message" in data and data["message"] == "Your token has been revoked.": + return True + else: + return False diff --git a/tests/test_api.py b/tests/test_api.py index 9ebf8244d..97a5bf133 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -321,6 +321,11 @@ def test_delete_reply(self): # We deleted one, so there must be 1 less reply now self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + @vcr.use_cassette("data/test-logout.yml") + def test_logout(self): + r = self.api.logout() + self.assertTrue(r) + def test_request_connect_timeout(mocker): api = API("mock", "mock", "mock", "mock", proxy=False) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 8fe3a5ad8..5876cdbe8 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -308,6 +308,11 @@ def test_delete_reply(self): # We deleted one, so there must be 1 less reply now self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + @dastollervey_datasaver + def test_logout(self): + r = self.api.logout() + self.assertTrue(r) + def test_request_timeout(mocker): class MockedPopen: From 880635d28d005dfb3e4446a33c264702b478e854 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 10 Jun 2019 15:00:10 +0530 Subject: [PATCH 193/751] Renames test_logout to test_zlogout This helps to run the test always at the end. As this logouts the current test user, if any tests run after this test, they will fail. --- tests/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_api.py b/tests/test_api.py index 97a5bf133..c005baf66 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -322,7 +322,7 @@ def test_delete_reply(self): self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) @vcr.use_cassette("data/test-logout.yml") - def test_logout(self): + def test_zlogout(self): r = self.api.logout() self.assertTrue(r) From bc1aef292d9158afdbf3f376b1735d2edd52a0c9 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 11 Jun 2019 19:16:16 +0530 Subject: [PATCH 194/751] Getting ready for 0.0.10 release --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e4c933715..9014cbd20 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.9", + version="0.0.10", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From a5306e95e220fdc06c12b2a79894acda2f4ecaec Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 13 Jun 2019 21:55:00 +0530 Subject: [PATCH 195/751] Updates tests and data file for first and last name Our API already provides first and last name for the current user, now we have tests for the same. --- data/test-get-current-user.yml | 17 ++++++++--------- data/test_get_current_user.json | 2 +- tests/test_api.py | 2 ++ tests/test_apiproxy.py | 2 ++ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index 6b615698c..2a16e6f92 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -4,22 +4,21 @@ interactions: headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] + Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU2MDQ2OTgwMywiaWF0IjoxNTYwNDQxMDAzfQ.eyJpZCI6MX0.3iyw2GfggT1pOe-Offan7HKYo86L4JpmoTgaUuy9Sm0] Connection: [keep-alive] Content-Type: [application/json] User-Agent: [python-requests/2.20.0] method: GET uri: http://127.0.0.1:8081/api/v1/user response: - body: {string: "{\n \"is_admin\": true, \n \"last_login\": \"2018-10-22T23:00:06.845751Z\", - \n \"username\": \"journalist\", \n \"uuid\": \"16db39ec-0f92-4299-a15d-f6053b3d52a7\"\n}\n"} + body: {string: "{\n \"first_name\": null, \n \"is_admin\": true, \n \"last_login\"\ + : \"2019-06-13T15:50:03.679186Z\", \n \"last_name\": null, \n \"username\"\ + : \"journalist\", \n \"uuid\": \"e56c08ab-811d-4fdb-ad26-87da555b6858\"\n\ + }\n"} headers: - Content-Length: ['151'] + Content-Length: ['196'] Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:00:12 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMDoxMiBHTVQifX0.Dq_n_A.ati4ypL2flydeIpO5E3gW0YX364; - HttpOnly; Path=/] - Vary: [Cookie] + Date: ['Thu, 13 Jun 2019 15:50:03 GMT'] + Server: [Werkzeug/0.14.1 Python/2.7.12] status: {code: 200, message: OK} version: 1 diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index bb5b196e3..27f46a1a4 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:39 GMT\", \"Content-Length\": \"151\"}, \"body\": \"{\\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2019-04-19T08:27:11.268953Z\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Thu, 13 Jun 2019 16:21:24 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"196\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2019-06-13T16:21:23.990588Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"e56c08ab-811d-4fdb-ad26-87da555b6858\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file diff --git a/tests/test_api.py b/tests/test_api.py index 9ebf8244d..9a4b5fef8 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -216,6 +216,8 @@ def test_get_current_user(self): user = self.api.get_current_user() self.assertTrue(user["is_admin"]) self.assertEqual(user["username"], "journalist") + self.assertTrue("first_name" in user) + self.assertTrue("last_name" in user) @vcr.use_cassette("data/test-error-unencrypted-reply.yml") def test_error_unencrypted_reply(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 8fe3a5ad8..590ef1d3e 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -199,6 +199,8 @@ def test_get_current_user(self): user = self.api.get_current_user() self.assertTrue(user["is_admin"]) self.assertEqual(user["username"], "journalist") + self.assertTrue("first_name" in user) + self.assertTrue("last_name" in user) @dastollervey_datasaver def test_error_unencrypted_reply(self): From 1279fe4068a43f71521d3ea127c82d7fa3eb6b05 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 14 Jun 2019 09:35:16 -0700 Subject: [PATCH 196/751] manifest: fix path to VERSION --- MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index 65ba732ea..d7bfd51bc 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,6 @@ include LICENSE include README.md -include VERSION +include securedrop_proxy/VERSION include config-example.yaml include qubes/securedrop.Proxy include requirements.txt From 6601488186f60ad36edbe679d79d6164f2adbc03 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 14 Jun 2019 09:38:03 -0700 Subject: [PATCH 197/751] build-requirements.txt: update urllib to 1.24.3 --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index 8e2c8bb46..5d37ab853 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -6,5 +6,5 @@ orderedmultidict==1.0 --hash=sha256:25489716d76d2cc8aa656bfb00cd40b6ca29d5e11ccd pyyaml==5.1 --hash=sha256:b8d80623e9d4e348c59ea726ce3032a2eb15abca6a48d3828362d11c6014a0a7 requests==2.20.0 --hash=sha256:2a539dd6af40a611f3b8eb3f99d3567781352ece1698b2fab42bf4c2218705b5 six==1.11.0 --hash=sha256:4663c7a1dbed033cfb294f2d534bd6151c0698dc12ecabb4eaa3cb041d758528 -urllib3==1.24.1 --hash=sha256:ac4755b0ae019d670d5fb420c39cb531389ab6ca8b652e12f56259f5cbc0ce21 +urllib3==1.24.3 --hash=sha256:028309393606e28e640e2031edd27eb969c94f9364b0871912608aaa8e66c96e werkzeug==0.14.1 --hash=sha256:177ea4248bf0475cbc060edb35a0bdcf6e6daeac9e1296de5ddb3493e5ec15b9 From d66d48af84c14e66762c663b54c026c8e7738762 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 14 Jun 2019 13:18:53 -0700 Subject: [PATCH 198/751] manifest: add build-requirements.txt (must be in source tarball) --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index d7bfd51bc..0c0916b5a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,6 +3,7 @@ include README.md include securedrop_proxy/VERSION include config-example.yaml include qubes/securedrop.Proxy +include build-requirements.txt include requirements.txt include securedrop_proxy/*.py include setup.py From 46443b7d03810403eefb2481a0446b9b8517c6da Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 14 Jun 2019 09:38:42 -0700 Subject: [PATCH 199/751] securedrop-proxy 0.1.4 --- securedrop_proxy/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index b1e80bb24..845639eef 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.1.3 +0.1.4 From 11e772e927a8e73415a15a6468b24cbc3b711571 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 17 Jun 2019 11:24:17 -0700 Subject: [PATCH 200/751] README: update dependency update policies and instructions --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0207698be..a6d5ddb73 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,16 @@ pip install --require-hashes -r dev-requirements.txt #### Update dependencies -To add or update a dependency, modify either `dev-requirements.in` and `requirements.in` and then run `make update-pip-dependencies`. This will generate `dev-requirements.txt` and `requirements.txt`. +If you're adding or updating a dependency, you need to: -**IMPORTANT:** Do not modify `build-requirements.txt` during normal development. We use a pip mirror for our build process and the hashes in that file point to wheels on our mirror. +1. Modify either `dev-requirements.in` and `requirements.in` (depending on whether it is prod or dev only) and then run `make update-pip-dependencies`. This will generate `dev-requirements.txt` and `requirements.txt`. + +2. For building a debian package from this project, we use the requirements in +`build-requirements.txt` which uses our pip mirror, i.e. the hashes in that file point to +wheels on our pip mirror. A maintainer will need to add +the updated dependency to our pip mirror (you can request this in the PR). + +3. Once the pip mirror is updated, you should checkout the [securedrop-debian-packaging repo](https://github.com/freedomofpress/securedrop-debian-packaging) and run `make requirements`. Commit the `build-requirements.txt` that results and add it to your PR. #### configuration From a1116954a95ff44b75851cd5b39719bb28293d9f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 17 Jun 2019 11:26:21 -0700 Subject: [PATCH 201/751] ci: make sure we can build debian package on diff in PR --- .circleci/config.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7a7e5b79f..57cbbe098 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,35 @@ version: 2 jobs: build: + docker: + - image: circleci/python:3.5-stretch + steps: + - checkout + + - run: + name: Install Debian packaging dependencies and download wheels + command: | + mkdir ~/packaging && cd ~/packaging + git clone https://github.com/freedomofpress/securedrop-debian-packaging.git + cd securedrop-debian-packaging + make install-deps && make fetch-wheels + + - run: + name: Tag and make source tarball + command: | + cd ~/project + ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here + python3 setup.py sdist + + - run: + name: Build debian package + command: | + cd ~/packaging/securedrop-debian-packaging + export PKG_VERSION=1000.0 + export PKG_PATH=~/project/dist/securedrop-proxy-$PKG_VERSION.tar.gz + make securedrop-proxy + + test: docker: - image: circleci/python:3.5 steps: @@ -20,3 +49,10 @@ jobs: set -e source .venv/bin/activate make safety + +workflows: + version: 2 + securedrop_proxy_ci: + jobs: + - test + - build From 082e174fcb179d965b2af06d8c46597e94e6e5bc Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 18 Jun 2019 10:54:21 -0700 Subject: [PATCH 202/751] update_version.sh: add update version script this intentionally does not commit and tag as I want to run non-interactively --- update_version.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 update_version.sh diff --git a/update_version.sh b/update_version.sh new file mode 100755 index 000000000..7e027d202 --- /dev/null +++ b/update_version.sh @@ -0,0 +1,27 @@ +#!/bin/bash +## Usage: ./update_version.sh + +set -e + +readonly NEW_VERSION=$1 + +if [ -z "$NEW_VERSION" ]; then + echo "You must specify the new version!" + exit 1 +fi + +# Get the old version from securedrop_proxy/VERSION +OLD_VERSION=$(cat securedrop_proxy/VERSION) + +if [ -z "$OLD_VERSION" ]; then + echo "Couldn't find the old version: does this script need to be updated?" + exit 1 +fi + +# Update the version in securedrop_proxy/VERSION +if [[ "$OSTYPE" == "darwin"* ]]; then + # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. + sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_proxy/VERSION +else + sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_proxy/VERSION +fi From b121caa4a5567f28f902eea331116cdf222637d1 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 18 Jun 2019 11:31:53 -0700 Subject: [PATCH 203/751] README: add alpha release management guide --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index a6d5ddb73..6130263aa 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,15 @@ the updated dependency to our pip mirror (you can request this in the PR). 3. Once the pip mirror is updated, you should checkout the [securedrop-debian-packaging repo](https://github.com/freedomofpress/securedrop-debian-packaging) and run `make requirements`. Commit the `build-requirements.txt` that results and add it to your PR. +## Making a Release + +**Note:** These are the release guidelines for pre-production alpha releases. Production release tags must be signed with the SecureDrop release key. + + 1. Update versions: `./update_version.sh $new_version_number`. +2. Commit the changes with commit message `securedrop-proxy $new_version_number` and make a PR. +3. You should confirm via a manual debian package build and manual testing in Qubes that there are no regressions (this is limited pre-release QA). +4. Once your PR is approved, you can add a tag and push: `git tag $new_version_number`. + #### configuration The proxy script must be run with the path to its configuration file From 0b24623779e95f1f75aa6fe0a9082689a47a2c0f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 19 Jun 2019 15:33:43 +0530 Subject: [PATCH 204/751] Fixes #93 raises the TimeOutErrors properly --- sdclientapi/__init__.py | 126 +++++++++++++++++++--------------------- tests/test_api.py | 17 ++++++ tests/test_apiproxy.py | 31 ++++++++++ 3 files changed, 108 insertions(+), 66 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 7d964b1e6..a86981437 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -570,41 +570,38 @@ def download_submission( if os.path.exists(path) and not os.path.isdir(path): raise BaseError("Please provide a vaild directory to save.") - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=timeout or self.default_download_timeout, - ) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=timeout or self.default_download_timeout, + ) - if status_code == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) + if status_code == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - # Get the headers - headers = headers - - if not self.proxy: - # This is where we will save our downloaded file - filepath = os.path.join(path, submission.filename) - with open(filepath, "wb") as fobj: - for chunk in data.iter_content( - chunk_size=1024 - ): # Getting 1024 in each chunk - if chunk: - fobj.write(chunk) - - else: - filepath = os.path.join( - "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] - ) - # Return the tuple of sha256sum, filepath - # Returning empty string instead of sha256sum due to this - # SecureDrop server bug: - # https://github.com/freedomofpress/securedrop/issues/3877 - return "", filepath - except Exception as err: - raise BaseError(err) + # Get the headers + headers = headers + + if not self.proxy: + # This is where we will save our downloaded file + filepath = os.path.join(path, submission.filename) + with open(filepath, "wb") as fobj: + for chunk in data.iter_content( + chunk_size=1024 + ): # Getting 1024 in each chunk + if chunk: + fobj.write(chunk) + + else: + filepath = os.path.join( + "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] + ) + # Return the tuple of sha256sum, filepath + # Returning empty string instead of sha256sum due to this + # SecureDrop server bug: + # https://github.com/freedomofpress/securedrop/issues/3877 + return "", filepath def flag_source(self, source: Source) -> bool: """ @@ -823,41 +820,38 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: if os.path.exists(path) and not os.path.isdir(path): raise BaseError("Please provide a valid directory to save.") - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if status_code == 404: - raise WrongUUIDError("Missing reply {}".format(reply.uuid)) + if status_code == 404: + raise WrongUUIDError("Missing reply {}".format(reply.uuid)) + + # Get the headers + headers = headers - # Get the headers - headers = headers - - if not self.proxy: - # This is where we will save our downloaded file - filepath = os.path.join(path, reply.filename) - with open(filepath, "wb") as fobj: - for chunk in data.iter_content( - chunk_size=1024 - ): # Getting 1024 in each chunk - if chunk: - fobj.write(chunk) - - else: - filepath = os.path.join( - "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] - ) - # Return the tuple of sha256sum, filepath - # Returning empty string instead of sha256sum due to this - # SecureDrop server bug: - # https://github.com/freedomofpress/securedrop/issues/3877 - return "", filepath - except Exception as err: - raise BaseError(err) + if not self.proxy: + # This is where we will save our downloaded file + filepath = os.path.join(path, reply.filename) + with open(filepath, "wb") as fobj: + for chunk in data.iter_content( + chunk_size=1024 + ): # Getting 1024 in each chunk + if chunk: + fobj.write(chunk) + + else: + filepath = os.path.join( + "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] + ) + # Return the tuple of sha256sum, filepath + # Returning empty string instead of sha256sum due to this + # SecureDrop server bug: + # https://github.com/freedomofpress/securedrop/issues/3877 + return "", filepath def delete_reply(self, reply: Reply) -> bool: """ diff --git a/tests/test_api.py b/tests/test_api.py index f73d457ca..94c80bd31 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -18,6 +18,7 @@ from sdclientapi.sdlocalobjects import Reply from sdclientapi.sdlocalobjects import ReplyError from sdclientapi.sdlocalobjects import Source +from sdclientapi.sdlocalobjects import Submission from sdclientapi.sdlocalobjects import WrongUUIDError NUM_REPLIES_PER_SOURCE = 2 @@ -341,3 +342,19 @@ def test_request_read_timeout(mocker): mocker.patch("sdclientapi.requests.request", side_effect=ReadTimeout) with pytest.raises(RequestTimeoutError): api.authenticate() + + +def test_download_reply_timeout(mocker): + api = API("mock", "mock", "mock", "mock", proxy=False) + mocker.patch("sdclientapi.requests.request", side_effect=RequestTimeoutError) + with pytest.raises(RequestTimeoutError): + r = Reply(uuid="humanproblem", filename="secret.txt") + api.download_reply(r) + + +def test_download_submission_timeout(mocker): + api = API("mock", "mock", "mock", "mock", proxy=False) + mocker.patch("sdclientapi.requests.request", side_effect=RequestTimeoutError) + with pytest.raises(RequestTimeoutError): + s = Submission(uuid="climateproblem") + api.download_submission(s) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 8fdbdb49c..19a383766 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -16,6 +16,7 @@ ReplyError, Reply, Source, + Submission, ) from utils import load_auth, save_auth, dastollervey_datasaver @@ -329,3 +330,33 @@ def communicate(self, *nargs, **kwargs) -> None: with pytest.raises(RequestTimeoutError): api.authenticate() + + +def test_download_reply_timeout(mocker): + class MockedPopen: + def __init__(self, *nargs, **kwargs) -> None: + self.stdin = mocker.MagicMock() + + def communicate(self, *nargs, **kwargs) -> None: + raise TimeoutExpired(["mock"], 123) + + api = API("mock", "mock", "mock", "mock", proxy=True) + mocker.patch("sdclientapi.Popen", MockedPopen) + with pytest.raises(RequestTimeoutError): + r = Reply(uuid="humanproblem", filename="secret.txt") + api.download_reply(r) + + +def test_download_submission_timeout(mocker): + class MockedPopen: + def __init__(self, *nargs, **kwargs) -> None: + self.stdin = mocker.MagicMock() + + def communicate(self, *nargs, **kwargs) -> None: + raise TimeoutExpired(["mock"], 123) + + api = API("mock", "mock", "mock", "mock", proxy=True) + mocker.patch("sdclientapi.Popen", MockedPopen) + with pytest.raises(RequestTimeoutError): + s = Submission(uuid="climateproblem") + api.download_submission(s) From a1d41bd0127ab2ddc30cf150eddc8d9b39cfe10b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 19 Jun 2019 14:08:51 -0700 Subject: [PATCH 205/751] expose ETag in submission/reply downloads, update tests --- sdclientapi/__init__.py | 28 ++++++++++++---------------- tests/test_api.py | 22 +++++++++++++++++----- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index a86981437..4babe587b 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -553,13 +553,14 @@ def download_submission( self, submission: Submission, path: str = "", timeout: Optional[int] = None ) -> Tuple[str, str]: """ - Returns a tuple of sha256sum and file path for a given Submission object. This method - also requires a directory path in where it will save the submission file. + Returns a tuple of etag (format is algorithm:checksum) and file path for + a given Submission object. This method also requires a directory path + in where it will save the submission file. :param submission: Submission object :param path: Local directory path to save the submission - :returns: Tuple of sha256sum and path of the saved submission. + :returns: Tuple of etag and path of the saved submission. """ path_query = "api/v1/sources/{}/submissions/{}/download".format( submission.source_uuid, submission.uuid @@ -597,11 +598,8 @@ def download_submission( filepath = os.path.join( "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] ) - # Return the tuple of sha256sum, filepath - # Returning empty string instead of sha256sum due to this - # SecureDrop server bug: - # https://github.com/freedomofpress/securedrop/issues/3877 - return "", filepath + + return headers['Etag'].strip('\"'), filepath def flag_source(self, source: Source) -> bool: """ @@ -802,13 +800,14 @@ def get_all_replies(self) -> List[Reply]: def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: """ - Returns a tuple of sha256sum and file path for a given Reply object. This method - also requires a directory path in where it will save the reply file. + Returns a tuple of etag (format is algorithm:checksum) and file path for + a given Reply object. This method also requires a directory path + in where it will save the reply file. :param reply: Reply object :param path: Local directory path to save the reply - :returns: Tuple of sha256sum and path of the saved Reply. + :returns: Tuple of etag and path of the saved Reply. """ path_query = "api/v1/sources/{}/replies/{}/download".format( reply.source_uuid, reply.uuid @@ -847,11 +846,8 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: filepath = os.path.join( "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] ) - # Return the tuple of sha256sum, filepath - # Returning empty string instead of sha256sum due to this - # SecureDrop server bug: - # https://github.com/freedomofpress/securedrop/issues/3877 - return "", filepath + + return headers['Etag'].strip('\"'), filepath def delete_reply(self, reply: Reply) -> bool: """ diff --git a/tests/test_api.py b/tests/test_api.py index 94c80bd31..d008d941b 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,4 +1,5 @@ import datetime +import hashlib import os import pytest import shutil @@ -259,14 +260,19 @@ def test_download_submission(self): # We need a temporary directory to download tmpdir = tempfile.mkdtemp() - _, filepath = self.api.download_submission(s, tmpdir) + etag, filepath = self.api.download_submission(s, tmpdir) # now let us read the downloaded file with open(filepath, "rb") as fobj: - fobj.read() + content = fobj.read() - # Now the submission should have is_read as True. + # Verify the ETag contains the algorithm and the hash is correct + hasher = hashlib.sha256() + hasher.update(content) + + assert etag == "sha256:{}".format(hasher.hexdigest()) + # Now the submission should have is_read as True. s = self.api.get_submission(s) self.assertTrue(s.is_read) @@ -304,11 +310,17 @@ def test_download_reply(self): # We need a temporary directory to download tmpdir = tempfile.mkdtemp() - _, filepath = self.api.download_reply(r, tmpdir) + etag, filepath = self.api.download_reply(r, tmpdir) # now let us read the downloaded file with open(filepath, "rb") as fobj: - fobj.read() + content = fobj.read() + + # Verify the ETag contains the algorithm and the hash is correct + hasher = hashlib.sha256() + hasher.update(content) + + assert etag == "sha256:{}".format(hasher.hexdigest()) # Let us remove the temporary directory shutil.rmtree(tmpdir) From a8c1e394e8e0d0e4c05c86d8493e249c4afa61ff Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 21 Jun 2019 13:22:49 -0700 Subject: [PATCH 206/751] securedrop-sdk 0.0.11 --- CHANGELOG.md | 12 ++++++++++++ README.md | 5 ++--- setup.py | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ca0395b3..4b1f84960 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ Changelog ========= +0.0.11 +------ + +* Expose ETags in submission and reply downloads (#96). +* Update tests and test data for first and last name (#92). +* Bug fix: Ensure RequestTimeoutError is raised for submission and reply downloads (#95). + +0.0.10 +------ + +* Support logout endpoint (#88). + 0.0.9 ----- diff --git a/README.md b/README.md index b4ef8b64f..1f5210f90 100644 --- a/README.md +++ b/README.md @@ -103,14 +103,13 @@ system. To make a release, you should: -1. Create a branch named "release-[VERSION]" +1. Create a branch named `release/$new_version_number` 2. Update `CHANGELOG.md` and `setup.py` 3. Commit the changes. 4. Create a PR and get the PR reviewed and merged into ``master``. -5. ``git tag`` and push the new tag. +5. ``git tag $new_version_number`` and push the new tag. 6. Checkout the new tag locally. 7. Push the new release source tarball to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). - 8. If you want to publish the new SDK release to the FPF PyPI mirror, Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions to push the package up to our PyPI mirror: https://pypi.org/simple # Contributing diff --git a/setup.py b/setup.py index 9014cbd20..b8a5d7761 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.10", + version="0.0.11", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 4543ba04d5f9eae7939f2aafd90baef96022412a Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 24 Jun 2019 09:33:18 -0700 Subject: [PATCH 207/751] ci: increase build timeout to 20 minutes --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 612893754..43894a8d5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -68,7 +68,7 @@ jobs: - run: name: Wait for server to be up and for test sources to load command: | - dockerize -wait tcp://127.0.0.1:8080 -timeout 15m + dockerize -wait tcp://127.0.0.1:8080 -timeout 20m sleep 30 - run: name: Remove VCR cassettes and run tests against latest API From c1f7666604ea2284f04e678ddfdecfc360ac8286 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 26 Jun 2019 11:57:43 -0700 Subject: [PATCH 208/751] ci: fail build if build requirements need update --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 57cbbe098..0ec6d2a5f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,6 +13,7 @@ jobs: git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging make install-deps && make fetch-wheels + PKG_DIR=~/project make requirements - run: name: Tag and make source tarball From 7af5102ba1f513183c81c1530d597662768e8b56 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 5 Jul 2019 10:25:59 -0700 Subject: [PATCH 209/751] add changelog file --- changelog.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.md diff --git a/changelog.md b/changelog.md new file mode 100644 index 000000000..825c32f0d --- /dev/null +++ b/changelog.md @@ -0,0 +1 @@ +# Changelog From 10ef74f965be41a53da754d3b5b410e9d46f76c6 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 5 Jul 2019 10:38:56 -0700 Subject: [PATCH 210/751] update release instructions to include changelog --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6130263aa..ee927197e 100644 --- a/README.md +++ b/README.md @@ -48,11 +48,12 @@ the updated dependency to our pip mirror (you can request this in the PR). **Note:** These are the release guidelines for pre-production alpha releases. Production release tags must be signed with the SecureDrop release key. - 1. Update versions: `./update_version.sh $new_version_number`. +1. Update versions: `./update_version.sh $new_version_number` and add a new entry in the changelog. 2. Commit the changes with commit message `securedrop-proxy $new_version_number` and make a PR. 3. You should confirm via a manual debian package build and manual testing in Qubes that there are no regressions (this is limited pre-release QA). 4. Once your PR is approved, you can add a tag and push: `git tag $new_version_number`. + #### configuration The proxy script must be run with the path to its configuration file From 8945f4a88085103c039c60766e768c7bd2e5aa09 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 5 Jul 2019 10:54:34 -0700 Subject: [PATCH 211/751] backfill changelog entries --- MANIFEST.in | 1 + changelog.md | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/MANIFEST.in b/MANIFEST.in index 0c0916b5a..b024c622c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ include LICENSE include README.md include securedrop_proxy/VERSION +include changelog.md include config-example.yaml include qubes/securedrop.Proxy include build-requirements.txt diff --git a/changelog.md b/changelog.md index 825c32f0d..a97c31911 100644 --- a/changelog.md +++ b/changelog.md @@ -1 +1,28 @@ # Changelog + +## 0.1.4 + + * Update urllib3 to version 1.24.3 or later due to CVE-2019-11324 (#35) + * Remove pipenv in favor of pip-tools (#33) + +## 0.1.3 + + * Updated PyYAML to 5.1 and safe loading of YAML files + #24 and #25 + +## 0.1.2 + + * Update requirements: Remove dev requirements (#20), update wheel hashes + (#21) + +## 0.1.1-1 + + * Resolves venv paths in generated scripts (via dh-virtualenv) + +## 0.1.1 + + * Update requests to 2.20.0 + +## 0.1.0 + + * Initial release. (Closes: #XXX) From 70a99e7d8f2f0d7f17adc3f1196e9d38708b4fca Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 19 Jul 2019 13:49:01 -0700 Subject: [PATCH 212/751] Initial commit --- .gitignore | 104 +++++++++ LICENSE | 674 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + 3 files changed, 780 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..894a44cc0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 000000000..09ef02c90 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# securedrop-export +code for exporting from the securedrop qubes workstation From 0ed49544bfa356470a0dfb418c43b04351b1f77e Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Sun, 21 Jul 2019 12:53:02 -0700 Subject: [PATCH 213/751] Refactored send-to-usb script as a python module --- MANIFEST.in | 12 ++ build-requirements.txt | 0 changelog.md | 6 + files/application-x-sd-export.xml | 7 + files/sd-logo.png | Bin 0 -> 8606 bytes files/send-to-usb.desktop | 5 + requirements.txt | 0 securedrop_export/VERSION | 1 + securedrop_export/__init__.py | 0 securedrop_export/entrypoint.py | 23 +++ securedrop_export/export.py | 327 ++++++++++++++++++++++++++++++ securedrop_export/main.py | 37 ++++ setup.py | 35 ++++ test-requirements.txt | 1 + tests/__init__.py | 0 tests/test_export.py | 171 ++++++++++++++++ 16 files changed, 625 insertions(+) create mode 100644 MANIFEST.in create mode 100644 build-requirements.txt create mode 100644 changelog.md create mode 100644 files/application-x-sd-export.xml create mode 100644 files/sd-logo.png create mode 100644 files/send-to-usb.desktop create mode 100644 requirements.txt create mode 100644 securedrop_export/VERSION create mode 100644 securedrop_export/__init__.py create mode 100755 securedrop_export/entrypoint.py create mode 100755 securedrop_export/export.py create mode 100755 securedrop_export/main.py create mode 100644 setup.py create mode 100644 test-requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/test_export.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..8104f05fc --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,12 @@ +include LICENSE +include README.md +include securedrop_export/VERSION +include changelog.md +include build-requirements.txt +include requirements.txt +include securedrop_export/*.py +include setup.py +include files/send-to-usb.desktop +include files/application-x-sd-export.xml +include files/sd-logo.png + diff --git a/build-requirements.txt b/build-requirements.txt new file mode 100644 index 000000000..e69de29bb diff --git a/changelog.md b/changelog.md new file mode 100644 index 000000000..02c74ef5a --- /dev/null +++ b/changelog.md @@ -0,0 +1,6 @@ +securedrop-export (0.1.1-1) unstable; urgency=medium + + [ Freedom Of The Press Foundation ] + * Initial release + + -- SecureDrop Team Thu, 18 Jul 2019 10:47:38 -0700 diff --git a/files/application-x-sd-export.xml b/files/application-x-sd-export.xml new file mode 100644 index 000000000..9e36ef08b --- /dev/null +++ b/files/application-x-sd-export.xml @@ -0,0 +1,7 @@ + + + + Archive for transfering files from the SecureDrop workstation to an external USB device. + + + diff --git a/files/sd-logo.png b/files/sd-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..531cbf26c3426493616b7060338cc68d714bad1d GIT binary patch literal 8606 zcmZ`^dJohFV>TA-|aL|B2AbM>rHDh2*0lsJ|O5n=K zmG~MM$emU6R6wAHG}=ph3g9=dqn5EA2oxd+0!7AvK)-;g$nPMKzZeMg!wv+J&jo?l zyz<+OV89=g4mz4@puhh&eV{k66^1Ggjif-4f+s5qDdSki-;yff%&M=R5l6qp!tl_ z^yCr29y=_9s+}XwGQ_fDHczLf)vWexvm+-yQ|4ZKTWDFkMAebglfMe`ZO(V^?VvNe zuJ!{vkCj%kf^LJZPG~}{%#aN3O}dpOOvBxD1uOjF&p*$ z*SH5B9bY&10M#1VE{G4tZN0@}ykudi(PfO;QbdgGQazWM66}BkC(Fb=pgal2k@nz^ z1PJoZWZ9o3B7Y~mKjtPfiRF{x2aAJAp|+H@-VXp9kdcgFm?j38iOF<%Z1u1lE((02 z>SV0?=HbF?`HY+F_vJ{@EdN*t5ON~%{CqfCbF?jg?AF}>5+N0pd}I#UJ}ic3OIPA< zs{J8`(FS3uvA*u(vJ|Xu8F8eOAH;N7fD1hfPJ-n14eBRGhNcu28Bq<Z^{EE4Q4y%D~T+neO2b~^3m_>^ILi{VstE%QWO64dTu2g^JX5+QYeRLs%F@QJbTp_EATFzy%CxQ|0d3?uzhfw(28T?$79F2UTz#?*&>r7 zC0@-pLX&(-RZ749H!0qJfm^TJ_5(yCNvXw*`_o%{mTZei)ufa)zeXnd>aYcE|DuO^ z;9H`|(mqSR8T3WCam8Dlq@ptj0tImZbu>+Gm9^@u9ns!}D&6p(t47&&Ov zDMiDv(5xz|79*}#@>~8e1Sd725W>cl@^OZbi{=<*5W&!;B(^_MX3N@xxwIm}Zsd7K zmA?3?pm5{V4V&r*ZZf1ESW>cn!Jv#K^mKF$iXJ z-J;l${X?^$@6dInzfFaYjP#Kt3v0YbVFip)TjDMZ-AC%Z&j%aoe^Tgvh(hmr#YX4%9Ri@Kuqrq8826BAy~tF$U1-ZpmW6(}l>?zx_g^($YO(S_Xs>;V zoz*HGTRnVFe(CYaMyAr|8Hqd{{<$({HT{=e>#GE47dceIss5*in@Y{hCRpjp_i8Qv z1zjXmX~hs>q48v?#d?3akZo+mE+Bwm^22K+bK<2U8%Y;9O;bG``F)weAl*GEf-(Jg zk=*Y|_Qq2I?T}fq0~N?#9N>({zE9jb^av-5YczlV=>;)GL9+zYq%z#h>sW z``YvA>az-Oni;15u!`m+57aPG1rdWE3coTpM3Y8B$XWh^&hsIM*0?qJW7)i4(UJFw z^UA!kBHE1*0>_JsKO~!zTR<@KC7Ne=$tDl1-SN>fG@U zV*`&je&MyAF8^vR@N(hvx%eVoYunNNbBfOE?p0R8M8H$^Y~+`1KeaveN%3R`*0l%x zx4jR#pGO28|DNLXhj}oH=767`&3yA|wXkX#`{}ovc4f&I4cP~2~^qAGoz~6*8&tz{EPkgM|*pr ziniY?4pz4PzWe#nnG8tDOTqPMVyz!YxK%%|HiqswSPDkG0I74QeJ|Oe%z766s6ih{ zL9c?{@1*~XU3m?;1Bh2+mgMdc-F$LGszXm!HfnZf{Z0LGLiK)KM64_6_-EXYj=7JnB-)kZdz*%T*P{wkWuxnB6XYJ4Cj5oJ zJZ0A7%ts9x9mV!}X(J}^#Q*MJQZj)Q-snid=_Tgtn~&LmIE<_FzF2$GQ%rmx|5Hu-8hf0!f0uT# zX^ENVLwZ)YLEI*RzSN_%xj)1yOV@*JQi?iWh}fbzaql}qKu5wP(?rdQ-%bTS`5H;l z4DT{}($MD9ZVKa;X{3vruz%+B@?MUpug5m5xM(mspVgYd&eceGX0EPTEZO<-mxV9W zn3Z|Tcle`clTt>ASaWDMZq|0=vQ_6iJOYaIS^SUA0UQG46%Ms69n_PuI~LUKjFQLaUG^&U&a-qV9tuq#F#0HeSx_ifhvFBn3>5L@^ngv zBm(Bi!OagX6=gsY?Rc?M2zCpzae7*HGw)W@%LvBR*KA$*l!ZN?ZwNz33#!Bd9S8lG(AAEcIgezBAVYg0L!btGgjJAjvC!KQhT9do8u9&nNtndNwXg7fzR-hkWu=E@t zZCLw;_?wjc^U5E-%9nZ|T$_Jtb_R^dN4PLh-XlyX$S)|stE(0NvlLlB z15=Z~To3wrqJ|`!@Ys1XO#ir4el(lGT&SZs%x9d7u9G&cwxPMe8M$}+cXK#t6fXdG ziwvHH@QB;?KksJkT-Wi>)9YwIlg`kQ3wCjzC%WYIZsTNrL%94a;G<5<)`LRHg{w{YihM+&{! zP}ZqQVeKDn8V|X+0OtR|gucd~t2QfwS^3YfS}BQS znA%5F>SKs#k48$$2nTAHqs*0wCU#&(eNIw&I))Kr#xjN#Pd^6gkS(d^uZlaIRR~{B z^K5llsi;t0s~EDDjr{)(|A~UXipV-ix#4r6J4?kHP>r*77t90do9nOqPtOXMzdomv ziWr~!(MnZy!)*5HpeGUlprPCc zfc39k2E(}VT2?U+F;-1_&0nukzORLQB-?Mh?iM!);3Udi8#@~wM@Z^~ctriXKP-eA z^Ba+D_mIrgy2NKtB#^_dLHfFjTJx8iO?=6Al=s{ihc+MN8r=6;FP+sYXH6TWnvqnN zCWnr05|@1RzbMP4AT45q%BaXyKfv`gyZN=R#UTx$tUy=}df0>01{P)$!-(+grNOp| zsXMGYfPCa%KE4Wk8nSkuk(t7dKandpjlIQ9Z?;>5X{FLa-a4Cj!@6Ovd5lEPU{ zVRpqv=IX6%H`jNb-mNOXgZ^_pc?NKI4M5q4o{5w%M7oiP(33RuqH-1>ri1hK#^f ze{scid}EDif5>gTExJC__C=Y}GxU?OZGxSaH7 zT}T{mPsL4ULWCsQ7?WM08D9wo?g%EG_z3^T_55YbJ|tYII*CFZ)lQ zh&$a`Nq5T1&>dNc?}VWu{T4R!TrN-lsNL&1#a>>4wnVK2&{_?s1v@uM&8j=xnDy&H z-}aBM=Mzjm+8_RYm=90(-7wBWZ5!6z>^}a4SCfq#Sbw+dax1u2voXbvQHqJm`)W;k zEm7)Xk#YfU@wJAPKo_JT5<0(o+-6~w;CiiG z16?E3y$oD+1EyWCyyOIJ;>Cf;W39X^nRC7Vzl^4qrAmJLh7GNMc~(~sFCi|cUSZCg zV_njMQ7xamxijdP$NGvdQ&-n_?{VIRsoInU7hO^fOLYHLWLm}{Z4koAsYF+Q)bQ>; zz{3c-YtOz;k>+YC+^7b7Ff@%jh6dbg$(FWz8Tt}mATREcmm=Tz&W}^B$LI&o+MPQR z0H!icny%9-e3RID^Efm&Zq+4d_x(*&0pZ7nln$-P89uo4M#j!?~r~fD%@B?efY>2n|Zu z?Fy!x`=zp7Z+O|6{(4cyQ&djNpK)&vA_BeJtv_A#183MFM~bapJ|I7t4pTh)eM9j0 zCIC?krvaG3>biPck;18Z#c#iW(DdFrg0bO+s44pz)>Q17 z@w}c#b^`bgu*Kc1kh+hOa?HFODA^hB0vA3gx*Y-7$oLK$3Y{pHW8?5FB%mnZ*=e*` zMg;`~5^;3J==J#Gg|}k=P96Fn{JmzO!r@?4NXh8Y55d3#q;U2r&qbaq&C1AY%Pz$y zLL9EYgs@V20f7(h+&Ifk=|$<>2mJTYP!o!4e2o~o1J{TQ@7?^4r8-DeYpQ5y>l`ik zee?A6F8_&O0lSoFPCKUCiP0>hcPOf6lrFZ1VZ!AlA|%}_=%`g@UB3ij@os6x0>A6C zwNJUwj->mnmaViaJ~2?m(xlOQ&3CX-SF~ND**Jm@om!jt<6!^6#5tF51qEp_(=}&C zZj0>k69zZV(8bQT_P$lh<@|Q(8xukoLaeT))9MnCoT*WLGl{=l7rF0m$NH+h z^Zxjt$$j&|`&l<^6g5rJw0r$WpTdGY*idWmTHo z^rLTG{ywkb5H>w5oQgzm|(nmqvnGSa_}G^npYT@(YfzT7x{B6O3ml` zzAwDlefZQT@U2e;cEtV7&z_6@<;kJFbF@0WKzYUNsYL{l<>LcMNQSFJqUnL$ax|7d z;Dh5oxGyf;erpl#Zt_Ku(AAMuVhSZ3hS-wlInEdsZA%+1)*TVAo_{>DxaND@yXG78 z=^fb?FH!i_BPlfEnPAWInBe>_$F$FO18H$BrXB4N@0{USTU?7~Fq6OW?98J9g@3I( z%90`wx(5d@yzxuVh1&^Ub9BCE07TsLuD{7G$4|M-RmfCJDn+5Vu-=II=yJ==s{)$0 zt)j3Ah)0^{qGBp}n(WScK&aN}eR0l|rVf-q;X;wk!i#UtUE_zYye?3j!-H%59EJZZ zVY(O!wV-%!_IURx&fQ5y3-EpKwU#Ax6jvC?rY-1*SL+`P zWkiF;{rSe&w>&s-N^Pic#AMNlGqc7|-B1@`H4v9%L3(<=wQ@>%+f<5a9d=g&-S2~wFfz>w;u{4#-m&!jXkPm6#ut`V zAceetqob=oPgHBCKAk5g1S2dRx}Le-9)o+@bnhu%1uM+Z>i}z?$Rr~2=I7bl+u=a$ zo8A?u9w3N^F0T$%+yr>);?-<-?>$rxK-mY#k4)oSMe}tcTuk^6!=wN1vdnF;Vnn7l z1m$G#KmyoLjV!m6vnpbNlf`!20wgz?Y_bmG8$7bx6W3327ZwzHY1R2=ZLJm3U37+8 zxNr*rTOZK*(F?hxFcDi8xi^hz)%d&v0*(Nuy*I-d#0)GyZ96^MQF9!UyyYDtGWjS% zw7|e;`_U^e^WEczJL&8IB%c2Gu<%P6nV5MtY0hUI{(;N|J$gy`dwSTB$R4LsKG|)g zNvH4E)+RDZYBN@-wtOci`LJ&rAD}wB`%i#0O804cjh!WXU z()B@6=Fp)Tr_`Fue!Co5jYeIdw-HhgS&I(rzIIXEHwv$U)_E}Wg~IBotITS=b~ev| z-9{qE2J!3}WiUJO{1VuPw4mr+ks$*NG$Zk5t&O&1;VXtx+H9!Khh_$u72Aygj9Ew; z3x{d+medl$-&sMkp&sWBdGLY%BS`UuU8MElVLBA|>FDT-SDtvlWb9sngi^?h*prlk zViGb{-IzY+g;ZIGc8n^7LkMLFfr-mq4;p*93m@WLVPx%FQw-!m0M*-n%P#(DhYSbu z@tq+V5R|?qf8m0iXW&~csER~0aV_jreAot=jg#JgICA6_oN3uX?FHQ`Pjwv<8JubU z=u+R(qz=hOh)NrXNga}+Z&x_WRm=nv#Rj4`VAFrr4=y7<`R93%p#$300~}+Q3iKQf zJy(d^KkBU{+(^2llCtH@>08y&d)@L0@YGIo%lN=f_wKM$&;gi%Hhf z{}?*#VPjg=9MsY_1Z?V$OEWR8XfL7atIvNJ=az>vwaOBOOwRu}mq_*+AwGX``CwtO zw6-5j7rS;f$ibO{;OyphX)QX0f$hC8A2Jd_7mxoP(%JSRwtZPB9btg8C9n zuqNEYKCwfXwMHKsBPYxtIn4bvCUcn@KW8Ne5wwe)Ik&f}vt8xASk5_!*1U}7KMIsC zJV7%+Q^*2*ML|4>!jsvOimrl!?r!k?o|d?{r1V`nHWr-?;>7P=go10y?9J=ux`f+A zg{2i-WH39>ORJgmTNSVE{4;ioPzYKfjktNPfQ9kL4M^$Hv@g6#3VnDVKjPl&z16aZ zn_sH(+Oh$9rXn0EA5H8UB5(9M|Mn-4*um(tmvhl4OLd)p7!tCkaa2Ky;E{*;P_Bi+ zcDx2q&v}Q!5He=q;Xo+v+iSMHJ$8=S9a>#HbJz)Xs zNfsD67T@i#(^?0#SU7`jH0b_?zGgpxVpYznRam~+tB`?>Ca!+JFQ*#3&8lEaw!9^0 zx1F;6Ua5mN4SY^TiZ&pdFv1UuN$I+9{imm9v9Us;MEYSXwr>XeJ#h7ql!xp}lt^tC zFeNFKpnp?J0sBJZ`erBNhcud`n&MuZs4Pg4u#R0JTP7*fkTN3Mexqyx>I7eM68@6Z zsMt41PrY^LfsqjE_y`xA%I7hH&xARAT^?g!fIDd}d5WmTpmu~@GsSQsc~l`~M8|LE z?{j6(5;#m;DzSe-5iIA9MGT(-SsKcY!-+9bh3abP!bfU+1J6c^Do9==BtZYt&c(0) zs|~A3eiKmS5e&@1R}y?+pZtFEJb7XlbNU7&Q~IX4eS`nI*l5KdC#I@uzy=!Com~9! zs*~hb_xTzx75U=jn9bc&{`)!wHXuKz=r#VspU{RM+%R;p#1`H*Q(YlDB_IG@zFb4{ zz`WIv7f+*R*^85yxWFltmlW^DjtV26v(p1jCY#wfZrHWgjMtRAf_Hz?qB6#r>o^Q)9R6uY^|$%Zr&!t>SGEhKch13PmHVds5=D91RCNoCx)? zQ|TC?Zl%&BPa#=U-<9tISFekiyUShUfLjM4Vtk3TRJ1=RQs>o!dd71TSZ=R?IupHc zDE%1V7+Bme4aN(^{P{^s#kSgj^?fv+3vicV#=@|x^>ZAwF7E!TMv?at;4|&mp85gr zk#X|`7T$x~9_nX7l$iWXDKnt4)KkJY<~q+hHC5m5s|(!l->E_Z8=+>nQ-gmPaM_g10oM|Y%7mg zBz#O;{sut4si-q?F7F)TP_@=7MeY(HC#L-8rm7cCPP_b{0a&Ln%mK+=)VfMLXN({{ z=7z-cC%t8B(?W2!{dwa7@3)r!9cXV=8{8z;LxsahO@h@p~|_} zUuI$*lYdTwu1}$Qxx|;BJFk<79;S_iKgH`)74iLM zJh0mYXC_QdS6t*a^FuNze{zT|#g&kdOQg@sF*-nL0!le|`NggCdyy+wJz(WY<=p13 zS7M$ytGif-oe`it$cT0&Y%y2WbdjHHxG&O zwCVgAcK{&VG8=g%x5QwWQ2G-EL^|q!#n7IV>hd}{(o_uJINDi})H~)(c(sp;@0\n".format(test_msg) + assert captured.out == "" + + +def test_empty_config(capsys): + submission = export.SDExport("testfile") + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write("{}") + config = export.Metadata(temp_folder) + assert not config.is_valid() + + +def test_valid_printer_test_config(capsys): + submission = export.SDExport("testfile") + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "printer-test"}') + config = export.Metadata(temp_folder) + assert config.is_valid() + assert config.encryption_key is None + assert config.encryption_method is None + + +def test_valid_printer_config(capsys): + submission = export.SDExport("") + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "printer"}') + config = export.Metadata(temp_folder) + assert config.is_valid() + assert config.encryption_key is None + assert config.encryption_method is None + + +def test_invalid_encryption_config(capsys): + submission = export.SDExport("testfile") + + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write( + '{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}' + ) + config = export.Metadata(temp_folder) + assert config.encryption_key == "hunter1" + assert config.encryption_method == "base64" + assert not config.is_valid() + + +def test_valid_encryption_config(capsys): + submission = export.SDExport("testfile") + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write( + '{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}' + ) + config = export.Metadata(temp_folder) + assert config.encryption_key == "hunter1" + assert config.encryption_method == "luks" + assert config.is_valid() + + +@mock.patch("subprocess.check_call") +def test_popup_message(mocked_call): + submission = export.SDExport("testfile") + submission.popup_message("hello!") + mocked_call.assert_called_once_with([ + "notify-send", + "--expire-time", "3000", + "--icon", "/usr/share/securedrop/icons/sd-logo.png", + "SecureDrop: hello!" + ]) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BOTHER_PRINTER) +def test_get_good_printer_uri(mocked_call): + submission = export.SDExport("testfile") + result = submission.get_printer_uri() + assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) +def test_get_bad_printer_uri(mocked_call, capsys): + submission = export.SDExport("testfile") + expected_message = "USB Printer not found" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + + with pytest.raises(SystemExit) as sysexit: + result = submission.get_printer_uri() + assert result == "" + mocked_exit.assert_called_once_with(expected_message) + + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + assert captured.out == "" + + +@pytest.mark.parametrize('open_office_paths', [ + "/tmp/whatver/thisisadoc.doc" + "/home/user/Downloads/thisisadoc.xlsx" + "/home/user/Downloads/file.odt" + "/tmp/tmpJf83j9/secret.pptx" +]) +def test_is_open_office_file(capsys, open_office_paths): + submission = export.SDExport("") + assert submission.is_open_office_file(open_office_paths) + + +@pytest.mark.parametrize('open_office_paths', [ + "/tmp/whatver/thisisadoc.doccc" + "/home/user/Downloads/thisisa.xlsx.zip" + "/home/user/Downloads/file.odz" + "/tmp/tmpJf83j9/secret.gpg" +]) +def test_is_not_open_office_file(capsys, open_office_paths): + submission = export.SDExport("") + assert not submission.is_open_office_file(open_office_paths) From 8806ea1968a5f2d75f448f3652089c2d3bdc81ba Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Tue, 23 Jul 2019 14:52:35 -0700 Subject: [PATCH 214/751] fixed disk export location --- securedrop_export/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index c40ee2f1d..f5ce56a95 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -168,7 +168,7 @@ def copy_submission(self): target_path = os.path.join(self.mountpoint, self.target_dirname) subprocess.check_call(["mkdir", target_path]) export_data = os.path.join( - self.tmpdir, self.submission_dirname, "export_data/" + self.tmpdir, "export_data/" ) subprocess.check_call(["cp", "-r", export_data, target_path]) self.popup_message("Files exported successfully to disk.") From 0cba8e2d71a29df217dce1dbc381007c0187b96b Mon Sep 17 00:00:00 2001 From: mickael e Date: Mon, 22 Jul 2019 10:39:58 -0400 Subject: [PATCH 215/751] Add makefile and ci for tests --- .circleci/config.yml | 35 ++++++++++++++++++ Makefile | 32 +++++++++++++++++ README.md | 3 ++ test-requirements.in | 1 + test-requirements.txt | 84 ++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 .circleci/config.yml create mode 100644 Makefile create mode 100644 test-requirements.in diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..baae95224 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,35 @@ +version: 2 +jobs: + build: + docker: + - image: circleci/python:3.5-stretch + steps: + - checkout + + test: + docker: + - image: circleci/python:3.5 + steps: + - checkout + - run: + name: Install packages + command: | + sudo apt install libnotify-bin + - run: + name: Install test requirements and run tests + command: | + virtualenv .venv + source .venv/bin/activate + pip install --require-hashes -r test-requirements.txt + make test + - run: + name: Check Python dependencies for CVEs + command: | + set -e + source .venv/bin/activate + make safety +workflows: + version: 2 + securedrop_export_ci: + jobs: + - test diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..2ee2e801d --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +.PHONY: safety +safety: ## Runs `safety check` to check python dependencies for vulnerabilities + pip install --upgrade safety && \ + for req_file in `find . -type f -name '*requirements.txt'`; do \ + echo "Checking file $$req_file" \ + && safety check --full-report -r $$req_file \ + && echo -e '\n' \ + || exit 1; \ + done + +.PHONY: update-pip-requirements +update-pip-requirements: ## Updates all Python requirements files via pip-compile. + pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in + +.PHONY: test +test: + pytest -v tests/ + +# Explaination of the below shell command should it ever break. +# 1. Set the field separator to ": ##" and any make targets that might appear between : and ## +# 2. Use sed-like syntax to remove the make targets +# 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption +# 4. Pass this file as an arg to awk +# 5. Sort it alphabetically +# 6. Format columns with colon as delimiter. +.PHONY: help +help: ## Print this message and exit. + @printf "Makefile for developing and testing the SecureDrop proxy.\n" + @printf "Subcommands:\n\n" + @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ + | sort \ +| column -s ':' -t diff --git a/README.md b/README.md index 09ef02c90..f8a0bd6df 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ +[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-export.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-export) + # securedrop-export + code for exporting from the securedrop qubes workstation diff --git a/test-requirements.in b/test-requirements.in new file mode 100644 index 000000000..e079f8a60 --- /dev/null +++ b/test-requirements.in @@ -0,0 +1 @@ +pytest diff --git a/test-requirements.txt b/test-requirements.txt index e079f8a60..073600a7a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1 +1,83 @@ -pytest +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in +# +atomicwrites==1.3.0 \ + --hash=sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4 \ + --hash=sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6 \ + # via pytest +attrs==19.1.0 \ + --hash=sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79 \ + --hash=sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399 \ + # via pytest +configparser==3.7.4 \ + --hash=sha256:8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32 \ + --hash=sha256:da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75 \ + # via importlib-metadata +contextlib2==0.5.5 \ + --hash=sha256:509f9419ee91cdd00ba34443217d5ca51f5a364a404e1dce9e8979cea969ca48 \ + --hash=sha256:f5260a6e679d2ff42ec91ec5252f4eeffdcf21053db9113bd0a8e4d953769c00 \ + # via importlib-metadata +funcsigs==1.0.2 \ + --hash=sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca \ + --hash=sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50 \ + # via pytest +importlib-metadata==0.18 \ + --hash=sha256:6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7 \ + --hash=sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db \ + # via pluggy, pytest +more-itertools==5.0.0 \ + --hash=sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4 \ + --hash=sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc \ + --hash=sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9 \ + # via pytest +packaging==19.0 \ + --hash=sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af \ + --hash=sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3 \ + # via pytest +pathlib2==2.3.4 \ + --hash=sha256:2156525d6576d21c4dcaddfa427fae887ef89a7a9de5cbfe0728b3aafa78427e \ + --hash=sha256:446014523bb9be5c28128c4d2a10ad6bb60769e78bd85658fe44a450674e0ef8 \ + # via importlib-metadata, pytest +pluggy==0.12.0 \ + --hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \ + --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c \ + # via pytest +py==1.8.0 \ + --hash=sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa \ + --hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53 \ + # via pytest +pyparsing==2.4.1 \ + --hash=sha256:530d8bf8cc93a34019d08142593cf4d78a05c890da8cf87ffa3120af53772238 \ + --hash=sha256:f78e99616b6f1a4745c0580e170251ef1bbafc0d0513e270c4bd281bf29d2800 \ + # via packaging +pytest==4.6.4 \ + --hash=sha256:6aa9bc2f6f6504d7949e9df2a756739ca06e58ffda19b5e53c725f7b03fb4aae \ + --hash=sha256:b77ae6f2d1a760760902a7676887b665c086f71e3461c64ed2a312afcedc00d6 +scandir==1.10.0 \ + --hash=sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e \ + --hash=sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022 \ + --hash=sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f \ + --hash=sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f \ + --hash=sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae \ + --hash=sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173 \ + --hash=sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4 \ + --hash=sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32 \ + --hash=sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188 \ + --hash=sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d \ + --hash=sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac \ + # via pathlib2 +six==1.12.0 \ + --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ + --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ + # via more-itertools, packaging, pathlib2, pytest +wcwidth==0.1.7 \ + --hash=sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e \ + --hash=sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c \ + # via pytest +zipp==0.5.2 \ + --hash=sha256:4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a \ + --hash=sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec \ + # via importlib-metadata From 056b8ad570d57de7e8634abb236a9a39538287d9 Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 23 Jul 2019 18:41:39 -0400 Subject: [PATCH 216/751] Add update-version.sh script --- update-version.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100755 update-version.sh diff --git a/update-version.sh b/update-version.sh new file mode 100755 index 000000000..983fd4e8d --- /dev/null +++ b/update-version.sh @@ -0,0 +1,26 @@ +#!/bin/bash +## Usage: ./update_version.sh + +set -e + +readonly NEW_VERSION=$1 + +if [ -z "$NEW_VERSION" ]; then + echo "You must specify the new version!" + exit 1 +fi + +# Get the old version from securedrop_export/VERSION +OLD_VERSION=$(cat securedrop_export/VERSION) +if [ -z "$OLD_VERSION" ]; then + echo "Couldn't find the old version: does this script need to be updated?" + exit 1 +fi + +# Update the version in securedrop_export/VERSION (setup.py is done automatically) +if [[ "$OSTYPE" == "darwin"* ]]; then + # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. + sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/VERSION +else + sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/VERSION +fi From eba6ec1f311a7ca3335869bd6ab31b921d1b0eb6 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 25 Jul 2019 09:24:26 -0400 Subject: [PATCH 217/751] Rename update-version.sh for consistency. Other repos use update_version.sh: https://github.com/freedomofpress/securedrop-client/ https://github.com/freedomofpress/securedrop-proxy/ --- update-version.sh => update_version.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename update-version.sh => update_version.sh (100%) diff --git a/update-version.sh b/update_version.sh similarity index 100% rename from update-version.sh rename to update_version.sh From 73c3d77bcd980cfa5878405d27ba31b20fa072c7 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 25 Jul 2019 09:31:11 -0400 Subject: [PATCH 218/751] Update pyparsing to 2.4.1.1 2.4.1 was no longer available on pypi: https://circleci.com/gh/freedomofpress/securedrop-export/27 --- test-requirements.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test-requirements.txt b/test-requirements.txt index 073600a7a..c1a39ee1b 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -49,10 +49,9 @@ py==1.8.0 \ --hash=sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa \ --hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53 \ # via pytest -pyparsing==2.4.1 \ - --hash=sha256:530d8bf8cc93a34019d08142593cf4d78a05c890da8cf87ffa3120af53772238 \ - --hash=sha256:f78e99616b6f1a4745c0580e170251ef1bbafc0d0513e270c4bd281bf29d2800 \ - # via packaging +pyparsing==2.4.1.1 \ + --hash=sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580 \ + --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 pytest==4.6.4 \ --hash=sha256:6aa9bc2f6f6504d7949e9df2a756739ca06e58ffda19b5e53c725f7b03fb4aae \ --hash=sha256:b77ae6f2d1a760760902a7676887b665c086f71e3461c64ed2a312afcedc00d6 From 9763192a3bb269775fcd1f07e6aadca85d5ea9c6 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 24 Jul 2019 09:15:59 -0400 Subject: [PATCH 219/751] Provides usb preflight checks Also check if a USB device is connected via `usb-test` action: * returns `USB_CONNECTED` if a device is connected to sd-export Qube * returns `USB_NOT_CONNECTED` if a device is not connnected to sd-export Qube Also checks if a Drive is LUKS-encrypted via `disk-test` action: * returns `USB_ENCRYPTED` if the usb device is LUKS-encrypted * returns `USB_NO_SUPPORTED_ENCRYPTION` if the usb device is not LUKS-encrypted --- securedrop_export/export.py | 45 +++++++++++++++++++- securedrop_export/main.py | 6 ++- tests/test_export.py | 82 +++++++++++++++++++++++++++++++++---- 3 files changed, 122 insertions(+), 11 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index f5ce56a95..e1343c5cf 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -18,7 +18,7 @@ ENCRYPTED_DEVICE = "encrypted_volume" BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" - +PCI_BUS_ID = "002:" class Metadata(object): """ @@ -26,7 +26,13 @@ class Metadata(object): """ METADATA_FILE = "metadata.json" - SUPPORTED_EXPORT_METHODS = ["disk", "printer", "printer-test"] + SUPPORTED_EXPORT_METHODS = [ + "usb-test", # general preflight check + "disk", + "disk-test", # disk preflight test + "printer", + "printer-test" # print test page + ] SUPPORTED_ENCRYPTION_METHODS = ["luks"] def __init__(self, archive_path): @@ -119,6 +125,41 @@ def extract_tarball(self): self.exit_gracefully(msg, e=e) + def check_usb_connected(self): + # Rely on the output of lsusb on the bus assigned to. We might need to make this variable configurable + # In the future and extracted from config.json + p = subprocess.check_output(["lsusb", "-s", PCI_BUS_ID]) + # Empty string means a likely wrong PCI_BUS_ID + if p == "": + msg = "ERROR_USB_CHECK" + self.exit_gracefully(msg) + n_usb = len(p.rstrip().split("\n")) + # If there is one device, it is the root hub. + if n_usb == 1: + msg = "USB_NOT_CONNECTED" + self.exit_gracefully(msg) + # If there are two devices, it's the root hub and another device (presumably for export) + elif n_usb == 2: + msg = "USB_CONNECTED" + self.exit_gracefully(msg) + # Else the result is unexpected + else: + msg = "ERROR_USB_CHECK" + self.exit_gracefully(msg) + + + def check_luks_volume(self): + try: + # cryptsetup isLuks returns 0 if the device is a luks volume + # subprocess with throw if the device is not luks (rc !=0) + p = subprocess.check_call(["sudo", "cryptsetup", "isLuks", DEVICE]) + msg = "USB_ENCRYPTED" + self.exit_gracefully(msg) + except subprocess.CalledProcessError as e: + msg = "USB_NO_SUPPORTED_ENCRYPTION" + self.exit_gracefully(msg) + + def unlock_luks_volume(self, encryption_key): # the luks device is not already unlocked if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 79b5d721d..58dca3e02 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -14,11 +14,15 @@ def __main__(submission): submission.exit_gracefully(msg, e=e) if submission.archive_metadata.is_valid(): - if submission.archive_metadata.export_method == "disk": + if submission.archive_metadata.export_method == "usb-test": + submission.check_usb_connected() + elif submission.archive_metadata.export_method == "disk": # exports all documents in the archive to luks-encrypted volume submission.unlock_luks_volume(submission.archive_metadata.encryption_key) submission.mount_volume() submission.copy_submission() + elif submission.archive_metadata.export_method == "disk-test": + submission.check_luks_volume() elif submission.archive_metadata.export_method == "printer": # prints all documents in the archive printer_uri = submission.get_printer_uri() diff --git a/tests/test_export.py b/tests/test_export.py index 85dbcd258..577667ee5 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -2,6 +2,7 @@ import os import pytest +import subprocess import tempfile from securedrop_export import export @@ -9,14 +10,10 @@ SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa - -# This below stanza is only necessary because the export code is not -# structured as a module. If a Python module were created called -# `export`, we could simply do `import export` -# path_to_script = os.path.join( -# os.path.dirname(os.path.abspath(__file__)), "send-to-usb" -# ) -# securedropexport = imp.load_source("send-to-usb", path_to_script) +SAMPLE_OUTPUT_NO_USB="Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa +SAMPLE_OUTPUT_USB="Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa +SAMPLE_OUTPUT_USB_ERROR="" +SAMPLE_OUTPUT_USB_ERROR2="h\ne\nl\nl\no" def test_exit_gracefully_no_exception(capsys): @@ -169,3 +166,72 @@ def test_is_open_office_file(capsys, open_office_paths): def test_is_not_open_office_file(capsys, open_office_paths): submission = export.SDExport("") assert not submission.is_open_office_file(open_office_paths) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_USB) +def test_usb_precheck_connected(mocked_call, capsys): + submission = export.SDExport("testfile") + expected_message = "USB_NOT_CONNECTED" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + with pytest.raises(SystemExit) as sysexit: + result = submission.check_usb_connected() + mocked_exit.assert_called_once_with(expected_message) + + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) +def test_usb_precheck_disconnected(mocked_call, capsys): + submission = export.SDExport("testfile") + expected_message = "USB_CONNECTED" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + with pytest.raises(SystemExit) as sysexit: + result = submission.check_usb_connected() + mocked_exit.assert_called_once_with(expected_message) + + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB_ERROR) +def test_usb_precheck_error(mocked_call, capsys): + submission = export.SDExport("testfile") + expected_message = "ERROR_USB_CHECK" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + with pytest.raises(SystemExit) as sysexit: + result = submission.check_usb_connected() + mocked_exit.assert_called_once_with(expected_message) + + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB_ERROR2) +def test_usb_precheck_error_2(mocked_call, capsys): + submission = export.SDExport("testfile") + expected_message = "ERROR_USB_CHECK" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + with pytest.raises(SystemExit) as sysexit: + result = submission.check_usb_connected() + mocked_exit.assert_called_once_with(expected_message) + + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + + +@mock.patch("subprocess.check_call") +def test_luks_precheck_encrypted(mocked_call, capsys): + submission = export.SDExport("testfile") + expected_message = "USB_ENCRYPTED" + with pytest.raises(SystemExit) as sysexit: + result = submission.check_luks_volume() + mocked_exit.assert_called_once_with(expected_message) + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + From f511756937092823415ee0710cc6a581e4ecd55f Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 25 Jul 2019 12:58:34 -0400 Subject: [PATCH 220/751] Standardize error messages for sd-export All errors return codes are now prefixed with `ERROR_` --- securedrop_export/export.py | 23 +++++++++-------------- securedrop_export/main.py | 4 ++-- tests/test_export.py | 2 +- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index e1343c5cf..46fba8ab2 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -98,7 +98,6 @@ def exit_gracefully(self, msg, e=False): sys.stderr.write("\n") # exit with 0 return code otherwise the os will attempt to open # the file with another application - self.popup_message("Export error: {}".format(msg)) sys.exit(0) @@ -172,7 +171,7 @@ def unlock_luks_volume(self, encryption_key): p.communicate(input=str.encode(encryption_key, "utf-8")) rc = p.returncode if rc != 0: - msg = "Bad passphrase or luks error." + msg = "USB_BAD_PASSPHRASE" self.exit_gracefully(msg) @@ -199,7 +198,7 @@ def mount_volume(self): except subprocess.CalledProcessError as e: # clean up subprocess.check_call(["sudo", "cryptsetup", "luksClose", self.encrypted_device]) - msg = "An error occurred while mounting disk: " + msg = "ERROR_USB_MOUNT" self.exit_gracefully(msg, e=e) @@ -214,7 +213,7 @@ def copy_submission(self): subprocess.check_call(["cp", "-r", export_data, target_path]) self.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError) as e: - msg = "Error writing to disk:" + msg = "ERROR_USB_WRITE" self.exit_gracefully(msg, e=e) finally: # Finally, we sync the filesystem, unmount the drive and lock the @@ -254,7 +253,7 @@ def get_printer_uri(self): try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError as e: - msg = "Error retrieving printer uri." + msg = "ERROR_PRINTER_URI" self.exit_gracefully(msg, e=e) # fetch the usb printer uri @@ -265,12 +264,12 @@ def get_printer_uri(self): # verify that the printer is supported, else exit if printer_uri == "": # No usb printer is connected - self.exit_gracefully("USB Printer not found") + self.exit_gracefully("ERROR_PRINTER_NOT_FOUND") elif "Brother" in printer_uri: return printer_uri else: # printer url is a make that is unsupported - self.exit_gracefully("USB Printer not supported") + self.exit_gracefully("ERROR_PRINTER_NOT_SUPPORTED") def install_printer_ppd(self, uri): @@ -281,7 +280,7 @@ def install_printer_ppd(self, uri): ["sudo", "ppdc", self.brlaser_driver, "-d", "/usr/share/cups/model/"] ) except subprocess.CalledProcessError as e: - msg = "Error installing ppd file for printer {}.".format(uri) + msg = "ERROR_PRINTER_DRIVER_INSTALL" self.exit_gracefully(msg, e=e) return self.brlaser_ppd # Here, we could support ppd drivers for other makes or models in the future @@ -309,9 +308,7 @@ def setup_printer(self, printer_uri, printer_ppd): ["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"] ) except subprocess.CalledProcessError as e: - msg = "Error setting up printer {} at {} using {}.".format( - self.printer_name, printer_uri, printer_ppd - ) + msg = "ERROR_PRINTER_INSTALL" self.exit_gracefully(msg, e=e) @@ -354,9 +351,7 @@ def print_file(self, file_to_print): subprocess.check_call(["xpp", "-P", self.printer_name, file_to_print]) except subprocess.CalledProcessError as e: - msg = "Error printing file {} with printer {}.".format( - file_to_print, self.printer_name - ) + msg = "ERROR_PRINT" self.exit_gracefully(msg, e=e) ## class ends here diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 58dca3e02..a0b830c7a 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -10,7 +10,7 @@ def __main__(submission): try: submission.archive_metadata = export.Metadata(submission.tmpdir) except Exception as e: - msg = "Error parsing metadata: " + msg = "ERROR_METADATA_PARSING" submission.exit_gracefully(msg, e=e) if submission.archive_metadata.is_valid(): @@ -36,6 +36,6 @@ def __main__(submission): submission.setup_printer(printer_uri, printer_ppd) submission.print_test_page() else: - submission.exit_gracefully("Archive metadata is invalid") + submission.exit_gracefully("ERROR_ARCHIVE_METADATA") diff --git a/tests/test_export.py b/tests/test_export.py index 577667ee5..00996c9a3 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -132,7 +132,7 @@ def test_get_good_printer_uri(mocked_call): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) def test_get_bad_printer_uri(mocked_call, capsys): submission = export.SDExport("testfile") - expected_message = "USB Printer not found" + expected_message = "ERROR_PRINTER_NOT_FOUND" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: From 8cfa3bdc68b2541ca24ef24e31dc11fe97b93f34 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 1 Aug 2019 16:20:54 -0400 Subject: [PATCH 221/751] Add more return codes for errors --- securedrop_export/entrypoint.py | 6 ++--- securedrop_export/export.py | 43 ++++++++++++++++----------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index 9958d5d05..fbdec17d1 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -11,7 +11,7 @@ def start(): try: # Halt immediately if target file is absent if not os.path.exists(my_sub.archive): - msg = "File does not exist" + msg = "ERROR_FILE_NOT_FOUND" my_sub.exit_gracefully(msg) main.__main__(my_sub) # Delete extracted achive from tempfile @@ -19,5 +19,5 @@ def start(): except Exception as e: # exit with 0 return code otherwise the os will attempt to open # the file with another application - msg = "Unhandled exception:" - my_sub.exit_gracefully(msg, e=e) + msg = "ERROR_GENERIC" + my_sub.exit_gracefully(msg) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 46fba8ab2..12f918fbf 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -118,10 +118,9 @@ def extract_tarball(self): try: with tarfile.open(self.archive) as tar: tar.extractall(self.tmpdir) - except Exception as e: - print (e) - msg = "Error opening export bundle: " - self.exit_gracefully(msg, e=e) + except Exception: + msg = "ERROR_EXTRACTION" + self.exit_gracefully(msg) def check_usb_connected(self): @@ -154,7 +153,7 @@ def check_luks_volume(self): p = subprocess.check_call(["sudo", "cryptsetup", "isLuks", DEVICE]) msg = "USB_ENCRYPTED" self.exit_gracefully(msg) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: msg = "USB_NO_SUPPORTED_ENCRYPTION" self.exit_gracefully(msg) @@ -195,11 +194,11 @@ def mount_volume(self): "-R", "user:user", self.mountpoint, ] ) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: # clean up subprocess.check_call(["sudo", "cryptsetup", "luksClose", self.encrypted_device]) msg = "ERROR_USB_MOUNT" - self.exit_gracefully(msg, e=e) + self.exit_gracefully(msg) def copy_submission(self): @@ -212,9 +211,9 @@ def copy_submission(self): ) subprocess.check_call(["cp", "-r", export_data, target_path]) self.popup_message("Files exported successfully to disk.") - except (subprocess.CalledProcessError, OSError) as e: + except (subprocess.CalledProcessError, OSError): msg = "ERROR_USB_WRITE" - self.exit_gracefully(msg, e=e) + self.exit_gracefully(msg) finally: # Finally, we sync the filesystem, unmount the drive and lock the # luks volume, and exit 0 @@ -238,12 +237,12 @@ def wait_for_print(self): return True else: time.sleep(5) - except subprocess.CalledProcessError as e: - msg = "Error while retrieving print status" - self.exit_gracefully(msg, e=e) - except TimeoutException as e: - msg = "Timeout when getting printer information" - self.exit_gracefully(msg, e=e) + except subprocess.CalledProcessError: + msg = "ERROR_PRINT" + self.exit_gracefully(msg) + except TimeoutException: + msg = "ERROR_PRINT" + self.exit_gracefully(msg) return True @@ -254,7 +253,7 @@ def get_printer_uri(self): output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError as e: msg = "ERROR_PRINTER_URI" - self.exit_gracefully(msg, e=e) + self.exit_gracefully(msg) # fetch the usb printer uri for line in output.split(): @@ -279,9 +278,9 @@ def install_printer_ppd(self, uri): subprocess.check_call( ["sudo", "ppdc", self.brlaser_driver, "-d", "/usr/share/cups/model/"] ) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: msg = "ERROR_PRINTER_DRIVER_INSTALL" - self.exit_gracefully(msg, e=e) + self.exit_gracefully(msg) return self.brlaser_ppd # Here, we could support ppd drivers for other makes or models in the future @@ -307,9 +306,9 @@ def setup_printer(self, printer_uri, printer_ppd): subprocess.check_call( ["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"] ) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: msg = "ERROR_PRINTER_INSTALL" - self.exit_gracefully(msg, e=e) + self.exit_gracefully(msg) def print_test_page(self): @@ -350,9 +349,9 @@ def print_file(self, file_to_print): file_to_print = converted_path subprocess.check_call(["xpp", "-P", self.printer_name, file_to_print]) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: msg = "ERROR_PRINT" - self.exit_gracefully(msg, e=e) + self.exit_gracefully(msg) ## class ends here class TimeoutException(Exception): From bee4790b4d8d5aaf7a69f3b4674057e4e598e7cf Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 1 Aug 2019 16:50:52 -0400 Subject: [PATCH 222/751] Address review comments Configurable PCI_DEVICE_ID will be populated at provision time by salt logic --- securedrop_export/entrypoint.py | 3 +- securedrop_export/export.py | 26 ++++++----- securedrop_export/main.py | 13 ++---- tests/sd-export-config-bad-2.json | 3 ++ tests/sd-export-config-bad.json | 3 ++ tests/sd-export-config.json | 3 ++ tests/test_export.py | 72 +++++++++++++++++++++++-------- 7 files changed, 83 insertions(+), 40 deletions(-) create mode 100644 tests/sd-export-config-bad-2.json create mode 100644 tests/sd-export-config-bad.json create mode 100644 tests/sd-export-config.json diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index fbdec17d1..c5b22494e 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -5,9 +5,10 @@ from securedrop_export import export from securedrop_export import main +CONFIG_PATH = "/etc/sd-export-config.json" def start(): - my_sub = export.SDExport(sys.argv[1]) + my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) try: # Halt immediately if target file is absent if not os.path.exists(my_sub.archive): diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 12f918fbf..7fe7fa513 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -18,7 +18,6 @@ ENCRYPTED_DEVICE = "encrypted_volume" BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" -PCI_BUS_ID = "002:" class Metadata(object): """ @@ -37,12 +36,14 @@ class Metadata(object): def __init__(self, archive_path): self.metadata_path = os.path.join(archive_path, self.METADATA_FILE) + try: with open(self.metadata_path) as f: json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) self.encryption_method = json_config.get("encryption_method", None) self.encryption_key = json_config.get("encryption_key", None) + except Exception as e: raise @@ -58,7 +59,7 @@ def is_valid(self): class SDExport(object): - def __init__(self, archive): + def __init__(self, archive, config_path): self.device = DEVICE self.mountpoint = MOUNTPOINT self.encrypted_device = ENCRYPTED_DEVICE @@ -68,14 +69,21 @@ def __init__(self, archive): self.brlaser_driver = BRLASER_DRIVER self.brlaser_ppd = BRLASER_PPD - + self.archive = archive - self.submission_dirname = os.path.basename(self.archive).split(".")[0] + self.submission_dirname = os.path.basename(self.archive).split(".")[0] self.target_dirname = "sd-export-{}".format( datetime.datetime.now().strftime("%Y%m%d-%H%M%S") ) self.tmpdir = tempfile.mkdtemp() + try: + with open(config_path) as f: + json_config = json.loads(f.read()) + self.pci_bus_id = int(json_config.get("pci_bus_id", 2)) + except Exception as e: + self.exit_gracefully("ERROR_CONFIG") + def exit_gracefully(self, msg, e=False): """ @@ -124,10 +132,8 @@ def extract_tarball(self): def check_usb_connected(self): - # Rely on the output of lsusb on the bus assigned to. We might need to make this variable configurable - # In the future and extracted from config.json - p = subprocess.check_output(["lsusb", "-s", PCI_BUS_ID]) - # Empty string means a likely wrong PCI_BUS_ID + p = subprocess.check_output(["lsusb", "-s", self.pci_bus_id]) + # Empty string means a likely wrong pci_bus_id if p == "": msg = "ERROR_USB_CHECK" self.exit_gracefully(msg) @@ -189,8 +195,8 @@ def mount_volume(self): ) subprocess.check_call( [ - "sudo", - "chown", + "sudo", + "chown", "-R", "user:user", self.mountpoint, ] ) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index a0b830c7a..b51770556 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,17 +1,12 @@ -import os -import shutil -import sys - -from securedrop_export import export +from securedrop_export import export def __main__(submission): submission.extract_tarball() - try: + try: submission.archive_metadata = export.Metadata(submission.tmpdir) except Exception as e: - msg = "ERROR_METADATA_PARSING" - submission.exit_gracefully(msg, e=e) + submission.exit_gracefully("ERROR_METADATA_PARSING") if submission.archive_metadata.is_valid(): if submission.archive_metadata.export_method == "usb-test": @@ -37,5 +32,3 @@ def __main__(submission): submission.print_test_page() else: submission.exit_gracefully("ERROR_ARCHIVE_METADATA") - - diff --git a/tests/sd-export-config-bad-2.json b/tests/sd-export-config-bad-2.json new file mode 100644 index 000000000..879fb8397 --- /dev/null +++ b/tests/sd-export-config-bad-2.json @@ -0,0 +1,3 @@ +{ + "pci_bus_id": "two" +} diff --git a/tests/sd-export-config-bad.json b/tests/sd-export-config-bad.json new file mode 100644 index 000000000..f7cbf8d7a --- /dev/null +++ b/tests/sd-export-config-bad.json @@ -0,0 +1,3 @@ +{ + "pciishf. i3u 2 +} diff --git a/tests/sd-export-config.json b/tests/sd-export-config.json new file mode 100644 index 000000000..d1167cf5a --- /dev/null +++ b/tests/sd-export-config.json @@ -0,0 +1,3 @@ +{ + "pci_bus_id": "2" +} diff --git a/tests/test_export.py b/tests/test_export.py index 00996c9a3..82cc824f7 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -5,7 +5,7 @@ import subprocess import tempfile -from securedrop_export import export +from securedrop_export import export SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa @@ -14,10 +14,45 @@ SAMPLE_OUTPUT_USB="Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa SAMPLE_OUTPUT_USB_ERROR="" SAMPLE_OUTPUT_USB_ERROR2="h\ne\nl\nl\no" +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") +BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") +ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") + + +def test_bad_sd_export_config_invalid_json(capsys): + + expected_message = "ERROR_CONFIG" + with pytest.raises(SystemExit) as sysexit: + submission = export.SDExport("", BAD_TEST_CONFIG) + # A graceful exit means a return code of 0 + assert sysexit.value.code == 0 + + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + assert captured.out == "" + + +def test_bad_sd_export_config_invalid_value(capsys): + + expected_message = "ERROR_CONFIG" + with pytest.raises(SystemExit) as sysexit: + submission = export.SDExport("", ANOTHER_BAD_TEST_CONFIG) + # A graceful exit means a return code of 0 + assert sysexit.value.code == 0 + + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + assert captured.out == "" + + +def test_good_sd_export_config(capsys): + submission = export.SDExport("", TEST_CONFIG) + assert submission.pci_bus_id == 2 def test_exit_gracefully_no_exception(capsys): - submission = export.SDExport("testfile") + + submission = export.SDExport("testfile", TEST_CONFIG) test_msg = 'test' with pytest.raises(SystemExit) as sysexit: @@ -32,7 +67,7 @@ def test_exit_gracefully_no_exception(capsys): def test_exit_gracefully_exception(capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) test_msg = 'test' with pytest.raises(SystemExit) as sysexit: @@ -48,7 +83,7 @@ def test_exit_gracefully_exception(capsys): def test_empty_config(capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -58,7 +93,7 @@ def test_empty_config(capsys): def test_valid_printer_test_config(capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -70,7 +105,7 @@ def test_valid_printer_test_config(capsys): def test_valid_printer_config(capsys): - submission = export.SDExport("") + submission = export.SDExport("", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -82,7 +117,7 @@ def test_valid_printer_config(capsys): def test_invalid_encryption_config(capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) @@ -97,7 +132,7 @@ def test_invalid_encryption_config(capsys): def test_valid_encryption_config(capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -112,7 +147,7 @@ def test_valid_encryption_config(capsys): @mock.patch("subprocess.check_call") def test_popup_message(mocked_call): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) submission.popup_message("hello!") mocked_call.assert_called_once_with([ "notify-send", @@ -124,14 +159,14 @@ def test_popup_message(mocked_call): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BOTHER_PRINTER) def test_get_good_printer_uri(mocked_call): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) result = submission.get_printer_uri() assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) def test_get_bad_printer_uri(mocked_call, capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_PRINTER_NOT_FOUND" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) @@ -153,7 +188,7 @@ def test_get_bad_printer_uri(mocked_call, capsys): "/tmp/tmpJf83j9/secret.pptx" ]) def test_is_open_office_file(capsys, open_office_paths): - submission = export.SDExport("") + submission = export.SDExport("", TEST_CONFIG) assert submission.is_open_office_file(open_office_paths) @@ -164,13 +199,13 @@ def test_is_open_office_file(capsys, open_office_paths): "/tmp/tmpJf83j9/secret.gpg" ]) def test_is_not_open_office_file(capsys, open_office_paths): - submission = export.SDExport("") + submission = export.SDExport("", TEST_CONFIG) assert not submission.is_open_office_file(open_office_paths) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_USB) def test_usb_precheck_connected(mocked_call, capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_NOT_CONNECTED" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -184,7 +219,7 @@ def test_usb_precheck_connected(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) def test_usb_precheck_disconnected(mocked_call, capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_CONNECTED" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -198,7 +233,7 @@ def test_usb_precheck_disconnected(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB_ERROR) def test_usb_precheck_error(mocked_call, capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_USB_CHECK" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -212,7 +247,7 @@ def test_usb_precheck_error(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB_ERROR2) def test_usb_precheck_error_2(mocked_call, capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_USB_CHECK" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -226,7 +261,7 @@ def test_usb_precheck_error_2(mocked_call, capsys): @mock.patch("subprocess.check_call") def test_luks_precheck_encrypted(mocked_call, capsys): - submission = export.SDExport("testfile") + submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_ENCRYPTED" with pytest.raises(SystemExit) as sysexit: result = submission.check_luks_volume() @@ -234,4 +269,3 @@ def test_luks_precheck_encrypted(mocked_call, capsys): assert sysexit.value.code == 0 captured = capsys.readouterr() assert captured.err == "{}\n".format(expected_message) - From 0a98222a2713e08461ed2def5029bbfa8e42313a Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 2 Aug 2019 11:00:10 -0400 Subject: [PATCH 223/751] Code formatting --- securedrop_export/entrypoint.py | 3 +- securedrop_export/export.py | 98 ++++++++++++++++----------------- securedrop_export/main.py | 5 +- tests/test_export.py | 11 ++-- 4 files changed, 60 insertions(+), 57 deletions(-) diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index c5b22494e..a868a1594 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -7,6 +7,7 @@ CONFIG_PATH = "/etc/sd-export-config.json" + def start(): my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) try: @@ -17,7 +18,7 @@ def start(): main.__main__(my_sub) # Delete extracted achive from tempfile shutil.rmtree(my_sub.tmpdir) - except Exception as e: + except Exception: # exit with 0 return code otherwise the os will attempt to open # the file with another application msg = "ERROR_GENERIC" diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 7fe7fa513..7e207287d 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -19,6 +19,7 @@ BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" + class Metadata(object): """ Object to parse, validate and store json metadata from the sd-export archive. @@ -26,11 +27,11 @@ class Metadata(object): METADATA_FILE = "metadata.json" SUPPORTED_EXPORT_METHODS = [ - "usb-test", # general preflight check - "disk", - "disk-test", # disk preflight test - "printer", - "printer-test" # print test page + "usb-test", # general preflight check + "disk", + "disk-test", # disk preflight test + "printer", + "printer-test", # print test page ] SUPPORTED_ENCRYPTION_METHODS = ["luks"] @@ -44,7 +45,7 @@ def __init__(self, archive_path): self.encryption_method = json_config.get("encryption_method", None) self.encryption_key = json_config.get("encryption_key", None) - except Exception as e: + except Exception: raise def is_valid(self): @@ -58,7 +59,6 @@ def is_valid(self): class SDExport(object): - def __init__(self, archive, config_path): self.device = DEVICE self.mountpoint = MOUNTPOINT @@ -81,10 +81,9 @@ def __init__(self, archive, config_path): with open(config_path) as f: json_config = json.loads(f.read()) self.pci_bus_id = int(json_config.get("pci_bus_id", 2)) - except Exception as e: + except Exception: self.exit_gracefully("ERROR_CONFIG") - def exit_gracefully(self, msg, e=False): """ Utility to print error messages, mostly used during debugging, @@ -108,20 +107,22 @@ def exit_gracefully(self, msg, e=False): # the file with another application sys.exit(0) - def popup_message(self, msg): try: - subprocess.check_call([ - "notify-send", - "--expire-time", "3000", - "--icon", "/usr/share/securedrop/icons/sd-logo.png", - "SecureDrop: {}".format(msg) - ]) + subprocess.check_call( + [ + "notify-send", + "--expire-time", + "3000", + "--icon", + "/usr/share/securedrop/icons/sd-logo.png", + "SecureDrop: {}".format(msg), + ] + ) except subprocess.CalledProcessError as e: msg = "Error sending notification:" self.exit_gracefully(msg, e=e) - def extract_tarball(self): try: with tarfile.open(self.archive) as tar: @@ -130,7 +131,6 @@ def extract_tarball(self): msg = "ERROR_EXTRACTION" self.exit_gracefully(msg) - def check_usb_connected(self): p = subprocess.check_output(["lsusb", "-s", self.pci_bus_id]) # Empty string means a likely wrong pci_bus_id @@ -151,7 +151,6 @@ def check_usb_connected(self): msg = "ERROR_USB_CHECK" self.exit_gracefully(msg) - def check_luks_volume(self): try: # cryptsetup isLuks returns 0 if the device is a luks volume @@ -163,7 +162,6 @@ def check_luks_volume(self): msg = "USB_NO_SUPPORTED_ENCRYPTION" self.exit_gracefully(msg) - def unlock_luks_volume(self, encryption_key): # the luks device is not already unlocked if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): @@ -179,7 +177,6 @@ def unlock_luks_volume(self, encryption_key): msg = "USB_BAD_PASSPHRASE" self.exit_gracefully(msg) - def mount_volume(self): # mount target not created if not os.path.exists(self.mountpoint): @@ -193,28 +190,21 @@ def mount_volume(self): self.mountpoint, ] ) - subprocess.check_call( - [ - "sudo", - "chown", - "-R", "user:user", self.mountpoint, - ] - ) + subprocess.check_call(["sudo", "chown", "-R", "user:user", self.mountpoint]) except subprocess.CalledProcessError: # clean up - subprocess.check_call(["sudo", "cryptsetup", "luksClose", self.encrypted_device]) + subprocess.check_call( + ["sudo", "cryptsetup", "luksClose", self.encrypted_device] + ) msg = "ERROR_USB_MOUNT" self.exit_gracefully(msg) - def copy_submission(self): # move files to drive (overwrites files with same filename) and unmount drive try: target_path = os.path.join(self.mountpoint, self.target_dirname) subprocess.check_call(["mkdir", target_path]) - export_data = os.path.join( - self.tmpdir, "export_data/" - ) + export_data = os.path.join(self.tmpdir, "export_data/") subprocess.check_call(["cp", "-r", export_data, target_path]) self.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError): @@ -225,21 +215,22 @@ def copy_submission(self): # luks volume, and exit 0 subprocess.check_call(["sync"]) subprocess.check_call(["sudo", "umount", self.mountpoint]) - subprocess.check_call(["sudo", "cryptsetup", "luksClose", self.encrypted_device]) + subprocess.check_call( + ["sudo", "cryptsetup", "luksClose", self.encrypted_device] + ) subprocess.check_call(["rm", "-rf", self.tmpdir]) sys.exit(0) - def wait_for_print(self): # use lpstat to ensure the job was fully transfered to the printer # returns True if print was successful, otherwise will throw exceptions signal.signal(signal.SIGALRM, handler) signal.alarm(self.printer_wait_timeout) printer_idle_string = "printer {} is idle".format(self.printer_name) - while(True): + while True: try: output = subprocess.check_output(["lpstat", "-p", self.printer_name]) - if(printer_idle_string in output.decode("utf-8")): + if printer_idle_string in output.decode("utf-8"): return True else: time.sleep(5) @@ -251,13 +242,12 @@ def wait_for_print(self): self.exit_gracefully(msg) return True - def get_printer_uri(self): # Get the URI via lpinfo and only accept URIs of supported printers printer_uri = "" try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: msg = "ERROR_PRINTER_URI" self.exit_gracefully(msg) @@ -276,13 +266,18 @@ def get_printer_uri(self): # printer url is a make that is unsupported self.exit_gracefully("ERROR_PRINTER_NOT_SUPPORTED") - def install_printer_ppd(self, uri): - # Some drivers don't come with ppd files pre-compiled, we must compile them + # Some drivers don't come with ppd files pre-compiled, we must compile them if "Brother" in uri: try: subprocess.check_call( - ["sudo", "ppdc", self.brlaser_driver, "-d", "/usr/share/cups/model/"] + [ + "sudo", + "ppdc", + self.brlaser_driver, + "-d", + "/usr/share/cups/model/", + ] ) except subprocess.CalledProcessError: msg = "ERROR_PRINTER_DRIVER_INSTALL" @@ -290,7 +285,6 @@ def install_printer_ppd(self, uri): return self.brlaser_ppd # Here, we could support ppd drivers for other makes or models in the future - def setup_printer(self, printer_uri, printer_ppd): try: # Add the printer using lpadmin @@ -316,12 +310,10 @@ def setup_printer(self, printer_uri, printer_ppd): msg = "ERROR_PRINTER_INSTALL" self.exit_gracefully(msg) - def print_test_page(self): self.print_file("/usr/share/cups/data/testprint") self.popup_message("Printing test page") - def print_all_files(self): files_path = os.path.join(self.tmpdir, "export_data/") files = os.listdir(files_path) @@ -333,16 +325,23 @@ def print_all_files(self): msg = "Printing document {} of {}".format(print_count, len(files)) self.popup_message(msg) - def is_open_office_file(self, filename): - OPEN_OFFICE_FORMATS = [".doc", ".docx", ".xls", ".xlsx", - ".ppt", ".pptx", ".odt", ".ods", ".odp"] + OPEN_OFFICE_FORMATS = [ + ".doc", + ".docx", + ".xls", + ".xlsx", + ".ppt", + ".pptx", + ".odt", + ".ods", + ".odp", + ] for extension in OPEN_OFFICE_FORMATS: if os.path.basename(filename).endswith(extension): return True return False - def print_file(self, file_to_print): try: # if the file to print is an (open)office document, we need to call unoconf to convert @@ -359,6 +358,7 @@ def print_file(self, file_to_print): msg = "ERROR_PRINT" self.exit_gracefully(msg) + ## class ends here class TimeoutException(Exception): pass diff --git a/securedrop_export/main.py b/securedrop_export/main.py index b51770556..e9ae86da4 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,12 +1,13 @@ from securedrop_export import export + def __main__(submission): submission.extract_tarball() try: submission.archive_metadata = export.Metadata(submission.tmpdir) - except Exception as e: - submission.exit_gracefully("ERROR_METADATA_PARSING") + except Exception: + submission.exit_gracefully("ERROR_METADATA_PARSING") if submission.archive_metadata.is_valid(): if submission.archive_metadata.export_method == "usb-test": diff --git a/tests/test_export.py b/tests/test_export.py index 82cc824f7..19be56140 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -2,7 +2,6 @@ import os import pytest -import subprocess import tempfile from securedrop_export import export @@ -10,10 +9,10 @@ SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa -SAMPLE_OUTPUT_NO_USB="Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa -SAMPLE_OUTPUT_USB="Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa -SAMPLE_OUTPUT_USB_ERROR="" -SAMPLE_OUTPUT_USB_ERROR2="h\ne\nl\nl\no" +SAMPLE_OUTPUT_NO_USB = "Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa +SAMPLE_OUTPUT_USB = "Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa +SAMPLE_OUTPUT_USB_ERROR = "" +SAMPLE_OUTPUT_USB_ERROR2 = "h\ne\nl\nl\no" TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") @@ -263,6 +262,8 @@ def test_usb_precheck_error_2(mocked_call, capsys): def test_luks_precheck_encrypted(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_ENCRYPTED" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + with pytest.raises(SystemExit) as sysexit: result = submission.check_luks_volume() mocked_exit.assert_called_once_with(expected_message) From 36be369293208aecef2892524a383e7ed143c374 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 2 Aug 2019 14:43:25 -0400 Subject: [PATCH 224/751] Fix parsing and test strings now binary to reflect type of check_output --- securedrop_export/export.py | 17 +++++++++++------ tests/sd-export-config-bad-2.json | 2 +- tests/test_export.py | 13 +++++++------ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 7e207287d..8dcff76bf 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -80,7 +80,9 @@ def __init__(self, archive, config_path): try: with open(config_path) as f: json_config = json.loads(f.read()) - self.pci_bus_id = int(json_config.get("pci_bus_id", 2)) + self.pci_bus_id = json_config.get("pci_bus_id", None) + if self.pci_bus_id is None: + raise except Exception: self.exit_gracefully("ERROR_CONFIG") @@ -132,12 +134,15 @@ def extract_tarball(self): self.exit_gracefully(msg) def check_usb_connected(self): - p = subprocess.check_output(["lsusb", "-s", self.pci_bus_id]) - # Empty string means a likely wrong pci_bus_id - if p == "": - msg = "ERROR_USB_CHECK" + + # If the USB is not attached via qvm-usb attach, lsusb will return empty string and a + # return code of 1 + try: + p = subprocess.check_output(["lsusb", "-s", "{}:".format(self.pci_bus_id)]) + except subprocess.CalledProcessError: + msg = "ERROR_USB_CONFIGURATION" self.exit_gracefully(msg) - n_usb = len(p.rstrip().split("\n")) + n_usb = len(p.decode("utf-8").rstrip().split("\n")) # If there is one device, it is the root hub. if n_usb == 1: msg = "USB_NOT_CONNECTED" diff --git a/tests/sd-export-config-bad-2.json b/tests/sd-export-config-bad-2.json index 879fb8397..f69e25b7a 100644 --- a/tests/sd-export-config-bad-2.json +++ b/tests/sd-export-config-bad-2.json @@ -1,3 +1,3 @@ { - "pci_bus_id": "two" + "no_pci_bus_id": "nope" } diff --git a/tests/test_export.py b/tests/test_export.py index 19be56140..d0a294659 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -2,6 +2,7 @@ import os import pytest +import subprocess import tempfile from securedrop_export import export @@ -9,10 +10,10 @@ SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa -SAMPLE_OUTPUT_NO_USB = "Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa -SAMPLE_OUTPUT_USB = "Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa -SAMPLE_OUTPUT_USB_ERROR = "" -SAMPLE_OUTPUT_USB_ERROR2 = "h\ne\nl\nl\no" +SAMPLE_OUTPUT_NO_USB = b"Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa +SAMPLE_OUTPUT_USB = b"Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa +SAMPLE_OUTPUT_USB_ERROR = b"" +SAMPLE_OUTPUT_USB_ERROR2 = b"h\ne\nl\nl\no" TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") @@ -46,7 +47,7 @@ def test_bad_sd_export_config_invalid_value(capsys): def test_good_sd_export_config(capsys): submission = export.SDExport("", TEST_CONFIG) - assert submission.pci_bus_id == 2 + assert submission.pci_bus_id == "2" def test_exit_gracefully_no_exception(capsys): @@ -230,7 +231,7 @@ def test_usb_precheck_disconnected(mocked_call, capsys): assert captured.err == "{}\n".format(expected_message) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB_ERROR) +@mock.patch("subprocess.check_output", return_code=1) def test_usb_precheck_error(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_USB_CHECK" From 2a70172e67a008efeeecf88c4fe8f8edbdb6e320 Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 6 Aug 2019 17:03:10 -0400 Subject: [PATCH 225/751] Update return code when printer drivers are not available --- securedrop_export/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 8dcff76bf..6c3ac34f6 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -285,7 +285,7 @@ def install_printer_ppd(self, uri): ] ) except subprocess.CalledProcessError: - msg = "ERROR_PRINTER_DRIVER_INSTALL" + msg = "ERROR_PRINTER_DRIVER_UNAVAILBLE" self.exit_gracefully(msg) return self.brlaser_ppd # Here, we could support ppd drivers for other makes or models in the future From 0dea37119cb06d390a4146e8e5708c109fea0ce3 Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 6 Aug 2019 17:20:12 -0400 Subject: [PATCH 226/751] Update readme with metadata format details See https://github.com/freedomofpress/securedrop-workstation/issues/280 --- README.md | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f8a0bd6df..1346cd7f8 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,115 @@ # securedrop-export -code for exporting from the securedrop qubes workstation +Code for exporting and printing files from the SecureDrop Qubes Workstation. + + +## Export Archive Format + +Export archive format is defined as a gzipped tar archive whose extension ends with .sd-export. + +### Archive Contents + +Once extracted, the archive will contain two elements: + +`metadata.json` : file containing export metadata, a file containing information about the archive and the export operation + +`export_data`: folder containing the raw files to export + +Example archive structure: + +``` +. +├── metadata.json +└── export_data + ├── file-to-export-1.txt + ├── file-to-export-2.pdf + ├── file-to-export-3.doc + [...] +``` + +### Archive Metadata + +Metadata contains three possible keys which may contain several possible values: +`device` +`device` specifies the method used for export, and can be either a device or a preflight check. See the Devices section below for possible values. It is a required key. + +`encryption_method`: +`encryption_method` is used exclusively when exporting to USB storage. It is an optional key. Possible values are: +luks + +`encryption_passphrase` +`encryption_passphrase` is used exclusively when exporting to USB storage. It is an optional key. It contains an arbitrary string that contains the disk encryption passphrase of the device. + + +Example archive metadata (`metadata.json`): +``` +{ + "device": "disk" + "encryption-method": "luks" + "encryption-key": "Your encryption passphrase goes here" +} +``` + +### Devices + +For all 5 devices described below, there are three generic errors that apply: + +`ERROR_FILE_NOT_FOUND`: No file has been specified or the path is incorrect +`ERROR_EXTRACTION`: Error while extracting the archive +`ERROR_METADATA_PARSING`: The metadata.json file cannot be correctly parsed +`ERROR_ARCHIVE_METADATA`: The metadata failed the check +`ERROR_GENERIC`: An uncaught (unexpected) error somewhere in the script. These should not happen unless the code improperly handles errors + +The list of devices are as follows: + +1. `usb-test` : Preflight check that probes for USB connected devices, that returns: +`USB_CONNECTED` if a USB device is attached to the dedicated slot +`USB_NOT_CONNECTED` if no USB is attached +`USB_CHECK_ERROR` if an error occurred during pre-flight + +2. `disk-test`: Preflight check that checks for LUKS-encrypted volume that returns: +`USB_ENCRYPTED` if a LUKS volume is attached to sd-export +`USB_ENCRYPTION_NOT_SUPPORTED` if a LUKS volume is not attached or there was any other error +`USB_DISK_ERROR` + +3. `printer-test`: prints a test page that returns: +`ERROR_PRINTER_NOT_FOUND` if no printer is connected +`ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script +`ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available +`ERROR_PRINTER_INSTALL` If there is an error installing the printer +`ERROR_PRINT` if there is an error printing + +4. `printer`: sends files to printer that returns: +`ERROR_PRINTER_NOT_FOUND` if no printer is connected +`ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script +`ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available +`ERROR_PRINTER_INSTALL` If there is an error installing the printer +`ERROR_PRINT` if there is an error printing + +5. `disk`: sends files to disk: +All files in `export_data` will be sent to disk +`encryption_method` and `encryption_passphrase` specify the device encryption settings + +### Export Folder Structure + +When exporting to a USB drive (using the disk device in metadata.json), the files will be placed on the drive as follows: The root of the USB drive will contain one folder per source, reflecting their source codename in the client. Documents or messages exported will be copied to that directory, preserving the filename from the server. In case a same file is exported twice, a confirmation window replace/rename/abort. + +Example folder structure of USB export drive: + +``` +. + +├── cytotoxic payer +│ ├── 1-cytotoxic-payer-msg +│ │ └── file-to-export-1.txt +│ ├── 2-cytotoxic-payer-msg +│ │ └── file-to-export-2.txt +│ └── 3-cytotoxic-payer-doc +│ │ └── file-to-export-3.doc +├── grandiloquent pasteboard +│ └── 1-grandiloquent-pasteboard-doc +│ │ └── file-to-export-1.doc +└── snug seek +``` + From c22ec4e666691a1bc573cf3b07da819739bcfc6d Mon Sep 17 00:00:00 2001 From: pierwill <19642016+pierwill@users.noreply.github.com> Date: Thu, 8 Aug 2019 11:38:22 -0500 Subject: [PATCH 227/751] Edit README.md - add more context to the repo introduction - light revisions and rewording throughout for readability and clarity - rename "running" to "Example Commands" - capitalize section titles - make markdown lineation more consistent --- README.md | 79 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 0207698be..e2d4ca771 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,21 @@ [![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-proxy.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-proxy) -This implements a Qubes RPC <-> HTTP proxy, used to forward requests -from the [securedrop workstation -client](https://github.com/freedomofpress/securedrop-client) to the -[securedrop server](https://github.com/freedomofpress/securedrop). +`securedrop-proxy` is part of the [SecureDrop +Workstation](https://github.com/freedomofpress/securedrop-workstation) project. -### try it out +The code in this repository implements a proxy across two APIs: the [Qubes RPC +protocol](https://www.qubes-os.org/doc/qrexec3/) and the [SecureDrop +API](https://docs.securedrop.org/en/latest/development/journalist_api.html). +This proxy is used to forward requests from the securedrop workstation client to +the securedrop server. + +This code is still in development, and not quite ready for integration with the +rest of the Securedrop Workstation project. However, it is ready to be poked at +and demonstrated. Feel free to explore and contribute! You'll need a machine +running [Qubes OS](https://qubes-os.org). + +### How It Works The proxy works by reading a JSON object from STDIN, generating an HTTP request from that JSON, making that request against the remote @@ -16,14 +25,10 @@ server's response to STDOUT. For discussion about the shape of the request and response objects, see https://github.com/freedomofpress/securedrop-workstation/issues/107. -This is still development code, not quite ready for integration with the -rest of the securedrop-workstation project. However, it is ready to -be poked at and demonstrated. +#### Installation Requirements -#### install requirements - -To try the proxy script, first use `venv` to create an environment -and install requirements. In the root of the project directory, run +To try the proxy script, create a virtual environment and install the +requirements. In the root of the project directory, run ``` virtualenv .venv @@ -31,13 +36,17 @@ source .venv/bin/activate pip install --require-hashes -r dev-requirements.txt ``` -#### Update dependencies +#### Update Dependencies -To add or update a dependency, modify either `dev-requirements.in` and `requirements.in` and then run `make update-pip-dependencies`. This will generate `dev-requirements.txt` and `requirements.txt`. +To add or update a dependency, modify either `dev-requirements.in` and +`requirements.in` and then run `make update-pip-dependencies`. This will +generate `dev-requirements.txt` and `requirements.txt`. -**IMPORTANT:** Do not modify `build-requirements.txt` during normal development. We use a pip mirror for our build process and the hashes in that file point to wheels on our mirror. +⚠ **IMPORTANT:** Do not modify `build-requirements.txt` during normal +development. We use a pip mirror for our build process and the hashes in that +file point to wheels on our mirror. -#### configuration +#### Configuration The proxy script must be run with the path to its configuration file as its first argument. This repo includes an example configuration @@ -50,7 +59,6 @@ following values: - `dev` - A boolean, where `True` indicates we're running in development mode, any other value (or not set) indicates we're running in production. See below for what that means. - `target_vm` - The name of the VM we should `qvm-move` non-JSON responses to. Must be set if dev is not True. - #### dev vs prod Configuration includes a "dev" attribute. At this point, the only @@ -61,11 +69,11 @@ mode, the file is not moved off the VM, but is saved as a temporary file in `/tmp`. In both cases, the response written to STDOUT includes the name of the new file. -#### tests +#### Tests -Unit tests can be run with `make test` +Unit tests can be run with `make test`. -#### running +#### Example Commands The following commands can be used to demonstrate the proxy. @@ -80,13 +88,13 @@ read at that name under `/tmp`. $ cat examples/html.json | ./sd-proxy.py ./config-example.yaml -Finally, this demonstrates some error handling. The request contains -invalid JSON. The proxy detects that, and prints an error message -(still a valid proxy response). +Finally, this demonstrates some error handling. The request contains invalid +JSON. The proxy detects the malformed request, and prints an error message. +(The error message itself is considered a valid proxy response). $ cat examples/bad.json | ./sd-proxy.py ./config-example.yaml -#### Qubes integration +#### Qubes Integration Until we determine how we wish to package and install this script, demonstrating the proxy in a Qubes environment is a somewhat manual @@ -100,12 +108,12 @@ this documentation, we assume the client is running in Edit `qubes/securedrop.Proxy` to reflect the path to `entrypoint.sh` in this repo. Also edit the directory to this repo code in `entrypoint.sh`. -Next, run `sudo cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy`, which will move `securedrop.Proxy` -(the qubes-rpc "server path definition" file) into place in -`/etc/qubes-rpc/`. +Next, run `sudo cp qubes/securedrop.Proxy /etc/qubes-rpc/securedrop.Proxy`. +This will move `securedrop.Proxy` (the qubes-rpc "server path definition" file) +into place in `/etc/qubes-rpc/`. -On `dom0`, create the file `/etc/qubes-rpc/policy/securedrop.Proxy` -with the contents: +In `dom0`, create the file `/etc/qubes-rpc/policy/securedrop.Proxy` +with the contents securedrop-client securedrop-proxy allow $anyvm $anyvm deny @@ -123,14 +131,15 @@ names for your environment). This allows non-JSON responses to be moved to the client VM using Qubes' native inter-VM file copy service. Copy `config-example.yaml` to `config.yaml`, and edit it to reflect -your situation- check that `target_vm` is set to the correct client VM -name, and assure that `dev` is `False`. This documentation assumes +your situation. Ensure that `target_vm` is set to the correct client VM +name, and that `dev` is `False`. This documentation assumes you've left `host` set to `jsonplaceholder.typicode.com`. -Now on the client VM you should be able to do (again replacing `securedrop-proxy` with the name of your proxy AppVM): +At this point, in the client VM you should be able to do $ echo '{"method":"GET","path_query":"/posts?userId=1"}' | /usr/lib/qubes/qrexec-client-vm securedrop-proxy securedrop.Proxy +(again replacing `securedrop-proxy` with the name of your proxy AppVM) You should see a successful JSON response as returned by the remote server. Try now @@ -145,11 +154,11 @@ response which include a `body` which looks like: } If you look in `~/QubesIncoming/securedrop-proxy`, you should see a -new file with that name. The content of that file will be the content +new file with that name. The content of that file will reflect the content returned by the remote server. -Finally, try invoking an error. Provide an invalid JSON request, and -notice you receive a `400` response from the proxy: +Finally, try invoking an error by providing an invalid JSON request. +Notice that you receive a `400` response from the proxy: $ echo '[INVALID' | /usr/lib/qubes/qrexec-client-vm securedrop-proxy securedrop.Proxy {"body": "{\"error\": \"Invalid JSON in request\"}", "version": "0.1.1", "status": 400, "headers": {"Content-Type": "application/json"}} From 55a2e41dd5125ab829facef2916cb56f472922ad Mon Sep 17 00:00:00 2001 From: pierwill <19642016+pierwill@users.noreply.github.com> Date: Mon, 19 Aug 2019 11:38:39 -0500 Subject: [PATCH 228/751] Update qrexec policy keyword characters --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0207698be..6574fcdd4 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ On `dom0`, create the file `/etc/qubes-rpc/policy/securedrop.Proxy` with the contents: securedrop-client securedrop-proxy allow - $anyvm $anyvm deny + @anyvm @anyvm deny (replacing the VM names with the correct source and destination names for your environment) From c486954bafbdef5ce0b0e45d19978bbd9f5c7004 Mon Sep 17 00:00:00 2001 From: pierwill <19642016+pierwill@users.noreply.github.com> Date: Mon, 19 Aug 2019 11:40:20 -0500 Subject: [PATCH 229/751] Clarify instructions for qrexec policy file contents --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6574fcdd4..8ae97a1ec 100644 --- a/README.md +++ b/README.md @@ -110,8 +110,8 @@ with the contents: securedrop-client securedrop-proxy allow @anyvm @anyvm deny -(replacing the VM names with the correct source and destination names -for your environment) +Replace the VM names in the first line above with the correct source and +destination names for your environment. The second line should appear as is. Also in `dom0`, edit `/etc/qubes-rpc/policy/qubes.Filecopy`, to add near the top: From de1a2846ecb8a9173463779dee102603e57cdd75 Mon Sep 17 00:00:00 2001 From: pierwill <19642016+pierwill@users.noreply.github.com> Date: Mon, 19 Aug 2019 12:28:10 -0500 Subject: [PATCH 230/751] Update qrexec policy keyword characters --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f5210f90..1bec5dcf4 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ in **dom0**. ``` sd-svs sd-journalist allow -$anyvm $anyvm deny +@anyvm @anyvm deny ``` The above mentioned setup can also be created using `securedrop-workstation` project. From 005e9634d677ddd02f7f48453f8181119b29b854 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 23 Aug 2019 11:53:23 -0700 Subject: [PATCH 231/751] Bump server container timeout to 30m --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 43894a8d5..44f9d3324 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -68,7 +68,7 @@ jobs: - run: name: Wait for server to be up and for test sources to load command: | - dockerize -wait tcp://127.0.0.1:8080 -timeout 20m + dockerize -wait tcp://127.0.0.1:8080 -timeout 30m sleep 30 - run: name: Remove VCR cassettes and run tests against latest API From 15de0b77da7d6b915f57d7286c7ef6a54c88ecc0 Mon Sep 17 00:00:00 2001 From: pierwill <19642016+pierwill@users.noreply.github.com> Date: Thu, 22 Aug 2019 12:36:52 -0500 Subject: [PATCH 232/751] Edit docstrings for readability and clarity Also fixes typo in one error message --- sdclientapi/__init__.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 4babe587b..009c7aa88 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -25,7 +25,7 @@ class RequestTimeoutError(Exception): """ - Error raisted if a request times out. + Error raised if a request times out. """ def __init__(self) -> None: @@ -34,7 +34,7 @@ def __init__(self) -> None: def json_query(proxy_vm_name: str, data: str, timeout: Optional[int] = None) -> str: """ - Takes a json based query and passes to the network proxy. + Takes a JSON based query and passes it to the network proxy. Returns the JSON output from the proxy. """ p = Popen( @@ -60,7 +60,7 @@ def json_query(proxy_vm_name: str, data: str, timeout: Optional[int] = None) -> class API: """ - This is class to do all the network calls to the SecureDrop API server. + This class handles all network calls to the SecureDrop API server. :param address: Server URL (http://localhost:8081/) :param username: Journalist username @@ -175,7 +175,7 @@ def _send_rpc_json_request( def authenticate(self, totp: Optional[str] = None) -> bool: """ - Authenticate the user and fetches the token from the server. + Authenticates the user and fetches the token from the server. :returns: True if authentication is successful, raise AuthError otherwise. """ @@ -255,7 +255,7 @@ def get_source(self, source: Source) -> Source: """ This will return a single Source based on UUID. - :param source: Source object containing only source's uuid value. + :param source: Source object containing only source's UUID value. :returns: Source object fetched from server for the given UUID value. """ path_query = "api/v1/sources/{}".format(source.uuid) @@ -293,10 +293,10 @@ def get_source_from_string(self, uuid: str) -> Source: def delete_source(self, source: Source) -> bool: """ - This method will delete the source and collection. If the uuid + This method will delete the source and collection. If the UUID is not found in the server, it will raise WrongUUIDError. - :param source: Source object containing only source's uuid value. + :param source: Source object containing only source's UUID value. :returns: True if successful, raises Errors in case of wrong values. """ path_query = "api/v1/sources/{}".format(source.uuid) @@ -327,7 +327,7 @@ def delete_source(self, source: Source) -> bool: def delete_source_from_string(self, uuid: str) -> bool: """ - This method will delete the source and collection. If the uuid + This method will delete the source and collection. If the UUID is not found in the server, it will raise WrongUUIDError. :param uuid: Source UUID as string. @@ -539,7 +539,7 @@ def delete_submission(self, submission: Submission) -> bool: def delete_submission_from_string(self, uuid: str, source_uuid: str) -> bool: """ - Deletes a given Submission based on uuids from the server. + Deletes a given Submission based on UUIDs from the server. :param uuid: UUID of the Submission object. :param source_uuid: UUID of the source. @@ -554,8 +554,8 @@ def download_submission( ) -> Tuple[str, str]: """ Returns a tuple of etag (format is algorithm:checksum) and file path for - a given Submission object. This method also requires a directory path - in where it will save the submission file. + a given Submission object. This method requires a directory path + at which to save the submission file. :param submission: Submission object :param path: Local directory path to save the submission @@ -569,7 +569,7 @@ def download_submission( if path: if os.path.exists(path) and not os.path.isdir(path): - raise BaseError("Please provide a vaild directory to save.") + raise BaseError("Please provide a valid directory to save.") data, status_code, headers = self._send_json_request( method, @@ -668,7 +668,7 @@ def reply_source( This method is used to reply to a given source. The message should be preencrypted with the source's GPG public key. - :param source: Source object we want to reply. + :param source: Source object to whom we want to reply. :param msg: Encrypted message with Source's GPG public key. :param reply_uuid: The UUID that will be used to identify the reply on the server. """ @@ -706,7 +706,7 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: """ This will return a list of replies associated with a source. - :param source: Source object containing only source's uuid value. + :param source: Source object containing only source's UUID value. :returns: List of Reply objects. """ path_query = "api/v1/sources/{}/replies".format(source.uuid) @@ -801,8 +801,8 @@ def get_all_replies(self) -> List[Reply]: def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: """ Returns a tuple of etag (format is algorithm:checksum) and file path for - a given Reply object. This method also requires a directory path - in where it will save the reply file. + a given Reply object. This method requires a directory path + at which to save the reply file. :param reply: Reply object :param path: Local directory path to save the reply @@ -888,7 +888,7 @@ def delete_reply(self, reply: Reply) -> bool: def logout(self) -> bool: """ - Logsout the current user + Logs the current user out. """ path_query = "api/v1/logout" method = "POST" From b1a12d25d1bd7cf41b5fc26c20c58f987777a1d1 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 4 Sep 2019 12:12:23 -0400 Subject: [PATCH 233/751] Address review comments - Fix formatting - Reword device section - Add more error codes for `disk` export method --- README.md | 60 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 1346cd7f8..d014aa237 100644 --- a/README.md +++ b/README.md @@ -54,43 +54,50 @@ Example archive metadata (`metadata.json`): ### Devices -For all 5 devices described below, there are three generic errors that apply: +For all device types (described in detail below), the following standard error types can be returned: -`ERROR_FILE_NOT_FOUND`: No file has been specified or the path is incorrect -`ERROR_EXTRACTION`: Error while extracting the archive -`ERROR_METADATA_PARSING`: The metadata.json file cannot be correctly parsed -`ERROR_ARCHIVE_METADATA`: The metadata failed the check -`ERROR_GENERIC`: An uncaught (unexpected) error somewhere in the script. These should not happen unless the code improperly handles errors +- `ERROR_FILE_NOT_FOUND`: No file has been specified or the path is incorrect +- `ERROR_EXTRACTION`: Error while extracting the archive +- `ERROR_METADATA_PARSING`: The metadata.json file cannot be correctly parsed +- `ERROR_ARCHIVE_METADATA`: The metadata failed the check +- `ERROR_USB_CONFIGURATION`: There is no USB controller attached to the VM, the dom0 configuration (in `config.json`) or USB device identifier is is misconfigured +- `ERROR_GENERIC`: An uncaught (unexpected) error somewhere in the script. These should not happen unless the code improperly handles errors -The list of devices are as follows: +The supported device types for export are as follows, including the possible errors specific to that device type: 1. `usb-test` : Preflight check that probes for USB connected devices, that returns: -`USB_CONNECTED` if a USB device is attached to the dedicated slot -`USB_NOT_CONNECTED` if no USB is attached -`USB_CHECK_ERROR` if an error occurred during pre-flight + - `USB_CONNECTED` if a USB device is attached to the dedicated slot + - `USB_NOT_CONNECTED` if no USB is attached + - `USB_CHECK_ERROR` if an error occurred during pre-flight + 2. `disk-test`: Preflight check that checks for LUKS-encrypted volume that returns: -`USB_ENCRYPTED` if a LUKS volume is attached to sd-export -`USB_ENCRYPTION_NOT_SUPPORTED` if a LUKS volume is not attached or there was any other error -`USB_DISK_ERROR` + - `USB_ENCRYPTED` if a LUKS volume is attached to sd-export + - `USB_ENCRYPTION_NOT_SUPPORTED` if a LUKS volume is not attached or there was any other error + - `USB_DISK_ERROR` + 3. `printer-test`: prints a test page that returns: -`ERROR_PRINTER_NOT_FOUND` if no printer is connected -`ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script -`ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available -`ERROR_PRINTER_INSTALL` If there is an error installing the printer -`ERROR_PRINT` if there is an error printing + - `ERROR_PRINTER_NOT_FOUND` if no printer is connected + - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script + - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available + - `ERROR_PRINTER_INSTALL` If there is an error installing the printer + - `ERROR_PRINT` if there is an error printing + 4. `printer`: sends files to printer that returns: -`ERROR_PRINTER_NOT_FOUND` if no printer is connected -`ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script -`ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available -`ERROR_PRINTER_INSTALL` If there is an error installing the printer -`ERROR_PRINT` if there is an error printing + - `ERROR_PRINTER_NOT_FOUND` if no printer is connected + - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script + - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available + - `ERROR_PRINTER_INSTALL` If there is an error installing the printer + - `ERROR_PRINT` if there is an error printing + + +5. `disk`: sends files to disk that returns: + - `USB_BAD_PASSPHRASE` if the luks decryption failed (likely due to bad passphrase) + - `ERROR_USB_MOUNT` if there was an error mounting the volume (after unlocking the luks volume) + - `ERROR_USB_WRITE` if there was an error writing to disk (e.g., no space left on device) -5. `disk`: sends files to disk: -All files in `export_data` will be sent to disk -`encryption_method` and `encryption_passphrase` specify the device encryption settings ### Export Folder Structure @@ -113,4 +120,3 @@ Example folder structure of USB export drive: │ │ └── file-to-export-1.doc └── snug seek ``` - From e2a489095786af1fa25f71b03ef42211c81a2ea4 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Wed, 4 Sep 2019 09:27:07 -0700 Subject: [PATCH 234/751] Minor formatting cleanup Tiny readability improvements, since we'll be referring back to this document frequently. Specifically: * use in-line for documenting file extension * greater indentation in sublists * use "definition list" formatting for metadata defns --- README.md | 60 +++++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index d014aa237..803c3a0a1 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,17 @@ Code for exporting and printing files from the SecureDrop Qubes Workstation. ## Export Archive Format -Export archive format is defined as a gzipped tar archive whose extension ends with .sd-export. +Export archive format is defined as a gzipped tar archive whose extension ends with `.sd-export`. ### Archive Contents Once extracted, the archive will contain two elements: -`metadata.json` : file containing export metadata, a file containing information about the archive and the export operation +`metadata.json` +: file containing export metadata, a file containing information about the archive and the export operation -`export_data`: folder containing the raw files to export +`export_data` +: folder containing the raw files to export Example archive structure: @@ -32,15 +34,16 @@ Example archive structure: ### Archive Metadata Metadata contains three possible keys which may contain several possible values: + `device` -`device` specifies the method used for export, and can be either a device or a preflight check. See the Devices section below for possible values. It is a required key. +: specifies the method used for export, and can be either a device or a preflight check. See the Devices section below for possible values. It is a required key. -`encryption_method`: -`encryption_method` is used exclusively when exporting to USB storage. It is an optional key. Possible values are: +`encryption_method` +: used exclusively when exporting to USB storage. It is an optional key. Possible values are: luks `encryption_passphrase` -`encryption_passphrase` is used exclusively when exporting to USB storage. It is an optional key. It contains an arbitrary string that contains the disk encryption passphrase of the device. +: used exclusively when exporting to USB storage. It is an optional key. It contains an arbitrary string that contains the disk encryption passphrase of the device. Example archive metadata (`metadata.json`): @@ -66,38 +69,33 @@ For all device types (described in detail below), the following standard error t The supported device types for export are as follows, including the possible errors specific to that device type: 1. `usb-test` : Preflight check that probes for USB connected devices, that returns: - - `USB_CONNECTED` if a USB device is attached to the dedicated slot - - `USB_NOT_CONNECTED` if no USB is attached - - `USB_CHECK_ERROR` if an error occurred during pre-flight - + - `USB_CONNECTED` if a USB device is attached to the dedicated slot + - `USB_NOT_CONNECTED` if no USB is attached + - `USB_CHECK_ERROR` if an error occurred during pre-flight 2. `disk-test`: Preflight check that checks for LUKS-encrypted volume that returns: - - `USB_ENCRYPTED` if a LUKS volume is attached to sd-export - - `USB_ENCRYPTION_NOT_SUPPORTED` if a LUKS volume is not attached or there was any other error - - `USB_DISK_ERROR` - + - `USB_ENCRYPTED` if a LUKS volume is attached to sd-export + - `USB_ENCRYPTION_NOT_SUPPORTED` if a LUKS volume is not attached or there was any other error + - `USB_DISK_ERROR` 3. `printer-test`: prints a test page that returns: - - `ERROR_PRINTER_NOT_FOUND` if no printer is connected - - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script - - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available - - `ERROR_PRINTER_INSTALL` If there is an error installing the printer - - `ERROR_PRINT` if there is an error printing - + - `ERROR_PRINTER_NOT_FOUND` if no printer is connected + - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script + - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available + - `ERROR_PRINTER_INSTALL` If there is an error installing the printer + - `ERROR_PRINT` if there is an error printing 4. `printer`: sends files to printer that returns: - - `ERROR_PRINTER_NOT_FOUND` if no printer is connected - - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script - - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available - - `ERROR_PRINTER_INSTALL` If there is an error installing the printer - - `ERROR_PRINT` if there is an error printing - + - `ERROR_PRINTER_NOT_FOUND` if no printer is connected + - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script + - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available + - `ERROR_PRINTER_INSTALL` If there is an error installing the printer + - `ERROR_PRINT` if there is an error printing 5. `disk`: sends files to disk that returns: - - `USB_BAD_PASSPHRASE` if the luks decryption failed (likely due to bad passphrase) - - `ERROR_USB_MOUNT` if there was an error mounting the volume (after unlocking the luks volume) - - `ERROR_USB_WRITE` if there was an error writing to disk (e.g., no space left on device) - + - `USB_BAD_PASSPHRASE` if the luks decryption failed (likely due to bad passphrase) + - `ERROR_USB_MOUNT` if there was an error mounting the volume (after unlocking the luks volume) + - `ERROR_USB_WRITE` if there was an error writing to disk (e.g., no space left on device) ### Export Folder Structure From ca16c57e1a8a8e03ddd178c5ac3a7a5be07b2d66 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 26 Sep 2019 10:17:48 -0400 Subject: [PATCH 235/751] Add logging to sd-export --- securedrop_export/__init__.py | 1 + securedrop_export/entrypoint.py | 36 ++++++++++++++++++++++++++ securedrop_export/export.py | 45 +++++++++++++++++++++++++++++++-- securedrop_export/main.py | 14 ++++++++++ update_version.sh | 2 ++ 5 files changed, 96 insertions(+), 2 deletions(-) diff --git a/securedrop_export/__init__.py b/securedrop_export/__init__.py index e69de29bb..df9144c54 100644 --- a/securedrop_export/__init__.py +++ b/securedrop_export/__init__.py @@ -0,0 +1 @@ +__version__ = '0.1.1' diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index a868a1594..00e3e35e8 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -1,18 +1,54 @@ +import logging import os import shutil import sys +from logging.handlers import TimedRotatingFileHandler +from securedrop_export import __version__ from securedrop_export import export from securedrop_export import main CONFIG_PATH = "/etc/sd-export-config.json" +DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") +def configure_logging(): + """ + All logging related settings are set up by this function. + """ + log_folder = os.path.join(DEFAULT_HOME, 'logs') + if not os.path.exists(log_folder): + os.makedirs(log_folder) + + log_file = os.path.join(DEFAULT_HOME, 'logs', 'export.log') + + # set logging format + log_fmt = ('%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) ' + '%(levelname)s: %(message)s') + formatter = logging.Formatter(log_fmt) + + handler = TimedRotatingFileHandler(log_file) + handler.setFormatter(formatter) + handler.setLevel(logging.DEBUG) + + # set up primary log + log = logging.getLogger() + log.setLevel(logging.DEBUG) + log.addHandler(handler) def start(): + try: + configure_logging() + except Exception: + msg = "ERROR_LOGGING" + my_sub.exit_gracefully(msg) + + logging.info('Starting SecureDrop Export {}'.format(__version__)) my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) + try: # Halt immediately if target file is absent if not os.path.exists(my_sub.archive): + logging.info('Archive is not found {}.'.format(my_sub.archive)) msg = "ERROR_FILE_NOT_FOUND" my_sub.exit_gracefully(msg) main.__main__(my_sub) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 6c3ac34f6..4bb3a20b1 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -2,6 +2,7 @@ import datetime import json +import logging import os import shutil import signal @@ -19,6 +20,7 @@ BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" +logger = logging.getLogger(__name__) class Metadata(object): """ @@ -40,20 +42,26 @@ def __init__(self, archive_path): try: with open(self.metadata_path) as f: + logging.info('Parsing archive metadata') json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) self.encryption_method = json_config.get("encryption_method", None) self.encryption_key = json_config.get("encryption_key", None) + logging.info('Exporting to device {} with encryption_method {}'.format(self.export_method, self.encryption_method)) except Exception: + logging.error('Metadata parsing failure') raise def is_valid(self): + logging.info('Validating metadata contents') if self.export_method not in self.SUPPORTED_EXPORT_METHODS: + logging.error('Archive metadata: Export method {} is not supported'.format(self.export_method)) return False if self.export_method == "disk": if self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS: + logging.error('Archive metadata: Encryption method {} is not supported'.format(self.encryption_method)) return False return True @@ -79,11 +87,15 @@ def __init__(self, archive, config_path): try: with open(config_path) as f: + logging.info('Retrieving VM configuration') json_config = json.loads(f.read()) self.pci_bus_id = json_config.get("pci_bus_id", None) + logging.info('pci_bus_id is {}'.format(self.pci_bus_id)) if self.pci_bus_id is None: - raise + logging.error('pci_bus_id is not set in VM configuration') + raise except Exception: + logger.error("error parsing VM configuration.") self.exit_gracefully("ERROR_CONFIG") def exit_gracefully(self, msg, e=False): @@ -95,12 +107,14 @@ def exit_gracefully(self, msg, e=False): """ sys.stderr.write(msg) sys.stderr.write("\n") + logger.info('Exiting with message: {}'.format(msg)) if e: try: # If the file archive was extracted, delete before returning if os.path.isdir(self.tmpdir): shutil.rmtree(self.tmpdir) e_output = e.output + logger.error(e_output) except Exception: e_output = "" sys.stderr.write(e_output) @@ -127,6 +141,7 @@ def popup_message(self, msg): def extract_tarball(self): try: + logging.info('Extracting tarball {} into {}'.format(self.archive, self.tmpdir)) with tarfile.open(self.archive) as tar: tar.extractall(self.tmpdir) except Exception: @@ -137,18 +152,22 @@ def check_usb_connected(self): # If the USB is not attached via qvm-usb attach, lsusb will return empty string and a # return code of 1 + logging.info('Performing usb preflight') try: - p = subprocess.check_output(["lsusb", "-s", "{}:".format(self.pci_bus_id)]) + p = subprocess.check_output(["lsusb", "-s", "{}:".format(self.pci_bus_id)]) + logging.info("lsusb -s {} : {}".format(self.pci_bus_id, p.decode("utf-8"))) except subprocess.CalledProcessError: msg = "ERROR_USB_CONFIGURATION" self.exit_gracefully(msg) n_usb = len(p.decode("utf-8").rstrip().split("\n")) # If there is one device, it is the root hub. if n_usb == 1: + logging.info('usb preflight - no external devices connected') msg = "USB_NOT_CONNECTED" self.exit_gracefully(msg) # If there are two devices, it's the root hub and another device (presumably for export) elif n_usb == 2: + logging.info('usb preflight - external device connected') msg = "USB_CONNECTED" self.exit_gracefully(msg) # Else the result is unexpected @@ -157,6 +176,7 @@ def check_usb_connected(self): self.exit_gracefully(msg) def check_luks_volume(self): + logging.info('Checking if volume is luks-encrypted') try: # cryptsetup isLuks returns 0 if the device is a luks volume # subprocess with throw if the device is not luks (rc !=0) @@ -169,6 +189,7 @@ def check_luks_volume(self): def unlock_luks_volume(self, encryption_key): # the luks device is not already unlocked + logging.info('Unlocking luks volume {}'.format(self.encrypted_device)) if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): p = subprocess.Popen( ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], @@ -176,9 +197,11 @@ def unlock_luks_volume(self, encryption_key): stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) + logging.info('Passing key') p.communicate(input=str.encode(encryption_key, "utf-8")) rc = p.returncode if rc != 0: + logging.error('Bad phassphrase for {}',format(self.encrypted_device)) msg = "USB_BAD_PASSPHRASE" self.exit_gracefully(msg) @@ -187,6 +210,7 @@ def mount_volume(self): if not os.path.exists(self.mountpoint): subprocess.check_call(["sudo", "mkdir", self.mountpoint]) try: + logging.info('Mounting {} to {}'.format(self.encrypted_device, self.mountpoint)) subprocess.check_call( [ "sudo", @@ -198,6 +222,8 @@ def mount_volume(self): subprocess.check_call(["sudo", "chown", "-R", "user:user", self.mountpoint]) except subprocess.CalledProcessError: # clean up + logging.error('Error mounting {} to {}'.format(self.encrypted_device, self.mountpoint)) + logging.info('Locking luks volume {}'.format(self.encrypted_device)) subprocess.check_call( ["sudo", "cryptsetup", "luksClose", self.encrypted_device] ) @@ -210,7 +236,9 @@ def copy_submission(self): target_path = os.path.join(self.mountpoint, self.target_dirname) subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(self.tmpdir, "export_data/") + logging.info('Copying file to {}'.format(self.target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) + logging.info('File copied successfully to {}'.format(self.target_dirname)) self.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError): msg = "ERROR_USB_WRITE" @@ -218,11 +246,15 @@ def copy_submission(self): finally: # Finally, we sync the filesystem, unmount the drive and lock the # luks volume, and exit 0 + logging.info('Syncing filesystems') subprocess.check_call(["sync"]) + logging.info('Unmounting drive from {}'.format(self.mountpoint)) subprocess.check_call(["sudo", "umount", self.mountpoint]) + logging.info('Locking luks volume {}'.format(self.encrypted_device)) subprocess.check_call( ["sudo", "cryptsetup", "luksClose", self.encrypted_device] ) + logging.info('Deleting temporary directory {}'.format(self.tmpdir)) subprocess.check_call(["rm", "-rf", self.tmpdir]) sys.exit(0) @@ -234,8 +266,10 @@ def wait_for_print(self): printer_idle_string = "printer {} is idle".format(self.printer_name) while True: try: + logging.info('Running lpstat waiting for printer {}'.format(self.printer_name)) output = subprocess.check_output(["lpstat", "-p", self.printer_name]) if printer_idle_string in output.decode("utf-8"): + logging.info('Print completed') return True else: time.sleep(5) @@ -243,6 +277,7 @@ def wait_for_print(self): msg = "ERROR_PRINT" self.exit_gracefully(msg) except TimeoutException: + logging.error('Timeout waiting for printer {}'.format(self.printer_name)) msg = "ERROR_PRINT" self.exit_gracefully(msg) return True @@ -260,15 +295,19 @@ def get_printer_uri(self): for line in output.split(): if "usb://" in line.decode("utf-8"): printer_uri = line.decode("utf-8") + logging.info('lpinfo usb printer: {}'.format(printer_uri)) # verify that the printer is supported, else exit if printer_uri == "": # No usb printer is connected + logging.info('No usb printers connected') self.exit_gracefully("ERROR_PRINTER_NOT_FOUND") elif "Brother" in printer_uri: + logging.info('Printer {} is supported'.format(printer_uri)) return printer_uri else: # printer url is a make that is unsupported + logging.info('Printer {} is unsupported'.format(printer_uri)) self.exit_gracefully("ERROR_PRINTER_NOT_SUPPORTED") def install_printer_ppd(self, uri): @@ -352,12 +391,14 @@ def print_file(self, file_to_print): # if the file to print is an (open)office document, we need to call unoconf to convert # the file to pdf as printer drivers do not immediately support this format out of the box if self.is_open_office_file(file_to_print): + logging.info('Converting Office document to pdf for printing'.format(self.printer_name)) folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) subprocess.check_call(["unoconv", "-o", converted_path, file_to_print]) file_to_print = converted_path + logging.info('Sending file to printer {}:{}'.format(self.printer_name)) subprocess.check_call(["xpp", "-P", self.printer_name, file_to_print]) except subprocess.CalledProcessError: msg = "ERROR_PRINT" diff --git a/securedrop_export/main.py b/securedrop_export/main.py index e9ae86da4..f45f9305f 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,5 +1,8 @@ +import logging + from securedrop_export import export +logger = logging.getLogger(__name__) def __main__(submission): submission.extract_tarball() @@ -11,19 +14,30 @@ def __main__(submission): if submission.archive_metadata.is_valid(): if submission.archive_metadata.export_method == "usb-test": + logging.info('Export archive is usb-test') submission.check_usb_connected() elif submission.archive_metadata.export_method == "disk": + logging.info('Export archive is disk') + logging.info('Unlocking volume') # exports all documents in the archive to luks-encrypted volume submission.unlock_luks_volume(submission.archive_metadata.encryption_key) + logging.info('Mounting volume') submission.mount_volume() + logging.info('Copying submission to drive') submission.copy_submission() elif submission.archive_metadata.export_method == "disk-test": + logging.info('Export archive is disk-test') submission.check_luks_volume() elif submission.archive_metadata.export_method == "printer": + logging.info('Export archive is printer') # prints all documents in the archive + logging.info('Searching for printer') printer_uri = submission.get_printer_uri() + logging.info('Installing printer drivers') printer_ppd = submission.install_printer_ppd(printer_uri) + logging.info('Setting up printer') submission.setup_printer(printer_uri, printer_ppd) + logging.info('Printing files') submission.print_all_files() elif submission.archive_metadata.export_method == "printer-test": # Prints a test page to ensure the printer is functional diff --git a/update_version.sh b/update_version.sh index 983fd4e8d..f66ee435d 100755 --- a/update_version.sh +++ b/update_version.sh @@ -21,6 +21,8 @@ fi if [[ "$OSTYPE" == "darwin"* ]]; then # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/VERSION + sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/__init__.py else sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/VERSION + sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/__init__.py fi From ffab87e55586b89a1c219d412116e9d49e895af3 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 27 Sep 2019 09:41:34 -0400 Subject: [PATCH 236/751] Add flake8 to ci and fix flake8 findings --- .circleci/config.yml | 25 ++++++++++------ .flake8 | 2 ++ Makefile | 4 +++ securedrop_export/entrypoint.py | 4 ++- securedrop_export/export.py | 37 +++++++++++++++++------- securedrop_export/main.py | 1 + test-requirements.in | 1 + test-requirements.txt | 51 +++++++++++++++------------------ tests/test_export.py | 31 ++++++++++---------- 9 files changed, 93 insertions(+), 63 deletions(-) create mode 100644 .flake8 diff --git a/.circleci/config.yml b/.circleci/config.yml index baae95224..d53dabaf2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,10 +1,23 @@ version: 2 jobs: - build: + lint: docker: - - image: circleci/python:3.5-stretch + - image: circleci/python:3.5 steps: - checkout + - run: + name: Install test requirements and run lint + command: | + virtualenv .venv + source .venv/bin/activate + pip install --require-hashes -r test-requirements.txt + make lint + - run: + name: Check Python dependencies for CVEs + command: | + set -e + source .venv/bin/activate + make safety test: docker: @@ -22,14 +35,10 @@ jobs: source .venv/bin/activate pip install --require-hashes -r test-requirements.txt make test - - run: - name: Check Python dependencies for CVEs - command: | - set -e - source .venv/bin/activate - make safety workflows: version: 2 securedrop_export_ci: jobs: + - lint - test + diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..61d908155 --- /dev/null +++ b/.flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 99 diff --git a/Makefile b/Makefile index 2ee2e801d..079b9e379 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,10 @@ update-pip-requirements: ## Updates all Python requirements files via pip-compil test: pytest -v tests/ +.PHONY: lint +lint: + flake8 securedrop_export/ tests/ + # Explaination of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index 00e3e35e8..f2d837202 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -11,6 +11,7 @@ CONFIG_PATH = "/etc/sd-export-config.json" DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") + def configure_logging(): """ All logging related settings are set up by this function. @@ -35,12 +36,13 @@ def configure_logging(): log.setLevel(logging.DEBUG) log.addHandler(handler) + def start(): try: configure_logging() except Exception: msg = "ERROR_LOGGING" - my_sub.exit_gracefully(msg) + export.SDExport.exit_gracefully(msg) logging.info('Starting SecureDrop Export {}'.format(__version__)) my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 4bb3a20b1..febd54efa 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -22,6 +22,7 @@ logger = logging.getLogger(__name__) + class Metadata(object): """ Object to parse, validate and store json metadata from the sd-export archive. @@ -46,8 +47,14 @@ def __init__(self, archive_path): json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) self.encryption_method = json_config.get("encryption_method", None) - self.encryption_key = json_config.get("encryption_key", None) - logging.info('Exporting to device {} with encryption_method {}'.format(self.export_method, self.encryption_method)) + self.encryption_key = json_config.get( + "encryption_key", None + ) + logging.info( + 'Exporting to device {} with encryption_method {}'.format( + self.export_method, self.encryption_method + ) + ) except Exception: logging.error('Metadata parsing failure') @@ -56,12 +63,20 @@ def __init__(self, archive_path): def is_valid(self): logging.info('Validating metadata contents') if self.export_method not in self.SUPPORTED_EXPORT_METHODS: - logging.error('Archive metadata: Export method {} is not supported'.format(self.export_method)) + logging.error( + 'Archive metadata: Export method {} is not supported'.format( + self.export_method + ) + ) return False if self.export_method == "disk": if self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS: - logging.error('Archive metadata: Encryption method {} is not supported'.format(self.encryption_method)) + logging.error( + 'Archive metadata: Encryption method {} is not supported'.format( + self.encryption_method + ) + ) return False return True @@ -180,7 +195,7 @@ def check_luks_volume(self): try: # cryptsetup isLuks returns 0 if the device is a luks volume # subprocess with throw if the device is not luks (rc !=0) - p = subprocess.check_call(["sudo", "cryptsetup", "isLuks", DEVICE]) + subprocess.check_call(["sudo", "cryptsetup", "isLuks", DEVICE]) msg = "USB_ENCRYPTED" self.exit_gracefully(msg) except subprocess.CalledProcessError: @@ -195,13 +210,13 @@ def unlock_luks_volume(self, encryption_key): ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, + stderr=subprocess.PIPE ) logging.info('Passing key') p.communicate(input=str.encode(encryption_key, "utf-8")) rc = p.returncode if rc != 0: - logging.error('Bad phassphrase for {}',format(self.encrypted_device)) + logging.error('Bad phassphrase for {}'.format(self.encrypted_device)) msg = "USB_BAD_PASSPHRASE" self.exit_gracefully(msg) @@ -388,10 +403,10 @@ def is_open_office_file(self, filename): def print_file(self, file_to_print): try: - # if the file to print is an (open)office document, we need to call unoconf to convert - # the file to pdf as printer drivers do not immediately support this format out of the box + # If the file to print is an (open)office document, we need to call unoconf to + # convert the file to pdf as printer drivers do not support this format if self.is_open_office_file(file_to_print): - logging.info('Converting Office document to pdf for printing'.format(self.printer_name)) + logging.info('Converting Office document to pdf'.format(self.printer_name)) folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) @@ -405,7 +420,7 @@ def print_file(self, file_to_print): self.exit_gracefully(msg) -## class ends here +# class ends here class TimeoutException(Exception): pass diff --git a/securedrop_export/main.py b/securedrop_export/main.py index f45f9305f..00ca144b1 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -4,6 +4,7 @@ logger = logging.getLogger(__name__) + def __main__(submission): submission.extract_tarball() diff --git a/test-requirements.in b/test-requirements.in index e079f8a60..28ecacab6 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -1 +1,2 @@ +flake8 pytest diff --git a/test-requirements.txt b/test-requirements.txt index c1a39ee1b..8eb119b9c 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in +# pip-compile --generate-hashes --output-file=test-requirements.txt test-requirements.in # atomicwrites==1.3.0 \ --hash=sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4 \ @@ -12,22 +12,21 @@ attrs==19.1.0 \ --hash=sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79 \ --hash=sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399 \ # via pytest -configparser==3.7.4 \ - --hash=sha256:8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32 \ - --hash=sha256:da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75 \ - # via importlib-metadata -contextlib2==0.5.5 \ - --hash=sha256:509f9419ee91cdd00ba34443217d5ca51f5a364a404e1dce9e8979cea969ca48 \ - --hash=sha256:f5260a6e679d2ff42ec91ec5252f4eeffdcf21053db9113bd0a8e4d953769c00 \ - # via importlib-metadata -funcsigs==1.0.2 \ - --hash=sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca \ - --hash=sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50 \ - # via pytest +entrypoints==0.3 \ + --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ + --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ + # via flake8 +flake8==3.7.8 \ + --hash=sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548 \ + --hash=sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696 importlib-metadata==0.18 \ --hash=sha256:6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7 \ --hash=sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db \ # via pluggy, pytest +mccabe==0.6.1 \ + --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ + # via flake8 more-itertools==5.0.0 \ --hash=sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4 \ --hash=sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc \ @@ -40,7 +39,7 @@ packaging==19.0 \ pathlib2==2.3.4 \ --hash=sha256:2156525d6576d21c4dcaddfa427fae887ef89a7a9de5cbfe0728b3aafa78427e \ --hash=sha256:446014523bb9be5c28128c4d2a10ad6bb60769e78bd85658fe44a450674e0ef8 \ - # via importlib-metadata, pytest + # via pytest pluggy==0.12.0 \ --hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \ --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c \ @@ -49,25 +48,21 @@ py==1.8.0 \ --hash=sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa \ --hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53 \ # via pytest +pycodestyle==2.5.0 \ + --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ + --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c \ + # via flake8 +pyflakes==2.1.1 \ + --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ + --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 \ + # via flake8 pyparsing==2.4.1.1 \ --hash=sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580 \ - --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 + --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 \ + # via packaging pytest==4.6.4 \ --hash=sha256:6aa9bc2f6f6504d7949e9df2a756739ca06e58ffda19b5e53c725f7b03fb4aae \ --hash=sha256:b77ae6f2d1a760760902a7676887b665c086f71e3461c64ed2a312afcedc00d6 -scandir==1.10.0 \ - --hash=sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e \ - --hash=sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022 \ - --hash=sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f \ - --hash=sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f \ - --hash=sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae \ - --hash=sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173 \ - --hash=sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4 \ - --hash=sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32 \ - --hash=sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188 \ - --hash=sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d \ - --hash=sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac \ - # via pathlib2 six==1.12.0 \ --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ diff --git a/tests/test_export.py b/tests/test_export.py index d0a294659..7c6e45244 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -2,7 +2,7 @@ import os import pytest -import subprocess +import subprocess # noqa: F401 import tempfile from securedrop_export import export @@ -23,7 +23,7 @@ def test_bad_sd_export_config_invalid_json(capsys): expected_message = "ERROR_CONFIG" with pytest.raises(SystemExit) as sysexit: - submission = export.SDExport("", BAD_TEST_CONFIG) + export.SDExport("", BAD_TEST_CONFIG) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 @@ -36,7 +36,7 @@ def test_bad_sd_export_config_invalid_value(capsys): expected_message = "ERROR_CONFIG" with pytest.raises(SystemExit) as sysexit: - submission = export.SDExport("", ANOTHER_BAD_TEST_CONFIG) + export.SDExport("", ANOTHER_BAD_TEST_CONFIG) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 @@ -71,8 +71,9 @@ def test_exit_gracefully_exception(capsys): test_msg = 'test' with pytest.raises(SystemExit) as sysexit: - submission.exit_gracefully(test_msg, - e=Exception('BANG!')) + submission.exit_gracefully( + test_msg, e=Exception('BANG!') + ) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 @@ -83,7 +84,7 @@ def test_exit_gracefully_exception(capsys): def test_empty_config(capsys): - submission = export.SDExport("testfile", TEST_CONFIG) + export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -93,7 +94,7 @@ def test_empty_config(capsys): def test_valid_printer_test_config(capsys): - submission = export.SDExport("testfile", TEST_CONFIG) + export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -105,7 +106,7 @@ def test_valid_printer_test_config(capsys): def test_valid_printer_config(capsys): - submission = export.SDExport("", TEST_CONFIG) + export.SDExport("", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -117,7 +118,7 @@ def test_valid_printer_config(capsys): def test_invalid_encryption_config(capsys): - submission = export.SDExport("testfile", TEST_CONFIG) + export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) @@ -132,7 +133,7 @@ def test_invalid_encryption_config(capsys): def test_valid_encryption_config(capsys): - submission = export.SDExport("testfile", TEST_CONFIG) + export.SDExport("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -209,7 +210,7 @@ def test_usb_precheck_connected(mocked_call, capsys): expected_message = "USB_NOT_CONNECTED" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: - result = submission.check_usb_connected() + submission.check_usb_connected() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 @@ -223,7 +224,7 @@ def test_usb_precheck_disconnected(mocked_call, capsys): expected_message = "USB_CONNECTED" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: - result = submission.check_usb_connected() + submission.check_usb_connected() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 @@ -237,7 +238,7 @@ def test_usb_precheck_error(mocked_call, capsys): expected_message = "ERROR_USB_CHECK" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: - result = submission.check_usb_connected() + submission.check_usb_connected() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 @@ -251,7 +252,7 @@ def test_usb_precheck_error_2(mocked_call, capsys): expected_message = "ERROR_USB_CHECK" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: - result = submission.check_usb_connected() + submission.check_usb_connected() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 @@ -266,7 +267,7 @@ def test_luks_precheck_encrypted(mocked_call, capsys): mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: - result = submission.check_luks_volume() + submission.check_luks_volume() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 captured = capsys.readouterr() From de1e4a2b0f8c7ece8472d1fb0de470ecae9eedba Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 26 Sep 2019 12:19:56 -0400 Subject: [PATCH 237/751] Bump securedrop-export to 0.1.2 --- securedrop_export/VERSION | 2 +- securedrop_export/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index 17e51c385..d917d3e26 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.1.1 +0.1.2 diff --git a/securedrop_export/__init__.py b/securedrop_export/__init__.py index df9144c54..10939f01b 100644 --- a/securedrop_export/__init__.py +++ b/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = '0.1.1' +__version__ = '0.1.2' From 021dab1d75f228fae5a651046756338b6f2491f6 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 17 Oct 2019 07:55:37 -0400 Subject: [PATCH 238/751] ci: parallel stretch/buster jobs --- .circleci/config.yml | 53 ++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0ec6d2a5f..d5a8ee3c2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,25 @@ +--- +common-steps: + - &run_tests + run: + name: Install requirements and run tests + command: | + virtualenv .venv + source .venv/bin/activate + pip install --require-hashes -r dev-requirements.txt + make test + + - &check_python_dependencies_for_vulns + run: + name: Check Python dependencies for CVEs + command: | + set -e + source .venv/bin/activate + make safety + version: 2 jobs: - build: + build-stretch: docker: - image: circleci/python:3.5-stretch steps: @@ -30,30 +49,26 @@ jobs: export PKG_PATH=~/project/dist/securedrop-proxy-$PKG_VERSION.tar.gz make securedrop-proxy - test: + test-stretch: docker: - - image: circleci/python:3.5 + - image: circleci/python:3.5-stretch steps: - checkout + - *run_tests + - *check_python_dependencies_for_vulns - - run: - name: Install requirements and run tests - command: | - virtualenv .venv - source .venv/bin/activate - pip install --require-hashes -r dev-requirements.txt - make test - - - run: - name: Check Python dependencies for CVEs - command: | - set -e - source .venv/bin/activate - make safety + test-buster: + docker: + - image: circleci/python:3.7-buster + steps: + - checkout + - *run_tests + - *check_python_dependencies_for_vulns workflows: version: 2 securedrop_proxy_ci: jobs: - - test - - build + - test-stretch + - test-buster + - build-stretch From 0dffa8fce1ecf47c4d658373c81d0d6a45fedec8 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 22 Oct 2019 14:56:48 -0700 Subject: [PATCH 239/751] add logger and logging to proxy --- securedrop_proxy/entrypoint.py | 61 ++++++++++++++++++++++++++++++---- securedrop_proxy/main.py | 18 +++++++--- securedrop_proxy/proxy.py | 17 +++++++--- 3 files changed, 80 insertions(+), 16 deletions(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index 2bf7211db..250b4652b 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -6,18 +6,28 @@ # called with exactly one argument: the path to its config file. See # the README for configuration options. -import sys import json -import uuid +import logging +import os import subprocess +import sys +import uuid + +from logging.handlers import TimedRotatingFileHandler -from . import proxy -from . import config -from . import callbacks -from . import main +from securedrop_proxy import callbacks +from securedrop_proxy import config +from securedrop_proxy import main +from securedrop_proxy import proxy +from securedrop_proxy.version import version + + +DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_proxy") def start(): + logging.info('Starting SecureDrop Proxy {}'.format(version)) + # a fresh, new proxy object p = proxy.Proxy() @@ -44,3 +54,42 @@ def start(): incoming = "\n".join(incoming) main.__main__(incoming, p) + + +def excepthook(*exc_args): + ''' + This function is called in the event of a catastrophic failure. + Log exception and exit cleanly. + ''' + logging.error('Unrecoverable error', exc_info=(exc_args)) + sys.__excepthook__(*exc_args) + print('') # force terminal prompt on to a new line + sys.exit(1) + + +def configure_logging(sdc_home: str) -> None: + ''' + All logging related settings are set up by this function. + ''' + log_folder = os.path.join(DEFAULT_HOME, 'logs') + if not os.path.exists(log_folder): + os.makedirs(log_folder) + + log_file = os.path.join(DEFAULT_HOME, 'logs', 'proxy.log') + + # set logging format + log_fmt = ('%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) %(levelname)s: %(message)s') + formatter = logging.Formatter(log_fmt) + + # define log handlers such as for rotating log files + handler = TimedRotatingFileHandler(log_file) + handler.setFormatter(formatter) + handler.setLevel(logging.DEBUG) + + # set up primary log + log = logging.getLogger() + log.setLevel(logging.DEBUG) + log.addHandler(handler) + + # override excepthook to capture a log of catastrophic failures. + sys.excepthook = excepthook diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index 2333bb1be..6fadafaf5 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -1,24 +1,33 @@ import json +import logging from securedrop_proxy import callbacks from securedrop_proxy import proxy +logger = logging.getLogger(__name__) + + def __main__(incoming, p): - # deserialize incoming request + ''' + Deserialize incoming request in order to build and send a proxy request. + ''' + logging.debug('Creating request to be sent by proxy') + client_req = None try: client_req = json.loads(incoming) - except json.decoder.JSONDecodeError: + except json.decoder.JSONDecodeError as e: + logging.error(e) p.simple_error(400, 'Invalid JSON in request') p.on_done(p.res) - # build request oject req = proxy.Req() try: req.method = client_req['method'] req.path_query = client_req['path_query'] - except KeyError: + except KeyError as e: + logging.error(e) p.simple_error(400, 'Missing keys in request') p.on_done(p.res) @@ -28,7 +37,6 @@ def __main__(incoming, p): if "body" in client_req: req.body = client_req['body'] - # complete proxy object p.req = req p.on_save = callbacks.on_save p.on_done = callbacks.on_done diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 9e0f3a191..6b5061931 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -1,12 +1,16 @@ -import requests import furl -import tempfile import json +import logging +import requests +import tempfile import werkzeug import securedrop_proxy.version as version +logger = logging.getLogger(__name__) + + class Req: def __init__(self): self.method = "" @@ -71,7 +75,7 @@ def prep_request(self): try: url = furl.furl("{}://{}:{}/{}".format(scheme, host, port, path)) except Exception as e: - + logging.error(e) self.simple_error(500, "Proxy error while generating URL to request") raise ValueError("Error generating URL from provided values") @@ -99,7 +103,7 @@ def handle_non_json_response(self): res = Response(self._presp.status_code) # Create a NamedTemporaryFile, we don't want - # to delete it after closing. + # to delete it after closign. fh = tempfile.NamedTemporaryFile(delete=False) for c in self._presp.iter_content(10): @@ -114,6 +118,7 @@ def handle_non_json_response(self): self.res = res def handle_response(self): + logging.debug('Handling response') ctype = werkzeug.http.parse_options_header(self._presp.headers["content-type"]) @@ -134,11 +139,13 @@ def proxy(self): raise ValueError("Request callback is not set.") self.prep_request() + logging.debug('Sending request') s = requests.Session() self._presp = s.send(self._prepared_request) self.handle_response() - except ValueError: + except ValueError as e: + logging.error(e) # effectively a 4xx error # we have set self.response to indicate an error From ea7e87ac00c918862a61c11a3a3ebb4dd2325877 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 22 Oct 2019 17:03:11 -0700 Subject: [PATCH 240/751] init logger --- securedrop_proxy/entrypoint.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index 250b4652b..d5bb4838e 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -26,6 +26,16 @@ def start(): + ''' + Set up a new proxy object with an error handler, configuration that we read from argv[1], and + the original user request from STDIN. + ''' + try: + configure_logging() + except Exception as e: + print(e) + return + logging.info('Starting SecureDrop Proxy {}'.format(version)) # a fresh, new proxy object @@ -67,7 +77,7 @@ def excepthook(*exc_args): sys.exit(1) -def configure_logging(sdc_home: str) -> None: +def configure_logging() -> None: ''' All logging related settings are set up by this function. ''' From 4a70ffb87a195bb6c0adb2888c36f24518e26945 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 23 Oct 2019 15:15:25 -0400 Subject: [PATCH 241/751] ci: ensure that requirements files are in sync this guards against a scenario discovered in: https://github.com/freedomofpress/securedrop-proxy/pull/46#issuecomment-545589326 wherein a contributor would update build-requirements.txt but not requirements.txt --- .circleci/config.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index d5a8ee3c2..a501982b6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,6 +34,14 @@ jobs: make install-deps && make fetch-wheels PKG_DIR=~/project make requirements + - run: + name: Ensure that build-requirements.txt and requirements.txt are in sync. + command: | + cd ~/project + # Return 1 if unstaged changes exist (after `make requirements` in the + # previous run step), else return 0. + git diff --quiet + - run: name: Tag and make source tarball command: | From 5527347cde49cbc27b105e34e8dce07dd2e05152 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 30 Oct 2019 17:33:13 -0700 Subject: [PATCH 242/751] add envvar for logging default to info --- securedrop_proxy/entrypoint.py | 3 ++- securedrop_proxy/proxy.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index d5bb4838e..f568983ba 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -23,6 +23,7 @@ DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_proxy") +LOGLEVEL = os.environ.get('LOGLEVEL', 'info').upper() def start(): @@ -98,7 +99,7 @@ def configure_logging() -> None: # set up primary log log = logging.getLogger() - log.setLevel(logging.DEBUG) + log.setLevel(LOGLEVEL) log.addHandler(handler) # override excepthook to capture a log of catastrophic failures. diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 6b5061931..cc30b3214 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -103,7 +103,7 @@ def handle_non_json_response(self): res = Response(self._presp.status_code) # Create a NamedTemporaryFile, we don't want - # to delete it after closign. + # to delete it after closing. fh = tempfile.NamedTemporaryFile(delete=False) for c in self._presp.iter_content(10): From 9ff16b6b58d861833e70d3019f19817c04fda0d4 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 31 Oct 2019 19:57:13 +0530 Subject: [PATCH 243/751] Initial code commit --- README.md | 54 +++++++++++++++++++++++++++ oqubes-logging | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ oqubeslogging.py | 40 ++++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 README.md create mode 100644 oqubes-logging create mode 100644 oqubeslogging.py diff --git a/README.md b/README.md new file mode 100644 index 000000000..06095d3b7 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# OQubes Logging + +This is a PoC logging service based on [Qubes +buildlog](https://github.com/QubesOS/qubes-builder/blob/master/rpc-services/qubesbuilder.BuildLog). + +## How to use/try this? + +In our example, we will use a vm named *logging* for storing logs, and we will use +*workvm* to send in logs to the *logging* vm. + +### In dom0 + +- Create a file `/etc/qubes-rpc/policy/oqubes.Logging` in `dom0` with the following content. + +``` +workvm logging allow +@anyvm @anyvm deny +``` + +### In logging vm + +Add the following content to `/etc/qubes-rpc/oqubes.Logging` + +``` +/usr/sbin/oqubes-logging +``` + +and then place `oqubes-logging` script to `/usr/sbin/` directory and make sure that +it is executable. + +### To use from any Python code in workvm + +Here is an example code using Python logging + +```Python +import logging +from oqubeslogging import OQubesLog + +def main(): + handler = OQubesLog("workvm", "proxy-debian") + logging.basicConfig(level=logging.DEBUG, handlers=[handler]) + logger = logging.getLogger("example") + + logger.info("kushal says it works") + + +if __name__ == "__main__": + main() + +``` + +## The journalctl example + +TODO: add an example of streaming journalctl logs via python code. \ No newline at end of file diff --git a/oqubes-logging b/oqubes-logging new file mode 100644 index 000000000..036a19ee7 --- /dev/null +++ b/oqubes-logging @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 + +from __future__ import print_function + +import tempfile +import io +import sys +import os +import errno +import shutil +import subprocess +from datetime import datetime + + +def sanitize_line(untrusted_line): + line = bytearray(untrusted_line) + for i, c in enumerate(line): + if c >= 0x20 and c <= 0x7e: + pass + else: + line[i] = 0x2e + return bytearray(line).decode('ascii') + +try: + stdin = sys.stdin.buffer # python3 +except AttributeError: + stdin = io.open(0, 'rb') # python2 + +start = datetime.utcnow() + +tmp_log = tempfile.NamedTemporaryFile(prefix="qubes-log_", delete=False) + +qrexec_remote = "qubes:" + + +def log(msg, remote=True, now=None): + if now is None: + now = datetime.utcnow() + if remote: + remote_str = '{}:'.format(qrexec_remote) + else: + remote_str = '>' + + line = '{:%F %T.%f} +0000 {} {}\n'.format(now, remote_str, msg) + + tmp_log.write(line.encode('utf-8')) + +log('starting log', now=start, remote=False) + +# the first line is always the remote vm name +untrusted_line = stdin.readline() +qrexec_remote = untrusted_line.rstrip(b'\n').decode('utf-8') +while True: + untrusted_line = stdin.readline() + if untrusted_line == b'': + break + + log(sanitize_line(untrusted_line.rstrip(b'\n'))) + + +log('closing log', remote=False) +tmp_log.close() + +file_name_base = os.path.join( + os.getenv('HOME', '/'), + 'QubesIncomingLogs', + '{remote}', + 'log_{time:%Y-%m-%d_%H-%M-%S}').format( + remote=qrexec_remote, + time=start) + +try: + os.makedirs(os.path.dirname(file_name_base)) +except OSError as err: + if err.errno != errno.EEXIST: + raise + +try_no = 0 +file_name = file_name_base +while True: + if try_no > 0: + file_name = '{}.{}'.format(file_name_base, try_no) + + try: + fd = os.open(file_name, os.O_CREAT | os.O_EXCL, 0o664) + except OSError as err: + if err.errno == errno.EEXIST: + try_no += 1 + continue + raise + + os.close(fd) + break + +shutil.move(tmp_log.name, file_name) diff --git a/oqubeslogging.py b/oqubeslogging.py new file mode 100644 index 000000000..6392b1be7 --- /dev/null +++ b/oqubeslogging.py @@ -0,0 +1,40 @@ +from logging import StreamHandler +from subprocess import Popen, PIPE + + +class Singleton(type): + _ins = {} + + def __call__(cls, *args, **kwargs): + if cls not in cls._ins: + cls._ins[cls] = super(Singleton, cls).__call__(*args, **kwargs) + + return cls._ins[cls] + + +class InternalLog(metaclass=Singleton): + def __init__(self, name, logvmname): + self.process = Popen( + ["/usr/lib/qubes/qrexec-client-vm", logvmname, "oqubes.Logging"], + stdin=PIPE, + stdout=PIPE, + stderr=PIPE, + ) + self.write(name) + + def write(self, text): + data = text + "\n" + data = data.encode("utf-8") + self.process.stdin.write(data) + self.process.stdin.flush() + + +class OQubesLog(StreamHandler): + def __init__(self, name, logvmname): + StreamHandler.__init__(self) + self.qubes_log = InternalLog(name, logvmname) + + def emit(self, record): + msg = self.format(record) + self.qubes_log.write(msg) + return True From be54349afc94e03874b0704cc65201e31143c33b Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 31 Oct 2019 19:58:09 +0530 Subject: [PATCH 244/751] Some examples --- ex1.py | 7 +++++++ ex2.py | 10 ++++++++++ example.py | 22 ++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 ex1.py create mode 100644 ex2.py create mode 100644 example.py diff --git a/ex1.py b/ex1.py new file mode 100644 index 000000000..9955c4196 --- /dev/null +++ b/ex1.py @@ -0,0 +1,7 @@ +import logging + + +def fire(msg): + logger = logging.getLogger(__name__) + + logger.debug("bye bye in debug") diff --git a/ex2.py b/ex2.py new file mode 100644 index 000000000..9bb488e31 --- /dev/null +++ b/ex2.py @@ -0,0 +1,10 @@ +import logging + + +class Hello: + def __init__(self, *args, **kwargs): + self.logger = logging.getLogger(__name__) + + + def talk(self, msg): + self.logger.debug(msg) diff --git a/example.py b/example.py new file mode 100644 index 000000000..83662f416 --- /dev/null +++ b/example.py @@ -0,0 +1,22 @@ +import logging +from oqubeslogging import OQubesLog + +import ex2 +import ex1 + + +def main(): + handler = OQubesLog("workvm", "logging") + logging.basicConfig(level=logging.DEBUG, handlers=[handler]) + logger = logging.getLogger("example") + + + d = ex2.Hello() + d.talk("This should be line 1") + ex1.fire("Where are you in middle?") + d.talk("Oh again") + logger.info("kushal says it works.") + + +if __name__ == "__main__": + main() From 6530b0c63c5e40cfa9d4649b3d186ef3fabb7880 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 1 Nov 2019 17:57:46 +0530 Subject: [PATCH 245/751] Adds a journalctl example The log file is actually not storing all messages. --- journal-example.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 journal-example.py diff --git a/journal-example.py b/journal-example.py new file mode 100644 index 000000000..fa468cb10 --- /dev/null +++ b/journal-example.py @@ -0,0 +1,26 @@ +import logging +from oqubeslogging import OQubesLog +from systemd import journal +import select + + +def main(): + handler = OQubesLog("workvm", "logging") + logging.basicConfig(level=logging.DEBUG, handlers=[handler]) + logger = logging.getLogger("example") + j = journal.Reader() + j.seek_tail() + + p = select.poll() + p.register(j, j.get_events()) + while True: + p.poll() + if j.process() == journal.APPEND: + for m in j: + msg = "MSG: {}".format(m["MESSAGE"]) + print(msg) + # TODO: Figure out why the log file in the logging VM is closing + logger.info(m["MESSAGE"]) + +if __name__ == "__main__": + main() \ No newline at end of file From ac3e533dd4f3d08ffa98743f4b183f48094be229 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 1 Nov 2019 20:17:42 +0530 Subject: [PATCH 246/751] Updates readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 06095d3b7..9b19ddcb2 100644 --- a/README.md +++ b/README.md @@ -51,4 +51,6 @@ if __name__ == "__main__": ## The journalctl example -TODO: add an example of streaming journalctl logs via python code. \ No newline at end of file +You will need `python3-systemd` package for the same. + +The code is in `journal-example.py` file. \ No newline at end of file From 587ef0300a1697dfa7013ac5908e950d93e9652c Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 4 Nov 2019 13:10:18 -0800 Subject: [PATCH 247/751] change log info->debug --- securedrop_proxy/entrypoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index f568983ba..33c84d56c 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -37,7 +37,7 @@ def start(): print(e) return - logging.info('Starting SecureDrop Proxy {}'.format(version)) + logging.debug('Starting SecureDrop Proxy {}'.format(version)) # a fresh, new proxy object p = proxy.Proxy() From 3f9659098e99e2701f05a6be43a88c1a90453a14 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 23 Sep 2019 16:16:29 -0700 Subject: [PATCH 248/751] workaround for bus id issue --- securedrop_export/export.py | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index febd54efa..2741bdc51 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -164,31 +164,14 @@ def extract_tarball(self): self.exit_gracefully(msg) def check_usb_connected(self): - # If the USB is not attached via qvm-usb attach, lsusb will return empty string and a # return code of 1 logging.info('Performing usb preflight') try: - p = subprocess.check_output(["lsusb", "-s", "{}:".format(self.pci_bus_id)]) - logging.info("lsusb -s {} : {}".format(self.pci_bus_id, p.decode("utf-8"))) + subprocess.check_output(["lsblk", "-p", "-o", "KNAME", DEVICE]) + self.exit_gracefully("USB_CONNECTED") except subprocess.CalledProcessError: - msg = "ERROR_USB_CONFIGURATION" - self.exit_gracefully(msg) - n_usb = len(p.decode("utf-8").rstrip().split("\n")) - # If there is one device, it is the root hub. - if n_usb == 1: - logging.info('usb preflight - no external devices connected') - msg = "USB_NOT_CONNECTED" - self.exit_gracefully(msg) - # If there are two devices, it's the root hub and another device (presumably for export) - elif n_usb == 2: - logging.info('usb preflight - external device connected') - msg = "USB_CONNECTED" - self.exit_gracefully(msg) - # Else the result is unexpected - else: - msg = "ERROR_USB_CHECK" - self.exit_gracefully(msg) + self.exit_gracefully("USB_NOT_CONNECTED") def check_luks_volume(self): logging.info('Checking if volume is luks-encrypted') From 4ed572aacd662f41719560bf678e6d10759f50c7 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 23 Sep 2019 17:53:15 -0700 Subject: [PATCH 249/751] pipe output for lsblk --- securedrop_export/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 2741bdc51..a220c686d 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -168,7 +168,7 @@ def check_usb_connected(self): # return code of 1 logging.info('Performing usb preflight') try: - subprocess.check_output(["lsblk", "-p", "-o", "KNAME", DEVICE]) + subprocess.check_output(["lsblk", "-p", "-o", "KNAME", DEVICE], stderr=subprocess.PIPE) self.exit_gracefully("USB_CONNECTED") except subprocess.CalledProcessError: self.exit_gracefully("USB_NOT_CONNECTED") From 823e830e711511efc16ef73bb9cd05d19bce4e53 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 1 Nov 2019 12:45:26 -0700 Subject: [PATCH 250/751] change device to sda and fix check --- securedrop_export/export.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index a220c686d..6a65fa3e0 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -14,7 +14,7 @@ PRINTER_NAME = "sdw-printer" PRINTER_WAIT_TIMEOUT = 60 -DEVICE = "/dev/sda1" +DEVICE = "/dev/sda" MOUNTPOINT = "/media/usb" ENCRYPTED_DEVICE = "encrypted_volume" BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" @@ -168,7 +168,8 @@ def check_usb_connected(self): # return code of 1 logging.info('Performing usb preflight') try: - subprocess.check_output(["lsblk", "-p", "-o", "KNAME", DEVICE], stderr=subprocess.PIPE) + subprocess.check_output( + ["lsblk", "-p", "-o", "KNAME", DEVICE, "--noheadings"], stderr=subprocess.PIPE) self.exit_gracefully("USB_CONNECTED") except subprocess.CalledProcessError: self.exit_gracefully("USB_NOT_CONNECTED") From 289110e7ab4bc362287d8ea403e24f902215dd76 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 4 Nov 2019 13:49:15 -0800 Subject: [PATCH 251/751] update tests for lsblk change --- securedrop_export/export.py | 3 ++- tests/test_export.py | 42 +++++++------------------------------ 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 6a65fa3e0..105dd198a 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -169,7 +169,8 @@ def check_usb_connected(self): logging.info('Performing usb preflight') try: subprocess.check_output( - ["lsblk", "-p", "-o", "KNAME", DEVICE, "--noheadings"], stderr=subprocess.PIPE) + ["lsblk", "-p", "-o", "KNAME", DEVICE, "--noheadings", "--inverse"], + stderr=subprocess.PIPE) self.exit_gracefully("USB_CONNECTED") except subprocess.CalledProcessError: self.exit_gracefully("USB_NOT_CONNECTED") diff --git a/tests/test_export.py b/tests/test_export.py index 7c6e45244..17967b464 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -4,16 +4,14 @@ import pytest import subprocess # noqa: F401 import tempfile +from subprocess import CalledProcessError from securedrop_export import export SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa -SAMPLE_OUTPUT_NO_USB = b"Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa -SAMPLE_OUTPUT_USB = b"Bus 001 Device 002: ID 0781:5575 SanDisk Corp.\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub" # noqa -SAMPLE_OUTPUT_USB_ERROR = b"" -SAMPLE_OUTPUT_USB_ERROR2 = b"h\ne\nl\nl\no" +SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") @@ -204,39 +202,13 @@ def test_is_not_open_office_file(capsys, open_office_paths): assert not submission.is_open_office_file(open_office_paths) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_USB) -def test_usb_precheck_connected(mocked_call, capsys): +def test_usb_precheck_disconnected(capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_NOT_CONNECTED" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) - with pytest.raises(SystemExit) as sysexit: - submission.check_usb_connected() - mocked_exit.assert_called_once_with(expected_message) - - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) -def test_usb_precheck_disconnected(mocked_call, capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "USB_CONNECTED" - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) - with pytest.raises(SystemExit) as sysexit: - submission.check_usb_connected() - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + mock.patch("subprocess.check_output", return_value=CalledProcessError(1, 'check_output')) - -@mock.patch("subprocess.check_output", return_code=1) -def test_usb_precheck_error(mocked_call, capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "ERROR_USB_CHECK" - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: submission.check_usb_connected() mocked_exit.assert_called_once_with(expected_message) @@ -246,10 +218,10 @@ def test_usb_precheck_error(mocked_call, capsys): assert captured.err == "{}\n".format(expected_message) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB_ERROR2) -def test_usb_precheck_error_2(mocked_call, capsys): +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) +def test_usb_precheck_connected(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "ERROR_USB_CHECK" + expected_message = "USB_CONNECTED" mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: submission.check_usb_connected() From 98bc5330e02109dd18ca0fc2d65bc13dbf1f8f8b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 5 Nov 2019 18:47:44 -0500 Subject: [PATCH 252/751] add journalist first and last name as attributes on API --- sdclientapi/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 009c7aa88..ab400e9ba 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -92,6 +92,8 @@ def __init__( self.token = None # type: Optional[str] self.token_expiration = None # type: Optional[datetime] self.token_journalist_uuid = None # type: Optional[str] + self.journalist_first_name = None # type: Optional[str] + self.journalist_last_name = None # type: Optional[str] self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool self.default_request_timeout = ( @@ -207,6 +209,8 @@ def authenticate(self, totp: Optional[str] = None) -> bool: token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ" ) self.token_journalist_uuid = token_data["journalist_uuid"] + self.journalist_first_name = token_data["journalist_first_name"] + self.journalist_last_name = token_data["journalist_last_name"] self.update_auth_header() From c8e82ad1b00132917a6544e89960f089b4c5c904 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 5 Nov 2019 19:40:37 -0800 Subject: [PATCH 253/751] update docs and partition check --- README.md | 9 +++++++ securedrop_export/export.py | 21 +++++++++++----- tests/test_export.py | 48 ++++++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 803c3a0a1..e6a7b9ae0 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,15 @@ Code for exporting and printing files from the SecureDrop Qubes Workstation. +## Supported Printers + +TBD + +## Supported Export Devices + +We support luks-encrypted drives that are either MBR/DOS partitioned or GPT partitioned. If you use `Disks` in Linux to partition your drive, you can [follow these instructions](https://docs.securedrop.org/en/stable/set_up_transfer_and_export_device.html#create-usb-transfer-device). For full-disk encryption, you can use [cryptsetup](https://linux.die.net/man/8/cryptsetup), e.g. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 /dev/sda` if `/dev/sda` is your device. + +We do not yet support drives that use full-disk encryption with VeraCrypt. ## Export Archive Format diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 105dd198a..cff77be12 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -169,7 +169,7 @@ def check_usb_connected(self): logging.info('Performing usb preflight') try: subprocess.check_output( - ["lsblk", "-p", "-o", "KNAME", DEVICE, "--noheadings", "--inverse"], + ["lsblk", "-p", "-o", "KNAME", "--noheadings", "--inverse", DEVICE], stderr=subprocess.PIPE) self.exit_gracefully("USB_CONNECTED") except subprocess.CalledProcessError: @@ -178,11 +178,20 @@ def check_usb_connected(self): def check_luks_volume(self): logging.info('Checking if volume is luks-encrypted') try: - # cryptsetup isLuks returns 0 if the device is a luks volume - # subprocess with throw if the device is not luks (rc !=0) - subprocess.check_call(["sudo", "cryptsetup", "isLuks", DEVICE]) - msg = "USB_ENCRYPTED" - self.exit_gracefully(msg) + device_and_partitions = subprocess.check_output( + ["lsblk", "-o", "TYPE", "--noheadings", DEVICE], stderr=subprocess.PIPE) + + # we don't support multiple partitions + partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') + if partition_count > 1: + logging.debug("multiple partitions not supported") + self.exit_gracefully("USB_NO_SUPPORTED_ENCRYPTION") + + # we support full-disk luks encryption where there are 0 partitions + # or 1 partition which will be /dev/sda1 instead of /dev/sda + dev = DEVICE if partition_count == 0 else DEVICE + '1' + subprocess.check_call(["sudo", "cryptsetup", "isLuks", dev]) + self.exit_gracefully("USB_ENCRYPTED") except subprocess.CalledProcessError: msg = "USB_NO_SUPPORTED_ENCRYPTION" self.exit_gracefully(msg) diff --git a/tests/test_export.py b/tests/test_export.py index 17967b464..94b6dd63a 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -11,6 +11,9 @@ SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa +SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa +SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa +SAMPLE_OUTPUT_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") @@ -232,7 +235,7 @@ def test_usb_precheck_connected(mocked_call, capsys): assert captured.err == "{}\n".format(expected_message) -@mock.patch("subprocess.check_call") +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) def test_luks_precheck_encrypted(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_ENCRYPTED" @@ -244,3 +247,46 @@ def test_luks_precheck_encrypted(mocked_call, capsys): assert sysexit.value.code == 0 captured = capsys.readouterr() assert captured.err == "{}\n".format(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) +def test_luks_precheck_encrypted(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + expected_message = "USB_ENCRYPTED" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + + with pytest.raises(SystemExit) as sysexit: + submission.check_luks_volume() + mocked_exit.assert_called_once_with(expected_message) + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) +def test_luks_precheck_encrypted(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + expected_message = "USB_NO_SUPPORTED_ENCRYPTION" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + + with pytest.raises(SystemExit) as sysexit: + submission.check_luks_volume() + mocked_exit.assert_called_once_with(expected_message) + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) +def test_luks_precheck_encrypted(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + expected_message = "USB_NO_SUPPORTED_ENCRYPTION" + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + + mock.patch("subprocess.check_call", return_value=CalledProcessError(1, 'check_call')) + + with pytest.raises(SystemExit) as sysexit: + submission.check_luks_volume() + mocked_exit.assert_called_once_with(expected_message) + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) From c6a7c9004062790b6a830f8aab5af00593ef7187 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 6 Nov 2019 14:03:15 -0800 Subject: [PATCH 254/751] support mounting different encrypted devices --- README.md | 10 ++++- securedrop_export/export.py | 79 +++++++++++++++++++++---------------- 2 files changed, 54 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index e6a7b9ae0..1c5d518ef 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,15 @@ TBD ## Supported Export Devices -We support luks-encrypted drives that are either MBR/DOS partitioned or GPT partitioned. If you use `Disks` in Linux to partition your drive, you can [follow these instructions](https://docs.securedrop.org/en/stable/set_up_transfer_and_export_device.html#create-usb-transfer-device). For full-disk encryption, you can use [cryptsetup](https://linux.die.net/man/8/cryptsetup), e.g. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 /dev/sda` if `/dev/sda` is your device. +We support luks-encrypted drives that are either MBR/DOS partitioned or GPT partitioned. If you use `Disks` in Linux to partition your drive, you can [follow these instructions](https://docs.securedrop.org/en/stable/set_up_transfer_and_export_device.html#create-usb-transfer-device) to create a new export device. You can also use [cryptsetup](https://linux.die.net/man/8/cryptsetup) to create a luks-encrypted device with full-disk encryption, for example: + +1. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 DEVICE` where `DEIVCE` is the name of your removable drive, which you can find via `lsblk -p`. + + Make sure `DEVICE` is correct because you will be overwriting its data irrevocably. + +2. `sudo cryptsetup luksOpen /dev/sdb encrypted_device` + +3. `sudo mkfs.ext4 /dev/mapper/encrypted_device` We do not yet support drives that use full-disk encryption with VeraCrypt. diff --git a/securedrop_export/export.py b/securedrop_export/export.py index cff77be12..7a2265f20 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -175,8 +175,7 @@ def check_usb_connected(self): except subprocess.CalledProcessError: self.exit_gracefully("USB_NOT_CONNECTED") - def check_luks_volume(self): - logging.info('Checking if volume is luks-encrypted') + def set_extracted_device_name(self): try: device_and_partitions = subprocess.check_output( ["lsblk", "-o", "TYPE", "--noheadings", DEVICE], stderr=subprocess.PIPE) @@ -187,47 +186,59 @@ def check_luks_volume(self): logging.debug("multiple partitions not supported") self.exit_gracefully("USB_NO_SUPPORTED_ENCRYPTION") - # we support full-disk luks encryption where there are 0 partitions - # or 1 partition which will be /dev/sda1 instead of /dev/sda - dev = DEVICE if partition_count == 0 else DEVICE + '1' - subprocess.check_call(["sudo", "cryptsetup", "isLuks", dev]) + # set device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted + self.device = DEVICE if partition_count == 0 else DEVICE + '1' + except subprocess.CalledProcessError: + msg = "USB_NO_SUPPORTED_ENCRYPTION" + self.exit_gracefully(msg) + + def check_luks_volume(self): + logging.info('Checking if volume is luks-encrypted') + try: + self.set_extracted_device_name() + logging.debug("checking if {} is luks encrypted".format(self.device)) + subprocess.check_call(["sudo", "cryptsetup", "isLuks", self.device]) self.exit_gracefully("USB_ENCRYPTED") except subprocess.CalledProcessError: msg = "USB_NO_SUPPORTED_ENCRYPTION" self.exit_gracefully(msg) def unlock_luks_volume(self, encryption_key): - # the luks device is not already unlocked - logging.info('Unlocking luks volume {}'.format(self.encrypted_device)) - if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): - p = subprocess.Popen( - ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) - logging.info('Passing key') - p.communicate(input=str.encode(encryption_key, "utf-8")) - rc = p.returncode - if rc != 0: - logging.error('Bad phassphrase for {}'.format(self.encrypted_device)) - msg = "USB_BAD_PASSPHRASE" - self.exit_gracefully(msg) + try: + # set encrypted device (depends on how device was encrypted) + self.set_extracted_device_name() + device_uuid = subprocess.check_output( + ["sudo", "lsblk", "-o", "UUID", "--noheadings", self.device]) + self.encrypted_device = 'luks-' + device_uuid + + # the luks device is not already unlocked + if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): + logging.debug('Unlocking luks volume {}'.format(self.encrypted_device)) + p = subprocess.Popen( + ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + logging.debug('Passing key') + p.communicate(input=str.encode(encryption_key, "utf-8")) + rc = p.returncode + if rc != 0: + logging.error('Bad phassphrase for {}'.format(self.encrypted_device)) + msg = "USB_BAD_PASSPHRASE" + self.exit_gracefully(msg) + except subprocess.CalledProcessError: + self.exit_gracefully("USB_NO_SUPPORTED_ENCRYPTION") def mount_volume(self): - # mount target not created - if not os.path.exists(self.mountpoint): - subprocess.check_call(["sudo", "mkdir", self.mountpoint]) try: - logging.info('Mounting {} to {}'.format(self.encrypted_device, self.mountpoint)) - subprocess.check_call( - [ - "sudo", - "mount", - os.path.join("/dev/mapper/", self.encrypted_device), - self.mountpoint, - ] - ) + # mount target not created + if not os.path.exists(self.mountpoint): + subprocess.check_call(["sudo", "mkdir", self.mountpoint]) + + mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) + logging.info('Mounting {}'.format(mapped_device_path)) + subprocess.check_call(["sudo", "mount", mapped_device_path, self.mountpoint]) subprocess.check_call(["sudo", "chown", "-R", "user:user", self.mountpoint]) except subprocess.CalledProcessError: # clean up From eac1d5414bf93f7339147f7390b0c91c197917cc Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 7 Nov 2019 13:05:42 +0530 Subject: [PATCH 255/751] Adds wheel hashes for both Stretch and Buster --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index 5d37ab853..4b17af9f9 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -3,7 +3,7 @@ chardet==3.0.4 --hash=sha256:9f178988ca4c86e8a319b51aac1185b6fe5192328eb5a163c28 furl==2.0.0 --hash=sha256:cc0eb8998dcc7c5b58bc8625891a9ff563e2765e112024fa3d1e3521481de8b6 idna==2.7 --hash=sha256:954e65e127d0433a352981f43f291a438423d5b385ebf643c70fd740e0634111 orderedmultidict==1.0 --hash=sha256:25489716d76d2cc8aa656bfb00cd40b6ca29d5e11ccde0db60c2b46ad52bb40a -pyyaml==5.1 --hash=sha256:b8d80623e9d4e348c59ea726ce3032a2eb15abca6a48d3828362d11c6014a0a7 +pyyaml==5.1 --hash=sha256:b8d80623e9d4e348c59ea726ce3032a2eb15abca6a48d3828362d11c6014a0a7 --hash=sha256:c6dec5d6ffa44a50d83b9c4e8df0443a0a87e4213ecf2e24fcae6ea991f3b0c0 requests==2.20.0 --hash=sha256:2a539dd6af40a611f3b8eb3f99d3567781352ece1698b2fab42bf4c2218705b5 six==1.11.0 --hash=sha256:4663c7a1dbed033cfb294f2d534bd6151c0698dc12ecabb4eaa3cb041d758528 urllib3==1.24.3 --hash=sha256:028309393606e28e640e2031edd27eb969c94f9364b0871912608aaa8e66c96e From 9720fc93a37fbda108135057bacda0623d06437f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 7 Nov 2019 00:06:09 -0800 Subject: [PATCH 256/751] get uuid using cryptsetup --- securedrop_export/export.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 7a2265f20..c0b93d447 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -205,11 +205,14 @@ def check_luks_volume(self): def unlock_luks_volume(self, encryption_key): try: - # set encrypted device (depends on how device was encrypted) + # get the encrypted device name self.set_extracted_device_name() - device_uuid = subprocess.check_output( - ["sudo", "lsblk", "-o", "UUID", "--noheadings", self.device]) - self.encrypted_device = 'luks-' + device_uuid + luks_header = subprocess.check_output(["sudo", "cryptsetup", "luksDump", self.device]) + luks_header_list = luks_header.decode('utf-8').split('\n') + for line in luks_header_list: + items = line.split('\t') + if 'UUID' in items[0]: + self.encrypted_device = 'luks-' + items[1] # the luks device is not already unlocked if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): From bb5f9a79aec86860729a866b78ff0dafaf31752b Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 7 Nov 2019 10:13:36 -0800 Subject: [PATCH 257/751] Update docs --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c5d518ef..bbfebdb14 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ TBD We support luks-encrypted drives that are either MBR/DOS partitioned or GPT partitioned. If you use `Disks` in Linux to partition your drive, you can [follow these instructions](https://docs.securedrop.org/en/stable/set_up_transfer_and_export_device.html#create-usb-transfer-device) to create a new export device. You can also use [cryptsetup](https://linux.die.net/man/8/cryptsetup) to create a luks-encrypted device with full-disk encryption, for example: -1. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 DEVICE` where `DEIVCE` is the name of your removable drive, which you can find via `lsblk -p`. +1. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 DEVICE` where `DEVICE` is the name of your removable drive, which you can find via `lsblk -p`. Make sure `DEVICE` is correct because you will be overwriting its data irrevocably. @@ -20,6 +20,8 @@ We support luks-encrypted drives that are either MBR/DOS partitioned or GPT part 3. `sudo mkfs.ext4 /dev/mapper/encrypted_device` +4. `sudo cryptsetup luksClose /dev/mapper/encrypted_device` + We do not yet support drives that use full-disk encryption with VeraCrypt. ## Export Archive Format From 68442b0e680d14fa418d417f0696560c15290256 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 17 Oct 2019 10:08:07 -0400 Subject: [PATCH 258/751] Use enum to specify possible return codes --- securedrop_export/export.py | 77 +++++++++++++++++++++++++++---------- securedrop_export/main.py | 5 ++- tests/test_export.py | 21 +++++++--- 3 files changed, 75 insertions(+), 28 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index c0b93d447..4aea94572 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -12,6 +12,8 @@ import tempfile import time +from enum import Enum + PRINTER_NAME = "sdw-printer" PRINTER_WAIT_TIMEOUT = 60 DEVICE = "/dev/sda" @@ -23,6 +25,41 @@ logger = logging.getLogger(__name__) +class ExportStatus(Enum): + + # General errors + ERROR_FILE_NOT_FOUND = 'ERROR_FILE_NOT_FOUND' + ERROR_EXTRACTION = 'ERROR_EXTRACTION' + ERROR_METADATA_PARSING = 'ERROR_METADATA_PARSING' + ERROR_ARCHIVE_METADATA = 'ERROR_ARCHIVE_METADATA' + ERROR_USB_CONFIGURATION = 'ERROR_USB_CONFIGURATION' + ERROR_GENERIC = 'ERROR_GENERIC' + + # USB preflight related errors + USB_CONNECTED = 'USB_CONNECTED' + USB_NOT_CONNECTED = 'USB_NOT_CONNECTED' + ERROR_USB_CHECK = 'ERROR_USB_CHECK' + + # USB Disk preflight related errors + USB_ENCRYPTED = 'USB_ENCRYPTED' + USB_ENCRYPTION_NOT_SUPPORTED = 'USB_ENCRYPTION_NOT_SUPPORTED' + USB_DISK_ERROR = 'USB_DISK_ERROR' + + # Printer preflight related errors + ERROR_PRINTER_NOT_FOUND = 'ERROR_PRINTER_NOT_FOUND' + ERROR_PRINTER_NOT_SUPPORTED = 'ERROR_PRINTER_NOT_SUPPORTED' + ERROR_PRINTER_DRIVER_UNAVAILABLE = 'ERROR_PRINTER_DRIVER_UNAVAILABLE' + ERROR_PRINTER_INSTALL = 'ERROR_PRINTER_INSTALL' + + # Disk export errors + USB_BAD_PASSPHRASE = 'USB_BAD_PASSPHRASE' + ERROR_USB_MOUNT = 'ERROR_USB_MOUNT' + ERROR_USB_WRITE = 'ERROR_USB_WRITE' + + # Printer export errors + ERROR_PRINT = 'ERROR_PRINT' + + class Metadata(object): """ Object to parse, validate and store json metadata from the sd-export archive. @@ -111,7 +148,7 @@ def __init__(self, archive, config_path): raise except Exception: logger.error("error parsing VM configuration.") - self.exit_gracefully("ERROR_CONFIG") + self.exit_gracefully(ExportStatus.ERROR_USB_CONFIGURATION.value) def exit_gracefully(self, msg, e=False): """ @@ -160,7 +197,7 @@ def extract_tarball(self): with tarfile.open(self.archive) as tar: tar.extractall(self.tmpdir) except Exception: - msg = "ERROR_EXTRACTION" + msg = ExportStatus.ERROR_EXTRACTION.value self.exit_gracefully(msg) def check_usb_connected(self): @@ -173,7 +210,7 @@ def check_usb_connected(self): stderr=subprocess.PIPE) self.exit_gracefully("USB_CONNECTED") except subprocess.CalledProcessError: - self.exit_gracefully("USB_NOT_CONNECTED") + self.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) def set_extracted_device_name(self): try: @@ -184,13 +221,12 @@ def set_extracted_device_name(self): partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') if partition_count > 1: logging.debug("multiple partitions not supported") - self.exit_gracefully("USB_NO_SUPPORTED_ENCRYPTION") + self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) # set device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted self.device = DEVICE if partition_count == 0 else DEVICE + '1' except subprocess.CalledProcessError: - msg = "USB_NO_SUPPORTED_ENCRYPTION" - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) def check_luks_volume(self): logging.info('Checking if volume is luks-encrypted') @@ -198,9 +234,9 @@ def check_luks_volume(self): self.set_extracted_device_name() logging.debug("checking if {} is luks encrypted".format(self.device)) subprocess.check_call(["sudo", "cryptsetup", "isLuks", self.device]) - self.exit_gracefully("USB_ENCRYPTED") + self.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) except subprocess.CalledProcessError: - msg = "USB_NO_SUPPORTED_ENCRYPTION" + msg = ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value self.exit_gracefully(msg) def unlock_luks_volume(self, encryption_key): @@ -228,10 +264,10 @@ def unlock_luks_volume(self, encryption_key): rc = p.returncode if rc != 0: logging.error('Bad phassphrase for {}'.format(self.encrypted_device)) - msg = "USB_BAD_PASSPHRASE" + msg = ExportStatus.USB_BAD_PASSPHRASE.value self.exit_gracefully(msg) except subprocess.CalledProcessError: - self.exit_gracefully("USB_NO_SUPPORTED_ENCRYPTION") + self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) def mount_volume(self): try: @@ -250,7 +286,7 @@ def mount_volume(self): subprocess.check_call( ["sudo", "cryptsetup", "luksClose", self.encrypted_device] ) - msg = "ERROR_USB_MOUNT" + msg = ExportStatus.ERROR_USB_MOUNT.value self.exit_gracefully(msg) def copy_submission(self): @@ -264,7 +300,7 @@ def copy_submission(self): logging.info('File copied successfully to {}'.format(self.target_dirname)) self.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError): - msg = "ERROR_USB_WRITE" + msg = ExportStatus.ERROR_USB_WRITE.value self.exit_gracefully(msg) finally: # Finally, we sync the filesystem, unmount the drive and lock the @@ -297,11 +333,11 @@ def wait_for_print(self): else: time.sleep(5) except subprocess.CalledProcessError: - msg = "ERROR_PRINT" + msg = ExportStatus.ERROR_PRINT.value self.exit_gracefully(msg) except TimeoutException: logging.error('Timeout waiting for printer {}'.format(self.printer_name)) - msg = "ERROR_PRINT" + msg = ExportStatus.ERROR_PRINT.value self.exit_gracefully(msg) return True @@ -311,7 +347,7 @@ def get_printer_uri(self): try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError: - msg = "ERROR_PRINTER_URI" + msg = ExportStatus.ERROR_PRINTER_URI.value self.exit_gracefully(msg) # fetch the usb printer uri @@ -324,14 +360,14 @@ def get_printer_uri(self): if printer_uri == "": # No usb printer is connected logging.info('No usb printers connected') - self.exit_gracefully("ERROR_PRINTER_NOT_FOUND") + self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) elif "Brother" in printer_uri: logging.info('Printer {} is supported'.format(printer_uri)) return printer_uri else: # printer url is a make that is unsupported logging.info('Printer {} is unsupported'.format(printer_uri)) - self.exit_gracefully("ERROR_PRINTER_NOT_SUPPORTED") + self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) def install_printer_ppd(self, uri): # Some drivers don't come with ppd files pre-compiled, we must compile them @@ -347,12 +383,13 @@ def install_printer_ppd(self, uri): ] ) except subprocess.CalledProcessError: - msg = "ERROR_PRINTER_DRIVER_UNAVAILBLE" + msg = ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILBLE.value self.exit_gracefully(msg) return self.brlaser_ppd # Here, we could support ppd drivers for other makes or models in the future def setup_printer(self, printer_uri, printer_ppd): + # Add the printer using lpadmin try: # Add the printer using lpadmin subprocess.check_call( @@ -374,7 +411,7 @@ def setup_printer(self, printer_uri, printer_ppd): ["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"] ) except subprocess.CalledProcessError: - msg = "ERROR_PRINTER_INSTALL" + msg = ExportStatus.ERROR_PRINTER_INSTALL.value self.exit_gracefully(msg) def print_test_page(self): @@ -424,7 +461,7 @@ def print_file(self, file_to_print): logging.info('Sending file to printer {}:{}'.format(self.printer_name)) subprocess.check_call(["xpp", "-P", self.printer_name, file_to_print]) except subprocess.CalledProcessError: - msg = "ERROR_PRINT" + msg = ExportStatus.ERROR_PRINT.value self.exit_gracefully(msg) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 00ca144b1..34b8a9f66 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,6 +1,7 @@ import logging from securedrop_export import export +from securedrop_export.export import ExportStatus logger = logging.getLogger(__name__) @@ -11,7 +12,7 @@ def __main__(submission): try: submission.archive_metadata = export.Metadata(submission.tmpdir) except Exception: - submission.exit_gracefully("ERROR_METADATA_PARSING") + submission.exit_gracefully(ExportStatus.ERROR_METADATA_PARSING.value) if submission.archive_metadata.is_valid(): if submission.archive_metadata.export_method == "usb-test": @@ -47,4 +48,4 @@ def __main__(submission): submission.setup_printer(printer_uri, printer_ppd) submission.print_test_page() else: - submission.exit_gracefully("ERROR_ARCHIVE_METADATA") + submission.exit_gracefully(ExportStatus.ERROR_ARCHIVE_METADATA.value) diff --git a/tests/test_export.py b/tests/test_export.py index 94b6dd63a..ffef44596 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -22,7 +22,9 @@ def test_bad_sd_export_config_invalid_json(capsys): - expected_message = "ERROR_CONFIG" + expected_message = "ERROR_USB_CONFIGURATION" + assert export.ExportStatus.ERROR_USB_CONFIGURATION.value == expected_message + with pytest.raises(SystemExit) as sysexit: export.SDExport("", BAD_TEST_CONFIG) # A graceful exit means a return code of 0 @@ -35,7 +37,9 @@ def test_bad_sd_export_config_invalid_json(capsys): def test_bad_sd_export_config_invalid_value(capsys): - expected_message = "ERROR_CONFIG" + expected_message = "ERROR_USB_CONFIGURATION" + assert export.ExportStatus.ERROR_USB_CONFIGURATION.value == expected_message + with pytest.raises(SystemExit) as sysexit: export.SDExport("", ANOTHER_BAD_TEST_CONFIG) # A graceful exit means a return code of 0 @@ -170,6 +174,7 @@ def test_get_good_printer_uri(mocked_call): def test_get_bad_printer_uri(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_PRINTER_NOT_FOUND" + assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -208,6 +213,7 @@ def test_is_not_open_office_file(capsys, open_office_paths): def test_usb_precheck_disconnected(capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_NOT_CONNECTED" + assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message mocked_exit = mock.patch("export.exit_gracefully", return_value=0) mock.patch("subprocess.check_output", return_value=CalledProcessError(1, 'check_output')) @@ -225,6 +231,7 @@ def test_usb_precheck_disconnected(capsys): def test_usb_precheck_connected(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_CONNECTED" + assert export.ExportStatus.USB_CONNECTED.value == expected_message mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: submission.check_usb_connected() @@ -238,7 +245,7 @@ def test_usb_precheck_connected(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) def test_luks_precheck_encrypted(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "USB_ENCRYPTED" + expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -252,7 +259,7 @@ def test_luks_precheck_encrypted(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_luks_precheck_encrypted(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "USB_ENCRYPTED" + expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -266,7 +273,7 @@ def test_luks_precheck_encrypted(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) def test_luks_precheck_encrypted(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "USB_NO_SUPPORTED_ENCRYPTION" + expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: @@ -276,10 +283,12 @@ def test_luks_precheck_encrypted(mocked_call, capsys): captured = capsys.readouterr() assert captured.err == "{}\n".format(expected_message) + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_luks_precheck_encrypted(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "USB_NO_SUPPORTED_ENCRYPTION" + expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" + assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) mock.patch("subprocess.check_call", return_value=CalledProcessError(1, 'check_call')) From b21b0ef6e3b1807fee77bd5231a833260a7af86f Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 6 Nov 2019 15:02:20 -0500 Subject: [PATCH 259/751] wrap subprocess.check_call into safe_check_call This ensures we properly catch CalledProcessErrors and that we propagate the proper message to stdout --- securedrop_export/export.py | 192 +++++++++++++++++++----------------- tests/test_export.py | 13 +++ 2 files changed, 113 insertions(+), 92 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 4aea94572..c5475e96f 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -150,6 +150,16 @@ def __init__(self, archive, config_path): logger.error("error parsing VM configuration.") self.exit_gracefully(ExportStatus.ERROR_USB_CONFIGURATION.value) + def safe_check_call(self, command, error_message): + """ + Safely wrap subprocess.check_output to ensure we always return 0 and + log the error messages + """ + try: + subprocess.check_call(command) + except subprocess.CalledProcessError as ex: + self.exit_gracefully(msg=error_message, e=ex.output) + def exit_gracefully(self, msg, e=False): """ Utility to print error messages, mostly used during debugging, @@ -169,27 +179,24 @@ def exit_gracefully(self, msg, e=False): logger.error(e_output) except Exception: e_output = "" - sys.stderr.write(e_output) + sys.stderr.write(str(e_output)) sys.stderr.write("\n") # exit with 0 return code otherwise the os will attempt to open # the file with another application sys.exit(0) def popup_message(self, msg): - try: - subprocess.check_call( - [ - "notify-send", - "--expire-time", - "3000", - "--icon", - "/usr/share/securedrop/icons/sd-logo.png", - "SecureDrop: {}".format(msg), - ] - ) - except subprocess.CalledProcessError as e: - msg = "Error sending notification:" - self.exit_gracefully(msg, e=e) + self.safe_check_call( + command=[ + "notify-send", + "--expire-time", + "3000", + "--icon", + "/usr/share/securedrop/icons/sd-logo.png", + "SecureDrop: {}".format(msg), + ], + error_message="Error sending notification:" + ) def extract_tarball(self): try: @@ -229,15 +236,16 @@ def set_extracted_device_name(self): self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) def check_luks_volume(self): + # cryptsetup isLuks returns 0 if the device is a luks volume + # subprocess with throw if the device is not luks (rc !=0) logging.info('Checking if volume is luks-encrypted') - try: - self.set_extracted_device_name() - logging.debug("checking if {} is luks encrypted".format(self.device)) - subprocess.check_call(["sudo", "cryptsetup", "isLuks", self.device]) - self.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) - except subprocess.CalledProcessError: - msg = ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - self.exit_gracefully(msg) + self.set_extracted_device_name() + logging.debug("checking if {} is luks encrypted".format(self.device)) + self.safe_check_call( + command=["sudo", "cryptsetup", "isLuks", self.device], + error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + ) + self.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) def unlock_luks_volume(self, encryption_key): try: @@ -270,27 +278,28 @@ def unlock_luks_volume(self, encryption_key): self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) def mount_volume(self): - try: - # mount target not created - if not os.path.exists(self.mountpoint): - subprocess.check_call(["sudo", "mkdir", self.mountpoint]) - - mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) - logging.info('Mounting {}'.format(mapped_device_path)) - subprocess.check_call(["sudo", "mount", mapped_device_path, self.mountpoint]) - subprocess.check_call(["sudo", "chown", "-R", "user:user", self.mountpoint]) - except subprocess.CalledProcessError: - # clean up - logging.error('Error mounting {} to {}'.format(self.encrypted_device, self.mountpoint)) - logging.info('Locking luks volume {}'.format(self.encrypted_device)) - subprocess.check_call( - ["sudo", "cryptsetup", "luksClose", self.encrypted_device] + # mount target not created, create folder + if not os.path.exists(self.mountpoint): + self.safe_check_call( + command=["sudo", "mkdir", self.mountpoint], + error_message=ExportStatus.ERROR_USB_MOUNT ) - msg = ExportStatus.ERROR_USB_MOUNT.value - self.exit_gracefully(msg) + + mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) + logging.info('Mounting {}'.format(mapped_device_path)) + self.safe_check_call( + command=["sudo", "mount", mapped_device_path, self.mountpoint], + error_message=ExportStatus.ERROR_USB_MOUNT.value + ) + self.safe_check_call( + command=["sudo", "chown", "-R", "user:user", self.mountpoint], + error_message=ExportStatus.ERROR_USB_MOUNT.value + ) def copy_submission(self): # move files to drive (overwrites files with same filename) and unmount drive + # we don't use safe_check_call here because we must lock and + # unmount the drive as part of the finally block try: target_path = os.path.join(self.mountpoint, self.target_dirname) subprocess.check_call(["mkdir", target_path]) @@ -372,47 +381,44 @@ def get_printer_uri(self): def install_printer_ppd(self, uri): # Some drivers don't come with ppd files pre-compiled, we must compile them if "Brother" in uri: - try: - subprocess.check_call( - [ - "sudo", - "ppdc", - self.brlaser_driver, - "-d", - "/usr/share/cups/model/", - ] - ) - except subprocess.CalledProcessError: - msg = ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILBLE.value - self.exit_gracefully(msg) + self.safe_check_call( + command=[ + "sudo", + "ppdc", + self.brlaser_driver, + "-d", + "/usr/share/cups/model/", + ], + error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value + ) return self.brlaser_ppd # Here, we could support ppd drivers for other makes or models in the future def setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin - try: - # Add the printer using lpadmin - subprocess.check_call( - [ - "sudo", - "lpadmin", - "-p", - self.printer_name, - "-v", - printer_uri, - "-P", - printer_ppd, - ] - ) - # Activate the printer so that it can receive jobs - subprocess.check_call(["sudo", "lpadmin", "-p", self.printer_name, "-E"]) - # Allow user to print (without using sudo) - subprocess.check_call( - ["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"] - ) - except subprocess.CalledProcessError: - msg = ExportStatus.ERROR_PRINTER_INSTALL.value - self.exit_gracefully(msg) + self.safe_check_call( + command=[ + "sudo", + "lpadmin", + "-p", + self.printer_name, + "-v", + printer_uri, + "-P", + printer_ppd, + ], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + # Activate the printer so that it can receive jobs + self.safe_check_call( + command=["sudo", "lpadmin", "-p", self.printer_name, "-E"], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + # Allow user to print (without using sudo) + self.safe_check_call( + command=["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) def print_test_page(self): self.print_file("/usr/share/cups/data/testprint") @@ -447,22 +453,24 @@ def is_open_office_file(self, filename): return False def print_file(self, file_to_print): - try: - # If the file to print is an (open)office document, we need to call unoconf to - # convert the file to pdf as printer drivers do not support this format - if self.is_open_office_file(file_to_print): - logging.info('Converting Office document to pdf'.format(self.printer_name)) - folder = os.path.dirname(file_to_print) - converted_filename = file_to_print + ".pdf" - converted_path = os.path.join(folder, converted_filename) - subprocess.check_call(["unoconv", "-o", converted_path, file_to_print]) - file_to_print = converted_path - - logging.info('Sending file to printer {}:{}'.format(self.printer_name)) - subprocess.check_call(["xpp", "-P", self.printer_name, file_to_print]) - except subprocess.CalledProcessError: - msg = ExportStatus.ERROR_PRINT.value - self.exit_gracefully(msg) + # If the file to print is an (open)office document, we need to call unoconf to + # convert the file to pdf as printer drivers do not support this format + if self.is_open_office_file(file_to_print): + logging.info('Converting Office document to pdf'.format(self.printer_name)) + folder = os.path.dirname(file_to_print) + converted_filename = file_to_print + ".pdf" + converted_path = os.path.join(folder, converted_filename) + self.safe_check_call( + command=["unoconv", "-o", converted_path, file_to_print], + error_message=ExportStatus.ERROR_PRINT.value + ) + file_to_print = converted_path + + logging.info('Sending file to printer {}:{}'.format(self.printer_name)) + self.safe_check_call( + command=["xpp", "-P", self.printer_name, file_to_print], + error_message=ExportStatus.ERROR_PRINT.value + ) # class ends here diff --git a/tests/test_export.py b/tests/test_export.py index ffef44596..440fae616 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -299,3 +299,16 @@ def test_luks_precheck_encrypted(mocked_call, capsys): assert sysexit.value.code == 0 captured = capsys.readouterr() assert captured.err == "{}\n".format(expected_message) + + +def test_safe_check_call(capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + submission.safe_check_call(['ls'], "this will work") + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + expected_message = "uh oh!!!!" + with pytest.raises(SystemExit) as sysexit: + submission.safe_check_call(['ls', 'kjdsfhkdjfh'], expected_message) + mocked_exit.assert_called_once_with(expected_message) + assert sysexit.value.code == 0 + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) From 1e0ed17245e1d27bca5f7e5813471d6b95401130 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 6 Nov 2019 16:51:53 -0500 Subject: [PATCH 260/751] Exit_gracefully should correctly log exceptions It should also not log stuff to stderr --- securedrop_export/export.py | 17 ++++++++--------- tests/test_export.py | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index c5475e96f..09b97627d 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -167,20 +167,19 @@ def exit_gracefully(self, msg, e=False): since non-zero exit values will cause system to try alternative solutions for mimetype handling, which we want to avoid. """ - sys.stderr.write(msg) - sys.stderr.write("\n") logger.info('Exiting with message: {}'.format(msg)) - if e: + if not e: + sys.stderr.write(msg) + sys.stderr.write("\n") + else: try: # If the file archive was extracted, delete before returning if os.path.isdir(self.tmpdir): shutil.rmtree(self.tmpdir) - e_output = e.output - logger.error(e_output) - except Exception: - e_output = "" - sys.stderr.write(str(e_output)) - sys.stderr.write("\n") + logger.error("{}:{}".format(msg, e.output)) + except Exception as ex: + logger.error("Unhandled exception: {}".format(ex)) + sys.stderr.write(ExportStatus.ERROR_GENERIC.value) # exit with 0 return code otherwise the os will attempt to open # the file with another application sys.exit(0) diff --git a/tests/test_export.py b/tests/test_export.py index 440fae616..66c420339 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -84,7 +84,7 @@ def test_exit_gracefully_exception(capsys): assert sysexit.value.code == 0 captured = capsys.readouterr() - assert captured.err == "{}\n\n".format(test_msg) + assert captured.err == export.ExportStatus.ERROR_GENERIC.value assert captured.out == "" From c19c0d7212c048c2a3dce0e1bbd0319ae72d18e9 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 6 Nov 2019 16:55:38 -0500 Subject: [PATCH 261/751] Cleanup: directly pass enum values instead of assigning variable --- securedrop_export/export.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 09b97627d..f1454bb23 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -203,8 +203,7 @@ def extract_tarball(self): with tarfile.open(self.archive) as tar: tar.extractall(self.tmpdir) except Exception: - msg = ExportStatus.ERROR_EXTRACTION.value - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) def check_usb_connected(self): # If the USB is not attached via qvm-usb attach, lsusb will return empty string and a @@ -271,8 +270,7 @@ def unlock_luks_volume(self, encryption_key): rc = p.returncode if rc != 0: logging.error('Bad phassphrase for {}'.format(self.encrypted_device)) - msg = ExportStatus.USB_BAD_PASSPHRASE.value - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) except subprocess.CalledProcessError: self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) @@ -308,8 +306,7 @@ def copy_submission(self): logging.info('File copied successfully to {}'.format(self.target_dirname)) self.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError): - msg = ExportStatus.ERROR_USB_WRITE.value - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) finally: # Finally, we sync the filesystem, unmount the drive and lock the # luks volume, and exit 0 @@ -341,12 +338,10 @@ def wait_for_print(self): else: time.sleep(5) except subprocess.CalledProcessError: - msg = ExportStatus.ERROR_PRINT.value - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.ERROR_PRINT.value) except TimeoutException: logging.error('Timeout waiting for printer {}'.format(self.printer_name)) - msg = ExportStatus.ERROR_PRINT.value - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.ERROR_PRINT.value) return True def get_printer_uri(self): @@ -355,8 +350,7 @@ def get_printer_uri(self): try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError: - msg = ExportStatus.ERROR_PRINTER_URI.value - self.exit_gracefully(msg) + self.exit_gracefully(ExportStatus.ERROR_PRINTER_URI.value) # fetch the usb printer uri for line in output.split(): From e378abf0a50c99a26b65838c4ab32159700b1b2d Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 8 Nov 2019 09:35:49 -0500 Subject: [PATCH 262/751] Fix linting/tests Linting was failing but was not caught, but there were multiple tests with the same name (lint was failing, but app tests were passing). This was not caught in the review (only test was run) --- securedrop_export/export.py | 4 ++-- tests/test_export.py | 42 ++++++++++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index f1454bb23..c8ec5dc73 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -226,12 +226,12 @@ def set_extracted_device_name(self): partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') if partition_count > 1: logging.debug("multiple partitions not supported") - self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) + self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) # set device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted self.device = DEVICE if partition_count == 0 else DEVICE + '1' except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) + self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) def check_luks_volume(self): # cryptsetup isLuks returns 0 if the device is a luks volume diff --git a/tests/test_export.py b/tests/test_export.py index 66c420339..87f031d88 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -243,21 +243,49 @@ def test_usb_precheck_connected(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) -def test_luks_precheck_encrypted(mocked_call, capsys): +def test_extract_device_name_no_part(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + submission.set_extracted_device_name() + assert submission.device == "/dev/sda" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) +def test_extract_device_name_single_part(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + submission.set_extracted_device_name() + assert submission.device == "/dev/sda1" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) +def test_extract_device_name_multiple_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value with pytest.raises(SystemExit) as sysexit: - submission.check_luks_volume() + submission.set_extracted_device_name() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 captured = capsys.readouterr() assert captured.err == "{}\n".format(expected_message) +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) +@mock.patch("subprocess.check_call", return_value=0) +def test_luks_precheck_encrypted_fde(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + expected_message = export.ExportStatus.USB_ENCRYPTED.value + mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + + with pytest.raises(SystemExit) as sysexit: + submission.check_luks_volume() + mocked_exit.assert_called_once_with(expected_message) + assert sysexit.value.code == 0 + + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_luks_precheck_encrypted(mocked_call, capsys): +@mock.patch("subprocess.check_call", return_value=0) +def test_luks_precheck_encrypted_single_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) @@ -266,12 +294,10 @@ def test_luks_precheck_encrypted(mocked_call, capsys): submission.check_luks_volume() mocked_exit.assert_called_once_with(expected_message) assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_luks_precheck_encrypted(mocked_call, capsys): +def test_luks_precheck_encrypted_multi_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value mocked_exit = mock.patch("export.exit_gracefully", return_value=0) @@ -285,7 +311,7 @@ def test_luks_precheck_encrypted(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_luks_precheck_encrypted(mocked_call, capsys): +def test_luks_precheck_encrypted_luks_error(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value From a770fad1bbbb325616b06499dacfa7e130573201 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 8 Nov 2019 12:02:31 -0500 Subject: [PATCH 263/751] Cleanup: Remove config in sd-export-usb This is no longer needed as we are no longer using the pci bus id for preflight checks. --- securedrop_export/export.py | 13 ------------- tests/test_export.py | 35 ----------------------------------- 2 files changed, 48 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index c8ec5dc73..e9706ac84 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -137,19 +137,6 @@ def __init__(self, archive, config_path): ) self.tmpdir = tempfile.mkdtemp() - try: - with open(config_path) as f: - logging.info('Retrieving VM configuration') - json_config = json.loads(f.read()) - self.pci_bus_id = json_config.get("pci_bus_id", None) - logging.info('pci_bus_id is {}'.format(self.pci_bus_id)) - if self.pci_bus_id is None: - logging.error('pci_bus_id is not set in VM configuration') - raise - except Exception: - logger.error("error parsing VM configuration.") - self.exit_gracefully(ExportStatus.ERROR_USB_CONFIGURATION.value) - def safe_check_call(self, command, error_message): """ Safely wrap subprocess.check_output to ensure we always return 0 and diff --git a/tests/test_export.py b/tests/test_export.py index 87f031d88..02beddecc 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -20,41 +20,6 @@ ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") -def test_bad_sd_export_config_invalid_json(capsys): - - expected_message = "ERROR_USB_CONFIGURATION" - assert export.ExportStatus.ERROR_USB_CONFIGURATION.value == expected_message - - with pytest.raises(SystemExit) as sysexit: - export.SDExport("", BAD_TEST_CONFIG) - # A graceful exit means a return code of 0 - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) - assert captured.out == "" - - -def test_bad_sd_export_config_invalid_value(capsys): - - expected_message = "ERROR_USB_CONFIGURATION" - assert export.ExportStatus.ERROR_USB_CONFIGURATION.value == expected_message - - with pytest.raises(SystemExit) as sysexit: - export.SDExport("", ANOTHER_BAD_TEST_CONFIG) - # A graceful exit means a return code of 0 - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) - assert captured.out == "" - - -def test_good_sd_export_config(capsys): - submission = export.SDExport("", TEST_CONFIG) - assert submission.pci_bus_id == "2" - - def test_exit_gracefully_no_exception(capsys): submission = export.SDExport("testfile", TEST_CONFIG) From aa461f17e51f14534b79946869e83ea5da5ebd04 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Sat, 9 Nov 2019 13:28:13 -0500 Subject: [PATCH 264/751] test: first/last name on token endpoint response --- data/setUp.json | 2 +- data/test-setup.yml | 41 +++++++++++++++++++++++++++-------------- tests/test_api.py | 2 ++ tests/test_apiproxy.py | 2 ++ 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/data/setUp.json b/data/setUp.json index de46f4c90..88cbc367d 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"journalist_first_name\\\": \\\"bob\\\", \\n \\\"journalist_last_name\\\": \\\"bobathy\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} diff --git a/data/test-setup.yml b/data/test-setup.yml index 9fd4b4198..7adfd8424 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,22 +1,35 @@ interactions: - request: - body: '{"one_time_code": "278592", "passphrase": "correct horse battery staple - profanity oil chewy", "username": "journalist"}' + body: '{"passphrase": "correct horse battery staple profanity oil chewy", "username": + "journalist", "one_time_code": "190968"}' headers: - Accept: ['*/*'] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['119'] - User-Agent: [python-requests/2.20.0] + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '119' + User-Agent: + - python-requests/2.21.0 method: POST uri: http://127.0.0.1:8081/api/v1/token response: - body: {string: "{\n \"expiration\": \"2019-03-20T02:56:30.121480Z\", \n \"journalist_uuid\": - \"f775c4e9-e616-4fd4-9d87-e42cef293c3b\", \n \"token\": \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0\"\n}\n"} + body: + string: "{\n \"expiration\": \"2019-11-10T02:12:38.519862Z\", \n \"journalist_first_name\": + \"bob\", \n \"journalist_last_name\": \"bobathy\", \n \"journalist_uuid\": \"6c05e07a-24aa-4475-99b4-25fb5a1ba3c4\", + \n \"token\": \"eyJpYXQiOjE1NzMzMjMxNTgsImFsZyI6IkhTMjU2IiwiZXhwIjoxNTczMzUxOTU4fQ.eyJpZCI6MX0.6DOFozpT3pg5YSF4hk0ISTc1VRNSTjbGxaN17EjPvJM\"\n}\n" headers: - Content-Length: ['250'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '317' + Content-Type: + - application/json + Date: + - Sat, 09 Nov 2019 18:12:38 GMT + Server: + - Werkzeug/0.14.1 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/tests/test_api.py b/tests/test_api.py index d008d941b..44d7ff068 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -69,6 +69,8 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) + self.assertTrue(isinstance(self.api.journalist_first_name, (str, None))) + self.assertTrue(isinstance(self.api.journalist_last_name, (str, None))) @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 19a383766..aca80258e 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -51,6 +51,8 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) + self.assertTrue(isinstance(self.api.journalist_first_name, (str, None))) + self.assertTrue(isinstance(self.api.journalist_last_name, (str, None))) @dastollervey_datasaver def test_get_sources(self): From d70e134e05fabe4fb3afd1a62359b698283d80f8 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Sat, 9 Nov 2019 14:01:48 -0500 Subject: [PATCH 265/751] test: None is a singleton, not a type --- tests/test_api.py | 4 ++-- tests/test_apiproxy.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index 44d7ff068..33877045a 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -69,8 +69,8 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.journalist_first_name, (str, None))) - self.assertTrue(isinstance(self.api.journalist_last_name, (str, None))) + self.assertTrue(isinstance(self.api.journalist_first_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.journalist_last_name, (str, type(None)))) @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index aca80258e..0d9716a35 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -51,8 +51,8 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.journalist_first_name, (str, None))) - self.assertTrue(isinstance(self.api.journalist_last_name, (str, None))) + self.assertTrue(isinstance(self.api.journalist_first_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.journalist_last_name, (str, type(None)))) @dastollervey_datasaver def test_get_sources(self): From c2ce000b0df254d85ada2fa2cff5b604b8c2b83b Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 12 Nov 2019 11:39:03 +0530 Subject: [PATCH 266/751] Updates to 0.0.12 release --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b8a5d7761..00ec1a55f 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.11", + version="0.0.12", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 51d6eb84d628c37c6baf1d916359526cb05f8e1f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 19 Nov 2019 10:38:25 -0500 Subject: [PATCH 267/751] ci: run tests also under python 3.7 --- .circleci/config.yml | 46 ++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d53dabaf2..4d6ecd2f1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,3 +1,20 @@ +--- +common-steps: + - &install_packages + run: + name: Install packages + command: | + sudo apt install libnotify-bin + + - &run_tests + run: + name: Install test requirements and run tests + command: | + virtualenv .venv + source .venv/bin/activate + pip install --require-hashes -r test-requirements.txt + make test + version: 2 jobs: lint: @@ -19,26 +36,27 @@ jobs: source .venv/bin/activate make safety - test: + test-stretch: docker: - - image: circleci/python:3.5 + - image: circleci/python:3.5-stretch steps: - checkout - - run: - name: Install packages - command: | - sudo apt install libnotify-bin - - run: - name: Install test requirements and run tests - command: | - virtualenv .venv - source .venv/bin/activate - pip install --require-hashes -r test-requirements.txt - make test + - *install_packages + - *run_tests + + test-buster: + docker: + - image: circleci/python:3.7-buster + steps: + - checkout + - *install_packages + - *run_tests + workflows: version: 2 securedrop_export_ci: jobs: - lint - - test + - test-stretch + - test-buster From 057014a0b4510311a6543a3d5756ab224fbb0891 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 21 Nov 2019 10:12:14 -0800 Subject: [PATCH 268/751] securedrop-proxy 0.1.5 --- changelog.md | 4 ++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index a97c31911..176c9a111 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.5 + + * Update build-requirements.txt to include wheels for Buster + ## 0.1.4 * Update urllib3 to version 1.24.3 or later due to CVE-2019-11324 (#35) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 845639eef..9faa1b7a7 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.1.4 +0.1.5 From 9b9688eaf022bb33b4e54c3fa3c0288767028f8d Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 22 Nov 2019 16:19:44 -0500 Subject: [PATCH 269/751] dev: getting started docs, add single target for test/lint --- Makefile | 3 +++ README.md | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/Makefile b/Makefile index 079b9e379..687ec36b1 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,9 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities update-pip-requirements: ## Updates all Python requirements files via pip-compile. pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in +.PHONY: check +check: lint test + .PHONY: test test: pytest -v tests/ diff --git a/README.md b/README.md index bbfebdb14..4d097a2c5 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,22 @@ Code for exporting and printing files from the SecureDrop Qubes Workstation. +## Getting Started + +Python 3 support is required. To get started: + +``` +virtualenv --python=python3.7 .venv +source .venv/bin/activate +pip install -r test-requirements.txt +``` + +To run the linter and tests: + +``` +make check +``` + ## Supported Printers TBD From 44e046ffdafbfe392fbae82dfac5d557896f1cae Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 22 Nov 2019 16:35:50 -0500 Subject: [PATCH 270/751] dev: enable running single tests via makefile target --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 687ec36b1..3ecc0094a 100644 --- a/Makefile +++ b/Makefile @@ -14,10 +14,11 @@ update-pip-requirements: ## Updates all Python requirements files via pip-compil .PHONY: check check: lint test - + +TESTS ?= tests .PHONY: test test: - pytest -v tests/ + pytest -v $$TESTS .PHONY: lint lint: From c40c1910137e5cb564f121aaa1c0f1bd15348f6f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 22 Nov 2019 18:32:11 -0500 Subject: [PATCH 271/751] test: add pytest-mock and pip-tools to test dependencies --- test-requirements.in | 2 ++ test-requirements.txt | 16 +++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/test-requirements.in b/test-requirements.in index 28ecacab6..00ca62224 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -1,2 +1,4 @@ flake8 +pip-tools pytest +pytest-mock \ No newline at end of file diff --git a/test-requirements.txt b/test-requirements.txt index 8eb119b9c..4cd163f1f 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -12,6 +12,10 @@ attrs==19.1.0 \ --hash=sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79 \ --hash=sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399 \ # via pytest +click==7.0 \ + --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ + --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ + # via pip-tools entrypoints==0.3 \ --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ @@ -36,10 +40,9 @@ packaging==19.0 \ --hash=sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af \ --hash=sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3 \ # via pytest -pathlib2==2.3.4 \ - --hash=sha256:2156525d6576d21c4dcaddfa427fae887ef89a7a9de5cbfe0728b3aafa78427e \ - --hash=sha256:446014523bb9be5c28128c4d2a10ad6bb60769e78bd85658fe44a450674e0ef8 \ - # via pytest +pip-tools==4.2.0 \ + --hash=sha256:123174aabf7f4a63dd6e0bfc8aeeb5eaddbecb75a41e9f0dd4c447b1f2de14f7 \ + --hash=sha256:5427ea4dcc175649723985fbcace9b2d8f46f9adbcc63bc2d7b247d9bcc74917 pluggy==0.12.0 \ --hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \ --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c \ @@ -60,13 +63,16 @@ pyparsing==2.4.1.1 \ --hash=sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580 \ --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 \ # via packaging +pytest-mock==1.12.1 \ + --hash=sha256:96a0cebc66e09930be2a15b03333d90b59584d3fb011924f81c14b50ee0afbba \ + --hash=sha256:e5381be2608e49547f5e47633c5f81241ebf6206d17ce516a7a18d5a917e3859 pytest==4.6.4 \ --hash=sha256:6aa9bc2f6f6504d7949e9df2a756739ca06e58ffda19b5e53c725f7b03fb4aae \ --hash=sha256:b77ae6f2d1a760760902a7676887b665c086f71e3461c64ed2a312afcedc00d6 six==1.12.0 \ --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ - # via more-itertools, packaging, pathlib2, pytest + # via more-itertools, packaging, pip-tools, pytest wcwidth==0.1.7 \ --hash=sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e \ --hash=sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c \ From 7e604d8b0c0809fa19e9c4046fd50e99ce526b3f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 22 Nov 2019 18:39:05 -0500 Subject: [PATCH 272/751] test: apply mocker.patch inline --- tests/test_export.py | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/tests/test_export.py b/tests/test_export.py index 02beddecc..29344bbda 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -136,11 +136,11 @@ def test_get_good_printer_uri(mocked_call): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) -def test_get_bad_printer_uri(mocked_call, capsys): +def test_get_bad_printer_uri(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_PRINTER_NOT_FOUND" assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: result = submission.get_printer_uri() @@ -175,13 +175,14 @@ def test_is_not_open_office_file(capsys, open_office_paths): assert not submission.is_open_office_file(open_office_paths) -def test_usb_precheck_disconnected(capsys): +def test_usb_precheck_disconnected(capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_NOT_CONNECTED" assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mock.patch("subprocess.check_output", return_value=CalledProcessError(1, 'check_output')) + mocker.patch("subprocess.check_output", + return_value=CalledProcessError(1, 'check_output')) with pytest.raises(SystemExit) as sysexit: submission.check_usb_connected() @@ -193,11 +194,13 @@ def test_usb_precheck_disconnected(capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) -def test_usb_precheck_connected(mocked_call, capsys): +def test_usb_precheck_connected(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_CONNECTED" assert export.ExportStatus.USB_CONNECTED.value == expected_message - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + with pytest.raises(SystemExit) as sysexit: submission.check_usb_connected() mocked_exit.assert_called_once_with(expected_message) @@ -222,9 +225,9 @@ def test_extract_device_name_single_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_extract_device_name_multiple_part(mocked_call, capsys): +def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value with pytest.raises(SystemExit) as sysexit: @@ -237,10 +240,10 @@ def test_extract_device_name_multiple_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) @mock.patch("subprocess.check_call", return_value=0) -def test_luks_precheck_encrypted_fde(mocked_call, capsys): +def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = export.ExportStatus.USB_ENCRYPTED.value - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: submission.check_luks_volume() @@ -250,10 +253,10 @@ def test_luks_precheck_encrypted_fde(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) @mock.patch("subprocess.check_call", return_value=0) -def test_luks_precheck_encrypted_single_part(mocked_call, capsys): +def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = export.ExportStatus.USB_ENCRYPTED.value - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: submission.check_luks_volume() @@ -262,10 +265,10 @@ def test_luks_precheck_encrypted_single_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_luks_precheck_encrypted_multi_part(mocked_call, capsys): +def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) with pytest.raises(SystemExit) as sysexit: submission.check_luks_volume() @@ -276,13 +279,13 @@ def test_luks_precheck_encrypted_multi_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_luks_precheck_encrypted_luks_error(mocked_call, capsys): +def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mock.patch("subprocess.check_call", return_value=CalledProcessError(1, 'check_call')) + mocker.patch("subprocess.check_call", return_value=CalledProcessError(1, 'check_call')) with pytest.raises(SystemExit) as sysexit: submission.check_luks_volume() @@ -292,10 +295,10 @@ def test_luks_precheck_encrypted_luks_error(mocked_call, capsys): assert captured.err == "{}\n".format(expected_message) -def test_safe_check_call(capsys): +def test_safe_check_call(capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) submission.safe_check_call(['ls'], "this will work") - mocked_exit = mock.patch("export.exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = "uh oh!!!!" with pytest.raises(SystemExit) as sysexit: submission.safe_check_call(['ls', 'kjdsfhkdjfh'], expected_message) From 2fa2ccab64cae4266735800d936a2048694e1bc1 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 22 Nov 2019 19:02:52 -0500 Subject: [PATCH 273/751] dev: display help for all makefile targets --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 3ecc0094a..a65ea37a9 100644 --- a/Makefile +++ b/Makefile @@ -13,15 +13,15 @@ update-pip-requirements: ## Updates all Python requirements files via pip-compil pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in .PHONY: check -check: lint test +check: lint test ## Run linter and tests TESTS ?= tests .PHONY: test -test: +test: ## Run tests pytest -v $$TESTS .PHONY: lint -lint: +lint: ## Run linter flake8 securedrop_export/ tests/ # Explaination of the below shell command should it ever break. @@ -33,7 +33,7 @@ lint: # 6. Format columns with colon as delimiter. .PHONY: help help: ## Print this message and exit. - @printf "Makefile for developing and testing the SecureDrop proxy.\n" + @printf "Makefile for developing and testing the SecureDrop export code.\n" @printf "Subcommands:\n\n" @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ | sort \ From c6146c2122ba373a31640300f78a107b2c870335 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 25 Nov 2019 09:21:57 -0500 Subject: [PATCH 274/751] app: use ExportStatus enum instead of hardcoded string --- securedrop_export/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index e9706ac84..fd767133e 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -200,7 +200,7 @@ def check_usb_connected(self): subprocess.check_output( ["lsblk", "-p", "-o", "KNAME", "--noheadings", "--inverse", DEVICE], stderr=subprocess.PIPE) - self.exit_gracefully("USB_CONNECTED") + self.exit_gracefully(ExportStatus.USB_CONNECTED.value) except subprocess.CalledProcessError: self.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) From c2574dddd4c6146482ae91679186965b5a6b9906 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 25 Nov 2019 09:30:49 -0500 Subject: [PATCH 275/751] test: add coverage reporting --- Makefile | 2 +- test-requirements.in | 3 ++- test-requirements.txt | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a65ea37a9..762c42ec9 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ check: lint test ## Run linter and tests TESTS ?= tests .PHONY: test test: ## Run tests - pytest -v $$TESTS + pytest -v --cov-report html --cov-report term-missing --cov=securedrop_export $$TESTS .PHONY: lint lint: ## Run linter diff --git a/test-requirements.in b/test-requirements.in index 00ca62224..8a4af7f03 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -1,4 +1,5 @@ flake8 pip-tools pytest -pytest-mock \ No newline at end of file +pytest-cov +pytest-mock diff --git a/test-requirements.txt b/test-requirements.txt index 4cd163f1f..51297db17 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -16,6 +16,40 @@ click==7.0 \ --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ # via pip-tools +coverage==4.5.4 \ + --hash=sha256:08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6 \ + --hash=sha256:0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650 \ + --hash=sha256:141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5 \ + --hash=sha256:19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d \ + --hash=sha256:23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351 \ + --hash=sha256:245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755 \ + --hash=sha256:331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef \ + --hash=sha256:386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca \ + --hash=sha256:3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca \ + --hash=sha256:60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9 \ + --hash=sha256:63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc \ + --hash=sha256:6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5 \ + --hash=sha256:6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f \ + --hash=sha256:7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe \ + --hash=sha256:826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888 \ + --hash=sha256:93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5 \ + --hash=sha256:9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce \ + --hash=sha256:af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5 \ + --hash=sha256:bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e \ + --hash=sha256:bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e \ + --hash=sha256:c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9 \ + --hash=sha256:dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437 \ + --hash=sha256:df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1 \ + --hash=sha256:e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c \ + --hash=sha256:e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24 \ + --hash=sha256:e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47 \ + --hash=sha256:eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2 \ + --hash=sha256:eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28 \ + --hash=sha256:ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c \ + --hash=sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7 \ + --hash=sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0 \ + --hash=sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025 \ + # via pytest-cov entrypoints==0.3 \ --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ @@ -63,6 +97,9 @@ pyparsing==2.4.1.1 \ --hash=sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580 \ --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 \ # via packaging +pytest-cov==2.8.1 \ + --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ + --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 pytest-mock==1.12.1 \ --hash=sha256:96a0cebc66e09930be2a15b03333d90b59584d3fb011924f81c14b50ee0afbba \ --hash=sha256:e5381be2608e49547f5e47633c5f81241ebf6206d17ce516a7a18d5a917e3859 From 281f9361f0b322993a393cabb4aa305bb99edaba Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 25 Nov 2019 11:22:42 -0500 Subject: [PATCH 276/751] test: fix remaining mocks, rework asserts for tests using exit mock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * to have a mock raise exceptions, we need to use side_effect instead of return_value * if we’re mocking SDExport.exit_gracefully then we don’t expect a SystemExit to occur unless that’s a side_effect of the mocked exit_gracefully (generally it isn't) * we also have unit tests of exit_gracefully method so we shouldn’t be including asserts for the functionality inside the exit_gracefully method in unrelated tests * otherwise I've broken up some of the longer tests using whitespace to delineate the build / operate / check sections --- tests/test_export.py | 123 +++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 57 deletions(-) diff --git a/tests/test_export.py b/tests/test_export.py index 29344bbda..3c70c3fb6 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -3,6 +3,7 @@ import os import pytest import subprocess # noqa: F401 +import sys import tempfile from subprocess import CalledProcessError @@ -59,7 +60,9 @@ def test_empty_config(capsys): metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write("{}") + config = export.Metadata(temp_folder) + assert not config.is_valid() @@ -69,7 +72,9 @@ def test_valid_printer_test_config(capsys): metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write('{"device": "printer-test"}') + config = export.Metadata(temp_folder) + assert config.is_valid() assert config.encryption_key is None assert config.encryption_method is None @@ -81,7 +86,9 @@ def test_valid_printer_config(capsys): metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write('{"device": "printer"}') + config = export.Metadata(temp_folder) + assert config.is_valid() assert config.encryption_key is None assert config.encryption_method is None @@ -96,7 +103,9 @@ def test_invalid_encryption_config(capsys): f.write( '{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}' ) + config = export.Metadata(temp_folder) + assert config.encryption_key == "hunter1" assert config.encryption_method == "base64" assert not config.is_valid() @@ -110,7 +119,9 @@ def test_valid_encryption_config(capsys): f.write( '{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}' ) + config = export.Metadata(temp_folder) + assert config.encryption_key == "hunter1" assert config.encryption_method == "luks" assert config.is_valid() @@ -131,7 +142,9 @@ def test_popup_message(mocked_call): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BOTHER_PRINTER) def test_get_good_printer_uri(mocked_call): submission = export.SDExport("testfile", TEST_CONFIG) + result = submission.get_printer_uri() + assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" @@ -140,17 +153,13 @@ def test_get_bad_printer_uri(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "ERROR_PRINTER_NOT_FOUND" assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", + side_effect=lambda x: sys.exit(0)) - with pytest.raises(SystemExit) as sysexit: - result = submission.get_printer_uri() - assert result == "" - mocked_exit.assert_called_once_with(expected_message) + with pytest.raises(SystemExit): + submission.get_printer_uri() - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) - assert captured.out == "" + mocked_exit.assert_called_once_with(expected_message) @pytest.mark.parametrize('open_office_paths', [ @@ -182,15 +191,10 @@ def test_usb_precheck_disconnected(capsys, mocker): mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) mocker.patch("subprocess.check_output", - return_value=CalledProcessError(1, 'check_output')) - - with pytest.raises(SystemExit) as sysexit: - submission.check_usb_connected() - mocked_exit.assert_called_once_with(expected_message) + side_effect=CalledProcessError(1, 'check_output')) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + submission.check_usb_connected() + mocked_exit.assert_called_once_with(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) @@ -198,29 +202,28 @@ def test_usb_precheck_connected(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_CONNECTED" assert export.ExportStatus.USB_CONNECTED.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - with pytest.raises(SystemExit) as sysexit: - submission.check_usb_connected() - mocked_exit.assert_called_once_with(expected_message) + submission.check_usb_connected() - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + mocked_exit.assert_called_once_with(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) def test_extract_device_name_no_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) + submission.set_extracted_device_name() + assert submission.device == "/dev/sda" @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_extract_device_name_single_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) + submission.set_extracted_device_name() + assert submission.device == "/dev/sda1" @@ -230,12 +233,9 @@ def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - with pytest.raises(SystemExit) as sysexit: - submission.set_extracted_device_name() - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + submission.set_extracted_device_name() + + mocked_exit.assert_called_once_with(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) @@ -245,10 +245,9 @@ def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - with pytest.raises(SystemExit) as sysexit: - submission.check_luks_volume() - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 + submission.check_luks_volume() + + mocked_exit.assert_called_once_with(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) @@ -258,24 +257,32 @@ def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - with pytest.raises(SystemExit) as sysexit: - submission.check_luks_volume() - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 + submission.check_luks_volume() + + mocked_exit.assert_called_once_with(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - with pytest.raises(SystemExit) as sysexit: + # Here we need to mock the exit_gracefully method with a side effect otherwise + # program execution will continue after exit_gracefully and exit_gracefully + # may be called a second time. + mocked_exit = mocker.patch.object(submission, "exit_gracefully", + side_effect=lambda x: sys.exit(0)) + + # Output of `lsblk -o TYPE --noheadings DEVICE_NAME` when a drive has multiple + # partitions + multi_partition_lsblk_output = b"disk\npart\npart\n" + mocker.patch("subprocess.check_call", return_value=0) + mocker.patch("subprocess.check_output", return_value=multi_partition_lsblk_output) + + with pytest.raises(SystemExit): submission.check_luks_volume() - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + + mocked_exit.assert_called_once_with(expected_message) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) @@ -283,16 +290,19 @@ def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", return_value=CalledProcessError(1, 'check_call')) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", + side_effect=lambda msg, e: sys.exit(0)) - with pytest.raises(SystemExit) as sysexit: + single_partition_lsblk_output = b"disk\npart\n" + mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + with pytest.raises(SystemExit): submission.check_luks_volume() - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + + assert mocked_exit.mock_calls[0][2]['msg'] == expected_message + assert mocked_exit.mock_calls[0][2]['e'] is None def test_safe_check_call(capsys, mocker): @@ -300,9 +310,8 @@ def test_safe_check_call(capsys, mocker): submission.safe_check_call(['ls'], "this will work") mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = "uh oh!!!!" - with pytest.raises(SystemExit) as sysexit: - submission.safe_check_call(['ls', 'kjdsfhkdjfh'], expected_message) - mocked_exit.assert_called_once_with(expected_message) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) + + submission.safe_check_call(['ls', 'kjdsfhkdjfh'], expected_message) + + assert mocked_exit.mock_calls[0][2]['msg'] == expected_message + assert mocked_exit.mock_calls[0][2]['e'] is None From bbb3d114300e535be85f70a3a24aa31b47cd364f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 25 Nov 2019 11:50:10 -0500 Subject: [PATCH 277/751] test: add pathlib2 as dependency for python < 3.6 https://github.com/pytest-dev/pytest/blob/7e5ad314287a5c86856efea13c04333d7baf3643/setup.py#L11 --- test-requirements.in | 1 + test-requirements.txt | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/test-requirements.in b/test-requirements.in index 8a4af7f03..6a68d166f 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -1,4 +1,5 @@ flake8 +pathlib2 # required by pytest for python 3.5 pip-tools pytest pytest-cov diff --git a/test-requirements.txt b/test-requirements.txt index 51297db17..e18ef566f 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -74,6 +74,9 @@ packaging==19.0 \ --hash=sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af \ --hash=sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3 \ # via pytest +pathlib2==2.3.5 \ + --hash=sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db \ + --hash=sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868 pip-tools==4.2.0 \ --hash=sha256:123174aabf7f4a63dd6e0bfc8aeeb5eaddbecb75a41e9f0dd4c447b1f2de14f7 \ --hash=sha256:5427ea4dcc175649723985fbcace9b2d8f46f9adbcc63bc2d7b247d9bcc74917 @@ -109,7 +112,7 @@ pytest==4.6.4 \ six==1.12.0 \ --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ - # via more-itertools, packaging, pip-tools, pytest + # via more-itertools, packaging, pathlib2, pip-tools, pytest wcwidth==0.1.7 \ --hash=sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e \ --hash=sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c \ From 81994bfc6a586bf735fda0a28df3ce0a52fa2462 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 29 Nov 2019 18:43:00 +0530 Subject: [PATCH 278/751] Adds buster packaging in CI Fixes #50 --- .circleci/config.yml | 81 +++++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a501982b6..73d3df004 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,6 +17,42 @@ common-steps: source .venv/bin/activate make safety + - &install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download wheels + command: | + mkdir ~/packaging && cd ~/packaging + git clone https://github.com/freedomofpress/securedrop-debian-packaging.git + cd securedrop-debian-packaging + make install-deps && make fetch-wheels + PKG_DIR=~/project make requirements + + - &verify_requirements + run: + name: Ensure that build-requirements.txt and requirements.txt are in sync. + command: | + cd ~/project + # Return 1 if unstaged changes exist (after `make requirements` in the + # previous run step), else return 0. + git diff --quiet + + - &make_source_tarball + run: + name: Tag and make source tarball + command: | + cd ~/project + ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here + python3 setup.py sdist + + - &build_debian_package + run: + name: Build debian package + command: | + cd ~/packaging/securedrop-debian-packaging + export PKG_VERSION=1000.0 + export PKG_PATH=/home/circleci/project/dist/securedrop-proxy-$PKG_VERSION.tar.gz + make securedrop-proxy + version: 2 jobs: build-stretch: @@ -24,38 +60,20 @@ jobs: - image: circleci/python:3.5-stretch steps: - checkout + - *install_packaging_dependencies + - *verify_requirements + - *make_source_tarball + - *build_debian_package - - run: - name: Install Debian packaging dependencies and download wheels - command: | - mkdir ~/packaging && cd ~/packaging - git clone https://github.com/freedomofpress/securedrop-debian-packaging.git - cd securedrop-debian-packaging - make install-deps && make fetch-wheels - PKG_DIR=~/project make requirements - - - run: - name: Ensure that build-requirements.txt and requirements.txt are in sync. - command: | - cd ~/project - # Return 1 if unstaged changes exist (after `make requirements` in the - # previous run step), else return 0. - git diff --quiet - - - run: - name: Tag and make source tarball - command: | - cd ~/project - ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here - python3 setup.py sdist - - - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-debian-packaging - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/dist/securedrop-proxy-$PKG_VERSION.tar.gz - make securedrop-proxy + build-buster: + docker: + - image: circleci/python:3.7-buster + steps: + - checkout + - *install_packaging_dependencies + - *verify_requirements + - *make_source_tarball + - *build_debian_package test-stretch: docker: @@ -80,3 +98,4 @@ workflows: - test-stretch - test-buster - build-stretch + - build-buster From ebf479f815403300c58c09795623707d2994bed7 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 29 Nov 2019 19:04:44 +0530 Subject: [PATCH 279/751] Adds debian packaging job in CI for Buster Fixes #30 --- .circleci/config.yml | 48 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4d6ecd2f1..ad0cbded6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,42 @@ common-steps: pip install --require-hashes -r test-requirements.txt make test + - &install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download wheels + command: | + mkdir ~/packaging && cd ~/packaging + git clone https://github.com/freedomofpress/securedrop-debian-packaging.git + cd securedrop-debian-packaging + make install-deps && make fetch-wheels + PKG_DIR=~/project make requirements + + - &verify_requirements + run: + name: Ensure that build-requirements.txt and requirements.txt are in sync. + command: | + cd ~/project + # Return 1 if unstaged changes exist (after `make requirements` in the + # previous run step), else return 0. + git diff --quiet + + - &make_source_tarball + run: + name: Tag and make source tarball + command: | + cd ~/project + ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here + python3 setup.py sdist + + - &build_debian_package + run: + name: Build debian package + command: | + cd ~/packaging/securedrop-debian-packaging + export PKG_VERSION=1000.0 + export PKG_PATH=/home/circleci/project/dist/securedrop-export-$PKG_VERSION.tar.gz + make securedrop-export + version: 2 jobs: lint: @@ -52,6 +88,16 @@ jobs: - *install_packages - *run_tests + build-buster: + docker: + - image: circleci/python:3.7-buster + steps: + - checkout + - *install_packaging_dependencies + - *verify_requirements + - *make_source_tarball + - *build_debian_package + workflows: version: 2 securedrop_export_ci: @@ -59,4 +105,4 @@ workflows: - lint - test-stretch - test-buster - + - build-buster From 224dd7c4f8cd7e2b2537fcf4b53437bb065239de Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 2 Dec 2019 17:34:10 +0530 Subject: [PATCH 280/751] Adds exception handling Also raises exception for using two different vmname or logginvm name within the codebase. --- oqubeslogging.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/oqubeslogging.py b/oqubeslogging.py index 6392b1be7..0a8f9b1d4 100644 --- a/oqubeslogging.py +++ b/oqubeslogging.py @@ -7,9 +7,12 @@ class Singleton(type): def __call__(cls, *args, **kwargs): if cls not in cls._ins: - cls._ins[cls] = super(Singleton, cls).__call__(*args, **kwargs) + cls._ins[cls] = (super(Singleton, cls).__call__(*args, **kwargs), args) - return cls._ins[cls] + if len(args) > 1: + if args != cls._ins[cls][1]: + raise Exception("Arguments not matching for logvm name and Qubes VM name") + return cls._ins[cls][0] class InternalLog(metaclass=Singleton): @@ -35,6 +38,10 @@ def __init__(self, name, logvmname): self.qubes_log = InternalLog(name, logvmname) def emit(self, record): - msg = self.format(record) - self.qubes_log.write(msg) - return True + try: + msg = self.format(record) + self.qubes_log.write(msg) + return True + + except Exception: + self.handleError(record) From 5c81debc47c7441a0b9330f67f37537432d14fdc Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 2 Dec 2019 17:36:18 +0530 Subject: [PATCH 281/751] Removes Python2 statements --- oqubes-logging | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/oqubes-logging b/oqubes-logging index 036a19ee7..5fd3a23e4 100644 --- a/oqubes-logging +++ b/oqubes-logging @@ -21,10 +21,9 @@ def sanitize_line(untrusted_line): line[i] = 0x2e return bytearray(line).decode('ascii') -try: - stdin = sys.stdin.buffer # python3 -except AttributeError: - stdin = io.open(0, 'rb') # python2 + +stdin = sys.stdin.buffer # python3 + start = datetime.utcnow() @@ -44,6 +43,7 @@ def log(msg, remote=True, now=None): line = '{:%F %T.%f} +0000 {} {}\n'.format(now, remote_str, msg) tmp_log.write(line.encode('utf-8')) + tmp_log.flush() log('starting log', now=start, remote=False) From 096a57d081045c8ce1786248fc83e4ff26cbca75 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 2 Dec 2019 09:50:41 -0500 Subject: [PATCH 282/751] synchronize singleton creation using threading.Lock() in __call__ --- oqubeslogging.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/oqubeslogging.py b/oqubeslogging.py index 0a8f9b1d4..ce191ed71 100644 --- a/oqubeslogging.py +++ b/oqubeslogging.py @@ -1,13 +1,16 @@ from logging import StreamHandler from subprocess import Popen, PIPE +import threading class Singleton(type): _ins = {} + _lock = threading.Lock() def __call__(cls, *args, **kwargs): - if cls not in cls._ins: - cls._ins[cls] = (super(Singleton, cls).__call__(*args, **kwargs), args) + with cls._lock: # First thread that gets here creates the instance + if cls not in cls._ins: + cls._ins[cls] = (super(Singleton, cls).__call__(*args, **kwargs), args) if len(args) > 1: if args != cls._ins[cls][1]: From 802eb83b5d7b25df6753accde23c4f6520aca8dc Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 25 Nov 2019 19:28:50 -0500 Subject: [PATCH 283/751] app: remove hardcoded device name, get on the fly from lsblk --- securedrop_export/export.py | 58 ++++++++++++++++++++++++++++--------- securedrop_export/main.py | 6 +++- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index fd767133e..c42611197 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -11,12 +11,12 @@ import tarfile import tempfile import time +from typing import List, Optional # noqa: F401 from enum import Enum PRINTER_NAME = "sdw-printer" PRINTER_WAIT_TIMEOUT = 60 -DEVICE = "/dev/sda" MOUNTPOINT = "/media/usb" ENCRYPTED_DEVICE = "encrypted_volume" BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" @@ -120,7 +120,7 @@ def is_valid(self): class SDExport(object): def __init__(self, archive, config_path): - self.device = DEVICE + self.device = None # Optional[str] self.mountpoint = MOUNTPOINT self.encrypted_device = ENCRYPTED_DEVICE @@ -192,22 +192,54 @@ def extract_tarball(self): except Exception: self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) - def check_usb_connected(self): - # If the USB is not attached via qvm-usb attach, lsusb will return empty string and a - # return code of 1 + def check_usb_connected(self, exit=False) -> None: + usb_devices = self._get_connected_usbs() + + if len(usb_devices) == 0: + self.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) + elif len(usb_devices) == 1: + self.device = usb_devices[0] + if exit: + self.exit_gracefully(ExportStatus.USB_CONNECTED.value) + elif len(usb_devices) > 1: + # Return generic error until freedomofpress/securedrop-export/issues/25 + self.exit_gracefully(ExportStatus.ERROR_GENERIC.value) + + def _get_connected_usbs(self) -> List[str]: logging.info('Performing usb preflight') + # List all block devices attached to VM that are disks and not partitions. try: - subprocess.check_output( - ["lsblk", "-p", "-o", "KNAME", "--noheadings", "--inverse", DEVICE], - stderr=subprocess.PIPE) - self.exit_gracefully(ExportStatus.USB_CONNECTED.value) + lsblk = subprocess.Popen(["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + grep = subprocess.Popen(["grep", "disk"], stdin=lsblk.stdout, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + command_output = grep.stdout.readlines() + + # The first word in each element of the command_output list is the device name + attached_devices = [x.decode('utf8').split()[0] for x in command_output] except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) + self.exit_gracefully(ExportStatus.ERROR_GENERIC.value) + + # Determine which are USBs by selecting those block devices that are removable disks. + usb_devices = [] + for device in attached_devices: + try: + removable = subprocess.check_output( + ["cat", "/sys/class/block/{}/removable".format(device)], + stderr=subprocess.PIPE) + is_removable = int(removable.decode('utf8').strip()) + except subprocess.CalledProcessError: + is_removable = False + + if is_removable: + usb_devices.append("/dev/{}".format(device)) + + return usb_devices def set_extracted_device_name(self): try: device_and_partitions = subprocess.check_output( - ["lsblk", "-o", "TYPE", "--noheadings", DEVICE], stderr=subprocess.PIPE) + ["lsblk", "-o", "TYPE", "--noheadings", self.device], stderr=subprocess.PIPE) # we don't support multiple partitions partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') @@ -215,8 +247,8 @@ def set_extracted_device_name(self): logging.debug("multiple partitions not supported") self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) - # set device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted - self.device = DEVICE if partition_count == 0 else DEVICE + '1' + # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted + self.device = self.device if partition_count == 0 else self.device + '1' except subprocess.CalledProcessError: self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 34b8a9f66..1c7f6dbc7 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -17,9 +17,11 @@ def __main__(submission): if submission.archive_metadata.is_valid(): if submission.archive_metadata.export_method == "usb-test": logging.info('Export archive is usb-test') - submission.check_usb_connected() + submission.check_usb_connected(exit=True) elif submission.archive_metadata.export_method == "disk": logging.info('Export archive is disk') + # check_usb_connected looks for the drive, sets the drive to use + submission.check_usb_connected() logging.info('Unlocking volume') # exports all documents in the archive to luks-encrypted volume submission.unlock_luks_volume(submission.archive_metadata.encryption_key) @@ -29,6 +31,8 @@ def __main__(submission): submission.copy_submission() elif submission.archive_metadata.export_method == "disk-test": logging.info('Export archive is disk-test') + # check_usb_connected looks for the drive, sets the drive to use + submission.check_usb_connected() submission.check_luks_volume() elif submission.archive_metadata.export_method == "printer": logging.info('Export archive is printer') From 930dd9d77e13da49829eed4eef60a479d669cd96 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 26 Nov 2019 15:41:48 -0500 Subject: [PATCH 284/751] test: check_usb_connected determines the device name dynamically --- tests/test_export.py | 61 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/tests/test_export.py b/tests/test_export.py index 3c70c3fb6..a09d40d39 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -185,33 +185,81 @@ def test_is_not_open_office_file(capsys, open_office_paths): def test_usb_precheck_disconnected(capsys, mocker): + """Tests the scenario where there are disks connected, but none of them are USB""" submission = export.SDExport("testfile", TEST_CONFIG) expected_message = "USB_NOT_CONNECTED" assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message + + # Popen call returns lsblk output + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=[b"sda disk\n", b"sdb disk\n"]) + mocker.patch("subprocess.Popen", return_value=command_output) + + # check_output returns removable status + mocker.patch("subprocess.check_output", return_value=[b'0\n', b'0\n']) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) mocker.patch("subprocess.check_output", side_effect=CalledProcessError(1, 'check_output')) - submission.check_usb_connected() + submission.check_usb_connected(exit=True) + mocked_exit.assert_called_once_with(expected_message) + assert submission.device is None -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_USB) -def test_usb_precheck_connected(mocked_call, capsys, mocker): +def test_usb_precheck_connected(capsys, mocker): + """Tests the scenario where there is one USB connected""" submission = export.SDExport("testfile", TEST_CONFIG) + + # Popen call returns lsblk output + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n"]) + mocker.patch("subprocess.Popen", return_value=command_output) + + # check_output returns removable status + mocker.patch("subprocess.check_output", return_value=b"1\n") + expected_message = "USB_CONNECTED" assert export.ExportStatus.USB_CONNECTED.value == expected_message mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - submission.check_usb_connected() + submission.check_usb_connected(exit=True) + + mocked_exit.assert_called_once_with(expected_message) + assert submission.device == "/dev/sdb" + + +def test_usb_precheck_multiple_devices_connected(capsys, mocker): + """Tests the scenario where there are multiple USB drives connected""" + submission = export.SDExport("testfile", TEST_CONFIG) + + # Popen call returns lsblk output + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n", b"sdc disk\n"]) + mocker.patch("subprocess.Popen", return_value=command_output) + + # check_output returns removable status + mocker.patch("subprocess.check_output", return_value=b"1\n") + + expected_message = "ERROR_GENERIC" + assert export.ExportStatus.ERROR_GENERIC.value == expected_message + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + + submission.check_usb_connected(exit=True) mocked_exit.assert_called_once_with(expected_message) + assert submission.device is None @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) def test_extract_device_name_no_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) + submission.device = "/dev/sda" submission.set_extracted_device_name() @@ -221,6 +269,7 @@ def test_extract_device_name_no_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_extract_device_name_single_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) + submission.device = "/dev/sda" submission.set_extracted_device_name() @@ -230,6 +279,7 @@ def test_extract_device_name_single_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) + submission.device = "/dev/sda" mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value @@ -254,6 +304,7 @@ def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): @mock.patch("subprocess.check_call", return_value=0) def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) + submission.device = "/dev/sda" expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) @@ -265,6 +316,7 @@ def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) + submission.device = "/dev/sda" expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value # Here we need to mock the exit_gracefully method with a side effect otherwise @@ -288,6 +340,7 @@ def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) + submission.device = "/dev/sda" expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value From b62397c64a34ebb54035086b80362de6fddc95ff Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 25 Nov 2019 15:25:42 -0800 Subject: [PATCH 285/751] support laserjet --- securedrop_export/export.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index fd767133e..6bb329c65 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -350,17 +350,17 @@ def get_printer_uri(self): # No usb printer is connected logging.info('No usb printers connected') self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) - elif "Brother" in printer_uri: - logging.info('Printer {} is supported'.format(printer_uri)) - return printer_uri - else: + elif not any(x in printer_uri for x in ("Brother", "LaserJet")): # printer url is a make that is unsupported logging.info('Printer {} is unsupported'.format(printer_uri)) self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + logging.info('Printer {} is supported'.format(printer_uri)) + return printer_uri + def install_printer_ppd(self, uri): # Some drivers don't come with ppd files pre-compiled, we must compile them - if "Brother" in uri: + if any(x in uri for x in ("Brother", "LaserJet")): self.safe_check_call( command=[ "sudo", From 0a410fbe0beceebc3914602e7fb51525a5dae58f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 27 Nov 2019 13:11:14 -0800 Subject: [PATCH 286/751] fix logging bug --- securedrop_export/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 6bb329c65..9f68c5131 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -446,7 +446,7 @@ def print_file(self, file_to_print): ) file_to_print = converted_path - logging.info('Sending file to printer {}:{}'.format(self.printer_name)) + logging.info('Sending file to printer {}:{}'.format(self.printer_name, file_to_print)) self.safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], error_message=ExportStatus.ERROR_PRINT.value From 922482872968dc914e6fce2e7d8295fefa463640 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 2 Dec 2019 13:20:01 -0800 Subject: [PATCH 287/751] add laserjet test --- tests/test_export.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/test_export.py b/tests/test_export.py index 3c70c3fb6..bcd6b2114 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -10,7 +10,8 @@ from securedrop_export import export SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa -SAMPLE_OUTPUT_BOTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa +SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa +SAMPLE_OUTPUT_LASERJET_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000\nnetwork lpd" # noqa SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa @@ -139,8 +140,8 @@ def test_popup_message(mocked_call): ]) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BOTHER_PRINTER) -def test_get_good_printer_uri(mocked_call): +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) +def test_get_good_printer_uri_laserjet(mocked_call): submission = export.SDExport("testfile", TEST_CONFIG) result = submission.get_printer_uri() @@ -148,6 +149,13 @@ def test_get_good_printer_uri(mocked_call): assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) +def test_get_good_printer_uri_brother(mocked_call): + submission = export.SDExport("testfile", TEST_CONFIG) + result = submission.get_printer_uri() + assert result == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) def test_get_bad_printer_uri(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) From eed82e99f1d8d901b43529c972a8ae5401dc9b81 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 4 Dec 2019 20:14:14 +0530 Subject: [PATCH 288/751] Moves the file to a module directory --- oqubeslogging.py => securedrop_log/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename oqubeslogging.py => securedrop_log/__init__.py (100%) diff --git a/oqubeslogging.py b/securedrop_log/__init__.py similarity index 100% rename from oqubeslogging.py rename to securedrop_log/__init__.py From 98b55351d3e2a003d7b51a86652f06917cced592 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 4 Dec 2019 20:14:58 +0530 Subject: [PATCH 289/751] Renames the class and qrexec in the code --- securedrop_log/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/securedrop_log/__init__.py b/securedrop_log/__init__.py index ce191ed71..a67d90f8e 100644 --- a/securedrop_log/__init__.py +++ b/securedrop_log/__init__.py @@ -21,7 +21,7 @@ def __call__(cls, *args, **kwargs): class InternalLog(metaclass=Singleton): def __init__(self, name, logvmname): self.process = Popen( - ["/usr/lib/qubes/qrexec-client-vm", logvmname, "oqubes.Logging"], + ["/usr/lib/qubes/qrexec-client-vm", logvmname, "securedrop.Log"], stdin=PIPE, stdout=PIPE, stderr=PIPE, @@ -35,7 +35,7 @@ def write(self, text): self.process.stdin.flush() -class OQubesLog(StreamHandler): +class SecureDropLog(StreamHandler): def __init__(self, name, logvmname): StreamHandler.__init__(self) self.qubes_log = InternalLog(name, logvmname) From bd78047fa8fc64fad845e55fc4fa41c55e056fbd Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 4 Dec 2019 20:17:35 +0530 Subject: [PATCH 290/751] More renames in README and code --- README.md | 17 ++++++++--------- oqubes-logging => securedrop-log | 0 2 files changed, 8 insertions(+), 9 deletions(-) rename oqubes-logging => securedrop-log (100%) diff --git a/README.md b/README.md index 9b19ddcb2..efaf8e8a9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ -# OQubes Logging +# securedrop-log -This is a PoC logging service based on [Qubes -buildlog](https://github.com/QubesOS/qubes-builder/blob/master/rpc-services/qubesbuilder.BuildLog). +This is a Python module and qrexec service for logging in Qubes for [SecureDrop](https://securedrop.org). ## How to use/try this? @@ -10,7 +9,7 @@ In our example, we will use a vm named *logging* for storing logs, and we will u ### In dom0 -- Create a file `/etc/qubes-rpc/policy/oqubes.Logging` in `dom0` with the following content. +- Create a file `/etc/qubes-rpc/policy/securedrop.Log` in `dom0` with the following content. ``` workvm logging allow @@ -19,13 +18,13 @@ workvm logging allow ### In logging vm -Add the following content to `/etc/qubes-rpc/oqubes.Logging` +Add the following content to `/etc/qubes-rpc/securedrop.Log` ``` -/usr/sbin/oqubes-logging +/usr/sbin/securedrop-log ``` -and then place `oqubes-logging` script to `/usr/sbin/` directory and make sure that +and then place `securedrop-log` script to `/usr/sbin/` directory and make sure that it is executable. ### To use from any Python code in workvm @@ -34,10 +33,10 @@ Here is an example code using Python logging ```Python import logging -from oqubeslogging import OQubesLog +from securedrop_log import SecureDropLog def main(): - handler = OQubesLog("workvm", "proxy-debian") + handler = SecureDropLog("workvm", "proxy-debian") logging.basicConfig(level=logging.DEBUG, handlers=[handler]) logger = logging.getLogger("example") diff --git a/oqubes-logging b/securedrop-log similarity index 100% rename from oqubes-logging rename to securedrop-log From 0301869fe714ccc0059d50de230838d8a5d534be Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 4 Dec 2019 20:20:59 +0530 Subject: [PATCH 291/751] Adds license --- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 674 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From 38283be4c45680912f8f20b3a9c085fe84930126 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 4 Dec 2019 20:23:54 +0530 Subject: [PATCH 292/751] Initial setup.py and MANIFEST --- MANIFEST.in | 8 ++++++++ setup.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 MANIFEST.in create mode 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..78f3d19f7 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,8 @@ +include LICENSE +include README.md +include build-requirements.txt +include requirements.txt +include securedrop_log/*.py +include setup.py +include securedrop-log + diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..60f080fac --- /dev/null +++ b/setup.py @@ -0,0 +1,31 @@ +import pkgutil +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +version = "0.0.1" + +setuptools.setup( + name="securedrop-log", + version=version, + author="Freedom of the Press Foundation", + author_email="securedrop@freedom.press", + description="SecureDrop Qubes logging scripts", + long_description=long_description, + long_description_content_type="text/markdown", + license="GPLv3+", + install_requires=[], + python_requires=">=3.5", + url="https://github.com/freedomofpress/securedrop-log", + packages="securedrop_log", + classifiers=( + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3", + "Topic :: Software Development :: Libraries :: Python Modules", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Intended Audience :: Developers", + "OOperating System :: POSIX :: Linux", + ), + data_files = [("sbin",["securedrop-log"])] +) From c061b7ead408d3dd3b948e64a4662e65eaaddea8 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 4 Dec 2019 20:25:15 +0530 Subject: [PATCH 293/751] Adds Python specific gitignore file --- .gitignore | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..aa44ee2ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,130 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + From 9b5b9d26008a6aa6ac3d2bd11cec3111e63ebe44 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 4 Dec 2019 10:11:38 -0500 Subject: [PATCH 294/751] Provide Buster support for printing Some changes in lpinfo resulted in the printer queue not being activated. As a result, the printer could not accept jobs and the lpinfo -E command would return non-zero. --- securedrop_export/export.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 9f68c5131..6329bbbe6 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -376,6 +376,7 @@ def install_printer_ppd(self, uri): def setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin + logger.info('Setting up printer name {}'.format(self.printer_name)) self.safe_check_call( command=[ "sudo", @@ -390,17 +391,34 @@ def setup_printer(self, printer_uri, printer_ppd): error_message=ExportStatus.ERROR_PRINTER_INSTALL.value ) # Activate the printer so that it can receive jobs + logger.info('Activating printer {}'.format(self.printer_name)) self.safe_check_call( - command=["sudo", "lpadmin", "-p", self.printer_name, "-E"], + command=["sudo", "lpadmin", "-p", self.printer_name], error_message=ExportStatus.ERROR_PRINTER_INSTALL.value ) + # worksaround for version of lpadmin/cups in debian buster: + # see https://forums.developer.apple.com/thread/106112 + self.safe_check_call( + command=["sudo", "cupsaccept", self.printer_name], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + # A non-zero return code is expected here, but the command is required + # and works as expected. + command = ["sudo", "cupsenable", self.printer_name] + try: + subprocess.check_call(command) + except subprocess.CalledProcessError: + pass + # Allow user to print (without using sudo) + logger.info('Allow user to print {}'.format(self.printer_name)) self.safe_check_call( command=["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"], error_message=ExportStatus.ERROR_PRINTER_INSTALL.value ) def print_test_page(self): + logger.info('Printing test page') self.print_file("/usr/share/cups/data/testprint") self.popup_message("Printing test page") @@ -436,7 +454,7 @@ def print_file(self, file_to_print): # If the file to print is an (open)office document, we need to call unoconf to # convert the file to pdf as printer drivers do not support this format if self.is_open_office_file(file_to_print): - logging.info('Converting Office document to pdf'.format(self.printer_name)) + logger.info('Converting Office document to pdf') folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) From ed1a2f99e566d5d5b6e1c32dd16fe9ec1c6177e1 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 4 Dec 2019 16:41:29 -0500 Subject: [PATCH 295/751] add initial changelog.md --- MANIFEST.in | 1 + changelog.md | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 changelog.md diff --git a/MANIFEST.in b/MANIFEST.in index 78f3d19f7..d82c3479f 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ include LICENSE include README.md +include changelog.md include build-requirements.txt include requirements.txt include securedrop_log/*.py diff --git a/changelog.md b/changelog.md new file mode 100644 index 000000000..9c18f3c15 --- /dev/null +++ b/changelog.md @@ -0,0 +1,5 @@ +# Changelog + +## 0.0.1 + + * Initial release. From 2c65482b4e6fd962875a1711b904065015dd6e4b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 4 Dec 2019 16:54:01 -0500 Subject: [PATCH 296/751] test: couple of tests, never gonna be great b/c of the singleton logger1 from test 2 is logger1 from test 1 --- tests/__init__.py | 0 tests/test_logger.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/test_logger.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_logger.py b/tests/test_logger.py new file mode 100644 index 000000000..174544f00 --- /dev/null +++ b/tests/test_logger.py @@ -0,0 +1,18 @@ +from unittest import mock, TestCase + +import securedrop_log + + +@mock.patch('securedrop_log.Popen') +class TestLogger(TestCase): + def test_singleton_there_can_be_only_one(self, mock_popen): + logger1 = securedrop_log.SecureDropLog('name', 'logvmname') + logger2 = securedrop_log.SecureDropLog('name', 'logvmname') + + self.assertEqual(logger1.qubes_log, logger2.qubes_log) + + def test_singleton_raises_exception_for_dev(self, mock_popen): + logger1 = securedrop_log.SecureDropLog('name', 'logvmname') + + with self.assertRaises(Exception): + logger2 = securedrop_log.SecureDropLog('name2', 'logvmname2') From 464eccbbe8d696298fc0f3c7955ae0de0bc5178b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 4 Dec 2019 16:43:56 -0500 Subject: [PATCH 297/751] ci: add circle integration and test job --- .circleci/config.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..dd6ad3702 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,16 @@ +version: 2 +jobs: + test: + docker: + - image: circleci/python:3.7-buster + steps: + - checkout + - run: + name: Run tests + command: python3 -m unittest + +workflows: + version: 2 + per_pr: + jobs: + - test From 18a532b3d315c0b3e39f6bc6d93ce5b849052c1c Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 4 Dec 2019 16:45:25 -0500 Subject: [PATCH 298/751] update examples for new package name --- example.py | 4 ++-- journal-example.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example.py b/example.py index 83662f416..1a582bbea 100644 --- a/example.py +++ b/example.py @@ -1,12 +1,12 @@ import logging -from oqubeslogging import OQubesLog +from securedrop_log import SecureDropLog import ex2 import ex1 def main(): - handler = OQubesLog("workvm", "logging") + handler = SecureDropLog("workvm", "logging") logging.basicConfig(level=logging.DEBUG, handlers=[handler]) logger = logging.getLogger("example") diff --git a/journal-example.py b/journal-example.py index fa468cb10..903412af9 100644 --- a/journal-example.py +++ b/journal-example.py @@ -1,11 +1,11 @@ import logging -from oqubeslogging import OQubesLog +from securedrop_log import SecureDropLog from systemd import journal import select def main(): - handler = OQubesLog("workvm", "logging") + handler = SecureDropLog("workvm", "logging") logging.basicConfig(level=logging.DEBUG, handlers=[handler]) logger = logging.getLogger("example") j = journal.Reader() From f6cf757193760e254fb653e80a302fd7c030961f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 4 Dec 2019 17:00:36 -0500 Subject: [PATCH 299/751] requirements files (needed for deb build) --- build-requirements.txt | 0 requirements.txt | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 build-requirements.txt create mode 100644 requirements.txt diff --git a/build-requirements.txt b/build-requirements.txt new file mode 100644 index 000000000..e69de29bb diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..e69de29bb From 23c0b5b7349afa3f815c6d5555f8d1f090a815b5 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 4 Dec 2019 14:24:06 -0800 Subject: [PATCH 300/751] support laserjet ppds generated via cups compiler --- securedrop_export/export.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 6329bbbe6..421fea7d6 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -21,6 +21,8 @@ ENCRYPTED_DEVICE = "encrypted_volume" BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" +LASERJET_DRIVER = "/usr/share/cups/drv/hpcups.drv" +LASERJET_PPD = "/usr/share/cups/model/hp-laserjet_6l.ppd" logger = logging.getLogger(__name__) @@ -127,8 +129,8 @@ def __init__(self, archive, config_path): self.printer_name = PRINTER_NAME self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT - self.brlaser_driver = BRLASER_DRIVER - self.brlaser_ppd = BRLASER_PPD + self.printer_driver = None + self.printer_ppd = None self.archive = archive self.submission_dirname = os.path.basename(self.archive).split(".")[0] @@ -359,19 +361,26 @@ def get_printer_uri(self): return printer_uri def install_printer_ppd(self, uri): + if "Brother" in uri: + self.printer_driver = BRLASER_DRIVER + self.printer_ppd = BRLASER_PPD + elif "LaserJet" in uri: + self.printer_driver = LASERJET_DRIVER + self.printer_ppd = LASERJET_PPD + # Some drivers don't come with ppd files pre-compiled, we must compile them if any(x in uri for x in ("Brother", "LaserJet")): self.safe_check_call( command=[ "sudo", "ppdc", - self.brlaser_driver, + self.printer_driver, "-d", "/usr/share/cups/model/", ], error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value ) - return self.brlaser_ppd + return self.printer_ppd # Here, we could support ppd drivers for other makes or models in the future def setup_printer(self, printer_uri, printer_ppd): From 0685535505cd1fab243bf53b6e6b662d2e0afa69 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 4 Dec 2019 15:51:17 -0800 Subject: [PATCH 301/751] test installing printer ppd --- securedrop_export/export.py | 40 +++++++++++++++--------------- tests/test_export.py | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 20 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 421fea7d6..3bd8c442b 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -129,9 +129,6 @@ def __init__(self, archive, config_path): self.printer_name = PRINTER_NAME self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT - self.printer_driver = None - self.printer_ppd = None - self.archive = archive self.submission_dirname = os.path.basename(self.archive).split(".")[0] self.target_dirname = "sd-export-{}".format( @@ -361,27 +358,30 @@ def get_printer_uri(self): return printer_uri def install_printer_ppd(self, uri): + if not any(x in uri for x in ("Brother", "LaserJet")): + logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) + self.exit_gracefully(msg=ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + return + if "Brother" in uri: - self.printer_driver = BRLASER_DRIVER - self.printer_ppd = BRLASER_PPD + printer_driver = BRLASER_DRIVER + printer_ppd = BRLASER_PPD elif "LaserJet" in uri: - self.printer_driver = LASERJET_DRIVER - self.printer_ppd = LASERJET_PPD + printer_driver = LASERJET_DRIVER + printer_ppd = LASERJET_PPD # Some drivers don't come with ppd files pre-compiled, we must compile them - if any(x in uri for x in ("Brother", "LaserJet")): - self.safe_check_call( - command=[ - "sudo", - "ppdc", - self.printer_driver, - "-d", - "/usr/share/cups/model/", - ], - error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value - ) - return self.printer_ppd - # Here, we could support ppd drivers for other makes or models in the future + self.safe_check_call( + command=[ + "sudo", + "ppdc", + printer_driver, + "-d", + "/usr/share/cups/model/", + ], + error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value + ) + return printer_ppd def setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin diff --git a/tests/test_export.py b/tests/test_export.py index bcd6b2114..0441198af 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -323,3 +323,52 @@ def test_safe_check_call(capsys, mocker): assert mocked_exit.mock_calls[0][2]['msg'] == expected_message assert mocked_exit.mock_calls[0][2]['e'] is None + + +@mock.patch("subprocess.check_call") +def test_install_printer_ppd_laserjet(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + ppd = submission.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") + assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" + + +@mock.patch("subprocess.check_call") +def test_install_printer_ppd_brother(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + ppd = submission.install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") + assert ppd == "/usr/share/cups/model/br7030.ppd" + + +def test_install_printer_ppd_error_no_driver(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + submission.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") + + assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" + assert mocked_exit.mock_calls[0][2]['e'] is None + + +def test_install_printer_ppd_error_not_supported(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + submission.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") + + assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_NOT_SUPPORTED" + + +def test_setup_printer_error(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + submission.setup_printer( + "usb://Brother/HL-L2320D%20series?serial=A00000A000000", + "/usr/share/cups/model/br7030.ppd" + ) + + assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_INSTALL" + assert mocked_exit.mock_calls[0][2]['e'] is None From ed81efcfa2b3249230818a14b81fe238910dedbb Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 4 Dec 2019 10:45:17 -0500 Subject: [PATCH 302/751] Use logger instead of logging Logging works, but does not provide the class/method/line where the logging was invoked. Logger was used inconsistently accross the codebase. --- securedrop_export/entrypoint.py | 6 ++-- securedrop_export/export.py | 61 +++++++++++++++++---------------- securedrop_export/main.py | 22 ++++++------ 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index f2d837202..ed1d69bb1 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -11,6 +11,8 @@ CONFIG_PATH = "/etc/sd-export-config.json" DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") +logger = logging.getLogger(__name__) + def configure_logging(): """ @@ -44,13 +46,13 @@ def start(): msg = "ERROR_LOGGING" export.SDExport.exit_gracefully(msg) - logging.info('Starting SecureDrop Export {}'.format(__version__)) + logger.info('Starting SecureDrop Export {}'.format(__version__)) my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) try: # Halt immediately if target file is absent if not os.path.exists(my_sub.archive): - logging.info('Archive is not found {}.'.format(my_sub.archive)) + logger.info('Archive is not found {}.'.format(my_sub.archive)) msg = "ERROR_FILE_NOT_FOUND" my_sub.exit_gracefully(msg) main.__main__(my_sub) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index c2f7b92eb..00c4a83be 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -82,27 +82,27 @@ def __init__(self, archive_path): try: with open(self.metadata_path) as f: - logging.info('Parsing archive metadata') + logger.info('Parsing archive metadata') json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) self.encryption_method = json_config.get("encryption_method", None) self.encryption_key = json_config.get( "encryption_key", None ) - logging.info( + logger.info( 'Exporting to device {} with encryption_method {}'.format( self.export_method, self.encryption_method ) ) except Exception: - logging.error('Metadata parsing failure') + logger.error('Metadata parsing failure') raise def is_valid(self): - logging.info('Validating metadata contents') + logger.info('Validating metadata contents') if self.export_method not in self.SUPPORTED_EXPORT_METHODS: - logging.error( + logger.error( 'Archive metadata: Export method {} is not supported'.format( self.export_method ) @@ -111,7 +111,7 @@ def is_valid(self): if self.export_method == "disk": if self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS: - logging.error( + logger.error( 'Archive metadata: Encryption method {} is not supported'.format( self.encryption_method ) @@ -185,7 +185,7 @@ def popup_message(self, msg): def extract_tarball(self): try: - logging.info('Extracting tarball {} into {}'.format(self.archive, self.tmpdir)) + logger.info('Extracting tarball {} into {}'.format(self.archive, self.tmpdir)) with tarfile.open(self.archive) as tar: tar.extractall(self.tmpdir) except Exception: @@ -195,17 +195,20 @@ def check_usb_connected(self, exit=False) -> None: usb_devices = self._get_connected_usbs() if len(usb_devices) == 0: + logger.info('0 USB devices connected') self.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) elif len(usb_devices) == 1: + logger.info('1 USB device connected') self.device = usb_devices[0] if exit: self.exit_gracefully(ExportStatus.USB_CONNECTED.value) elif len(usb_devices) > 1: + logger.info('>1 USB devices connected') # Return generic error until freedomofpress/securedrop-export/issues/25 self.exit_gracefully(ExportStatus.ERROR_GENERIC.value) def _get_connected_usbs(self) -> List[str]: - logging.info('Performing usb preflight') + logger.info('Performing usb preflight') # List all block devices attached to VM that are disks and not partitions. try: lsblk = subprocess.Popen(["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, @@ -243,7 +246,7 @@ def set_extracted_device_name(self): # we don't support multiple partitions partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') if partition_count > 1: - logging.debug("multiple partitions not supported") + logger.debug("multiple partitions not supported") self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted @@ -254,9 +257,9 @@ def set_extracted_device_name(self): def check_luks_volume(self): # cryptsetup isLuks returns 0 if the device is a luks volume # subprocess with throw if the device is not luks (rc !=0) - logging.info('Checking if volume is luks-encrypted') + logger.info('Checking if volume is luks-encrypted') self.set_extracted_device_name() - logging.debug("checking if {} is luks encrypted".format(self.device)) + logger.debug("checking if {} is luks encrypted".format(self.device)) self.safe_check_call( command=["sudo", "cryptsetup", "isLuks", self.device], error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value @@ -276,18 +279,18 @@ def unlock_luks_volume(self, encryption_key): # the luks device is not already unlocked if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): - logging.debug('Unlocking luks volume {}'.format(self.encrypted_device)) + logger.debug('Unlocking luks volume {}'.format(self.encrypted_device)) p = subprocess.Popen( ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) - logging.debug('Passing key') + logger.debug('Passing key') p.communicate(input=str.encode(encryption_key, "utf-8")) rc = p.returncode if rc != 0: - logging.error('Bad phassphrase for {}'.format(self.encrypted_device)) + logger.error('Bad phassphrase for {}'.format(self.encrypted_device)) self.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) except subprocess.CalledProcessError: self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) @@ -301,7 +304,7 @@ def mount_volume(self): ) mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) - logging.info('Mounting {}'.format(mapped_device_path)) + logger.info('Mounting {}'.format(mapped_device_path)) self.safe_check_call( command=["sudo", "mount", mapped_device_path, self.mountpoint], error_message=ExportStatus.ERROR_USB_MOUNT.value @@ -319,24 +322,24 @@ def copy_submission(self): target_path = os.path.join(self.mountpoint, self.target_dirname) subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(self.tmpdir, "export_data/") - logging.info('Copying file to {}'.format(self.target_dirname)) + logger.info('Copying file to {}'.format(self.target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) - logging.info('File copied successfully to {}'.format(self.target_dirname)) + logger.info('File copied successfully to {}'.format(self.target_dirname)) self.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError): self.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) finally: # Finally, we sync the filesystem, unmount the drive and lock the # luks volume, and exit 0 - logging.info('Syncing filesystems') + logger.info('Syncing filesystems') subprocess.check_call(["sync"]) - logging.info('Unmounting drive from {}'.format(self.mountpoint)) + logger.info('Unmounting drive from {}'.format(self.mountpoint)) subprocess.check_call(["sudo", "umount", self.mountpoint]) - logging.info('Locking luks volume {}'.format(self.encrypted_device)) + logger.info('Locking luks volume {}'.format(self.encrypted_device)) subprocess.check_call( ["sudo", "cryptsetup", "luksClose", self.encrypted_device] ) - logging.info('Deleting temporary directory {}'.format(self.tmpdir)) + logger.info('Deleting temporary directory {}'.format(self.tmpdir)) subprocess.check_call(["rm", "-rf", self.tmpdir]) sys.exit(0) @@ -348,17 +351,17 @@ def wait_for_print(self): printer_idle_string = "printer {} is idle".format(self.printer_name) while True: try: - logging.info('Running lpstat waiting for printer {}'.format(self.printer_name)) + logger.info('Running lpstat waiting for printer {}'.format(self.printer_name)) output = subprocess.check_output(["lpstat", "-p", self.printer_name]) if printer_idle_string in output.decode("utf-8"): - logging.info('Print completed') + logger.info('Print completed') return True else: time.sleep(5) except subprocess.CalledProcessError: self.exit_gracefully(ExportStatus.ERROR_PRINT.value) except TimeoutException: - logging.error('Timeout waiting for printer {}'.format(self.printer_name)) + logger.error('Timeout waiting for printer {}'.format(self.printer_name)) self.exit_gracefully(ExportStatus.ERROR_PRINT.value) return True @@ -374,19 +377,19 @@ def get_printer_uri(self): for line in output.split(): if "usb://" in line.decode("utf-8"): printer_uri = line.decode("utf-8") - logging.info('lpinfo usb printer: {}'.format(printer_uri)) + logger.info('lpinfo usb printer: {}'.format(printer_uri)) # verify that the printer is supported, else exit if printer_uri == "": # No usb printer is connected - logging.info('No usb printers connected') + logger.info('No usb printers connected') self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) elif not any(x in printer_uri for x in ("Brother", "LaserJet")): # printer url is a make that is unsupported - logging.info('Printer {} is unsupported'.format(printer_uri)) + logger.info('Printer {} is unsupported'.format(printer_uri)) self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) - logging.info('Printer {} is supported'.format(printer_uri)) + logger.info('Printer {} is supported'.format(printer_uri)) return printer_uri def install_printer_ppd(self, uri): @@ -505,7 +508,7 @@ def print_file(self, file_to_print): ) file_to_print = converted_path - logging.info('Sending file to printer {}:{}'.format(self.printer_name, file_to_print)) + logger.info('Sending file to printer {}:{}'.format(self.printer_name, file_to_print)) self.safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], error_message=ExportStatus.ERROR_PRINT.value diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 1c7f6dbc7..d3b5a0bef 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -16,34 +16,34 @@ def __main__(submission): if submission.archive_metadata.is_valid(): if submission.archive_metadata.export_method == "usb-test": - logging.info('Export archive is usb-test') + logger.info('Export archive is usb-test') submission.check_usb_connected(exit=True) elif submission.archive_metadata.export_method == "disk": - logging.info('Export archive is disk') + logger.info('Export archive is disk') # check_usb_connected looks for the drive, sets the drive to use submission.check_usb_connected() - logging.info('Unlocking volume') + logger.info('Unlocking volume') # exports all documents in the archive to luks-encrypted volume submission.unlock_luks_volume(submission.archive_metadata.encryption_key) - logging.info('Mounting volume') + logger.info('Mounting volume') submission.mount_volume() - logging.info('Copying submission to drive') + logger.info('Copying submission to drive') submission.copy_submission() elif submission.archive_metadata.export_method == "disk-test": - logging.info('Export archive is disk-test') + logger.info('Export archive is disk-test') # check_usb_connected looks for the drive, sets the drive to use submission.check_usb_connected() submission.check_luks_volume() elif submission.archive_metadata.export_method == "printer": - logging.info('Export archive is printer') + logger.info('Export archive is printer') # prints all documents in the archive - logging.info('Searching for printer') + logger.info('Searching for printer') printer_uri = submission.get_printer_uri() - logging.info('Installing printer drivers') + logger.info('Installing printer drivers') printer_ppd = submission.install_printer_ppd(printer_uri) - logging.info('Setting up printer') + logger.info('Setting up printer') submission.setup_printer(printer_uri, printer_ppd) - logging.info('Printing files') + logger.info('Printing files') submission.print_all_files() elif submission.archive_metadata.export_method == "printer-test": # Prints a test page to ensure the printer is functional From 51da6e63ccec6677126caf08c5d71e28dd80be6d Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 5 Dec 2019 21:57:50 +0530 Subject: [PATCH 303/751] Adds required scripts and updates for packaging --- MANIFEST.in | 1 + securedrop_log/VERSION | 1 + setup.py | 9 +++++++-- update_version.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 securedrop_log/VERSION create mode 100755 update_version.sh diff --git a/MANIFEST.in b/MANIFEST.in index d82c3479f..d78aea8b9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,6 +4,7 @@ include changelog.md include build-requirements.txt include requirements.txt include securedrop_log/*.py +include securdrop_log/VERSION include setup.py include securedrop-log diff --git a/securedrop_log/VERSION b/securedrop_log/VERSION new file mode 100644 index 000000000..8acdd82b7 --- /dev/null +++ b/securedrop_log/VERSION @@ -0,0 +1 @@ +0.0.1 diff --git a/setup.py b/setup.py index 60f080fac..78592406f 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,9 @@ with open("README.md", "r") as fh: long_description = fh.read() -version = "0.0.1" +version = pkgutil.get_data("securedrop_log", "VERSION").decode("utf-8") +version = version.strip() + setuptools.setup( name="securedrop-log", @@ -18,7 +20,10 @@ install_requires=[], python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-log", - packages="securedrop_log", + packages=["securedrop_log",], + package_data={ + 'securedrop_log': ['VERSION'], + }, classifiers=( "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", diff --git a/update_version.sh b/update_version.sh new file mode 100755 index 000000000..18c133047 --- /dev/null +++ b/update_version.sh @@ -0,0 +1,26 @@ +#!/bin/bash +## Usage: ./update_version.sh + +set -e + +readonly NEW_VERSION=$1 + +if [ -z "$NEW_VERSION" ]; then + echo "You must specify the new version!" + exit 1 +fi + +# Get the old version from securedrop_log/VERSION +OLD_VERSION=$(cat securedrop_log/VERSION) +if [ -z "$OLD_VERSION" ]; then + echo "Couldn't find the old version: does this script need to be updated?" + exit 1 +fi + +# Update the version in securedrop_log/VERSION (setup.py is done automatically) +if [[ "$OSTYPE" == "darwin"* ]]; then + # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. + sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_log/VERSION +else + sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_log/VERSION +fi From ca65ec3ecfaf859dd7805d333795f99d932b8b96 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 5 Dec 2019 23:19:10 +0530 Subject: [PATCH 304/751] Adds securedrop.Log file for the qrexec in the logging vm --- MANIFEST.in | 2 +- securedrop.Log | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 securedrop.Log diff --git a/MANIFEST.in b/MANIFEST.in index d78aea8b9..b5ca54051 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -7,4 +7,4 @@ include securedrop_log/*.py include securdrop_log/VERSION include setup.py include securedrop-log - +include securedrop.Log diff --git a/securedrop.Log b/securedrop.Log new file mode 100644 index 000000000..0ebaf241e --- /dev/null +++ b/securedrop.Log @@ -0,0 +1 @@ +/usr/sbin/securedrop-log From 944f8c3ff2255d5d5f8e8f1ac6ad7245e98f192e Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Thu, 12 Dec 2019 08:02:56 -0800 Subject: [PATCH 305/751] updated logo to match 1.0 version --- files/sd-logo.png | Bin 8606 -> 16040 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/files/sd-logo.png b/files/sd-logo.png index 531cbf26c3426493616b7060338cc68d714bad1d..4b58df918486310e52435baa1b2d4d73bdae4778 100644 GIT binary patch literal 16040 zcmV;ZK3BnsP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3;uavZs`rT=3Uy#&k-EC-|6+d(hCzk?)IDoM9q zU9%P?l1e5c0J!@Z90+&*@Bdu)fB4fvt}YjAwb$zTlY8!Q@J;idKmC0UKEKcJPupKV z3x9vz_4DGNM3U+*8hUVggJ_jTsqUw7^6C$W89DEzqa`;&BMeZPMmB(KNM z>mmO#qS~ANJkHS*e z!}wSD-rh&&qxs<%A>V%a$;S#kM51zC$YF;OZaDAj3X37;c%tz&#ud|httE>+t{1ti zk8q#VKI=qY zFs`V)W*CZ`KJzXD67E;r%3I*?kFW6ipYn%PC4%KGb7O+T&(9@h34i5QdT~y?ukiJg zkipshx&TYWy$gd0i3s=_QVBJ9i_t=09UB1}j69|sClLsx#LXZh1yZB4*rM*u?^t;6 zjV0Eom%%0iQK%*(HdGnG%DIp~mK!-VN-DXOQj3-5N-v|Pnro@GS{29*OO~xzHM3^j zMoTTX(rUBTT5qGrp1{D;Yq#Ed?_)$axY6KRgZB?!nQ^9>XPI@{Y_rd?NS~EgS#{ZJ ztFN)+P8*omb=z*c?{R`VAjQe2oOL@j(p zExt(UefA@2yz0!pFA)SMMKL2{F$W@UiU0{66*CW63d=qWbvxX~V@f zL~7%I`??uJS}BZnpvKBHLrpEr#I)93)Ag`tJ9W-U-K;Q&)jnH~r6ddKgnViyMs1}z zu1}4Kd3Zm7@oSj(Mx9a1E|n~!&MQebTnX0ZtguQ}QdyRd+3fy?uxF<9zQ8`HKqfDxia z4z_a+a-th_Vh_fznGD)(fv-INrX09=tG7pi2CyWDl}bT%;7T4v@T)oR03ccuA3bN(O40(q8Dy&W2Z|lLq`)>WXUbSq47`o0t?p?~`7{`dnGTpw}YGYCN$ph8d9a_#=^ zotGBT&@tBhp+U#i2NQ_`jR(fer6IY9nVxK6oR(bspGaeO4ihea;|I$ zw#>U-AqRI~kp+Ta%px~l*I0ehl^i7}s9qx84ThOyd-Y%dG`?&bl!7uyWt+-j_7yUW}!5<@<~*J`%(lRh)=hNx7ZYzyW@=%XO3j|)-K>g7kFox$>^p~B7M z<}>0XnL>-BxN=L6N@Rkcf|c0rio9o8W0-NQl35UdK9@+@rAj9G-Ri4GOTIB(>LI)C zt!Q-vB|_a75^oxV2ikXQdTT%&!r_d`^2t5CG0i)$48ZQ1RcKjVIydqwBlK1xcgvG$ zMT$O72)iDDl@cC|$Oel$ZffWH@gUFt^ws_P!Z6U9i_F`>XfiOZ9a*_mpgW>_7)v8f zE!V5}*UB_{$JC^LNQT`GP`cNBSwWS-iNGdPHu5--k03!}aY;LiVbt2X-7#ki+^j3J z_oM_U)ROPqRppu2?;o6*wh4B=(*nz;6Q+x`;i-f|D`MeKAZ4CWu3}c zlZCxN2%(!V3+Hzh@_SwRNBThu% z&}jA6Gy8EMP@Xm46Z2--V0K`4q|@T$QgBwC=TPkzUTw8xvLC2C2aYQfG#?WMKPyaY za*LgNqK>0275e55q zL`V-1W;#fdK~hsL(p7V(iSvP?;5+`!Ar3^Lc~$pt$eS63M3i^Bg>v?y=xf9dYxEhQ z@8>?Vbput~HAZYL8mm$jfhb(W=w2HlUnI&%ENmcK3wep~I~qzUBm#u-v%+k=u2_Bi|IPRSs0S|?Asx&h)Uil6N7fZ1~5 z9#V@qAA}BOggmS(#ynAUbLJ35sQmi&aUyrg76L=4sSo%DkunMiVGe4Qc}miVNI-DN zDgfIW$i0va7|P7|I20DxSA@;6a0@6^-kcN|X;K#`rMeMppLzH8SFX(6rQs+Lt*tR@ z5_J)7{PXRoyoHh(8L@JS+F;DJV62*7=wjYm40IwTfIBkdkaT$8I8Ye)(k-RvL4IUX z+Q>Lm4VY4kJCI)t5HG4`7gRk0gM0!S`|_kDkz*2qZ7D!j!UL6obbySIBTlAnJ1m8))A}isVgJm^8#@ z%vcx@c9FJoP0-Ws3kEa=u*v}pSE^zOA~mw#AE*IdX`&^G!*h@{WCiyD74IQP1mpIN zdE(Xxypd#Orn%pvuD%84nB)d({nipf`-Kc^`2w(Ip~@FZZen!Eo)G|N93*vQr z%B&dZ#*5gM9)Ms7$^l@I+Vfy&J&^xIWK_a$@cwc(phprQz>$}e;gZ#fbipT*qf}vH zr3z|?T7#QF=}5`KOib}c03XpzmJK{g>14~GqM7MHfC7YQis8}R_+zS6)qAEx8tj6y zMEQ^OTL@X2xEOssT9Lpn<>MJ>v%>e71J>dqJ+^m?n;D};b3{@UV>V6p7iSE2;ug}9 zI?WISx2qycNLO$M*>Cbl`L%KYvjISslaR4As4*7wrbUWqsew&v@FMhlA;-QW`O89+ zGwm@TE(&Zw&A1NL9=Ugi2@40tsxk0}ph@{b$SWqNFA5~omo9@8qt!O<)ZK%X6j5~QtogjbUMM?;k zC5xeCuxc+gA_ky~SfbFl_&KAy*gNJBzjq}Lt+op^fukY`icvZaydtyUZP_|F;MO%M zzL~%1ZBw=PQ~l~vR~E;=>Zed35KJp26mXz$Gd0Rmf*9={>CCJ8?~J5OOv#)WKf~w` zFb$n4KHmipga`-^$}tW^#VJe!2i$>35DbwCuCE_@q*_QfAW)q6 zyQdX}r;>iE0|E3a1a;M-X z79sgSD!KW{8pMi_W6kPD^fc^p2fiW>a?1rpkKau|ankVcD}=kjUL-T}wF67Ztfy~@ zK=5UNQiog)gtCrP?kzQ@PS+Uo7^%)9I}A)>&jhU z5fS95SObzg13Fih^!!=3=zle4Db$aci7?apJ}}HT!O}f6Mus7rU=J__m`ad~QWBa1 z^buB$f-u+^nhfw0D;TKJu$2#l3st$f%{~Areg(p&5=qoraPEVoWm;Pv87oRzAW9MW z7^4ZQUh+Xp1r#j^k4jrmT1Lck{b8}Ay-QguDA?->d3Y~w zH})JC;>8JPwNu+M@n;fy*s9d&9s$$2gyCpAfTHB=Cwd3Q!~>9R9q@ImWNM@f+=`3K z2K-0-rEh9pvNW%SV|~SMkoXp_SiU1c`Oq9OdON1Dqzeu|53u!rECjy#vd%y*j(zld zw_)Lr{)ZfzXtJbjKdzDy55Bo?l}Bxo-B=jrt>pu)Vb?(7G^*kq8e|IYBws5E$No z9t;tg0t%^g08=7Q%1%4}a*2C;H;uqH3F8~XhrKrPRNIz;q6O`!jG6*huXsMd0UsIo zb?^-g4OHxas3|G(;Hm+Ygp;pB0v58GN!=0mnwJ4X^}3m01cR$(){fd&|M!Ap7;Zku zrCCE62i6xoMU>JE8>d4eCa3-ZX{yG#dTB_*%qk!h)iW0px)rQk;6rLvr%dI>g1U5Xt=(Vvq!D7t!5;Wyl#Ehk+ds(IGJG(AY_BO1VvC zIYD{NbY$O!$l;2DO>Y1xb-&>mk`x4m`(WJG+)^KFY)SbDKO@xV=W>X%X29(5L6k=} zyq+^c>#AG*WKOQw0r2U(sBs(J9lOB1_9Qf$iBfY=u9e^qmKZyX!THG3Gf5O8RlOvd zn5y*{9SKTaNA^;NB%sv5-Bx0$q>XYv03VA;VOxdvIn1QK#YtrLMARo3 zAzTF3J}OYWOT70W1-U8t)KE|h#OlnXFpxyHw9s0}h!V9mhQgjoio((B&ouU z80;T5;9E<5NhvJ&ZK1r|BILO3<=#$b4I-*M|3H>M0!yDk?!Q{DL0SaKzpHw12f#@w zXNU4ZZV30V71(}8BLoFCKH49bI!z)4k+B~}CtNnabEncRQqi!#Wmjc9F$@Q-0d7HG ztQi!TF?=Q+jHB5?DCluxZmDl%yWnX_Y~mzhSI681Oo^#Ueo#c(DVUxz+uF&!m9+w6 z5?tl8O~{%sY%~KI(>e;1Ps|D!CH!ZB8vGzp9%2lJr9L8{##JN)x#OpGusVGGnb*E1l1U=uc2UfdMF>2;0+zoBP z6brEgZX?&=Id$H&63k<%8B2(eiUww9^}145&tib-m!W`MCKR9mSWRFZyE)ZMKs}OU zMLUcYQ4eP04w!!R4x!WWUzAAbB-nq3I5qD{6@eETG^h7AWX0DT!K2T6y?=nX>O(}_ zQPF1TsnoW9M&0MDIbES6QsviIohbHTn91mo=Rd$A`Xh8C{GsA2e;f7DbR2?mB-##= z+(m+sf=xIZ^w7jE0=T;8+pA9g*=PLD(tg@RCpR@H@dny%f#r_+M+BL>PFJO}l-R%wnJBomP1!8{rbZNIbHx<_s80&$mz z4u^zg-b939td9%g%KByj!L_?)R6KY~Lg;2J;0Ae_?ukLYD2##neTWQg6nc=l^bsOF zfO*l0o-SL6gTxRgC~?bn!^dFt$cJ8Ql z=eh6g9-1I}GKi-iHu z%R_0174P#ou%V7)7tbeb6*Gl`ro%fK>!lqEjc7~VkUkF~kE#qZK+EZbNXE{BqZ6n?u*xOO=PcrDPIwX z<+BQYzvl7J@BICZdK(3wq2_E%Ex(q;lE->_NKLS#lQ$?)rt_y)Z8zjL$Fmq(+zDC;4}b!9b$^o_;FE?=)TipJvVIa5-{0#+e)>J#@gbW03F;I3}y22 zP91a$+A{$_O^#_&6`o5@JaiRsBot4=%$PQg!GstyqIGyJ#>&$2*3=cN7{DXZo^1rHK1b3G?b5NMFZhi zkV5O7MMI!Yd8_3PvD*cbZLEuDO?0XwZSBV38RzNvrunI=tOGM(z^93yE7`QRY*P)W zTKQir>f5)2;>MRUM7`+9Q2kfRP}$Yo=JPIvVBzLr3$nz~~1Yn{)!p&Qbz+YA%tH zz*@-Bo|Lf}`FE9@EFsItZ}nc6`wWMo3DBEI#_%nXWX+*^EY>-MxT*0tI|w-{(}UkV z(x!Rkw@fRf!_-!Svbyv*zMtG=%_%&Hsi)`gpwR)$Wu2X=u-VedH1x61N_L9X9B4=> z(We7r!SHd(cUBs!ppy^r#9U1*DM>pHoTewf(zeXgXCDyH4Ve;`{Xa zEz>Z~E5N1mi7rntZ-7H%!CDuLLWeFr-qNSk-BJktv<4SVQb_d*<|o%b*q0bvDeVriI{HgtTu`?mvT$e9U6360e%G2AAS zq+%EmqdG3js*nMEJ@S4njuV1RH2Q*y2x{*|ZFQkUw4G&KR;Mg+n&g}GDIs-@(4nZb z$3%gs?}7bHVjl_lv0L7xFLDwXRi^}O!datRbU0~aIrtGsO^GmXfuom=;sThTQK`wb z<)nd5?DS17E|loq zdKB@kPnqike{OjDOA>g&MTT*XHc{Bk`5pNAUYn? zN(58@bF|ym8LhE|^W<@wSz<|NYt}*q9`Fq?uXlJb^t)=TrCb==FuE zK{JCvO9}yVtes_T?o)tQr*qCxKMA*uP+DC?eejo}Sg04hO0K7N4`V``6eoHe z3$WA_mHkyKBfe7&fvJ=R9_b9ojDkV!6)}>;RYL6DMI9%@Wm?pxvRuJ6^Aqn=C<--4 zb&zdo2g@|XuiYSn=Jjo+=FT3=JFbtCX*fA>KrJ;*u316GH6%7)+8qHYL3b^ z6?F+Qfu@Wb5+X->Z#A$IGatEuF)2xktsO&j7p8_BcL?*Ko|x&_DF(F&d$ZIq27i!m zJL;V2Zjv&yQgM)E((#J`K!7bs3Cuo=jhxjf^Jf;hS?4W{6)g~n3{9I+w0SK0#zF$9 zEFH)q(OJ}{0r7K-+FxsA@LB4}!o6OH_P19r{tA7r3>q{DrrN9Rp|)|yIsXDK?l*J+ zxOAHLOe6r=h5*ue4DgR3rS5f}OiOZ@yALhz^ zyDL!gpWM}-z12_F%E?<{IJL*$^$40N!(KaDJrbGknrl0|f(($gPmtOsjbv~Z()Wl1 zBH*8GP4PEr%QbY4xhI_sEjq+Jch`wPPzANGgyXkDi!F#OFL)Cen+{=n!e2M5b5jH< zaKcS31W+OCES^qb>&PR1;YOw3q}akGabQeSBelvT=(GbRQn<&Ra*1T!)q^;_>$FvT zxd+0J7~jU26b0nzhHYfa<8o=8<>->EkEsJ;}^Va zTNZ7~W&y?AFwRDf7h;GsWVwXQ)kJ@2coaw<2M@d;{nVk;B~>o(5@mt)w3y}qe4VpC zI~xa^vM`nT?)S)tlo61QXlN)(`67ULM#g@i2a@+roMc9TSZ*esEt${ubQdi~-!u{;M2u`%!1CVa*nF813NZc$uVDr)sIo z`#JWfKI9nMkPKbN7Q9aC=wYDRqfRlPs5+_^97Aol5XnU&);c~ldy&LN8Di`L9gN=Gp0gj1B9t}HG05cI3@ zi*LqdBgVS94C8-F-J}5KJCO%>DARN+S+XmI$%==z^aq$A(-ACrt0r{PAV)_cq93u~ zP?(jnPd%@>PznaS1YMfq$IA!pj*vb&$_!$LCkC+B>OfFePFv+uPdcbmuEW*>b0P!SC2X)i-~6y$uK=y zhE)`3lYbB=Eo=oOD@l_9Z#Q}?hm6)nB%nDqC}7w!t6Q5FNsl5F9Shtq zUw+=MejPbh^QEi%SM9;K^*i+>-qgclIsn#sP$80+O}3@FUaP4*l1|m9^NvI5afWPY zbZ8xQ6Ts>OpIx>0FseFlxNqj3I^hC%r|E;!nYpV*mY%m!&ma$N2dPH%WKJZ6Tj-4Y zWaQXB^b{ALiAvUC*aWp}pV3W8G*+vl?`EO=pbWp#iEq9X(Q}lW}OK9p=JT#b~k@b4!6Hs29qU1}1LNT+sO@lr%vL;v{~bifnpj znVPNvrvzv|=FDKOdVqozZN~8m<_T+(0c7_cxgspErOwMh(EVDTQ(OJyB0zMJQ$spZjz4sdx%k;EdFAVGwJ z8p^1^MvPXS6botEPx$zUT)#vvg=bb^8^S!16O+6Uu^*KPtxmcEqVm>Zvz+CZB5w&E_Z;zCqp)6R|?V;3I*W( zjJ_!c4BP^}YhG`yeVjf38R{x^0~{OzV@1kd_jz|uXK(+WY4!I5dLDABK*ABX00006 zVoOIv00000008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;|vD?D-|D( z54HdR8r4ZeK~#9!?VV?MlV$h7e@)X(cMHL?DNrbsDMKiGiB&*Uh9IaQ$g((!Y-LlF z7hEh6t0)30ydW>22twIVkd_T)bf&vao1{(BG> z5&+Bu-Za2+zbJsUz{12BNxlOb`-a6Ehz8yRyesh&Ij|D=C^1G-=zzw)VDSPb05gEV z$2dd*uoU zfJg0s#=2nvcmXyo>qAI@xc3uF_L2rXoP{Kg~3i3Yy-3EUSM`&j3mJUP1V5C)Zh)h zY=aKp7GQp2jO3C78q>fMiayRV3fm7xZbH8(des5V@J4Vve+1DeXg z5(LafzeePa{fY`$XV5%Z4rnTd+U~yuMq{uFziHMbY8nntRAi%*yrA3B5KJ{s0jHK8upoxf;dZ15Jm;(ek7S zMZYMzE-^+Tw@GLsVx?l>HS{?xA&zHmGRXlJqR-_ivk7R-kkewXl8!!7{#9a(q}(c@ zF~Bmy085yVqvz}5#0!mFX(AC5?Bh%ge=%Z_)8Fn^snU{HR8CsHhCkEP{Cvx167H^{ z&myd{Tpp(?f@L7E2nZKyq_n_WE#2uJ?oNZ6ZiqyW_WLrmj>{=!>^ZOChh&=o=#pXD z+H7igOa@K$sD((nj_qME&N>P?I?=7&8Q7s30p8B0(et@#HXJPGr`t9GPZIk0*Dt1m z$H_$6rHcWUNFhff#LbD7&->E2mRpq^|BpmDQ}>nF%7WJkU`Aq$%zXqbis z&uIy9b7I|ae`*E0ROxxnURUz!4w)?(%<6T++b{(EvIF}Kp)yQ_7LP; zn-9rYddlX?nhpXni7}EhRSHc+tTYUL1b3u4@3v!rGizTLE-qNC(9-2|o2~!<8TcSE zMv_$7ABZXmOK3!_bR+uGjFINP%N~tf1wEg)r-=R`Hk+OCJdhX>E8S#Bbo*Bk{|hV< z^Z}z+0T)ZTOIK&%O;c}In=eLv85j`}EBzLIE>H3!X_|;wX<$UGbQO>cykSYe03>A! z>k5}^;c$iqI}j)I(fg|rvC`Fs=1vc{X(D2!{^%2+CQxyo7K@R6V*`=+3o~Wh$x;#h zV<9&cI_yl8=o7&f-P_d3$pDKt@V4ROV-0uHKSa!;p#g{mnyPdsg7+IN|EQN3G@;X;4Q|<4D*JEn}|BqU1%5T&MO_fc)Fo0tpc5K z)#$h`vtEMA)hhC`Qb@~8L8VaxBsh6QMlV9Yp!JsohjqoLep^IhH>O7E>!myo89&(QEIs*RdFV{jNg(~T(km+bUH1vyeyxr9RO`Ejrz8vUd7I5y$h1;dX?39sSW`1{GU8*2k zno5!Uq510ToL%a6?8QS;8q`V|MJeaemdbGRt%1nJ&8DE)d9{po!OnyP3LC%7lWAD{ zYY}q~D=0RzvM9QpfV0>YSD)%QiJWZ;oDS8U zsVM+B$}%ngJz31y9WwsRH7_kXotEN)Y*JE^DOOavvu)*}F`NZ?&MivPF5>FthfB3U zn*ry)SIX#E!yBt12myuy66x<{HC6CNwLp;pRB zKlKw{L3IcU?~SWZb(;WZ%yt=ZgP~QZX>FVfw@X=jsD#7W<_`dBRHfu(rchAw_=#nY zrfKenM^Qx4opYcm)!RE_SE~nS$CWZV)o?~)0*#ZAtLD?aMa(~<;Evq9hOV|;LqT>r zchYWAsxqoPD#0jd{!(=X8OZLO$JxaVSD#?3chQXnr$}DTPsd7_xVxB(1!j)P=yVhp z=8~F{j7)BlDqhn-1EABEBhOBzB;zt})dF$x^0zy1)EXVXot5*>P8s`B%x|}p%4KAv zCX-u`i&keccoR&%V55>3kal7V-ZerAY}Ui7jpfnXWqdstT35oxIeT5niUTDiSwOT` zqbegeE0ug%)oc_~WvhI}SvM%ox@k>+Nh(^Z`fRpm>=dDo9qc>5f|;XSDq5^k08or=K8muc8~tc2A`WfpOb@}fMX z(lp96RX;77%%*v`y`!N-dL2b}GOpDEaPjoBN*kwRb!Ys&o%!GC62|V3aWc#NF0?*n z;Rf0HIrlFtR+S_OnuJnXlttRH&G>{gB`~bJ)#dMu*&!p;OT-Pi1=uZW6$RPp{k6by3%qtj|B%9E0nD-}w!SOzqACHHDPg|`z7DHvf^ zAK$5JQOF9&%uEr)Zn0Qs05oL^G81;<8F-GMrrmM#cQncRhuu=DAV-=)k=!!2%e0uX zK}B9FDM!A=w{{BxnnWV@@UeSXwB;J|v(w4Wx2%$2i>oy)N=-tRc9Ec_-SDZ~+9uYs z9@%cuX(=wqL7J6;Mr(Oh4q{6kw46%^DZG7_;P75}NgCS?Fv{XWvZSdfRAm->jTT+i zu2vM0ar$Sx0&5f0yf>~sHEb3Zby+F7QsYt<9MIe&^1M{!hc@D0zYTt&oe;a*PGfUz zxrTzA46^dFt>&7os((hot+U8dFA&tU8{V~B;^b_-?LTxn9VLaiWM-wIDYvfbOsgC9 za*c|tq~9n=K230ozIaw|V0FNh%4K9rQzQy;P4()3u$gKDHtV%xk$6pP-%qEw|TLSC+`hwO7q6maS`k10%fV111Ih<{d`vemd-W!jgx@Lo=Oi@C%G=*ZNLhy69ttRHf zVU6h3u^wV^#fHPh8#y#za0>CGYn^pQPfr>heDHezzy2)}iD+1_7B4*Afrh>!cAvQ^ zyzNk?K$dm^O-ZicT`)B2GIFIUq)Supc3BWqR!7xl$@sQ}Hws4dka?(jfEO*R>DZQ( z|H#u*mD#U8-d>Cz{tQ<)Pv`Ca;bwW;Wf@nv_4^tMuEwL)RBeP+r`1xJlR@&0i{uvO z3x2OtBm78S+=a0(MBwXPxtF9zhsV>zRqpiE4w0~M=2(t?Hl6`Zg3SU??zN-b`F$-V z>6g$|!CH<&me0)_Nn~Va2%h6IpoSaA-)YUqZ+E876OWeE=I7&1nCGM0euBkmT1SNO z!|E9J?my1_wR^abCv1#Dqf(H0b|;#y^CvR&%mo&G zzJvYA!X`=UbUJb_{XyX^LkdRC#yn`d2xW00QfUfGl}hk&>g?;nqR~z1*s>PR&gSo% zWf5yn9ojW#+nUDg*?)}aRlCV96*ds2R?5gYvt8fyE4(*uzW<+sp)OOBBTb>OMEKo| zH9GiVSOcEx5sHVqO&OC{y-M*Qow#-~Ah zii?ZQma;JKsbJn1(v0eX)vz?NxK-}J0AHp}7|OGKpW@RE|7CrAvf$THaQhs2g$0xc z2*0`S@cLfF3~xsB#+KXj$6{+nLL1cPKMN-ETkL2$)w2C0^LEw5?0KUZ8)kL2XkaW- z)BKHSk%-P6Tk%V)rtI1q&zKdvZ4#KZ&(-0jeod(6WgSWMR#Bbi;qJyugL-r4=ef)s z($;2RnbyjmTT3H(?fDi~1B{^1sMQ*y+g}6+`Sbo;BRR8v3M1RswOUxBYPxgsy*9)~ zKSeEx>89TNA|?5S3fqAuJ13uMbG{(?R;tm*YSyFyUo4%%o+Tq`Q{BsIU}@kcV#nyl zY?Z_r}&3RbP%MqYlAamJX~nQooi zvhSN&tef1=;(=M!FNEXEy7NqrM!33|CP7TC(elf|>vW%Sh$(y0{`&vv2c=xQnQI%+ z+?5&M9iz+0#q8X37?s+%oD(lk4@SP!pX9Bxm>v~jaj;Bj?#tB$PcdBAFrk)h>%pYk{D+<)V0m7 z6NSa4{J8HLZ~l^M_G=ML)6|p%bKv9G=vt@Z)@h#~xJuZFWqh@17llQ|IOML~QqI2k zWctrIWD&p!3XMqQM8_vvuzmgeeEaURs2<>bPhNL`0k1A)&;Da*G#a}G=KN(TBjz0< zYQq&0N-SqA1h;8CJlq)aTu-Ds=JLUdPgeMyKXVlfnZJ#fCoSiE(lxt-B_m75oG(t$ zZdn35(k-tF(`<%tP@q3CQ$~=mek!j%RlmaT?7Eyyr%9_>@X^;~NONo+7P&&j*E=py zXL>wKPvu$cb((z{p=p!)tXw#Wy-P>YCb;7C#U(q>6Z+C(zT38!61mc5q3JXIAmeu2 zvH1PIjfTd_35;!y?IL!j>r-v`b<-TyPw9{50mmEn=|1|7TFBvJXVGYEZy)Sa#nxfN z84ZoQ$ccC6eL+f^@pasu9`3ySVn0%ToW+cRtsZFa^nd?brq29~OIL5&6g1^J>;oEr zHGfYcyY?5NI;r+Kdj8sug9(A<^406(Tp7|QvL(-_}1^r7zZ@=w1f*97iz zfWI%3$GyOXZ{A^iw@|wW=B2ux)T-%gJ z4pM3Ycez2mT1=lj)b62)8Q!e&)`iZ3paBp&JL~I~HqPX$w+2+WJmBU8BbV>w+1HnF z;&h_fHome1@i9Sh|K{NhX&F}e?Eo%jDJ=_{yW-*D&afeUNZUS#nFCut&|U8N&PLvy zyP8{f(s9V6$;bv?B+co-3;n_>{Tqc+&25#|GNHLE)q?_<{mv_#UOSl=T2-8ux%Ti4 z!bg3?7aM*ezo5uL!@o!;KNt2-Y|i>wT?uO#^hm!=$$Y%=HA`wlc+-Y#SP{*x1tVzv zfOLp=jW@bt!4}2YFcs}v+JkQG>mqi3^hX(=kYPR00Jw<7^y>B``{HJ? z`prHSe&>d)jG>Ev=2XHZ2POB&iat+}{+}Ma&@b$<`_|+YDwz1cH0y%qu2ie$$>`w& zxV~iuZ}n~FAmSks-O`U6i#jvq<<Bd10Lhg})As(EHY0L6yov9n*XY}#*9l6PjKOR5-$!KU?MNae|y@=lroknef zbcj|FP1w9ThOM)P(8$-#u3>r7Tg=|^;r#GncUm`-nBS5qmO0M3d#7^+~sy*}>wU8sn&sp6*jph(j0VB;R;lnj2X}k1{ z$$_adO>?iD&6d-5`Zv7Zr2&)1JWE*PdJa0ONEAvn+xK5*g4a+5Y= zSMkwjo5{;BbUa}bibkX5@aYu#PCvkypQ;v^yU_dw+!5*q=Wabk?ZKu?hp>0Kax<5y zA046B=SiHDRk_2E4eS&t<5&IxgadN{VfN0`=@_|uCxgZ<<;3YEv^t&R=|7_6<}3L4 z>oc^Nf0FfAs=PIe5?BT_)Wk*Y{+lB6h>Q*amI5P%9Dwm%Lzy~u5cTUB-;hX}l}m#c z7a4sVtzSKpbS%HKERrW`n687TvP{F?!^sTaoJ_e^ke6)-FkKTD^;bPog|nYWWOPU1 zGeFR$y~|(e!tf!z3GnxIK=V)K%*pd<%>V8(zvT$B6U-%GiY6}VK&1>}W&Fw$Ks(@7 z!#pO4y!Xu!+7DaAu04lQsT}DLcjZ=E0dIeNgvgcWg#acOm;^Mh2$%9x%$@o?ZCf?7TTPQ+q-5*fYkzC^T7^<>m|Z^9#6>+c+rQGznMY)FsKFR| zUdXrXQ5!hg0yJt(Ilmpb#d}+Ba7`&lP;@^qRTCFgsg=w}_UJt#qk9;L6g2te({Vi* z@>~!6e7$WNnsXO3S@7K@c4Y|C?)570o+d78*Q3U19?g1>UwIH{4!j8nwgL5&^#|!Q zdI@{?A2Ue`hNVfGRK~2&j?;emSs{Rt0q+43j|$9VX`1`Ajvw#=Fa-gl%g;8e!Hh|R zY1N{M)oYq!xr!b8uk+gW+d>WBdSI3&F6yznGMFUb>=7B=6j%xL74q$TcR&j!jE>@o zn$@ii8nq$xKj-_aoED~S+7V!)CN3(;*aMkFJ1FB<2^vSA>G*qyHt*aOe`^ zHt$AmMGYJ;T+3$CvUvKhy(k1QcYt9)q$z+gnWni<>$n>H{0{+dp&mr5U{4mlHJH!_ zA%u;HwMb2qohRq39haCBFG%Q10W1MlXyT$wx;#{6>!BWz(ZRqXV4RR|apzh-98Hs1 z6g2+69_%`JgP}j%tnw9TgKPp~G;vXxRdMhtzXgxT=oY}IKsRghW=sXmrkCpT#jj}` zD-YbNw&d-{zelQRploWv^lm%WV9y` z4a@>O9ncu>g8-|5g_^i1xlkuHOGkB&$Y=@rC5cxY&^)&M2)wU}ixPadd$YFT_lS({ z0DJ%TZty;>MgY|4V&LURv1-3<0lgdIY2*#OI4 zOMEsWONB-mzw!{!(lC!(?lxQFAps74Ofxtq8!EEW!d<(p*iHpj%<}tT=XzqchIr<=2 zcMF8(6fj8>7j?!K#@c3}xd)yX(FX?`S^zXzz`MXEYqMMI3K|1A9>7%eoiIGj0F45D zqWxkaQx+W1mC4o~*15nN=&Kcv*u!|*g{HYr>v#e)fN6l25t>E?d=7k|iHnli(-_(v zH21($&){VZdkkoHqmQ>-vB$BqTWIcqr>nu5(-oQLyvevJjTX{gJ4)_9?r-_TobBvHf9tKYnw`W&= iA|CxqxMMW_DgOt9z+M7aZ^(H70000^dJohFV>TA-|aL|B2AbM>rHDh2*0lsJ|O5n=K zmG~MM$emU6R6wAHG}=ph3g9=dqn5EA2oxd+0!7AvK)-;g$nPMKzZeMg!wv+J&jo?l zyz<+OV89=g4mz4@puhh&eV{k66^1Ggjif-4f+s5qDdSki-;yff%&M=R5l6qp!tl_ z^yCr29y=_9s+}XwGQ_fDHczLf)vWexvm+-yQ|4ZKTWDFkMAebglfMe`ZO(V^?VvNe zuJ!{vkCj%kf^LJZPG~}{%#aN3O}dpOOvBxD1uOjF&p*$ z*SH5B9bY&10M#1VE{G4tZN0@}ykudi(PfO;QbdgGQazWM66}BkC(Fb=pgal2k@nz^ z1PJoZWZ9o3B7Y~mKjtPfiRF{x2aAJAp|+H@-VXp9kdcgFm?j38iOF<%Z1u1lE((02 z>SV0?=HbF?`HY+F_vJ{@EdN*t5ON~%{CqfCbF?jg?AF}>5+N0pd}I#UJ}ic3OIPA< zs{J8`(FS3uvA*u(vJ|Xu8F8eOAH;N7fD1hfPJ-n14eBRGhNcu28Bq<Z^{EE4Q4y%D~T+neO2b~^3m_>^ILi{VstE%QWO64dTu2g^JX5+QYeRLs%F@QJbTp_EATFzy%CxQ|0d3?uzhfw(28T?$79F2UTz#?*&>r7 zC0@-pLX&(-RZ749H!0qJfm^TJ_5(yCNvXw*`_o%{mTZei)ufa)zeXnd>aYcE|DuO^ z;9H`|(mqSR8T3WCam8Dlq@ptj0tImZbu>+Gm9^@u9ns!}D&6p(t47&&Ov zDMiDv(5xz|79*}#@>~8e1Sd725W>cl@^OZbi{=<*5W&!;B(^_MX3N@xxwIm}Zsd7K zmA?3?pm5{V4V&r*ZZf1ESW>cn!Jv#K^mKF$iXJ z-J;l${X?^$@6dInzfFaYjP#Kt3v0YbVFip)TjDMZ-AC%Z&j%aoe^Tgvh(hmr#YX4%9Ri@Kuqrq8826BAy~tF$U1-ZpmW6(}l>?zx_g^($YO(S_Xs>;V zoz*HGTRnVFe(CYaMyAr|8Hqd{{<$({HT{=e>#GE47dceIss5*in@Y{hCRpjp_i8Qv z1zjXmX~hs>q48v?#d?3akZo+mE+Bwm^22K+bK<2U8%Y;9O;bG``F)weAl*GEf-(Jg zk=*Y|_Qq2I?T}fq0~N?#9N>({zE9jb^av-5YczlV=>;)GL9+zYq%z#h>sW z``YvA>az-Oni;15u!`m+57aPG1rdWE3coTpM3Y8B$XWh^&hsIM*0?qJW7)i4(UJFw z^UA!kBHE1*0>_JsKO~!zTR<@KC7Ne=$tDl1-SN>fG@U zV*`&je&MyAF8^vR@N(hvx%eVoYunNNbBfOE?p0R8M8H$^Y~+`1KeaveN%3R`*0l%x zx4jR#pGO28|DNLXhj}oH=767`&3yA|wXkX#`{}ovc4f&I4cP~2~^qAGoz~6*8&tz{EPkgM|*pr ziniY?4pz4PzWe#nnG8tDOTqPMVyz!YxK%%|HiqswSPDkG0I74QeJ|Oe%z766s6ih{ zL9c?{@1*~XU3m?;1Bh2+mgMdc-F$LGszXm!HfnZf{Z0LGLiK)KM64_6_-EXYj=7JnB-)kZdz*%T*P{wkWuxnB6XYJ4Cj5oJ zJZ0A7%ts9x9mV!}X(J}^#Q*MJQZj)Q-snid=_Tgtn~&LmIE<_FzF2$GQ%rmx|5Hu-8hf0!f0uT# zX^ENVLwZ)YLEI*RzSN_%xj)1yOV@*JQi?iWh}fbzaql}qKu5wP(?rdQ-%bTS`5H;l z4DT{}($MD9ZVKa;X{3vruz%+B@?MUpug5m5xM(mspVgYd&eceGX0EPTEZO<-mxV9W zn3Z|Tcle`clTt>ASaWDMZq|0=vQ_6iJOYaIS^SUA0UQG46%Ms69n_PuI~LUKjFQLaUG^&U&a-qV9tuq#F#0HeSx_ifhvFBn3>5L@^ngv zBm(Bi!OagX6=gsY?Rc?M2zCpzae7*HGw)W@%LvBR*KA$*l!ZN?ZwNz33#!Bd9S8lG(AAEcIgezBAVYg0L!btGgjJAjvC!KQhT9do8u9&nNtndNwXg7fzR-hkWu=E@t zZCLw;_?wjc^U5E-%9nZ|T$_Jtb_R^dN4PLh-XlyX$S)|stE(0NvlLlB z15=Z~To3wrqJ|`!@Ys1XO#ir4el(lGT&SZs%x9d7u9G&cwxPMe8M$}+cXK#t6fXdG ziwvHH@QB;?KksJkT-Wi>)9YwIlg`kQ3wCjzC%WYIZsTNrL%94a;G<5<)`LRHg{w{YihM+&{! zP}ZqQVeKDn8V|X+0OtR|gucd~t2QfwS^3YfS}BQS znA%5F>SKs#k48$$2nTAHqs*0wCU#&(eNIw&I))Kr#xjN#Pd^6gkS(d^uZlaIRR~{B z^K5llsi;t0s~EDDjr{)(|A~UXipV-ix#4r6J4?kHP>r*77t90do9nOqPtOXMzdomv ziWr~!(MnZy!)*5HpeGUlprPCc zfc39k2E(}VT2?U+F;-1_&0nukzORLQB-?Mh?iM!);3Udi8#@~wM@Z^~ctriXKP-eA z^Ba+D_mIrgy2NKtB#^_dLHfFjTJx8iO?=6Al=s{ihc+MN8r=6;FP+sYXH6TWnvqnN zCWnr05|@1RzbMP4AT45q%BaXyKfv`gyZN=R#UTx$tUy=}df0>01{P)$!-(+grNOp| zsXMGYfPCa%KE4Wk8nSkuk(t7dKandpjlIQ9Z?;>5X{FLa-a4Cj!@6Ovd5lEPU{ zVRpqv=IX6%H`jNb-mNOXgZ^_pc?NKI4M5q4o{5w%M7oiP(33RuqH-1>ri1hK#^f ze{scid}EDif5>gTExJC__C=Y}GxU?OZGxSaH7 zT}T{mPsL4ULWCsQ7?WM08D9wo?g%EG_z3^T_55YbJ|tYII*CFZ)lQ zh&$a`Nq5T1&>dNc?}VWu{T4R!TrN-lsNL&1#a>>4wnVK2&{_?s1v@uM&8j=xnDy&H z-}aBM=Mzjm+8_RYm=90(-7wBWZ5!6z>^}a4SCfq#Sbw+dax1u2voXbvQHqJm`)W;k zEm7)Xk#YfU@wJAPKo_JT5<0(o+-6~w;CiiG z16?E3y$oD+1EyWCyyOIJ;>Cf;W39X^nRC7Vzl^4qrAmJLh7GNMc~(~sFCi|cUSZCg zV_njMQ7xamxijdP$NGvdQ&-n_?{VIRsoInU7hO^fOLYHLWLm}{Z4koAsYF+Q)bQ>; zz{3c-YtOz;k>+YC+^7b7Ff@%jh6dbg$(FWz8Tt}mATREcmm=Tz&W}^B$LI&o+MPQR z0H!icny%9-e3RID^Efm&Zq+4d_x(*&0pZ7nln$-P89uo4M#j!?~r~fD%@B?efY>2n|Zu z?Fy!x`=zp7Z+O|6{(4cyQ&djNpK)&vA_BeJtv_A#183MFM~bapJ|I7t4pTh)eM9j0 zCIC?krvaG3>biPck;18Z#c#iW(DdFrg0bO+s44pz)>Q17 z@w}c#b^`bgu*Kc1kh+hOa?HFODA^hB0vA3gx*Y-7$oLK$3Y{pHW8?5FB%mnZ*=e*` zMg;`~5^;3J==J#Gg|}k=P96Fn{JmzO!r@?4NXh8Y55d3#q;U2r&qbaq&C1AY%Pz$y zLL9EYgs@V20f7(h+&Ifk=|$<>2mJTYP!o!4e2o~o1J{TQ@7?^4r8-DeYpQ5y>l`ik zee?A6F8_&O0lSoFPCKUCiP0>hcPOf6lrFZ1VZ!AlA|%}_=%`g@UB3ij@os6x0>A6C zwNJUwj->mnmaViaJ~2?m(xlOQ&3CX-SF~ND**Jm@om!jt<6!^6#5tF51qEp_(=}&C zZj0>k69zZV(8bQT_P$lh<@|Q(8xukoLaeT))9MnCoT*WLGl{=l7rF0m$NH+h z^Zxjt$$j&|`&l<^6g5rJw0r$WpTdGY*idWmTHo z^rLTG{ywkb5H>w5oQgzm|(nmqvnGSa_}G^npYT@(YfzT7x{B6O3ml` zzAwDlefZQT@U2e;cEtV7&z_6@<;kJFbF@0WKzYUNsYL{l<>LcMNQSFJqUnL$ax|7d z;Dh5oxGyf;erpl#Zt_Ku(AAMuVhSZ3hS-wlInEdsZA%+1)*TVAo_{>DxaND@yXG78 z=^fb?FH!i_BPlfEnPAWInBe>_$F$FO18H$BrXB4N@0{USTU?7~Fq6OW?98J9g@3I( z%90`wx(5d@yzxuVh1&^Ub9BCE07TsLuD{7G$4|M-RmfCJDn+5Vu-=II=yJ==s{)$0 zt)j3Ah)0^{qGBp}n(WScK&aN}eR0l|rVf-q;X;wk!i#UtUE_zYye?3j!-H%59EJZZ zVY(O!wV-%!_IURx&fQ5y3-EpKwU#Ax6jvC?rY-1*SL+`P zWkiF;{rSe&w>&s-N^Pic#AMNlGqc7|-B1@`H4v9%L3(<=wQ@>%+f<5a9d=g&-S2~wFfz>w;u{4#-m&!jXkPm6#ut`V zAceetqob=oPgHBCKAk5g1S2dRx}Le-9)o+@bnhu%1uM+Z>i}z?$Rr~2=I7bl+u=a$ zo8A?u9w3N^F0T$%+yr>);?-<-?>$rxK-mY#k4)oSMe}tcTuk^6!=wN1vdnF;Vnn7l z1m$G#KmyoLjV!m6vnpbNlf`!20wgz?Y_bmG8$7bx6W3327ZwzHY1R2=ZLJm3U37+8 zxNr*rTOZK*(F?hxFcDi8xi^hz)%d&v0*(Nuy*I-d#0)GyZ96^MQF9!UyyYDtGWjS% zw7|e;`_U^e^WEczJL&8IB%c2Gu<%P6nV5MtY0hUI{(;N|J$gy`dwSTB$R4LsKG|)g zNvH4E)+RDZYBN@-wtOci`LJ&rAD}wB`%i#0O804cjh!WXU z()B@6=Fp)Tr_`Fue!Co5jYeIdw-HhgS&I(rzIIXEHwv$U)_E}Wg~IBotITS=b~ev| z-9{qE2J!3}WiUJO{1VuPw4mr+ks$*NG$Zk5t&O&1;VXtx+H9!Khh_$u72Aygj9Ew; z3x{d+medl$-&sMkp&sWBdGLY%BS`UuU8MElVLBA|>FDT-SDtvlWb9sngi^?h*prlk zViGb{-IzY+g;ZIGc8n^7LkMLFfr-mq4;p*93m@WLVPx%FQw-!m0M*-n%P#(DhYSbu z@tq+V5R|?qf8m0iXW&~csER~0aV_jreAot=jg#JgICA6_oN3uX?FHQ`Pjwv<8JubU z=u+R(qz=hOh)NrXNga}+Z&x_WRm=nv#Rj4`VAFrr4=y7<`R93%p#$300~}+Q3iKQf zJy(d^KkBU{+(^2llCtH@>08y&d)@L0@YGIo%lN=f_wKM$&;gi%Hhf z{}?*#VPjg=9MsY_1Z?V$OEWR8XfL7atIvNJ=az>vwaOBOOwRu}mq_*+AwGX``CwtO zw6-5j7rS;f$ibO{;OyphX)QX0f$hC8A2Jd_7mxoP(%JSRwtZPB9btg8C9n zuqNEYKCwfXwMHKsBPYxtIn4bvCUcn@KW8Ne5wwe)Ik&f}vt8xASk5_!*1U}7KMIsC zJV7%+Q^*2*ML|4>!jsvOimrl!?r!k?o|d?{r1V`nHWr-?;>7P=go10y?9J=ux`f+A zg{2i-WH39>ORJgmTNSVE{4;ioPzYKfjktNPfQ9kL4M^$Hv@g6#3VnDVKjPl&z16aZ zn_sH(+Oh$9rXn0EA5H8UB5(9M|Mn-4*um(tmvhl4OLd)p7!tCkaa2Ky;E{*;P_Bi+ zcDx2q&v}Q!5He=q;Xo+v+iSMHJ$8=S9a>#HbJz)Xs zNfsD67T@i#(^?0#SU7`jH0b_?zGgpxVpYznRam~+tB`?>Ca!+JFQ*#3&8lEaw!9^0 zx1F;6Ua5mN4SY^TiZ&pdFv1UuN$I+9{imm9v9Us;MEYSXwr>XeJ#h7ql!xp}lt^tC zFeNFKpnp?J0sBJZ`erBNhcud`n&MuZs4Pg4u#R0JTP7*fkTN3Mexqyx>I7eM68@6Z zsMt41PrY^LfsqjE_y`xA%I7hH&xARAT^?g!fIDd}d5WmTpmu~@GsSQsc~l`~M8|LE z?{j6(5;#m;DzSe-5iIA9MGT(-SsKcY!-+9bh3abP!bfU+1J6c^Do9==BtZYt&c(0) zs|~A3eiKmS5e&@1R}y?+pZtFEJb7XlbNU7&Q~IX4eS`nI*l5KdC#I@uzy=!Com~9! zs*~hb_xTzx75U=jn9bc&{`)!wHXuKz=r#VspU{RM+%R;p#1`H*Q(YlDB_IG@zFb4{ zz`WIv7f+*R*^85yxWFltmlW^DjtV26v(p1jCY#wfZrHWgjMtRAf_Hz?qB6#r>o^Q)9R6uY^|$%Zr&!t>SGEhKch13PmHVds5=D91RCNoCx)? zQ|TC?Zl%&BPa#=U-<9tISFekiyUShUfLjM4Vtk3TRJ1=RQs>o!dd71TSZ=R?IupHc zDE%1V7+Bme4aN(^{P{^s#kSgj^?fv+3vicV#=@|x^>ZAwF7E!TMv?at;4|&mp85gr zk#X|`7T$x~9_nX7l$iWXDKnt4)KkJY<~q+hHC5m5s|(!l->E_Z8=+>nQ-gmPaM_g10oM|Y%7mg zBz#O;{sut4si-q?F7F)TP_@=7MeY(HC#L-8rm7cCPP_b{0a&Ln%mK+=)VfMLXN({{ z=7z-cC%t8B(?W2!{dwa7@3)r!9cXV=8{8z;LxsahO@h@p~|_} zUuI$*lYdTwu1}$Qxx|;BJFk<79;S_iKgH`)74iLM zJh0mYXC_QdS6t*a^FuNze{zT|#g&kdOQg@sF*-nL0!le|`NggCdyy+wJz(WY<=p13 zS7M$ytGif-oe`it$cT0&Y%y2WbdjHHxG&O zwCVgAcK{&VG8=g%x5QwWQ2G-EL^|q!#n7IV>hd}{(o_uJINDi})H~)(c(sp;@0 Date: Thu, 12 Dec 2019 20:21:49 +0530 Subject: [PATCH 306/751] Fixes #107 by adding executable permission https://github.com/freedomofpress/securedrop-debian-packaging/issues/107 and also updates the version. --- changelog.md | 4 ++++ securedrop-log | 0 securedrop_log/VERSION | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) mode change 100644 => 100755 securedrop-log diff --git a/changelog.md b/changelog.md index 9c18f3c15..c62e4db27 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.0.2 + + * Fixes execution permission for securedrop-log command. + ## 0.0.1 * Initial release. diff --git a/securedrop-log b/securedrop-log old mode 100644 new mode 100755 diff --git a/securedrop_log/VERSION b/securedrop_log/VERSION index 8acdd82b7..4e379d2bf 100644 --- a/securedrop_log/VERSION +++ b/securedrop_log/VERSION @@ -1 +1 @@ -0.0.1 +0.0.2 From 1ad7e7f940543fd5c5fbd4a2f1bdd8ab55eef210 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 13 Dec 2019 17:14:38 +0530 Subject: [PATCH 307/751] Typo fixes for pypi upload --- MANIFEST.in | 2 +- changelog.md | 4 ++++ securedrop_log/VERSION | 2 +- setup.py | 8 +++----- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index b5ca54051..6d11dc950 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,7 +4,7 @@ include changelog.md include build-requirements.txt include requirements.txt include securedrop_log/*.py -include securdrop_log/VERSION +include securedrop_log/VERSION include setup.py include securedrop-log include securedrop.Log diff --git a/changelog.md b/changelog.md index c62e4db27..b82e78e7a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.0.3 + + * Fixes typos MANIFEST.in and setup.py + ## 0.0.2 * Fixes execution permission for securedrop-log command. diff --git a/securedrop_log/VERSION b/securedrop_log/VERSION index 4e379d2bf..bcab45af1 100644 --- a/securedrop_log/VERSION +++ b/securedrop_log/VERSION @@ -1 +1 @@ -0.0.2 +0.0.3 diff --git a/setup.py b/setup.py index 78592406f..790b992e7 100644 --- a/setup.py +++ b/setup.py @@ -21,16 +21,14 @@ python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-log", packages=["securedrop_log",], - package_data={ - 'securedrop_log': ['VERSION'], - }, + package_data={"securedrop_log": ["VERSION"],}, classifiers=( "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Intended Audience :: Developers", - "OOperating System :: POSIX :: Linux", + "Operating System :: POSIX :: Linux", ), - data_files = [("sbin",["securedrop-log"])] + data_files=[("sbin", ["securedrop-log"])], ) From 089af705ebbb8b4645a06dc09050bf7656dd2532 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 4 Dec 2019 18:59:36 -0800 Subject: [PATCH 308/751] check if already unlocked and mounted --- securedrop_export/export.py | 61 +++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 00c4a83be..500b9cf78 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -277,25 +277,37 @@ def unlock_luks_volume(self, encryption_key): if 'UUID' in items[0]: self.encrypted_device = 'luks-' + items[1] - # the luks device is not already unlocked - if not os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): - logger.debug('Unlocking luks volume {}'.format(self.encrypted_device)) - p = subprocess.Popen( - ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) - logger.debug('Passing key') - p.communicate(input=str.encode(encryption_key, "utf-8")) - rc = p.returncode - if rc != 0: - logger.error('Bad phassphrase for {}'.format(self.encrypted_device)) - self.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) + # the luks device is already unlocked + if os.path.exists(os.path.join('/dev/mapper/', self.encrypted_device)): + logger.debug('Device already unlocked') + return + + logger.debug('Unlocking luks volume {}'.format(self.encrypted_device)) + p = subprocess.Popen( + ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + logger.debug('Passing key') + p.communicate(input=str.encode(encryption_key, "utf-8")) + rc = p.returncode + if rc != 0: + logger.error('Bad phassphrase for {}'.format(self.encrypted_device)) + self.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) except subprocess.CalledProcessError: self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) def mount_volume(self): + # If the drive is already mounted then we don't need to mount it again + output = subprocess.check_output( + ["lsblk", "-o", "MOUNTPOINT", "--noheadings", self.device]) + mountpoint = output.decode('utf-8').strip() + if mountpoint: + logger.debug('The device is already mounted') + self.mountpoint = mountpoint + return + # mount target not created, create folder if not os.path.exists(self.mountpoint): self.safe_check_call( @@ -329,16 +341,19 @@ def copy_submission(self): except (subprocess.CalledProcessError, OSError): self.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) finally: - # Finally, we sync the filesystem, unmount the drive and lock the - # luks volume, and exit 0 logger.info('Syncing filesystems') subprocess.check_call(["sync"]) - logger.info('Unmounting drive from {}'.format(self.mountpoint)) - subprocess.check_call(["sudo", "umount", self.mountpoint]) - logger.info('Locking luks volume {}'.format(self.encrypted_device)) - subprocess.check_call( - ["sudo", "cryptsetup", "luksClose", self.encrypted_device] - ) + + if os.path.exists(self.mountpoint): + logger.info('Unmounting drive from {}'.format(self.mountpoint)) + subprocess.check_call(["sudo", "umount", self.mountpoint]) + + if os.path.exists(os.path.join('/dev/mapper', self.encrypted_device)): + logger.info('Locking luks volume {}'.format(self.encrypted_device)) + subprocess.check_call( + ["sudo", "cryptsetup", "luksClose", self.encrypted_device] + ) + logger.info('Deleting temporary directory {}'.format(self.tmpdir)) subprocess.check_call(["rm", "-rf", self.tmpdir]) sys.exit(0) From 6c12a291d672db26ec29bdc0d2244ea81208fc9f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 17 Dec 2019 16:15:05 -0500 Subject: [PATCH 309/751] app: collect status/exception related functionality/classes --- securedrop_export/exceptions.py | 44 +++++++++++++++++++++++++++++++ securedrop_export/export.py | 46 +-------------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) create mode 100644 securedrop_export/exceptions.py diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py new file mode 100644 index 000000000..a3109e00f --- /dev/null +++ b/securedrop_export/exceptions.py @@ -0,0 +1,44 @@ +from enum import Enum + + +class ExportStatus(Enum): + + # General errors + ERROR_FILE_NOT_FOUND = 'ERROR_FILE_NOT_FOUND' + ERROR_EXTRACTION = 'ERROR_EXTRACTION' + ERROR_METADATA_PARSING = 'ERROR_METADATA_PARSING' + ERROR_ARCHIVE_METADATA = 'ERROR_ARCHIVE_METADATA' + ERROR_USB_CONFIGURATION = 'ERROR_USB_CONFIGURATION' + ERROR_GENERIC = 'ERROR_GENERIC' + + # USB preflight related errors + USB_CONNECTED = 'USB_CONNECTED' + USB_NOT_CONNECTED = 'USB_NOT_CONNECTED' + ERROR_USB_CHECK = 'ERROR_USB_CHECK' + + # USB Disk preflight related errors + USB_ENCRYPTED = 'USB_ENCRYPTED' + USB_ENCRYPTION_NOT_SUPPORTED = 'USB_ENCRYPTION_NOT_SUPPORTED' + USB_DISK_ERROR = 'USB_DISK_ERROR' + + # Printer preflight related errors + ERROR_PRINTER_NOT_FOUND = 'ERROR_PRINTER_NOT_FOUND' + ERROR_PRINTER_NOT_SUPPORTED = 'ERROR_PRINTER_NOT_SUPPORTED' + ERROR_PRINTER_DRIVER_UNAVAILABLE = 'ERROR_PRINTER_DRIVER_UNAVAILABLE' + ERROR_PRINTER_INSTALL = 'ERROR_PRINTER_INSTALL' + + # Disk export errors + USB_BAD_PASSPHRASE = 'USB_BAD_PASSPHRASE' + ERROR_USB_MOUNT = 'ERROR_USB_MOUNT' + ERROR_USB_WRITE = 'ERROR_USB_WRITE' + + # Printer export errors + ERROR_PRINT = 'ERROR_PRINT' + + +class TimeoutException(Exception): + pass + + +def handler(s, f): + raise TimeoutException("Timeout") diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 500b9cf78..f4e84bb98 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -13,7 +13,7 @@ import time from typing import List, Optional # noqa: F401 -from enum import Enum +from securedrop_export.exceptions import ExportStatus, handler, TimeoutException PRINTER_NAME = "sdw-printer" PRINTER_WAIT_TIMEOUT = 60 @@ -27,41 +27,6 @@ logger = logging.getLogger(__name__) -class ExportStatus(Enum): - - # General errors - ERROR_FILE_NOT_FOUND = 'ERROR_FILE_NOT_FOUND' - ERROR_EXTRACTION = 'ERROR_EXTRACTION' - ERROR_METADATA_PARSING = 'ERROR_METADATA_PARSING' - ERROR_ARCHIVE_METADATA = 'ERROR_ARCHIVE_METADATA' - ERROR_USB_CONFIGURATION = 'ERROR_USB_CONFIGURATION' - ERROR_GENERIC = 'ERROR_GENERIC' - - # USB preflight related errors - USB_CONNECTED = 'USB_CONNECTED' - USB_NOT_CONNECTED = 'USB_NOT_CONNECTED' - ERROR_USB_CHECK = 'ERROR_USB_CHECK' - - # USB Disk preflight related errors - USB_ENCRYPTED = 'USB_ENCRYPTED' - USB_ENCRYPTION_NOT_SUPPORTED = 'USB_ENCRYPTION_NOT_SUPPORTED' - USB_DISK_ERROR = 'USB_DISK_ERROR' - - # Printer preflight related errors - ERROR_PRINTER_NOT_FOUND = 'ERROR_PRINTER_NOT_FOUND' - ERROR_PRINTER_NOT_SUPPORTED = 'ERROR_PRINTER_NOT_SUPPORTED' - ERROR_PRINTER_DRIVER_UNAVAILABLE = 'ERROR_PRINTER_DRIVER_UNAVAILABLE' - ERROR_PRINTER_INSTALL = 'ERROR_PRINTER_INSTALL' - - # Disk export errors - USB_BAD_PASSPHRASE = 'USB_BAD_PASSPHRASE' - ERROR_USB_MOUNT = 'ERROR_USB_MOUNT' - ERROR_USB_WRITE = 'ERROR_USB_WRITE' - - # Printer export errors - ERROR_PRINT = 'ERROR_PRINT' - - class Metadata(object): """ Object to parse, validate and store json metadata from the sd-export archive. @@ -528,12 +493,3 @@ def print_file(self, file_to_print): command=["xpp", "-P", self.printer_name, file_to_print], error_message=ExportStatus.ERROR_PRINT.value ) - - -# class ends here -class TimeoutException(Exception): - pass - - -def handler(s, f): - raise TimeoutException("Timeout") From f07ecc8f453d52500ee30f2789bb41ca2bab6bf5 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 17 Dec 2019 18:43:07 -0500 Subject: [PATCH 310/751] app, test: create separate *Action objects --- securedrop_export/export.py | 400 ++-------------------------- securedrop_export/main.py | 56 ++-- securedrop_export/print/__init__.py | 0 securedrop_export/print/actions.py | 229 ++++++++++++++++ securedrop_export/usb/__init__.py | 0 securedrop_export/usb/actions.py | 230 ++++++++++++++++ tests/print/__init__.py | 0 tests/print/test_actions.py | 127 +++++++++ tests/test_export.py | 285 -------------------- tests/test_main.py | 3 + tests/usb/__init__.py | 0 tests/usb/test_actions.py | 203 ++++++++++++++ 12 files changed, 837 insertions(+), 696 deletions(-) create mode 100644 securedrop_export/print/__init__.py create mode 100644 securedrop_export/print/actions.py create mode 100644 securedrop_export/usb/__init__.py create mode 100644 securedrop_export/usb/actions.py create mode 100644 tests/print/__init__.py create mode 100644 tests/print/test_actions.py create mode 100644 tests/test_main.py create mode 100644 tests/usb/__init__.py create mode 100644 tests/usb/test_actions.py diff --git a/securedrop_export/export.py b/securedrop_export/export.py index f4e84bb98..976b1bd13 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -1,28 +1,17 @@ #!/usr/bin/env python3 +import abc import datetime import json import logging import os import shutil -import signal import subprocess import sys import tarfile import tempfile -import time -from typing import List, Optional # noqa: F401 -from securedrop_export.exceptions import ExportStatus, handler, TimeoutException - -PRINTER_NAME = "sdw-printer" -PRINTER_WAIT_TIMEOUT = 60 -MOUNTPOINT = "/media/usb" -ENCRYPTED_DEVICE = "encrypted_volume" -BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" -BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" -LASERJET_DRIVER = "/usr/share/cups/drv/hpcups.drv" -LASERJET_PPD = "/usr/share/cups/model/hp-laserjet_6l.ppd" +from securedrop_export.exceptions import ExportStatus logger = logging.getLogger(__name__) @@ -87,13 +76,6 @@ def is_valid(self): class SDExport(object): def __init__(self, archive, config_path): - self.device = None # Optional[str] - self.mountpoint = MOUNTPOINT - self.encrypted_device = ENCRYPTED_DEVICE - - self.printer_name = PRINTER_NAME - self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT - self.archive = archive self.submission_dirname = os.path.basename(self.archive).split(".")[0] self.target_dirname = "sd-export-{}".format( @@ -101,15 +83,13 @@ def __init__(self, archive, config_path): ) self.tmpdir = tempfile.mkdtemp() - def safe_check_call(self, command, error_message): - """ - Safely wrap subprocess.check_output to ensure we always return 0 and - log the error messages - """ + def extract_tarball(self): try: - subprocess.check_call(command) - except subprocess.CalledProcessError as ex: - self.exit_gracefully(msg=error_message, e=ex.output) + logger.info('Extracting tarball {} into {}'.format(self.archive, self.tmpdir)) + with tarfile.open(self.archive) as tar: + tar.extractall(self.tmpdir) + except Exception: + self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) def exit_gracefully(self, msg, e=False): """ @@ -135,7 +115,17 @@ def exit_gracefully(self, msg, e=False): # the file with another application sys.exit(0) - def popup_message(self, msg): + def safe_check_call(self, command, error_message): + """ + Safely wrap subprocess.check_output to ensure we always return 0 and + log the error messages + """ + try: + subprocess.check_call(command) + except subprocess.CalledProcessError as ex: + self.exit_gracefully(msg=error_message, e=ex.output) + + def popup_message(self, msg: str): self.safe_check_call( command=[ "notify-send", @@ -148,348 +138,14 @@ def popup_message(self, msg): error_message="Error sending notification:" ) - def extract_tarball(self): - try: - logger.info('Extracting tarball {} into {}'.format(self.archive, self.tmpdir)) - with tarfile.open(self.archive) as tar: - tar.extractall(self.tmpdir) - except Exception: - self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) - - def check_usb_connected(self, exit=False) -> None: - usb_devices = self._get_connected_usbs() - - if len(usb_devices) == 0: - logger.info('0 USB devices connected') - self.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) - elif len(usb_devices) == 1: - logger.info('1 USB device connected') - self.device = usb_devices[0] - if exit: - self.exit_gracefully(ExportStatus.USB_CONNECTED.value) - elif len(usb_devices) > 1: - logger.info('>1 USB devices connected') - # Return generic error until freedomofpress/securedrop-export/issues/25 - self.exit_gracefully(ExportStatus.ERROR_GENERIC.value) - - def _get_connected_usbs(self) -> List[str]: - logger.info('Performing usb preflight') - # List all block devices attached to VM that are disks and not partitions. - try: - lsblk = subprocess.Popen(["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - grep = subprocess.Popen(["grep", "disk"], stdin=lsblk.stdout, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - command_output = grep.stdout.readlines() - - # The first word in each element of the command_output list is the device name - attached_devices = [x.decode('utf8').split()[0] for x in command_output] - except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.ERROR_GENERIC.value) - - # Determine which are USBs by selecting those block devices that are removable disks. - usb_devices = [] - for device in attached_devices: - try: - removable = subprocess.check_output( - ["cat", "/sys/class/block/{}/removable".format(device)], - stderr=subprocess.PIPE) - is_removable = int(removable.decode('utf8').strip()) - except subprocess.CalledProcessError: - is_removable = False - - if is_removable: - usb_devices.append("/dev/{}".format(device)) - - return usb_devices - - def set_extracted_device_name(self): - try: - device_and_partitions = subprocess.check_output( - ["lsblk", "-o", "TYPE", "--noheadings", self.device], stderr=subprocess.PIPE) - - # we don't support multiple partitions - partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') - if partition_count > 1: - logger.debug("multiple partitions not supported") - self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) - - # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted - self.device = self.device if partition_count == 0 else self.device + '1' - except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) - - def check_luks_volume(self): - # cryptsetup isLuks returns 0 if the device is a luks volume - # subprocess with throw if the device is not luks (rc !=0) - logger.info('Checking if volume is luks-encrypted') - self.set_extracted_device_name() - logger.debug("checking if {} is luks encrypted".format(self.device)) - self.safe_check_call( - command=["sudo", "cryptsetup", "isLuks", self.device], - error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - ) - self.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) - - def unlock_luks_volume(self, encryption_key): - try: - # get the encrypted device name - self.set_extracted_device_name() - luks_header = subprocess.check_output(["sudo", "cryptsetup", "luksDump", self.device]) - luks_header_list = luks_header.decode('utf-8').split('\n') - for line in luks_header_list: - items = line.split('\t') - if 'UUID' in items[0]: - self.encrypted_device = 'luks-' + items[1] - - # the luks device is already unlocked - if os.path.exists(os.path.join('/dev/mapper/', self.encrypted_device)): - logger.debug('Device already unlocked') - return - - logger.debug('Unlocking luks volume {}'.format(self.encrypted_device)) - p = subprocess.Popen( - ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) - logger.debug('Passing key') - p.communicate(input=str.encode(encryption_key, "utf-8")) - rc = p.returncode - if rc != 0: - logger.error('Bad phassphrase for {}'.format(self.encrypted_device)) - self.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) - except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) - - def mount_volume(self): - # If the drive is already mounted then we don't need to mount it again - output = subprocess.check_output( - ["lsblk", "-o", "MOUNTPOINT", "--noheadings", self.device]) - mountpoint = output.decode('utf-8').strip() - if mountpoint: - logger.debug('The device is already mounted') - self.mountpoint = mountpoint - return - - # mount target not created, create folder - if not os.path.exists(self.mountpoint): - self.safe_check_call( - command=["sudo", "mkdir", self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT - ) - - mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) - logger.info('Mounting {}'.format(mapped_device_path)) - self.safe_check_call( - command=["sudo", "mount", mapped_device_path, self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT.value - ) - self.safe_check_call( - command=["sudo", "chown", "-R", "user:user", self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT.value - ) - - def copy_submission(self): - # move files to drive (overwrites files with same filename) and unmount drive - # we don't use safe_check_call here because we must lock and - # unmount the drive as part of the finally block - try: - target_path = os.path.join(self.mountpoint, self.target_dirname) - subprocess.check_call(["mkdir", target_path]) - export_data = os.path.join(self.tmpdir, "export_data/") - logger.info('Copying file to {}'.format(self.target_dirname)) - subprocess.check_call(["cp", "-r", export_data, target_path]) - logger.info('File copied successfully to {}'.format(self.target_dirname)) - self.popup_message("Files exported successfully to disk.") - except (subprocess.CalledProcessError, OSError): - self.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) - finally: - logger.info('Syncing filesystems') - subprocess.check_call(["sync"]) - - if os.path.exists(self.mountpoint): - logger.info('Unmounting drive from {}'.format(self.mountpoint)) - subprocess.check_call(["sudo", "umount", self.mountpoint]) - if os.path.exists(os.path.join('/dev/mapper', self.encrypted_device)): - logger.info('Locking luks volume {}'.format(self.encrypted_device)) - subprocess.check_call( - ["sudo", "cryptsetup", "luksClose", self.encrypted_device] - ) - - logger.info('Deleting temporary directory {}'.format(self.tmpdir)) - subprocess.check_call(["rm", "-rf", self.tmpdir]) - sys.exit(0) - - def wait_for_print(self): - # use lpstat to ensure the job was fully transfered to the printer - # returns True if print was successful, otherwise will throw exceptions - signal.signal(signal.SIGALRM, handler) - signal.alarm(self.printer_wait_timeout) - printer_idle_string = "printer {} is idle".format(self.printer_name) - while True: - try: - logger.info('Running lpstat waiting for printer {}'.format(self.printer_name)) - output = subprocess.check_output(["lpstat", "-p", self.printer_name]) - if printer_idle_string in output.decode("utf-8"): - logger.info('Print completed') - return True - else: - time.sleep(5) - except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.ERROR_PRINT.value) - except TimeoutException: - logger.error('Timeout waiting for printer {}'.format(self.printer_name)) - self.exit_gracefully(ExportStatus.ERROR_PRINT.value) - return True - - def get_printer_uri(self): - # Get the URI via lpinfo and only accept URIs of supported printers - printer_uri = "" - try: - output = subprocess.check_output(["sudo", "lpinfo", "-v"]) - except subprocess.CalledProcessError: - self.exit_gracefully(ExportStatus.ERROR_PRINTER_URI.value) - - # fetch the usb printer uri - for line in output.split(): - if "usb://" in line.decode("utf-8"): - printer_uri = line.decode("utf-8") - logger.info('lpinfo usb printer: {}'.format(printer_uri)) - - # verify that the printer is supported, else exit - if printer_uri == "": - # No usb printer is connected - logger.info('No usb printers connected') - self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) - elif not any(x in printer_uri for x in ("Brother", "LaserJet")): - # printer url is a make that is unsupported - logger.info('Printer {} is unsupported'.format(printer_uri)) - self.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) - - logger.info('Printer {} is supported'.format(printer_uri)) - return printer_uri - - def install_printer_ppd(self, uri): - if not any(x in uri for x in ("Brother", "LaserJet")): - logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) - self.exit_gracefully(msg=ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) - return - - if "Brother" in uri: - printer_driver = BRLASER_DRIVER - printer_ppd = BRLASER_PPD - elif "LaserJet" in uri: - printer_driver = LASERJET_DRIVER - printer_ppd = LASERJET_PPD - - # Some drivers don't come with ppd files pre-compiled, we must compile them - self.safe_check_call( - command=[ - "sudo", - "ppdc", - printer_driver, - "-d", - "/usr/share/cups/model/", - ], - error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value - ) - return printer_ppd - - def setup_printer(self, printer_uri, printer_ppd): - # Add the printer using lpadmin - logger.info('Setting up printer name {}'.format(self.printer_name)) - self.safe_check_call( - command=[ - "sudo", - "lpadmin", - "-p", - self.printer_name, - "-v", - printer_uri, - "-P", - printer_ppd, - ], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) - # Activate the printer so that it can receive jobs - logger.info('Activating printer {}'.format(self.printer_name)) - self.safe_check_call( - command=["sudo", "lpadmin", "-p", self.printer_name], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) - # worksaround for version of lpadmin/cups in debian buster: - # see https://forums.developer.apple.com/thread/106112 - self.safe_check_call( - command=["sudo", "cupsaccept", self.printer_name], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) - # A non-zero return code is expected here, but the command is required - # and works as expected. - command = ["sudo", "cupsenable", self.printer_name] - try: - subprocess.check_call(command) - except subprocess.CalledProcessError: - pass - - # Allow user to print (without using sudo) - logger.info('Allow user to print {}'.format(self.printer_name)) - self.safe_check_call( - command=["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) - - def print_test_page(self): - logger.info('Printing test page') - self.print_file("/usr/share/cups/data/testprint") - self.popup_message("Printing test page") - - def print_all_files(self): - files_path = os.path.join(self.tmpdir, "export_data/") - files = os.listdir(files_path) - print_count = 0 - for f in files: - file_path = os.path.join(files_path, f) - self.print_file(file_path) - print_count += 1 - msg = "Printing document {} of {}".format(print_count, len(files)) - self.popup_message(msg) - - def is_open_office_file(self, filename): - OPEN_OFFICE_FORMATS = [ - ".doc", - ".docx", - ".xls", - ".xlsx", - ".ppt", - ".pptx", - ".odt", - ".ods", - ".odp", - ] - for extension in OPEN_OFFICE_FORMATS: - if os.path.basename(filename).endswith(extension): - return True - return False - - def print_file(self, file_to_print): - # If the file to print is an (open)office document, we need to call unoconf to - # convert the file to pdf as printer drivers do not support this format - if self.is_open_office_file(file_to_print): - logger.info('Converting Office document to pdf') - folder = os.path.dirname(file_to_print) - converted_filename = file_to_print + ".pdf" - converted_path = os.path.join(folder, converted_filename) - self.safe_check_call( - command=["unoconv", "-o", converted_path, file_to_print], - error_message=ExportStatus.ERROR_PRINT.value - ) - file_to_print = converted_path +class ExportAction(abc.ABC): + """ + This export interface defines the method that export + methods should implement. + """ - logger.info('Sending file to printer {}:{}'.format(self.printer_name, file_to_print)) - self.safe_check_call( - command=["xpp", "-P", self.printer_name, file_to_print], - error_message=ExportStatus.ERROR_PRINT.value - ) + @abc.abstractmethod + def run(self) -> None: + """Run logic""" + pass diff --git a/securedrop_export/main.py b/securedrop_export/main.py index d3b5a0bef..0696af7a8 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,7 +1,9 @@ import logging from securedrop_export import export -from securedrop_export.export import ExportStatus +from securedrop_export.exceptions import ExportStatus +from securedrop_export.print.actions import PrintExportAction, PrintTestPageAction +from securedrop_export.usb.actions import USBDiskTestAction, USBExportAction, USBTestAction logger = logging.getLogger(__name__) @@ -14,42 +16,18 @@ def __main__(submission): except Exception: submission.exit_gracefully(ExportStatus.ERROR_METADATA_PARSING.value) - if submission.archive_metadata.is_valid(): - if submission.archive_metadata.export_method == "usb-test": - logger.info('Export archive is usb-test') - submission.check_usb_connected(exit=True) - elif submission.archive_metadata.export_method == "disk": - logger.info('Export archive is disk') - # check_usb_connected looks for the drive, sets the drive to use - submission.check_usb_connected() - logger.info('Unlocking volume') - # exports all documents in the archive to luks-encrypted volume - submission.unlock_luks_volume(submission.archive_metadata.encryption_key) - logger.info('Mounting volume') - submission.mount_volume() - logger.info('Copying submission to drive') - submission.copy_submission() - elif submission.archive_metadata.export_method == "disk-test": - logger.info('Export archive is disk-test') - # check_usb_connected looks for the drive, sets the drive to use - submission.check_usb_connected() - submission.check_luks_volume() - elif submission.archive_metadata.export_method == "printer": - logger.info('Export archive is printer') - # prints all documents in the archive - logger.info('Searching for printer') - printer_uri = submission.get_printer_uri() - logger.info('Installing printer drivers') - printer_ppd = submission.install_printer_ppd(printer_uri) - logger.info('Setting up printer') - submission.setup_printer(printer_uri, printer_ppd) - logger.info('Printing files') - submission.print_all_files() - elif submission.archive_metadata.export_method == "printer-test": - # Prints a test page to ensure the printer is functional - printer_uri = submission.get_printer_uri() - printer_ppd = submission.install_printer_ppd(printer_uri) - submission.setup_printer(printer_uri, printer_ppd) - submission.print_test_page() - else: + if not submission.archive_metadata.is_valid(): submission.exit_gracefully(ExportStatus.ERROR_ARCHIVE_METADATA.value) + + if submission.archive_metadata.export_method == "usb-test": + action = USBTestAction(submission) + elif submission.archive_metadata.export_method == "disk": + action = USBExportAction(submission) + elif submission.archive_metadata.export_method == "disk-test": + action = USBDiskTestAction(submission) + elif submission.archive_metadata.export_method == "printer": + action = PrintExportAction(submission) + elif submission.archive_metadata.export_method == "printer-test": + action = PrintTestPageAction(submission) + + action.run() diff --git a/securedrop_export/print/__init__.py b/securedrop_export/print/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py new file mode 100644 index 000000000..f58ff4cd0 --- /dev/null +++ b/securedrop_export/print/actions.py @@ -0,0 +1,229 @@ +import logging +import os +import signal +import subprocess +import time + +from securedrop_export.exceptions import ExportStatus, handler, TimeoutException +from securedrop_export.export import ExportAction + + +PRINTER_NAME = "sdw-printer" +PRINTER_WAIT_TIMEOUT = 60 +BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" +BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" +LASERJET_DRIVER = "/usr/share/cups/drv/hpcups.drv" +LASERJET_PPD = "/usr/share/cups/model/hp-laserjet_6l.ppd" + +logger = logging.getLogger(__name__) + + +class PrintAction(ExportAction): + def __init__(self, submission): + self.submission = submission + self.printer_name = PRINTER_NAME + self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT + + def run(self) -> None: + """Run logic""" + raise NotImplementedError + + def wait_for_print(self): + # use lpstat to ensure the job was fully transfered to the printer + # returns True if print was successful, otherwise will throw exceptions + signal.signal(signal.SIGALRM, handler) + signal.alarm(self.printer_wait_timeout) + printer_idle_string = "printer {} is idle".format(self.printer_name) + while True: + try: + logger.info('Running lpstat waiting for printer {}'.format(self.printer_name)) + output = subprocess.check_output(["lpstat", "-p", self.printer_name]) + if printer_idle_string in output.decode("utf-8"): + logger.info('Print completed') + return True + else: + time.sleep(5) + except subprocess.CalledProcessError: + self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) + except TimeoutException: + logger.error('Timeout waiting for printer {}'.format(self.printer_name)) + self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) + return True + + def get_printer_uri(self): + # Get the URI via lpinfo and only accept URIs of supported printers + printer_uri = "" + try: + output = subprocess.check_output(["sudo", "lpinfo", "-v"]) + except subprocess.CalledProcessError: + self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_URI.value) + + # fetch the usb printer uri + for line in output.split(): + if "usb://" in line.decode("utf-8"): + printer_uri = line.decode("utf-8") + logger.info('lpinfo usb printer: {}'.format(printer_uri)) + + # verify that the printer is supported, else exit + if printer_uri == "": + # No usb printer is connected + logger.info('No usb printers connected') + self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) + elif not any(x in printer_uri for x in ("Brother", "LaserJet")): + # printer url is a make that is unsupported + logger.info('Printer {} is unsupported'.format(printer_uri)) + self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + + logger.info('Printer {} is supported'.format(printer_uri)) + return printer_uri + + def install_printer_ppd(self, uri): + if not any(x in uri for x in ("Brother", "LaserJet")): + logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) + self.submission.exit_gracefully(msg=ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + return + + if "Brother" in uri: + printer_driver = BRLASER_DRIVER + printer_ppd = BRLASER_PPD + elif "LaserJet" in uri: + printer_driver = LASERJET_DRIVER + printer_ppd = LASERJET_PPD + + # Some drivers don't come with ppd files pre-compiled, we must compile them + self.submission.safe_check_call( + command=[ + "sudo", + "ppdc", + printer_driver, + "-d", + "/usr/share/cups/model/", + ], + error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value + ) + return printer_ppd + + def setup_printer(self, printer_uri, printer_ppd): + # Add the printer using lpadmin + logger.info('Setting up printer name {}'.format(self.printer_name)) + self.submission.safe_check_call( + command=[ + "sudo", + "lpadmin", + "-p", + self.printer_name, + "-v", + printer_uri, + "-P", + printer_ppd, + ], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + # Activate the printer so that it can receive jobs + logger.info('Activating printer {}'.format(self.printer_name)) + self.submission.safe_check_call( + command=["sudo", "lpadmin", "-p", self.printer_name], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + # worksaround for version of lpadmin/cups in debian buster: + # see https://forums.developer.apple.com/thread/106112 + self.submission.safe_check_call( + command=["sudo", "cupsaccept", self.printer_name], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + # A non-zero return code is expected here, but the command is required + # and works as expected. + command = ["sudo", "cupsenable", self.printer_name] + try: + subprocess.check_call(command) + except subprocess.CalledProcessError: + pass + + # Allow user to print (without using sudo) + logger.info('Allow user to print {}'.format(self.printer_name)) + self.submission.safe_check_call( + command=["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"], + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + ) + + def print_test_page(self): + logger.info('Printing test page') + self.print_file("/usr/share/cups/data/testprint") + self.submission.popup_message("Printing test page") + + def print_all_files(self): + files_path = os.path.join(self.submission.tmpdir, "export_data/") + files = os.listdir(files_path) + print_count = 0 + for f in files: + file_path = os.path.join(files_path, f) + self.print_file(file_path) + print_count += 1 + msg = "Printing document {} of {}".format(print_count, len(files)) + self.submission.popup_message(msg) + + def is_open_office_file(self, filename): + OPEN_OFFICE_FORMATS = [ + ".doc", + ".docx", + ".xls", + ".xlsx", + ".ppt", + ".pptx", + ".odt", + ".ods", + ".odp", + ] + for extension in OPEN_OFFICE_FORMATS: + if os.path.basename(filename).endswith(extension): + return True + return False + + def print_file(self, file_to_print): + # If the file to print is an (open)office document, we need to call unoconf to + # convert the file to pdf as printer drivers do not support this format + if self.is_open_office_file(file_to_print): + logger.info('Converting Office document to pdf') + folder = os.path.dirname(file_to_print) + converted_filename = file_to_print + ".pdf" + converted_path = os.path.join(folder, converted_filename) + self.submission.safe_check_call( + command=["unoconv", "-o", converted_path, file_to_print], + error_message=ExportStatus.ERROR_PRINT.value + ) + file_to_print = converted_path + + logger.info('Sending file to printer {}:{}'.format(self.printer_name, file_to_print)) + self.submission.safe_check_call( + command=["xpp", "-P", self.printer_name, file_to_print], + error_message=ExportStatus.ERROR_PRINT.value + ) + + +class PrintExportAction(PrintAction): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + logger.info('Export archive is printer') + # prints all documents in the archive + logger.info('Searching for printer') + printer_uri = self.get_printer_uri() + logger.info('Installing printer drivers') + printer_ppd = self.install_printer_ppd(printer_uri) + logger.info('Setting up printer') + self.setup_printer(printer_uri, printer_ppd) + logger.info('Printing files') + self.print_all_files() + + +class PrintTestPageAction(PrintAction): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + # Prints a test page to ensure the printer is functional + printer_uri = self.get_printer_uri() + printer_ppd = self.install_printer_ppd(printer_uri) + self.setup_printer(printer_uri, printer_ppd) + self.print_test_page() diff --git a/securedrop_export/usb/__init__.py b/securedrop_export/usb/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/securedrop_export/usb/actions.py b/securedrop_export/usb/actions.py new file mode 100644 index 000000000..c2479e895 --- /dev/null +++ b/securedrop_export/usb/actions.py @@ -0,0 +1,230 @@ +import logging +import os +import subprocess +import sys + +from typing import List + +from securedrop_export.export import ExportAction +from securedrop_export.exceptions import ExportStatus + +MOUNTPOINT = "/media/usb" +ENCRYPTED_DEVICE = "encrypted_volume" + +logger = logging.getLogger(__name__) + + +class USBAction(ExportAction): + def __init__(self, submission): + self.submission = submission + self.device = None # Optional[str] + self.mountpoint = MOUNTPOINT + self.encrypted_device = ENCRYPTED_DEVICE + + def run(self) -> None: + """Run logic""" + raise NotImplementedError + + def check_usb_connected(self, exit=False) -> None: + usb_devices = self._get_connected_usbs() + + if len(usb_devices) == 0: + logger.info('0 USB devices connected') + self.submission.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) + elif len(usb_devices) == 1: + logger.info('1 USB device connected') + self.device = usb_devices[0] + if exit: + self.submission.exit_gracefully(ExportStatus.USB_CONNECTED.value) + elif len(usb_devices) > 1: + logger.info('>1 USB devices connected') + # Return generic error until freedomofpress/securedrop-export/issues/25 + self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) + + def _get_connected_usbs(self) -> List[str]: + logger.info('Performing usb preflight') + # List all block devices attached to VM that are disks and not partitions. + try: + lsblk = subprocess.Popen(["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + grep = subprocess.Popen(["grep", "disk"], stdin=lsblk.stdout, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + command_output = grep.stdout.readlines() + + # The first word in each element of the command_output list is the device name + attached_devices = [x.decode('utf8').split()[0] for x in command_output] + except subprocess.CalledProcessError: + self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) + + # Determine which are USBs by selecting those block devices that are removable disks. + usb_devices = [] + for device in attached_devices: + try: + removable = subprocess.check_output( + ["cat", "/sys/class/block/{}/removable".format(device)], + stderr=subprocess.PIPE) + is_removable = int(removable.decode('utf8').strip()) + except subprocess.CalledProcessError: + is_removable = False + + if is_removable: + usb_devices.append("/dev/{}".format(device)) + + return usb_devices + + def set_extracted_device_name(self): + try: + device_and_partitions = subprocess.check_output( + ["lsblk", "-o", "TYPE", "--noheadings", self.device], stderr=subprocess.PIPE) + + # we don't support multiple partitions + partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') + if partition_count > 1: + logger.debug("multiple partitions not supported") + self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) + + # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted + self.device = self.device if partition_count == 0 else self.device + '1' + except subprocess.CalledProcessError: + self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) + + def check_luks_volume(self): + # cryptsetup isLuks returns 0 if the device is a luks volume + # subprocess with throw if the device is not luks (rc !=0) + logger.info('Checking if volume is luks-encrypted') + self.set_extracted_device_name() + logger.debug("checking if {} is luks encrypted".format(self.device)) + self.submission.safe_check_call( + command=["sudo", "cryptsetup", "isLuks", self.device], + error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + ) + self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) + + def unlock_luks_volume(self, encryption_key): + try: + # get the encrypted device name + self.set_extracted_device_name() + luks_header = subprocess.check_output(["sudo", "cryptsetup", "luksDump", self.device]) + luks_header_list = luks_header.decode('utf-8').split('\n') + for line in luks_header_list: + items = line.split('\t') + if 'UUID' in items[0]: + self.encrypted_device = 'luks-' + items[1] + + # the luks device is already unlocked + if os.path.exists(os.path.join('/dev/mapper/', self.encrypted_device)): + logger.debug('Device already unlocked') + return + + logger.debug('Unlocking luks volume {}'.format(self.encrypted_device)) + p = subprocess.Popen( + ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + logger.debug('Passing key') + p.communicate(input=str.encode(encryption_key, "utf-8")) + rc = p.returncode + if rc != 0: + logger.error('Bad phassphrase for {}'.format(self.encrypted_device)) + self.submission.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) + except subprocess.CalledProcessError: + self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) + + def mount_volume(self): + # If the drive is already mounted then we don't need to mount it again + output = subprocess.check_output( + ["lsblk", "-o", "MOUNTPOINT", "--noheadings", self.device]) + mountpoint = output.decode('utf-8').strip() + if mountpoint: + logger.debug('The device is already mounted') + self.mountpoint = mountpoint + return + + # mount target not created, create folder + if not os.path.exists(self.mountpoint): + self.submission.safe_check_call( + command=["sudo", "mkdir", self.mountpoint], + error_message=ExportStatus.ERROR_USB_MOUNT + ) + + mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) + logger.info('Mounting {}'.format(mapped_device_path)) + self.submission.safe_check_call( + command=["sudo", "mount", mapped_device_path, self.mountpoint], + error_message=ExportStatus.ERROR_USB_MOUNT.value + ) + self.submission.safe_check_call( + command=["sudo", "chown", "-R", "user:user", self.mountpoint], + error_message=ExportStatus.ERROR_USB_MOUNT.value + ) + + def copy_submission(self): + # move files to drive (overwrites files with same filename) and unmount drive + # we don't use safe_check_call here because we must lock and + # unmount the drive as part of the finally block + try: + target_path = os.path.join(self.mountpoint, self.submission.target_dirname) + subprocess.check_call(["mkdir", target_path]) + export_data = os.path.join(self.submission.tmpdir, "export_data/") + logger.info('Copying file to {}'.format(self.submission.target_dirname)) + subprocess.check_call(["cp", "-r", export_data, target_path]) + logger.info('File copied successfully to {}'.format(self.submission.target_dirname)) + self.submission.popup_message("Files exported successfully to disk.") + except (subprocess.CalledProcessError, OSError): + self.submission.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) + finally: + logger.info('Syncing filesystems') + subprocess.check_call(["sync"]) + + if os.path.exists(self.mountpoint): + logger.info('Unmounting drive from {}'.format(self.mountpoint)) + subprocess.check_call(["sudo", "umount", self.mountpoint]) + + if os.path.exists(os.path.join('/dev/mapper', self.encrypted_device)): + logger.info('Locking luks volume {}'.format(self.encrypted_device)) + subprocess.check_call( + ["sudo", "cryptsetup", "luksClose", self.encrypted_device] + ) + + logger.info('Deleting temporary directory {}'.format(self.submission.tmpdir)) + subprocess.check_call(["rm", "-rf", self.submission.tmpdir]) + sys.exit(0) + + +class USBTestAction(USBAction): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + logger.info('Export archive is usb-test') + self.check_usb_connected(exit=True) + + +class USBDiskTestAction(USBAction): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + logger.info('Export archive is disk-test') + # check_usb_connected looks for the drive, sets the drive to use + self.check_usb_connected() + self.check_luks_volume() + + +class USBExportAction(USBAction): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + logger.info('Export archive is disk') + # check_usb_connected looks for the drive, sets the drive to use + self.check_usb_connected() + logger.info('Unlocking volume') + # exports all documents in the archive to luks-encrypted volume + self.unlock_luks_volume(self.submission.archive_metadata.encryption_key) + logger.info('Mounting volume') + self.mount_volume() + logger.info('Copying submission to drive') + self.copy_submission() diff --git a/tests/print/__init__.py b/tests/print/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/print/test_actions.py b/tests/print/test_actions.py new file mode 100644 index 000000000..c500e8f01 --- /dev/null +++ b/tests/print/test_actions.py @@ -0,0 +1,127 @@ +from unittest import mock + +import os +import pytest +from subprocess import CalledProcessError +import sys + +from securedrop_export import export +from securedrop_export.print.actions import PrintExportAction + + +SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa +SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa +SAMPLE_OUTPUT_LASERJET_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000\nnetwork lpd" # noqa +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) +def test_get_good_printer_uri_laserjet(mocked_call): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + + result = action.get_printer_uri() + + assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) +def test_get_good_printer_uri_brother(mocked_call): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + + result = action.get_printer_uri() + assert result == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) +def test_get_bad_printer_uri(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + expected_message = "ERROR_PRINTER_NOT_FOUND" + assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message + mocked_exit = mocker.patch.object(submission, "exit_gracefully", + side_effect=lambda x: sys.exit(0)) + + with pytest.raises(SystemExit): + action.get_printer_uri() + + mocked_exit.assert_called_once_with(expected_message) + + +@pytest.mark.parametrize('open_office_paths', [ + "/tmp/whatver/thisisadoc.doc" + "/home/user/Downloads/thisisadoc.xlsx" + "/home/user/Downloads/file.odt" + "/tmp/tmpJf83j9/secret.pptx" +]) +def test_is_open_office_file(capsys, open_office_paths): + submission = export.SDExport("", TEST_CONFIG) + action = PrintExportAction(submission) + assert action.is_open_office_file(open_office_paths) + + +@pytest.mark.parametrize('open_office_paths', [ + "/tmp/whatver/thisisadoc.doccc" + "/home/user/Downloads/thisisa.xlsx.zip" + "/home/user/Downloads/file.odz" + "/tmp/tmpJf83j9/secret.gpg" +]) +def test_is_not_open_office_file(capsys, open_office_paths): + submission = export.SDExport("", TEST_CONFIG) + action = PrintExportAction(submission) + assert not action.is_open_office_file(open_office_paths) + + +@mock.patch("subprocess.check_call") +def test_install_printer_ppd_laserjet(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + ppd = action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") + assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" + + +@mock.patch("subprocess.check_call") +def test_install_printer_ppd_brother(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + ppd = action.install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") + assert ppd == "/usr/share/cups/model/br7030.ppd" + + +def test_install_printer_ppd_error_no_driver(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") + + assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" + assert mocked_exit.mock_calls[0][2]['e'] is None + + +def test_install_printer_ppd_error_not_supported(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + action.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") + + assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_NOT_SUPPORTED" + + +def test_setup_printer_error(mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = PrintExportAction(submission) + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + action.setup_printer( + "usb://Brother/HL-L2320D%20series?serial=A00000A000000", + "/usr/share/cups/model/br7030.ppd" + ) + + assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_INSTALL" + assert mocked_exit.mock_calls[0][2]['e'] is None diff --git a/tests/test_export.py b/tests/test_export.py index 9579d4327..95665761f 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -3,20 +3,10 @@ import os import pytest import subprocess # noqa: F401 -import sys import tempfile -from subprocess import CalledProcessError from securedrop_export import export -SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa -SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa -SAMPLE_OUTPUT_LASERJET_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000\nnetwork lpd" # noqa - -SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa -SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa -SAMPLE_OUTPUT_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa -SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") @@ -140,232 +130,6 @@ def test_popup_message(mocked_call): ]) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) -def test_get_good_printer_uri_laserjet(mocked_call): - submission = export.SDExport("testfile", TEST_CONFIG) - - result = submission.get_printer_uri() - - assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) -def test_get_good_printer_uri_brother(mocked_call): - submission = export.SDExport("testfile", TEST_CONFIG) - result = submission.get_printer_uri() - assert result == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) -def test_get_bad_printer_uri(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "ERROR_PRINTER_NOT_FOUND" - assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", - side_effect=lambda x: sys.exit(0)) - - with pytest.raises(SystemExit): - submission.get_printer_uri() - - mocked_exit.assert_called_once_with(expected_message) - - -@pytest.mark.parametrize('open_office_paths', [ - "/tmp/whatver/thisisadoc.doc" - "/home/user/Downloads/thisisadoc.xlsx" - "/home/user/Downloads/file.odt" - "/tmp/tmpJf83j9/secret.pptx" -]) -def test_is_open_office_file(capsys, open_office_paths): - submission = export.SDExport("", TEST_CONFIG) - assert submission.is_open_office_file(open_office_paths) - - -@pytest.mark.parametrize('open_office_paths', [ - "/tmp/whatver/thisisadoc.doccc" - "/home/user/Downloads/thisisa.xlsx.zip" - "/home/user/Downloads/file.odz" - "/tmp/tmpJf83j9/secret.gpg" -]) -def test_is_not_open_office_file(capsys, open_office_paths): - submission = export.SDExport("", TEST_CONFIG) - assert not submission.is_open_office_file(open_office_paths) - - -def test_usb_precheck_disconnected(capsys, mocker): - """Tests the scenario where there are disks connected, but none of them are USB""" - submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = "USB_NOT_CONNECTED" - assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message - - # Popen call returns lsblk output - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=[b"sda disk\n", b"sdb disk\n"]) - mocker.patch("subprocess.Popen", return_value=command_output) - - # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=[b'0\n', b'0\n']) - - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - mocker.patch("subprocess.check_output", - side_effect=CalledProcessError(1, 'check_output')) - - submission.check_usb_connected(exit=True) - - mocked_exit.assert_called_once_with(expected_message) - assert submission.device is None - - -def test_usb_precheck_connected(capsys, mocker): - """Tests the scenario where there is one USB connected""" - submission = export.SDExport("testfile", TEST_CONFIG) - - # Popen call returns lsblk output - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n"]) - mocker.patch("subprocess.Popen", return_value=command_output) - - # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=b"1\n") - - expected_message = "USB_CONNECTED" - assert export.ExportStatus.USB_CONNECTED.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - submission.check_usb_connected(exit=True) - - mocked_exit.assert_called_once_with(expected_message) - assert submission.device == "/dev/sdb" - - -def test_usb_precheck_multiple_devices_connected(capsys, mocker): - """Tests the scenario where there are multiple USB drives connected""" - submission = export.SDExport("testfile", TEST_CONFIG) - - # Popen call returns lsblk output - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n", b"sdc disk\n"]) - mocker.patch("subprocess.Popen", return_value=command_output) - - # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=b"1\n") - - expected_message = "ERROR_GENERIC" - assert export.ExportStatus.ERROR_GENERIC.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - submission.check_usb_connected(exit=True) - - mocked_exit.assert_called_once_with(expected_message) - assert submission.device is None - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) -def test_extract_device_name_no_part(mocked_call, capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.device = "/dev/sda" - - submission.set_extracted_device_name() - - assert submission.device == "/dev/sda" - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_extract_device_name_single_part(mocked_call, capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.device = "/dev/sda" - - submission.set_extracted_device_name() - - assert submission.device == "/dev/sda1" - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.device = "/dev/sda" - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - - submission.set_extracted_device_name() - - mocked_exit.assert_called_once_with(expected_message) - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) -@mock.patch("subprocess.check_call", return_value=0) -def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - expected_message = export.ExportStatus.USB_ENCRYPTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - submission.check_luks_volume() - - mocked_exit.assert_called_once_with(expected_message) - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -@mock.patch("subprocess.check_call", return_value=0) -def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.device = "/dev/sda" - expected_message = export.ExportStatus.USB_ENCRYPTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - submission.check_luks_volume() - - mocked_exit.assert_called_once_with(expected_message) - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.device = "/dev/sda" - expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - - # Here we need to mock the exit_gracefully method with a side effect otherwise - # program execution will continue after exit_gracefully and exit_gracefully - # may be called a second time. - mocked_exit = mocker.patch.object(submission, "exit_gracefully", - side_effect=lambda x: sys.exit(0)) - - # Output of `lsblk -o TYPE --noheadings DEVICE_NAME` when a drive has multiple - # partitions - multi_partition_lsblk_output = b"disk\npart\npart\n" - mocker.patch("subprocess.check_call", return_value=0) - mocker.patch("subprocess.check_output", return_value=multi_partition_lsblk_output) - - with pytest.raises(SystemExit): - submission.check_luks_volume() - - mocked_exit.assert_called_once_with(expected_message) - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.device = "/dev/sda" - expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" - assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - - mocked_exit = mocker.patch.object(submission, "exit_gracefully", - side_effect=lambda msg, e: sys.exit(0)) - - single_partition_lsblk_output = b"disk\npart\n" - mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) - - with pytest.raises(SystemExit): - submission.check_luks_volume() - - assert mocked_exit.mock_calls[0][2]['msg'] == expected_message - assert mocked_exit.mock_calls[0][2]['e'] is None - - def test_safe_check_call(capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) submission.safe_check_call(['ls'], "this will work") @@ -376,52 +140,3 @@ def test_safe_check_call(capsys, mocker): assert mocked_exit.mock_calls[0][2]['msg'] == expected_message assert mocked_exit.mock_calls[0][2]['e'] is None - - -@mock.patch("subprocess.check_call") -def test_install_printer_ppd_laserjet(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - ppd = submission.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") - assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" - - -@mock.patch("subprocess.check_call") -def test_install_printer_ppd_brother(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - ppd = submission.install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") - assert ppd == "/usr/share/cups/model/br7030.ppd" - - -def test_install_printer_ppd_error_no_driver(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) - - submission.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") - - assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" - assert mocked_exit.mock_calls[0][2]['e'] is None - - -def test_install_printer_ppd_error_not_supported(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) - - submission.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") - - assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_NOT_SUPPORTED" - - -def test_setup_printer_error(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) - - submission.setup_printer( - "usb://Brother/HL-L2320D%20series?serial=A00000A000000", - "/usr/share/cups/model/br7030.ppd" - ) - - assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_INSTALL" - assert mocked_exit.mock_calls[0][2]['e'] is None diff --git a/tests/test_main.py b/tests/test_main.py new file mode 100644 index 000000000..d1e43d251 --- /dev/null +++ b/tests/test_main.py @@ -0,0 +1,3 @@ +from securedrop_export.main import __main__ # noqa: F401 +# This import ensures at least the imports in main.__main__ +# are executed during a test run diff --git a/tests/usb/__init__.py b/tests/usb/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/usb/test_actions.py b/tests/usb/test_actions.py new file mode 100644 index 000000000..011b9386b --- /dev/null +++ b/tests/usb/test_actions.py @@ -0,0 +1,203 @@ +from unittest import mock + +import os +import pytest +import sys + +from subprocess import CalledProcessError + +from securedrop_export import export +from securedrop_export.usb.actions import USBExportAction, USBTestAction + +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") +SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa +SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa +SAMPLE_OUTPUT_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa +SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa + + +def test_usb_precheck_disconnected(capsys, mocker): + """Tests the scenario where there are disks connected, but none of them are USB""" + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBTestAction(submission) + expected_message = "USB_NOT_CONNECTED" + assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message + + # Popen call returns lsblk output + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=[b"sda disk\n", b"sdb disk\n"]) + mocker.patch("subprocess.Popen", return_value=command_output) + + # check_output returns removable status + mocker.patch("subprocess.check_output", return_value=[b'0\n', b'0\n']) + + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + + mocker.patch("subprocess.check_output", + side_effect=CalledProcessError(1, 'check_output')) + + action.check_usb_connected(exit=True) + + mocked_exit.assert_called_once_with(expected_message) + assert action.device is None + + +def test_usb_precheck_connected(capsys, mocker): + """Tests the scenario where there is one USB connected""" + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBTestAction(submission) + + # Popen call returns lsblk output + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n"]) + mocker.patch("subprocess.Popen", return_value=command_output) + + # check_output returns removable status + mocker.patch("subprocess.check_output", return_value=b"1\n") + + expected_message = "USB_CONNECTED" + assert export.ExportStatus.USB_CONNECTED.value == expected_message + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + + action.check_usb_connected(exit=True) + + mocked_exit.assert_called_once_with(expected_message) + assert action.device == "/dev/sdb" + + +def test_usb_precheck_multiple_devices_connected(capsys, mocker): + """Tests the scenario where there are multiple USB drives connected""" + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBTestAction(submission) + + # Popen call returns lsblk output + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n", b"sdc disk\n"]) + mocker.patch("subprocess.Popen", return_value=command_output) + + # check_output returns removable status + mocker.patch("subprocess.check_output", return_value=b"1\n") + + expected_message = "ERROR_GENERIC" + assert export.ExportStatus.ERROR_GENERIC.value == expected_message + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + + action.check_usb_connected(exit=True) + + mocked_exit.assert_called_once_with(expected_message) + assert action.device is None + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) +def test_extract_device_name_no_part(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + + action.device = "/dev/sda" + + action.set_extracted_device_name() + + assert action.device == "/dev/sda" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) +def test_extract_device_name_single_part(mocked_call, capsys): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + + action.device = "/dev/sda" + + action.set_extracted_device_name() + + assert action.device == "/dev/sda1" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) +def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + action.device = "/dev/sda" + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + + action.set_extracted_device_name() + + mocked_exit.assert_called_once_with(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) +@mock.patch("subprocess.check_call", return_value=0) +def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + + expected_message = export.ExportStatus.USB_ENCRYPTED.value + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + + action.check_luks_volume() + + mocked_exit.assert_called_once_with(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) +@mock.patch("subprocess.check_call", return_value=0) +def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + action.device = "/dev/sda" + expected_message = export.ExportStatus.USB_ENCRYPTED.value + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + + action.check_luks_volume() + + mocked_exit.assert_called_once_with(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) +def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + action.device = "/dev/sda" + expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + + # Here we need to mock the exit_gracefully method with a side effect otherwise + # program execution will continue after exit_gracefully and exit_gracefully + # may be called a second time. + mocked_exit = mocker.patch.object(submission, "exit_gracefully", + side_effect=lambda x: sys.exit(0)) + + # Output of `lsblk -o TYPE --noheadings DEVICE_NAME` when a drive has multiple + # partitions + multi_partition_lsblk_output = b"disk\npart\npart\n" + mocker.patch("subprocess.check_call", return_value=0) + mocker.patch("subprocess.check_output", return_value=multi_partition_lsblk_output) + + with pytest.raises(SystemExit): + action.check_luks_volume() + + mocked_exit.assert_called_once_with(expected_message) + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) +def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = USBExportAction(submission) + action.device = "/dev/sda" + expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" + assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + + mocked_exit = mocker.patch.object(submission, "exit_gracefully", + side_effect=lambda msg, e: sys.exit(0)) + + single_partition_lsblk_output = b"disk\npart\n" + mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) + mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + + with pytest.raises(SystemExit): + action.check_luks_volume() + + assert mocked_exit.mock_calls[0][2]['msg'] == expected_message + assert mocked_exit.mock_calls[0][2]['e'] is None From b1bb5301c9f3114a3dd40aa888962e0a41fe3aad Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 18 Dec 2019 19:10:48 -0500 Subject: [PATCH 311/751] app: rename USB*Actions to Disk*Actions this is more accurate since there are no _strict_ USB requirements in the current export code: removable block devices of other kinds can be exported to --- securedrop_export/{usb => disk}/__init__.py | 0 securedrop_export/{usb => disk}/actions.py | 8 ++++---- securedrop_export/main.py | 6 +++--- tests/{usb => disk}/__init__.py | 0 tests/{usb => disk}/test_actions.py | 22 ++++++++++----------- 5 files changed, 18 insertions(+), 18 deletions(-) rename securedrop_export/{usb => disk}/__init__.py (100%) rename securedrop_export/{usb => disk}/actions.py (98%) rename tests/{usb => disk}/__init__.py (100%) rename tests/{usb => disk}/test_actions.py (93%) diff --git a/securedrop_export/usb/__init__.py b/securedrop_export/disk/__init__.py similarity index 100% rename from securedrop_export/usb/__init__.py rename to securedrop_export/disk/__init__.py diff --git a/securedrop_export/usb/actions.py b/securedrop_export/disk/actions.py similarity index 98% rename from securedrop_export/usb/actions.py rename to securedrop_export/disk/actions.py index c2479e895..02b09f2c3 100644 --- a/securedrop_export/usb/actions.py +++ b/securedrop_export/disk/actions.py @@ -14,7 +14,7 @@ logger = logging.getLogger(__name__) -class USBAction(ExportAction): +class DiskAction(ExportAction): def __init__(self, submission): self.submission = submission self.device = None # Optional[str] @@ -193,7 +193,7 @@ def copy_submission(self): sys.exit(0) -class USBTestAction(USBAction): +class USBTestAction(DiskAction): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -202,7 +202,7 @@ def run(self): self.check_usb_connected(exit=True) -class USBDiskTestAction(USBAction): +class DiskTestAction(DiskAction): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -213,7 +213,7 @@ def run(self): self.check_luks_volume() -class USBExportAction(USBAction): +class DiskExportAction(DiskAction): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 0696af7a8..b68dce170 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -3,7 +3,7 @@ from securedrop_export import export from securedrop_export.exceptions import ExportStatus from securedrop_export.print.actions import PrintExportAction, PrintTestPageAction -from securedrop_export.usb.actions import USBDiskTestAction, USBExportAction, USBTestAction +from securedrop_export.disk.actions import DiskTestAction, DiskExportAction, USBTestAction logger = logging.getLogger(__name__) @@ -22,9 +22,9 @@ def __main__(submission): if submission.archive_metadata.export_method == "usb-test": action = USBTestAction(submission) elif submission.archive_metadata.export_method == "disk": - action = USBExportAction(submission) + action = DiskExportAction(submission) elif submission.archive_metadata.export_method == "disk-test": - action = USBDiskTestAction(submission) + action = DiskTestAction(submission) elif submission.archive_metadata.export_method == "printer": action = PrintExportAction(submission) elif submission.archive_metadata.export_method == "printer-test": diff --git a/tests/usb/__init__.py b/tests/disk/__init__.py similarity index 100% rename from tests/usb/__init__.py rename to tests/disk/__init__.py diff --git a/tests/usb/test_actions.py b/tests/disk/test_actions.py similarity index 93% rename from tests/usb/test_actions.py rename to tests/disk/test_actions.py index 011b9386b..c34998598 100644 --- a/tests/usb/test_actions.py +++ b/tests/disk/test_actions.py @@ -7,7 +7,7 @@ from subprocess import CalledProcessError from securedrop_export import export -from securedrop_export.usb.actions import USBExportAction, USBTestAction +from securedrop_export.disk.actions import DiskExportAction, DiskTestAction TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa @@ -19,7 +19,7 @@ def test_usb_precheck_disconnected(capsys, mocker): """Tests the scenario where there are disks connected, but none of them are USB""" submission = export.SDExport("testfile", TEST_CONFIG) - action = USBTestAction(submission) + action = DiskTestAction(submission) expected_message = "USB_NOT_CONNECTED" assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message @@ -46,7 +46,7 @@ def test_usb_precheck_disconnected(capsys, mocker): def test_usb_precheck_connected(capsys, mocker): """Tests the scenario where there is one USB connected""" submission = export.SDExport("testfile", TEST_CONFIG) - action = USBTestAction(submission) + action = DiskTestAction(submission) # Popen call returns lsblk output command_output = mock.MagicMock() @@ -70,7 +70,7 @@ def test_usb_precheck_connected(capsys, mocker): def test_usb_precheck_multiple_devices_connected(capsys, mocker): """Tests the scenario where there are multiple USB drives connected""" submission = export.SDExport("testfile", TEST_CONFIG) - action = USBTestAction(submission) + action = DiskTestAction(submission) # Popen call returns lsblk output command_output = mock.MagicMock() @@ -94,7 +94,7 @@ def test_usb_precheck_multiple_devices_connected(capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) def test_extract_device_name_no_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) action.device = "/dev/sda" @@ -106,7 +106,7 @@ def test_extract_device_name_no_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_extract_device_name_single_part(mocked_call, capsys): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) action.device = "/dev/sda" @@ -118,7 +118,7 @@ def test_extract_device_name_single_part(mocked_call, capsys): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) action.device = "/dev/sda" mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value @@ -132,7 +132,7 @@ def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): @mock.patch("subprocess.check_call", return_value=0) def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) @@ -146,7 +146,7 @@ def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): @mock.patch("subprocess.check_call", return_value=0) def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) action.device = "/dev/sda" expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) @@ -159,7 +159,7 @@ def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) action.device = "/dev/sda" expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value @@ -184,7 +184,7 @@ def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - action = USBExportAction(submission) + action = DiskExportAction(submission) action.device = "/dev/sda" expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value From 55e90284c19decb3ae1dcba7cc70e8c6dbce76a5 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Wed, 18 Dec 2019 19:14:45 -0500 Subject: [PATCH 312/751] app: explain the signal handler in exceptions.py --- securedrop_export/exceptions.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index a3109e00f..1c14bc684 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -40,5 +40,9 @@ class TimeoutException(Exception): pass -def handler(s, f): +def handler(signum, frame): + """ + This is a signal handler used for raising timeouts: + https://docs.python.org/3/library/signal.html#signal.signal + """ raise TimeoutException("Timeout") From bb73ceaff4edeab984e53a44e7a4c1ccdeef2a40 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Wed, 18 Dec 2019 19:57:56 -0500 Subject: [PATCH 313/751] Add quality control tools Added coverage, flake8, mypy, and a few Makefile targets for convenience. Replaced test+safety in CI with just `make check` which runs everything. --- .circleci/config.yml | 12 +----- Makefile | 40 ++++++++++++++++--- dev-requirements.in | 10 +++-- dev-requirements.txt | 95 ++++++++++++++++++++++++++++++++++++++------ requirements.txt | 2 +- setup.cfg | 9 +++++ 6 files changed, 136 insertions(+), 32 deletions(-) create mode 100644 setup.cfg diff --git a/.circleci/config.yml b/.circleci/config.yml index 73d3df004..76852d363 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,15 +7,7 @@ common-steps: virtualenv .venv source .venv/bin/activate pip install --require-hashes -r dev-requirements.txt - make test - - - &check_python_dependencies_for_vulns - run: - name: Check Python dependencies for CVEs - command: | - set -e - source .venv/bin/activate - make safety + make check - &install_packaging_dependencies run: @@ -81,7 +73,6 @@ jobs: steps: - checkout - *run_tests - - *check_python_dependencies_for_vulns test-buster: docker: @@ -89,7 +80,6 @@ jobs: steps: - checkout - *run_tests - - *check_python_dependencies_for_vulns workflows: version: 2 diff --git a/Makefile b/Makefile index 9b894c3b6..f00f0a7e1 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ # Bandit is a static code analysis tool to detect security vulnerabilities in Python applications # https://wiki.openstack.org/wiki/Security/Projects/Bandit +.PHONY: all +all: help + .PHONY: bandit bandit: ## Run bandit with medium level excluding test-related folders pip install --upgrade pip && \ - pip install --upgrade bandit!=1.6.0 && \ - bandit -ll --recursive . --exclude tests,.venv + pip install --upgrade bandit!=1.6.0 && \ + bandit -ll --recursive securedrop_proxy .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities @@ -16,16 +19,43 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities || exit 1; \ done +.PHONY: lint +lint: ## Run flake8 + @flake8 securedrop_proxy tests + +.PHONY: mypy +mypy: ## Run mypy static type checker + @mypy --ignore-missing-imports securedrop_proxy + + .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. pip-compile --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in pip-compile --generate-hashes --output-file requirements.txt requirements.in .PHONY: test -test: - python -m unittest -v +test: clean .coverage ## Runs tests with coverage + +.coverage: + @coverage run --source securedrop_proxy -m unittest + +.PHONY: browse-coverage +browse-coverage: .coverage ## Generates and opens HTML coverage report + @coverage html + @xdg-open htmlcov/index.html 2>/dev/null || open htmlcov/index.html 2>/dev/null + +.PHONY: check +check: clean lint test mypy safety bandit ## Runs all tests and code checkers + +.PHONY: clean +clean: ## Clean the workspace of generated resources + @rm -rf .mypy_cache build dist *.egg-info .coverage .eggs docs/_build .pytest_cache lib htmlcov .cache && \ + find . \( -name '*.py[co]' -o -name dropin.cache \) -delete && \ + find . \( -name '*.bak' -o -name dropin.cache \) -delete && \ + find . \( -name '*.tgz' -o -name dropin.cache \) -delete && \ + find . -name __pycache__ -print0 | xargs -0 rm -rf -# Explaination of the below shell command should it ever break. +# Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets # 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption diff --git a/dev-requirements.in b/dev-requirements.in index 4b9bd528d..9a880c48f 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -1,8 +1,12 @@ -flake8==3.5.0 +coverage==5.0 +flake8==3.6.0 +mccabe==0.6.1 multidict==4.4.2 +mypy==0.701 +mypy-extensions==0.4.1 pip-tools==3.1.0 -pycodestyle==2.3.1 -pyflakes==1.6.0 +pycodestyle==2.4.0 +pyflakes==2.0.0 six==1.11.0 vcrpy==2.0.1 wrapt==1.10.11 diff --git a/dev-requirements.txt b/dev-requirements.txt index aeb1983f6..826afb92f 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in +# pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in # certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ @@ -14,9 +14,41 @@ click==7.0 \ --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ # via pip-tools -flake8==3.5.0 \ - --hash=sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0 \ - --hash=sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37 +coverage==5.0 \ + --hash=sha256:0cd13a6e98c37b510a2d34c8281d5e1a226aaf9b65b7d770ef03c63169965351 \ + --hash=sha256:1a4b6b6a2a3a6612e6361130c2cc3dc4378d8c221752b96167ccbad94b47f3cd \ + --hash=sha256:2ee55e6dba516ddf6f484aa83ccabbb0adf45a18892204c23486938d12258cde \ + --hash=sha256:3be5338a2eb4ef03c57f20917e1d12a1fd10e3853fed060b6d6b677cb3745898 \ + --hash=sha256:44b783b02db03c4777d8cf71bae19eadc171a6f2a96777d916b2c30a1eb3d070 \ + --hash=sha256:475bf7c4252af0a56e1abba9606f1e54127cdf122063095c75ab04f6f99cf45e \ + --hash=sha256:47c81ee687eafc2f1db7f03fbe99aab81330565ebc62fb3b61edfc2216a550c8 \ + --hash=sha256:4a7f8e72b18f2aca288ff02255ce32cc830bc04d993efbc87abf6beddc9e56c0 \ + --hash=sha256:50197163a22fd17f79086e087a787883b3ec9280a509807daf158dfc2a7ded02 \ + --hash=sha256:56b13000acf891f700f5067512b804d1ec8c301d627486c678b903859d07f798 \ + --hash=sha256:79388ae29c896299b3567965dbcd93255f175c17c6c7bca38614d12718c47466 \ + --hash=sha256:79fd5d3d62238c4f583b75d48d53cdae759fe04d4fb18fe8b371d88ad2b6f8be \ + --hash=sha256:7fe3e2fde2bf1d7ce25ebcd2d3de3650b8d60d9a73ce6dcef36e20191291613d \ + --hash=sha256:81042a24f67b96e4287774014fa27220d8a4d91af1043389e4d73892efc89ac6 \ + --hash=sha256:81326f1095c53111f8afc95da281e1414185f4a538609a77ca50bdfa39a6c207 \ + --hash=sha256:8873dc0d8f42142ea9f20c27bbdc485190fff93823c6795be661703369e5877d \ + --hash=sha256:88d2cbcb0a112f47eef71eb95460b6995da18e6f8ca50c264585abc2c473154b \ + --hash=sha256:91f2491aeab9599956c45a77c5666d323efdec790bfe23fcceafcd91105d585a \ + --hash=sha256:979daa8655ae5a51e8e7a24e7d34e250ae8309fd9719490df92cbb2fe2b0422b \ + --hash=sha256:9c871b006c878a890c6e44a5b2f3c6291335324b298c904dc0402ee92ee1f0be \ + --hash=sha256:a6d092545e5af53e960465f652e00efbf5357adad177b2630d63978d85e46a72 \ + --hash=sha256:b5ed7837b923d1d71c4f587ae1539ccd96bfd6be9788f507dbe94dab5febbb5d \ + --hash=sha256:ba259f68250f16d2444cbbfaddaa0bb20e1560a4fdaad50bece25c199e6af864 \ + --hash=sha256:be1d89614c6b6c36d7578496dc8625123bda2ff44f224cf8b1c45b810ee7383f \ + --hash=sha256:c1b030a79749aa8d1f1486885040114ee56933b15ccfc90049ba266e4aa2139f \ + --hash=sha256:c95bb147fab76f2ecde332d972d8f4138b8f2daee6c466af4ff3b4f29bd4c19e \ + --hash=sha256:d52c1c2d7e856cecc05aa0526453cb14574f821b7f413cc279b9514750d795c1 \ + --hash=sha256:d609a6d564ad3d327e9509846c2c47f170456344521462b469e5cb39e48ba31c \ + --hash=sha256:e1bad043c12fb58e8c7d92b3d7f2f49977dcb80a08a6d1e7a5114a11bf819fca \ + --hash=sha256:e5a675f6829c53c87d79117a8eb656cc4a5f8918185a32fc93ba09778e90f6db \ + --hash=sha256:fec32646b98baf4a22fdceb08703965bd16dea09051fbeb31a04b5b6e72b846c +flake8==3.6.0 \ + --hash=sha256:6a35f5b8761f45c5513e3405f110a86bea57982c3b75b766ce7b65217abe1670 \ + --hash=sha256:c01f8a3963b3571a8e6bd7a4063359aff90749e160778e03817cd9b71c9e07d2 furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec @@ -25,8 +57,7 @@ idna==2.7 \ --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ - # via flake8 + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f multidict==4.4.2 \ --hash=sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b \ --hash=sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64 \ @@ -57,18 +88,33 @@ multidict==4.4.2 \ --hash=sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2 \ --hash=sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306 \ --hash=sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd +mypy-extensions==0.4.1 \ + --hash=sha256:37e0e956f41369209a3d5f34580150bcacfabaa57b33a15c0b25f4b5725e0812 \ + --hash=sha256:b16cabe759f55e3409a7d231ebd2841378fb0c27a5d1994719e340e4f429ac3e +mypy==0.701 \ + --hash=sha256:2afe51527b1f6cdc4a5f34fc90473109b22bf7f21086ba3e9451857cf11489e6 \ + --hash=sha256:56a16df3e0abb145d8accd5dbb70eba6c4bd26e2f89042b491faa78c9635d1e2 \ + --hash=sha256:5764f10d27b2e93c84f70af5778941b8f4aa1379b2430f85c827e0f5464e8714 \ + --hash=sha256:5bbc86374f04a3aa817622f98e40375ccb28c4836f36b66706cf3c6ccce86eda \ + --hash=sha256:6a9343089f6377e71e20ca734cd8e7ac25d36478a9df580efabfe9059819bf82 \ + --hash=sha256:6c9851bc4a23dc1d854d3f5dfd5f20a016f8da86bcdbb42687879bb5f86434b0 \ + --hash=sha256:b8e85956af3fcf043d6f87c91cbe8705073fc67029ba6e22d3468bfee42c4823 \ + --hash=sha256:b9a0af8fae490306bc112229000aa0c2ccc837b49d29a5c42e088c132a2334dd \ + --hash=sha256:bbf643528e2a55df2c1587008d6e3bda5c0445f1240dfa85129af22ae16d7a9a \ + --hash=sha256:c46ab3438bd21511db0f2c612d89d8344154c0c9494afc7fbc932de514cf8d15 \ + --hash=sha256:f7a83d6bd805855ef83ec605eb01ab4fa42bcef254b13631e451cbb44914a9b0 orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 pip-tools==3.1.0 \ --hash=sha256:31b43e5f8d605fc84f7506199025460abcb98a29d12cc99db268f73e39cf55e5 \ --hash=sha256:b1ceca03b4a48346b2f6870565abb09d8d257d5b1524b4c6b222185bf26c3870 -pycodestyle==2.3.1 \ - --hash=sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766 \ - --hash=sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9 -pyflakes==1.6.0 \ - --hash=sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f \ - --hash=sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805 +pycodestyle==2.4.0 \ + --hash=sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83 \ + --hash=sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a +pyflakes==2.0.0 \ + --hash=sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49 \ + --hash=sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae pyyaml==5.1 \ --hash=sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c \ --hash=sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95 \ @@ -87,6 +133,27 @@ requests==2.20.0 \ six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb +typed-ast==1.3.5 \ + --hash=sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b \ + --hash=sha256:18141c1484ab8784006c839be8b985cfc82a2e9725837b0ecfa0203f71c4e39d \ + --hash=sha256:2baf617f5bbbfe73fd8846463f5aeafc912b5ee247f410700245d68525ec584a \ + --hash=sha256:3d90063f2cbbe39177e9b4d888e45777012652d6110156845b828908c51ae462 \ + --hash=sha256:4304b2218b842d610aa1a1d87e1dc9559597969acc62ce717ee4dfeaa44d7eee \ + --hash=sha256:4983ede548ffc3541bae49a82675996497348e55bafd1554dc4e4a5d6eda541a \ + --hash=sha256:5315f4509c1476718a4825f45a203b82d7fdf2a6f5f0c8f166435975b1c9f7d4 \ + --hash=sha256:6cdfb1b49d5345f7c2b90d638822d16ba62dc82f7616e9b4caa10b72f3f16649 \ + --hash=sha256:7b325f12635598c604690efd7a0197d0b94b7d7778498e76e0710cd582fd1c7a \ + --hash=sha256:8d3b0e3b8626615826f9a626548057c5275a9733512b137984a68ba1598d3d2f \ + --hash=sha256:8f8631160c79f53081bd23446525db0bc4c5616f78d04021e6e434b286493fd7 \ + --hash=sha256:912de10965f3dc89da23936f1cc4ed60764f712e5fa603a09dd904f88c996760 \ + --hash=sha256:b010c07b975fe853c65d7bbe9d4ac62f1c69086750a574f6292597763781ba18 \ + --hash=sha256:c908c10505904c48081a5415a1e295d8403e353e0c14c42b6d67f8f97fae6616 \ + --hash=sha256:c94dd3807c0c0610f7c76f078119f4ea48235a953512752b9175f9f98f5ae2bd \ + --hash=sha256:ce65dee7594a84c466e79d7fb7d3303e7295d16a83c22c7c4037071b059e2c21 \ + --hash=sha256:eaa9cfcb221a8a4c2889be6f93da141ac777eb8819f077e1d09fb12d00a09a93 \ + --hash=sha256:f3376bc31bad66d46d44b4e6522c5c21976bf9bca4ef5987bb2bf727f4506cbb \ + --hash=sha256:f9202fa138544e13a4ec1a6792c35834250a85958fde1251b6a22e07d1260ae7 \ + # via mypy urllib3==1.24.3 \ --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb @@ -108,3 +175,7 @@ yarl==1.2.6 \ --hash=sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1 \ --hash=sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4 \ --hash=sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7 + +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. +# setuptools diff --git a/requirements.txt b/requirements.txt index 0cbecb33e..6ac4b0979 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --generate-hashes --output-file requirements.txt requirements.in +# pip-compile --generate-hashes --output-file=requirements.txt requirements.in # certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..997bc30e0 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,9 @@ +[flake8] +exclude = + .git, + __pycache__, + +max-line-length = 100 + +builtins = + _, From 105e7d446c6064ef215ba1d5905ff8808daf3009 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Wed, 18 Dec 2019 20:07:06 -0500 Subject: [PATCH 314/751] Address complaints from the new quality tools --- securedrop_proxy/callbacks.py | 13 +++++++++---- securedrop_proxy/config.py | 22 +++++++++++++++++----- securedrop_proxy/entrypoint.py | 3 --- securedrop_proxy/version.py | 7 ++++++- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/securedrop_proxy/callbacks.py b/securedrop_proxy/callbacks.py index d67bcebdb..0e890d21e 100644 --- a/securedrop_proxy/callbacks.py +++ b/securedrop_proxy/callbacks.py @@ -1,6 +1,8 @@ +import os import subprocess import sys import json +import tempfile import uuid @@ -8,6 +10,7 @@ def err_on_done(res): print(json.dumps(res.__dict__)) sys.exit(1) + # callback for handling non-JSON content. in production-like # environments, we want to call `qvm-move-to-vm` (and expressly not # `qvm-move`, since we want to include the destination VM name) to @@ -20,9 +23,11 @@ def on_save(fh, res, conf): fn = str(uuid.uuid4()) try: - subprocess.run(["cp", fh.name, "/tmp/{}".format(fn)]) - if conf.dev is not True: - subprocess.run(['qvm-move-to-vm', conf.target_vm, "/tmp/{}".format(fn)]) + with tempfile.TemporaryDirectory() as tmpdir: + tmpfile = os.path.join(os.path.abspath(tmpdir), fn) + subprocess.run(["cp", fh.name, tmpfile]) + if conf.dev is not True: + subprocess.run(["qvm-move-to-vm", conf.target_vm, tmpfile]) except Exception: res.status = 500 res.headers['Content-Type'] = 'application/json' @@ -32,7 +37,7 @@ def on_save(fh, res, conf): res.headers['Content-Type'] = 'application/json' res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.body = json.dumps({'filename': fn }) + res.body = json.dumps({'filename': fn}) def on_done(res): diff --git a/securedrop_proxy/config.py b/securedrop_proxy/config.py index 461edd5e8..d82cdb459 100644 --- a/securedrop_proxy/config.py +++ b/securedrop_proxy/config.py @@ -1,12 +1,14 @@ import os import yaml + class Conf: scheme = '' host = '' port = 0 dev = False + def read_conf(conf_path, p): if not os.path.isfile(conf_path): @@ -17,13 +19,17 @@ def read_conf(conf_path, p): fh = open(conf_path, 'r') conf_in = yaml.safe_load(fh) except yaml.YAMLError: - p.simple_error(500, 'YAML syntax error while reading configuration file {}'.format(conf_path)) + p.simple_error( + 500, "YAML syntax error while reading configuration file {}".format(conf_path) + ) p.on_done(p.res) except Exception: - p.simple_error(500, 'Error while opening or reading configuration file {}'.format(conf_path)) + p.simple_error( + 500, "Error while opening or reading configuration file {}".format(conf_path) + ) p.on_done(p.res) - req_conf_keys = set(('host','scheme','port')) + req_conf_keys = set(('host', 'scheme', 'port')) missing_keys = req_conf_keys - set(conf_in.keys()) if len(missing_keys) > 0: p.simple_error(500, 'Configuration file missing required keys: {}'.format(missing_keys)) @@ -37,8 +43,14 @@ def read_conf(conf_path, p): if 'dev' in conf_in and conf_in['dev'] is True: c.dev = True else: - if 'target_vm' not in conf_in: - p.simple_error(500, 'Configuration file missing `target_vm` key, which is required when not in development mode') + if "target_vm" not in conf_in: + p.simple_error( + 500, + ( + "Configuration file missing `target_vm` key, which is required " + "when not in development mode" + ), + ) p.on_done(p.res) c.target_vm = conf_in['target_vm'] diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index 33c84d56c..70f21a3db 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -6,12 +6,9 @@ # called with exactly one argument: the path to its config file. See # the README for configuration options. -import json import logging import os -import subprocess import sys -import uuid from logging.handlers import TimedRotatingFileHandler diff --git a/securedrop_proxy/version.py b/securedrop_proxy/version.py index 430dd11dc..0ebdbd246 100644 --- a/securedrop_proxy/version.py +++ b/securedrop_proxy/version.py @@ -1,3 +1,8 @@ import pkgutil -version = pkgutil.get_data("securedrop_proxy", "VERSION").decode("utf-8") +version = None +version_content = pkgutil.get_data("securedrop_proxy", "VERSION") +if isinstance(version_content, bytes): + version = version_content.decode("utf-8") +else: + raise ValueError("Could not read VERSION file") From 20064fcca66f0a9c4282022247b7cb1f4d91207f Mon Sep 17 00:00:00 2001 From: John Hensley Date: Mon, 16 Dec 2019 19:29:36 -0500 Subject: [PATCH 315/751] Improve error handling, tests Try to ensure the proxy always returns a valid JSON response. Add specific handling of upstream error responses to proxy.py, and add tests and fixtures for that. Replace the Proxy._on_done static method with an instance method. In main.py, bail out upon receiving invalid input JSON, instead of printing an error response and then continuing to try to use it, resulting in printing another error response. Have main.py use the callbacks on the proxy as given, instead of always overwriting them with the defaults from callbacks.py. Rework entrypoint.py so that it should always print a JSON response, and add tests for it. --- fixtures/main_error_response.yaml | 30 +++++ fixtures/main_input_body.yaml | 59 +++++++++ fixtures/main_json_response.yaml | 92 ++++++++++++++ fixtures/main_non_json_response.yaml | 145 ++++++++++++++++++++++ fixtures/proxy_bad_request.yaml | 20 +++ fixtures/proxy_callbacks.yaml | 145 ++++++++++++++++++++++ fixtures/proxy_cannot_connect.yaml | 22 ++++ fixtures/proxy_internal_error.yaml | 22 ++++ fixtures/proxy_internal_server_error.yaml | 20 +++ fixtures/proxy_unofficial_status.yaml | 20 +++ securedrop_proxy/entrypoint.py | 76 ++++++------ securedrop_proxy/main.py | 5 +- securedrop_proxy/proxy.py | 61 ++++++--- tests/files/dev-config.yaml | 5 + tests/test_callbacks.py | 51 ++++++++ tests/test_config.py | 4 + tests/test_entrypoint.py | 128 +++++++++++++++++++ tests/test_main.py | 83 +++++++++++-- tests/test_proxy.py | 132 +++++++++++++++++++- 19 files changed, 1044 insertions(+), 76 deletions(-) create mode 100644 fixtures/main_error_response.yaml create mode 100644 fixtures/main_input_body.yaml create mode 100644 fixtures/main_json_response.yaml create mode 100644 fixtures/main_non_json_response.yaml create mode 100644 fixtures/proxy_bad_request.yaml create mode 100644 fixtures/proxy_callbacks.yaml create mode 100644 fixtures/proxy_cannot_connect.yaml create mode 100644 fixtures/proxy_internal_error.yaml create mode 100644 fixtures/proxy_internal_server_error.yaml create mode 100644 fixtures/proxy_unofficial_status.yaml create mode 100644 tests/files/dev-config.yaml create mode 100644 tests/test_entrypoint.py diff --git a/fixtures/main_error_response.yaml b/fixtures/main_error_response.yaml new file mode 100644 index 000000000..30d6fd734 --- /dev/null +++ b/fixtures/main_error_response.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: null + headers: + Content-Length: + - '0' + method: '' + uri: https://jsonplaceholder.typicode.com/ + response: + body: + string: "\r\n400 Bad Request\r\n\r\n\ +

400 Bad Request

\r\n
cloudflare
\r\ + \n\r\n\r\n" + headers: + CF-RAY: + - '-' + Connection: + - close + Content-Length: + - '155' + Content-Type: + - text/html + Date: + - Mon, 16 Dec 2019 22:11:39 GMT + Server: + - cloudflare + status: + code: 400 + message: Bad Request +version: 1 diff --git a/fixtures/main_input_body.yaml b/fixtures/main_input_body.yaml new file mode 100644 index 000000000..0ea82b1a2 --- /dev/null +++ b/fixtures/main_input_body.yaml @@ -0,0 +1,59 @@ +interactions: +- request: + body: id=42&title=test + headers: + Content-Length: + - '16' + Content-Type: + - application/x-www-form-urlencoded + method: POST + uri: https://jsonplaceholder.typicode.com/posts + response: + body: + string: "{\n \"id\": 101,\n \"title\": \"test\"\n}" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Location + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 546ab6213f81f11a-IAD + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '34' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 17 Dec 2019 17:45:33 GMT + Etag: + - W/"22-i04alCk7PdGrJ2UKCUwBOO0LB3w" + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - '-1' + Location: + - http://jsonplaceholder.typicode.com/posts/101 + Pragma: + - no-cache + Server: + - cloudflare + Set-Cookie: + - __cfduid=d1fa880178dc2db917f26b8ce4e0d56e41576604733; expires=Thu, 16-Jan-20 + 17:45:33 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax + Vary: + - Origin, X-HTTP-Method-Override, Accept-Encoding + Via: + - 1.1 vegur + X-Content-Type-Options: + - nosniff + X-Powered-By: + - Express + status: + code: 201 + message: Created +version: 1 diff --git a/fixtures/main_json_response.yaml b/fixtures/main_json_response.yaml new file mode 100644 index 000000000..782bee3e5 --- /dev/null +++ b/fixtures/main_json_response.yaml @@ -0,0 +1,92 @@ +interactions: +- request: + body: null + headers: {} + method: GET + uri: https://jsonplaceholder.typicode.com/posts?userId=1 + response: + body: + string: "[\n {\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"sunt aut\ + \ facere repellat provident occaecati excepturi optio reprehenderit\",\n \ + \ \"body\": \"quia et suscipit\\nsuscipit recusandae consequuntur expedita\ + \ et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem\ + \ sunt rem eveniet architecto\"\n },\n {\n \"userId\": 1,\n \"id\"\ + : 2,\n \"title\": \"qui est esse\",\n \"body\": \"est rerum tempore\ + \ vitae\\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\\nfugiat\ + \ blanditiis voluptate porro vel nihil molestiae ut reiciendis\\nqui aperiam\ + \ non debitis possimus qui neque nisi nulla\"\n },\n {\n \"userId\":\ + \ 1,\n \"id\": 3,\n \"title\": \"ea molestias quasi exercitationem repellat\ + \ qui ipsa sit aut\",\n \"body\": \"et iusto sed quo iure\\nvoluptatem\ + \ occaecati omnis eligendi aut ad\\nvoluptatem doloribus vel accusantium quis\ + \ pariatur\\nmolestiae porro eius odio et labore et velit aut\"\n },\n {\n\ + \ \"userId\": 1,\n \"id\": 4,\n \"title\": \"eum et est occaecati\"\ + ,\n \"body\": \"ullam et saepe reiciendis voluptatem adipisci\\nsit amet\ + \ autem assumenda provident rerum culpa\\nquis hic commodi nesciunt rem tenetur\ + \ doloremque ipsam iure\\nquis sunt voluptatem rerum illo velit\"\n },\n\ + \ {\n \"userId\": 1,\n \"id\": 5,\n \"title\": \"nesciunt quas odio\"\ + ,\n \"body\": \"repudiandae veniam quaerat sunt sed\\nalias aut fugiat\ + \ sit autem sed est\\nvoluptatem omnis possimus esse voluptatibus quis\\nest\ + \ aut tenetur dolor neque\"\n },\n {\n \"userId\": 1,\n \"id\": 6,\n\ + \ \"title\": \"dolorem eum magni eos aperiam quia\",\n \"body\": \"\ + ut aspernatur corporis harum nihil quis provident sequi\\nmollitia nobis aliquid\ + \ molestiae\\nperspiciatis et ea nemo ab reprehenderit accusantium quas\\\ + nvoluptate dolores velit et doloremque molestiae\"\n },\n {\n \"userId\"\ + : 1,\n \"id\": 7,\n \"title\": \"magnam facilis autem\",\n \"body\"\ + : \"dolore placeat quibusdam ea quo vitae\\nmagni quis enim qui quis quo nemo\ + \ aut saepe\\nquidem repellat excepturi ut quia\\nsunt ut sequi eos ea sed\ + \ quas\"\n },\n {\n \"userId\": 1,\n \"id\": 8,\n \"title\": \"\ + dolorem dolore est ipsam\",\n \"body\": \"dignissimos aperiam dolorem qui\ + \ eum\\nfacilis quibusdam animi sint suscipit qui sint possimus cum\\nquaerat\ + \ magni maiores excepturi\\nipsam ut commodi dolor voluptatum modi aut vitae\"\ + \n },\n {\n \"userId\": 1,\n \"id\": 9,\n \"title\": \"nesciunt\ + \ iure omnis dolorem tempora et accusantium\",\n \"body\": \"consectetur\ + \ animi nesciunt iure dolore\\nenim quia ad\\nveniam autem ut quam aut nobis\\\ + net est aut quod aut provident voluptas autem voluptas\"\n },\n {\n \"\ + userId\": 1,\n \"id\": 10,\n \"title\": \"optio molestias id quia eum\"\ + ,\n \"body\": \"quo et expedita modi cum officia vel magni\\ndoloribus\ + \ qui repudiandae\\nvero nisi sit\\nquos veniam quod sed accusamus veritatis\ + \ error\"\n }\n]" + headers: + Access-Control-Allow-Credentials: + - 'true' + Age: + - '4646' + CF-Cache-Status: + - HIT + CF-RAY: + - 54640259fa6fe0d2-IAD + Cache-Control: + - max-age=14400 + Connection: + - keep-alive + Content-Type: + - application/json; charset=utf-8 + Date: + - Mon, 16 Dec 2019 22:14:15 GMT + Etag: + - W/"aa6-j2NSH739l9uq40OywFMn7Y0C/iY" + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - '-1' + Pragma: + - no-cache + Server: + - cloudflare + Set-Cookie: + - __cfduid=d8ac1a396d31b9e9c1f816924e5bf186d1576534455; expires=Wed, 15-Jan-20 + 22:14:15 GMT; path=/; domain=.typicode.com; HttpOnly + Transfer-Encoding: + - chunked + Vary: + - Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Content-Type-Options: + - nosniff + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/fixtures/main_non_json_response.yaml b/fixtures/main_non_json_response.yaml new file mode 100644 index 000000000..e5e02a920 --- /dev/null +++ b/fixtures/main_non_json_response.yaml @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: {} + method: GET + uri: https://jsonplaceholder.typicode.com/ + response: + body: + string: "\n\n\n\n\n\n\n\n\n\n\nJSONPlaceholder - Fake online REST API for developers\n\ + \n\n
\n\n\ + \n Announcement: You can now support\n\ + JSONPlaceholder on GitHub Sponsors!\n\n
\n
\n\n
\n
\n

\nJSONPlaceholder\n\ +

\n

\nFake Online REST API for Testing and Prototyping\n\ +
Serving ~350M requests per month\n
Powered by\nJSON Server\n+\nLowDB\n

\n\n\n\n\n\n
\n
\n\n
\n

Gold\ + \ Sponsors

\n

\n\n\n\n

\n

\nYour Company Logo Here\n

\n
\n\n
\n
\n\ + \n

Intro

\n

\nJSONPlaceholder is a free online REST API that you\ + \ can use whenever you need some fake data.\n
It's great for tutorials,\ + \ testing new libraries, sharing code examples, ...\n

\n\n

Example

\n\ +

\nRun this code in a console or from any site:\n

\n
fetch('https://jsonplaceholder.typicode.com/todos/1')\n\
+        \  .then(response => response.json())\n  .then(json => console.log(json))\n\
+        
\n

\n\n

\n
\nCongrats\ + \ you've made your first call to JSONPlaceholder! \U0001F603 \U0001F389\n\ +

\nTip: you can use\n\nhttp://\n or\n\nhttps://\n\ + when making requests to JSONPlaceholder.\n

\n
\n\n\n

Resources

\n

\nJSONPlaceholder comes with a\ + \ set of 6 common resources:\n

\n\n\n\n\n\n\n\ + \n\n\ + \n\n\n\n\ + \n\n\n\n\ + \n\n\n\n\ + \n\n\n\n\ + \n
\n\ + \ /posts\n100 posts
\n/comments\n500 comments
\n/albums\n100 albums
\n/photos\n5000 photos
\n/todos\n200 todos
\n/users\n10 users
\n

\nNote: resources have relations. For\ + \ example:\nposts have many\ncomments,\nalbums have many\n\ + photos, ... see below for routes examples.\n

\n\n

Routes

\n\ +

\nAll HTTP methods are supported.\n

\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\ + \n\n\n\n\n
GET\n/posts\n
GET\n\ + /posts/1\n
GET\n\ + /posts/1/comments\n
GET\n/comments?postId=1\n\ +
GET\n/posts?userId=1\n\ +
POST/posts
PUT/posts/1
PATCH/posts/1
DELETE/posts/1
\n

\nNote:\ + \ you can view detailed examples\nhere.\n

\n\ + \n

Use your own data

\n\n

\nWith My JSON Server online service and a simple GitHub repo, you can have\ + \ your own online fake REST server in seconds.\n

\n
\n
\n
\n\ + \n\n\n\n\n\ + \n\n\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Age: + - '5668' + CF-Cache-Status: + - HIT + CF-RAY: + - 5463fe6ccb0ecf04-IAD + Cache-Control: + - public, max-age=14400 + Connection: + - keep-alive + Content-Type: + - text/html; charset=UTF-8 + Date: + - Mon, 16 Dec 2019 22:11:34 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Last-Modified: + - Mon, 05 Aug 2019 03:07:14 GMT + Server: + - cloudflare + Set-Cookie: + - __cfduid=d13b55a7f6e786f74d5f9f1f084a183a31576534294; expires=Wed, 15-Jan-20 + 22:11:34 GMT; path=/; domain=.typicode.com; HttpOnly + Transfer-Encoding: + - chunked + Vary: + - Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/fixtures/proxy_bad_request.yaml b/fixtures/proxy_bad_request.yaml new file mode 100644 index 000000000..9d71f3dae --- /dev/null +++ b/fixtures/proxy_bad_request.yaml @@ -0,0 +1,20 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + method: GET + uri: http://localhost:8000/bad + response: + body: + string: '' + headers: + Date: + - Mon, 16 Dec 2019 23:44:53 GMT + Server: + - BaseHTTP/0.6 Python/3.7.3 + status: + code: 400 + message: Bad Request +version: 1 diff --git a/fixtures/proxy_callbacks.yaml b/fixtures/proxy_callbacks.yaml new file mode 100644 index 000000000..7224c8cfd --- /dev/null +++ b/fixtures/proxy_callbacks.yaml @@ -0,0 +1,145 @@ +interactions: +- request: + body: null + headers: {} + method: GET + uri: https://jsonplaceholder.typicode.com/ + response: + body: + string: "\n\n\n\n\n\n\n\n\n\n\nJSONPlaceholder - Fake online REST API for developers\n\ + \n\n
\n\n\ + \n Announcement: You can now support\n\ + JSONPlaceholder on GitHub Sponsors!\n\n
\n
\n\n
\n
\n

\nJSONPlaceholder\n\ +

\n

\nFake Online REST API for Testing and Prototyping\n\ +
Serving ~350M requests per month\n
Powered by\nJSON Server\n+\nLowDB\n

\n\n\n\n\n\n
\n
\n\n
\n

Gold\ + \ Sponsors

\n

\n\n\n\n

\n

\nYour Company Logo Here\n

\n
\n\n
\n
\n\ + \n

Intro

\n

\nJSONPlaceholder is a free online REST API that you\ + \ can use whenever you need some fake data.\n
It's great for tutorials,\ + \ testing new libraries, sharing code examples, ...\n

\n\n

Example

\n\ +

\nRun this code in a console or from any site:\n

\n
fetch('https://jsonplaceholder.typicode.com/todos/1')\n\
+        \  .then(response => response.json())\n  .then(json => console.log(json))\n\
+        
\n

\n\n

\n
\nCongrats\ + \ you've made your first call to JSONPlaceholder! \U0001F603 \U0001F389\n\ +

\nTip: you can use\n\nhttp://\n or\n\nhttps://\n\ + when making requests to JSONPlaceholder.\n

\n
\n\n\n

Resources

\n

\nJSONPlaceholder comes with a\ + \ set of 6 common resources:\n

\n\n\n\n\n\n\n\ + \n\n\ + \n\n\n\n\ + \n\n\n\n\ + \n\n\n\n\ + \n\n\n\n\ + \n
\n\ + \ /posts\n100 posts
\n/comments\n500 comments
\n/albums\n100 albums
\n/photos\n5000 photos
\n/todos\n200 todos
\n/users\n10 users
\n

\nNote: resources have relations. For\ + \ example:\nposts have many\ncomments,\nalbums have many\n\ + photos, ... see below for routes examples.\n

\n\n

Routes

\n\ +

\nAll HTTP methods are supported.\n

\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\ + \n\n\n\n\n
GET\n/posts\n
GET\n\ + /posts/1\n
GET\n\ + /posts/1/comments\n
GET\n/comments?postId=1\n\ +
GET\n/posts?userId=1\n\ +
POST/posts
PUT/posts/1
PATCH/posts/1
DELETE/posts/1
\n

\nNote:\ + \ you can view detailed examples\nhere.\n

\n\ + \n

Use your own data

\n\n

\nWith My JSON Server online service and a simple GitHub repo, you can have\ + \ your own online fake REST server in seconds.\n

\n
\n
\n
\n\ + \n\n\n\n\n\ + \n\n\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Age: + - '4432' + CF-Cache-Status: + - HIT + CF-RAY: + - 5469de47682ecf00-IAD + Cache-Control: + - public, max-age=14400 + Connection: + - keep-alive + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 17 Dec 2019 15:18:12 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Last-Modified: + - Mon, 05 Aug 2019 03:07:14 GMT + Server: + - cloudflare + Set-Cookie: + - __cfduid=dc33ebab29f22c648b958d03fed5596b51576595892; expires=Thu, 16-Jan-20 + 15:18:12 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax + Transfer-Encoding: + - chunked + Vary: + - Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/fixtures/proxy_cannot_connect.yaml b/fixtures/proxy_cannot_connect.yaml new file mode 100644 index 000000000..9788ab4e4 --- /dev/null +++ b/fixtures/proxy_cannot_connect.yaml @@ -0,0 +1,22 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + method: GET + uri: http://localhost:8000/ + response: + body: + string: 'hello + + ' + headers: + Date: + - Tue, 17 Dec 2019 00:06:22 GMT + Server: + - BaseHTTP/0.6 Python/3.7.3 + status: + code: 200 + message: OK +version: 1 diff --git a/fixtures/proxy_internal_error.yaml b/fixtures/proxy_internal_error.yaml new file mode 100644 index 000000000..7295de697 --- /dev/null +++ b/fixtures/proxy_internal_error.yaml @@ -0,0 +1,22 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + method: GET + uri: http://localhost:8000/ + response: + body: + string: 'hello + + ' + headers: + Date: + - Tue, 17 Dec 2019 00:00:13 GMT + Server: + - BaseHTTP/0.6 Python/3.7.3 + status: + code: 200 + message: OK +version: 1 diff --git a/fixtures/proxy_internal_server_error.yaml b/fixtures/proxy_internal_server_error.yaml new file mode 100644 index 000000000..603e62467 --- /dev/null +++ b/fixtures/proxy_internal_server_error.yaml @@ -0,0 +1,20 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + method: GET + uri: http://localhost:8000/crash + response: + body: + string: '' + headers: + Date: + - Mon, 16 Dec 2019 23:58:10 GMT + Server: + - BaseHTTP/0.6 Python/3.7.3 + status: + code: 500 + message: Internal Server Error +version: 1 diff --git a/fixtures/proxy_unofficial_status.yaml b/fixtures/proxy_unofficial_status.yaml new file mode 100644 index 000000000..fa62ef962 --- /dev/null +++ b/fixtures/proxy_unofficial_status.yaml @@ -0,0 +1,20 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + method: GET + uri: http://localhost:8000/teapot + response: + body: + string: '' + headers: + Date: + - Mon, 16 Dec 2019 23:59:52 GMT + Server: + - BaseHTTP/0.6 Python/3.7.3 + status: + code: 418 + message: '' +version: 1 diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index 70f21a3db..fb0a8c1c0 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -6,6 +6,8 @@ # called with exactly one argument: the path to its config file. See # the README for configuration options. +import http +import json import logging import os import sys @@ -30,60 +32,55 @@ def start(): ''' try: configure_logging() - except Exception as e: - print(e) - return - - logging.debug('Starting SecureDrop Proxy {}'.format(version)) - # a fresh, new proxy object - p = proxy.Proxy() + logging.debug('Starting SecureDrop Proxy {}'.format(version)) - # set up an error handler early, so we can use it during - # configuration, etc - p.on_done = callbacks.err_on_done + # a fresh, new proxy object + p = proxy.Proxy() - # path to config file must be at argv[1] - if len(sys.argv) != 2: - p.simple_error( - 500, "sd-proxy script not called with path to configuration file" - ) - p.on_done(p.res) + # set up an error handler early, so we can use it during + # configuration, etc + original_on_done = p.on_done + p.on_done = callbacks.err_on_done - # read config. `read_conf` will call `p.on_done` if there is a config - # problem, and will return a Conf object on success. - conf_path = sys.argv[1] - p.conf = config.read_conf(conf_path, p) + # path to config file must be at argv[1] + if len(sys.argv) != 2: + raise ValueError("sd-proxy script not called with path to configuration file") - # read user request from STDIN - incoming = [] - for line in sys.stdin: - incoming.append(line) - incoming = "\n".join(incoming) + # read config. `read_conf` will call `p.on_done` if there is a config + # problem, and will return a Conf object on success. + conf_path = sys.argv[1] + p.conf = config.read_conf(conf_path, p) - main.__main__(incoming, p) + # read user request from STDIN + incoming = [] + for line in sys.stdin: + incoming.append(line) + incoming = "\n".join(incoming) - -def excepthook(*exc_args): - ''' - This function is called in the event of a catastrophic failure. - Log exception and exit cleanly. - ''' - logging.error('Unrecoverable error', exc_info=(exc_args)) - sys.__excepthook__(*exc_args) - print('') # force terminal prompt on to a new line - sys.exit(1) + p.on_done = original_on_done + main.__main__(incoming, p) + except Exception as e: + response = { + "status": http.HTTPStatus.INTERNAL_SERVER_ERROR, + "body": json.dumps({ + "error": str(e), + }) + } + print(json.dumps(response)) + sys.exit(1) def configure_logging() -> None: ''' All logging related settings are set up by this function. ''' - log_folder = os.path.join(DEFAULT_HOME, 'logs') + home = os.getenv("SECUREDROP_HOME", DEFAULT_HOME) + log_folder = os.path.join(home, 'logs') if not os.path.exists(log_folder): os.makedirs(log_folder) - log_file = os.path.join(DEFAULT_HOME, 'logs', 'proxy.log') + log_file = os.path.join(home, 'logs', 'proxy.log') # set logging format log_fmt = ('%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) %(levelname)s: %(message)s') @@ -98,6 +95,3 @@ def configure_logging() -> None: log = logging.getLogger() log.setLevel(LOGLEVEL) log.addHandler(handler) - - # override excepthook to capture a log of catastrophic failures. - sys.excepthook = excepthook diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index 6fadafaf5..8986449f4 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -21,6 +21,7 @@ def __main__(incoming, p): logging.error(e) p.simple_error(400, 'Invalid JSON in request') p.on_done(p.res) + return req = proxy.Req() try: @@ -38,6 +39,6 @@ def __main__(incoming, p): req.body = client_req['body'] p.req = req - p.on_save = callbacks.on_save - p.on_done = callbacks.on_done + if p.on_save is None: + p.on_save = callbacks.on_save p.proxy() diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index cc30b3214..59a9a3af5 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -1,4 +1,5 @@ import furl +import http import json import logging import requests @@ -6,6 +7,7 @@ import werkzeug import securedrop_proxy.version as version +from securedrop_proxy import callbacks logger = logging.getLogger(__name__) @@ -28,22 +30,21 @@ def __init__(self, status): class Proxy: - @staticmethod - def _on_done(res): - print(json.dumps(res.__dict__)) - - def __init__(self, conf=None, req=Req(), on_save=None, on_done=None): + def __init__(self, conf=None, req=Req(), on_save=None, on_done=None, timeout: float = None): self.conf = conf self.req = req self.res = None self.on_save = on_save if on_done is not None: self.on_done = on_done - else: - self.on_done = self._on_done + + self.timeout = float(timeout) if timeout else 10 self._prepared_request = None + def on_done(self, res): + callbacks.on_done(res) + @staticmethod def valid_path(path): u = furl.furl(path) @@ -75,7 +76,7 @@ def prep_request(self): try: url = furl.furl("{}://{}:{}/{}".format(scheme, host, port, path)) except Exception as e: - logging.error(e) + logger.error(e) self.simple_error(500, "Proxy error while generating URL to request") raise ValueError("Error generating URL from provided values") @@ -118,7 +119,7 @@ def handle_non_json_response(self): self.res = res def handle_response(self): - logging.debug('Handling response') + logger.debug("Handling response") ctype = werkzeug.http.parse_options_header(self._presp.headers["content-type"]) @@ -135,23 +136,45 @@ def proxy(self): try: if self.on_save is None: - self.simple_error(400, "Request callback is not set.") - raise ValueError("Request callback is not set.") + self.simple_error( + http.HTTPStatus.BAD_REQUEST, "Request on_save callback is not set." + ) + raise ValueError("Request on_save callback is not set.") self.prep_request() - logging.debug('Sending request') + logger.debug("Sending request") s = requests.Session() - self._presp = s.send(self._prepared_request) + self._presp = s.send(self._prepared_request, timeout=self.timeout) + self._presp.raise_for_status() self.handle_response() - except ValueError as e: - logging.error(e) + logger.error(e) # effectively a 4xx error # we have set self.response to indicate an error pass - - # catch server errors here, handle maybe-differently from - # ValueErrors... - + except requests.exceptions.Timeout as e: + # Timeout covers both ConnectTimeout and ReadTimeout + logger.error(e) + self.simple_error(http.HTTPStatus.GATEWAY_TIMEOUT, "request timed out") + except ( + requests.exceptions.ConnectionError, # covers ProxyError, SSLError + requests.exceptions.TooManyRedirects, + ) as e: + logger.error(e) + self.simple_error(http.HTTPStatus.BAD_GATEWAY, "could not connect to server") + except requests.exceptions.HTTPError as e: + logger.error(e) + try: + self.simple_error( + e.response.status_code, + http.HTTPStatus(e.response.status_code).phrase.lower() + ) + except ValueError: + # Return a generic error message when the response + # status code is not found in http.HTTPStatus. + self.simple_error(e.response.status_code, "unspecified server error") + except Exception as e: + logger.error(e) + self.simple_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, "internal proxy error") self.on_done(self.res) diff --git a/tests/files/dev-config.yaml b/tests/files/dev-config.yaml new file mode 100644 index 000000000..8e72283a2 --- /dev/null +++ b/tests/files/dev-config.yaml @@ -0,0 +1,5 @@ +host: jsonplaceholder.typicode.com +scheme: https +port: 443 +target_vm: compost +dev: True diff --git a/tests/test_callbacks.py b/tests/test_callbacks.py index d0993e473..83c861ba6 100644 --- a/tests/test_callbacks.py +++ b/tests/test_callbacks.py @@ -5,6 +5,8 @@ import unittest from unittest.mock import patch +import vcr + from securedrop_proxy import callbacks from securedrop_proxy import config from securedrop_proxy import proxy @@ -76,3 +78,52 @@ def test_on_save_200_success(self): 'application/json') self.assertEqual(self.res.status, 200) self.assertIn('filename', self.res.body) + + @vcr.use_cassette("fixtures/proxy_callbacks.yaml") + def test_custom_callbacks(self): + """ + Test the handlers in a real proxy request. + """ + conf = config.Conf() + conf.host = 'jsonplaceholder.typicode.com' + conf.scheme = 'https' + conf.port = 443 + + req = proxy.Req() + req.method = "GET" + + on_save_addition = "added by the on_save callback\n" + on_done_addition = "added by the on_done callback\n" + + def on_save(fh, res, conf): + res.headers['Content-Type'] = 'text/plain' + res.body = on_save_addition + + def on_done(res): + res.headers['Content-Type'] = 'text/plain' + res.body += on_done_addition + + p = proxy.Proxy(self.conf, req, on_save=on_save, on_done=on_done) + p.proxy() + + self.assertEqual( + p.res.body, + "{}{}".format(on_save_addition, on_done_addition) + ) + + @vcr.use_cassette("fixtures/proxy_callbacks.yaml") + def test_production_on_save(self): + """ + Test on_save's production file handling. + """ + conf = config.Conf() + conf.host = 'jsonplaceholder.typicode.com' + conf.scheme = 'https' + conf.port = 443 + conf.dev = False + conf.target_vm = "sd-svs-dispvm" + + with patch("subprocess.run") as patched_run: + fh = tempfile.NamedTemporaryFile() + callbacks.on_save(fh, self.res, conf) + self.assertEqual(patched_run.call_args[0][0][0], "qvm-move-to-vm") diff --git a/tests/test_config.py b/tests/test_config.py index 916ad679d..0ae93eab9 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -90,3 +90,7 @@ def err_on_done(res): with self.assertRaises(SystemExit): config.read_conf('tests/files/missing-target-vm.yaml', self.p) + + def test_dev_config(self): + c = config.read_conf('tests/files/dev-config.yaml', self.p) + self.assertTrue(c.dev) diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py new file mode 100644 index 000000000..13b1d0425 --- /dev/null +++ b/tests/test_entrypoint.py @@ -0,0 +1,128 @@ +import contextlib +import http +import io +import json +import os +import sys +import tempfile +import unittest.mock + +import vcr +from securedrop_proxy import entrypoint + + +@contextlib.contextmanager +def sdhome(*args, **kwds): + with tempfile.TemporaryDirectory() as tmphome: + os.environ["SECUREDROP_HOME"] = tmphome + try: + yield tmphome + finally: + del os.environ["SECUREDROP_HOME"] + + +class TestEntrypoint(unittest.TestCase): + """ + Test the entrypoint used in production. + """ + + def test_missing_config(self): + config_path = "/tmp/nonexistent-config.yaml" + self.assertFalse(os.path.exists(config_path)) + + output = None + with unittest.mock.patch( + "sys.argv", new_callable=lambda: ["sd-proxy", config_path] + ) as mock_argv, unittest.mock.patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: + with self.assertRaises(SystemExit), sdhome(): + entrypoint.start() + output = mock_stdout.getvalue() + + response = json.loads(output) + self.assertEqual(response["status"], http.HTTPStatus.INTERNAL_SERVER_ERROR) + body = json.loads(response["body"]) + self.assertEqual( + body["error"], "Configuration file does not exist at {}".format(config_path) + ) + + def test_unwritable_log_folder(self): + """ + Tests a permission problem in `configure_logging`. + """ + output = None + with sdhome() as home: + os.chmod(home, 0o0444) + with unittest.mock.patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: + with self.assertRaises(SystemExit): + entrypoint.start() + output = mock_stdout.getvalue() + os.chmod(home, 0o0700) + + response = json.loads(output) + self.assertEqual(response["status"], http.HTTPStatus.INTERNAL_SERVER_ERROR) + body = json.loads(response["body"]) + self.assertIn("Permission denied: ", body["error"]) + + def test_wrong_number_of_arguments(self): + with sdhome() as home: + with unittest.mock.patch( + "sys.argv", new_callable=lambda: ["sd-proxy"] + ) as mock_argv, unittest.mock.patch( + "sys.stdout", new_callable=io.StringIO + ) as mock_stdout: + with self.assertRaises(SystemExit): + entrypoint.start() + output = mock_stdout.getvalue() + + response = json.loads(output) + self.assertEqual(response["status"], http.HTTPStatus.INTERNAL_SERVER_ERROR) + body = json.loads(response["body"]) + self.assertEqual( + body["error"], "sd-proxy script not called with path to configuration file" + ) + + def test_empty_input(self): + config_path = "tests/files/valid-config.yaml" + self.assertTrue(os.path.exists(config_path)) + + with sdhome() as home: + with unittest.mock.patch( + "sys.stdin", new_callable=lambda: io.StringIO("") + ) as mock_stdin, unittest.mock.patch( + "sys.stdout", new_callable=io.StringIO + ) as mock_stdout, unittest.mock.patch( + "sys.argv", new_callable=lambda: ["sd-proxy", config_path] + ) as mock_argv: + entrypoint.start() + output = mock_stdout.getvalue() + + response = json.loads(output) + self.assertEqual(response["status"], http.HTTPStatus.BAD_REQUEST) + body = json.loads(response["body"]) + self.assertEqual( + body["error"], "Invalid JSON in request" + ) + + @vcr.use_cassette("fixtures/main_json_response.yaml") + def test_json_response(self): + config_path = "tests/files/valid-config.yaml" + self.assertTrue(os.path.exists(config_path)) + + test_input = { + "method": "GET", + "path_query": "/posts?userId=1", + } + + output = None + with sdhome() as home, unittest.mock.patch( + "sys.stdin", new_callable=lambda: io.StringIO(json.dumps(test_input)) + ) as mock_stding, unittest.mock.patch( + "sys.stdout", new_callable=io.StringIO + ) as mock_stdout, unittest.mock.patch( + "sys.argv", new_callable=lambda: ["sd-proxy", config_path] + ) as mock_argv: + entrypoint.start() + output = mock_stdout.getvalue() + + response = json.loads(output) + self.assertEqual(response["status"], http.HTTPStatus.OK) diff --git a/tests/test_main.py b/tests/test_main.py index 8a4a28e15..1c4946146 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,3 +1,4 @@ +import http from io import StringIO import json import subprocess @@ -5,6 +6,8 @@ import unittest import uuid +import vcr + from securedrop_proxy import config from securedrop_proxy import main from securedrop_proxy import proxy @@ -18,6 +21,7 @@ def setUp(self): self.conf.port = 443 self.conf.dev = True + @vcr.use_cassette('fixtures/main_json_response.yaml') def test_json_response(self): test_input_json = """{ "method": "GET", "path_query": "/posts?userId=1" }""" @@ -32,12 +36,10 @@ def on_save(res, fh, conf): pass def on_done(res): - res = res.__dict__ - self.assertEqual(res['status'], 200) + self.assertEqual(res.status, http.HTTPStatus.OK) + print(json.dumps(res.__dict__)) - self.p = proxy.Proxy(self.conf, req, on_save) - self.p.on_done = on_done - self.p.proxy() + self.p = proxy.Proxy(self.conf, req, on_save, on_done) saved_stdout = sys.stdout try: @@ -52,6 +54,7 @@ def on_done(res): for item in json.loads(response['body']): self.assertEqual(item['userId'], 1) + @vcr.use_cassette('fixtures/main_non_json_response.yaml') def test_non_json_response(self): test_input_json = """{ "method": "GET", "path_query": "" }""" @@ -66,7 +69,6 @@ def on_save(fh, res, conf): res.body = json.dumps({'filename': self.fn}) self.p = proxy.Proxy(self.conf, proxy.Req(), on_save) - self.p.proxy() saved_stdout = sys.stdout try: @@ -88,9 +90,9 @@ def on_save(fh, res, conf): saved_file = f.read() # We expect HTML content in the file from the test data - self.assertIn("", saved_file) + self.assertIn("", saved_file) - def test_error_response(self): + def test_input_invalid_json(self): test_input_json = """"foo": "bar", "baz": "bliff" }""" def on_save(fh, res, conf): @@ -101,9 +103,66 @@ def on_done(res): self.assertEqual(res['status'], 400) sys.exit(1) - self.p = proxy.Proxy(self.conf, proxy.Req(), on_save) - self.p.on_done = on_done + p = proxy.Proxy(self.conf, proxy.Req(), on_save, on_done) with self.assertRaises(SystemExit): - self.p.proxy() - main.__main__(test_input_json, self.p) + main.__main__(test_input_json, p) + + def test_input_missing_keys(self): + test_input_json = """{ "foo": "bar", "baz": "bliff" }""" + + def on_save(fh, res, conf): + pass + + def on_done(res): + res = res.__dict__ + self.assertEqual(res['status'], 400) + self.assertEqual(res['body'], '{"error": "Missing keys in request"}') + sys.exit(1) + + p = proxy.Proxy(self.conf, proxy.Req(), on_save, on_done) + with self.assertRaises(SystemExit): + main.__main__(test_input_json, p) + + @vcr.use_cassette('fixtures/main_json_response.yaml') + def test_input_headers(self): + test_input = { + "method": "GET", + "path_query": "/posts?userId=1", + "headers": { "X-Test-Header": "th" } + } + + def on_save(fh, res, conf): + pass + + p = proxy.Proxy(self.conf, proxy.Req(), on_save) + main.__main__(json.dumps(test_input), p) + self.assertEqual(p.req.headers, test_input["headers"]) + + @vcr.use_cassette('fixtures/main_input_body.yaml') + def test_input_body(self): + test_input = { + "method": "POST", + "path_query": "/posts", + "body": { "id": 42, "title": "test" } + } + + def on_save(fh, res, conf): + pass + + p = proxy.Proxy(self.conf, proxy.Req(), on_save) + main.__main__(json.dumps(test_input), p) + self.assertEqual(p.req.body, test_input["body"]) + + @vcr.use_cassette('fixtures/main_non_json_response.yaml') + def test_default_callbacks(self): + test_input = { + "method": "GET", + "path_query": "", + } + + p = proxy.Proxy(self.conf, proxy.Req()) + with unittest.mock.patch("securedrop_proxy.callbacks.on_done") as on_done, unittest.mock.patch("securedrop_proxy.callbacks.on_save") as on_save: + main.__main__(json.dumps(test_input), p) + self.assertEqual(on_save.call_count, 1) + self.assertEqual(on_done.call_count, 1) diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 6278dce45..bc73b0589 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -1,8 +1,12 @@ +import http import json -import vcr import unittest import uuid +import requests +import vcr + +from securedrop_proxy import callbacks from securedrop_proxy import proxy from securedrop_proxy import config from securedrop_proxy import version @@ -136,7 +140,7 @@ def test_proxy_400_no_handler(self): self.assertEqual(p.res.status, 400) self.assertEqual(p.res.headers['Content-Type'], 'application/json') - self.assertIn('Request callback is not set', + self.assertIn('Request on_save callback is not set', p.res.body) @@ -167,3 +171,127 @@ def test_proxy_500_misconfiguration(self): self.assertEqual(p.res.headers['Content-Type'], 'application/json') self.assertIn('Proxy error while generating URL to request', p.res.body) + + +class TestServerErrorHandling(unittest.TestCase): + def setUp(self): + self.conf = config.Conf() + self.conf.host = "localhost" + self.conf.scheme = "http" + self.conf.port = 8000 + + def make_request(self, method="GET", path_query="/", headers=None): + req = proxy.Req() + req.method = method if method else "GET" + req.path_query = path_query if path_query else "/" + req.headers = headers if headers else {"Accept": "application/json"} + return req + + def test_cannot_connect(self): + """ + Test for "502 Bad Gateway" when the server can't be reached. + """ + req = self.make_request() + + conf = config.Conf() + conf.host = "sdproxytest.local" + conf.scheme = "https" + conf.port = 8000 + + p = proxy.Proxy(conf, req, on_save=callbacks.on_save) + p.proxy() + + self.assertEqual(p.res.status, http.HTTPStatus.BAD_GATEWAY) + self.assertIn("application/json", p.res.headers["Content-Type"]) + body = json.loads(p.res.body) + self.assertEqual(body["error"], "could not connect to server") + + def test_server_timeout(self): + """ + Test for "504 Gateway Timeout" when the server times out. + """ + class TimeoutProxy(proxy.Proxy): + """ + Mocks a slow upstream server. + + VCR cassettes cannot represent a request that takes too + long. This Proxy subclass raises the exception that would + cause. + """ + def prep_request(self): + raise requests.exceptions.Timeout('test timeout') + + req = self.make_request(path_query="/tarpit") + p = TimeoutProxy(self.conf, req, on_save=callbacks.on_save, timeout=0.00001) + p.proxy() + + self.assertEqual(p.res.status, http.HTTPStatus.GATEWAY_TIMEOUT) + self.assertIn("application/json", p.res.headers["Content-Type"]) + body = json.loads(p.res.body) + self.assertEqual(body["error"], "request timed out") + + @vcr.use_cassette("fixtures/proxy_bad_request.yaml") + def test_bad_request(self): + """ + Test handling of "400 Bad Request" from the server. + """ + req = self.make_request(path_query="/bad") + p = proxy.Proxy(self.conf, req, on_save=callbacks.on_save) + p.proxy() + + self.assertEqual(p.res.status, http.HTTPStatus.BAD_REQUEST) + self.assertIn("application/json", p.res.headers["Content-Type"]) + body = json.loads(p.res.body) + self.assertEqual(body["error"], http.HTTPStatus.BAD_REQUEST.phrase.lower()) + + @vcr.use_cassette("fixtures/proxy_unofficial_status.yaml") + def test_unofficial_status(self): + """ + Make sure we handle unofficial status codes from the server. + + Should the server ever need to return a status code not in + Python's http.HTTPStatus, the proxy should still return a + proper JSON error response with a generic error message. + """ + req = self.make_request(path_query="/teapot") + p = proxy.Proxy(self.conf, req, on_save=callbacks.on_save) + p.proxy() + + self.assertEqual(p.res.status, 418) + self.assertIn("application/json", p.res.headers["Content-Type"]) + body = json.loads(p.res.body) + self.assertEqual(body["error"], "unspecified server error") + + @vcr.use_cassette("fixtures/proxy_internal_server_error.yaml") + def test_internal_server_error(self): + """ + Test handling of "500 Internal Server Error" from the server. + """ + req = self.make_request(path_query="/crash") + p = proxy.Proxy(self.conf, req, on_save=callbacks.on_save) + p.proxy() + + self.assertEqual(p.res.status, http.HTTPStatus.INTERNAL_SERVER_ERROR) + self.assertIn("application/json", p.res.headers["Content-Type"]) + body = json.loads(p.res.body) + self.assertEqual( + body["error"], + http.HTTPStatus.INTERNAL_SERVER_ERROR.phrase.lower() + ) + + @vcr.use_cassette("fixtures/proxy_internal_error.yaml") + def test_internal_error(self): + """ + Ensure that the proxy returns JSON despite internal errors. + """ + def bad_on_save(self, fh, res, conf): + raise Exception("test internal proxy error") + + req = self.make_request() + p = proxy.Proxy(self.conf, req, on_save=bad_on_save) + p.proxy() + + self.assertEqual(p.res.status, http.HTTPStatus.INTERNAL_SERVER_ERROR) + self.assertIn("application/json", p.res.headers["Content-Type"]) + body = json.loads(p.res.body) + self.assertEqual(body["error"], "internal proxy error") From e2e9bf3ebed4a4803d45d984ad1466cf47419a07 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Wed, 18 Dec 2019 10:45:04 -0500 Subject: [PATCH 316/751] Address review Give test_main.test_input_headers its own fixture. Use "if not callback" instead of "if callback is None". --- fixtures/main_input_headers.yaml | 94 ++++++++++++++++++++++++++++++++ securedrop_proxy/main.py | 2 +- securedrop_proxy/proxy.py | 2 +- tests/test_main.py | 2 +- 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 fixtures/main_input_headers.yaml diff --git a/fixtures/main_input_headers.yaml b/fixtures/main_input_headers.yaml new file mode 100644 index 000000000..606bfa7ad --- /dev/null +++ b/fixtures/main_input_headers.yaml @@ -0,0 +1,94 @@ +interactions: +- request: + body: null + headers: + X-Test-Header: + - th + method: GET + uri: https://jsonplaceholder.typicode.com/posts?userId=1 + response: + body: + string: "[\n {\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"sunt aut\ + \ facere repellat provident occaecati excepturi optio reprehenderit\",\n \ + \ \"body\": \"quia et suscipit\\nsuscipit recusandae consequuntur expedita\ + \ et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem\ + \ sunt rem eveniet architecto\"\n },\n {\n \"userId\": 1,\n \"id\"\ + : 2,\n \"title\": \"qui est esse\",\n \"body\": \"est rerum tempore\ + \ vitae\\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\\nfugiat\ + \ blanditiis voluptate porro vel nihil molestiae ut reiciendis\\nqui aperiam\ + \ non debitis possimus qui neque nisi nulla\"\n },\n {\n \"userId\":\ + \ 1,\n \"id\": 3,\n \"title\": \"ea molestias quasi exercitationem repellat\ + \ qui ipsa sit aut\",\n \"body\": \"et iusto sed quo iure\\nvoluptatem\ + \ occaecati omnis eligendi aut ad\\nvoluptatem doloribus vel accusantium quis\ + \ pariatur\\nmolestiae porro eius odio et labore et velit aut\"\n },\n {\n\ + \ \"userId\": 1,\n \"id\": 4,\n \"title\": \"eum et est occaecati\"\ + ,\n \"body\": \"ullam et saepe reiciendis voluptatem adipisci\\nsit amet\ + \ autem assumenda provident rerum culpa\\nquis hic commodi nesciunt rem tenetur\ + \ doloremque ipsam iure\\nquis sunt voluptatem rerum illo velit\"\n },\n\ + \ {\n \"userId\": 1,\n \"id\": 5,\n \"title\": \"nesciunt quas odio\"\ + ,\n \"body\": \"repudiandae veniam quaerat sunt sed\\nalias aut fugiat\ + \ sit autem sed est\\nvoluptatem omnis possimus esse voluptatibus quis\\nest\ + \ aut tenetur dolor neque\"\n },\n {\n \"userId\": 1,\n \"id\": 6,\n\ + \ \"title\": \"dolorem eum magni eos aperiam quia\",\n \"body\": \"\ + ut aspernatur corporis harum nihil quis provident sequi\\nmollitia nobis aliquid\ + \ molestiae\\nperspiciatis et ea nemo ab reprehenderit accusantium quas\\\ + nvoluptate dolores velit et doloremque molestiae\"\n },\n {\n \"userId\"\ + : 1,\n \"id\": 7,\n \"title\": \"magnam facilis autem\",\n \"body\"\ + : \"dolore placeat quibusdam ea quo vitae\\nmagni quis enim qui quis quo nemo\ + \ aut saepe\\nquidem repellat excepturi ut quia\\nsunt ut sequi eos ea sed\ + \ quas\"\n },\n {\n \"userId\": 1,\n \"id\": 8,\n \"title\": \"\ + dolorem dolore est ipsam\",\n \"body\": \"dignissimos aperiam dolorem qui\ + \ eum\\nfacilis quibusdam animi sint suscipit qui sint possimus cum\\nquaerat\ + \ magni maiores excepturi\\nipsam ut commodi dolor voluptatum modi aut vitae\"\ + \n },\n {\n \"userId\": 1,\n \"id\": 9,\n \"title\": \"nesciunt\ + \ iure omnis dolorem tempora et accusantium\",\n \"body\": \"consectetur\ + \ animi nesciunt iure dolore\\nenim quia ad\\nveniam autem ut quam aut nobis\\\ + net est aut quod aut provident voluptas autem voluptas\"\n },\n {\n \"\ + userId\": 1,\n \"id\": 10,\n \"title\": \"optio molestias id quia eum\"\ + ,\n \"body\": \"quo et expedita modi cum officia vel magni\\ndoloribus\ + \ qui repudiandae\\nvero nisi sit\\nquos veniam quod sed accusamus veritatis\ + \ error\"\n }\n]" + headers: + Access-Control-Allow-Credentials: + - 'true' + Age: + - '1789' + CF-Cache-Status: + - HIT + CF-RAY: + - 54722d954de5e0ea-IAD + Cache-Control: + - max-age=14400 + Connection: + - keep-alive + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 18 Dec 2019 15:30:26 GMT + Etag: + - W/"aa6-j2NSH739l9uq40OywFMn7Y0C/iY" + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - '-1' + Pragma: + - no-cache + Server: + - cloudflare + Set-Cookie: + - __cfduid=d21e159ad4987bc5ba9d781aed2f9db5c1576683026; expires=Fri, 17-Jan-20 + 15:30:26 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax + Transfer-Encoding: + - chunked + Vary: + - Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Content-Type-Options: + - nosniff + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index 8986449f4..e67f158ce 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -39,6 +39,6 @@ def __main__(incoming, p): req.body = client_req['body'] p.req = req - if p.on_save is None: + if not p.on_save: p.on_save = callbacks.on_save p.proxy() diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 59a9a3af5..dcdcbc095 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -135,7 +135,7 @@ def handle_response(self): def proxy(self): try: - if self.on_save is None: + if not self.on_save: self.simple_error( http.HTTPStatus.BAD_REQUEST, "Request on_save callback is not set." ) diff --git a/tests/test_main.py b/tests/test_main.py index 1c4946146..05595187c 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -124,7 +124,7 @@ def on_done(res): with self.assertRaises(SystemExit): main.__main__(test_input_json, p) - @vcr.use_cassette('fixtures/main_json_response.yaml') + @vcr.use_cassette('fixtures/main_input_headers.yaml') def test_input_headers(self): test_input = { "method": "GET", From 8cb672b3af7f8f92e654e5f665c6216c3955bebf Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 3 Jan 2020 14:34:33 +0530 Subject: [PATCH 317/751] Fixes lint issues in test files --- tests/test_entrypoint.py | 29 ++++++++++++----------- tests/test_main.py | 50 ++++++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py index 13b1d0425..8a5b0eaf2 100644 --- a/tests/test_entrypoint.py +++ b/tests/test_entrypoint.py @@ -3,7 +3,6 @@ import io import json import os -import sys import tempfile import unittest.mock @@ -33,7 +32,9 @@ def test_missing_config(self): output = None with unittest.mock.patch( "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv, unittest.mock.patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: + ) as mock_argv, unittest.mock.patch( # noqa: F841 + "sys.stdout", new_callable=io.StringIO + ) as mock_stdout: with self.assertRaises(SystemExit), sdhome(): entrypoint.start() output = mock_stdout.getvalue() @@ -52,7 +53,9 @@ def test_unwritable_log_folder(self): output = None with sdhome() as home: os.chmod(home, 0o0444) - with unittest.mock.patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: + with unittest.mock.patch( + "sys.stdout", new_callable=io.StringIO + ) as mock_stdout: with self.assertRaises(SystemExit): entrypoint.start() output = mock_stdout.getvalue() @@ -64,10 +67,10 @@ def test_unwritable_log_folder(self): self.assertIn("Permission denied: ", body["error"]) def test_wrong_number_of_arguments(self): - with sdhome() as home: + with sdhome() as home: # noqa: F841 with unittest.mock.patch( "sys.argv", new_callable=lambda: ["sd-proxy"] - ) as mock_argv, unittest.mock.patch( + ) as mock_argv, unittest.mock.patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO ) as mock_stdout: with self.assertRaises(SystemExit): @@ -85,23 +88,21 @@ def test_empty_input(self): config_path = "tests/files/valid-config.yaml" self.assertTrue(os.path.exists(config_path)) - with sdhome() as home: + with sdhome() as home: # noqa: F841 with unittest.mock.patch( "sys.stdin", new_callable=lambda: io.StringIO("") - ) as mock_stdin, unittest.mock.patch( + ) as mock_stdin, unittest.mock.patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO ) as mock_stdout, unittest.mock.patch( "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv: + ) as mock_argv: # noqa: F841 entrypoint.start() output = mock_stdout.getvalue() response = json.loads(output) self.assertEqual(response["status"], http.HTTPStatus.BAD_REQUEST) body = json.loads(response["body"]) - self.assertEqual( - body["error"], "Invalid JSON in request" - ) + self.assertEqual(body["error"], "Invalid JSON in request") @vcr.use_cassette("fixtures/main_json_response.yaml") def test_json_response(self): @@ -114,13 +115,13 @@ def test_json_response(self): } output = None - with sdhome() as home, unittest.mock.patch( + with sdhome() as home, unittest.mock.patch( # noqa: F841 "sys.stdin", new_callable=lambda: io.StringIO(json.dumps(test_input)) - ) as mock_stding, unittest.mock.patch( + ) as mock_stding, unittest.mock.patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO ) as mock_stdout, unittest.mock.patch( "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv: + ) as mock_argv: # noqa: F841 entrypoint.start() output = mock_stdout.getvalue() diff --git a/tests/test_main.py b/tests/test_main.py index 05595187c..c4e10e230 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -16,20 +16,20 @@ class TestMain(unittest.TestCase): def setUp(self): self.conf = config.Conf() - self.conf.host = 'jsonplaceholder.typicode.com' - self.conf.scheme = 'https' + self.conf.host = "jsonplaceholder.typicode.com" + self.conf.scheme = "https" self.conf.port = 443 self.conf.dev = True - @vcr.use_cassette('fixtures/main_json_response.yaml') + @vcr.use_cassette("fixtures/main_json_response.yaml") def test_json_response(self): test_input_json = """{ "method": "GET", "path_query": "/posts?userId=1" }""" req = proxy.Req() - req.method = 'GET' - req.path_query = '' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "" + req.headers = {"Accept": "application/json"} # Use custom callbacks def on_save(res, fh, conf): @@ -51,10 +51,10 @@ def on_done(res): sys.stdout = saved_stdout response = json.loads(output) - for item in json.loads(response['body']): - self.assertEqual(item['userId'], 1) + for item in json.loads(response["body"]): + self.assertEqual(item["userId"], 1) - @vcr.use_cassette('fixtures/main_non_json_response.yaml') + @vcr.use_cassette("fixtures/main_non_json_response.yaml") def test_non_json_response(self): test_input_json = """{ "method": "GET", "path_query": "" }""" @@ -64,9 +64,9 @@ def on_save(fh, res, conf): subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.headers['Content-Type'] = 'application/json' - res.body = json.dumps({'filename': self.fn}) + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.headers["Content-Type"] = "application/json" + res.body = json.dumps({"filename": self.fn}) self.p = proxy.Proxy(self.conf, proxy.Req(), on_save) @@ -80,10 +80,10 @@ def on_save(fh, res, conf): sys.stdout = saved_stdout response = json.loads(output) - self.assertEqual(response['status'], 200) + self.assertEqual(response["status"], 200) # The proxy should have created a filename in the response body - self.assertIn('filename', response['body']) + self.assertIn("filename", response["body"]) # The file should not be empty with open("/tmp/{}".format(self.fn)) as f: @@ -100,7 +100,7 @@ def on_save(fh, res, conf): def on_done(res): res = res.__dict__ - self.assertEqual(res['status'], 400) + self.assertEqual(res["status"], 400) sys.exit(1) p = proxy.Proxy(self.conf, proxy.Req(), on_save, on_done) @@ -116,20 +116,20 @@ def on_save(fh, res, conf): def on_done(res): res = res.__dict__ - self.assertEqual(res['status'], 400) - self.assertEqual(res['body'], '{"error": "Missing keys in request"}') + self.assertEqual(res["status"], 400) + self.assertEqual(res["body"], '{"error": "Missing keys in request"}') sys.exit(1) p = proxy.Proxy(self.conf, proxy.Req(), on_save, on_done) with self.assertRaises(SystemExit): main.__main__(test_input_json, p) - @vcr.use_cassette('fixtures/main_input_headers.yaml') + @vcr.use_cassette("fixtures/main_input_headers.yaml") def test_input_headers(self): test_input = { "method": "GET", "path_query": "/posts?userId=1", - "headers": { "X-Test-Header": "th" } + "headers": {"X-Test-Header": "th"}, } def on_save(fh, res, conf): @@ -139,12 +139,12 @@ def on_save(fh, res, conf): main.__main__(json.dumps(test_input), p) self.assertEqual(p.req.headers, test_input["headers"]) - @vcr.use_cassette('fixtures/main_input_body.yaml') + @vcr.use_cassette("fixtures/main_input_body.yaml") def test_input_body(self): test_input = { "method": "POST", "path_query": "/posts", - "body": { "id": 42, "title": "test" } + "body": {"id": 42, "title": "test"}, } def on_save(fh, res, conf): @@ -154,7 +154,7 @@ def on_save(fh, res, conf): main.__main__(json.dumps(test_input), p) self.assertEqual(p.req.body, test_input["body"]) - @vcr.use_cassette('fixtures/main_non_json_response.yaml') + @vcr.use_cassette("fixtures/main_non_json_response.yaml") def test_default_callbacks(self): test_input = { "method": "GET", @@ -162,7 +162,11 @@ def test_default_callbacks(self): } p = proxy.Proxy(self.conf, proxy.Req()) - with unittest.mock.patch("securedrop_proxy.callbacks.on_done") as on_done, unittest.mock.patch("securedrop_proxy.callbacks.on_save") as on_save: + with unittest.mock.patch( + "securedrop_proxy.callbacks.on_done" + ) as on_done, unittest.mock.patch( + "securedrop_proxy.callbacks.on_save" + ) as on_save: main.__main__(json.dumps(test_input), p) self.assertEqual(on_save.call_count, 1) self.assertEqual(on_done.call_count, 1) From 97eed4b5341c27e37e395885c06c3f9380239efa Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 3 Jan 2020 14:43:00 +0530 Subject: [PATCH 318/751] Fixes mypy error on redefining attribute --- securedrop_proxy/proxy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index dcdcbc095..733d2ed78 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -35,14 +35,14 @@ def __init__(self, conf=None, req=Req(), on_save=None, on_done=None, timeout: fl self.req = req self.res = None self.on_save = on_save - if on_done is not None: + if on_done: self.on_done = on_done self.timeout = float(timeout) if timeout else 10 self._prepared_request = None - def on_done(self, res): + def on_done(self, res): # type: ignore callbacks.on_done(res) @staticmethod From ea20b684af146e817b449872cf5a48eee271ad4f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 7 Jan 2020 16:22:01 +0530 Subject: [PATCH 319/751] Restructures the code base with more object methods proxy.py Now, Proxy class gets a must conf_path argument, and it creates the inital `conf` attribute from that. Proxy also has default on_save and on_done and err_on_done methods. def handle_response(self) method has a `assert self.res` to mark that res is populated before this call. This is for mypy main.py Mostly has changes from black entrypoint.py No need for fancy dynamic err_call_back, the proxy object will call self.err_call_back if any issue in reading configuration. The test cases now have their own configuration files to create the proxy object. Also, to do proper dynamic attachment of any method of Proxy class we are using https://docs.python.org/3/library/types.html#types.MethodType so that our own on_save or on_done or err_on_done will be called during tests. --- securedrop_proxy/callbacks.py | 44 --- securedrop_proxy/config.py | 58 ---- securedrop_proxy/entrypoint.py | 52 ++-- securedrop_proxy/main.py | 33 +-- securedrop_proxy/proxy.py | 165 ++++++++++-- tests/files/badgateway-config.yaml | 5 + tests/files/invalid-config.yaml | 5 + tests/files/local-config.yaml | 5 + tests/test_callbacks.py | 129 --------- tests/test_config.py | 96 ------- tests/test_main.py | 96 ++++--- tests/test_proxy.py | 412 +++++++++++++++++++++-------- 12 files changed, 546 insertions(+), 554 deletions(-) delete mode 100644 securedrop_proxy/callbacks.py delete mode 100644 securedrop_proxy/config.py create mode 100644 tests/files/badgateway-config.yaml create mode 100644 tests/files/invalid-config.yaml create mode 100644 tests/files/local-config.yaml delete mode 100644 tests/test_callbacks.py delete mode 100644 tests/test_config.py diff --git a/securedrop_proxy/callbacks.py b/securedrop_proxy/callbacks.py deleted file mode 100644 index 0e890d21e..000000000 --- a/securedrop_proxy/callbacks.py +++ /dev/null @@ -1,44 +0,0 @@ -import os -import subprocess -import sys -import json -import tempfile -import uuid - - -def err_on_done(res): - print(json.dumps(res.__dict__)) - sys.exit(1) - - -# callback for handling non-JSON content. in production-like -# environments, we want to call `qvm-move-to-vm` (and expressly not -# `qvm-move`, since we want to include the destination VM name) to -# move the content to the target VM. for development and testing, we -# keep the file on the local VM. -# -# In any case, this callback mutates the given result object (in -# `res`) to include the name of the new file, or to indicate errors. -def on_save(fh, res, conf): - fn = str(uuid.uuid4()) - - try: - with tempfile.TemporaryDirectory() as tmpdir: - tmpfile = os.path.join(os.path.abspath(tmpdir), fn) - subprocess.run(["cp", fh.name, tmpfile]) - if conf.dev is not True: - subprocess.run(["qvm-move-to-vm", conf.target_vm, tmpfile]) - except Exception: - res.status = 500 - res.headers['Content-Type'] = 'application/json' - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.body = json.dumps({"error": "Unhandled error while handling non-JSON content, sorry"}) - return - - res.headers['Content-Type'] = 'application/json' - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.body = json.dumps({'filename': fn}) - - -def on_done(res): - print(json.dumps(res.__dict__)) diff --git a/securedrop_proxy/config.py b/securedrop_proxy/config.py deleted file mode 100644 index d82cdb459..000000000 --- a/securedrop_proxy/config.py +++ /dev/null @@ -1,58 +0,0 @@ -import os -import yaml - - -class Conf: - scheme = '' - host = '' - port = 0 - dev = False - - -def read_conf(conf_path, p): - - if not os.path.isfile(conf_path): - p.simple_error(500, 'Configuration file does not exist at {}'.format(conf_path)) - p.on_done(p.res) - - try: - fh = open(conf_path, 'r') - conf_in = yaml.safe_load(fh) - except yaml.YAMLError: - p.simple_error( - 500, "YAML syntax error while reading configuration file {}".format(conf_path) - ) - p.on_done(p.res) - except Exception: - p.simple_error( - 500, "Error while opening or reading configuration file {}".format(conf_path) - ) - p.on_done(p.res) - - req_conf_keys = set(('host', 'scheme', 'port')) - missing_keys = req_conf_keys - set(conf_in.keys()) - if len(missing_keys) > 0: - p.simple_error(500, 'Configuration file missing required keys: {}'.format(missing_keys)) - p.on_done(p.res) - - c = Conf() - c.host = conf_in['host'] - c.scheme = conf_in['scheme'] - c.port = conf_in['port'] - - if 'dev' in conf_in and conf_in['dev'] is True: - c.dev = True - else: - if "target_vm" not in conf_in: - p.simple_error( - 500, - ( - "Configuration file missing `target_vm` key, which is required " - "when not in development mode" - ), - ) - p.on_done(p.res) - - c.target_vm = conf_in['target_vm'] - - return c diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index fb0a8c1c0..cee130f17 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -14,76 +14,68 @@ from logging.handlers import TimedRotatingFileHandler -from securedrop_proxy import callbacks -from securedrop_proxy import config from securedrop_proxy import main from securedrop_proxy import proxy from securedrop_proxy.version import version DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_proxy") -LOGLEVEL = os.environ.get('LOGLEVEL', 'info').upper() +LOGLEVEL = os.environ.get("LOGLEVEL", "info").upper() -def start(): - ''' +def start() -> None: + """ Set up a new proxy object with an error handler, configuration that we read from argv[1], and the original user request from STDIN. - ''' + """ try: configure_logging() - logging.debug('Starting SecureDrop Proxy {}'.format(version)) - - # a fresh, new proxy object - p = proxy.Proxy() - - # set up an error handler early, so we can use it during - # configuration, etc - original_on_done = p.on_done - p.on_done = callbacks.err_on_done + logging.debug("Starting SecureDrop Proxy {}".format(version)) # path to config file must be at argv[1] if len(sys.argv) != 2: - raise ValueError("sd-proxy script not called with path to configuration file") + raise ValueError( + "sd-proxy script not called with path to configuration file" + ) - # read config. `read_conf` will call `p.on_done` if there is a config + # read config. `read_conf` will call `p.err_on_done` if there is a config # problem, and will return a Conf object on success. conf_path = sys.argv[1] - p.conf = config.read_conf(conf_path, p) + # a fresh, new proxy object + p = proxy.Proxy(conf_path=conf_path) # read user request from STDIN - incoming = [] + incoming_lines = [] for line in sys.stdin: - incoming.append(line) - incoming = "\n".join(incoming) + incoming_lines.append(line) + incoming = "\n".join(incoming_lines) - p.on_done = original_on_done main.__main__(incoming, p) except Exception as e: response = { "status": http.HTTPStatus.INTERNAL_SERVER_ERROR, - "body": json.dumps({ - "error": str(e), - }) + "body": json.dumps({"error": str(e)}), } print(json.dumps(response)) sys.exit(1) def configure_logging() -> None: - ''' + """ All logging related settings are set up by this function. - ''' + """ home = os.getenv("SECUREDROP_HOME", DEFAULT_HOME) - log_folder = os.path.join(home, 'logs') + log_folder = os.path.join(home, "logs") if not os.path.exists(log_folder): os.makedirs(log_folder) - log_file = os.path.join(home, 'logs', 'proxy.log') + log_file = os.path.join(home, "logs", "proxy.log") # set logging format - log_fmt = ('%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) %(levelname)s: %(message)s') + log_fmt = ( + "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) %(levelname)s: %(message)s" + ) formatter = logging.Formatter(log_fmt) # define log handlers such as for rotating log files diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index e67f158ce..69abf48d7 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -1,44 +1,45 @@ import json import logging +from typing import Dict, Any -from securedrop_proxy import callbacks from securedrop_proxy import proxy +from securedrop_proxy.proxy import Proxy + logger = logging.getLogger(__name__) -def __main__(incoming, p): - ''' +def __main__(incoming: str, p: Proxy) -> None: + """ Deserialize incoming request in order to build and send a proxy request. - ''' - logging.debug('Creating request to be sent by proxy') + """ + logging.debug("Creating request to be sent by proxy") - client_req = None + client_req: Dict[str, Any] = {} try: client_req = json.loads(incoming) except json.decoder.JSONDecodeError as e: logging.error(e) - p.simple_error(400, 'Invalid JSON in request') - p.on_done(p.res) + p.simple_error(400, "Invalid JSON in request") + p.on_done() return req = proxy.Req() try: - req.method = client_req['method'] - req.path_query = client_req['path_query'] + req.method = client_req["method"] + req.path_query = client_req["path_query"] except KeyError as e: logging.error(e) - p.simple_error(400, 'Missing keys in request') - p.on_done(p.res) + p.simple_error(400, "Missing keys in request") + p.on_done() if "headers" in client_req: - req.headers = client_req['headers'] + req.headers = client_req["headers"] if "body" in client_req: - req.body = client_req['body'] + req.body = client_req["body"] p.req = req - if not p.on_save: - p.on_save = callbacks.on_save + p.proxy() diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 733d2ed78..ab295548b 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -6,53 +6,158 @@ import tempfile import werkzeug +import os +import subprocess +import sys +import uuid +import yaml +from typing import Dict, Optional + import securedrop_proxy.version as version -from securedrop_proxy import callbacks +from tempfile import _TemporaryFileWrapper # type: ignore logger = logging.getLogger(__name__) +class Conf: + scheme = "" + host = "" + port = 0 + dev = False + target_vm = "" + + class Req: - def __init__(self): + def __init__(self) -> None: self.method = "" self.path_query = "" - self.body = None - self.headers = {} + self.body = "" + self.headers: Dict[str, str] = {} class Response: - def __init__(self, status): + def __init__(self, status: int) -> None: self.status = status - self.body = None - self.headers = {} + self.body = "" + self.headers: Dict[str, str] = {} self.version = version.version class Proxy: - def __init__(self, conf=None, req=Req(), on_save=None, on_done=None, timeout: float = None): - self.conf = conf - self.req = req - self.res = None - self.on_save = on_save - if on_done: - self.on_done = on_done + def __init__( + self, conf_path: str, req: Req = Req(), timeout: float = None, + ) -> None: + # The configuration path for Proxy is a must. + self.read_conf(conf_path) + self.req = req + self.res: Optional[Response] = None self.timeout = float(timeout) if timeout else 10 self._prepared_request = None - def on_done(self, res): # type: ignore - callbacks.on_done(res) + def on_done(self) -> None: + print(json.dumps(self.res.__dict__)) @staticmethod - def valid_path(path): + def valid_path(path: str) -> bool: u = furl.furl(path) if u.host is not None: return False return True + def err_on_done(self): + print(json.dumps(self.res.__dict__)) + sys.exit(1) + + def read_conf(self, conf_path: str) -> None: + + if not os.path.isfile(conf_path): + self.simple_error( + 500, "Configuration file does not exist at {}".format(conf_path) + ) + self.err_on_done() + + try: + with open(conf_path) as fh: + conf_in = yaml.safe_load(fh) + except yaml.YAMLError: + self.simple_error( + 500, + "YAML syntax error while reading configuration file {}".format( + conf_path + ), + ) + self.err_on_done() + except Exception: + self.simple_error( + 500, + "Error while opening or reading configuration file {}".format( + conf_path + ), + ) + self.err_on_done() + + req_conf_keys = set(("host", "scheme", "port")) + missing_keys = req_conf_keys - set(conf_in.keys()) + if len(missing_keys) > 0: + self.simple_error( + 500, "Configuration file missing required keys: {}".format(missing_keys) + ) + self.err_on_done() + + self.conf = Conf() + self.conf.host = conf_in["host"] + self.conf.scheme = conf_in["scheme"] + self.conf.port = conf_in["port"] + + if "dev" in conf_in and conf_in["dev"]: + self.conf.dev = True + else: + if "target_vm" not in conf_in: + self.simple_error( + 500, + ( + "Configuration file missing `target_vm` key, which is required " + "when not in development mode" + ), + ) + self.err_on_done() + + self.conf.target_vm = conf_in["target_vm"] + + # callback for handling non-JSON content. in production-like + # environments, we want to call `qvm-move-to-vm` (and expressly not + # `qvm-move`, since we want to include the destination VM name) to + # move the content to the target VM. for development and testing, we + # keep the file on the local VM. + # + # In any case, this callback mutates the given result object (in + # `res`) to include the name of the new file, or to indicate errors. + def on_save(self, fh: _TemporaryFileWrapper, res: Response) -> None: + fn = str(uuid.uuid4()) + + try: + with tempfile.TemporaryDirectory() as tmpdir: + tmpfile = os.path.join(os.path.abspath(tmpdir), fn) + subprocess.run(["cp", fh.name, tmpfile]) + if self.conf.dev is not True: + subprocess.run(["qvm-move-to-vm", self.conf.target_vm, tmpfile]) + except Exception: + res.status = 500 + res.headers["Content-Type"] = "application/json" + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.body = json.dumps( + {"error": "Unhandled error while handling non-JSON content, sorry"} + ) + return + + res.headers["Content-Type"] = "application/json" + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.body = json.dumps({"filename": fn}) + def simple_error(self, status, err): res = Response(status) res.body = json.dumps({"error": err}) @@ -60,7 +165,7 @@ def simple_error(self, status, err): self.res = res - def prep_request(self): + def prep_request(self) -> None: scheme = self.conf.scheme host = self.conf.host @@ -83,14 +188,13 @@ def prep_request(self): url.path.normalize() preq = requests.Request(method, url.url) - preq.stream = True preq.headers = self.req.headers preq.data = self.req.body prep = preq.prepare() self._prepared_request = prep - def handle_json_response(self): + def handle_json_response(self) -> None: res = Response(self._presp.status_code) @@ -114,11 +218,11 @@ def handle_non_json_response(self): res.headers = self._presp.headers - self.on_save(fh, res, self.conf) + self.on_save(fh, res) self.res = res - def handle_response(self): + def handle_response(self) -> None: logger.debug("Handling response") ctype = werkzeug.http.parse_options_header(self._presp.headers["content-type"]) @@ -128,11 +232,14 @@ def handle_response(self): else: self.handle_non_json_response() + # https://mypy.readthedocs.io/en/latest/kinds_of_types.html#union-types + # To make sure that mypy knows the type of self.res is not None. + assert self.res # headers is a Requests class which doesn't JSON serialize. # coerce it into a normal dict so it will self.res.headers = dict(self.res.headers) - def proxy(self): + def proxy(self) -> None: try: if not self.on_save: @@ -162,13 +269,15 @@ def proxy(self): requests.exceptions.TooManyRedirects, ) as e: logger.error(e) - self.simple_error(http.HTTPStatus.BAD_GATEWAY, "could not connect to server") + self.simple_error( + http.HTTPStatus.BAD_GATEWAY, "could not connect to server" + ) except requests.exceptions.HTTPError as e: logger.error(e) try: self.simple_error( e.response.status_code, - http.HTTPStatus(e.response.status_code).phrase.lower() + http.HTTPStatus(e.response.status_code).phrase.lower(), ) except ValueError: # Return a generic error message when the response @@ -176,5 +285,7 @@ def proxy(self): self.simple_error(e.response.status_code, "unspecified server error") except Exception as e: logger.error(e) - self.simple_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, "internal proxy error") - self.on_done(self.res) + self.simple_error( + http.HTTPStatus.INTERNAL_SERVER_ERROR, "internal proxy error" + ) + self.on_done() diff --git a/tests/files/badgateway-config.yaml b/tests/files/badgateway-config.yaml new file mode 100644 index 000000000..89396443c --- /dev/null +++ b/tests/files/badgateway-config.yaml @@ -0,0 +1,5 @@ +host: sdproxytest.local +scheme: https +port: 8000 +target_vm: compost +dev: False diff --git a/tests/files/invalid-config.yaml b/tests/files/invalid-config.yaml new file mode 100644 index 000000000..1338eefc3 --- /dev/null +++ b/tests/files/invalid-config.yaml @@ -0,0 +1,5 @@ +host: jsonplaceholder.typicode.com +scheme: https://http +port: 443 +target_vm: compost +dev: False diff --git a/tests/files/local-config.yaml b/tests/files/local-config.yaml new file mode 100644 index 000000000..7bd20fc78 --- /dev/null +++ b/tests/files/local-config.yaml @@ -0,0 +1,5 @@ +host: localhost +scheme: http +port: 8000 +target_vm: compost +dev: False diff --git a/tests/test_callbacks.py b/tests/test_callbacks.py deleted file mode 100644 index 83c861ba6..000000000 --- a/tests/test_callbacks.py +++ /dev/null @@ -1,129 +0,0 @@ -from io import StringIO -import json -import sys -import tempfile -import unittest -from unittest.mock import patch - -import vcr - -from securedrop_proxy import callbacks -from securedrop_proxy import config -from securedrop_proxy import proxy - - -class TestCallbacks(unittest.TestCase): - def setUp(self): - self.res = proxy.Response(status=200) - self.res.body = "babbys request" - - self.conf = config.Conf() - self.conf.host = 'jsonplaceholder.typicode.com' - self.conf.scheme = 'https' - self.conf.port = 443 - self.conf.dev = True - - def test_err_on_done(self): - saved_stdout = sys.stdout - try: - out = StringIO() - sys.stdout = out - with self.assertRaises(SystemExit): - callbacks.err_on_done(self.res) - output = out.getvalue().strip() - finally: - sys.stdout = saved_stdout - - response = json.loads(output) - self.assertEqual(response['status'], 200) - self.assertEqual(response['body'], 'babbys request') - - def test_on_done(self): - saved_stdout = sys.stdout - try: - out = StringIO() - sys.stdout = out - callbacks.on_done(self.res) - output = out.getvalue().strip() - finally: - sys.stdout = saved_stdout - - response = json.loads(output) - self.assertEqual(response['status'], 200) - self.assertEqual(response['body'], 'babbys request') - - def test_on_save_500_unhandled_error(self): - fh = tempfile.NamedTemporaryFile() - - # Let's generate an error and ensure that an appropriate response - # is sent back to the user - with patch("subprocess.run", side_effect=IOError): - callbacks.on_save(fh, self.res, self.conf) - - self.assertEqual(self.res.status, 500) - self.assertEqual(self.res.headers['Content-Type'], - 'application/json') - self.assertEqual(self.res.headers['X-Origin-Content-Type'], - 'application/json') - self.assertIn('Unhandled error', self.res.body) - - def test_on_save_200_success(self): - fh = tempfile.NamedTemporaryFile() - - callbacks.on_save(fh, self.res, self.conf) - - self.assertEqual(self.res.headers['Content-Type'], - 'application/json') - self.assertEqual(self.res.headers['X-Origin-Content-Type'], - 'application/json') - self.assertEqual(self.res.status, 200) - self.assertIn('filename', self.res.body) - - @vcr.use_cassette("fixtures/proxy_callbacks.yaml") - def test_custom_callbacks(self): - """ - Test the handlers in a real proxy request. - """ - conf = config.Conf() - conf.host = 'jsonplaceholder.typicode.com' - conf.scheme = 'https' - conf.port = 443 - - req = proxy.Req() - req.method = "GET" - - on_save_addition = "added by the on_save callback\n" - on_done_addition = "added by the on_done callback\n" - - def on_save(fh, res, conf): - res.headers['Content-Type'] = 'text/plain' - res.body = on_save_addition - - def on_done(res): - res.headers['Content-Type'] = 'text/plain' - res.body += on_done_addition - - p = proxy.Proxy(self.conf, req, on_save=on_save, on_done=on_done) - p.proxy() - - self.assertEqual( - p.res.body, - "{}{}".format(on_save_addition, on_done_addition) - ) - - @vcr.use_cassette("fixtures/proxy_callbacks.yaml") - def test_production_on_save(self): - """ - Test on_save's production file handling. - """ - conf = config.Conf() - conf.host = 'jsonplaceholder.typicode.com' - conf.scheme = 'https' - conf.port = 443 - conf.dev = False - conf.target_vm = "sd-svs-dispvm" - - with patch("subprocess.run") as patched_run: - fh = tempfile.NamedTemporaryFile() - callbacks.on_save(fh, self.res, conf) - self.assertEqual(patched_run.call_args[0][0][0], "qvm-move-to-vm") diff --git a/tests/test_config.py b/tests/test_config.py deleted file mode 100644 index 0ae93eab9..000000000 --- a/tests/test_config.py +++ /dev/null @@ -1,96 +0,0 @@ -import sys -import unittest -from unittest.mock import patch - -from securedrop_proxy import proxy -from securedrop_proxy import config - - -class TestConfig(unittest.TestCase): - def setUp(self): - self.p = proxy.Proxy() - - def test_config_file_does_not_exist(self): - def err_on_done(res): - res = res.__dict__ - self.assertEqual(res['status'], 500) - self.assertIn("Configuration file does not exist", - res['body']) - self.assertEqual(res['headers']['Content-Type'], - 'application/json') - sys.exit(1) - - self.p.on_done = err_on_done - with self.assertRaises(SystemExit): - config.read_conf('not/a/real/path', self.p) - - def test_config_file_when_yaml_is_invalid(self): - def err_on_done(res): - res = res.__dict__ - self.assertEqual(res['status'], 500) - self.assertIn("YAML syntax error", res['body']) - self.assertEqual(res['headers']['Content-Type'], - 'application/json') - sys.exit(1) - - self.p.on_done = err_on_done - with self.assertRaises(SystemExit): - config.read_conf('tests/files/invalid_yaml.yaml', self.p) - - def test_config_file_open_generic_exception(self): - def err_on_done(res): - res = res.__dict__ - self.assertEqual(res['status'], 500) - self.assertEqual(res['headers']['Content-Type'], - 'application/json') - sys.exit(1) - - self.p.on_done = err_on_done - - with self.assertRaises(SystemExit): - # Patching open so that we can simulate a non-YAML error - # (e.g. permissions) - with patch("builtins.open", side_effect=IOError): - config.read_conf('tests/files/valid-config.yaml', self.p) - - def test_config_has_valid_keys(self): - c = config.read_conf('tests/files/valid-config.yaml', self.p) - - # Verify we have a valid Conf object - self.assertEqual(c.host, 'jsonplaceholder.typicode.com') - self.assertEqual(c.port, 443) - self.assertFalse(c.dev) - self.assertEqual(c.scheme, 'https') - self.assertEqual(c.target_vm, 'compost') - - def test_config_500_when_missing_a_required_key(self): - def err_on_done(res): - res = res.__dict__ - self.assertEqual(res['status'], 500) - self.assertIn("missing required keys", res['body']) - self.assertEqual(res['headers']['Content-Type'], - 'application/json') - sys.exit(1) - - self.p.on_done = err_on_done - - with self.assertRaises(SystemExit): - config.read_conf('tests/files/missing-key.yaml', self.p) - - def test_config_500_when_missing_target_vm(self): - def err_on_done(res): - res = res.__dict__ - self.assertEqual(res['status'], 500) - self.assertIn("missing `target_vm` key", res['body']) - self.assertEqual(res['headers']['Content-Type'], - 'application/json') - sys.exit(1) - - self.p.on_done = err_on_done - - with self.assertRaises(SystemExit): - config.read_conf('tests/files/missing-target-vm.yaml', self.p) - - def test_dev_config(self): - c = config.read_conf('tests/files/dev-config.yaml', self.p) - self.assertTrue(c.dev) diff --git a/tests/test_main.py b/tests/test_main.py index c4e10e230..19bc4e5a8 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -5,21 +5,17 @@ import sys import unittest import uuid +import types import vcr -from securedrop_proxy import config from securedrop_proxy import main from securedrop_proxy import proxy class TestMain(unittest.TestCase): def setUp(self): - self.conf = config.Conf() - self.conf.host = "jsonplaceholder.typicode.com" - self.conf.scheme = "https" - self.conf.port = 443 - self.conf.dev = True + self.conf_path = "tests/files/valid-config.yaml" @vcr.use_cassette("fixtures/main_json_response.yaml") def test_json_response(self): @@ -32,14 +28,19 @@ def test_json_response(self): req.headers = {"Accept": "application/json"} # Use custom callbacks - def on_save(res, fh, conf): + def on_save(self, fh, res): pass - def on_done(res): - self.assertEqual(res.status, http.HTTPStatus.OK) - print(json.dumps(res.__dict__)) + def on_done(self): + assert self.res.status == http.HTTPStatus.OK + print(json.dumps(self.res.__dict__)) - self.p = proxy.Proxy(self.conf, req, on_save, on_done) + self.p = proxy.Proxy(self.conf_path, req) + + # Patching on_save and on_done + + self.p.on_done = types.MethodType(on_done, self.p) + self.p.on_save = types.MethodType(on_save, self.p) saved_stdout = sys.stdout try: @@ -59,8 +60,7 @@ def test_non_json_response(self): test_input_json = """{ "method": "GET", "path_query": "" }""" - def on_save(fh, res, conf): - self.fn = str(uuid.uuid4()) + def on_save(self, fh, res): subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) @@ -68,7 +68,11 @@ def on_save(fh, res, conf): res.headers["Content-Type"] = "application/json" res.body = json.dumps({"filename": self.fn}) - self.p = proxy.Proxy(self.conf, proxy.Req(), on_save) + self.p = proxy.Proxy(self.conf_path, proxy.Req()) + + # Patching on_save to tests + self.p.on_save = types.MethodType(on_save, self.p) + self.p.fn = str(uuid.uuid4()) saved_stdout = sys.stdout try: @@ -86,7 +90,7 @@ def on_save(fh, res, conf): self.assertIn("filename", response["body"]) # The file should not be empty - with open("/tmp/{}".format(self.fn)) as f: + with open("/tmp/{}".format(self.p.fn)) as f: saved_file = f.read() # We expect HTML content in the file from the test data @@ -95,15 +99,20 @@ def on_save(fh, res, conf): def test_input_invalid_json(self): test_input_json = """"foo": "bar", "baz": "bliff" }""" - def on_save(fh, res, conf): + def on_save(self, fh, res): pass - def on_done(res): - res = res.__dict__ - self.assertEqual(res["status"], 400) + def on_done(self): + res = self.res.__dict__ + assert res["status"] == 400 sys.exit(1) - p = proxy.Proxy(self.conf, proxy.Req(), on_save, on_done) + p = proxy.Proxy(self.conf_path, proxy.Req()) + + # patching on_save and on_done for tests + + p.on_done = types.MethodType(on_done, p) + p.on_save = types.MethodType(on_save, p) with self.assertRaises(SystemExit): main.__main__(test_input_json, p) @@ -111,16 +120,22 @@ def on_done(res): def test_input_missing_keys(self): test_input_json = """{ "foo": "bar", "baz": "bliff" }""" - def on_save(fh, res, conf): + def on_save(self, fh, res): pass - def on_done(res): - res = res.__dict__ - self.assertEqual(res["status"], 400) - self.assertEqual(res["body"], '{"error": "Missing keys in request"}') + def on_done(self): + res = self.res.__dict__ + assert res["status"] == 400 + assert res["body"] == '{"error": "Missing keys in request"}', res sys.exit(1) - p = proxy.Proxy(self.conf, proxy.Req(), on_save, on_done) + p = proxy.Proxy(self.conf_path, proxy.Req()) + + # patching on_save and on_done for tests + + p.on_done = types.MethodType(on_done, p) + p.on_save = types.MethodType(on_save, p) + with self.assertRaises(SystemExit): main.__main__(test_input_json, p) @@ -132,10 +147,10 @@ def test_input_headers(self): "headers": {"X-Test-Header": "th"}, } - def on_save(fh, res, conf): + def on_save(self, fh, res): pass - p = proxy.Proxy(self.conf, proxy.Req(), on_save) + p = proxy.Proxy(self.conf_path, proxy.Req()) main.__main__(json.dumps(test_input), p) self.assertEqual(p.req.headers, test_input["headers"]) @@ -147,10 +162,15 @@ def test_input_body(self): "body": {"id": 42, "title": "test"}, } - def on_save(fh, res, conf): + def on_save(self, fh, res): pass - p = proxy.Proxy(self.conf, proxy.Req(), on_save) + p = proxy.Proxy(self.conf_path, proxy.Req()) + + # Patching on_save for tests + + p.on_save = types.MethodType(on_save, p) + main.__main__(json.dumps(test_input), p) self.assertEqual(p.req.body, test_input["body"]) @@ -161,12 +181,10 @@ def test_default_callbacks(self): "path_query": "", } - p = proxy.Proxy(self.conf, proxy.Req()) - with unittest.mock.patch( - "securedrop_proxy.callbacks.on_done" - ) as on_done, unittest.mock.patch( - "securedrop_proxy.callbacks.on_save" - ) as on_save: - main.__main__(json.dumps(test_input), p) - self.assertEqual(on_save.call_count, 1) - self.assertEqual(on_done.call_count, 1) + p = proxy.Proxy(self.conf_path, proxy.Req()) + p.on_done = unittest.mock.MagicMock() + p.on_save = unittest.mock.MagicMock() + + main.__main__(json.dumps(test_input), p) + self.assertEqual(p.on_save.call_count, 1) + self.assertEqual(p.on_done.call_count, 1) diff --git a/tests/test_proxy.py b/tests/test_proxy.py index bc73b0589..410a0738c 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -1,184 +1,158 @@ +import sys import http import json import unittest import uuid +import types +from io import StringIO +import tempfile +from unittest.mock import patch import requests import vcr -from securedrop_proxy import callbacks from securedrop_proxy import proxy -from securedrop_proxy import config from securedrop_proxy import version class TestProxyValidConfig(unittest.TestCase): def setUp(self): - self.conf = config.Conf() - self.conf.host = 'jsonplaceholder.typicode.com' - self.conf.scheme = 'https' - self.conf.port = 443 + self.conf_path = "tests/files/valid-config.yaml" - def on_save(self, fh, res, conf): - self.fn = str(uuid.uuid4()) - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.headers['Content-Type'] = 'application/json' - res.body = json.dumps({'filename': self.fn}) + def on_save(self, fh, res): + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.headers["Content-Type"] = "application/json" + res.body = json.dumps({"filename": self.fn}) def on_done(self, res): - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.headers['Content-Type'] = 'application/json' + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.headers["Content-Type"] = "application/json" def test_version(self): req = proxy.Req() - req.method = 'GET' - req.path_query = '' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "" + req.headers = {"Accept": "application/json"} - p = proxy.Proxy() + p = proxy.Proxy(self.conf_path) p.proxy() self.assertEqual(p.res.version, version.version) - def test_400_if_callback_not_set(self): - req = proxy.Req() - req.method = 'GET' - req.path_query = '' - req.headers = {'Accept': 'application/json'} - - p = proxy.Proxy() - p.proxy() - - self.assertEqual(p.res.status, 400) - - @vcr.use_cassette('fixtures/basic_proxy_functionality.yaml') + @vcr.use_cassette("fixtures/basic_proxy_functionality.yaml") def test_proxy_basic_functionality(self): req = proxy.Req() - req.method = 'GET' - req.path_query = '' - req.headers = {'Accept': 'application/json'} - - p = proxy.Proxy(self.conf, req, self.on_save) + req.method = "GET" + req.path_query = "" + req.headers = {"Accept": "application/json"} + + def on_save(self, fh, res): + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.headers["Content-Type"] = "application/json" + res.body = json.dumps({"filename": self.fn}) + + p = proxy.Proxy(self.conf_path, req) + # Patching on_save for test + p.on_save = types.MethodType(on_save, p) + p.fn = str(uuid.uuid4()) p.proxy() self.assertEqual(p.res.status, 200) - self.assertEqual(p.res.body, json.dumps({'filename': self.fn})) - self.assertEqual(p.res.headers['Content-Type'], 'application/json') + self.assertEqual(p.res.body, json.dumps({"filename": p.fn})) + self.assertEqual(p.res.headers["Content-Type"], "application/json") - @vcr.use_cassette('fixtures/proxy_404.yaml') + @vcr.use_cassette("fixtures/proxy_404.yaml") def test_proxy_produces_404(self): req = proxy.Req() - req.method = 'GET' - req.path_query = '/notfound' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "/notfound" + req.headers = {"Accept": "application/json"} + + p = proxy.Proxy(self.conf_path, req) - p = proxy.Proxy(self.conf, req) - p.on_save = self.on_save - p.on_done = self.on_done p.proxy() self.assertEqual(p.res.status, 404) - self.assertEqual(p.res.headers['Content-Type'], 'application/json') + self.assertEqual(p.res.headers["Content-Type"], "application/json") - @vcr.use_cassette('fixtures/proxy_parameters.yaml') + @vcr.use_cassette("fixtures/proxy_parameters.yaml") def test_proxy_handles_query_params_gracefully(self): req = proxy.Req() - req.method = 'GET' - req.path_query = '/posts?userId=1' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "/posts?userId=1" + req.headers = {"Accept": "application/json"} + + p = proxy.Proxy(self.conf_path, req) - p = proxy.Proxy(self.conf, req, self.on_save) p.proxy() self.assertEqual(p.res.status, 200) - self.assertIn('application/json', p.res.headers['Content-Type']) + self.assertIn("application/json", p.res.headers["Content-Type"]) body = json.loads(p.res.body) for item in body: - self.assertEqual(item['userId'], 1) + self.assertEqual(item["userId"], 1) # No cassette needed as no network request should be sent def test_proxy_400_bad_path(self): req = proxy.Req() - req.method = 'GET' - req.path_query = 'http://badpath.lol/path' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "http://badpath.lol/path" + req.headers = {"Accept": "application/json"} + + p = proxy.Proxy(self.conf_path, req) - p = proxy.Proxy(self.conf, req) - p.on_save = self.on_save - p.on_done = self.on_done p.proxy() self.assertEqual(p.res.status, 400) - self.assertEqual(p.res.headers['Content-Type'], 'application/json') - self.assertIn('Path provided in request did not look valid', - p.res.body) + self.assertEqual(p.res.headers["Content-Type"], "application/json") + self.assertIn("Path provided in request did not look valid", p.res.body) - @vcr.use_cassette('fixtures/proxy_200_valid_path.yaml') + @vcr.use_cassette("fixtures/proxy_200_valid_path.yaml") def test_proxy_200_valid_path(self): req = proxy.Req() - req.method = 'GET' - req.path_query = '/posts/1' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "/posts/1" + req.headers = {"Accept": "application/json"} + + p = proxy.Proxy(self.conf_path, req) - p = proxy.Proxy(self.conf, req, self.on_save) p.proxy() self.assertEqual(p.res.status, 200) - self.assertIn('application/json', p.res.headers['Content-Type']) + self.assertIn("application/json", p.res.headers["Content-Type"]) body = json.loads(p.res.body) - self.assertEqual(body['userId'], 1) - - # No cassette needed as no network request should be sent - def test_proxy_400_no_handler(self): - req = proxy.Req() - req.method = 'GET' - req.path_query = 'http://badpath.lol/path' - req.headers = {'Accept': 'application/json'} - - p = proxy.Proxy(self.conf, req) - p.proxy() - - self.assertEqual(p.res.status, 400) - self.assertEqual(p.res.headers['Content-Type'], 'application/json') - self.assertIn('Request on_save callback is not set', - p.res.body) + self.assertEqual(body["userId"], 1) class TestProxyInvalidConfig(unittest.TestCase): def setUp(self): - self.conf = config.Conf() - self.conf.host = 'jsonplaceholder.typicode.com' - self.conf.scheme = 'https://http' # bad - self.conf.port = 443 + self.conf_path = "tests/files/invalid-config.yaml" - def on_save(self, fh, res, conf): + def on_save(self, fh, res): self.fn = str(uuid.uuid4()) - res.headers['X-Origin-Content-Type'] = res.headers['Content-Type'] - res.headers['Content-Type'] = 'application/json' - res.body = json.dumps({'filename': self.fn}) + res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] + res.headers["Content-Type"] = "application/json" + res.body = json.dumps({"filename": self.fn}) # No cassette needed as no network request should be sent def test_proxy_500_misconfiguration(self): req = proxy.Req() - req.method = 'GET' - req.path_query = '/posts/1' - req.headers = {'Accept': 'application/json'} + req.method = "GET" + req.path_query = "/posts/1" + req.headers = {"Accept": "application/json"} + + p = proxy.Proxy(self.conf_path, req) - p = proxy.Proxy(self.conf, req, self.on_save) p.proxy() self.assertEqual(p.res.status, 500) - self.assertEqual(p.res.headers['Content-Type'], 'application/json') - self.assertIn('Proxy error while generating URL to request', - p.res.body) + self.assertEqual(p.res.headers["Content-Type"], "application/json") + self.assertIn("Proxy error while generating URL to request", p.res.body) class TestServerErrorHandling(unittest.TestCase): def setUp(self): - self.conf = config.Conf() - self.conf.host = "localhost" - self.conf.scheme = "http" - self.conf.port = 8000 + self.conf_path = "tests/files/local-config.yaml" def make_request(self, method="GET", path_query="/", headers=None): req = proxy.Req() @@ -193,12 +167,7 @@ def test_cannot_connect(self): """ req = self.make_request() - conf = config.Conf() - conf.host = "sdproxytest.local" - conf.scheme = "https" - conf.port = 8000 - - p = proxy.Proxy(conf, req, on_save=callbacks.on_save) + p = proxy.Proxy("tests/files/badgateway-config.yaml", req) p.proxy() self.assertEqual(p.res.status, http.HTTPStatus.BAD_GATEWAY) @@ -210,6 +179,7 @@ def test_server_timeout(self): """ Test for "504 Gateway Timeout" when the server times out. """ + class TimeoutProxy(proxy.Proxy): """ Mocks a slow upstream server. @@ -218,11 +188,12 @@ class TimeoutProxy(proxy.Proxy): long. This Proxy subclass raises the exception that would cause. """ + def prep_request(self): - raise requests.exceptions.Timeout('test timeout') + raise requests.exceptions.Timeout("test timeout") req = self.make_request(path_query="/tarpit") - p = TimeoutProxy(self.conf, req, on_save=callbacks.on_save, timeout=0.00001) + p = TimeoutProxy(self.conf_path, req, timeout=0.00001) p.proxy() self.assertEqual(p.res.status, http.HTTPStatus.GATEWAY_TIMEOUT) @@ -236,7 +207,7 @@ def test_bad_request(self): Test handling of "400 Bad Request" from the server. """ req = self.make_request(path_query="/bad") - p = proxy.Proxy(self.conf, req, on_save=callbacks.on_save) + p = proxy.Proxy(self.conf_path, req) p.proxy() self.assertEqual(p.res.status, http.HTTPStatus.BAD_REQUEST) @@ -254,7 +225,7 @@ def test_unofficial_status(self): proper JSON error response with a generic error message. """ req = self.make_request(path_query="/teapot") - p = proxy.Proxy(self.conf, req, on_save=callbacks.on_save) + p = proxy.Proxy(self.conf_path, req) p.proxy() self.assertEqual(p.res.status, 418) @@ -268,15 +239,14 @@ def test_internal_server_error(self): Test handling of "500 Internal Server Error" from the server. """ req = self.make_request(path_query="/crash") - p = proxy.Proxy(self.conf, req, on_save=callbacks.on_save) + p = proxy.Proxy(self.conf_path, req) p.proxy() self.assertEqual(p.res.status, http.HTTPStatus.INTERNAL_SERVER_ERROR) self.assertIn("application/json", p.res.headers["Content-Type"]) body = json.loads(p.res.body) self.assertEqual( - body["error"], - http.HTTPStatus.INTERNAL_SERVER_ERROR.phrase.lower() + body["error"], http.HTTPStatus.INTERNAL_SERVER_ERROR.phrase.lower() ) @vcr.use_cassette("fixtures/proxy_internal_error.yaml") @@ -284,14 +254,226 @@ def test_internal_error(self): """ Ensure that the proxy returns JSON despite internal errors. """ + def bad_on_save(self, fh, res, conf): raise Exception("test internal proxy error") req = self.make_request() - p = proxy.Proxy(self.conf, req, on_save=bad_on_save) + p = proxy.Proxy(self.conf_path, req) + + # Patching on_save for tests + p.on_save = types.MethodType(bad_on_save, p) p.proxy() self.assertEqual(p.res.status, http.HTTPStatus.INTERNAL_SERVER_ERROR) self.assertIn("application/json", p.res.headers["Content-Type"]) body = json.loads(p.res.body) self.assertEqual(body["error"], "internal proxy error") + + +class TestProxyMethods(unittest.TestCase): + def setUp(self): + self.res = proxy.Response(status=200) + self.res.body = "babbys request" + + self.conf_path = "tests/files/dev-config.yaml" + + def test_err_on_done(self): + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + with self.assertRaises(SystemExit): + p = proxy.Proxy(self.conf_path) + p.res = self.res + p.err_on_done() + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + self.assertEqual(response["status"], 200) + self.assertEqual(response["body"], "babbys request") + + def test_on_done(self): + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + p = proxy.Proxy(self.conf_path) + p.res = self.res + p.on_done() + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + response = json.loads(output) + self.assertEqual(response["status"], 200) + self.assertEqual(response["body"], "babbys request") + + def test_on_save_500_unhandled_error(self): + fh = tempfile.NamedTemporaryFile() + + # Let's generate an error and ensure that an appropriate response + # is sent back to the user + with patch("subprocess.run", side_effect=IOError): + p = proxy.Proxy(self.conf_path) + p.on_save(fh, self.res) + + self.assertEqual(self.res.status, 500) + self.assertEqual(self.res.headers["Content-Type"], "application/json") + self.assertEqual(self.res.headers["X-Origin-Content-Type"], "application/json") + self.assertIn("Unhandled error", self.res.body) + + def test_on_save_200_success(self): + fh = tempfile.NamedTemporaryFile() + + p = proxy.Proxy(self.conf_path) + p.on_save(fh, self.res) + + self.assertEqual(self.res.headers["Content-Type"], "application/json") + self.assertEqual(self.res.headers["X-Origin-Content-Type"], "application/json") + self.assertEqual(self.res.status, 200) + self.assertIn("filename", self.res.body) + + @vcr.use_cassette("fixtures/proxy_callbacks.yaml") + def test_custom_callbacks(self): + """ + Test the handlers in a real proxy request. + """ + conf = proxy.Conf() + conf.host = "jsonplaceholder.typicode.com" + conf.scheme = "https" + conf.port = 443 + + req = proxy.Req() + req.method = "GET" + + on_save_addition = "added by the on_save callback\n" + on_done_addition = "added by the on_done callback\n" + + def on_save(self, fh, res): + res.headers["Content-Type"] = "text/plain" + res.body = on_save_addition + + def on_done(self): + self.res.headers["Content-Type"] = "text/plain" + self.res.body += on_done_addition + + p = proxy.Proxy(self.conf_path, req) + # Patching for tests + p.conf = conf + p.on_done = types.MethodType(on_done, p) + p.on_save = types.MethodType(on_save, p) + p.proxy() + + self.assertEqual(p.res.body, "{}{}".format(on_save_addition, on_done_addition)) + + @vcr.use_cassette("fixtures/proxy_callbacks.yaml") + def test_production_on_save(self): + """ + Test on_save's production file handling. + """ + conf = proxy.Conf() + conf.host = "jsonplaceholder.typicode.com" + conf.scheme = "https" + conf.port = 443 + conf.dev = False + conf.target_vm = "sd-svs-dispvm" + + with patch("subprocess.run") as patched_run: + fh = tempfile.NamedTemporaryFile() + p = proxy.Proxy(self.conf_path) + # Patching for tests + p.conf = conf + p.on_save(fh, self.res) + self.assertEqual(patched_run.call_args[0][0][0], "qvm-move-to-vm") + + +class TestConfig(unittest.TestCase): + def setUp(self): + self.conf_path = "tests/files/dev-config.yaml" + + def test_config_file_does_not_exist(self): + def err_on_done(self): + res = self.res.__dict__ + assert res["status"] == 500 + assert "Configuration file does not exist" in res["body"] + assert res["headers"]["Content-Type"] == "application/json" + sys.exit(1) + + p = proxy.Proxy(self.conf_path) + p.err_on_done = types.MethodType(err_on_done, p) + with self.assertRaises(SystemExit): + p.read_conf("not/a/real/path") + + def test_config_file_when_yaml_is_invalid(self): + def err_on_done(self): + res = self.res.__dict__ + assert res["status"] == 500 + assert "YAML syntax error" in res["body"] + assert res["headers"]["Content-Type"] == "application/json" + sys.exit(1) + + p = proxy.Proxy(self.conf_path) + p.err_on_done = types.MethodType(err_on_done, p) + with self.assertRaises(SystemExit): + p.read_conf("tests/files/invalid_yaml.yaml") + + def test_config_file_open_generic_exception(self): + def err_on_done(self): + res = self.res.__dict__ + assert res["status"] == 500 + assert res["headers"]["Content-Type"] == "application/json" + sys.exit(1) + + p = proxy.Proxy(self.conf_path) + p.err_on_done = types.MethodType(err_on_done, p) + + with self.assertRaises(SystemExit): + # Patching open so that we can simulate a non-YAML error + # (e.g. permissions) + with patch("builtins.open", side_effect=IOError): + p.read_conf("tests/files/valid-config.yaml") + + def test_config_has_valid_keys(self): + p = proxy.Proxy("tests/files/valid-config.yaml") + + # Verify we have a valid Conf object + self.assertEqual(p.conf.host, "jsonplaceholder.typicode.com") + self.assertEqual(p.conf.port, 443) + self.assertFalse(p.conf.dev) + self.assertEqual(p.conf.scheme, "https") + self.assertEqual(p.conf.target_vm, "compost") + + def test_config_500_when_missing_a_required_key(self): + def err_on_done(self): + res = self.res.__dict__ + assert res["status"] == 500 + assert "missing required keys" in res["body"] + assert res["headers"]["Content-Type"] == "application/json" + sys.exit(1) + + p = proxy.Proxy(self.conf_path) + p.err_on_done = types.MethodType(err_on_done, p) + + with self.assertRaises(SystemExit): + p.read_conf("tests/files/missing-key.yaml") + + def test_config_500_when_missing_target_vm(self): + def err_on_done(self): + res = self.res.__dict__ + assert res["status"] == 500 + assert "missing `target_vm` key" in res["body"] + assert res["headers"]["Content-Type"] == "application/json" + sys.exit(1) + + p = proxy.Proxy(self.conf_path) + p.err_on_done = types.MethodType(err_on_done, p) + + with self.assertRaises(SystemExit): + p.read_conf("tests/files/missing-target-vm.yaml") + + def test_dev_config(self): + p = proxy.Proxy("tests/files/dev-config.yaml") + assert p.conf.dev From 51fd0cb74e7ccbbcb6aab0bbdb2cebd79d2b65e7 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 7 Jan 2020 16:38:34 +0530 Subject: [PATCH 320/751] Removes Stretch test and build in CI --- .circleci/config.yml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 76852d363..ac1812489 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -47,16 +47,6 @@ common-steps: version: 2 jobs: - build-stretch: - docker: - - image: circleci/python:3.5-stretch - steps: - - checkout - - *install_packaging_dependencies - - *verify_requirements - - *make_source_tarball - - *build_debian_package - build-buster: docker: - image: circleci/python:3.7-buster @@ -67,13 +57,6 @@ jobs: - *make_source_tarball - *build_debian_package - test-stretch: - docker: - - image: circleci/python:3.5-stretch - steps: - - checkout - - *run_tests - test-buster: docker: - image: circleci/python:3.7-buster @@ -85,7 +68,5 @@ workflows: version: 2 securedrop_proxy_ci: jobs: - - test-stretch - test-buster - - build-stretch - build-buster From 842a65999bafb9d706799661d4da4126a961e9d9 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 8 Jan 2020 14:53:58 -0500 Subject: [PATCH 321/751] Remove notify-send notification in securedrop-export Since we are now logging and aggregating logs, and that we are disabling notifications, this code is no longer required. --- securedrop_export/disk/actions.py | 1 - securedrop_export/export.py | 13 ------------- securedrop_export/print/actions.py | 4 +--- tests/test_export.py | 14 -------------- 4 files changed, 1 insertion(+), 31 deletions(-) diff --git a/securedrop_export/disk/actions.py b/securedrop_export/disk/actions.py index 02b09f2c3..072cb93fc 100644 --- a/securedrop_export/disk/actions.py +++ b/securedrop_export/disk/actions.py @@ -171,7 +171,6 @@ def copy_submission(self): logger.info('Copying file to {}'.format(self.submission.target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) logger.info('File copied successfully to {}'.format(self.submission.target_dirname)) - self.submission.popup_message("Files exported successfully to disk.") except (subprocess.CalledProcessError, OSError): self.submission.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) finally: diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 976b1bd13..dce797e6b 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -125,19 +125,6 @@ def safe_check_call(self, command, error_message): except subprocess.CalledProcessError as ex: self.exit_gracefully(msg=error_message, e=ex.output) - def popup_message(self, msg: str): - self.safe_check_call( - command=[ - "notify-send", - "--expire-time", - "3000", - "--icon", - "/usr/share/securedrop/icons/sd-logo.png", - "SecureDrop: {}".format(msg), - ], - error_message="Error sending notification:" - ) - class ExportAction(abc.ABC): """ diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index f58ff4cd0..d23725235 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -149,7 +149,6 @@ def setup_printer(self, printer_uri, printer_ppd): def print_test_page(self): logger.info('Printing test page') self.print_file("/usr/share/cups/data/testprint") - self.submission.popup_message("Printing test page") def print_all_files(self): files_path = os.path.join(self.submission.tmpdir, "export_data/") @@ -159,8 +158,7 @@ def print_all_files(self): file_path = os.path.join(files_path, f) self.print_file(file_path) print_count += 1 - msg = "Printing document {} of {}".format(print_count, len(files)) - self.submission.popup_message(msg) + logger.info("Printing document {} of {}".format(print_count, len(files))) def is_open_office_file(self, filename): OPEN_OFFICE_FORMATS = [ diff --git a/tests/test_export.py b/tests/test_export.py index 95665761f..a161e75ed 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -1,5 +1,3 @@ -from unittest import mock - import os import pytest import subprocess # noqa: F401 @@ -118,18 +116,6 @@ def test_valid_encryption_config(capsys): assert config.is_valid() -@mock.patch("subprocess.check_call") -def test_popup_message(mocked_call): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.popup_message("hello!") - mocked_call.assert_called_once_with([ - "notify-send", - "--expire-time", "3000", - "--icon", "/usr/share/securedrop/icons/sd-logo.png", - "SecureDrop: hello!" - ]) - - def test_safe_check_call(capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) submission.safe_check_call(['ls'], "this will work") From c17bac9730d1ec515d5d89c47d7934949a277605 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 7 Jan 2020 19:09:39 +0530 Subject: [PATCH 322/751] Adds minimal type annotation --- securedrop_proxy/proxy.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index ab295548b..8af6862be 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -46,16 +46,16 @@ def __init__(self, status: int) -> None: class Proxy: def __init__( - self, conf_path: str, req: Req = Req(), timeout: float = None, + self, conf_path: str, req: Req = Req(), timeout: float = 10.0 ) -> None: # The configuration path for Proxy is a must. self.read_conf(conf_path) self.req = req self.res: Optional[Response] = None - self.timeout = float(timeout) if timeout else 10 + self.timeout = float(timeout) - self._prepared_request = None + self._prepared_request: Optional[Req] = None def on_done(self) -> None: print(json.dumps(self.res.__dict__)) @@ -158,7 +158,7 @@ def on_save(self, fh: _TemporaryFileWrapper, res: Response) -> None: res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] res.body = json.dumps({"filename": fn}) - def simple_error(self, status, err): + def simple_error(self, status: int, err: str) -> None: res = Response(status) res.body = json.dumps({"error": err}) res.headers = {"Content-Type": "application/json"} @@ -203,7 +203,7 @@ def handle_json_response(self) -> None: self.res = res - def handle_non_json_response(self): + def handle_non_json_response(self) -> None: res = Response(self._presp.status_code) @@ -242,13 +242,10 @@ def handle_response(self) -> None: def proxy(self) -> None: try: - if not self.on_save: - self.simple_error( - http.HTTPStatus.BAD_REQUEST, "Request on_save callback is not set." - ) - raise ValueError("Request on_save callback is not set.") self.prep_request() + # To confirm that we have a prepared request before the proxy call + assert self._prepared_request logger.debug("Sending request") s = requests.Session() self._presp = s.send(self._prepared_request, timeout=self.timeout) From 9e2d0d332bee11f4a5ad9138b431a4c8627d41ae Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 15 Jan 2020 15:28:40 -0800 Subject: [PATCH 323/751] remove stretch test and use ssh for git --- .circleci/config.yml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ad0cbded6..02f7e1d1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,9 +20,10 @@ common-steps: name: Install Debian packaging dependencies and download wheels command: | mkdir ~/packaging && cd ~/packaging + git config --global --unset url.ssh://git@github.com.insteadof git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging - make install-deps && make fetch-wheels + make install-deps PKG_DIR=~/project make requirements - &verify_requirements @@ -72,14 +73,6 @@ jobs: source .venv/bin/activate make safety - test-stretch: - docker: - - image: circleci/python:3.5-stretch - steps: - - checkout - - *install_packages - - *run_tests - test-buster: docker: - image: circleci/python:3.7-buster @@ -103,6 +96,5 @@ workflows: securedrop_export_ci: jobs: - lint - - test-stretch - test-buster - build-buster From 6dc3b1455836cba56255e38dc651c3f196272cd6 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 16 Jan 2020 16:44:13 +0530 Subject: [PATCH 324/751] Fixes CI for git-lfs based package builds --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ac1812489..d47571379 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,9 +14,10 @@ common-steps: name: Install Debian packaging dependencies and download wheels command: | mkdir ~/packaging && cd ~/packaging + git config --global --unset url.ssh://git@github.com.insteadof git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging - make install-deps && make fetch-wheels + make install-deps PKG_DIR=~/project make requirements - &verify_requirements From 1d3b75c947faa35e00de90b7898e3bf628ca377f Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Tue, 14 Jan 2020 17:40:59 -0800 Subject: [PATCH 325/751] VM rename per https://github.com/freedomofpress/securedrop-workstation/issues/285 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d097a2c5..8b28f6d24 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ The supported device types for export are as follows, including the possible err - `USB_CHECK_ERROR` if an error occurred during pre-flight 2. `disk-test`: Preflight check that checks for LUKS-encrypted volume that returns: - - `USB_ENCRYPTED` if a LUKS volume is attached to sd-export + - `USB_ENCRYPTED` if a LUKS volume is attached to sd-devices - `USB_ENCRYPTION_NOT_SUPPORTED` if a LUKS volume is not attached or there was any other error - `USB_DISK_ERROR` From c6c1dbe74330add1826a56e540d66b49402252c6 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Tue, 14 Jan 2020 17:43:03 -0800 Subject: [PATCH 326/751] VM rename per https://github.com/freedomofpress/securedrop-workstation/issues/285 --- tests/test_proxy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 410a0738c..f4cd56038 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -379,7 +379,7 @@ def test_production_on_save(self): conf.scheme = "https" conf.port = 443 conf.dev = False - conf.target_vm = "sd-svs-dispvm" + conf.target_vm = "sd-viewer" with patch("subprocess.run") as patched_run: fh = tempfile.NamedTemporaryFile() From d3bd8ee57ecfedf1928b44b4d1a40555f011225f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 14 Jan 2020 15:52:53 -0800 Subject: [PATCH 327/751] add start-vm and printer-preflight check --- securedrop_export/entrypoint.py | 3 +- securedrop_export/exceptions.py | 1 + securedrop_export/export.py | 2 ++ securedrop_export/main.py | 8 ++++- securedrop_export/print/actions.py | 52 ++++++++++++++++++++++++------ 5 files changed, 54 insertions(+), 12 deletions(-) diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index ed1d69bb1..d19bbbed1 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -58,8 +58,9 @@ def start(): main.__main__(my_sub) # Delete extracted achive from tempfile shutil.rmtree(my_sub.tmpdir) - except Exception: + except Exception as e: # exit with 0 return code otherwise the os will attempt to open # the file with another application + logger.error(e) msg = "ERROR_GENERIC" my_sub.exit_gracefully(msg) diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index 1c14bc684..e144a1684 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -22,6 +22,7 @@ class ExportStatus(Enum): USB_DISK_ERROR = 'USB_DISK_ERROR' # Printer preflight related errors + ERROR_MULTIPLE_PRINTERS_FOUND = 'ERROR_MULTIPLE_PRINTERS_FOUND' ERROR_PRINTER_NOT_FOUND = 'ERROR_PRINTER_NOT_FOUND' ERROR_PRINTER_NOT_SUPPORTED = 'ERROR_PRINTER_NOT_SUPPORTED' ERROR_PRINTER_DRIVER_UNAVAILABLE = 'ERROR_PRINTER_DRIVER_UNAVAILABLE' diff --git a/securedrop_export/export.py b/securedrop_export/export.py index dce797e6b..814a034df 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -23,11 +23,13 @@ class Metadata(object): METADATA_FILE = "metadata.json" SUPPORTED_EXPORT_METHODS = [ + "start-vm", "usb-test", # general preflight check "disk", "disk-test", # disk preflight test "printer", "printer-test", # print test page + "printer-preflight" ] SUPPORTED_ENCRYPTION_METHODS = ["luks"] diff --git a/securedrop_export/main.py b/securedrop_export/main.py index b68dce170..bbdb25f68 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -2,7 +2,8 @@ from securedrop_export import export from securedrop_export.exceptions import ExportStatus -from securedrop_export.print.actions import PrintExportAction, PrintTestPageAction +from securedrop_export.print.actions import PrintExportAction, PrintTestPageAction, \ + PrintPreflightAction from securedrop_export.disk.actions import DiskTestAction, DiskExportAction, USBTestAction logger = logging.getLogger(__name__) @@ -19,12 +20,17 @@ def __main__(submission): if not submission.archive_metadata.is_valid(): submission.exit_gracefully(ExportStatus.ERROR_ARCHIVE_METADATA.value) + if submission.archive_metadata.export_method == "start-vm": + submission.exit_gracefully('') + if submission.archive_metadata.export_method == "usb-test": action = USBTestAction(submission) elif submission.archive_metadata.export_method == "disk": action = DiskExportAction(submission) elif submission.archive_metadata.export_method == "disk-test": action = DiskTestAction(submission) + elif submission.archive_metadata.export_method == "printer-preflight": + action = PrintPreflightAction(submission) elif submission.archive_metadata.export_method == "printer": action = PrintExportAction(submission) elif submission.archive_metadata.export_method == "printer-test": diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index d23725235..9f2a02625 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -50,6 +50,36 @@ def wait_for_print(self): self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) return True + def check_printer_setup(self) -> None: + try: + logger.info('Searching for printer') + output = subprocess.check_output(["sudo", "lpinfo", "-v"]) + printers = [x for x in output.decode('utf-8').split() if "usb://" in x] + if not printers: + logger.info('No usb printers connected') + self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) + + supported_printers = \ + [p for p in printers if any(sub in p for sub in ("Brother", "LaserJet"))] + if not supported_printers: + logger.info('{} are unsupported printers'.format(printers)) + self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + + if len(supported_printers) > 1: + logger.info('Too many usb printers connected') + self.submission.exit_gracefully(ExportStatus.ERROR_MULTIPLE_PRINTERS_FOUND.value) + + printer_uri = printers[0] + + logger.info('Installing printer drivers') + printer_ppd = self.install_printer_ppd(printer_uri) + + logger.info('Setting up printer') + self.setup_printer(printer_uri, printer_ppd) + except subprocess.CalledProcessError as e: + logger.error(e) + self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) + def get_printer_uri(self): # Get the URI via lpinfo and only accept URIs of supported printers printer_uri = "" @@ -204,14 +234,8 @@ def __init__(self, *args, **kwargs): def run(self): logger.info('Export archive is printer') + self.check_printer_setup() # prints all documents in the archive - logger.info('Searching for printer') - printer_uri = self.get_printer_uri() - logger.info('Installing printer drivers') - printer_ppd = self.install_printer_ppd(printer_uri) - logger.info('Setting up printer') - self.setup_printer(printer_uri, printer_ppd) - logger.info('Printing files') self.print_all_files() @@ -220,8 +244,16 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): + logger.info('Export archive is printer-test') + self.check_printer_setup() # Prints a test page to ensure the printer is functional - printer_uri = self.get_printer_uri() - printer_ppd = self.install_printer_ppd(printer_uri) - self.setup_printer(printer_uri, printer_ppd) self.print_test_page() + + +class PrintPreflightAction(PrintAction): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + logger.info('Export archive is printer-preflight') + self.check_printer_setup() From a2c59172099f5b2eed2faf55569a34f85daf79bd Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 17 Jan 2020 12:36:07 -0800 Subject: [PATCH 328/751] only install drivers if needed --- securedrop_export/print/actions.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index 9f2a02625..41a47368f 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -120,17 +120,19 @@ def install_printer_ppd(self, uri): printer_driver = LASERJET_DRIVER printer_ppd = LASERJET_PPD - # Some drivers don't come with ppd files pre-compiled, we must compile them - self.submission.safe_check_call( - command=[ - "sudo", - "ppdc", - printer_driver, - "-d", - "/usr/share/cups/model/", - ], - error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value - ) + # Compile and install drivers that are not already installed + if not os.path.exists(printer_ppd): + self.submission.safe_check_call( + command=[ + "sudo", + "ppdc", + printer_driver, + "-d", + "/usr/share/cups/model/", + ], + error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value + ) + return printer_ppd def setup_printer(self, printer_uri, printer_ppd): From baae8c019dd40f66bc1bdc6fa7f6425bc9e0bbc6 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 20 Jan 2020 15:01:58 +0530 Subject: [PATCH 329/751] Adds logging to /var/log/syslog using rsyslog Also adds a new test to test configure_logging function call. --- securedrop_proxy/entrypoint.py | 15 ++++++++++++++- tests/test_entrypoint.py | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index cee130f17..dbd5fa4c9 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -11,8 +11,9 @@ import logging import os import sys +import platform -from logging.handlers import TimedRotatingFileHandler +from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_proxy import main from securedrop_proxy import proxy @@ -83,7 +84,19 @@ def configure_logging() -> None: handler.setFormatter(formatter) handler.setLevel(logging.DEBUG) + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" + + sysloghandler = SysLogHandler(address=syslog_file) + sysloghandler.setFormatter(formatter) + # set up primary log log = logging.getLogger() log.setLevel(LOGLEVEL) log.addHandler(handler) + + # add the secondard logger + log.addHandler(sysloghandler) diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py index 8a5b0eaf2..842cb866a 100644 --- a/tests/test_entrypoint.py +++ b/tests/test_entrypoint.py @@ -3,8 +3,10 @@ import io import json import os +import platform import tempfile import unittest.mock +from unittest.mock import patch import vcr from securedrop_proxy import entrypoint @@ -46,6 +48,22 @@ def test_missing_config(self): body["error"], "Configuration file does not exist at {}".format(config_path) ) + @patch("securedrop_proxy.entrypoint.logging") + @patch("securedrop_proxy.entrypoint.SysLogHandler") + @patch("securedrop_proxy.entrypoint.TimedRotatingFileHandler") + def test_configure_logging(self, mock_log_conf, mock_log_conf_sys, mock_logging): + with sdhome() as homedir: + mock_log_file = os.path.join(homedir, 'logs', 'proxy.log') + entrypoint.configure_logging() + mock_log_conf.assert_called_once_with(mock_log_file) + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" + mock_log_conf_sys.assert_called_once_with(address=syslog_file) + mock_logging.getLogger.assert_called_once_with() + def test_unwritable_log_folder(self): """ Tests a permission problem in `configure_logging`. From d06df800b8f9866af72561d8d3d55cf1252b071e Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 24 Jan 2020 17:12:28 -0500 Subject: [PATCH 330/751] build-requirements: update for production beta --- build-requirements.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/build-requirements.txt b/build-requirements.txt index 4b17af9f9..bcc35fca1 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -1,10 +1,10 @@ -certifi==2018.10.15 --hash=sha256:a5471c55b011bd45d6155f5c3629310c1d2f1e1a5a899b7e438a223343de583d -chardet==3.0.4 --hash=sha256:9f178988ca4c86e8a319b51aac1185b6fe5192328eb5a163c286f4bf50b7b3d8 -furl==2.0.0 --hash=sha256:cc0eb8998dcc7c5b58bc8625891a9ff563e2765e112024fa3d1e3521481de8b6 -idna==2.7 --hash=sha256:954e65e127d0433a352981f43f291a438423d5b385ebf643c70fd740e0634111 -orderedmultidict==1.0 --hash=sha256:25489716d76d2cc8aa656bfb00cd40b6ca29d5e11ccde0db60c2b46ad52bb40a -pyyaml==5.1 --hash=sha256:b8d80623e9d4e348c59ea726ce3032a2eb15abca6a48d3828362d11c6014a0a7 --hash=sha256:c6dec5d6ffa44a50d83b9c4e8df0443a0a87e4213ecf2e24fcae6ea991f3b0c0 -requests==2.20.0 --hash=sha256:2a539dd6af40a611f3b8eb3f99d3567781352ece1698b2fab42bf4c2218705b5 -six==1.11.0 --hash=sha256:4663c7a1dbed033cfb294f2d534bd6151c0698dc12ecabb4eaa3cb041d758528 -urllib3==1.24.3 --hash=sha256:028309393606e28e640e2031edd27eb969c94f9364b0871912608aaa8e66c96e -werkzeug==0.14.1 --hash=sha256:177ea4248bf0475cbc060edb35a0bdcf6e6daeac9e1296de5ddb3493e5ec15b9 +certifi==2018.10.15 --hash=sha256:173b19dd31ca7faa50d1fcc0eaf30f5e32e8e99e17d8c7fd4cfc8bc8d94e18a6 +chardet==3.0.4 --hash=sha256:f5632e583a4f61f1e16d0cc98127d241fb11c3c6ddfddee159307d4215186837 +furl==2.0.0 --hash=sha256:1855003e64dcb934556ad79994ba1a3a852da337e353d84d3b4ef75031913451 +idna==2.7 --hash=sha256:491f674364ba3232ed1eb4c1eb7407887f62cef6c300aad7df6e01acd88ffb25 +orderedmultidict==1.0 --hash=sha256:51efddca0b4ae6d885bbafd8ca44e51758166c144cf006dbead5c9394b2a9eae +pyyaml==5.1 --hash=sha256:59ff9ed67bd8be210f91fd20f0ef844ee897d11eb4c19c611a77a37896c124b9 +requests==2.20.0 --hash=sha256:d87b2085783d31d874ac7bc62660e287932aaee7059e80b41b76462eb18d35cc +six==1.11.0 --hash=sha256:aa4ad34049ddff178b533062797fd1db9f0038b7c5c2461a7cde2244300b9f3d +urllib3==1.24.3 --hash=sha256:3d440cbb168e2c963d5099232bdb3f7390bf031b6270dad1bc79751698a1399a +werkzeug==0.14.1 --hash=sha256:eb89d94f6e0d4d7b2efff64c56674dd73f21105fce3a0d6e9b650d780add2e11 From 542d6c3db6b35c1526570cb8a4fd9e9ed122ce9d Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 27 Jan 2020 18:08:17 +0530 Subject: [PATCH 331/751] Adds rsyslog based logging --- securedrop_export/entrypoint.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index d19bbbed1..a34c6dd25 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -2,8 +2,9 @@ import os import shutil import sys +import platform -from logging.handlers import TimedRotatingFileHandler +from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_export import __version__ from securedrop_export import export from securedrop_export import main @@ -31,12 +32,23 @@ def configure_logging(): handler = TimedRotatingFileHandler(log_file) handler.setFormatter(formatter) + + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" + + sysloghandler = SysLogHandler(address=syslog_file) + sysloghandler.setFormatter(formatter) handler.setLevel(logging.DEBUG) # set up primary log log = logging.getLogger() log.setLevel(logging.DEBUG) log.addHandler(handler) + # add the second logger + log.addHandler(sysloghandler) def start(): From 98188f190e364530a518444f6868a1bf62ca3aa8 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Tue, 28 Jan 2020 14:37:32 -0500 Subject: [PATCH 332/751] securedrop-proxy 0.1.6 --- changelog.md | 9 +++++++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 176c9a111..dcd7b8334 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,14 @@ # Changelog +## 0.1.6 + + * Fixes CI for git-lfs based package builds (#60) + * Rename VMs (#59) + * Restructures the code base with more object methods (#55) + * Add quality control tools (#54) + * Improve error handling, tests (#53) + * Adds buster packaging in CI (#52) + ## 0.1.5 * Update build-requirements.txt to include wheels for Buster diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 9faa1b7a7..c946ee616 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.1.5 +0.1.6 From d15d24e7f1accd1492e222125162d93ce7f6f21e Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Wed, 29 Jan 2020 14:04:58 -0800 Subject: [PATCH 333/751] Update description in README to mirror current implementation --- README.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8b28f6d24..9abfc7190 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ For all device types (described in detail below), the following standard error t - `ERROR_EXTRACTION`: Error while extracting the archive - `ERROR_METADATA_PARSING`: The metadata.json file cannot be correctly parsed - `ERROR_ARCHIVE_METADATA`: The metadata failed the check -- `ERROR_USB_CONFIGURATION`: There is no USB controller attached to the VM, the dom0 configuration (in `config.json`) or USB device identifier is is misconfigured +- `ERROR_USB_CONFIGURATION`: There is no USB controller attached to the VM - `ERROR_GENERIC`: An uncaught (unexpected) error somewhere in the script. These should not happen unless the code improperly handles errors The supported device types for export are as follows, including the possible errors specific to that device type: @@ -134,22 +134,31 @@ The supported device types for export are as follows, including the possible err ### Export Folder Structure -When exporting to a USB drive (using the disk device in metadata.json), the files will be placed on the drive as follows: The root of the USB drive will contain one folder per source, reflecting their source codename in the client. Documents or messages exported will be copied to that directory, preserving the filename from the server. In case a same file is exported twice, a confirmation window replace/rename/abort. +When exporting to a USB drive, the files will be placed on the drive as follows: The root of the USB drive will contain one `sd-export-[timestamp]` folder, where `[timestamp]` is in the format `YYYYMMDD-hhmmss`. This folder will contain a subfolder `export_data`, which will contain the exported file with its original name as submitted by the source. For example: + +``` +. + +└── sd-export-20200116-003153 + └── export_data + └── secret_memo.pdf +``` + +To support multiple files, in the long term, we are planning to use a folder structure similar to the following, where the journalist designation for a source is used for folder names and message/reply file names. -Example folder structure of USB export drive: ``` . -├── cytotoxic payer +├── cytotoxic-payer │ ├── 1-cytotoxic-payer-msg -│ │ └── file-to-export-1.txt +│ │ └── 1-cytotoxic-payer-msg.txt │ ├── 2-cytotoxic-payer-msg -│ │ └── file-to-export-2.txt +│ │ └── 2-cytotoxic-payer-msg.txt │ └── 3-cytotoxic-payer-doc -│ │ └── file-to-export-3.doc -├── grandiloquent pasteboard +│ │ └── interesting_file.doc +├── grandiloquent-pasteboard │ └── 1-grandiloquent-pasteboard-doc -│ │ └── file-to-export-1.doc -└── snug seek +│ │ └── questionable_file.pdf +└── snug-seek ``` From 8fc1a3001dde3a8ed6d5e96a863b0b6a9627f1f6 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 4 Feb 2020 15:16:03 -0500 Subject: [PATCH 334/751] deps: update Werkzeug to 0.16.0 --- build-requirements.txt | 2 +- dev-requirements.txt | 6 +++--- requirements.in | 2 +- requirements.txt | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build-requirements.txt b/build-requirements.txt index bcc35fca1..390b2281c 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -7,4 +7,4 @@ pyyaml==5.1 --hash=sha256:59ff9ed67bd8be210f91fd20f0ef844ee897d11eb4c19c611a77a3 requests==2.20.0 --hash=sha256:d87b2085783d31d874ac7bc62660e287932aaee7059e80b41b76462eb18d35cc six==1.11.0 --hash=sha256:aa4ad34049ddff178b533062797fd1db9f0038b7c5c2461a7cde2244300b9f3d urllib3==1.24.3 --hash=sha256:3d440cbb168e2c963d5099232bdb3f7390bf031b6270dad1bc79751698a1399a -werkzeug==0.14.1 --hash=sha256:eb89d94f6e0d4d7b2efff64c56674dd73f21105fce3a0d6e9b650d780add2e11 +werkzeug==0.16.0 --hash=sha256:429de1b931a2a58bf5cfac8447253949f7a930d30a73f2755e0ad0f9824592bf diff --git a/dev-requirements.txt b/dev-requirements.txt index 826afb92f..1153d0469 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -160,9 +160,9 @@ urllib3==1.24.3 \ vcrpy==2.0.1 \ --hash=sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3 \ --hash=sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f -werkzeug==0.14.1 \ - --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c \ - --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b +werkzeug==0.16.0 \ + --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ + --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 wrapt==1.10.11 \ --hash=sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6 yarl==1.2.6 \ diff --git a/requirements.in b/requirements.in index 15019974a..1e2aafcf0 100644 --- a/requirements.in +++ b/requirements.in @@ -7,4 +7,4 @@ PyYAML==5.1 six==1.11.0 requests==2.20.0 urllib3==1.24.3 -Werkzeug==0.14.1 +Werkzeug==0.16.0 diff --git a/requirements.txt b/requirements.txt index 6ac4b0979..38b09c7e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -40,6 +40,6 @@ six==1.11.0 \ urllib3==1.24.3 \ --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb -werkzeug==0.14.1 \ - --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c \ - --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b +werkzeug==0.16.0 \ + --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ + --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 From 29c1cf7caa08a5e3209dfac7abe94f161be1d61f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 9 Jan 2020 14:47:28 +0530 Subject: [PATCH 335/751] Adds initial scripts to use rsyslog for logging in workstation `sd-rsyslog` is the output plugin of rsyslog to be installed in /usr/sbin `sdlog.conf` is the configuration of rsyslog in /etc/rsyslog.d/ `securedrop-redis-log` is part of the Qrexec service inside of sd-log vm. This will receive the messages from any other vm, and add them into a queue in Redis. `securedrop-log-saver` will be the service inside `sd-log` VM, this will monitor the queue, and save any incoming message to the `syslog.log` file of the respective directory for each VM. It also has the Makefile for the project. --- MANIFEST.in | 9 +- Makefile | 40 +++++++++ README.md | 43 +++++++-- VERSION | 1 + build-requirements.txt | 1 + changelog.md | 4 + requirements.in | 1 + requirements.txt | 9 ++ sd-rsyslog | 193 ++++++++++++++++++++++++++++++++++++++++ sd-rsyslog-example.conf | 4 + sdlog.conf | 4 + securedrop-log-saver | 54 +++++++++++ securedrop-log.service | 12 +++ securedrop-redis-log | 46 ++++++++++ securedrop.Log | 2 +- securedrop_log/VERSION | 1 - setup.py | 12 ++- update_version.sh | 10 +-- 18 files changed, 421 insertions(+), 25 deletions(-) create mode 100644 Makefile create mode 100644 VERSION create mode 100644 requirements.in create mode 100644 sd-rsyslog create mode 100644 sd-rsyslog-example.conf create mode 100644 sdlog.conf create mode 100755 securedrop-log-saver create mode 100644 securedrop-log.service create mode 100755 securedrop-redis-log delete mode 100644 securedrop_log/VERSION diff --git a/MANIFEST.in b/MANIFEST.in index 6d11dc950..9596bbc0a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,8 +3,9 @@ include README.md include changelog.md include build-requirements.txt include requirements.txt -include securedrop_log/*.py -include securedrop_log/VERSION -include setup.py -include securedrop-log +include securedrop-log* +include securedrop-redis-log include securedrop.Log +include sd-rsyslog* +include sdlog.conf +include VERSION \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..0a669f0db --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +DEFAULT_GOAL: help +SHELL := /bin/bash + +# Bandit is a static code analysis tool to detect security vulnerabilities in Python applications +# https://wiki.openstack.org/wiki/Security/Projects/Bandit +.PHONY: bandit +bandit: ## Run bandit with medium level excluding test-related folders + pip install --upgrade pip && \ + pip install --upgrade bandit!=1.6.0 && \ + bandit -ll --recursive . --exclude tests,.venv + +.PHONY: safety +safety: ## Runs `safety check` to check python dependencies for vulnerabilities + pip install --upgrade safety && \ + for req_file in `find . -type f -name '*requirements.txt'`; do \ + echo "Checking file $$req_file" \ + && safety check --full-report -r $$req_file \ + && echo -e '\n' \ + || exit 1; \ + done + +.PHONY: update-pip-requirements +update-pip-requirements: ## Updates all Python requirements files via pip-compile. + pip-compile --generate-hashes --output-file requirements.txt requirements.in + + +# Explaination of the below shell command should it ever break. +# 1. Set the field separator to ": ##" and any make targets that might appear between : and ## +# 2. Use sed-like syntax to remove the make targets +# 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption +# 4. Pass this file as an arg to awk +# 5. Sort it alphabetically +# 6. Format columns with colon as delimiter. +.PHONY: help +help: ## Print this message and exit. + @printf "Makefile for developing and testing the SecureDrop Logging system.\n" + @printf "Subcommands:\n\n" + @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ + | sort \ + | column -s ':' -t diff --git a/README.md b/README.md index efaf8e8a9..0379fca7b 100644 --- a/README.md +++ b/README.md @@ -24,19 +24,47 @@ Add the following content to `/etc/qubes-rpc/securedrop.Log` /usr/sbin/securedrop-log ``` -and then place `securedrop-log` script to `/usr/sbin/` directory and make sure that -it is executable. +and then place `securedrop-redis-log` and `securedrop-log-saver` scripts to the +virtualenv at `/opt/venvs/securedrop-log` and create links to `/usr/sbin/` +directory and make sure that they are executable. This step will be automated via +the Debian package. + + +Copy `securedrop-log.service` file to `/usr/systemd/system` and then + +``` +sudo systemctl daemon-reload +sudo systemctl start redis +sudo systemctl start securedrop-log +``` + +To test the logging, make sure to execute `securedrop-log-saver` from a terminal in `sd-log` +and check the ~/QubesIncomingLogs/vmname/syslog.log file via **tail -f**. + ### To use from any Python code in workvm +Put `sd-rsyslog-example.conf` file to `/etc/sd-rsyslog.conf`, make sure update +it so that is shows the right **localvm** name. + +Copy `sd-rsyslog` executable to **/usr/sbin**, and remember to `chmod +x` +the binary. + +Next, restart the rsyslog service. + +``` +systemctl restart rsyslog +``` + + Here is an example code using Python logging ```Python import logging -from securedrop_log import SecureDropLog +import logging.handlers def main(): - handler = SecureDropLog("workvm", "proxy-debian") + handler = logging.handlers.SysLogHandler(address="/dev/log") logging.basicConfig(level=logging.DEBUG, handlers=[handler]) logger = logging.getLogger("example") @@ -48,8 +76,9 @@ if __name__ == "__main__": ``` -## The journalctl example +Or use the logger command. -You will need `python3-systemd` package for the same. +``` +logger This line should show in the syslog.log file in the sd-log file. +``` -The code is in `journal-example.py` file. \ No newline at end of file diff --git a/VERSION b/VERSION new file mode 100644 index 000000000..81340c7e7 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.4 diff --git a/build-requirements.txt b/build-requirements.txt index e69de29bb..af566a319 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -0,0 +1 @@ +redis==3.3.11 --hash=sha256:022f124431ae16ee3a3a69c8016e3e2b057b4f4e0bfa7787b6271d893890c3cc diff --git a/changelog.md b/changelog.md index b82e78e7a..c9fba47b1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.0.4 + + * Converts into rsyslog based logging system. + ## 0.0.3 * Fixes typos MANIFEST.in and setup.py diff --git a/requirements.in b/requirements.in new file mode 100644 index 000000000..767bdac05 --- /dev/null +++ b/requirements.in @@ -0,0 +1 @@ +redis==3.3.11 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e69de29bb..3c896d549 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1,9 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --generate-hashes --output-file=requirements.txt requirements.in +# +redis==3.3.11 \ + --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ + --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 diff --git a/sd-rsyslog b/sd-rsyslog new file mode 100644 index 000000000..4f3233ee5 --- /dev/null +++ b/sd-rsyslog @@ -0,0 +1,193 @@ +#!/opt/venvs/securedrop-log/bin/python3 +"""A skeleton for a Python rsyslog output plugin with error handling. +Requires Python 3. + +To integrate a plugin based on this skeleton with rsyslog, configure an +'omprog' action like the following: + action(type="omprog" + binary="/usr/bin/myplugin.py" + output="/var/log/myplugin.log" + confirmMessages="on" + ...) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + -or- + see COPYING.ASL20 in the source distribution + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import sys +import os +import logging +import configparser +from subprocess import Popen, PIPE + +# Global definitions specific to your plugin +process = None + +class RecoverableError(Exception): + """An error that has caused the processing of the current message to + fail, but does not require restarting the plugin. + + An example of such an error would be a temporary loss of connection to + a database or a server. If such an error occurs in the onMessage function, + your plugin should wrap it in a RecoverableError before raising it. + For example: + + try: + # code that connects to a database + except DbConnectionError as e: + raise RecoverableError from e + + Recoverable errors will cause the 'omprog' action to be temporarily + suspended by rsyslog, during a period that can be configured using the + "action.resumeInterval" action parameter. When the action is resumed, + rsyslog will resend the failed message to your plugin. + """ + + +def onInit(): + """Do everything that is needed to initialize processing (e.g. open files, + create handles, connect to systems...). + """ + # Apart from processing the logs received from rsyslog, you want your plugin + # to be able to report its own logs in some way. This will facilitate + # diagnosing problems and debugging your code. Here we set up the standard + # Python logging system to output the logs to stderr. In the rsyslog + # configuration, you can configure the 'omprog' action to capture the stderr + # of your plugin by specifying the action's "output" parameter. + logging.basicConfig(stream=sys.stderr, + level=logging.WARNING, + format='%(asctime)s %(levelname)s %(message)s') + + # This is an example of a debug log. (Note that for debug logs to be + # emitted you must set 'level' to logging.DEBUG above.) + logging.debug("onInit called") + + + global process + if not os.path.exists("/etc/sd-rsyslog.conf"): + print("Please create the configuration file at /etc/sd-rsyslog.conf", file=sys.stderr) + sys.exit(1) + config = configparser.ConfigParser() + config.read('/etc/sd-rsyslog.conf') + logvmname = config['sd-rsyslog']['remotevm'] + localvmname = config['sd-rsyslog']['localvm'] + process = Popen( + ["/usr/lib/qubes/qrexec-client-vm", logvmname, "securedrop.Log"], + stdin=PIPE, + stdout=PIPE, + stderr=PIPE, + ) + process.stdin.write(localvmname.encode("utf-8")) + process.stdin.write(b"\n") + process.stdin.flush() + + +def onMessage(msg): + """Process one log message received from rsyslog (e.g. send it to a + database). If this function raises an error, the message will be retried + by rsyslog. + + Args: + msg (str): the log message. Does NOT include a trailing newline. + + Raises: + RecoverableError: If a recoverable error occurs. The message will be + retried without restarting the plugin. + Exception: If a non-recoverable error occurs. The plugin will be + restarted before retrying the message. + """ + logging.debug("onMessage called") + + # For illustrative purposes, this plugin skeleton appends the received logs + # to a file. When implementing your plugin, remove the following code. + global process + process.stdin.write(msg.encode("utf-8")) + process.stdin.write(b"\n") + process.stdin.flush() + + +def onExit(): + """Do everything that is needed to finish processing (e.g. close files, + handles, disconnect from systems...). This is being called immediately + before exiting. + + This function should not raise any error. If it does, the error will be + logged as a warning and ignored. + """ + logging.debug("onExit called") + + # For illustrative purposes, this plugin skeleton appends the received logs + # to a file. When implementing your plugin, remove the following code. + global process + process.stdin.flush() + + +""" +------------------------------------------------------- +This is plumbing that DOES NOT need to be CHANGED +------------------------------------------------------- +This is the main loop that receives messages from rsyslog via stdin, +invokes the above entrypoints, and provides status codes to rsyslog +via stdout. In most cases, modifying this code should not be necessary. +""" +try: + onInit() +except Exception as e: + # If an error occurs during initialization, log it and terminate. The + # 'omprog' action will eventually restart the program. + logging.exception("Initialization error, exiting program") + sys.exit(1) + +# Tell rsyslog we are ready to start processing messages: +print("OK", flush=True) + +endedWithError = False +try: + line = sys.stdin.readline() + while line: + line = line.rstrip('\n') + try: + onMessage(line) + status = "OK" + except RecoverableError as e: + # Any line written to stdout that is not a status code will be + # treated as a recoverable error by 'omprog', and cause the action + # to be temporarily suspended. In this skeleton, we simply return + # a one-line representation of the Python exception. (If debugging + # is enabled in rsyslog, this line will appear in the debug logs.) + status = repr(e) + # We also log the complete exception to stderr (or to the logging + # handler(s) configured in doInit, if any). + logging.exception(e) + + # Send the status code (or the one-line error message) to rsyslog: + print(status, flush=True) + line = sys.stdin.readline() + +except Exception: + # If a non-recoverable error occurs, log it and terminate. The 'omprog' + # action will eventually restart the program. + logging.exception("Unrecoverable error, exiting program") + endedWithError = True + +try: + onExit() +except Exception: + logging.warning("Exception ignored in onExit", exc_info=True) + +if endedWithError: + sys.exit(1) +else: + sys.exit(0) + diff --git a/sd-rsyslog-example.conf b/sd-rsyslog-example.conf new file mode 100644 index 000000000..b79af60bb --- /dev/null +++ b/sd-rsyslog-example.conf @@ -0,0 +1,4 @@ +[sd-rsyslog] +remotevm = sd-log +localvm = sd-app + diff --git a/sdlog.conf b/sdlog.conf new file mode 100644 index 000000000..be8cac7f6 --- /dev/null +++ b/sdlog.conf @@ -0,0 +1,4 @@ +module(load="omprog") +action(type="omprog" + binary="/usr/sbin/sd-rsyslog" + template="RSYSLOG_TraditionalFileFormat") diff --git a/securedrop-log-saver b/securedrop-log-saver new file mode 100755 index 000000000..3de1c7638 --- /dev/null +++ b/securedrop-log-saver @@ -0,0 +1,54 @@ +#!/opt/venvs/securedrop-log/bin/python3 + +import os +import sys +import redis +import errno + + +def main(): + rclient = redis.Redis() + # This is the cache of open files for each vm + openfiles = {} + try: + while True: + # Wait for the next message + qname, data = rclient.blpop("syslogmsg") + msg = data.decode("utf-8") + vmname, msg_str = msg.split("::", 1) + + if vmname in openfiles: + fh = openfiles[vmname] + else: + # First open a file + filepath = os.path.join( + os.getenv("HOME", "/"), + "QubesIncomingLogs", + f"{vmname}", + "syslog.log", + ) + dirpath = os.path.dirname(filepath) + try: + os.makedirs(dirpath) + except OSError as err: + if err.errno != errno.EEXIST: + raise + fh = open(filepath, "a") + + # cache it for the next call + openfiles[vmname] = fh + + # Now just write and flush + fh.write(msg_str) + fh.write("\n") + fh.flush() + except Exception as e: + print(e, file=sys.stderr) + # Clean up all open files + for k, v in openfiles: + v.close() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/securedrop-log.service b/securedrop-log.service new file mode 100644 index 000000000..796df4ec3 --- /dev/null +++ b/securedrop-log.service @@ -0,0 +1,12 @@ +[Unit] +Description=securedrop logging Service +After=network.target + +[Service] +Type=simple +User=user +ExecStart=/usr/sbin/securedrop-log-saver +Restart=on-abort + +[Install] +WantedBy=multi-user.target diff --git a/securedrop-redis-log b/securedrop-redis-log new file mode 100755 index 000000000..740c2f810 --- /dev/null +++ b/securedrop-redis-log @@ -0,0 +1,46 @@ +#!/opt/venvs/securedrop-log/bin/python3 + +from __future__ import print_function + +import tempfile +import io +import sys +import os +import errno +import shutil +import subprocess +import redis +from datetime import datetime + + +def sanitize_line(untrusted_line): + line = bytearray(untrusted_line) + for i, c in enumerate(line): + if c >= 0x20 and c <= 0x7E: + pass + else: + line[i] = 0x2E + return bytearray(line).decode("ascii") + + +stdin = sys.stdin.buffer # python3 + + +rd = redis.Redis() + + +def log(msg, vmname="remote"): + global rd + redis_msg = f"{vmname}::{msg}" + rd.rpush("syslogmsg", redis_msg) + + +# the first line is always the remote vm name +untrusted_line = stdin.readline() +qrexec_remote = untrusted_line.rstrip(b"\n").decode("utf-8") +while True: + untrusted_line = stdin.readline() + if untrusted_line == b"": + break + + log(sanitize_line(untrusted_line.rstrip(b"\n")), qrexec_remote) diff --git a/securedrop.Log b/securedrop.Log index 0ebaf241e..bfb53e420 100644 --- a/securedrop.Log +++ b/securedrop.Log @@ -1 +1 @@ -/usr/sbin/securedrop-log +/usr/sbin/securedrop-redis-log diff --git a/securedrop_log/VERSION b/securedrop_log/VERSION deleted file mode 100644 index bcab45af1..000000000 --- a/securedrop_log/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.0.3 diff --git a/setup.py b/setup.py index 790b992e7..efbe8f282 100644 --- a/setup.py +++ b/setup.py @@ -4,8 +4,8 @@ with open("README.md", "r") as fh: long_description = fh.read() -version = pkgutil.get_data("securedrop_log", "VERSION").decode("utf-8") -version = version.strip() +with open("VERSION") as fh: + version = fh.read().strip() setuptools.setup( @@ -20,15 +20,13 @@ install_requires=[], python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-log", - packages=["securedrop_log",], - package_data={"securedrop_log": ["VERSION"],}, - classifiers=( + classifiers=[ "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Intended Audience :: Developers", "Operating System :: POSIX :: Linux", - ), - data_files=[("sbin", ["securedrop-log"])], + ], + data_files=[("sbin", ["securedrop-log", "securedrop-log-saver", "securedrop-redis-log"])], ) diff --git a/update_version.sh b/update_version.sh index 18c133047..3bd6903ce 100755 --- a/update_version.sh +++ b/update_version.sh @@ -10,17 +10,17 @@ if [ -z "$NEW_VERSION" ]; then exit 1 fi -# Get the old version from securedrop_log/VERSION -OLD_VERSION=$(cat securedrop_log/VERSION) +# Get the old version from VERSION +OLD_VERSION=$(cat VERSION) if [ -z "$OLD_VERSION" ]; then echo "Couldn't find the old version: does this script need to be updated?" exit 1 fi -# Update the version in securedrop_log/VERSION (setup.py is done automatically) +# Update the version in VERSION (setup.py is done automatically) if [[ "$OSTYPE" == "darwin"* ]]; then # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_log/VERSION + sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" VERSION else - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_log/VERSION + sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" VERSION fi From 9fbcae497efa1076990ad6f5fcd550e44a2eedf1 Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 6 Feb 2020 11:15:55 -0500 Subject: [PATCH 336/751] ci: Add build-buster job --- .circleci/config.yml | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index dd6ad3702..71dfd2d95 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,3 +1,42 @@ +--- +common-steps: + - &install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download wheels + command: | + mkdir ~/packaging && cd ~/packaging + git config --global --unset url.ssh://git@github.com.insteadof + git clone https://github.com/freedomofpress/securedrop-debian-packaging.git + cd securedrop-debian-packaging + make install-deps + PKG_DIR=~/project make requirements + + - &verify_requirements + run: + name: Ensure that build-requirements.txt and requirements.txt are in sync. + command: | + cd ~/project + # Return 1 if unstaged changes exist (after `make requirements` in the + # previous run step), else return 0. + git diff --quiet + + - &make_source_tarball + run: + name: Tag and make source tarball + command: | + cd ~/project + ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here + python3 setup.py sdist + + - &build_debian_package + run: + name: Build debian package + command: | + cd ~/packaging/securedrop-debian-packaging + export PKG_VERSION=1000.0 + export PKG_PATH=/home/circleci/project/dist/securedrop-log-$PKG_VERSION.tar.gz + make securedrop-log + version: 2 jobs: test: @@ -9,8 +48,19 @@ jobs: name: Run tests command: python3 -m unittest + build-buster: + docker: + - image: circleci/python:3.7-buster + steps: + - checkout + - *install_packaging_dependencies + - *verify_requirements + - *make_source_tarball + - *build_debian_package + workflows: version: 2 per_pr: jobs: - test + - build-buster From b252f7135af968962912577a2a4c9ec55d97f58b Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 6 Feb 2020 18:46:24 -0500 Subject: [PATCH 337/751] test: regression coverage for #109 (timeouts treated as auth errors) --- tests/test_apiproxy.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 0d9716a35..e66e2ad7f 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,4 +1,6 @@ import datetime +import http +import json import os import pyotp import pytest @@ -362,3 +364,14 @@ def communicate(self, *nargs, **kwargs) -> None: with pytest.raises(RequestTimeoutError): s = Submission(uuid="climateproblem") api.download_submission(s) + + +def test_download_get_sources_error_request_timeout(mocker): + api = API("mock", "mock", "mock", "mock", True) + mocker.patch("sdclientapi.json_query", + return_value=( + json.dumps({"body": json.dumps({"error": "wah"}), + "status": http.HTTPStatus.GATEWAY_TIMEOUT, + "headers": "foo"}))) + with pytest.raises(RequestTimeoutError): + api.get_sources() From 23c879ae152c987e416bbd860b9e7d9cf8cd726e Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 6 Feb 2020 19:13:00 -0500 Subject: [PATCH 338/751] app: improve error handling for responses from qrexec proxy --- sdclientapi/__init__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index ab400e9ba..d57853f1b 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,4 +1,5 @@ import configparser +import http import json import os import requests @@ -243,8 +244,12 @@ def get_sources(self) -> List[Source]: except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") - if "error" in data: + if "error" in data and status_code == http.HTTPStatus.GATEWAY_TIMEOUT: + raise RequestTimeoutError + elif "error" in data and status_code == 403: raise AuthError(data["error"]) + elif "error" in data: + raise BaseError(data["error"]) sources = data["sources"] result = [] # type: List[Source] From 4497eae546f4bbd25925f56c321263a93effd61f Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 6 Feb 2020 20:20:50 -0500 Subject: [PATCH 339/751] app: pure refactor - perform exception handling in common function --- sdclientapi/__init__.py | 387 +++++++++++++--------------------- sdclientapi/sdlocalobjects.py | 7 +- 2 files changed, 152 insertions(+), 242 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index d57853f1b..021d1e2a3 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -173,8 +173,25 @@ def _send_rpc_json_request( data["headers"] = headers data_str = json.dumps(data) - result = json.loads(json_query(self.proxy_vm_name, data_str, timeout)) - return json.loads(result["body"]), result["status"], result["headers"] + + try: + result = json.loads(json_query(self.proxy_vm_name, data_str, timeout)) + except json.decoder.JSONDecodeError: + raise BaseError("Error in parsing JSON") + + data = json.loads(result["body"]) + + if "error" in data and result["status"] == http.HTTPStatus.GATEWAY_TIMEOUT: + raise RequestTimeoutError + elif "error" in data and result["status"] == 403: + raise AuthError(data["error"]) + elif "error" in data and result["status"] != 404: + # We exclude 404 since if we encounter a 404, it means that an + # item is missing. In that case we return to the caller to + # handle that with an appropriate message. + raise BaseError(data["error"]) + + return data, result["status"], result["headers"] def authenticate(self, totp: Optional[str] = None) -> bool: """ @@ -234,22 +251,12 @@ def get_sources(self) -> List[Source]: path_query = "api/v1/sources" method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data and status_code == http.HTTPStatus.GATEWAY_TIMEOUT: - raise RequestTimeoutError - elif "error" in data and status_code == 403: - raise AuthError(data["error"]) - elif "error" in data: - raise BaseError(data["error"]) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) sources = data["sources"] result = [] # type: List[Source] @@ -270,22 +277,15 @@ def get_source(self, source: Source) -> Source: path_query = "api/v1/sources/{}".format(source.uuid) method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) return Source(**data) @@ -311,22 +311,15 @@ def delete_source(self, source: Source) -> bool: path_query = "api/v1/sources/{}".format(source.uuid) method = "DELETE" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) if "message" in data and data["message"] == "Source and submissions deleted": return True @@ -356,17 +349,14 @@ def add_star(self, source: Source) -> bool: path_query = "api/v1/sources/{}/add_star".format(source.uuid) method = "POST" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) if "message" in data and data["message"] == "Star added": return True @@ -382,17 +372,14 @@ def remove_star(self, source: Source) -> bool: path_query = "api/v1/sources/{}/remove_star".format(source.uuid) method = "DELETE" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) if "message" in data and data["message"] == "Star removed": return True @@ -409,22 +396,15 @@ def get_submissions(self, source: Source) -> List[Submission]: path_query = "api/v1/sources/{}/submissions".format(source.uuid) method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing submission {}".format(source.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing submission {}".format(source.uuid)) result = [] # type: List[Submission] values = data["submissions"] @@ -447,22 +427,15 @@ def get_submission(self, submission: Submission) -> Submission: ) method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) return Submission(**data) @@ -487,18 +460,12 @@ def get_all_submissions(self) -> List[Submission]: path_query = "api/v1/submissions" method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) result = [] # type: List[Submission] values = data["submissions"] @@ -524,22 +491,15 @@ def delete_submission(self, submission: Submission) -> bool: ) method = "DELETE" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing submission {}".format(submission.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing submission {}".format(submission.uuid)) if "message" in data and data["message"] == "Submission deleted": return True @@ -620,22 +580,15 @@ def flag_source(self, source: Source) -> bool: path_query = "api/v1/sources/{}/flag".format(source.uuid) method = "POST" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) return True @@ -654,19 +607,12 @@ def get_current_user(self) -> Any: path_query = "api/v1/user" method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) return data @@ -688,23 +634,16 @@ def reply_source( if reply_uuid: reply["uuid"] = reply_uuid - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - body=json.dumps(reply), - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 400: - raise ReplyError(data["message"]) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + body=json.dumps(reply), + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 400: + raise ReplyError(data["message"]) if "message" in data and data["message"] == "Your reply has been stored": return Reply(uuid=data["uuid"], filename=data["filename"]) @@ -721,22 +660,15 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: path_query = "api/v1/sources/{}/replies".format(source.uuid) method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) result = [] for datum in data["replies"]: @@ -756,22 +688,15 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) reply = Reply(**data) @@ -786,19 +711,12 @@ def get_all_replies(self) -> List[Reply]: path_query = "api/v1/replies" method = "GET" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) result = [] for datum in data["replies"]: @@ -874,21 +792,15 @@ def delete_reply(self, reply: Reply) -> bool: method = "DELETE" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - if status_code == 404: - raise WrongUUIDError("Missing reply {}".format(reply.uuid)) - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - if "error" in data: - raise AuthError(data["error"]) + if status_code == 404: + raise WrongUUIDError("Missing reply {}".format(reply.uuid)) if "message" in data and data["message"] == "Reply deleted": return True @@ -902,19 +814,12 @@ def logout(self) -> bool: path_query = "api/v1/logout" method = "POST" - try: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) - - except json.decoder.JSONDecodeError: - raise BaseError("Error in parsing JSON") - - if "error" in data: - raise AuthError(data["error"]) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) if "message" in data and data["message"] == "Your token has been revoked.": return True diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index e689c00f1..512484d3a 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -5,7 +5,12 @@ class BaseError(Exception): - pass + """For generic errors not covered by other exceptions""" + def __init__(self, message: typing.Optional[str] = None) -> None: + self.msg = message + + def __str__(self) -> str: + return repr(self.msg) class ReplyError(BaseError): From 42e49a186392a96eebe250775e749cfda0844bcd Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 6 Feb 2020 20:50:45 -0500 Subject: [PATCH 340/751] app: add exception class for ConnectionError, TooManyRedirects --- sdclientapi/__init__.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 021d1e2a3..0edbddd27 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -4,7 +4,12 @@ import os import requests from datetime import datetime -from requests.exceptions import ConnectTimeout, ReadTimeout +from requests.exceptions import ( + ConnectTimeout, + ReadTimeout, + ConnectionError, + TooManyRedirects +) from subprocess import PIPE, Popen, TimeoutExpired from typing import List, Tuple, Dict, Optional, Any from urllib.parse import urljoin @@ -33,6 +38,15 @@ def __init__(self) -> None: super().__init__("The request timed out.") +class ServerConnectionError(Exception): + """ + Error raised if a request times out. + """ + + def __init__(self) -> None: + super().__init__("The request timed out.") + + def json_query(proxy_vm_name: str, data: str, timeout: Optional[int] = None) -> str: """ Takes a JSON based query and passes it to the network proxy. @@ -149,6 +163,8 @@ def _send_http_json_request( result = requests.request(method, url, **kwargs) except (ConnectTimeout, ReadTimeout): raise RequestTimeoutError + except (TooManyRedirects, ConnectionError): + raise ServerConnectionError # Because when we download a file there is no JSON in the body if path_query.endswith("/download"): @@ -183,6 +199,8 @@ def _send_rpc_json_request( if "error" in data and result["status"] == http.HTTPStatus.GATEWAY_TIMEOUT: raise RequestTimeoutError + elif "error" in data and result["status"] == http.HTTPStatus.BAD_GATEWAY: + raise ServerConnectionError elif "error" in data and result["status"] == 403: raise AuthError(data["error"]) elif "error" in data and result["status"] != 404: From 748adb62611c0e169bbfaecb7222b8075aae189c Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 6 Feb 2020 20:58:14 -0500 Subject: [PATCH 341/751] app: make direct HTTP json request function consistent with qrexec the behavior of the HTTP and qrexec JSON request methods must be the same in terms of which exceptions are raised when --- sdclientapi/__init__.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 0edbddd27..37729d92c 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -40,11 +40,11 @@ def __init__(self) -> None: class ServerConnectionError(Exception): """ - Error raised if a request times out. + Error raised if we cannot connect to the server. """ def __init__(self) -> None: - super().__init__("The request timed out.") + super().__init__("Cannot connect to the server.") def json_query(proxy_vm_name: str, data: str, timeout: Optional[int] = None) -> str: @@ -166,6 +166,9 @@ def _send_http_json_request( except (TooManyRedirects, ConnectionError): raise ServerConnectionError + if result.status_code == http.HTTPStatus.FORBIDDEN: + raise AuthError("forbidden") + # Because when we download a file there is no JSON in the body if path_query.endswith("/download"): return result, result.status_code, dict(result.headers) @@ -201,12 +204,13 @@ def _send_rpc_json_request( raise RequestTimeoutError elif "error" in data and result["status"] == http.HTTPStatus.BAD_GATEWAY: raise ServerConnectionError - elif "error" in data and result["status"] == 403: + elif "error" in data and result["status"] == http.HTTPStatus.FORBIDDEN: raise AuthError(data["error"]) - elif "error" in data and result["status"] != 404: + elif "error" in data and result["status"] != http.HTTPStatus.NOT_FOUND: # We exclude 404 since if we encounter a 404, it means that an # item is missing. In that case we return to the caller to - # handle that with an appropriate message. + # handle that with an appropriate message. However, if the error + # is not a 404, then we raise. raise BaseError(data["error"]) return data, result["status"], result["headers"] From 2f15ab1ebfa02e25d3a307a1f266feb1d355a283 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 11 Feb 2020 10:33:03 -0500 Subject: [PATCH 342/751] test: regression coverage for bug #111 (KeyError due to filename) --- tests/test_apiproxy.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index e66e2ad7f..07a6e2114 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -375,3 +375,15 @@ def test_download_get_sources_error_request_timeout(mocker): "headers": "foo"}))) with pytest.raises(RequestTimeoutError): api.get_sources() + + +def test_filename_key_not_in_download_response(mocker): + api = API("mock", "mock", "mock", "mock", True) + s = Submission(uuid="foobar") + mocker.patch("sdclientapi.json_query", + return_value=( + json.dumps({"body": json.dumps({"error": "wah"}), + "status": 200, + "headers": "foo"}))) + with pytest.raises(BaseError): + api.download_submission(s) From 3167b4a242eaf85b01b395ef9ab442eb60684ac1 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 11 Feb 2020 21:42:57 +0530 Subject: [PATCH 343/751] Removes container's upstream virtualenv freedomofpress/securedrop-debian-packaging#142 ^^ related to above PR. --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 02f7e1d1e..d4fb3a49f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,10 @@ --- common-steps: + - &removevirtualenv + run: + name: Removes the upstream virtualenv from the original container image + command: sudo pip uninstall virtualenv -y + - &install_packages run: name: Install packages @@ -86,6 +91,7 @@ jobs: - image: circleci/python:3.7-buster steps: - checkout + - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball From 5ee13531b868d601ef9d9951553dce1e0eef2e32 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 11 Feb 2020 21:45:43 +0530 Subject: [PATCH 344/751] Removes container's upstream virtualenv freedomofpress/securedrop-debian-packaging#142 ^^ related to above PR. --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index d47571379..dedca8c84 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,10 @@ --- common-steps: + - &removevirtualenv + run: + name: Removes the upstream virtualenv from the original container image + command: sudo pip uninstall virtualenv -y + - &run_tests run: name: Install requirements and run tests @@ -53,6 +58,7 @@ jobs: - image: circleci/python:3.7-buster steps: - checkout + - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball From 701817ad45f5035af0b72f0941d495a9d9232f93 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 11 Feb 2020 21:48:35 +0530 Subject: [PATCH 345/751] Removes container's upstream virtualenv freedomofpress/securedrop-debian-packaging#142 ^^ related to above PR. --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 71dfd2d95..4d7b27ebb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,10 @@ --- common-steps: + - &removevirtualenv + run: + name: Removes the upstream virtualenv from the original container image + command: sudo pip uninstall virtualenv -y + - &install_packaging_dependencies run: name: Install Debian packaging dependencies and download wheels @@ -53,6 +58,7 @@ jobs: - image: circleci/python:3.7-buster steps: - checkout + - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball From a9a02ea7ed57f69cb35bc14af97da5f4ba4f37fa Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 11 Feb 2020 16:54:32 +0530 Subject: [PATCH 346/751] Starts the service after redis --- securedrop-log.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop-log.service b/securedrop-log.service index 796df4ec3..1eb5adb30 100644 --- a/securedrop-log.service +++ b/securedrop-log.service @@ -1,6 +1,6 @@ [Unit] Description=securedrop logging Service -After=network.target +After=network.target redis.service [Service] Type=simple From 1140d408778012bdf5c50ec4160de612005ce973 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 11 Feb 2020 10:55:07 -0500 Subject: [PATCH 347/751] dev, ci: Remove pipenv --- .circleci/config.yml | 46 +++--- Makefile | 17 ++- README.md | 14 +- dev-requirements.in | 11 ++ dev-requirements.txt | 335 +++++++++++++++++++++++++++++++++++++++++++ requirements.in | 2 + requirements.txt | 24 ++++ 7 files changed, 415 insertions(+), 34 deletions(-) create mode 100644 dev-requirements.in create mode 100644 dev-requirements.txt create mode 100644 requirements.in create mode 100644 requirements.txt diff --git a/.circleci/config.yml b/.circleci/config.yml index 44f9d3324..86be12f30 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,41 +3,36 @@ jobs: test-run: working_directory: ~/sdclientapi docker: - - image: circleci/python:3.5.3 - environment: - PIPENV_VENV_IN_PROJECT: true + - image: circleci/python:3.7 steps: - checkout - run: sudo chown -R circleci:circleci /usr/local/bin - - run: sudo chown -R circleci:circleci /usr/local/lib/python3.5/site-packages + - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages - restore_cache: - key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} + key: deps9-{{ .Branch }}-{{ checksum "dev-requirements.txt" }} - run: name: Install dependencies command: | - set -e - sudo pip install pipenv - pipenv install --dev --skip-lock - pipenv run pip freeze + virtualenv --python=python3 .venv + source .venv/bin/activate + pip install --require-hashes -r dev-requirements.txt - save_cache: - key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }} + key: deps9-{{ .Branch }}-{{ checksum "dev-requirements.txt" }} paths: - ".venv" - "/usr/local/bin" - - "/usr/local/lib/python3.5/site-packages" + - "/usr/local/lib/python3.7/site-packages" - run: - name: Run linters - command: pipenv run make lint mypy - - run: - name: Run tests - command: pipenv run make test - - run: - name: Check for known CVEs - command: pipenv check + name: Run linter, tests, check for known CVEs + command: | + source .venv/bin/activate + make check + test-against-latest-api: working_directory: ~/project machine: enabled: true + image: ubuntu-1604:201903-01 environment: DOCKER_API_VERSION: 1.23 steps: @@ -45,9 +40,10 @@ jobs: - run: name: Install dependencies command: | - sudo pip install pipenv - pipenv install --dev --skip-lock - pipenv run pip freeze + pyenv global 3.7.0 + virtualenv --python=python3 .venv + source .venv/bin/activate + pip install --require-hashes -r dev-requirements.txt - run: name: Download SecureDrop server code command: git clone https://github.com/freedomofpress/securedrop.git @@ -56,7 +52,7 @@ jobs: command: | cd securedrop NUM_SOURCES=5 make -C securedrop dev - background: true + background: true - run: # As suggested in https://discuss.circleci.com/t/prevent-race-conditions-by-waiting-for-services-with-dockerize/11215 name: Install dockerize command: | @@ -74,7 +70,9 @@ jobs: name: Remove VCR cassettes and run tests against latest API command: | rm data/*.yml # Removing VCR cassettes - pipenv run make test + source .venv/bin/activate + make test + workflows: version: 2 securedrop_ci: diff --git a/Makefile b/Makefile index ae6e3460e..0792a6d7f 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,22 @@ mypy: ## Run the mypy typechecker @mypy sdclientapi .PHONY: check -check: lint mypy test ## Run all checks and tests +check: lint mypy test safety ## Run all checks and tests + +.PHONY: safety +safety: ## Runs `safety check` to check python dependencies for vulnerabilities + pip install --upgrade safety && \ + for req_file in `find . -type f -name '*requirements.txt'`; do \ + echo "Checking file $$req_file" \ + && safety check --full-report -r $$req_file \ + && echo -e '\n' \ + || exit 1; \ + done + +.PHONY: update-pip-requirements +update-pip-requirements: ## Updates all Python requirements files via pip-compile. + pip-compile --generate-hashes --output-file dev-requirements.txt requirements.in dev-requirements.in + pip-compile --generate-hashes --output-file requirements.txt requirements.in .PHONY: open-coverage-report open-coverage-report: ## Open the coverage report in your browser diff --git a/README.md b/README.md index 1bec5dcf4..7416d7931 100644 --- a/README.md +++ b/README.md @@ -13,23 +13,19 @@ The SDK is currently used by the [SecureDrop Client](https://github.com/freedomo ## Quick Start ```bash -pip install -U pipenv -pipenv sync --dev -pipenv shell +virtualenv --python=python3 .venv +source .venv/bin/activate +pip install --require-hashes -r dev-requirements.txt make test ``` -This project uses [pipenv](https://docs.pipenv.org) to manage all dependencies. -This is a Python 3 project. When using ``pipenv`` locally, ensure you used the ``--keep-outdated`` -flag to prevent dependencies from being unnecessarily upgraded during normal development. - We cover all the API calls supported by the SecureDrop Journalist Interface API. ## Testing The tests are located in the `tests` directory. This project uses [vcrpy](http://vcrpy.readthedocs.io/en/latest/) to record and then reply the API calls so that developers will have repeatable results so that they may work offline. `vcrpy` stores YAML -recordings of the API calls in the `data` directory. +recordings of the API calls in the `data` directory. To run all the test cases, use the following command. @@ -118,7 +114,7 @@ Please read [CONTRIBUTING.md](https://github.com/freedomofpress/securedrop-sdk/b # Versioning -We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/freedomofpress/securedrop-sdk/tags). +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/freedomofpress/securedrop-sdk/tags). # License diff --git a/dev-requirements.in b/dev-requirements.in new file mode 100644 index 000000000..463988708 --- /dev/null +++ b/dev-requirements.in @@ -0,0 +1,11 @@ +coverage +flake8 +mypy +pyotp +pytest +pytest-cov +sphinx +vcrpy +pyyaml>=5.1,<6 +pytest-mock +pip-tools diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 000000000..d65464824 --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,335 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in +# +alabaster==0.7.12 \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 \ + # via sphinx +attrs==19.3.0 \ + --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ + --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ + # via pytest +babel==2.8.0 \ + --hash=sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38 \ + --hash=sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4 \ + # via sphinx +certifi==2019.11.28 \ + --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ + --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f \ + # via requests +chardet==3.0.4 \ + --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ + # via requests +click==7.0 \ + --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ + --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ + # via pip-tools +coverage==5.0.3 \ + --hash=sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3 \ + --hash=sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c \ + --hash=sha256:1e44a022500d944d42f94df76727ba3fc0a5c0b672c358b61067abb88caee7a0 \ + --hash=sha256:25dbf1110d70bab68a74b4b9d74f30e99b177cde3388e07cc7272f2168bd1477 \ + --hash=sha256:3230d1003eec018ad4a472d254991e34241e0bbd513e97a29727c7c2f637bd2a \ + --hash=sha256:3dbb72eaeea5763676a1a1efd9b427a048c97c39ed92e13336e726117d0b72bf \ + --hash=sha256:5012d3b8d5a500834783689a5d2292fe06ec75dc86ee1ccdad04b6f5bf231691 \ + --hash=sha256:51bc7710b13a2ae0c726f69756cf7ffd4362f4ac36546e243136187cfcc8aa73 \ + --hash=sha256:527b4f316e6bf7755082a783726da20671a0cc388b786a64417780b90565b987 \ + --hash=sha256:722e4557c8039aad9592c6a4213db75da08c2cd9945320220634f637251c3894 \ + --hash=sha256:76e2057e8ffba5472fd28a3a010431fd9e928885ff480cb278877c6e9943cc2e \ + --hash=sha256:77afca04240c40450c331fa796b3eab6f1e15c5ecf8bf2b8bee9706cd5452fef \ + --hash=sha256:7afad9835e7a651d3551eab18cbc0fdb888f0a6136169fbef0662d9cdc9987cf \ + --hash=sha256:9bea19ac2f08672636350f203db89382121c9c2ade85d945953ef3c8cf9d2a68 \ + --hash=sha256:a8b8ac7876bc3598e43e2603f772d2353d9931709345ad6c1149009fd1bc81b8 \ + --hash=sha256:b0840b45187699affd4c6588286d429cd79a99d509fe3de0f209594669bb0954 \ + --hash=sha256:b26aaf69713e5674efbde4d728fb7124e429c9466aeaf5f4a7e9e699b12c9fe2 \ + --hash=sha256:b63dd43f455ba878e5e9f80ba4f748c0a2156dde6e0e6e690310e24d6e8caf40 \ + --hash=sha256:be18f4ae5a9e46edae3f329de2191747966a34a3d93046dbdf897319923923bc \ + --hash=sha256:c312e57847db2526bc92b9bfa78266bfbaabac3fdcd751df4d062cd4c23e46dc \ + --hash=sha256:c60097190fe9dc2b329a0eb03393e2e0829156a589bd732e70794c0dd804258e \ + --hash=sha256:c62a2143e1313944bf4a5ab34fd3b4be15367a02e9478b0ce800cb510e3bbb9d \ + --hash=sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f \ + --hash=sha256:cd60f507c125ac0ad83f05803063bed27e50fa903b9c2cfee3f8a6867ca600fc \ + --hash=sha256:d513cc3db248e566e07a0da99c230aca3556d9b09ed02f420664e2da97eac301 \ + --hash=sha256:d649dc0bcace6fcdb446ae02b98798a856593b19b637c1b9af8edadf2b150bea \ + --hash=sha256:d7008a6796095a79544f4da1ee49418901961c97ca9e9d44904205ff7d6aa8cb \ + --hash=sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af \ + --hash=sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52 \ + --hash=sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37 \ + --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 +docutils==0.16 \ + --hash=sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af \ + --hash=sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc \ + # via sphinx +entrypoints==0.3 \ + --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ + --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ + # via flake8 +flake8==3.7.9 \ + --hash=sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb \ + --hash=sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca +idna==2.8 \ + --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ + --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ + # via requests, yarl +imagesize==1.2.0 \ + --hash=sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1 \ + --hash=sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1 \ + # via sphinx +importlib-metadata==1.5.0 \ + --hash=sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302 \ + --hash=sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b \ + # via pluggy, pytest +jinja2==2.11.1 \ + --hash=sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250 \ + --hash=sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49 \ + # via sphinx +markupsafe==1.1.1 \ + --hash=sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473 \ + --hash=sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161 \ + --hash=sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235 \ + --hash=sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5 \ + --hash=sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42 \ + --hash=sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff \ + --hash=sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b \ + --hash=sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1 \ + --hash=sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e \ + --hash=sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183 \ + --hash=sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66 \ + --hash=sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b \ + --hash=sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1 \ + --hash=sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15 \ + --hash=sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1 \ + --hash=sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e \ + --hash=sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b \ + --hash=sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905 \ + --hash=sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735 \ + --hash=sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d \ + --hash=sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e \ + --hash=sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d \ + --hash=sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c \ + --hash=sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21 \ + --hash=sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2 \ + --hash=sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5 \ + --hash=sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b \ + --hash=sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6 \ + --hash=sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f \ + --hash=sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f \ + --hash=sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2 \ + --hash=sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7 \ + --hash=sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be \ + # via jinja2 +mccabe==0.6.1 \ + --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ + # via flake8 +more-itertools==8.2.0 \ + --hash=sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c \ + --hash=sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507 \ + # via pytest +multidict==4.7.4 \ + --hash=sha256:13f3ebdb5693944f52faa7b2065b751cb7e578b8dd0a5bb8e4ab05ad0188b85e \ + --hash=sha256:26502cefa86d79b86752e96639352c7247846515c864d7c2eb85d036752b643c \ + --hash=sha256:4fba5204d32d5c52439f88437d33ad14b5f228e25072a192453f658bddfe45a7 \ + --hash=sha256:527124ef435f39a37b279653ad0238ff606b58328ca7989a6df372fd75d7fe26 \ + --hash=sha256:5414f388ffd78c57e77bd253cf829373721f450613de53dc85a08e34d806e8eb \ + --hash=sha256:5eee66f882ab35674944dfa0d28b57fa51e160b4dce0ce19e47f495fdae70703 \ + --hash=sha256:63810343ea07f5cd86ba66ab66706243a6f5af075eea50c01e39b4ad6bc3c57a \ + --hash=sha256:6bd10adf9f0d6a98ccc792ab6f83d18674775986ba9bacd376b643fe35633357 \ + --hash=sha256:83c6ddf0add57c6b8a7de0bc7e2d656be3eefeff7c922af9a9aae7e49f225625 \ + --hash=sha256:93166e0f5379cf6cd29746989f8a594fa7204dcae2e9335ddba39c870a287e1c \ + --hash=sha256:9a7b115ee0b9b92d10ebc246811d8f55d0c57e82dbb6a26b23c9a9a6ad40ce0c \ + --hash=sha256:a38baa3046cce174a07a59952c9f876ae8875ef3559709639c17fdf21f7b30dd \ + --hash=sha256:a6d219f49821f4b2c85c6d426346a5d84dab6daa6f85ca3da6c00ed05b54022d \ + --hash=sha256:a8ed33e8f9b67e3b592c56567135bb42e7e0e97417a4b6a771e60898dfd5182b \ + --hash=sha256:d7d428488c67b09b26928950a395e41cc72bb9c3d5abfe9f0521940ee4f796d4 \ + --hash=sha256:dcfed56aa085b89d644af17442cdc2debaa73388feba4b8026446d168ca8dad7 \ + --hash=sha256:f29b885e4903bd57a7789f09fe9d60b6475a6c1a4c0eca874d8558f00f9d4b51 \ + # via yarl +mypy-extensions==0.4.3 \ + --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 \ + # via mypy +mypy==0.761 \ + --hash=sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a \ + --hash=sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7 \ + --hash=sha256:4b9365ade157794cef9685791032521233729cb00ce76b0ddc78749abea463d2 \ + --hash=sha256:53ea810ae3f83f9c9b452582261ea859828a9ed666f2e1ca840300b69322c474 \ + --hash=sha256:634aef60b4ff0f650d3e59d4374626ca6153fcaff96ec075b215b568e6ee3cb0 \ + --hash=sha256:7e396ce53cacd5596ff6d191b47ab0ea18f8e0ec04e15d69728d530e86d4c217 \ + --hash=sha256:7eadc91af8270455e0d73565b8964da1642fe226665dd5c9560067cd64d56749 \ + --hash=sha256:7f672d02fffcbace4db2b05369142e0506cdcde20cea0e07c7c2171c4fd11dd6 \ + --hash=sha256:85baab8d74ec601e86134afe2bcccd87820f79d2f8d5798c889507d1088287bf \ + --hash=sha256:87c556fb85d709dacd4b4cb6167eecc5bbb4f0a9864b69136a0d4640fdc76a36 \ + --hash=sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b \ + --hash=sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72 \ + --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ + --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 +packaging==20.1 \ + --hash=sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73 \ + --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 \ + # via pytest, sphinx +pip-tools==4.4.1 \ + --hash=sha256:2a5e67f539a67658614e2b2c6f484db05183a29e472f99ecbb2668838006ece2 \ + --hash=sha256:3d0c21b5e0b54ab15cf4a47065b9fa7567e8fc83246ebd732e954c65a6310a59 +pluggy==0.13.1 \ + --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ + --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d \ + # via pytest +py==1.8.1 \ + --hash=sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa \ + --hash=sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0 \ + # via pytest +pycodestyle==2.5.0 \ + --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ + --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c \ + # via flake8 +pyflakes==2.1.1 \ + --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ + --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 \ + # via flake8 +pygments==2.5.2 \ + --hash=sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b \ + --hash=sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe \ + # via sphinx +pyotp==2.3.0 \ + --hash=sha256:c88f37fd47541a580b744b42136f387cdad481b560ef410c0d85c957eb2a2bc0 \ + --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 +pyparsing==2.4.6 \ + --hash=sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f \ + --hash=sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec \ + # via packaging +pytest-cov==2.8.1 \ + --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ + --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 +pytest-mock==2.0.0 \ + --hash=sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f \ + --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 +pytest==5.3.5 \ + --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ + --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 +pytz==2019.3 \ + --hash=sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d \ + --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be \ + # via babel +pyyaml==5.3 \ + --hash=sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6 \ + --hash=sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf \ + --hash=sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5 \ + --hash=sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e \ + --hash=sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811 \ + --hash=sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e \ + --hash=sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d \ + --hash=sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20 \ + --hash=sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689 \ + --hash=sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994 \ + --hash=sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615 +requests==2.22.0 \ + --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 +six==1.14.0 \ + --hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a \ + --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c \ + # via packaging, pip-tools, vcrpy +snowballstemmer==2.0.0 \ + --hash=sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0 \ + --hash=sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52 \ + # via sphinx +sphinx==2.4.1 \ + --hash=sha256:5024a67f065fe60d9db2005580074d81f22a02dd8f00a5b1ec3d5f4d42bc88d8 \ + --hash=sha256:f929b72e0cfe45fa581b8964d54457117863a6a6c9369ecc1a65b8827abd3bf2 +sphinxcontrib-applehelp==1.0.1 \ + --hash=sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897 \ + --hash=sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d \ + # via sphinx +sphinxcontrib-devhelp==1.0.1 \ + --hash=sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34 \ + --hash=sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981 \ + # via sphinx +sphinxcontrib-htmlhelp==1.0.2 \ + --hash=sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422 \ + --hash=sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7 \ + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ + # via sphinx +sphinxcontrib-qthelp==1.0.2 \ + --hash=sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20 \ + --hash=sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f \ + # via sphinx +sphinxcontrib-serializinghtml==1.1.3 \ + --hash=sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227 \ + --hash=sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768 \ + # via sphinx +typed-ast==1.4.1 \ + --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ + --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ + --hash=sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa \ + --hash=sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652 \ + --hash=sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75 \ + --hash=sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01 \ + --hash=sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d \ + --hash=sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1 \ + --hash=sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907 \ + --hash=sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c \ + --hash=sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3 \ + --hash=sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b \ + --hash=sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614 \ + --hash=sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb \ + --hash=sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b \ + --hash=sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41 \ + --hash=sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6 \ + --hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \ + --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ + --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ + --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \ + # via mypy +typing-extensions==3.7.4.1 \ + --hash=sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2 \ + --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ + --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 \ + # via mypy +urllib3==1.25.8 \ + --hash=sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc \ + --hash=sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc +vcrpy==4.0.2 \ + --hash=sha256:9740c5b1b63626ec55cefb415259a2c77ce00751e97b0f7f214037baaf13c7bf \ + --hash=sha256:c4ddf1b92c8a431901c56a1738a2c797d965165a96348a26f4b2bbc5fa6d36d9 +wcwidth==0.1.8 \ + --hash=sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603 \ + --hash=sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8 \ + # via pytest +wrapt==1.11.2 \ + --hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 \ + # via vcrpy +yarl==1.4.2 \ + --hash=sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce \ + --hash=sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6 \ + --hash=sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce \ + --hash=sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae \ + --hash=sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d \ + --hash=sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f \ + --hash=sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b \ + --hash=sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b \ + --hash=sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb \ + --hash=sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462 \ + --hash=sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea \ + --hash=sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70 \ + --hash=sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1 \ + --hash=sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a \ + --hash=sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b \ + --hash=sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080 \ + --hash=sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2 \ + # via vcrpy +zipp==2.2.0 \ + --hash=sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50 \ + --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e \ + # via importlib-metadata + +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. +# setuptools diff --git a/requirements.in b/requirements.in new file mode 100644 index 000000000..804abb1bf --- /dev/null +++ b/requirements.in @@ -0,0 +1,2 @@ +requests +urllib3 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..da1527607 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --generate-hashes --output-file=requirements.txt requirements.in +# +certifi==2019.11.28 \ + --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ + --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f \ + # via requests +chardet==3.0.4 \ + --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ + # via requests +idna==2.8 \ + --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ + --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ + # via requests +requests==2.22.0 \ + --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 +urllib3==1.25.8 \ + --hash=sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc \ + --hash=sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc From 5f794979998a0561051de3c4b908e8ae645f875c Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 12 Feb 2020 18:16:13 +0530 Subject: [PATCH 348/751] Updates to 0.0.13 release --- CHANGELOG.md | 12 ++++++++++++ setup.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b1f84960..84d9d1d82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ Changelog ========= +0.0.13 +------ + +* Bug fix: return RequestTimeoutError and ServerConnectionError exceptions instead of AuthError, no longer raise KeyError when a file fails to download via the proxy (#109) +* Adds test cases and uses pip-tools for development dependency management (#112). + +0.0.12 +------ + +* Updates qrexec policy keyword character (#102). +* Expose journalist first and last name through the API (#105). + 0.0.11 ------ diff --git a/setup.py b/setup.py index 00ec1a55f..c4c747175 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.12", + version="0.0.13", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 8f6116e66d9f9c3ad1c197037a5336ac04ef7b4a Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 13 Feb 2020 11:05:27 -0500 Subject: [PATCH 349/751] securedrop-proxy 0.1.7 --- changelog.md | 4 ++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index dcd7b8334..5b816ff00 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.7 + + * Update Werkzeug to 0.16.0 due to CVE-2019-14806 (#64) + ## 0.1.6 * Fixes CI for git-lfs based package builds (#60) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index c946ee616..11808190d 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.1.6 +0.1.7 From d0a820b39c60836bef9aa7b13866384b038f1ee4 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 18 Feb 2020 11:47:15 -0800 Subject: [PATCH 350/751] combine commands to add printer and accept requests --- securedrop_export/print/actions.py | 36 +++++------------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index 41a47368f..a8031f26a 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -70,11 +70,7 @@ def check_printer_setup(self) -> None: self.submission.exit_gracefully(ExportStatus.ERROR_MULTIPLE_PRINTERS_FOUND.value) printer_uri = printers[0] - - logger.info('Installing printer drivers') printer_ppd = self.install_printer_ppd(printer_uri) - - logger.info('Setting up printer') self.setup_printer(printer_uri, printer_ppd) except subprocess.CalledProcessError as e: logger.error(e) @@ -122,6 +118,7 @@ def install_printer_ppd(self, uri): # Compile and install drivers that are not already installed if not os.path.exists(printer_ppd): + logger.info('Installing printer drivers') self.submission.safe_check_call( command=[ "sudo", @@ -137,46 +134,23 @@ def install_printer_ppd(self, uri): def setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin - logger.info('Setting up printer name {}'.format(self.printer_name)) + logger.info('Setting up printer {}'.format(self.printer_name)) self.submission.safe_check_call( command=[ "sudo", "lpadmin", "-p", self.printer_name, + "-E", "-v", printer_uri, "-P", printer_ppd, + "-u", + "allow:user" ], error_message=ExportStatus.ERROR_PRINTER_INSTALL.value ) - # Activate the printer so that it can receive jobs - logger.info('Activating printer {}'.format(self.printer_name)) - self.submission.safe_check_call( - command=["sudo", "lpadmin", "-p", self.printer_name], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) - # worksaround for version of lpadmin/cups in debian buster: - # see https://forums.developer.apple.com/thread/106112 - self.submission.safe_check_call( - command=["sudo", "cupsaccept", self.printer_name], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) - # A non-zero return code is expected here, but the command is required - # and works as expected. - command = ["sudo", "cupsenable", self.printer_name] - try: - subprocess.check_call(command) - except subprocess.CalledProcessError: - pass - - # Allow user to print (without using sudo) - logger.info('Allow user to print {}'.format(self.printer_name)) - self.submission.safe_check_call( - command=["sudo", "lpadmin", "-p", self.printer_name, "-u", "allow:user"], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value - ) def print_test_page(self): logger.info('Printing test page') From d256353378c3b18ab0b6b9f6d742af2d6675a2c9 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 20 Feb 2020 10:41:03 -0500 Subject: [PATCH 351/751] prod release instructions --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 02be24f19..df6198d8c 100644 --- a/README.md +++ b/README.md @@ -51,12 +51,14 @@ the updated dependency to our pip mirror (you can request this in the PR). ## Making a Release -**Note:** These are the release guidelines for pre-production alpha releases. Production release tags must be signed with the SecureDrop release key. - 1. Update versions: `./update_version.sh $new_version_number` and add a new entry in the changelog. 2. Commit the changes with commit message `securedrop-proxy $new_version_number` and make a PR. 3. You should confirm via a manual debian package build and manual testing in Qubes that there are no regressions (this is limited pre-release QA). -4. Once your PR is approved, you can add a tag and push: `git tag $new_version_number`. +4. Once your PR is approved, you can add a tag: `git tag $new_version_number`. +5. Perform the release signing ceremony on the tag. Push the tag. +6. The signer should create the source tarball via `python3 setup.py sdist`. +7. Add a detached signature (with the release key) for the source tarball. +8. Submit the source tarball and signature via PR into this [repository](https://github.com/freedomofpress/securedrop-debian-packaging). This tarball will be used by the package builder. #### Configuration From 70eae01e899fcfeb77ddcad34c4d85216cc7b778 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 20 Feb 2020 10:42:49 -0500 Subject: [PATCH 352/751] securedrop-proxy 0.2.0 --- changelog.md | 4 ++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 5b816ff00..dae1be583 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.0 + + * Initial beta release. + ## 0.1.7 * Update Werkzeug to 0.16.0 due to CVE-2019-14806 (#64) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 11808190d..0ea3a944b 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.1.7 +0.2.0 From d991b4f3c14902b84d24a5e15c35f10ea6964bc1 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 20 Feb 2020 19:03:55 -0500 Subject: [PATCH 353/751] securedrop-export 0.2.0 --- changelog.md | 15 +++++++++++---- securedrop_export/VERSION | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/changelog.md b/changelog.md index 02c74ef5a..b4ede824b 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,13 @@ -securedrop-export (0.1.1-1) unstable; urgency=medium +# Changelog - [ Freedom Of The Press Foundation ] - * Initial release +## 0.2.0 - -- SecureDrop Team Thu, 18 Jul 2019 10:47:38 -0700 + * Initial beta release. + +## 0.1.2 + + * Adds logging (#17). + +## 0.1.1 + + * Initial release. diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index d917d3e26..0ea3a944b 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.1.2 +0.2.0 From 0f32743123cf1673362406ac7818eefd9a0b8237 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 20 Feb 2020 19:08:33 -0500 Subject: [PATCH 354/751] securedrop-log 0.1.0 --- VERSION | 2 +- changelog.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 81340c7e7..6e8bf73aa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.4 +0.1.0 diff --git a/changelog.md b/changelog.md index c9fba47b1..1456efc39 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.0 + + * Initial beta release. + ## 0.0.4 * Converts into rsyslog based logging system. From 7ed5effb70e7037613fa7ed3fa42f9cd27595c29 Mon Sep 17 00:00:00 2001 From: mickael e Date: Mon, 2 Mar 2020 11:19:27 -0500 Subject: [PATCH 355/751] Set default mime handling of files to open-in-dvm.desktop Uses the same logic of securedrop-client --- MANIFEST.in | 2 + files/mimeapps.list | 297 ++++++++++++++++++++++++++++++++++++++ files/open-in-dvm.desktop | 10 ++ 3 files changed, 309 insertions(+) create mode 100644 files/mimeapps.list create mode 100644 files/open-in-dvm.desktop diff --git a/MANIFEST.in b/MANIFEST.in index 8104f05fc..e1056bffe 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -9,4 +9,6 @@ include setup.py include files/send-to-usb.desktop include files/application-x-sd-export.xml include files/sd-logo.png +include files/mimeapps.list +include files/open-in-dvm.desktop diff --git a/files/mimeapps.list b/files/mimeapps.list new file mode 100644 index 000000000..63aabd78a --- /dev/null +++ b/files/mimeapps.list @@ -0,0 +1,297 @@ +[Default Applications] +application/x-sd-export=send-to-usb.desktop; +application/x-dia-diagram=open-in-dvm.desktop; +text/x-vcard=open-in-dvm.desktop; +text/directory=open-in-dvm.desktop; +text/calendar=open-in-dvm.desktop; +application/x-cd-image=open-in-dvm.desktop; +application/x-raw-disk-image=open-in-dvm.desktop; +application/x-raw-disk-image-xz-compressed=open-in-dvm.desktop; +image/x-compressed-xcf=open-in-dvm.desktop; +image/x-xcf=open-in-dvm.desktop; +image/x-psd=open-in-dvm.desktop; +image/x-fits=open-in-dvm.desktop; +image/bmp=open-in-dvm.desktop; +image/gif=open-in-dvm.desktop; +image/x-icb=open-in-dvm.desktop; +image/x-ico=open-in-dvm.desktop; +image/x-pcx=open-in-dvm.desktop; +image/x-portable-anymap=open-in-dvm.desktop; +image/x-portable-bitmap=open-in-dvm.desktop; +image/x-portable-graymap=open-in-dvm.desktop; +image/x-portable-pixmap=open-in-dvm.desktop; +image/x-xbitmap=open-in-dvm.desktop; +image/x-xpixmap=open-in-dvm.desktop; +image/svg+xml=open-in-dvm.desktop; +application/vnd.ms-word=open-in-dvm.desktop; +application/vnd.wordperfect=open-in-dvm.desktop; +application/vnd.sun.xml.writer=open-in-dvm.desktop; +application/vnd.sun.xml.writer.global=open-in-dvm.desktop; +application/vnd.sun.xml.writer.template=open-in-dvm.desktop; +application/vnd.stardivision.writer=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-web=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-master=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.document=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.template=open-in-dvm.desktop; +application/vnd.ms-excel=open-in-dvm.desktop; +application/vnd.stardivision.calc=open-in-dvm.desktop; +application/vnd.sun.xml.calc=open-in-dvm.desktop; +application/vnd.sun.xml.calc.template=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.spreadsheet=open-in-dvm.desktop; +application/vnd.oasis.opendocument.spreadsheet-template=open-in-dvm.desktop; +application/vnd.ms-powerpoint=open-in-dvm.desktop; +application/vnd.stardivision.impress=open-in-dvm.desktop; +application/vnd.sun.xml.impress=open-in-dvm.desktop; +application/vnd.sun.xml.impress.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.presentation=open-in-dvm.desktop; +application/vnd.oasis.opendocument.presentation-template=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.presentationml.presentation=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.presentationml.template=open-in-dvm.desktop; +application/vnd.stardivision.draw=open-in-dvm.desktop; +application/vnd.sun.xml.draw=open-in-dvm.desktop; +application/vnd.sun.xml.draw.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.graphics=open-in-dvm.desktop; +application/vnd.oasis.opendocument.graphics-template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.formula=open-in-dvm.desktop; +application/vnd.sun.xml.math=open-in-dvm.desktop; +application/vnd.stardivision.math=open-in-dvm.desktop; +application/vnd.oasis.opendocument.database=open-in-dvm.desktop; +application/vnd.sun.xml.base=open-in-dvm.desktop; +application/pdf=open-in-dvm.desktop; +application/postscript=open-in-dvm.desktop; +application/x-qw=open-in-dvm.desktop; +application/x-gnucash=open-in-dvm.desktop; +application/vnd.lotus-1-2-3=open-in-dvm.desktop; +application/x-oleo=open-in-dvm.desktop; +application/x-gnumeric=open-in-dvm.desktop; +application/x-xbase=open-in-dvm.desktop; +application/x-abiword=open-in-dvm.desktop; +application/x-dvi=open-in-dvm.desktop; +application/x-catalog=open-in-dvm.desktop; +application/x-rpm=open-in-dvm.desktop; +text/csv=open-in-dvm.desktop; +text/plain=open-in-dvm.desktop; +text/html=open-in-dvm.desktop; +application/xhtml+xml=open-in-dvm.desktop; +inode/directory=open-in-dvm.desktop; +x-content/blank-cd=open-in-dvm.desktop; +x-content/blank-dvd=open-in-dvm.desktop; +x-content/blank-bd=open-in-dvm.desktop; +x-content/blank-hddvd=open-in-dvm.desktop; +x-content/video-dvd=open-in-dvm.desktop; +x-content/video-vcd=open-in-dvm.desktop; +x-content/video-svcd=open-in-dvm.desktop; +#x-content/video-bluray=open-in-dvm.desktop; +#x-content/video-hddvd=open-in-dvm.desktop; +x-content/audio-cdda=open-in-dvm.desktop; +x-content/audio-dvd=open-in-dvm.desktop; +x-content/audio-player=open-in-dvm.desktop; +x-content/image-dcf=open-in-dvm.desktop; +x-content/image-picturecd=open-in-dvm.desktop; +# URI scheme handlers +x-scheme-handler/mailto=open-in-dvm.desktop; +x-scheme-handler/http=open-in-dvm.desktop; +x-scheme-handler/https=open-in-dvm.desktop; +application/mxf=open-in-dvm.desktop; +application/ogg=open-in-dvm.desktop; +application/ram=open-in-dvm.desktop; +application/sdp=open-in-dvm.desktop; +application/smil=open-in-dvm.desktop; +application/smil+xml=open-in-dvm.desktop; +application/vnd.apple.mpegurl=open-in-dvm.desktop; +application/vnd.ms-wpl=open-in-dvm.desktop; +application/vnd.rn-realmedia=open-in-dvm.desktop; +application/x-extension-m4a=open-in-dvm.desktop; +application/x-extension-mp4=open-in-dvm.desktop; +application/x-flac=open-in-dvm.desktop; +application/x-flash-video=open-in-dvm.desktop; +application/x-matroska=open-in-dvm.desktop; +application/x-netshow-channel=open-in-dvm.desktop; +application/x-ogg=open-in-dvm.desktop; +application/x-quicktime-media-link=open-in-dvm.desktop; +application/x-quicktimeplayer=open-in-dvm.desktop; +application/x-shorten=open-in-dvm.desktop; +application/x-smil=open-in-dvm.desktop; +application/xspf+xml=open-in-dvm.desktop; +audio/3gpp=open-in-dvm.desktop; +audio/ac3=open-in-dvm.desktop; +audio/AMR=open-in-dvm.desktop; +audio/AMR-WB=open-in-dvm.desktop; +audio/basic=open-in-dvm.desktop; +audio/midi=open-in-dvm.desktop; +audio/mp2=open-in-dvm.desktop; +audio/mp4=open-in-dvm.desktop; +audio/mpeg=open-in-dvm.desktop; +audio/mpegurl=open-in-dvm.desktop; +audio/ogg=open-in-dvm.desktop; +audio/prs.sid=open-in-dvm.desktop; +audio/vnd.rn-realaudio=open-in-dvm.desktop; +audio/x-aiff=open-in-dvm.desktop; +audio/x-ape=open-in-dvm.desktop; +audio/x-flac=open-in-dvm.desktop; +audio/x-gsm=open-in-dvm.desktop; +audio/x-it=open-in-dvm.desktop; +audio/x-m4a=open-in-dvm.desktop; +audio/x-matroska=open-in-dvm.desktop; +audio/x-mod=open-in-dvm.desktop; +audio/x-mp3=open-in-dvm.desktop; +audio/x-mpeg=open-in-dvm.desktop; +audio/x-mpegurl=open-in-dvm.desktop; +audio/x-ms-asf=open-in-dvm.desktop; +audio/x-ms-asx=open-in-dvm.desktop; +audio/x-ms-wax=open-in-dvm.desktop; +audio/x-ms-wma=open-in-dvm.desktop; +audio/x-musepack=open-in-dvm.desktop; +audio/x-pn-aiff=open-in-dvm.desktop; +audio/x-pn-au=open-in-dvm.desktop; +audio/x-pn-realaudio=open-in-dvm.desktop; +audio/x-pn-realaudio-plugin=open-in-dvm.desktop; +audio/x-pn-wav=open-in-dvm.desktop; +audio/x-pn-windows-acm=open-in-dvm.desktop; +audio/x-realaudio=open-in-dvm.desktop; +audio/x-real-audio=open-in-dvm.desktop; +audio/x-s3m=open-in-dvm.desktop; +audio/x-sbc=open-in-dvm.desktop; +audio/x-scpls=open-in-dvm.desktop; +audio/x-speex=open-in-dvm.desktop; +audio/x-stm=open-in-dvm.desktop; +audio/x-tta=open-in-dvm.desktop; +audio/x-wav=open-in-dvm.desktop; +audio/x-wavpack=open-in-dvm.desktop; +audio/x-vorbis=open-in-dvm.desktop; +audio/x-vorbis+ogg=open-in-dvm.desktop; +audio/x-xm=open-in-dvm.desktop; +image/vnd.rn-realpix=open-in-dvm.desktop; +image/x-pict=open-in-dvm.desktop; +misc/ultravox=open-in-dvm.desktop; +text/google-video-pointer=open-in-dvm.desktop; +text/x-google-video-pointer=open-in-dvm.desktop; +video/3gp=open-in-dvm.desktop; +video/3gpp=open-in-dvm.desktop; +video/dv=open-in-dvm.desktop; +video/divx=open-in-dvm.desktop; +video/fli=open-in-dvm.desktop; +video/flv=open-in-dvm.desktop; +video/mp2t=open-in-dvm.desktop; +video/mp4=open-in-dvm.desktop; +video/mp4v-es=open-in-dvm.desktop; +video/mpeg=open-in-dvm.desktop; +video/msvideo=open-in-dvm.desktop; +video/ogg=open-in-dvm.desktop; +video/quicktime=open-in-dvm.desktop; +video/vivo=open-in-dvm.desktop; +video/vnd.divx=open-in-dvm.desktop; +video/vnd.mpegurl=open-in-dvm.desktop; +video/vnd.rn-realvideo=open-in-dvm.desktop; +video/vnd.vivo=open-in-dvm.desktop; +video/webm=open-in-dvm.desktop; +video/x-anim=open-in-dvm.desktop; +video/x-avi=open-in-dvm.desktop; +video/x-flc=open-in-dvm.desktop; +video/x-fli=open-in-dvm.desktop; +video/x-flic=open-in-dvm.desktop; +video/x-flv=open-in-dvm.desktop; +video/x-m4v=open-in-dvm.desktop; +video/x-matroska=open-in-dvm.desktop; +video/x-mpeg=open-in-dvm.desktop; +video/x-mpeg2=open-in-dvm.desktop; +video/x-ms-asf=open-in-dvm.desktop; +video/x-ms-asx=open-in-dvm.desktop; +video/x-msvideo=open-in-dvm.desktop; +video/x-ms-wm=open-in-dvm.desktop; +video/x-ms-wmv=open-in-dvm.desktop; +video/x-ms-wmx=open-in-dvm.desktop; +video/x-ms-wvx=open-in-dvm.desktop; +video/x-nsv=open-in-dvm.desktop; +video/x-ogm+ogg=open-in-dvm.desktop; +video/x-theora+ogg=open-in-dvm.desktop; +video/x-totem-stream=open-in-dvm.desktop; +x-content/video-dvd=open-in-dvm.desktop; +x-content/video-vcd=open-in-dvm.desktop; +x-content/video-svcd=open-in-dvm.desktop; +x-scheme-handler/pnm=open-in-dvm.desktop; +x-scheme-handler/mms=open-in-dvm.desktop; +x-scheme-handler/net=open-in-dvm.desktop; +x-scheme-handler/rtp=open-in-dvm.desktop; +x-scheme-handler/rtmp=open-in-dvm.desktop; +x-scheme-handler/rtsp=open-in-dvm.desktop; +x-scheme-handler/mmsh=open-in-dvm.desktop; +x-scheme-handler/uvox=open-in-dvm.desktop; +x-scheme-handler/icy=open-in-dvm.desktop; +x-scheme-handler/icyx=open-in-dvm.desktop; +application/x-7z-compressed=open-in-dvm.desktop; +application/x-7z-compressed-tar=open-in-dvm.desktop; +application/x-ace=open-in-dvm.desktop; +application/x-alz=open-in-dvm.desktop; +application/x-ar=open-in-dvm.desktop; +application/x-arj=open-in-dvm.desktop; +application/x-bzip=open-in-dvm.desktop; +application/x-bzip-compressed-tar=open-in-dvm.desktop; +application/x-bzip1=open-in-dvm.desktop; +application/x-bzip1-compressed-tar=open-in-dvm.desktop; +application/x-cabinet=open-in-dvm.desktop; +application/x-cbr=open-in-dvm.desktop; +application/x-cbz=open-in-dvm.desktop; +application/x-compress=open-in-dvm.desktop; +application/x-compressed-tar=open-in-dvm.desktop; +application/x-cpio=open-in-dvm.desktop; +application/x-deb=open-in-dvm.desktop; +application/x-ear=open-in-dvm.desktop; +application/x-ms-dos-executable=open-in-dvm.desktop; +application/x-gtar=open-in-dvm.desktop; +application/x-gzip=open-in-dvm.desktop; +application/x-gzpostscript=open-in-dvm.desktop; +application/x-java-archive=open-in-dvm.desktop; +application/x-lha=open-in-dvm.desktop; +application/x-lhz=open-in-dvm.desktop; +application/x-lrzip=open-in-dvm.desktop; +application/x-lrzip-compressed-tar=open-in-dvm.desktop; +application/x-lzip=open-in-dvm.desktop; +application/x-lzip-compressed-tar=open-in-dvm.desktop; +application/x-lzma=open-in-dvm.desktop; +application/x-lzma-compressed-tar=open-in-dvm.desktop; +application/x-lzop=open-in-dvm.desktop; +application/x-lzop-compressed-tar=open-in-dvm.desktop; +application/x-ms-wim=open-in-dvm.desktop; +application/x-rar=open-in-dvm.desktop; +application/x-rar-compressed=open-in-dvm.desktop; +application/x-rzip=open-in-dvm.desktop; +application/x-tar=open-in-dvm.desktop; +application/x-tarz=open-in-dvm.desktop; +application/x-stuffit=open-in-dvm.desktop; +application/x-war=open-in-dvm.desktop; +application/x-xz=open-in-dvm.desktop; +application/x-xz-compressed-tar=open-in-dvm.desktop; +application/x-zip=open-in-dvm.desktop; +application/x-zip-compressed=open-in-dvm.desktop; +application/x-zoo=open-in-dvm.desktop; +application/zip=open-in-dvm.desktop; +application/x-archive=open-in-dvm.desktop; +application/vnd.ms-cab-compressed=open-in-dvm.desktop; +application/x-source-rpm=open-in-dvm.desktop; +image/bmp=open-in-dvm.desktop; +image/gif=open-in-dvm.desktop; +image/jpeg=open-in-dvm.desktop; +image/jpg=open-in-dvm.desktop; +image/pjpeg=open-in-dvm.desktop; +image/png=open-in-dvm.desktop; +image/tiff=open-in-dvm.desktop; +image/x-bmp=open-in-dvm.desktop; +image/x-gray=open-in-dvm.desktop; +image/x-icb=open-in-dvm.desktop; +image/x-ico=open-in-dvm.desktop; +image/x-png=open-in-dvm.desktop; +image/x-portable-anymap=open-in-dvm.desktop; +image/x-portable-bitmap=open-in-dvm.desktop; +image/x-portable-graymap=open-in-dvm.desktop; +image/x-portable-pixmap=open-in-dvm.desktop; +image/x-xbitmap=open-in-dvm.desktop; +image/x-xpixmap=open-in-dvm.desktop; +image/x-pcx=open-in-dvm.desktop; +image/svg+xml=open-in-dvm.desktop; +image/svg+xml-compressed=open-in-dvm.desktop; +image/vnd.wap.wbmp=open-in-dvm.desktop; diff --git a/files/open-in-dvm.desktop b/files/open-in-dvm.desktop new file mode 100644 index 000000000..64478ed45 --- /dev/null +++ b/files/open-in-dvm.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=Open in Disposable VM +Comment=Open file in a Disposable VM +TryExec=/usr/bin/qvm-open-in-vm +Exec=/usr/bin/qvm-open-in-vm '@dispvm:sd-viewer' %f +Icon=/usr/share/icons/Qubes/dispvm-gray.png +Terminal=false +Categories=Qubes;Utility; From 35a4ce39272f0be0004a0778c7150ab7fb818445 Mon Sep 17 00:00:00 2001 From: mickael e Date: Mon, 2 Mar 2020 11:20:12 -0500 Subject: [PATCH 356/751] securedrop-export 0.2.1 --- changelog.md | 4 ++++ securedrop_export/VERSION | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index b4ede824b..74cc058c8 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.1 + + * Open files in dvm by default + ## 0.2.0 * Initial beta release. diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index 0ea3a944b..0c62199f1 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.0 +0.2.1 From 89668e21f486a0b9ad069f9b8f9be2d5fdedaa4d Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Mon, 2 Mar 2020 10:03:14 -0800 Subject: [PATCH 357/751] Infers hostname for "localvm" setting Still checks the config first, but if the "localvm" flag isn't set there, defaults to the hostname provided by the system. Useful for simplfying config story between TemplateVMs & AppVMs in Qubes. --- VERSION | 2 +- changelog.md | 4 ++++ sd-rsyslog | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 6e8bf73aa..17e51c385 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.0 +0.1.1 diff --git a/changelog.md b/changelog.md index 1456efc39..32937ae6f 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.1 + + * Infers hostname from system settings, if no config value found. + ## 0.1.0 * Initial beta release. diff --git a/sd-rsyslog b/sd-rsyslog index 4f3233ee5..09432263d 100644 --- a/sd-rsyslog +++ b/sd-rsyslog @@ -30,6 +30,7 @@ import os import logging import configparser from subprocess import Popen, PIPE +from socket import gethostname # Global definitions specific to your plugin process = None @@ -81,7 +82,7 @@ def onInit(): config = configparser.ConfigParser() config.read('/etc/sd-rsyslog.conf') logvmname = config['sd-rsyslog']['remotevm'] - localvmname = config['sd-rsyslog']['localvm'] + localvmname = config['sd-rsyslog'].get('localvm', gethostname()) process = Popen( ["/usr/lib/qubes/qrexec-client-vm", logvmname, "securedrop.Log"], stdin=PIPE, From fdefcdf6e2d2ab1d2dd90602af78eeebd3fc6100 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 20 Mar 2020 21:06:51 -0400 Subject: [PATCH 358/751] logging: avoid storing original filename of source document --- securedrop_export/print/actions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index a8031f26a..f0bc5adf3 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -197,7 +197,7 @@ def print_file(self, file_to_print): ) file_to_print = converted_path - logger.info('Sending file to printer {}:{}'.format(self.printer_name, file_to_print)) + logger.info('Sending file to printer {}'.format(self.printer_name)) self.submission.safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], error_message=ExportStatus.ERROR_PRINT.value From ad40a19c475973b332ad64a72dd72db14354e8aa Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 20 Mar 2020 12:01:40 -0400 Subject: [PATCH 359/751] application/x-desktop -> open-in-dvm --- files/mimeapps.list | 1 + 1 file changed, 1 insertion(+) diff --git a/files/mimeapps.list b/files/mimeapps.list index 63aabd78a..886a600b0 100644 --- a/files/mimeapps.list +++ b/files/mimeapps.list @@ -5,6 +5,7 @@ text/x-vcard=open-in-dvm.desktop; text/directory=open-in-dvm.desktop; text/calendar=open-in-dvm.desktop; application/x-cd-image=open-in-dvm.desktop; +application/x-desktop=open-in-dvm.desktop; application/x-raw-disk-image=open-in-dvm.desktop; application/x-raw-disk-image-xz-compressed=open-in-dvm.desktop; image/x-compressed-xcf=open-in-dvm.desktop; From 5e2955d6f1a700d611181d1dc1503947aa9eb0cd Mon Sep 17 00:00:00 2001 From: mickael e Date: Mon, 23 Mar 2020 09:20:48 -0400 Subject: [PATCH 360/751] Adds view-only parameter to open-in-dvm.desktop Ensures changes to a file opened in a dvm are not copied back to the calling vm --- files/open-in-dvm.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/open-in-dvm.desktop b/files/open-in-dvm.desktop index 64478ed45..5dd268167 100644 --- a/files/open-in-dvm.desktop +++ b/files/open-in-dvm.desktop @@ -4,7 +4,7 @@ Version=1.0 Name=Open in Disposable VM Comment=Open file in a Disposable VM TryExec=/usr/bin/qvm-open-in-vm -Exec=/usr/bin/qvm-open-in-vm '@dispvm:sd-viewer' %f +Exec=/usr/bin/qvm-open-in-vm --view-only '@dispvm:sd-viewer' %f Icon=/usr/share/icons/Qubes/dispvm-gray.png Terminal=false Categories=Qubes;Utility; From ee0e73adc9c7865c8e2a1cb769559eea2782b006 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 20 Mar 2020 12:02:13 -0400 Subject: [PATCH 361/751] securedrop-export 0.2.2 --- changelog.md | 4 ++++ securedrop_export/VERSION | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 74cc058c8..84074d1db 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.2 + + * Update mimetype handling + ## 0.2.1 * Open files in dvm by default diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index 0c62199f1..ee1372d33 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.1 +0.2.2 From 98ace34e4ad66c98425e3c05371a2d0925809c3e Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 27 Mar 2020 17:28:27 -0400 Subject: [PATCH 362/751] securedrop-export 0.2.3 --- changelog.md | 5 +++++ securedrop_export/VERSION | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 84074d1db..dafcbb260 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 0.2.3 + + * Adds gnome-disks to sd-devices + * Documentation updates + ## 0.2.2 * Update mimetype handling diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index ee1372d33..717903969 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.2 +0.2.3 From 4bfc44efbd8412c25d6b643a855d46a20321d8c2 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 30 Mar 2020 16:33:05 +0530 Subject: [PATCH 363/751] Fixes#68 uses incoming timeout value from JSON Now we are using the incoming timeout value from the JSON input. --- securedrop_proxy/main.py | 3 +++ tests/test_main.py | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index 69abf48d7..ff979053a 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -42,4 +42,7 @@ def __main__(incoming: str, p: Proxy) -> None: p.req = req + if "timeout" in client_req: + p.timeout = client_req["timeout"] + p.proxy() diff --git a/tests/test_main.py b/tests/test_main.py index 19bc4e5a8..05f158623 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -55,6 +55,48 @@ def on_done(self): for item in json.loads(response["body"]): self.assertEqual(item["userId"], 1) + @vcr.use_cassette("fixtures/main_json_response_with_timeout.yaml") + def test_json_response_with_timeout(self): + test_input_json = """{ "method": "GET", + "path_query": "/posts?userId=1", + "timeout": 40.0 }""" + + req = proxy.Req() + req.method = "GET" + req.path_query = "" + req.headers = {"Accept": "application/json"} + + # Use custom callbacks + def on_save(self, fh, res): + pass + + def on_done(self): + assert self.res.status == http.HTTPStatus.OK + print(json.dumps(self.res.__dict__)) + + self.p = proxy.Proxy(self.conf_path, req) + + # Patching on_save and on_done + + self.p.on_done = types.MethodType(on_done, self.p) + self.p.on_save = types.MethodType(on_save, self.p) + + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + main.__main__(test_input_json, self.p) + output = out.getvalue().strip() + finally: + sys.stdout = saved_stdout + + # Test that the right timeout was set in proxy object + assert self.p.timeout == 40.0 + + response = json.loads(output) + for item in json.loads(response["body"]): + self.assertEqual(item["userId"], 1) + @vcr.use_cassette("fixtures/main_non_json_response.yaml") def test_non_json_response(self): test_input_json = """{ "method": "GET", From bcfa19fa4825f54592899e4eeecb3c2ad31715f0 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Mon, 30 Mar 2020 11:47:52 -0400 Subject: [PATCH 364/751] Increase the proxy's default timeout Increase the default Requests connection and read timeout from ten to 120 seconds. --- securedrop_proxy/proxy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 8af6862be..f709b1237 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -46,7 +46,7 @@ def __init__(self, status: int) -> None: class Proxy: def __init__( - self, conf_path: str, req: Req = Req(), timeout: float = 10.0 + self, conf_path: str, req: Req = Req(), timeout: float = 120.0 ) -> None: # The configuration path for Proxy is a must. self.read_conf(conf_path) From d97074662d1db0b970ce05e5ca96b2ba3699fb48 Mon Sep 17 00:00:00 2001 From: mickael e Date: Mon, 30 Mar 2020 14:00:36 -0400 Subject: [PATCH 365/751] securedrop-proxy 0.2.1 --- changelog.md | 4 ++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index dae1be583..c5590c3da 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.1 + + * Increase default timeout to 120s from 10s (#70) + ## 0.2.0 * Initial beta release. diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 0ea3a944b..0c62199f1 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.2.0 +0.2.1 From 01511033357ce7397bdb812ce58fcefc0315e43a Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 1 Apr 2020 14:52:35 -0400 Subject: [PATCH 366/751] Update pyyaml to 5.3.1 Addresses CVE-2020-1747 --- dev-requirements.txt | 26 +++++++++++++------------- requirements.in | 2 +- requirements.txt | 24 ++++++++++++------------ 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 1153d0469..5ee12c538 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -115,18 +115,18 @@ pycodestyle==2.4.0 \ pyflakes==2.0.0 \ --hash=sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49 \ --hash=sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae -pyyaml==5.1 \ - --hash=sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c \ - --hash=sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95 \ - --hash=sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2 \ - --hash=sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4 \ - --hash=sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad \ - --hash=sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba \ - --hash=sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1 \ - --hash=sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e \ - --hash=sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673 \ - --hash=sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13 \ - --hash=sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19 +pyyaml==5.3.1 \ + --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ + --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ + --hash=sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2 \ + --hash=sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648 \ + --hash=sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf \ + --hash=sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f \ + --hash=sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2 \ + --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ + --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ + --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a requests==2.20.0 \ --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 @@ -178,4 +178,4 @@ yarl==1.2.6 \ # WARNING: The following packages were not pinned, but pip requires them to be # pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. -# setuptools +# setuptools==46.1.3 # via flake8 diff --git a/requirements.in b/requirements.in index 1e2aafcf0..1f2566b91 100644 --- a/requirements.in +++ b/requirements.in @@ -3,7 +3,7 @@ chardet==3.0.4 furl==2.0.0 idna==2.7 orderedmultidict==1.0 -PyYAML==5.1 +PyYAML==5.3.1 six==1.11.0 requests==2.20.0 urllib3==1.24.3 diff --git a/requirements.txt b/requirements.txt index 38b09c7e3..214b04d95 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,18 +19,18 @@ idna==2.7 \ orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 -pyyaml==5.1 \ - --hash=sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c \ - --hash=sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95 \ - --hash=sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2 \ - --hash=sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4 \ - --hash=sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad \ - --hash=sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba \ - --hash=sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1 \ - --hash=sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e \ - --hash=sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673 \ - --hash=sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13 \ - --hash=sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19 +pyyaml==5.3.1 \ + --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ + --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ + --hash=sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2 \ + --hash=sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648 \ + --hash=sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf \ + --hash=sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f \ + --hash=sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2 \ + --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ + --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ + --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a requests==2.20.0 \ --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 From 2f71915862ae7a04261a435e46c9fafb4a609ab1 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 30 Mar 2020 18:49:20 -0400 Subject: [PATCH 367/751] doc: explain how to pip install into virtualenv --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 7416d7931..523df6540 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,13 @@ make test We cover all the API calls supported by the SecureDrop Journalist Interface API. +To install the SDK into your `virtualenv` for testing purposes: + +``` +pip uninstall securedrop-sdk +pip install git+https://github.com/freedomofpress/securedrop-sdk@my_branch#egg=securedrop-sdk +``` + ## Testing The tests are located in the `tests` directory. This project uses [vcrpy](http://vcrpy.readthedocs.io/en/latest/) to record and then reply the API calls so that From cb4b5ab882de321879ce6e13088f1b072c5345ad Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 1 Apr 2020 17:28:00 -0400 Subject: [PATCH 368/751] Update to PyYAML 5.3.1 in build-requirements Use the wheel hosted on pip mirror --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index 390b2281c..ed7807329 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -3,7 +3,7 @@ chardet==3.0.4 --hash=sha256:f5632e583a4f61f1e16d0cc98127d241fb11c3c6ddfddee1593 furl==2.0.0 --hash=sha256:1855003e64dcb934556ad79994ba1a3a852da337e353d84d3b4ef75031913451 idna==2.7 --hash=sha256:491f674364ba3232ed1eb4c1eb7407887f62cef6c300aad7df6e01acd88ffb25 orderedmultidict==1.0 --hash=sha256:51efddca0b4ae6d885bbafd8ca44e51758166c144cf006dbead5c9394b2a9eae -pyyaml==5.1 --hash=sha256:59ff9ed67bd8be210f91fd20f0ef844ee897d11eb4c19c611a77a37896c124b9 +pyyaml==5.3.1 --hash=sha256:cb4442140d3195f5f799096aa35aadce15f493046135a03668023b80824dd44c requests==2.20.0 --hash=sha256:d87b2085783d31d874ac7bc62660e287932aaee7059e80b41b76462eb18d35cc six==1.11.0 --hash=sha256:aa4ad34049ddff178b533062797fd1db9f0038b7c5c2461a7cde2244300b9f3d urllib3==1.24.3 --hash=sha256:3d440cbb168e2c963d5099232bdb3f7390bf031b6270dad1bc79751698a1399a From 3f8e92fd284119d547937243c88404f449dd3c0f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 30 Mar 2020 16:58:51 +0530 Subject: [PATCH 369/751] Fixes #114 Uses timeout in the proxy Now we are passing the given timeout value in any API call to the proxy object in Qubes. --- sdclientapi/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 37729d92c..663de041d 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -191,6 +191,9 @@ def _send_rpc_json_request( if headers is not None and headers: data["headers"] = headers + if timeout: + data["timeout"] = timeout + data_str = json.dumps(data) try: From eb4338e4f4a8b9f02a3486b91c8d5a4b750deeca Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 30 Mar 2020 18:31:47 +0530 Subject: [PATCH 370/751] To raise a proper reply error --- sdclientapi/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 663de041d..c377db3f1 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -209,6 +209,8 @@ def _send_rpc_json_request( raise ServerConnectionError elif "error" in data and result["status"] == http.HTTPStatus.FORBIDDEN: raise AuthError(data["error"]) + elif "error" in data and result["status"] == http.HTTPStatus.BAD_REQUEST: + raise ReplyError(data["message"]) elif "error" in data and result["status"] != http.HTTPStatus.NOT_FOUND: # We exclude 404 since if we encounter a 404, it means that an # item is missing. In that case we return to the caller to @@ -667,8 +669,6 @@ def reply_source( timeout=self.default_request_timeout, ) - if status_code == 400: - raise ReplyError(data["message"]) if "message" in data and data["message"] == "Your reply has been stored": return Reply(uuid=data["uuid"], filename=data["filename"]) From 99ebc0625021cde9c0376db43f8fbeeb3c470e99 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 30 Mar 2020 20:45:11 +0530 Subject: [PATCH 371/751] Updates test cases for logout test case Now all tests pass locally tests/test_apiproxy.py::TestAPIProxy::test_reply_source has a time.sleep(31) as we have to generate a new TOTP value. Also the test token file name is different for HTTP calls and APIProxy calls (in QubesOS). --- data/setUp.json | 2 +- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_logout.json | 2 +- data/test_reply_source.json | 2 +- data/test_reply_source_with_uuid.json | 2 +- data/test_star_add_remove.json | 2 +- sdclientapi/__init__.py | 5 ++- tests/conftest.py | 13 ++++++++ tests/test_api.py | 10 +++--- tests/test_apiproxy.py | 35 ++++++++++++++++---- tests/utils.py | 18 ++++++++++ 32 files changed, 93 insertions(+), 42 deletions(-) create mode 100644 tests/conftest.py diff --git a/data/setUp.json b/data/setUp.json index 88cbc367d..21cbb9b0d 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"journalist_first_name\\\": \\\"bob\\\", \\n \\\"journalist_last_name\\\": \\\"bobathy\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 39bdae048..278e34800 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+2": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:12 GMT\", \"Content-Length\": \"4899\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/34074608-4b95-43b3-a8b2-159ff341cf28\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"34074608-4b95-43b3-a8b2-159ff341cf28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/d72d6d47-343e-414f-b227-cce4c582a14e\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"d72d6d47-343e-414f-b227-cce4c582a14e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+4": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/34074608-4b95-43b3-a8b2-159ff341cf28\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"34074608-4b95-43b3-a8b2-159ff341cf28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/d72d6d47-343e-414f-b227-cce4c582a14e\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"d72d6d47-343e-414f-b227-cce4c582a14e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"4418\", \"Date\": \"Fri, 19 Apr 2019 08:27:13 GMT\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"4899\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"ede2b9aa-eb73-4609-a6da-3afd9ab7283a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-grey_catalog-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"1dd7b8ae-8732-4a7b-a65d-7ad88a4db490\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/34074608-4b95-43b3-a8b2-159ff341cf28\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"34074608-4b95-43b3-a8b2-159ff341cf28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-transcontinental_seniority-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies/d72d6d47-343e-414f-b227-cce4c582a14e\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"d72d6d47-343e-414f-b227-cce4c582a14e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies/ede2b9aa-eb73-4609-a6da-3afd9ab7283a\"}+3": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:13 GMT\", \"Content-Length\": \"33\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/f6c8f358-96da-408d-8585-faf5adcaf387\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"f6c8f358-96da-408d-8585-faf5adcaf387\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/7e12444e-9c87-4ccd-a9b8-7705239bf197\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"7e12444e-9c87-4ccd-a9b8-7705239bf197\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5625\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:19 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/f6c8f358-96da-408d-8585-faf5adcaf387\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"f6c8f358-96da-408d-8585-faf5adcaf387\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/7e12444e-9c87-4ccd-a9b8-7705239bf197\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"7e12444e-9c87-4ccd-a9b8-7705239bf197\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5625\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:20 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:20 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/f6c8f358-96da-408d-8585-faf5adcaf387\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"f6c8f358-96da-408d-8585-faf5adcaf387\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/7e12444e-9c87-4ccd-a9b8-7705239bf197\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"7e12444e-9c87-4ccd-a9b8-7705239bf197\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5068\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:21 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index d52935fe2..784f12969 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:16 GMT\", \"Content-Length\": \"10419\"}, \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+2": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"13010\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:15 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"grey catalog\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADHVnyB4CfVHvlxk9pHDNTPsc/Gsu331+RX1WNzFFMyLx1SvqoO\\\\nffHPIA5bdq6lVZHP2xz8DtxnheN/A3V3uWbwJ3Rz/L0AdZ5UpUYFgES4tHHeAvE0\\\\nJe8e0o2AmgCUUU2p0le8fDgcm+oD/PLKdEWcWD5NW5+Bqi7zbR/IWTNmDxHHYSca\\\\nJii63g2kUtuPWYJp9oq+rwgtE/jO7jlFwaKPc3gbJl8wfXHbcWM/RwA9/JyncyHQ\\\\nTumk7pTNpwzhbOuCAxpxA1+Sh6ik8iT0oQb9PtYY9hIzau1dCE+89y/HSfiDW5pr\\\\n+5uiP2tkyby/ctGHqPxhW7vO8eyYuwkiQILaZZYoWi0+PNVMccag+8NimVG+jbHI\\\\n5CyQlAlm6cf1jliCRzYlvF7AGO47/0BjW+fnXlDXra3kLusWGm2cMfDWdGffRThJ\\\\n3jagjBgBKPK0janWzkh9aVPFxuB9O5NFM+8vy3ArOmiGg103oMurXMjlLTWRrnuO\\\\nYgq1b3UiwvioYFVj4VHWLK6HoGYQKn+U0NXAZxlbQx2rtF+wKeaZYKWm+HaTSW+U\\\\nDP959GtF/8wpspzrD5S7U0hSA2IWVMxoDnemBwIoZq2IkgACn0D1/GdU8XRAUOQa\\\\ng5JLwuBbe7v7K8rnawCjKL0xTM4WPqSmirOsxkgFHCzlxq2fg4RrGy81ewARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VlJIMzNOMjNaRkk3RFRXRFVEWkRYN0RCNDQz\\\\nNEJJTzJOMlczSkxCRVBNQjNHV1VJVExXSFZaTTVDSzJDQjRaWkZYTFBGVUFSVFBU\\\\nRDRUSEFNRVRWMllMT0tIQTY3WlpSNjQyMzQyWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEN4dNKkG7iSzDzkP/R53AiznBgCc\\\\n8D9g5ixe//C43oeOYU9hsss/tw+eDSee/DXxPDRbT0NjLM6rciiMOHj8/PkPUxFW\\\\naZCIvDgcBSQGhWP55pd6EY0oewFHo1J2geeUVJEmUFsUtm1GBahz6BXAF5ZTCUIZ\\\\nW7xd1ZkAVW3UcHmVpTFOoaR6cJVQUytujzhThdG3zXLWqfjPraGSynPaVs25PlMI\\\\nrabfMopPSMfLSZfyL/YdgbBxaoT3O5WFZgpu0OVPnA8A36zz4lyUz/T1Ke1M3rI5\\\\nnrFAbWl5BYxwmUtCjkHiy6g5cfCuQg/2N1BZPr0EZzo24tQQ5Gn0n/0Zu8fO0fxe\\\\nYIjVN38/lB8G0yKlx2OEsO6ir4b17YO2Odb1+Xd2qjTxAq1NXMQ7EpG4/+2YZLXL\\\\ntjBf+ASIQ9ILz0SMImCPqH4GrI+6z+ih+SKud4cRwSujjKK8P4UImbi5NXNZXIRQ\\\\nNDsVt0KkDCNV5jN/PwpLrBKyREGamE2bg4GuT3sYVN9vOwTLvTVqBvpMRXrf8EGB\\\\nJ5MGf4Bzsz7WPWbHxSrFkovF5MCti6PcJsf97i5rL96Wlk4q9pkj+qEr8+fk42A5\\\\nRMiyATP2BJgx1aDq7QD7uni2X88vfICgJaCIkb/OsAZyjnv8XvV3wmXUw7ERgYo1\\\\nq9xf+zvij+WXRbn5J4OegpW9XRZOMNst\\\\n=ZPuK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:51.042866Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\"}+3": "{\"headers\": {\"Content-Length\": \"50\", \"Date\": \"Fri, 19 Apr 2019 08:27:16 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"grey catalog\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADHVnyB4CfVHvlxk9pHDNTPsc/Gsu331+RX1WNzFFMyLx1SvqoO\\\\nffHPIA5bdq6lVZHP2xz8DtxnheN/A3V3uWbwJ3Rz/L0AdZ5UpUYFgES4tHHeAvE0\\\\nJe8e0o2AmgCUUU2p0le8fDgcm+oD/PLKdEWcWD5NW5+Bqi7zbR/IWTNmDxHHYSca\\\\nJii63g2kUtuPWYJp9oq+rwgtE/jO7jlFwaKPc3gbJl8wfXHbcWM/RwA9/JyncyHQ\\\\nTumk7pTNpwzhbOuCAxpxA1+Sh6ik8iT0oQb9PtYY9hIzau1dCE+89y/HSfiDW5pr\\\\n+5uiP2tkyby/ctGHqPxhW7vO8eyYuwkiQILaZZYoWi0+PNVMccag+8NimVG+jbHI\\\\n5CyQlAlm6cf1jliCRzYlvF7AGO47/0BjW+fnXlDXra3kLusWGm2cMfDWdGffRThJ\\\\n3jagjBgBKPK0janWzkh9aVPFxuB9O5NFM+8vy3ArOmiGg103oMurXMjlLTWRrnuO\\\\nYgq1b3UiwvioYFVj4VHWLK6HoGYQKn+U0NXAZxlbQx2rtF+wKeaZYKWm+HaTSW+U\\\\nDP959GtF/8wpspzrD5S7U0hSA2IWVMxoDnemBwIoZq2IkgACn0D1/GdU8XRAUOQa\\\\ng5JLwuBbe7v7K8rnawCjKL0xTM4WPqSmirOsxkgFHCzlxq2fg4RrGy81ewARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VlJIMzNOMjNaRkk3RFRXRFVEWkRYN0RCNDQz\\\\nNEJJTzJOMlczSkxCRVBNQjNHV1VJVExXSFZaTTVDSzJDQjRaWkZYTFBGVUFSVFBU\\\\nRDRUSEFNRVRWMllMT0tIQTY3WlpSNjQyMzQyWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEN4dNKkG7iSzDzkP/R53AiznBgCc\\\\n8D9g5ixe//C43oeOYU9hsss/tw+eDSee/DXxPDRbT0NjLM6rciiMOHj8/PkPUxFW\\\\naZCIvDgcBSQGhWP55pd6EY0oewFHo1J2geeUVJEmUFsUtm1GBahz6BXAF5ZTCUIZ\\\\nW7xd1ZkAVW3UcHmVpTFOoaR6cJVQUytujzhThdG3zXLWqfjPraGSynPaVs25PlMI\\\\nrabfMopPSMfLSZfyL/YdgbBxaoT3O5WFZgpu0OVPnA8A36zz4lyUz/T1Ke1M3rI5\\\\nnrFAbWl5BYxwmUtCjkHiy6g5cfCuQg/2N1BZPr0EZzo24tQQ5Gn0n/0Zu8fO0fxe\\\\nYIjVN38/lB8G0yKlx2OEsO6ir4b17YO2Odb1+Xd2qjTxAq1NXMQ7EpG4/+2YZLXL\\\\ntjBf+ASIQ9ILz0SMImCPqH4GrI+6z+ih+SKud4cRwSujjKK8P4UImbi5NXNZXIRQ\\\\nNDsVt0KkDCNV5jN/PwpLrBKyREGamE2bg4GuT3sYVN9vOwTLvTVqBvpMRXrf8EGB\\\\nJ5MGf4Bzsz7WPWbHxSrFkovF5MCti6PcJsf97i5rL96Wlk4q9pkj+qEr8+fk42A5\\\\nRMiyATP2BJgx1aDq7QD7uni2X88vfICgJaCIkb/OsAZyjnv8XvV3wmXUw7ERgYo1\\\\nq9xf+zvij+WXRbn5J4OegpW9XRZOMNst\\\\n=ZPuK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:51.042866Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\", \\n \\\"uuid\\\": \\\"e4cdfff6-9c8b-4716-bcd1-cad716fad992\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:14 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"13010\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"umbrella jute\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7F2CD2AFAF0900543EFC63F2403A0DFD072AE0DE\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC5XB+Yd/YmUbXqC0mxbAO6JNL46y4Ql0ARebVsDBWE2QvLdEew\\\\nvNHu316Jh3PA5uYVLloGyoQokA4Kftqg5xwODiK+qu9B4wmj4p96c+3fehNpG+qO\\\\nrcCPxNh2SxyUESQmTWppK3El20bobqOHCG1G2T12v8UeK3tfKu9bP5JiFq/v4fKY\\\\nHkfTwarHhmg8bZad6ytRaEymjMguirqLJpnwmdnk/Pi8dnvO2iMU24+5TyClw9zP\\\\nlpNFm4KUnjnZG8whnJs41nzy9uyb1w4cxjsqfyaVrvF2waHYE5Jz9mmIc07jKzcy\\\\nuc/jWu/j/P07J2Z/cTVobbgx26+Aos5bEWnTOz8iy+vlmjjztGz5RCxJL9MMMqDj\\\\npy1VCK/Ku98pTySDo45KbZFbr9dc1Ir2BHQ+xIi39N64vqlhSaIm4qXhqwsTZMkV\\\\nS5vepynBEsg5L3wFlRY2MWweHdHYKOmTxd3VmkJL5045DDlm6ZJwwQuNsa0c17c/\\\\nuQrrt8s2+fCzQza2GjzhjqLVfS69Xpl1h9GZHuQXE9jFgKF6m26Gupbb3MfAmqkA\\\\nrDb5KfCcnYeukTLwF+WZRLqStYDZiEWlFB9HF8YeynZygOnD8Ym9gZcfywemCaKV\\\\nb6l8wkUMd3/9o8j0Taz627ddfaPGtva3ts4/Nhq9CzWxUdf4XCsYqRNy+QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RVIzRUtWQ1lDNk1JWEpCVUdDU1Y0UVdNUUpX\\\\nREMyT09FTU1aNUJRNVNDV1gyWEhYTlFNU0JJWUU3STM3SjZBQU5UNEFYNUtMU1FI\\\\nUDI3TUFMQVNFVEtKQUVERjYyRjNNREpSN0RTWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEA6Df0HKuDeIgwP/iumAAGQ7xsM\\\\nqPL3BmAm9BF5H+wxbDn3OehMCHpIQGy8EVAUcmlKd/VrLU5P5jwa/98L+BBAl6+u\\\\nrTuNNLaf6Fi7do9XIMhrMZGquHtSOGP7cuRvzUVKjusZRjY3rRRXAoboWly+16WE\\\\n5K0wAgK6IUWllFx2oWrqlWaVygWqZkhPJl1lPdrrQm4jjrDJQj7PWhGGciaoAXqC\\\\nCRbF9Q7RejZWbexS9d5XVQVspn9OSOJOYGlemJ6Cyhlj8pLQorRUpgKC5Wr3CGiU\\\\nVxp9VQycRNGNKTMpG84Qf1cwExJgf1pjmVySZ49gNKsL30Fua3tXknE8VIc9uUOz\\\\nwE0DcdY4Sr55tR2VTYBOpTbk+b+OPGHo1nY0MPoYxagFvu9jwpgTEUDgfvkm+326\\\\ndBI+VMGHeoMm+8h4DLRQmDaufF3YJAY/7L0w5AbvVJ9aiLVSeznyeUE1H6R1pnJS\\\\n5UwWpN+fvUbVxV8FySrd4CjFvi09nQyfAaZBNalwF0nr5EjFAB2gH/e+xtK0sKRZ\\\\nc3Cd3UybLkz7YZdXUx/QUfw0kTBm0+o+YaQKU3typNrTYmKyv6M5XvMns9L0ghRA\\\\nkw5bE1VmwnGXIpCnLvEXu0kTK79EEGUluCxQQha5YSpeFFzI0jW4XF91GpmE96fL\\\\nzlMB4PEk/CgO8tOugLP1cgQbDe64K2uT\\\\n=CDWk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.076212Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"939539a2-c78d-4869-ac4c-55f0e015f982\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"13338\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:21 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"umbrella jute\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7F2CD2AFAF0900543EFC63F2403A0DFD072AE0DE\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC5XB+Yd/YmUbXqC0mxbAO6JNL46y4Ql0ARebVsDBWE2QvLdEew\\\\nvNHu316Jh3PA5uYVLloGyoQokA4Kftqg5xwODiK+qu9B4wmj4p96c+3fehNpG+qO\\\\nrcCPxNh2SxyUESQmTWppK3El20bobqOHCG1G2T12v8UeK3tfKu9bP5JiFq/v4fKY\\\\nHkfTwarHhmg8bZad6ytRaEymjMguirqLJpnwmdnk/Pi8dnvO2iMU24+5TyClw9zP\\\\nlpNFm4KUnjnZG8whnJs41nzy9uyb1w4cxjsqfyaVrvF2waHYE5Jz9mmIc07jKzcy\\\\nuc/jWu/j/P07J2Z/cTVobbgx26+Aos5bEWnTOz8iy+vlmjjztGz5RCxJL9MMMqDj\\\\npy1VCK/Ku98pTySDo45KbZFbr9dc1Ir2BHQ+xIi39N64vqlhSaIm4qXhqwsTZMkV\\\\nS5vepynBEsg5L3wFlRY2MWweHdHYKOmTxd3VmkJL5045DDlm6ZJwwQuNsa0c17c/\\\\nuQrrt8s2+fCzQza2GjzhjqLVfS69Xpl1h9GZHuQXE9jFgKF6m26Gupbb3MfAmqkA\\\\nrDb5KfCcnYeukTLwF+WZRLqStYDZiEWlFB9HF8YeynZygOnD8Ym9gZcfywemCaKV\\\\nb6l8wkUMd3/9o8j0Taz627ddfaPGtva3ts4/Nhq9CzWxUdf4XCsYqRNy+QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RVIzRUtWQ1lDNk1JWEpCVUdDU1Y0UVdNUUpX\\\\nREMyT09FTU1aNUJRNVNDV1gyWEhYTlFNU0JJWUU3STM3SjZBQU5UNEFYNUtMU1FI\\\\nUDI3TUFMQVNFVEtKQUVERjYyRjNNREpSN0RTWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEA6Df0HKuDeIgwP/iumAAGQ7xsM\\\\nqPL3BmAm9BF5H+wxbDn3OehMCHpIQGy8EVAUcmlKd/VrLU5P5jwa/98L+BBAl6+u\\\\nrTuNNLaf6Fi7do9XIMhrMZGquHtSOGP7cuRvzUVKjusZRjY3rRRXAoboWly+16WE\\\\n5K0wAgK6IUWllFx2oWrqlWaVygWqZkhPJl1lPdrrQm4jjrDJQj7PWhGGciaoAXqC\\\\nCRbF9Q7RejZWbexS9d5XVQVspn9OSOJOYGlemJ6Cyhlj8pLQorRUpgKC5Wr3CGiU\\\\nVxp9VQycRNGNKTMpG84Qf1cwExJgf1pjmVySZ49gNKsL30Fua3tXknE8VIc9uUOz\\\\nwE0DcdY4Sr55tR2VTYBOpTbk+b+OPGHo1nY0MPoYxagFvu9jwpgTEUDgfvkm+326\\\\ndBI+VMGHeoMm+8h4DLRQmDaufF3YJAY/7L0w5AbvVJ9aiLVSeznyeUE1H6R1pnJS\\\\n5UwWpN+fvUbVxV8FySrd4CjFvi09nQyfAaZBNalwF0nr5EjFAB2gH/e+xtK0sKRZ\\\\nc3Cd3UybLkz7YZdXUx/QUfw0kTBm0+o+YaQKU3typNrTYmKyv6M5XvMns9L0ghRA\\\\nkw5bE1VmwnGXIpCnLvEXu0kTK79EEGUluCxQQha5YSpeFFzI0jW4XF91GpmE96fL\\\\nzlMB4PEk/CgO8tOugLP1cgQbDe64K2uT\\\\n=CDWk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.076212Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"939539a2-c78d-4869-ac4c-55f0e015f982\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"13338\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:22 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:23 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"10678\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:24 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index 3be9ceeca..c81652714 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:19 GMT\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"7814\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:19 GMT\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+2": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"10419\", \"Date\": \"Fri, 19 Apr 2019 08:27:18 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"10419\", \"Date\": \"Fri, 19 Apr 2019 08:27:17 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"transcontinental seniority\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADN06xkrFHI1s9bdnX93xLsqz2p0vpBGsbAGFUDfX4jzpZTYAU0\\\\nkFFTA5VnoKbUYOcosGwyQoqTIz/qZB6P+n2iIbH6I6tFXN78awEXWeX0zqN3Vvvd\\\\n0gwNpEtwNmTOZycGSi9ndtT8wDusYhxlpVsaHuCL3K20qSf54eiNEitXkDABn/bC\\\\nAYwtbr5iPnYpXnytmf/mKVXPeee9a0+2At3bz0fDes9LcEhKz1aaGFVwPy2IdMeK\\\\nKSh6O/NlthNptmYk15Di/D37BM3FXEyUQbi5JRmhQEJYaSjvLDkPzTmQc0Z8e1e4\\\\n5iyI6YQJwSf92FMba7iuw/F+eZb4MSzrKG9ytcRYns+0FkWQAPDhpl2OopX0/Rul\\\\nbWhyEc3TVFK20J6csMBzW05VWUAmrHGTfiA3y+z7XgtxTYkyEh+DK+tlokDEh6VM\\\\nmoj8uN+odTijzaNgohgJkJ5TN6MZvQZr6wxEjln15E99V76TqJkUPC8iYLeTkfa3\\\\nKbXWoHjUqWhJjDZ4yyy5TUpR0geaEnpGtfXHwveS7wTVZiPEpHes5PMn1k2y6WPw\\\\nGiCXc7TieVZ2f6EyWhC5g4RXueGbDvf4roNHQUtaRYY9AtEj1D2ZqfulqJfuw+Gu\\\\nosDVa2eNAg9kP60bH2ApBTQgQDC8KUjKDIHBLBkuQDtlhKTxdN0tR2WykwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UUtWVVc1M1BLNEhMTUFBM0FVRTZGTEJGQU5a\\\\nT1JaVFVMS0JCTUo2SUxXT1lFTzRJWDZXUVhCUVhBRU9DQ1ozQVJPSFVPSVdYQ05R\\\\nRkVWQzJNRUI0UlI1TjI3WVVIRTRENUZYNUpMWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEAQ/a7krCWH4uvoQAIt2Mc92EIs9\\\\nxB08JSUw5QfR7zyM3bGnzooodA2mOfQc9murj/cijbjhIL/19cvziLTCFdY8wjkN\\\\noaHygBlt7um2LcldoeanCPCI3MDSXcv6yDWPs39eTX1UHAc7MOiXfXDUBs7SW95/\\\\nnQDBqP0hCKN6pBDAehQ4L4Dj9MOpxL2BN+RrTCyTB5uOr3stp06kEMXgW2NLEZva\\\\nkNvwRQ+9kzh53jEjeTZJTcUsnDBBklZMGV99dS32RfWR/J0q+64cm0yEiGxgzuVx\\\\nxP/Yyqj94anxqppLejkd6+LObqpHd6UXvf1Hd1LLoE3l1GzKj0Vf2yXbRyO+7dqB\\\\nHdXRHUwASwPy2PipUEtqoNT320YDnNE1kquWYsy7n5HimH2UCpqEEf2u7/aGZUYU\\\\nnbMTK1/BhjYjiSgq/xpd8M9MlsD0aQrdVphzaZ1ABdPPjGuklcEhyXoLMkUWtf/j\\\\nwPIgt/QYUUOWawtKici86beMVAeWRJrBqVSp/OjgrXw2Wv89j2dAlccCgIf8KTVB\\\\niof7XW6s0pulBpPPUKzhAk+o7Hk8xv4e0tjSs+AJwVLHatOxQfBrXFVeg660rUUO\\\\ndIAbn+wRd4l51jpGEcNkIghSuu3+4n8sFk4RIlDX3RIG2KN2/MBzUd4+vGW2jZw7\\\\nTourd70yEMJ23PQi1a/3X412cDMt87jF\\\\n=p4ap\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:53.438521Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\", \\n \\\"uuid\\\": \\\"2ac43b0c-dd2e-426e-ad5b-01dab5ae8cf5\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"10678\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:24 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"10678\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:25 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:26 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:27 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index 61cdbb35f..8edf7ffe5 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+4": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:22 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2562\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837/download\\\", \\n \\\"filename\\\": \\\"1-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837\\\", \\n \\\"uuid\\\": \\\"03802a39-0969-4d24-b02b-3a169b98c837\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"3071\", \"Date\": \"Fri, 19 Apr 2019 08:27:20 GMT\", \"Content-Type\": \"application/json\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837\"}+3": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:21 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837/download\\\", \\n \\\"filename\\\": \\\"1-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/03802a39-0969-4d24-b02b-3a169b98c837\\\", \\n \\\"uuid\\\": \\\"03802a39-0969-4d24-b02b-3a169b98c837\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:21 GMT\", \"Content-Length\": \"3071\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370/download\\\", \\n \\\"filename\\\": \\\"1-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370\\\", \\n \\\"uuid\\\": \\\"f474d139-c5d0-44ee-a17b-ed156bd38370\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3061\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:28 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370/download\\\", \\n \\\"filename\\\": \\\"1-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370\\\", \\n \\\"uuid\\\": \\\"f474d139-c5d0-44ee-a17b-ed156bd38370\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3061\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:28 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:29 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2553\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:29 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index 2ca0e3da5..961e4addb 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\"}+4": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"38\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:25 GMT\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\"}+3": "{\"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"534\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:25 GMT\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }\\n ]\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+5": "{\"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:26 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2053\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5/download\\\", \\n \\\"filename\\\": \\\"2-acknowledged_amalgam-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions/f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\", \\n \\\"uuid\\\": \\\"f09a72bc-1e68-459d-b42c-11f5ec321cd5\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2562\", \"Date\": \"Fri, 19 Apr 2019 08:27:23 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+2": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:24 GMT\", \"Content-Length\": \"7814\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2553\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:30 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"533\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:32 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:32 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index cb9f95686..3a8db7a1f 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45/download\"}+2": "{\"version\": \"0.1.1\", \"body\": \"{\\\"filename\\\": \\\"16325bd9-6c6b-46fb-89a7-6bf710fdb18c\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-acknowledged_amalgam-reply.gpg\", \"Content-Length\": \"1134\", \"Etag\": \"\\\"sha256:e2f8e703863589cdb3c4bccec7a11eb9eccabe83189072caf3108b38129f316d\\\"\", \"Last-Modified\": \"Thu, 18 Apr 2019 18:25:55 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:28 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Fri, 19 Apr 2019 20:27:28 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+1": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:27 GMT\", \"Content-Length\": \"2947\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3387\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:33 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"9fe956ed-8f3b-4ba8-a091-8e60d036770d\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-recoilless_spectrum-reply.gpg\", \"Content-Length\": \"1149\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 30 Mar 2020 14:51:12 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Tue, 31 Mar 2020 02:54:34 GMT\", \"Etag\": \"sha256:189c1b0650601755a0764355201730f9ca371bd243ba88fd7079cf08616b5a45\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:34 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index 4582e960d..19ae438eb 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Length\": \"2053\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:29 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\"}+2": "{\"body\": \"{\\\"filename\\\": \\\"4c8541b4-53d0-408f-aa8c-f0b6b3846d84\\\"}\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Etag\": \"\\\"sha256:f6694c3a24601656b585e89e6844bab093f90b1e21a7583d51fe034c80eaf3f6\\\"\", \"Date\": \"Fri, 19 Apr 2019 08:27:30 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Disposition\": \"attachment; filename=1-irresolute_legatee-msg.gpg\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Fri, 19 Apr 2019 20:27:30 GMT\", \"X-Origin-Content-Type\": \"application/json\", \"Last-Modified\": \"Thu, 18 Apr 2019 18:25:58 GMT\", \"Content-Length\": \"604\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:31 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"468\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:34 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"fb0e4b21-3510-4ca6-83ae-23b832dc5232\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-nebulous_employee-msg.gpg\", \"Content-Length\": \"627\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 30 Mar 2020 14:51:14 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Tue, 31 Mar 2020 02:54:35 GMT\", \"Etag\": \"sha256:328f20a4bf194b0026ac5cac56411398e5ac1c50b53448c27efe0cef0a6d0079\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:35 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:36 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index eac1efd0d..0ae05fae6 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"body\": \"{\\n \\\"message\\\": \\\"You must encrypt replies client side\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 400, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:33 GMT\", \"Content-Length\": \"56\", \"Content-Type\": \"application/json\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7814\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:32 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:36 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 0f5ba2815..17afb3b83 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\"}+1": "{\"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:33 GMT\", \"Content-Length\": \"166\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 404, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index 6d7827d08..b325a26d9 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/flag\"}+2": "{\"headers\": {\"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:35 GMT\"}, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\"}+3": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:36 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2520\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"7814\", \"Date\": \"Fri, 19 Apr 2019 08:27:34 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:38 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:39 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2583\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:40 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index 74e974e68..ba4628541 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\"}+2": "{\"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/8aad6f20-33cf-4df9-949e-8f57e4709416\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"8aad6f20-33cf-4df9-949e-8f57e4709416\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-irresolute_legatee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies/9775caa4-267a-4635-a311-b1099cd48842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"9775caa4-267a-4635-a311-b1099cd48842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/1e1b4002-d758-4556-8cf8-d5780bf4f842\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"1e1b4002-d758-4556-8cf8-d5780bf4f842\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-unashamed_mutineer-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies/2229e79d-319e-4124-9330-bb9288b6b38f\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"2229e79d-319e-4124-9330-bb9288b6b38f\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2947\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:38 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"headers\": {\"Content-Length\": \"7813\", \"Date\": \"Fri, 19 Apr 2019 08:27:37 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}, \"status\": 200, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:40 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3387\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:41 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index 9ba70b55c..cc0f86eaf 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"2052\", \"Date\": \"Fri, 19 Apr 2019 08:27:39 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2044\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:41 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index 27f46a1a4..558ef901a 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\"}+1": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Thu, 13 Jun 2019 16:21:24 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"196\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2019-06-13T16:21:23.990588Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"e56c08ab-811d-4fdb-ad26-87da555b6858\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-03-30T14:54:18.786407Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"196\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:42 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index 8570b8d68..603616a6b 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:41 GMT\", \"Content-Length\": \"999\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:40 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:43 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:43 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 46172cc6d..73ef4bf57 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\", \\n \\\"size\\\": 1135, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"1bafa0ca-6801-4a36-b4db-2efc04920ac9\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Content-Length\": \"999\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:42 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\"}+3": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:43 GMT\", \"Content-Length\": \"447\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"filename\\\": \\\"3-acknowledged_amalgam-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies/9e9b5324-4f49-42c4-b705-9bb061eacd45\\\", \\n \\\"size\\\": 1134, \\n \\\"source_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"9e9b5324-4f49-42c4-b705-9bb061eacd45\\\"\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:42 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\"}, \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:44 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:45 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:45 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index 341b5953e..701c1903a 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\"}+2": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2520\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:45 GMT\"}, \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:44 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"7813\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:46 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2583\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:46 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index df328386f..dd85ec05e 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\"}+2": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2520\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:46 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:46 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"7813\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:47 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2583\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:48 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index ad552058a..e9daae780 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"7813\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:47 GMT\"}, \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:48 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index cd4c7b0de..6033a80dd 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\"}+3": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:50 GMT\", \"Content-Length\": \"1038\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:48 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"2052\"}, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\", \"status\": 200, \"version\": \"0.1.1\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544\"}+2": "{\"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2519\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:49 GMT\"}, \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\"}+4": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"468\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:50 GMT\"}, \"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n}\\n\", \"version\": \"0.1.1\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2044\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:49 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2582\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:50 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:50 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:51 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index 49ecba5a7..ffefc6b7d 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\"}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }\\n ]\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"1038\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:53 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\"}+1": "{\"status\": 200, \"headers\": {\"Content-Length\": \"2052\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:51 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2/download\\\", \\n \\\"filename\\\": \\\"2-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/94682094-ac7f-49d8-b105-bc227932eaa2\\\", \\n \\\"uuid\\\": \\\"94682094-ac7f-49d8-b105-bc227932eaa2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59/download\\\", \\n \\\"filename\\\": \\\"1-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/143efa20-e5d1-4dbd-992a-6228e27a0b59\\\", \\n \\\"uuid\\\": \\\"143efa20-e5d1-4dbd-992a-6228e27a0b59\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4/download\\\", \\n \\\"filename\\\": \\\"2-unashamed_mutineer-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions/a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\", \\n \\\"uuid\\\": \\\"a62b928e-f4b2-4a89-be32-6cf79602fbf4\\\"\\n }\\n ]\\n}\\n\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544\"}+2": "{\"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"2519\", \"Date\": \"Fri, 19 Apr 2019 08:27:52 GMT\"}, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\"}+4": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:27:53 GMT\", \"Content-Length\": \"468\", \"Content-Type\": \"application/json\"}, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273/download\\\", \\n \\\"filename\\\": \\\"1-irresolute_legatee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 604, \\n \\\"source_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions/d719a81b-aad1-4701-b735-54fdf6415273\\\", \\n \\\"uuid\\\": \\\"d719a81b-aad1-4701-b735-54fdf6415273\\\"\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2044\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:51 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2582\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:52 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:53 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:53 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index 265097679..48e02b7ce 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\"}+2": "{\"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:55 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Type\": \"application/json\", \"Content-Length\": \"24\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:54 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:54 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:55 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index 9e79e23ce..5bd912c30 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\"}+2": "{\"status\": 404, \"body\": \"{\\n \\\"error\\\": \\\"Not Found\\\", \\n \\\"message\\\": \\\"The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:56 GMT\", \"Content-Type\": \"application/json\", \"Content-Length\": \"166\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"headers\": {\"Date\": \"Fri, 19 Apr 2019 08:27:55 GMT\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:55 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_logout.json b/data/test_logout.json index 0cd9f1570..3ff6f0383 100644 --- a/data/test_logout.json +++ b/data/test_logout.json @@ -1 +1 @@ -{"{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\"}+1": "{\"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"version\": \"0.1.1\", \"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"48\", \"Content-Type\": \"application/json\", \"Date\": \"Thu, 06 Jun 2019 13:14:28 GMT\"}}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:56 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index e3bb8c664..675072d9a 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"body\": \"{\\n \\\"filename\\\": \\\"5-acknowledged_amalgam-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"adf3a3a8-dcbf-468c-857d-00ec296ecec0\\\"\\n}\\n\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"148\", \"Date\": \"Fri, 19 Apr 2019 08:27:58 GMT\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"status\": 201}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"status\": 200, \"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:57 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:56 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:29 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"5-recoilless_spectrum-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"dee2acb6-00d1-48fc-9d7c-ffc18afbe017\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:30 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source_with_uuid.json b/data/test_reply_source_with_uuid.json index b55f7b8d0..b91a83c13 100644 --- a/data/test_reply_source_with_uuid.json +++ b/data/test_reply_source_with_uuid.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\"}+2": "{\"headers\": {\"Content-Length\": \"148\", \"Date\": \"Fri, 19 Apr 2019 08:27:59 GMT\", \"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"status\": 201, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"filename\\\": \\\"6-acknowledged_amalgam-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:27:58 GMT\", \"Content-Length\": \"7813\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:30 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"6-recoilless_spectrum-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index b91505db2..76940c04f 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\"}+3": "{\"status\": 200, \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"32\", \"Date\": \"Fri, 19 Apr 2019 08:28:01 GMT\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+4": "{\"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Date\": \"Fri, 19 Apr 2019 08:28:02 GMT\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\"}, \"version\": \"0.1.1\", \"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\"}+1": "{\"version\": \"0.1.1\", \"body\": \"{\\n \\\"expiration\\\": \\\"2019-04-19T16:27:11.266887Z\\\", \\n \\\"journalist_uuid\\\": \\\"27ecc916-61db-4674-b7c2-a26ffb14936c\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1NTY5MTIzMSwiaWF0IjoxNTU1NjYyNDMxfQ.eyJpZCI6MX0.gYmLbZ2LV27YOebs3yKxcQjTinaXXFRyprsr05va3aM\\\"\\n}\\n\", \"status\": 200, \"headers\": {\"Content-Type\": \"application/json\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"250\", \"Date\": \"Fri, 19 Apr 2019 08:27:11 GMT\"}}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\"}+2": "{\"status\": 201, \"headers\": {\"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:28:00 GMT\", \"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"30\"}, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"version\": \"0.1.1\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\"}+1": "{\"version\": \"0.1.1\", \"headers\": {\"Server\": \"Werkzeug/0.14.1 Python/2.7.12\", \"Content-Length\": \"7813\", \"Content-Type\": \"application/json\", \"Date\": \"Fri, 19 Apr 2019 08:28:00 GMT\"}, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"acknowledged amalgam\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEADBzH9PXmQB7rcCwYlZNEruURqhyyaZhZIlsGIiXEhri2JMRV5h\\\\nFocDcCjzuqlv9xCW7Vjq51SrsYfD4jBizDyB1aQZ9DGF5JZofciohCEzNsyHoZs+\\\\n6o+fNwGEU5s9nPiXon83kUSM5R3z4tDnEYOR3JqNmzhZCS1Ucw2f4Wror5wJeG/l\\\\nosU6bsjZe8v4URGyltMMwLHDtJixaSt11EgOkLgBRkjQs1D4NGP35GJGSl9FRA97\\\\nekOjhO8N4KNQcms48VWZ7M0rh8epof4AbesodpkovUov7MOtbS6VTKH/WYlww6pG\\\\nw2anUdHK0I99XkFQc+5FUy9AMSlV1o0QkW6oebo6LwrZBDo/8BeDzKzKejfzrehI\\\\n+4ZUvCa+vMQoeWYav6cS10eKjHK07Gf4NrJdVrEmAXJnKE/TvCHsuUvXfvYQor+4\\\\na7Rh/Ea/V7XkmsRaWsZInfjrA7PFHXyRJiySLFkjwfQMF+54zg0IMpRvJXN2BaKV\\\\na58su1CQT7sb+1AcG2qsQBKapSG0MBmlAjJZNr2dNBvamtjIEJGF8Q9KKyy31Tu3\\\\n45QPdVpiCni7KHR2GdjTc/BIxrYNdzy2+GCRunP9acAtkewbCQIUy93WpagKpR/z\\\\nqO6Y4oo9Cpc55G/YpMUI437TpVxGcAiFH9jvw5XHJWgapf4UyiQoGUwb+wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QUhIQ1BOTjRRTlNGSUQ3TElVVUpQVkNVVjVW\\\\nVTYyUEMzU1RDTk5ZRDNHSFhBUTZOQ1lMT1FENlVTVENWNURHSjNMWVlNVFBXQ1ZH\\\\nUDVPTlhTU0U1SFZLTlhYMkdaUUNQUUpBREFIST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEF4IIwTml0o+oXgP/2zRVHHw4fwy\\\\ncnUXl8sC1Iqch+QbTaEC22oIwZjsenXxHds43DjSZxoHw56DF6IMXFArQLdFIrc5\\\\nfObC4w3lw0NYqf6WcM2viND1VlG/V2HOZ1pRWt9dMWLS3mYtHNqIeYHiT8hhNk4T\\\\nDWhkD813jkWOl2sQhOPXnu7CCs2jQpyjaqBfFU7368FytypAX4ElgyMQla4QW9Xl\\\\nBfQeAeoyEUVBoUMinpibjdLwOakHjnxKaES1EWD2ihQ7KWJWWCu4XhZIhr60PT52\\\\nqC8CCS9DwATK5bJXyuBE6ZgHFeXssRTYvTfK8/0wXI8QwJiC1+hWgPy/zlwfUuF2\\\\nqqhKkHAcTqOOwDxrjBMAIQ5Ts+aQtsLAf1LA4WRQhdjqS8k6N5gp5TwvmmrwNRtG\\\\nOQ/dIGO+Z8WnfSm7MbCWDQF5IOsp9EUBYL898uxR9Zbf2ELT6KbmrvQ2c5SxMvyn\\\\nX8rshWWPftBKr53F9L6JSZqiDd6ZF/pnCQjbhfTZie4Oosq04sxML+oZsAd1rrsM\\\\nqCOVAlZz+bzMXmjfhCxNX3bSfCdAnLISx7h8J3BwqkooKU11xfhMDq2A4Ae6Bpmg\\\\nGBlzOYr8SsfNKpPevZEwOoU2aFi6HtRnWd1gqvHm3B0/a+CnpVhF6V2StWmeMSgu\\\\npjSftMYB+9OH1SgU6SQkg5XbRdqt6W1Z\\\\n=wjHP\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:55.112264Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\", \\n \\\"uuid\\\": \\\"52235a5e-b62d-4ded-b6ef-c3233834cf2d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"irresolute legatee\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACvIa8fWv+r0trrjY/OgzSsm5dZUpyZTehQipweo843W5uAr8j4\\\\nMUsfcM5xdjjtgdOgaEiqg5cdDIOe4Mg1CCC1CQTEeumVkKEH1mtWBwpKkeWeqKYK\\\\nNCnk4BA4HGFh2v+WRPrBqCPNIc2xqirOL3qBtR6V0rrp4wPeI2wIw1xV0not3TnG\\\\nUrNKgL6OWY5hVkdEibQZXfqWI1ZgZOY5FFNF9HK1K4pMTRd2w4DTQADU4ebsTTuU\\\\naTV0QAlwzxM/yfgcLeBEKBIOjjZIf9D7hOgcTxzQ9mUOD7M0vkEeEaN9GX9WL1EI\\\\nEIokKailOQh0NInN5QT2g2tFNhd0dn6zcctv95hXVwRHgb6q3Aan8xyE4+6+6Dfd\\\\n4mXBTrt3vpd2+CywcLXY4j7gxhtl/1/3RacRreWzoT4d6dsmSwCp46FS0OYAZCA9\\\\nEfsg4pdwcxfspGY5ovPqiz8bxuhvavScW2d4J7nT5P2EDN8kaLG5JG7fWWAQrdEN\\\\nPdnzTQQP/EXfY+YXGPYrEpkKsTY2K+lPAidXg0IQz9TZv7s03CU9U4f7NTAQYN42\\\\n8+D1/uzM94dD9UiNSIu1M0Y2D9OKecNORiPl8rV2PoqZ98RHVSVW9L4RsJ755bsx\\\\ntJvLk22KyH7QjlCgcw5VRfVkTRXI/zsUcCzrjSi29y78fIo4zu5VcJQV7wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M1NPMkdWSEpUT0JJN0JZWEFUQUNBU0VZVUFZ\\\\nR0RIMlpPVDNMWEhNRVA2NFlaTVJQWEZVNE41V1FTT0NGQzdSN0VOTUFaSUhHVlQ3\\\\nWlZPNFBZVzRVVk5MMkhGNFVVUFVRWElITUpBQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECWO/Si6/RaGgDAP/1g7fx7rbCyb\\\\nHRr4WCTYPto41KN/Fc5bypWsWkVq9MP8mFL5dL8ytzXvJWhVjI6A7qbKzHmPdcqM\\\\n1BErz7YbjYJt+kbZXCmE4mfameFFiKFf6OXNeYrnHLtKkGhJyjaMaT5ooalPjby9\\\\nQeoWIitwDL0awnhUUmQFbWh8kEF6MVEDgA9wPcj4VtyvQrSEAP+kMvWtjMtV2uhw\\\\n6HwLZfmXhpg4YM57S86DUhqHD6/au5N/DuDM7vqSASXNjM7prX8TiuW6M9Y2j4gi\\\\n+Wirq7P6b5wUVhBL8GGH9LXE7VvtjtjZ8l9GmfGq21vvPCrObIjwLFsPCGiSGE7P\\\\nMFQtzcHx34ZdANX4sQexbO9l02x/BwqYdH0Un+bC2z5gsxg769dlUy09IlfIOYxW\\\\nAL7CNCn+z8rpdGM352hFeLyw+KGPkDOXE6ULJAAMhnMThxWYTTGs/pi/Hbstp9yL\\\\nRyAtBj/NjJkX76+L30JP7p4oSpZTsmuK+1I/bhbYd6KEyZ27tsbWxCE+CB+QN3T4\\\\nk5sfeC9uZ0XjyIybyM0/TZecgqFUI/zwT6uYCW7ZEEjsJK33orxgGAabLG21Ry28\\\\nHcpydTHL5cDdJTmRnDj7+GT/8/8tvYkNUBoKZbuffJ2lLgcU6GcbIYJ3cNTuj59f\\\\n34KnLppp9I47fQk5cfUYUxlWx6fG3mUW\\\\n=O5JJ\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:58.758040Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/91583768-487a-4986-88c0-e8140d860544\\\", \\n \\\"uuid\\\": \\\"91583768-487a-4986-88c0-e8140d860544\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unashamed mutineer\\\", \\n \\\"key\\\": {\\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACqLrYGl7OS17Wf6hxoEIJQkez6c4AvvPqAgG8RpHRV1M7ZjcCE\\\\n6x8/VcNa5BO2GvawTwq1qIX/Sz/WsRud8nt/jsdMnym9wykwWdr9NMuo9Ceks6Hg\\\\nZUsDur4bxkaoynMu/nM4Pr1T5GtOjrOIN9pDM9PafD7m85qQQWGBQPDl1dHcqnX9\\\\nrwW60G+FRHihKA+YZxKUAcDHay4aSCi9RSdvsjdUaiTmtdAvMs9Q0EZvTRCXFCs5\\\\n2Vp8mgDDVkMFDyPeDVfyK5VQqTwFQmqvoTeqKphMJmfJLhfX85oyoGy4OxLM2Wxi\\\\nC5fwTXD0xqRuuTBotIhF2VtLC9Z0eK+eXN7cSAD2WowcMNxomo2ietPnoScg2/sz\\\\nA3SlcvN7fEYmaDMcog+KbQVM2Bz7cuJ+LdRPklg3GcoM+1xUZQYaFyniJS5x3OpG\\\\nc2o83NsZ3pVS/IdgLpIn34AiUKtGjyb3Bo0bb0ymzqppjZsv0bxMDonxYcAnGIY5\\\\nZr4sJBItKA/wqmCrMK1McKZIlN1phV+eo2FbfiNd3rjixMfCpFwjmb9wFebATuC9\\\\nWplvg4n8wJCQwmuQRtuvGWGFf+zQLsD0ANDWmrfl2IyTKyElnIuqCOCuS+KtFLwN\\\\nIJzfRbsfNnszef1BQLAvaRHzZDGVtSNlzODPi9Cvfx2seOhRxqR/PpcPOwARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VVZHTVpZUEtBUlZEVUhEN0Q3QVlNQzdSWFE3\\\\nWFZVU0FDTFFMTUNNQUpNR1JaTkZPNTZNRjI1NlpNQVJZR1YzSERJNkhGVUkyNUJK\\\\nTklERDdNVjRFWVBXSE9KVlAzTE5MUjVJUUJMUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEIzjPOwyjIxL+XYP/iWZ6RbqCae+\\\\nitkT+PfkPOmLG9L3wDJM0qI7y/oeOXBZjeyurqTMQ/BciWJfJklXGFrxg6R0hoSQ\\\\nY+udsA1Y+4S6kdxhay8mzOW7PVswHFzzM3CEgnbw3k1VU5oTlhf4ccNlqhqOnH3k\\\\nSM+3wWZOzbe9y8X2sU4js0R9xYKjFhVsh6lTfBlkcUokcL+8YcOQE5qITctcUtyp\\\\nE05GvRNT6wlvZrErDXzlh7fAmx43iO0eZiRjyS/GRdpcmRnUN+kPHrZzuJ3RWKAr\\\\nWKwzU9sTaZH+sRK3dj5OzBB2peNpelM9PSb/0LYysb6yDIcKAFy1tk8h6sPRY68E\\\\n/o+i4H7XpNvqdLtUmM77nSNJiOMwXMfAhvbcsPzAjmgmhDcTo3XG+l+MqpllwRw/\\\\n3DAZJez3/wPmRn2lVcO/BtoN7PH+hsPspSP0V8xb/mohNQSM6c1VZYHthfLOJ3xV\\\\nRpEN8kad0Y5MGQt3qVrn7Oxt8I9hKroYZvCGIQskr7rchLOqugx+G286vnmi+i+9\\\\ne/iq2lEEeqUd6RHhHzQ8D8idM7CJdwvaDeLW+5z+YEZNxrWLTCRkd9mHYyn/4fRB\\\\n2OX0feEWFZThq8XppHFhkz4lFRMkhx1ksDk6+12w0okfTBMQXD+3ZLkFNBGdp5BE\\\\nPBjpIL28BFLk368KGQeySdFAQCkVTy82\\\\n=8KGg\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2019-04-18T18:25:59.646053Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/648a793b-f97b-4133-a0df-42baae61ca46\\\", \\n \\\"uuid\\\": \\\"648a793b-f97b-4133-a0df-42baae61ca46\\\"\\n }\\n ]\\n}\\n\", \"status\": 200}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:32 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:33 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:33 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index c377db3f1..26cb8bdca 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -210,7 +210,7 @@ def _send_rpc_json_request( elif "error" in data and result["status"] == http.HTTPStatus.FORBIDDEN: raise AuthError(data["error"]) elif "error" in data and result["status"] == http.HTTPStatus.BAD_REQUEST: - raise ReplyError(data["message"]) + raise ReplyError(data["error"]) elif "error" in data and result["status"] != http.HTTPStatus.NOT_FOUND: # We exclude 404 since if we encounter a 404, it means that an # item is missing. In that case we return to the caller to @@ -669,11 +669,10 @@ def reply_source( timeout=self.default_request_timeout, ) - if "message" in data and data["message"] == "Your reply has been stored": return Reply(uuid=data["uuid"], filename=data["filename"]) - raise BaseError("Error handling HTTP response to sending a reply") + raise ReplyError("bad request") def get_replies_from_source(self, source: Source) -> List[Reply]: """ diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..00e654de4 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,13 @@ +import os + + +def pytest_unconfigure(config): + if os.path.exists("login.txt"): + os.unlink("login.txt") + + if os.path.exists("logout.txt"): + os.unlink("logout.txt") + if os.path.exists("testtoken.json"): + os.unlink("testtoken.json") + if os.path.exists("testtoken_http.json"): + os.unlink("testtoken_http.json") diff --git a/tests/test_api.py b/tests/test_api.py index 33877045a..74c088a5b 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -10,8 +10,8 @@ import pyotp import vcr from requests.exceptions import ConnectTimeout, ReadTimeout -from utils import load_auth -from utils import save_auth +from utils import load_auth_for_http +from utils import save_auth_for_http from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import AuthError @@ -37,14 +37,14 @@ def setUp(self): try: self.api.authenticate() except BaseError: - token = load_auth() + token = load_auth_for_http() if token: self.api.token = token self.api.update_auth_header() break time.sleep(31) - save_auth(self.api.token) + save_auth_for_http(self.api.token) break @vcr.use_cassette("data/test-baduser.yml") @@ -229,7 +229,7 @@ def test_error_unencrypted_reply(self): with self.assertRaises(ReplyError) as err: self.api.reply_source(s, "hello") - self.assertEqual(err.exception.msg, "You must encrypt replies client side") + self.assertEqual(err.exception.msg, "bad request") @vcr.use_cassette("data/test-reply-source.yml") def test_reply_source(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 07a6e2114..3817c1605 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -35,21 +35,36 @@ def setUp(self): self.api = API( self.server, self.username, self.password, str(self.totp.now()), proxy=True ) + for i in range(3): + if os.path.exists("testtoken.json"): + token = load_auth() + self.api.token = token + self.api.update_auth_header() + break + + # The following is True when we did a logout + if os.path.exists("logout.txt"): + os.unlink("logout.txt") + time.sleep(31) + # Now let us try to login try: + self.api = API( + self.server, self.username, self.password, str(self.totp.now()), proxy=True + ) self.api.authenticate() - except BaseError: - token = load_auth() - if token: - self.api.token = token - self.api.update_auth_header() - break + with open("login.txt", "w") as fobj: + fobj.write("in") + except Exception as err: + print(err) time.sleep(31) + continue save_auth(self.api.token) break def test_api_auth(self): + self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) @@ -213,7 +228,7 @@ def test_error_unencrypted_reply(self): with self.assertRaises(ReplyError) as err: self.api.reply_source(s, "hello") - self.assertEqual(err.exception.msg, "You must encrypt replies client side") + self.assertEqual(err.exception.msg, "bad request") @dastollervey_datasaver def test_reply_source(self): @@ -319,6 +334,12 @@ def test_delete_reply(self): def test_logout(self): r = self.api.logout() self.assertTrue(r) + if os.path.exists("login.txt"): + os.unlink("login.txt") + if os.path.exists("testtoken.json"): + os.unlink("testtoken.json") + with open("logout.txt", "w") as fobj: + fobj.write("out") def test_request_timeout(mocker): diff --git a/tests/utils.py b/tests/utils.py index 95b871e11..f50bf3da1 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -89,6 +89,11 @@ def wrapper(*args, **kwargs): global RES # This is the filename to store the results filename = os.path.join("data", func.__name__ + ".json") + # if the logout.txt file is there, means we have a logout scenario + # so, we should do a real login call + if os.path.exists("logout.txt") and func.__name__ == "setUp": + if not os.path.exists(filename): + return func(*args, **kwargs) if os.path.exists(filename): with open(filename) as fobj: @@ -118,3 +123,16 @@ def load_auth(): def save_auth(token): with open("testtoken.json", "w") as fobj: json.dump(token, fobj) + + +def load_auth_for_http(): + "Helper function to load token" + if os.path.exists("testtoken_http.json"): + with open("testtoken_http.json") as fobj: + return json.load(fobj) + return None + + +def save_auth_for_http(token): + with open("testtoken_http.json", "w") as fobj: + json.dump(token, fobj) From ffe8205e1963c006779c2f5052dfb228075f8c1d Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 7 Apr 2020 09:10:58 -0400 Subject: [PATCH 372/751] Update PyYaml to 5.3.1 Addresses CVE-2020-1747 --- dev-requirements.in | 2 +- dev-requirements.txt | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dev-requirements.in b/dev-requirements.in index 463988708..df8d8e446 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -6,6 +6,6 @@ pytest pytest-cov sphinx vcrpy -pyyaml>=5.1,<6 +pyyaml>=5.3.1,<6 pytest-mock pip-tools diff --git a/dev-requirements.txt b/dev-requirements.txt index d65464824..654670ebd 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -215,18 +215,18 @@ pytz==2019.3 \ --hash=sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d \ --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be \ # via babel -pyyaml==5.3 \ - --hash=sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6 \ - --hash=sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf \ - --hash=sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5 \ - --hash=sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e \ - --hash=sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811 \ - --hash=sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e \ - --hash=sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d \ - --hash=sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20 \ - --hash=sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689 \ - --hash=sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994 \ - --hash=sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615 +pyyaml==5.3.1 \ + --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ + --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ + --hash=sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2 \ + --hash=sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648 \ + --hash=sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf \ + --hash=sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f \ + --hash=sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2 \ + --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ + --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ + --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 From 152f89d0bb0d684ba413bb8e435d7ae6ff4dba48 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 24 Apr 2020 15:50:14 -0400 Subject: [PATCH 373/751] securedrop-sdk 0.1.0 --- CHANGELOG.md | 6 ++++++ README.md | 4 +--- setup.py | 3 +-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84d9d1d82..7eebcc605 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +0.1.0 +----- + +* Pass timeout value to the proxy (#117). +* Update PyYAML to 5.3.1 (#120). + 0.0.13 ------ diff --git a/README.md b/README.md index 523df6540..b5d596f5d 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ This SDK provides a convenient Python interface to the [SecureDrop Journalist In The SDK is currently used by the [SecureDrop Client](https://github.com/freedomofpress/securedrop-client) that is a component of the SecureDrop Workstation. When used in Qubes OS, the SDK uses the [securedrop-proxy](https://github.com/freedomofpress/securedrop-proxy) service, as the VM which runs the client does not have network access by design. -**IMPORTANT:** This project is still under active development. We do not recommend using it in any production context. - # Development ## Quick Start @@ -112,7 +110,7 @@ To make a release, you should: 4. Create a PR and get the PR reviewed and merged into ``master``. 5. ``git tag $new_version_number`` and push the new tag. 6. Checkout the new tag locally. -7. Push the new release source tarball to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). +7. Push the new release source tarball to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). Do not upload the wheel (by deleting it from your `dist/` directory prior to upload). 8. If you want to publish the new SDK release to the FPF PyPI mirror, Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions to push the package up to our PyPI mirror: https://pypi.org/simple # Contributing diff --git a/setup.py b/setup.py index c4c747175..b3860bf77 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.0.13", + version="0.1.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", @@ -17,7 +17,6 @@ url="https://github.com/freedomofpress/securedrop-sdk", packages=setuptools.find_packages(exclude=["docs", "tests"]), classifiers=( - "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", From 200c194e7d255f6e336d750070e195f5b16da3d6 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 5 May 2020 11:52:02 -0400 Subject: [PATCH 374/751] securedrop-proxy 0.3.0 --- changelog.md | 5 +++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index c5590c3da..bfded302f 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 0.3.0 + + * Use incoming timeout value from JSON (#69). + * Update PyYaml to 5.3.1 due to CVE-2020-1747 (#73). + ## 0.2.1 * Increase default timeout to 120s from 10s (#70) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 0c62199f1..0d91a54c7 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.2.1 +0.3.0 From c24a7a7c52f7b85846c24598889ecd3859e17857 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Fri, 29 May 2020 09:57:09 -0400 Subject: [PATCH 375/751] Add the fixture for test_json_response_with_timeout --- fixtures/main_json_response_with_timeout.yaml | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 fixtures/main_json_response_with_timeout.yaml diff --git a/fixtures/main_json_response_with_timeout.yaml b/fixtures/main_json_response_with_timeout.yaml new file mode 100644 index 000000000..f10ccee63 --- /dev/null +++ b/fixtures/main_json_response_with_timeout.yaml @@ -0,0 +1,94 @@ +interactions: +- request: + body: null + headers: {} + method: GET + uri: https://jsonplaceholder.typicode.com/posts?userId=1 + response: + body: + string: "[\n {\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"sunt aut\ + \ facere repellat provident occaecati excepturi optio reprehenderit\",\n \ + \ \"body\": \"quia et suscipit\\nsuscipit recusandae consequuntur expedita\ + \ et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem\ + \ sunt rem eveniet architecto\"\n },\n {\n \"userId\": 1,\n \"id\"\ + : 2,\n \"title\": \"qui est esse\",\n \"body\": \"est rerum tempore\ + \ vitae\\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\\nfugiat\ + \ blanditiis voluptate porro vel nihil molestiae ut reiciendis\\nqui aperiam\ + \ non debitis possimus qui neque nisi nulla\"\n },\n {\n \"userId\":\ + \ 1,\n \"id\": 3,\n \"title\": \"ea molestias quasi exercitationem repellat\ + \ qui ipsa sit aut\",\n \"body\": \"et iusto sed quo iure\\nvoluptatem\ + \ occaecati omnis eligendi aut ad\\nvoluptatem doloribus vel accusantium quis\ + \ pariatur\\nmolestiae porro eius odio et labore et velit aut\"\n },\n {\n\ + \ \"userId\": 1,\n \"id\": 4,\n \"title\": \"eum et est occaecati\"\ + ,\n \"body\": \"ullam et saepe reiciendis voluptatem adipisci\\nsit amet\ + \ autem assumenda provident rerum culpa\\nquis hic commodi nesciunt rem tenetur\ + \ doloremque ipsam iure\\nquis sunt voluptatem rerum illo velit\"\n },\n\ + \ {\n \"userId\": 1,\n \"id\": 5,\n \"title\": \"nesciunt quas odio\"\ + ,\n \"body\": \"repudiandae veniam quaerat sunt sed\\nalias aut fugiat\ + \ sit autem sed est\\nvoluptatem omnis possimus esse voluptatibus quis\\nest\ + \ aut tenetur dolor neque\"\n },\n {\n \"userId\": 1,\n \"id\": 6,\n\ + \ \"title\": \"dolorem eum magni eos aperiam quia\",\n \"body\": \"\ + ut aspernatur corporis harum nihil quis provident sequi\\nmollitia nobis aliquid\ + \ molestiae\\nperspiciatis et ea nemo ab reprehenderit accusantium quas\\\ + nvoluptate dolores velit et doloremque molestiae\"\n },\n {\n \"userId\"\ + : 1,\n \"id\": 7,\n \"title\": \"magnam facilis autem\",\n \"body\"\ + : \"dolore placeat quibusdam ea quo vitae\\nmagni quis enim qui quis quo nemo\ + \ aut saepe\\nquidem repellat excepturi ut quia\\nsunt ut sequi eos ea sed\ + \ quas\"\n },\n {\n \"userId\": 1,\n \"id\": 8,\n \"title\": \"\ + dolorem dolore est ipsam\",\n \"body\": \"dignissimos aperiam dolorem qui\ + \ eum\\nfacilis quibusdam animi sint suscipit qui sint possimus cum\\nquaerat\ + \ magni maiores excepturi\\nipsam ut commodi dolor voluptatum modi aut vitae\"\ + \n },\n {\n \"userId\": 1,\n \"id\": 9,\n \"title\": \"nesciunt\ + \ iure omnis dolorem tempora et accusantium\",\n \"body\": \"consectetur\ + \ animi nesciunt iure dolore\\nenim quia ad\\nveniam autem ut quam aut nobis\\\ + net est aut quod aut provident voluptas autem voluptas\"\n },\n {\n \"\ + userId\": 1,\n \"id\": 10,\n \"title\": \"optio molestias id quia eum\"\ + ,\n \"body\": \"quo et expedita modi cum officia vel magni\\ndoloribus\ + \ qui repudiandae\\nvero nisi sit\\nquos veniam quod sed accusamus veritatis\ + \ error\"\n }\n]" + headers: + Access-Control-Allow-Credentials: + - 'true' + Age: + - '53198' + CF-Cache-Status: + - STALE + CF-RAY: + - 59b0b761ace6fe12-DTW + Cache-Control: + - max-age=14400 + Connection: + - keep-alive + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 29 May 2020 13:56:31 GMT + Etag: + - W/"aa6-j2NSH739l9uq40OywFMn7Y0C/iY" + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - '-1' + Pragma: + - no-cache + Server: + - cloudflare + Set-Cookie: + - __cfduid=d259d305f25abe26719e6850ce4b06cae1590760560; expires=Sun, 28-Jun-20 + 13:56:00 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax + Transfer-Encoding: + - chunked + Vary: + - Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Content-Type-Options: + - nosniff + X-Powered-By: + - Express + cf-request-id: + - 030250f1080000fe12a1a71200000001 + status: + code: 200 + message: OK +version: 1 From f9bcbd3e8b49b737b2b85bf608f48349ddc68a4b Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 17 Jan 2020 15:50:55 +0530 Subject: [PATCH 376/751] Fixes #57 runs black & isort for code formatting To have latest black, we need updated typed-ast, for that we have to upgrade mypy too, and for mypy upgrade to work, we had to upgrade the mypy-extensions. It first runs isort to check if it passes, and then it runs black. Both uses 100 as line length. setup.py marks Python version as >= 3.7 as we are testing and running the code only on 3.7 on Debian Buster. Also contains the formatting change in proxy.py for black check to run sucessfully on CI. --- Makefile | 9 +- blackconfig/pyproject.toml | 2 + dev-requirements.in | 8 +- dev-requirements.txt | 205 +++++++++++++++++++++++---------- securedrop_proxy/entrypoint.py | 4 +- securedrop_proxy/proxy.py | 5 +- setup.py | 2 +- 7 files changed, 162 insertions(+), 73 deletions(-) create mode 100644 blackconfig/pyproject.toml diff --git a/Makefile b/Makefile index f00f0a7e1..81dcf37f4 100644 --- a/Makefile +++ b/Makefile @@ -20,13 +20,20 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities done .PHONY: lint -lint: ## Run flake8 +lint: isort black ## Run isort, black and flake8 @flake8 securedrop_proxy tests .PHONY: mypy mypy: ## Run mypy static type checker @mypy --ignore-missing-imports securedrop_proxy +.PHONY: black +black: ## Run black for file formatting + @black --config ./blackconfig/pyproject.toml --check securedrop_proxy tests + +.PHONY: isort +isort: ## Run isort for file formatting + @isort -c -w 100 securedrop_proxy/*.py tests/*.py --diff .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. diff --git a/blackconfig/pyproject.toml b/blackconfig/pyproject.toml new file mode 100644 index 000000000..aa4949aa1 --- /dev/null +++ b/blackconfig/pyproject.toml @@ -0,0 +1,2 @@ +[tool.black] +line-length = 100 diff --git a/dev-requirements.in b/dev-requirements.in index 9a880c48f..8f8b1ef46 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -1,10 +1,12 @@ +black==19.10b0 coverage==5.0 flake8==3.6.0 +isort==4.3.21 mccabe==0.6.1 multidict==4.4.2 -mypy==0.701 -mypy-extensions==0.4.1 -pip-tools==3.1.0 +mypy==0.761 +mypy-extensions==0.4.3 +pip-tools==4.3.0 pycodestyle==2.4.0 pyflakes==2.0.0 six==1.11.0 diff --git a/dev-requirements.txt b/dev-requirements.txt index 5ee12c538..f2d820fb3 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -2,18 +2,32 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in # +appdirs==1.4.3 \ + --hash=sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92 \ + --hash=sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e \ + # via black +attrs==19.3.0 \ + --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ + --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ + # via black +black==19.10b0 \ + --hash=sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b \ + --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 \ + # via -r dev-requirements.in certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ - --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a + --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a \ + # via -r requirements.in, requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ + # via -r requirements.in, requests click==7.0 \ --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ - # via pip-tools + # via black, pip-tools coverage==5.0 \ --hash=sha256:0cd13a6e98c37b510a2d34c8281d5e1a226aaf9b65b7d770ef03c63169965351 \ --hash=sha256:1a4b6b6a2a3a6612e6361130c2cc3dc4378d8c221752b96167ccbad94b47f3cd \ @@ -45,19 +59,28 @@ coverage==5.0 \ --hash=sha256:d609a6d564ad3d327e9509846c2c47f170456344521462b469e5cb39e48ba31c \ --hash=sha256:e1bad043c12fb58e8c7d92b3d7f2f49977dcb80a08a6d1e7a5114a11bf819fca \ --hash=sha256:e5a675f6829c53c87d79117a8eb656cc4a5f8918185a32fc93ba09778e90f6db \ - --hash=sha256:fec32646b98baf4a22fdceb08703965bd16dea09051fbeb31a04b5b6e72b846c + --hash=sha256:fec32646b98baf4a22fdceb08703965bd16dea09051fbeb31a04b5b6e72b846c \ + # via -r dev-requirements.in flake8==3.6.0 \ --hash=sha256:6a35f5b8761f45c5513e3405f110a86bea57982c3b75b766ce7b65217abe1670 \ - --hash=sha256:c01f8a3963b3571a8e6bd7a4063359aff90749e160778e03817cd9b71c9e07d2 + --hash=sha256:c01f8a3963b3571a8e6bd7a4063359aff90749e160778e03817cd9b71c9e07d2 \ + # via -r dev-requirements.in furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ - --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec + --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec \ + # via -r requirements.in idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ - --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 + --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 \ + # via -r requirements.in, requests, yarl +isort==4.3.21 \ + --hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \ + --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd \ + # via -r dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ + # via -r dev-requirements.in, flake8 multidict==4.4.2 \ --hash=sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b \ --hash=sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64 \ @@ -87,34 +110,48 @@ multidict==4.4.2 \ --hash=sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f \ --hash=sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2 \ --hash=sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306 \ - --hash=sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd -mypy-extensions==0.4.1 \ - --hash=sha256:37e0e956f41369209a3d5f34580150bcacfabaa57b33a15c0b25f4b5725e0812 \ - --hash=sha256:b16cabe759f55e3409a7d231ebd2841378fb0c27a5d1994719e340e4f429ac3e -mypy==0.701 \ - --hash=sha256:2afe51527b1f6cdc4a5f34fc90473109b22bf7f21086ba3e9451857cf11489e6 \ - --hash=sha256:56a16df3e0abb145d8accd5dbb70eba6c4bd26e2f89042b491faa78c9635d1e2 \ - --hash=sha256:5764f10d27b2e93c84f70af5778941b8f4aa1379b2430f85c827e0f5464e8714 \ - --hash=sha256:5bbc86374f04a3aa817622f98e40375ccb28c4836f36b66706cf3c6ccce86eda \ - --hash=sha256:6a9343089f6377e71e20ca734cd8e7ac25d36478a9df580efabfe9059819bf82 \ - --hash=sha256:6c9851bc4a23dc1d854d3f5dfd5f20a016f8da86bcdbb42687879bb5f86434b0 \ - --hash=sha256:b8e85956af3fcf043d6f87c91cbe8705073fc67029ba6e22d3468bfee42c4823 \ - --hash=sha256:b9a0af8fae490306bc112229000aa0c2ccc837b49d29a5c42e088c132a2334dd \ - --hash=sha256:bbf643528e2a55df2c1587008d6e3bda5c0445f1240dfa85129af22ae16d7a9a \ - --hash=sha256:c46ab3438bd21511db0f2c612d89d8344154c0c9494afc7fbc932de514cf8d15 \ - --hash=sha256:f7a83d6bd805855ef83ec605eb01ab4fa42bcef254b13631e451cbb44914a9b0 + --hash=sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd \ + # via -r dev-requirements.in, yarl +mypy-extensions==0.4.3 \ + --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 \ + # via -r dev-requirements.in, mypy +mypy==0.761 \ + --hash=sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a \ + --hash=sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7 \ + --hash=sha256:4b9365ade157794cef9685791032521233729cb00ce76b0ddc78749abea463d2 \ + --hash=sha256:53ea810ae3f83f9c9b452582261ea859828a9ed666f2e1ca840300b69322c474 \ + --hash=sha256:634aef60b4ff0f650d3e59d4374626ca6153fcaff96ec075b215b568e6ee3cb0 \ + --hash=sha256:7e396ce53cacd5596ff6d191b47ab0ea18f8e0ec04e15d69728d530e86d4c217 \ + --hash=sha256:7eadc91af8270455e0d73565b8964da1642fe226665dd5c9560067cd64d56749 \ + --hash=sha256:7f672d02fffcbace4db2b05369142e0506cdcde20cea0e07c7c2171c4fd11dd6 \ + --hash=sha256:85baab8d74ec601e86134afe2bcccd87820f79d2f8d5798c889507d1088287bf \ + --hash=sha256:87c556fb85d709dacd4b4cb6167eecc5bbb4f0a9864b69136a0d4640fdc76a36 \ + --hash=sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b \ + --hash=sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72 \ + --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ + --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 \ + # via -r dev-requirements.in orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ - --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 -pip-tools==3.1.0 \ - --hash=sha256:31b43e5f8d605fc84f7506199025460abcb98a29d12cc99db268f73e39cf55e5 \ - --hash=sha256:b1ceca03b4a48346b2f6870565abb09d8d257d5b1524b4c6b222185bf26c3870 + --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 \ + # via -r requirements.in, furl +pathspec==0.7.0 \ + --hash=sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424 \ + --hash=sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96 \ + # via black +pip-tools==4.3.0 \ + --hash=sha256:06efa50b7089b2abbfcf4b47684960538af74669e801e69a557cb8a1c6ad6674 \ + --hash=sha256:79e8137a2b96906ccaed0151e1df42daf386d51abb80286173d112b5296a5775 \ + # via -r dev-requirements.in pycodestyle==2.4.0 \ --hash=sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83 \ - --hash=sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a + --hash=sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a \ + # via -r dev-requirements.in, flake8 pyflakes==2.0.0 \ --hash=sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49 \ - --hash=sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae + --hash=sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae \ + # via -r dev-requirements.in, flake8 pyyaml==5.3.1 \ --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ @@ -126,45 +163,86 @@ pyyaml==5.3.1 \ --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a \ + # via -r requirements.in, vcrpy +regex==2020.1.8 \ + --hash=sha256:07b39bf943d3d2fe63d46281d8504f8df0ff3fe4c57e13d1656737950e53e525 \ + --hash=sha256:0932941cdfb3afcbc26cc3bcf7c3f3d73d5a9b9c56955d432dbf8bbc147d4c5b \ + --hash=sha256:0e182d2f097ea8549a249040922fa2b92ae28be4be4895933e369a525ba36576 \ + --hash=sha256:10671601ee06cf4dc1bc0b4805309040bb34c9af423c12c379c83d7895622bb5 \ + --hash=sha256:23e2c2c0ff50f44877f64780b815b8fd2e003cda9ce817a7fd00dea5600c84a0 \ + --hash=sha256:26ff99c980f53b3191d8931b199b29d6787c059f2e029b2b0c694343b1708c35 \ + --hash=sha256:27429b8d74ba683484a06b260b7bb00f312e7c757792628ea251afdbf1434003 \ + --hash=sha256:3e77409b678b21a056415da3a56abfd7c3ad03da71f3051bbcdb68cf44d3c34d \ + --hash=sha256:4e8f02d3d72ca94efc8396f8036c0d3bcc812aefc28ec70f35bb888c74a25161 \ + --hash=sha256:4eae742636aec40cf7ab98171ab9400393360b97e8f9da67b1867a9ee0889b26 \ + --hash=sha256:6a6ae17bf8f2d82d1e8858a47757ce389b880083c4ff2498dba17c56e6c103b9 \ + --hash=sha256:6a6ba91b94427cd49cd27764679024b14a96874e0dc638ae6bdd4b1a3ce97be1 \ + --hash=sha256:7bcd322935377abcc79bfe5b63c44abd0b29387f267791d566bbb566edfdd146 \ + --hash=sha256:98b8ed7bb2155e2cbb8b76f627b2fd12cf4b22ab6e14873e8641f266e0fb6d8f \ + --hash=sha256:bd25bb7980917e4e70ccccd7e3b5740614f1c408a642c245019cff9d7d1b6149 \ + --hash=sha256:d0f424328f9822b0323b3b6f2e4b9c90960b24743d220763c7f07071e0778351 \ + --hash=sha256:d58e4606da2a41659c84baeb3cfa2e4c87a74cec89a1e7c56bee4b956f9d7461 \ + --hash=sha256:e3cd21cc2840ca67de0bbe4071f79f031c81418deb544ceda93ad75ca1ee9f7b \ + --hash=sha256:e6c02171d62ed6972ca8631f6f34fa3281d51db8b326ee397b9c83093a6b7242 \ + --hash=sha256:e7c7661f7276507bce416eaae22040fd91ca471b5b33c13f8ff21137ed6f248c \ + --hash=sha256:ecc6de77df3ef68fee966bb8cb4e067e84d4d1f397d0ef6fce46913663540d77 \ + # via black requests==2.20.0 \ --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ - --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 + --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 \ + # via -r requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb -typed-ast==1.3.5 \ - --hash=sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b \ - --hash=sha256:18141c1484ab8784006c839be8b985cfc82a2e9725837b0ecfa0203f71c4e39d \ - --hash=sha256:2baf617f5bbbfe73fd8846463f5aeafc912b5ee247f410700245d68525ec584a \ - --hash=sha256:3d90063f2cbbe39177e9b4d888e45777012652d6110156845b828908c51ae462 \ - --hash=sha256:4304b2218b842d610aa1a1d87e1dc9559597969acc62ce717ee4dfeaa44d7eee \ - --hash=sha256:4983ede548ffc3541bae49a82675996497348e55bafd1554dc4e4a5d6eda541a \ - --hash=sha256:5315f4509c1476718a4825f45a203b82d7fdf2a6f5f0c8f166435975b1c9f7d4 \ - --hash=sha256:6cdfb1b49d5345f7c2b90d638822d16ba62dc82f7616e9b4caa10b72f3f16649 \ - --hash=sha256:7b325f12635598c604690efd7a0197d0b94b7d7778498e76e0710cd582fd1c7a \ - --hash=sha256:8d3b0e3b8626615826f9a626548057c5275a9733512b137984a68ba1598d3d2f \ - --hash=sha256:8f8631160c79f53081bd23446525db0bc4c5616f78d04021e6e434b286493fd7 \ - --hash=sha256:912de10965f3dc89da23936f1cc4ed60764f712e5fa603a09dd904f88c996760 \ - --hash=sha256:b010c07b975fe853c65d7bbe9d4ac62f1c69086750a574f6292597763781ba18 \ - --hash=sha256:c908c10505904c48081a5415a1e295d8403e353e0c14c42b6d67f8f97fae6616 \ - --hash=sha256:c94dd3807c0c0610f7c76f078119f4ea48235a953512752b9175f9f98f5ae2bd \ - --hash=sha256:ce65dee7594a84c466e79d7fb7d3303e7295d16a83c22c7c4037071b059e2c21 \ - --hash=sha256:eaa9cfcb221a8a4c2889be6f93da141ac777eb8819f077e1d09fb12d00a09a93 \ - --hash=sha256:f3376bc31bad66d46d44b4e6522c5c21976bf9bca4ef5987bb2bf727f4506cbb \ - --hash=sha256:f9202fa138544e13a4ec1a6792c35834250a85958fde1251b6a22e07d1260ae7 \ + --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb \ + # via -r dev-requirements.in, -r requirements.in, furl, orderedmultidict, pip-tools, vcrpy +toml==0.10.0 \ + --hash=sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c \ + --hash=sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e \ + # via black +typed-ast==1.4.1 \ + --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ + --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ + --hash=sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa \ + --hash=sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652 \ + --hash=sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75 \ + --hash=sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01 \ + --hash=sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d \ + --hash=sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1 \ + --hash=sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907 \ + --hash=sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c \ + --hash=sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3 \ + --hash=sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b \ + --hash=sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614 \ + --hash=sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb \ + --hash=sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b \ + --hash=sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41 \ + --hash=sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6 \ + --hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \ + --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ + --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ + --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \ + # via black, mypy +typing-extensions==3.7.4.1 \ + --hash=sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2 \ + --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ + --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 \ # via mypy urllib3==1.24.3 \ --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ - --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb + --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb \ + # via -r requirements.in, requests vcrpy==2.0.1 \ --hash=sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3 \ - --hash=sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f + --hash=sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f \ + # via -r dev-requirements.in werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ - --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 + --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 \ + # via -r requirements.in wrapt==1.10.11 \ - --hash=sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6 + --hash=sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6 \ + # via -r dev-requirements.in, vcrpy yarl==1.2.6 \ --hash=sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9 \ --hash=sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee \ @@ -174,8 +252,11 @@ yarl==1.2.6 \ --hash=sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8 \ --hash=sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1 \ --hash=sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4 \ - --hash=sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7 + --hash=sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7 \ + # via -r dev-requirements.in, vcrpy -# WARNING: The following packages were not pinned, but pip requires them to be -# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. -# setuptools==46.1.3 # via flake8 +# The following packages are considered to be unsafe in a requirements file: +setuptools==47.1.1 \ + --hash=sha256:145fa62b9d7bb544fce16e9b5a9bf4ab2032d2f758b7cd674af09a92736aff74 \ + --hash=sha256:74f33f44290f95c5c4a7c13ccc9d6d1a16837fe9dce0acf411dd244e7de95143 \ + # via flake8 diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index dbd5fa4c9..56ea61748 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -26,8 +26,8 @@ def start() -> None: """ - Set up a new proxy object with an error handler, configuration that we read from argv[1], and - the original user request from STDIN. + Set up a new proxy object with an error handler, configuration that we read + from argv[1], and the original user request from STDIN. """ try: configure_logging() diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index f709b1237..6c79d7f27 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -45,10 +45,7 @@ def __init__(self, status: int) -> None: class Proxy: - def __init__( - self, conf_path: str, req: Req = Req(), timeout: float = 120.0 - ) -> None: - # The configuration path for Proxy is a must. + def __init__(self, conf_path: str, req: Req = Req(), timeout: float = 10.0) -> None: self.read_conf(conf_path) self.req = req diff --git a/setup.py b/setup.py index 1e3f4ca6c..5aa3dfd36 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ long_description_content_type="text/markdown", license="GPLv3+", install_requires=["requests", "furl", "pyyaml", "werkzeug"], - python_requires=">=3.5", + python_requires=">=3.7", url="https://github.com/freedomofpress/securedrop-proxy", packages=setuptools.find_packages(exclude=["docs", "tests"]), package_data={ From 787844dc339e090aa0e9ac2241895365522c4119 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 4 Jun 2020 18:29:16 +0530 Subject: [PATCH 377/751] Auto fixes from isort and black --- securedrop_proxy/entrypoint.py | 17 +++++---------- securedrop_proxy/main.py | 4 +--- securedrop_proxy/proxy.py | 40 +++++++++++----------------------- tests/test_entrypoint.py | 7 +++--- tests/test_main.py | 7 +++--- tests/test_proxy.py | 13 +++++------ 6 files changed, 30 insertions(+), 58 deletions(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index 56ea61748..b2f535554 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -10,16 +10,13 @@ import json import logging import os -import sys import platform +import sys +from logging.handlers import SysLogHandler, TimedRotatingFileHandler -from logging.handlers import TimedRotatingFileHandler, SysLogHandler - -from securedrop_proxy import main -from securedrop_proxy import proxy +from securedrop_proxy import main, proxy from securedrop_proxy.version import version - DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_proxy") LOGLEVEL = os.environ.get("LOGLEVEL", "info").upper() @@ -36,9 +33,7 @@ def start() -> None: # path to config file must be at argv[1] if len(sys.argv) != 2: - raise ValueError( - "sd-proxy script not called with path to configuration file" - ) + raise ValueError("sd-proxy script not called with path to configuration file") # read config. `read_conf` will call `p.err_on_done` if there is a config # problem, and will return a Conf object on success. @@ -74,9 +69,7 @@ def configure_logging() -> None: log_file = os.path.join(home, "logs", "proxy.log") # set logging format - log_fmt = ( - "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) %(levelname)s: %(message)s" - ) + log_fmt = "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) %(levelname)s: %(message)s" formatter = logging.Formatter(log_fmt) # define log handlers such as for rotating log files diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index ff979053a..1fd76cf88 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -1,10 +1,8 @@ import json import logging -from typing import Dict, Any +from typing import Any, Dict from securedrop_proxy import proxy - - from securedrop_proxy.proxy import Proxy logger = logging.getLogger(__name__) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 6c79d7f27..69a4f4429 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -1,21 +1,20 @@ -import furl import http import json import logging -import requests -import tempfile -import werkzeug - import os import subprocess import sys +import tempfile import uuid -import yaml +from tempfile import _TemporaryFileWrapper # type: ignore from typing import Dict, Optional -import securedrop_proxy.version as version +import furl +import requests +import werkzeug +import yaml -from tempfile import _TemporaryFileWrapper # type: ignore +import securedrop_proxy.version as version logger = logging.getLogger(__name__) @@ -72,9 +71,7 @@ def err_on_done(self): def read_conf(self, conf_path: str) -> None: if not os.path.isfile(conf_path): - self.simple_error( - 500, "Configuration file does not exist at {}".format(conf_path) - ) + self.simple_error(500, "Configuration file does not exist at {}".format(conf_path)) self.err_on_done() try: @@ -82,18 +79,12 @@ def read_conf(self, conf_path: str) -> None: conf_in = yaml.safe_load(fh) except yaml.YAMLError: self.simple_error( - 500, - "YAML syntax error while reading configuration file {}".format( - conf_path - ), + 500, "YAML syntax error while reading configuration file {}".format(conf_path), ) self.err_on_done() except Exception: self.simple_error( - 500, - "Error while opening or reading configuration file {}".format( - conf_path - ), + 500, "Error while opening or reading configuration file {}".format(conf_path), ) self.err_on_done() @@ -263,15 +254,12 @@ def proxy(self) -> None: requests.exceptions.TooManyRedirects, ) as e: logger.error(e) - self.simple_error( - http.HTTPStatus.BAD_GATEWAY, "could not connect to server" - ) + self.simple_error(http.HTTPStatus.BAD_GATEWAY, "could not connect to server") except requests.exceptions.HTTPError as e: logger.error(e) try: self.simple_error( - e.response.status_code, - http.HTTPStatus(e.response.status_code).phrase.lower(), + e.response.status_code, http.HTTPStatus(e.response.status_code).phrase.lower(), ) except ValueError: # Return a generic error message when the response @@ -279,7 +267,5 @@ def proxy(self) -> None: self.simple_error(e.response.status_code, "unspecified server error") except Exception as e: logger.error(e) - self.simple_error( - http.HTTPStatus.INTERNAL_SERVER_ERROR, "internal proxy error" - ) + self.simple_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, "internal proxy error") self.on_done() diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py index 842cb866a..d12e661fb 100644 --- a/tests/test_entrypoint.py +++ b/tests/test_entrypoint.py @@ -9,6 +9,7 @@ from unittest.mock import patch import vcr + from securedrop_proxy import entrypoint @@ -53,7 +54,7 @@ def test_missing_config(self): @patch("securedrop_proxy.entrypoint.TimedRotatingFileHandler") def test_configure_logging(self, mock_log_conf, mock_log_conf_sys, mock_logging): with sdhome() as homedir: - mock_log_file = os.path.join(homedir, 'logs', 'proxy.log') + mock_log_file = os.path.join(homedir, "logs", "proxy.log") entrypoint.configure_logging() mock_log_conf.assert_called_once_with(mock_log_file) # For rsyslog handler @@ -71,9 +72,7 @@ def test_unwritable_log_folder(self): output = None with sdhome() as home: os.chmod(home, 0o0444) - with unittest.mock.patch( - "sys.stdout", new_callable=io.StringIO - ) as mock_stdout: + with unittest.mock.patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: with self.assertRaises(SystemExit): entrypoint.start() output = mock_stdout.getvalue() diff --git a/tests/test_main.py b/tests/test_main.py index 05f158623..94a39a2cc 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,16 +1,15 @@ import http -from io import StringIO import json import subprocess import sys +import types import unittest import uuid -import types +from io import StringIO import vcr -from securedrop_proxy import main -from securedrop_proxy import proxy +from securedrop_proxy import main, proxy class TestMain(unittest.TestCase): diff --git a/tests/test_proxy.py b/tests/test_proxy.py index f4cd56038..7a035cfd3 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -1,18 +1,17 @@ -import sys import http import json +import sys +import tempfile +import types import unittest import uuid -import types from io import StringIO -import tempfile from unittest.mock import patch import requests import vcr -from securedrop_proxy import proxy -from securedrop_proxy import version +from securedrop_proxy import proxy, version class TestProxyValidConfig(unittest.TestCase): @@ -245,9 +244,7 @@ def test_internal_server_error(self): self.assertEqual(p.res.status, http.HTTPStatus.INTERNAL_SERVER_ERROR) self.assertIn("application/json", p.res.headers["Content-Type"]) body = json.loads(p.res.body) - self.assertEqual( - body["error"], http.HTTPStatus.INTERNAL_SERVER_ERROR.phrase.lower() - ) + self.assertEqual(body["error"], http.HTTPStatus.INTERNAL_SERVER_ERROR.phrase.lower()) @vcr.use_cassette("fixtures/proxy_internal_error.yaml") def test_internal_error(self): From 32e62719148d54d1c264e8b781056803fa46b24a Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Thu, 4 Jun 2020 18:37:59 +0530 Subject: [PATCH 378/751] Adds a .git-blame-ignore-revs file It adds a configuration file to skip the previous commmit which has isort and black formatting changes. ``` git config blame.ignoreRevsFile .git-blame-ignore-revs ```` After one executes the above command, `git blame` does not show details for the formatting commit. --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..dbeda0ff0 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +787844dc339e090aa0e9ac2241895365522c4119 From 24dc1ea7b31827e0e006317ca982dcf28baf9732 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Thu, 4 Jun 2020 15:16:44 -0400 Subject: [PATCH 379/751] Add black and isort checks Add black and isort to dev requirements. Add Makefile targets for both checking and applying them, and make those part of "make check". Remove unused Sphinx requirement. Add pyproject.toml with configuration for both black and isort. --- .gitignore | 1 + Makefile | 26 ++++++-- dev-requirements.in | 3 +- dev-requirements.txt | 147 +++++++++++++------------------------------ pyproject.toml | 11 ++++ 5 files changed, 80 insertions(+), 108 deletions(-) create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore index 37e689d01..e4009c69c 100644 --- a/.gitignore +++ b/.gitignore @@ -74,6 +74,7 @@ target/ # .env *.env +.venv #VSCode .vscode/ diff --git a/Makefile b/Makefile index 0792a6d7f..de9899e48 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,26 @@ DEFAULT_GOAL: help OPEN=$(word 1, $(wildcard /usr/bin/xdg-open /usr/bin/open)) -.PHONY: format -format: ## Run the formatter - @docker build -t securedrop-sdk/black:latest -f Dockerfile.black . && \ - docker run --rm -v $(PWD):/home/kdas/workplace securedrop-sdk/black:latest black . +.PHONY: venv +venv: ## Provision a Python 3 virtualenv for development. + python3 -m venv .venv + .venv/bin/pip install --require-hashes -r dev-requirements.txt + +.PHONY: black +black: ## Format Python source code with black + @black setup.py sdclientapi tests + +.PHONY: check-black +check-black: ## Check Python source code formatting with black + @black --check --diff setup.py sdclientapi tests + +.PHONY: isort +isort: ## Run isort to organize Python imports + @isort --recursive setup.py sdclientapi tests + +.PHONY: check-isort +check-isort: ## Check Python import organization with isort + @isort --check-only --diff --recursive setup.py sdclientapi tests TESTS ?= tests .PHONY: test @@ -20,7 +36,7 @@ mypy: ## Run the mypy typechecker @mypy sdclientapi .PHONY: check -check: lint mypy test safety ## Run all checks and tests +check: check-black check-isort lint mypy safety test ## Run all checks and tests .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities diff --git a/dev-requirements.in b/dev-requirements.in index df8d8e446..de0c29345 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -1,10 +1,11 @@ +black coverage flake8 +isort mypy pyotp pytest pytest-cov -sphinx vcrpy pyyaml>=5.3.1,<6 pytest-mock diff --git a/dev-requirements.txt b/dev-requirements.txt index 654670ebd..9d86296f0 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -4,18 +4,17 @@ # # pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in # -alabaster==0.7.12 \ - --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ - --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 \ - # via sphinx +appdirs==1.4.4 \ + --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ + --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 \ + # via black attrs==19.3.0 \ --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ - # via pytest -babel==2.8.0 \ - --hash=sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38 \ - --hash=sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4 \ - # via sphinx + # via black, pytest +black==19.10b0 \ + --hash=sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b \ + --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 certifi==2019.11.28 \ --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f \ @@ -27,7 +26,7 @@ chardet==3.0.4 \ click==7.0 \ --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ - # via pip-tools + # via black, pip-tools coverage==5.0.3 \ --hash=sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3 \ --hash=sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c \ @@ -60,10 +59,6 @@ coverage==5.0.3 \ --hash=sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52 \ --hash=sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37 \ --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 -docutils==0.16 \ - --hash=sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af \ - --hash=sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc \ - # via sphinx entrypoints==0.3 \ --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ @@ -75,53 +70,13 @@ idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ # via requests, yarl -imagesize==1.2.0 \ - --hash=sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1 \ - --hash=sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1 \ - # via sphinx importlib-metadata==1.5.0 \ --hash=sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302 \ --hash=sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b \ # via pluggy, pytest -jinja2==2.11.1 \ - --hash=sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250 \ - --hash=sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49 \ - # via sphinx -markupsafe==1.1.1 \ - --hash=sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473 \ - --hash=sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161 \ - --hash=sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235 \ - --hash=sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5 \ - --hash=sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42 \ - --hash=sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff \ - --hash=sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b \ - --hash=sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1 \ - --hash=sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e \ - --hash=sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183 \ - --hash=sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66 \ - --hash=sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b \ - --hash=sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1 \ - --hash=sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15 \ - --hash=sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1 \ - --hash=sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e \ - --hash=sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b \ - --hash=sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905 \ - --hash=sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735 \ - --hash=sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d \ - --hash=sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e \ - --hash=sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d \ - --hash=sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c \ - --hash=sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21 \ - --hash=sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2 \ - --hash=sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5 \ - --hash=sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b \ - --hash=sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6 \ - --hash=sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f \ - --hash=sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f \ - --hash=sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2 \ - --hash=sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7 \ - --hash=sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be \ - # via jinja2 +isort==4.3.21 \ + --hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \ + --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ @@ -171,7 +126,11 @@ mypy==0.761 \ packaging==20.1 \ --hash=sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73 \ --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 \ - # via pytest, sphinx + # via pytest +pathspec==0.8.0 \ + --hash=sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0 \ + --hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 \ + # via black pip-tools==4.4.1 \ --hash=sha256:2a5e67f539a67658614e2b2c6f484db05183a29e472f99ecbb2668838006ece2 \ --hash=sha256:3d0c21b5e0b54ab15cf4a47065b9fa7567e8fc83246ebd732e954c65a6310a59 @@ -191,10 +150,6 @@ pyflakes==2.1.1 \ --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 \ # via flake8 -pygments==2.5.2 \ - --hash=sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b \ - --hash=sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe \ - # via sphinx pyotp==2.3.0 \ --hash=sha256:c88f37fd47541a580b744b42136f387cdad481b560ef410c0d85c957eb2a2bc0 \ --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 @@ -211,10 +166,6 @@ pytest-mock==2.0.0 \ pytest==5.3.5 \ --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 -pytz==2019.3 \ - --hash=sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d \ - --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be \ - # via babel pyyaml==5.3.1 \ --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ @@ -227,6 +178,29 @@ pyyaml==5.3.1 \ --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a +regex==2020.5.14 \ + --hash=sha256:1386e75c9d1574f6aa2e4eb5355374c8e55f9aac97e224a8a5a6abded0f9c927 \ + --hash=sha256:27ff7325b297fb6e5ebb70d10437592433601c423f5acf86e5bc1ee2919b9561 \ + --hash=sha256:329ba35d711e3428db6b45a53b1b13a0a8ba07cbbcf10bbed291a7da45f106c3 \ + --hash=sha256:3a9394197664e35566242686d84dfd264c07b20f93514e2e09d3c2b3ffdf78fe \ + --hash=sha256:51f17abbe973c7673a61863516bdc9c0ef467407a940f39501e786a07406699c \ + --hash=sha256:579ea215c81d18da550b62ff97ee187b99f1b135fd894a13451e00986a080cad \ + --hash=sha256:70c14743320a68c5dac7fc5a0f685be63bc2024b062fe2aaccc4acc3d01b14a1 \ + --hash=sha256:7e61be8a2900897803c293247ef87366d5df86bf701083b6c43119c7c6c99108 \ + --hash=sha256:8044d1c085d49673aadb3d7dc20ef5cb5b030c7a4fa253a593dda2eab3059929 \ + --hash=sha256:89d76ce33d3266173f5be80bd4efcbd5196cafc34100fdab814f9b228dee0fa4 \ + --hash=sha256:99568f00f7bf820c620f01721485cad230f3fb28f57d8fbf4a7967ec2e446994 \ + --hash=sha256:a7c37f048ec3920783abab99f8f4036561a174f1314302ccfa4e9ad31cb00eb4 \ + --hash=sha256:c2062c7d470751b648f1cacc3f54460aebfc261285f14bc6da49c6943bd48bdd \ + --hash=sha256:c9bce6e006fbe771a02bda468ec40ffccbf954803b470a0345ad39c603402577 \ + --hash=sha256:ce367d21f33e23a84fb83a641b3834dd7dd8e9318ad8ff677fbfae5915a239f7 \ + --hash=sha256:ce450ffbfec93821ab1fea94779a8440e10cf63819be6e176eb1973a6017aff5 \ + --hash=sha256:ce5cc53aa9fbbf6712e92c7cf268274eaff30f6bd12a0754e8133d85a8fb0f5f \ + --hash=sha256:d466967ac8e45244b9dfe302bbe5e3337f8dc4dec8d7d10f5e950d83b140d33a \ + --hash=sha256:d881c2e657c51d89f02ae4c21d9adbef76b8325fe4d5cf0e9ad62f850f3a98fd \ + --hash=sha256:e565569fc28e3ba3e475ec344d87ed3cd8ba2d575335359749298a0899fe122e \ + --hash=sha256:ea55b80eb0d1c3f1d8d784264a6764f931e172480a2f1868f2536444c5f01e01 \ + # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 @@ -234,37 +208,10 @@ six==1.14.0 \ --hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a \ --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c \ # via packaging, pip-tools, vcrpy -snowballstemmer==2.0.0 \ - --hash=sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0 \ - --hash=sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52 \ - # via sphinx -sphinx==2.4.1 \ - --hash=sha256:5024a67f065fe60d9db2005580074d81f22a02dd8f00a5b1ec3d5f4d42bc88d8 \ - --hash=sha256:f929b72e0cfe45fa581b8964d54457117863a6a6c9369ecc1a65b8827abd3bf2 -sphinxcontrib-applehelp==1.0.1 \ - --hash=sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897 \ - --hash=sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d \ - # via sphinx -sphinxcontrib-devhelp==1.0.1 \ - --hash=sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34 \ - --hash=sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981 \ - # via sphinx -sphinxcontrib-htmlhelp==1.0.2 \ - --hash=sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422 \ - --hash=sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7 \ - # via sphinx -sphinxcontrib-jsmath==1.0.1 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ - # via sphinx -sphinxcontrib-qthelp==1.0.2 \ - --hash=sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20 \ - --hash=sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f \ - # via sphinx -sphinxcontrib-serializinghtml==1.1.3 \ - --hash=sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227 \ - --hash=sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768 \ - # via sphinx +toml==0.10.1 \ + --hash=sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f \ + --hash=sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88 \ + # via black typed-ast==1.4.1 \ --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ @@ -287,7 +234,7 @@ typed-ast==1.4.1 \ --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \ - # via mypy + # via black, mypy typing-extensions==3.7.4.1 \ --hash=sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2 \ --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ @@ -329,7 +276,3 @@ zipp==2.2.0 \ --hash=sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50 \ --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e \ # via importlib-metadata - -# WARNING: The following packages were not pinned, but pip requires them to be -# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. -# setuptools diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..81c891231 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ +[tool.black] +line-length = 100 + +[tool.isort] +line_length = 100 +indent = ' ' +multi_line_output = 3 +ensure_newline_before_comments = true +include_trailing_comma = true +force_grid_wrap = 0 +use_parentheses = true From a31be70d4082de90c54e6851659560c7bc51b453 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Tue, 16 Jun 2020 14:48:45 -0400 Subject: [PATCH 380/751] Apply black and isort --- sdclientapi/__init__.py | 139 +++++++++------------------------- sdclientapi/sdlocalobjects.py | 1 + tests/test_api.py | 21 ++--- tests/test_apiproxy.py | 46 ++++++----- 4 files changed, 72 insertions(+), 135 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 26cb8bdca..ff03c7703 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -2,26 +2,22 @@ import http import json import os -import requests from datetime import datetime -from requests.exceptions import ( - ConnectTimeout, - ReadTimeout, - ConnectionError, - TooManyRedirects -) from subprocess import PIPE, Popen, TimeoutExpired -from typing import List, Tuple, Dict, Optional, Any +from typing import Any, Dict, List, Optional, Tuple from urllib.parse import urljoin +import requests +from requests.exceptions import ConnectionError, ConnectTimeout, ReadTimeout, TooManyRedirects + from .sdlocalobjects import ( - BaseError, - WrongUUIDError, AuthError, + BaseError, + Reply, ReplyError, Source, - Reply, Submission, + WrongUUIDError, ) DEFAULT_PROXY_VM_NAME = "sd-proxy" @@ -111,12 +107,8 @@ def __init__( self.journalist_last_name = None # type: Optional[str] self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool - self.default_request_timeout = ( - default_request_timeout or DEFAULT_REQUEST_TIMEOUT - ) - self.default_download_timeout = ( - default_download_timeout or DEFAULT_DOWNLOAD_TIMEOUT - ) + self.default_request_timeout = default_request_timeout or DEFAULT_REQUEST_TIMEOUT + self.default_download_timeout = default_download_timeout or DEFAULT_DOWNLOAD_TIMEOUT self.proxy_vm_name = DEFAULT_PROXY_VM_NAME config = configparser.ConfigParser() @@ -250,9 +242,7 @@ def authenticate(self, totp: Optional[str] = None) -> bool: raise AuthError("Authentication error") self.token = token_data["token"] - self.token_expiration = datetime.strptime( - token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ" - ) + self.token_expiration = datetime.strptime(token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ") self.token_journalist_uuid = token_data["journalist_uuid"] self.journalist_first_name = token_data["journalist_first_name"] self.journalist_last_name = token_data["journalist_last_name"] @@ -279,10 +269,7 @@ def get_sources(self) -> List[Source]: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) sources = data["sources"] @@ -305,10 +292,7 @@ def get_source(self, source: Source) -> Source: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -339,10 +323,7 @@ def delete_source(self, source: Source) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -377,10 +358,7 @@ def add_star(self, source: Source) -> bool: method = "POST" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -400,10 +378,7 @@ def remove_star(self, source: Source) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -424,10 +399,7 @@ def get_submissions(self, source: Source) -> List[Submission]: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -455,10 +427,7 @@ def get_submission(self, submission: Submission) -> Submission: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -488,10 +457,7 @@ def get_all_submissions(self) -> List[Submission]: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) result = [] # type: List[Submission] @@ -519,10 +485,7 @@ def delete_submission(self, submission: Submission) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -584,9 +547,7 @@ def download_submission( # This is where we will save our downloaded file filepath = os.path.join(path, submission.filename) with open(filepath, "wb") as fobj: - for chunk in data.iter_content( - chunk_size=1024 - ): # Getting 1024 in each chunk + for chunk in data.iter_content(chunk_size=1024): # Getting 1024 in each chunk if chunk: fobj.write(chunk) @@ -595,7 +556,7 @@ def download_submission( "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] ) - return headers['Etag'].strip('\"'), filepath + return headers["Etag"].strip('"'), filepath def flag_source(self, source: Source) -> bool: """ @@ -608,10 +569,7 @@ def flag_source(self, source: Source) -> bool: method = "POST" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -635,17 +593,12 @@ def get_current_user(self) -> Any: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) return data - def reply_source( - self, source: Source, msg: str, reply_uuid: Optional[str] = None - ) -> Reply: + def reply_source(self, source: Source, msg: str, reply_uuid: Optional[str] = None) -> Reply: """ This method is used to reply to a given source. The message should be preencrypted with the source's GPG public key. @@ -685,10 +638,7 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -713,10 +663,7 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -736,10 +683,7 @@ def get_all_replies(self) -> List[Reply]: method = "GET" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) result = [] @@ -760,9 +704,7 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: :returns: Tuple of etag and path of the saved Reply. """ - path_query = "api/v1/sources/{}/replies/{}/download".format( - reply.source_uuid, reply.uuid - ) + path_query = "api/v1/sources/{}/replies/{}/download".format(reply.source_uuid, reply.uuid) method = "GET" @@ -771,10 +713,7 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: raise BaseError("Please provide a valid directory to save.") data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -787,9 +726,7 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: # This is where we will save our downloaded file filepath = os.path.join(path, reply.filename) with open(filepath, "wb") as fobj: - for chunk in data.iter_content( - chunk_size=1024 - ): # Getting 1024 in each chunk + for chunk in data.iter_content(chunk_size=1024): # Getting 1024 in each chunk if chunk: fobj.write(chunk) @@ -798,7 +735,7 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: "/home/user/QubesIncoming/", self.proxy_vm_name, data["filename"] ) - return headers['Etag'].strip('\"'), filepath + return headers["Etag"].strip('"'), filepath def delete_reply(self, reply: Reply) -> bool: """ @@ -810,17 +747,12 @@ def delete_reply(self, reply: Reply) -> bool: # Not using direct URL because this helps to use the same method # from local reply (not fetched from server) objects. # See the *from_string for an example. - path_query = "api/v1/sources/{}/replies/{}".format( - reply.source_uuid, reply.uuid - ) + path_query = "api/v1/sources/{}/replies/{}".format(reply.source_uuid, reply.uuid) method = "DELETE" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if status_code == 404: @@ -839,10 +771,7 @@ def logout(self) -> bool: method = "POST" data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, ) if "message" in data and data["message"] == "Your token has been revoked.": diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index 512484d3a..5e5443b12 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -6,6 +6,7 @@ class BaseError(Exception): """For generic errors not covered by other exceptions""" + def __init__(self, message: typing.Optional[str] = None) -> None: self.msg = message diff --git a/tests/test_api.py b/tests/test_api.py index 74c088a5b..b47a2aaaf 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,26 +1,27 @@ import datetime import hashlib import os -import pytest import shutil import tempfile import time import unittest import pyotp +import pytest import vcr from requests.exceptions import ConnectTimeout, ReadTimeout -from utils import load_auth_for_http -from utils import save_auth_for_http from sdclientapi import API, RequestTimeoutError -from sdclientapi.sdlocalobjects import AuthError -from sdclientapi.sdlocalobjects import BaseError -from sdclientapi.sdlocalobjects import Reply -from sdclientapi.sdlocalobjects import ReplyError -from sdclientapi.sdlocalobjects import Source -from sdclientapi.sdlocalobjects import Submission -from sdclientapi.sdlocalobjects import WrongUUIDError +from sdclientapi.sdlocalobjects import ( + AuthError, + BaseError, + Reply, + ReplyError, + Source, + Submission, + WrongUUIDError, +) +from utils import load_auth_for_http, save_auth_for_http NUM_REPLIES_PER_SOURCE = 2 diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 3817c1605..f7ba35fa3 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -2,25 +2,25 @@ import http import json import os -import pyotp -import pytest -import time import shutil import tempfile +import time import unittest - from subprocess import TimeoutExpired +import pyotp +import pytest + from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import ( BaseError, - WrongUUIDError, - ReplyError, Reply, + ReplyError, Source, Submission, + WrongUUIDError, ) -from utils import load_auth, save_auth, dastollervey_datasaver +from utils import dastollervey_datasaver, load_auth, save_auth NUM_REPLIES_PER_SOURCE = 2 @@ -32,9 +32,7 @@ def setUp(self): self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" self.server = "http://localhost:8081/" - self.api = API( - self.server, self.username, self.password, str(self.totp.now()), proxy=True - ) + self.api = API(self.server, self.username, self.password, str(self.totp.now()), proxy=True) for i in range(3): if os.path.exists("testtoken.json"): @@ -389,11 +387,18 @@ def communicate(self, *nargs, **kwargs) -> None: def test_download_get_sources_error_request_timeout(mocker): api = API("mock", "mock", "mock", "mock", True) - mocker.patch("sdclientapi.json_query", - return_value=( - json.dumps({"body": json.dumps({"error": "wah"}), - "status": http.HTTPStatus.GATEWAY_TIMEOUT, - "headers": "foo"}))) + mocker.patch( + "sdclientapi.json_query", + return_value=( + json.dumps( + { + "body": json.dumps({"error": "wah"}), + "status": http.HTTPStatus.GATEWAY_TIMEOUT, + "headers": "foo", + } + ) + ), + ) with pytest.raises(RequestTimeoutError): api.get_sources() @@ -401,10 +406,11 @@ def test_download_get_sources_error_request_timeout(mocker): def test_filename_key_not_in_download_response(mocker): api = API("mock", "mock", "mock", "mock", True) s = Submission(uuid="foobar") - mocker.patch("sdclientapi.json_query", - return_value=( - json.dumps({"body": json.dumps({"error": "wah"}), - "status": 200, - "headers": "foo"}))) + mocker.patch( + "sdclientapi.json_query", + return_value=( + json.dumps({"body": json.dumps({"error": "wah"}), "status": 200, "headers": "foo"}) + ), + ) with pytest.raises(BaseError): api.download_submission(s) From 177e78c9663fa30fe25011541932c9f2e705499d Mon Sep 17 00:00:00 2001 From: John Hensley Date: Tue, 16 Jun 2020 14:50:11 -0400 Subject: [PATCH 381/751] Add .git-blame-ignore-revs --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..5976f002c --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +a31be70d4082de90c54e6851659560c7bc51b453 From 764883416606142ffd21fa108e593227ca25e5b9 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 6 Aug 2020 15:34:50 -0700 Subject: [PATCH 382/751] Fix miswording in list of unacceptable behavior The intent was clear but given the list is introduced as a list of behaviors people are expected to never engage into, the meaning was the opposite of the intention. (authored by @gonzalo-bulnes) add mickael to CoC (authored by @emkll) Restore language about choosing points of contact (authored by @eloquence) --- CODE_OF_CONDUCT.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 901b605a2..027da3333 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -105,7 +105,7 @@ following behaviors: - Unwelcome sexual attention - Posting (or threatening to post) other people's personally identifying information ("doxing") - - Respect people's stated personal boundaries + - Violation of people's stated personal boundaries - Following the letter of this Code of Conduct while disregarding its spirit. When judging whether certain behavior represents a violation of this code, we @@ -134,7 +134,10 @@ assist with resolving conflicts within the community. Currently the Community Team consists of: -- Jen Helsby (`@redshiftzero`) - Lead Engineer - [jen@freedom.press](mailto:jen@freedom.press) +- Jen Helsby (`@redshiftzero`) - Principal Research Engineer - [jen@freedom.press](mailto:jen@freedom.press) +- Mickael E. (`@emkll`) - Lead Engineer - [mickael@freedom.press](mailto:mickael@freedom.press) + +You can contact the whole Community Team or members individually. You should contact the Community Team if you have questions or concerns about the Code of Conduct (including improvements) or if you feel that you have From 157effcef1bfe6aef870fc8f1da996b5c3bf8957 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 6 Aug 2020 16:24:56 -0700 Subject: [PATCH 383/751] add journalist name to reply --- data/setUp.json | 2 +- data/test-badotp.yml | 39 +- data/test-badpassword.yml | 37 +- data/test-baduser.yml | 39 +- data/test-delete-reply.yml | 393 +++++++++++----- data/test-delete-source.yml | 443 ++++++++++++++----- data/test-delete-submission-from-string.yml | 378 +++++++++++----- data/test-delete-submission.yml | 320 +++++++++----- data/test-download-reply.yml | 199 +++++---- data/test-download-submission.yml | 215 +++++---- data/test-error-unencrypted-reply.yml | 174 +++++--- data/test-failed-single-source.yml | 44 +- data/test-flag-source.yml | 242 ++++++---- data/test-get-all-replies.yml | 234 +++++++--- data/test-get-all-submissions.yml | 86 ++-- data/test-get-current-user.yml | 43 +- data/test-get-replies-from-source.yml | 188 +++++--- data/test-get-reply-from-source.yml | 245 ++++++---- data/test-get-single-source.yml | 197 ++++++--- data/test-get-sources.yml | 126 ++++-- data/test-get-submission.yml | 256 +++++++---- data/test-get-submissions.yml | 174 +++++--- data/test-get-wrong-submissions.yml | 173 +++++--- data/test-logout.yml | 40 +- data/test-reply-source-with-uuid.yml | 193 ++++---- data/test-reply-source.yml | 193 ++++---- data/test-setup.yml | 19 +- data/test-star-add-remove.yml | 348 ++++++++++----- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_logout.json | 2 +- data/test_reply_source.json | 2 +- data/test_reply_source_with_uuid.json | 2 +- data/test_star_add_remove.json | 2 +- sdclientapi/__init__.py | 8 +- sdclientapi/sdlocalobjects.py | 8 +- tests/test_api.py | 4 +- tests/test_apiproxy.py | 4 +- 58 files changed, 3491 insertions(+), 1625 deletions(-) diff --git a/data/setUp.json b/data/setUp.json index 21cbb9b0d..0f9529652 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test-badotp.yml b/data/test-badotp.yml index 7c21e4a06..0082a6982 100644 --- a/data/test-badotp.yml +++ b/data/test-badotp.yml @@ -1,21 +1,34 @@ interactions: - request: - body: '{"one_time_code": "no", "passphrase": "correct horse battery staple - profanity oil chewy", "username": "journalist"}' + body: '{"username": "journalist", "passphrase": "correct horse battery staple + profanity oil chewy", "one_time_code": "no"}' headers: - Accept: ['*/*'] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['119'] - User-Agent: [python-requests/2.20.0] + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '115' + User-Agent: + - python-requests/2.22.0 method: POST uri: http://127.0.0.1:8081/api/v1/token response: - body: {string: "{\n \"error\": \"Forbidden\",\n \"message\": \"Token authentication failed.\"\n}\n"} + body: + string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication\ + \ failed.\"\n}\n" headers: - Content-Length: ['73'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 403, message: FORBIDDEN} + Content-Length: + - '73' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 403 + message: FORBIDDEN version: 1 diff --git a/data/test-badpassword.yml b/data/test-badpassword.yml index 252ebb988..8434ee079 100644 --- a/data/test-badpassword.yml +++ b/data/test-badpassword.yml @@ -1,20 +1,33 @@ interactions: - request: - body: '{"one_time_code": "278592", "passphrase": "no", "username": "journalist"}' + body: '{"username": "journalist", "passphrase": "no", "one_time_code": "205004"}' headers: - Accept: ['*/*'] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['119'] - User-Agent: [python-requests/2.20.0] + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '73' + User-Agent: + - python-requests/2.22.0 method: POST uri: http://127.0.0.1:8081/api/v1/token response: - body: {string: "{\n \"error\": \"Forbidden\",\n \"message\": \"Token authentication failed.\"\n}\n"} + body: + string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication\ + \ failed.\"\n}\n" headers: - Content-Length: ['73'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 403, message: FORBIDDEN} + Content-Length: + - '73' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 403 + message: FORBIDDEN version: 1 diff --git a/data/test-baduser.yml b/data/test-baduser.yml index e5a84ad8b..a0df2c89c 100644 --- a/data/test-baduser.yml +++ b/data/test-baduser.yml @@ -1,21 +1,34 @@ interactions: - request: - body: '{"one_time_code": "278592", "passphrase": "correct horse battery staple - profanity oil chewy", "username": "no"}' + body: '{"username": "no", "passphrase": "correct horse battery staple profanity + oil chewy", "one_time_code": "205004"}' headers: - Accept: ['*/*'] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['119'] - User-Agent: [python-requests/2.20.0] + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '111' + User-Agent: + - python-requests/2.22.0 method: POST uri: http://127.0.0.1:8081/api/v1/token response: - body: {string: "{\n \"error\": \"Forbidden\",\n \"message\": \"Token authentication failed.\"\n}\n"} + body: + string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication\ + \ failed.\"\n}\n" headers: - Content-Length: ['73'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 403, message: FORBIDDEN} + Content-Length: + - '73' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 403 + message: FORBIDDEN version: 1 diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index a332ce08f..00d527a0d 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -2,133 +2,316 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-raging_azure-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", - \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/0403af8d-b948-46ac-bf76-237f51f1b908\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"0403af8d-b948-46ac-bf76-237f51f1b908\"\n }, \n {\n - \ \"filename\": \"4-raging_azure-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/ac8730b9-7644-434b-8ca5-996805a511c6\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"ac8730b9-7644-434b-8ca5-996805a511c6\"\n }, \n {\n - \ \"filename\": \"3-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/dd8d3cde-2506-4fe0-a129-3a81f95dad12\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"dd8d3cde-2506-4fe0-a129-3a81f95dad12\"\n }, \n {\n - \ \"filename\": \"4-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/849e868d-4826-47d3-b8cc-c9a1848e77c0\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"849e868d-4826-47d3-b8cc-c9a1848e77c0\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"3-constrained_eyewitness-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\ + , \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\n }, \n \ + \ {\n \"filename\": \"4-constrained_eyewitness-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/2f622872-67ac-4c00-aa43-362a13f1d221\"\ + , \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"2f622872-67ac-4c00-aa43-362a13f1d221\"\n }, \n \ + \ {\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ + \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ + , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ + \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ + , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ + \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ + , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ + \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ + , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ + \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ + \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1959'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '5533' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-raging_azure-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", - \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/0403af8d-b948-46ac-bf76-237f51f1b908\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"0403af8d-b948-46ac-bf76-237f51f1b908\"\n }, \n {\n - \ \"filename\": \"4-raging_azure-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/ac8730b9-7644-434b-8ca5-996805a511c6\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"ac8730b9-7644-434b-8ca5-996805a511c6\"\n }, \n {\n - \ \"filename\": \"3-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/dd8d3cde-2506-4fe0-a129-3a81f95dad12\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"dd8d3cde-2506-4fe0-a129-3a81f95dad12\"\n }, \n {\n - \ \"filename\": \"4-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/849e868d-4826-47d3-b8cc-c9a1848e77c0\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"849e868d-4826-47d3-b8cc-c9a1848e77c0\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"3-constrained_eyewitness-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\ + , \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\n }, \n \ + \ {\n \"filename\": \"4-constrained_eyewitness-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/2f622872-67ac-4c00-aa43-362a13f1d221\"\ + , \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"2f622872-67ac-4c00-aa43-362a13f1d221\"\n }, \n \ + \ {\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ + \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ + , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ + \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ + , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ + \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ + , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ + \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ + , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ + \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ + \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1959'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '5533' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/0403af8d-b948-46ac-bf76-237f51f1b908 + uri: http://127.0.0.1:8081/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/cac11bb8-7ea7-45c2-8887-65be8dd7df5d response: - body: {string: "{\n \"message\": \"Reply deleted\"\n}\n"} + body: + string: "{\n \"message\": \"Reply deleted\"\n}\n" headers: - Content-Length: ['33'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '33' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3NjkxNSwiaWF0IjoxNTUyOTQ4MTE1fQ.eyJpZCI6MX0.wFd17YM9k5t7KfMJHBoAcbsW0fATcoDleZbTdv92sto] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"4-raging_azure-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", - \n \"reply_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies/ac8730b9-7644-434b-8ca5-996805a511c6\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"ac8730b9-7644-434b-8ca5-996805a511c6\"\n }, \n {\n - \ \"filename\": \"3-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/dd8d3cde-2506-4fe0-a129-3a81f95dad12\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"dd8d3cde-2506-4fe0-a129-3a81f95dad12\"\n }, \n {\n - \ \"filename\": \"4-untrammeled_dancing-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"33ae0b48-99fd-4eb5-94b0-d98a999a8438\", \n \"reply_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies/849e868d-4826-47d3-b8cc-c9a1848e77c0\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"849e868d-4826-47d3-b8cc-c9a1848e77c0\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"4-constrained_eyewitness-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/2f622872-67ac-4c00-aa43-362a13f1d221\"\ + , \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"2f622872-67ac-4c00-aa43-362a13f1d221\"\n }, \n \ + \ {\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ + \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ + , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ + \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ + , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ + \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ + , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ + \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ + , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ + \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ + \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1478'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 22:28:35 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '5004' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index 9f9d2eef8..83713585f 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -2,130 +2,369 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"raging azure\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADEQMD9oHNCk7gvgk6/W2kx+DkaoM1I24fDlx3soKXqmRjyK1MK\\nx/ecx6ta3I1KRIwl6Iy1QCEhGjmR3PNEY61n6n2Jv8n2NtDx31Gagp1f8ckhPtYq\\n2BP9VzxkTIqbwi6oOaKl3GCarkZD1/detSH8Sdzk9uzlE49Qn/wCsFyW69GtJBFT\\nVZ0F5hPJItXOAT1mHrRc1Hl/lsmax61rqLGuvuCxnpe3UrDKtfxL2uNKzGYm687P\\nAxVBbHE7HlOLJ8YAVlIJQzcWXHvj5yBE2U6ANYrUYqLsuOImA5Ruwb/UwhKP+zQ5\\nhGOgizEmE3NvH5Hmex2ir+Bl3FKSn8QgvbOwXhSxkNcn+YREB8exNxZJ2SH80JvQ\\ndYR0Onfcr9W2Qn4xdvpaaR1i1faGJ9Mc2O1bg/lubpJKNh0KJsqX5yZMWFbA5nQJ\\nAO7/3tU1a9BSISEc5ICeAD+DSHYc+vsDoBcN8Fmh/p0fzDAM6AXfpl5vggzhPXTN\\ncJlJGVBTPZh4SLDLmL1lvEytoLBErzjF+rYpLDrQurflN3bGdWEKoQZxwc1I5f/h\\n/v3ZkHFwIcOV1TwVfRvmYP2Q3H+86pHeFFStb1mCh0EuS+ygwMkPIirQnIpDa3iB\\nNRLTZvdQW0T8XswQWisGL/R+mKUX1HkMkqYp/lPAqmFuNtzgWcg4pTeOmQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M0hBT0VaUzVVSkZUQ0tOU0FGNjRHSDJaT082\\nN0NCSUhGWkxXTEdaTTI2MzYzQ1BEQ1ZERUtBSEdIWU1HVlFJTk5OUVVDQVRHREJQ\\nRFNJRlYyUEoyWFE2UFpZWllSN09VNkROWUFXST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEL+uIhVjsHuRvuMP/16AhT5kbRJQ\\n109ZhDfH7pOl4avUutY7OYPHDEgFR+6BwStKZcmP/1Amx+2eUcRno8dAlSbTKYFI\\nq1gss9e/xwz1xK7qtUDFxfZL2dbNq877kmCEjNY63kLkme6O6ltCxNJ+TINKK2ff\\nkOanD3t58xILFV4nxzZd2GRWy1IEYJb3OCZ9UD0alCAZcV2RHJjJoMCRqTSfW7rV\\njrZlQZEQHIocDBlYLM461ZyP/TnCwfc/quz0GoJR+qVU+hY5sYrUh1M62cT+bKxd\\nL5Rnk/4DIx89QvcQKR0l330iB9Pu16+Ks7DaOU85M17Smg7Pjc9nYsUwgS6vQQmV\\nU6Rjlfqa7JglA54cWPd9WkRlT+cUlCUlctowgpTiAA0uzc3bu6YQ7RefGU5qnLIH\\ndDtAzIDTCeJdaJZvd2MaV0KICe4mU2RpJYlDSVUfzVb/xK6vVN6maN5tnJ6dpirj\\nA6WhGl+aKA4Ou6ok1mOHLEfAcCEbUrR8FF1MPZ9/DWRYpQpJhAfBG3pSfUByf5/w\\nt3WVNpiXWet/DXwFLsUpra7sNAb5+BFaEv22Y2bFF0TEkai39PdKUnVzc7jjSRvZ\\n84cfRurWK9GR8ynSLEmu47/beWzRIO5qBe3VIdDUL2w0PhH/rKiGg5zBDy8b8otz\\n2OCPH1/t36o/CP6SrIJdE1l1Z6RoS0C/\\n=DXES\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-18T22:23:44.186714Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/remove_star\", - \n \"replies_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies\", - \n \"submissions_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/submissions\", - \n \"url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"d9eb4d27-b7c8-4599-ba22-daee6d939f17\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"untrammeled dancing\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADzzNyczWaTEHPlB0YCa6Kxu4tXmXl7VOXdfCPb7G6XkjWGBSKN\\nQqPJ0rsfilX00vRLf2xxf4036zZ0CO358405eDmN/BNBtLahP8EJBTDi40NebdXf\\nxNE0gaos/MkMIL9fL2SJHcUvJZj7+YfBe+9FatRf1M7+m4Zh4KfRK3xaF0VYGRuo\\nGZ551+16D7243TaM+KNy1oEy3kYXxU32/pdqrxJ4jAGy4J6l++M47o5i0drNbQ4D\\nVNQgYihhCLWGdMAIcF8ORg8j3s196Xv9tQSl89eofw22ccAfqoHCVdcbvcZQ0YKU\\noVXrUoALdueS4imyksmOaKjhJANCxs7ChEnHRNcpGN0XbGITwT6rjLeNCYAVdYVM\\nb4fqM2wHA/y+g3hElrBiBHXvc0hp8S9162CQPSJj60hIe0dJw1dkrAZUFMLA0nvm\\n8SWCnE+2r8J52pI515CY5G6ndnwtrruIigoDazKfIWU/SQWi+eDR0QGzsNzOTJ5L\\n5T4EEO3cXj9DIdBHwaYJ1CvNyxI1mfP2yiDi6Jpb1dVfExh1/yhrZyCkEQfbEAFG\\npvUSIBlh/n6ZDGiUDFmH8wOoNMC0C3Q7N458Y/L8VhliCisANhh2R0SXiY+gAUK2\\nisN3N/+/ed5sglP4HCFn2hgog1vAO1FV3PMWOfiE+8sVixi7xVhatJqw5QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WURLRk4zQUtWVUJIWURSVVlCTkFZVEVZNjdB\\nRTdaRkJXTVRCS0ZMU1BSQjJLUTVUVU9IVTVITlkzUDZVUk1LVlRPWEVVUlFVWFlS\\nRklCUVhUS1JJMlJVRU1BRjdVUzdHNE5WWjRWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEHKp8dqMthpjUyoP/2wgVwZYK7Cr\\nM+RP6jrEyV3WV/LqE9hUp5r5pTI6qAslp3APLCBp6Q1BuNWEsx4b/GFhkPrhwZpS\\nJkngPmxw7JHo0aK0SX9+/jBTwb2+orDIHcs+IiDpyRjkpKi8KV87cfvGLvaTE+Jc\\niopTsafJ9O9IE5WpVlwyA7CxESe+2M7cLWknbpImcytlcxPot61a87oIdWk/BZv1\\nwDpsfO/Tv3q5YFbNaGn5kPvUGaVbxhRODqaNcxE/24AxgtrimPpbaf3s5zWERf5k\\nTC6PUq2z3qEmtuKUkj8skBv5DFkaAeq7Ulx4PPkaeguLvQOIhRHDie3pX9cuak2B\\nb/7lFs4FKpMGE4XSkOqXJY4q/kkKlEk7x9sTqI29tkOVbhYaUBw6vDT+O/zLxjg1\\nvKPXFO7ylegdAECUSIJnzDqyN9v+hVOXxt726EYYfMQqIo384zZOp/JOngNWKNfr\\nT2VhBnANjeLCqLcN3ofwJK8jY9fidqqpidZ50IX5lEI2s3/QaouldLhlAKqKH0e5\\nCgmg2F68MJN1o/LbYPCt5hE8xCI9i3Q//MefQKG3GspFRdS3BiXyoLwTf7HrGOoC\\nXzC7byFTxOMYPYj/EYTQd8I6NByvjGbRYMZrv6Dy6NAqZobq9QdrR/F7kYiTLRF/\\ncd3FLzg6d15rMyHMeEQQCj/8Bzrbx0QV\\n=e2OF\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-18T22:23:46.635201Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/remove_star\", - \n \"replies_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies\", - \n \"submissions_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/submissions\", - \n \"url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"8b8325d9-20a5-4687-8bdf-f0d45408ca38\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"constrained\ + \ eyewitness\", \n \"key\": {\n \"fingerprint\": \"CC59B5AB8BC8770B59308BDBB82F554149259C5B\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEANvlFBws8fu6oQaUgWyL+cdPQQrgq8WHi0YBZekQ/svztrmirZFq\\\ + n+5qSiZOQRP1hiet9ZnarWUsi3sFsqq7lDoIWTU6yV3bDda9Fxbsc1TKbN7Df6fUP\\nlB6szCNLq6NEK1nZJIPVkXpBCjUpKQMvQBlQ+6ARPIE6XHEWA5EPmqctABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPENVTDcySlVDVk0zT1lCSFdVRVlNTFJUSFZZQUlES1daU1RL\\nUlRNTUJEVTU0QlNKN1FDQVhOT1hNRVFWQ1haUlFYWk1NT0tBQVBZWk1PQTI2RTM0\\\ + nTlZLN0pBUjZOVE81T0ZRTE1WSUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELgvVUFJJZxb3DEEANlFHYLuLuY23/szcAFwrbUu\\\ + nuUyTV8ylv/YyxJmOl3aXXUBUiM6GMvpW8/Nxz33s8lDOv4/V2ctOoIzMc675Seu5\\nR1BgGwm5BLTOSNyHdXglEkZxBkZC3iTrhR3wSbpsHy8eV6GsqR03WbSakyyXnBhi\\\ + n/++MfchhoxmG4F4JGDs+\\n=9WCS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.606776Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/submissions\"\ + , \n \"url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"9832893a-001a-41db-b299-55be6c3f8917\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ + \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5210'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '8009' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"raging azure\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADEQMD9oHNCk7gvgk6/W2kx+DkaoM1I24fDlx3soKXqmRjyK1MK\\nx/ecx6ta3I1KRIwl6Iy1QCEhGjmR3PNEY61n6n2Jv8n2NtDx31Gagp1f8ckhPtYq\\n2BP9VzxkTIqbwi6oOaKl3GCarkZD1/detSH8Sdzk9uzlE49Qn/wCsFyW69GtJBFT\\nVZ0F5hPJItXOAT1mHrRc1Hl/lsmax61rqLGuvuCxnpe3UrDKtfxL2uNKzGYm687P\\nAxVBbHE7HlOLJ8YAVlIJQzcWXHvj5yBE2U6ANYrUYqLsuOImA5Ruwb/UwhKP+zQ5\\nhGOgizEmE3NvH5Hmex2ir+Bl3FKSn8QgvbOwXhSxkNcn+YREB8exNxZJ2SH80JvQ\\ndYR0Onfcr9W2Qn4xdvpaaR1i1faGJ9Mc2O1bg/lubpJKNh0KJsqX5yZMWFbA5nQJ\\nAO7/3tU1a9BSISEc5ICeAD+DSHYc+vsDoBcN8Fmh/p0fzDAM6AXfpl5vggzhPXTN\\ncJlJGVBTPZh4SLDLmL1lvEytoLBErzjF+rYpLDrQurflN3bGdWEKoQZxwc1I5f/h\\n/v3ZkHFwIcOV1TwVfRvmYP2Q3H+86pHeFFStb1mCh0EuS+ygwMkPIirQnIpDa3iB\\nNRLTZvdQW0T8XswQWisGL/R+mKUX1HkMkqYp/lPAqmFuNtzgWcg4pTeOmQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8M0hBT0VaUzVVSkZUQ0tOU0FGNjRHSDJaT082\\nN0NCSUhGWkxXTEdaTTI2MzYzQ1BEQ1ZERUtBSEdIWU1HVlFJTk5OUVVDQVRHREJQ\\nRFNJRlYyUEoyWFE2UFpZWllSN09VNkROWUFXST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEL+uIhVjsHuRvuMP/16AhT5kbRJQ\\n109ZhDfH7pOl4avUutY7OYPHDEgFR+6BwStKZcmP/1Amx+2eUcRno8dAlSbTKYFI\\nq1gss9e/xwz1xK7qtUDFxfZL2dbNq877kmCEjNY63kLkme6O6ltCxNJ+TINKK2ff\\nkOanD3t58xILFV4nxzZd2GRWy1IEYJb3OCZ9UD0alCAZcV2RHJjJoMCRqTSfW7rV\\njrZlQZEQHIocDBlYLM461ZyP/TnCwfc/quz0GoJR+qVU+hY5sYrUh1M62cT+bKxd\\nL5Rnk/4DIx89QvcQKR0l330iB9Pu16+Ks7DaOU85M17Smg7Pjc9nYsUwgS6vQQmV\\nU6Rjlfqa7JglA54cWPd9WkRlT+cUlCUlctowgpTiAA0uzc3bu6YQ7RefGU5qnLIH\\ndDtAzIDTCeJdaJZvd2MaV0KICe4mU2RpJYlDSVUfzVb/xK6vVN6maN5tnJ6dpirj\\nA6WhGl+aKA4Ou6ok1mOHLEfAcCEbUrR8FF1MPZ9/DWRYpQpJhAfBG3pSfUByf5/w\\nt3WVNpiXWet/DXwFLsUpra7sNAb5+BFaEv22Y2bFF0TEkai39PdKUnVzc7jjSRvZ\\n84cfRurWK9GR8ynSLEmu47/beWzRIO5qBe3VIdDUL2w0PhH/rKiGg5zBDy8b8otz\\n2OCPH1/t36o/CP6SrIJdE1l1Z6RoS0C/\\n=DXES\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-18T22:23:44.186714Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/remove_star\", - \n \"replies_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/replies\", - \n \"submissions_url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17/submissions\", - \n \"url\": \"/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17\", - \n \"uuid\": \"d9eb4d27-b7c8-4599-ba22-daee6d939f17\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"untrammeled dancing\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADzzNyczWaTEHPlB0YCa6Kxu4tXmXl7VOXdfCPb7G6XkjWGBSKN\\nQqPJ0rsfilX00vRLf2xxf4036zZ0CO358405eDmN/BNBtLahP8EJBTDi40NebdXf\\nxNE0gaos/MkMIL9fL2SJHcUvJZj7+YfBe+9FatRf1M7+m4Zh4KfRK3xaF0VYGRuo\\nGZ551+16D7243TaM+KNy1oEy3kYXxU32/pdqrxJ4jAGy4J6l++M47o5i0drNbQ4D\\nVNQgYihhCLWGdMAIcF8ORg8j3s196Xv9tQSl89eofw22ccAfqoHCVdcbvcZQ0YKU\\noVXrUoALdueS4imyksmOaKjhJANCxs7ChEnHRNcpGN0XbGITwT6rjLeNCYAVdYVM\\nb4fqM2wHA/y+g3hElrBiBHXvc0hp8S9162CQPSJj60hIe0dJw1dkrAZUFMLA0nvm\\n8SWCnE+2r8J52pI515CY5G6ndnwtrruIigoDazKfIWU/SQWi+eDR0QGzsNzOTJ5L\\n5T4EEO3cXj9DIdBHwaYJ1CvNyxI1mfP2yiDi6Jpb1dVfExh1/yhrZyCkEQfbEAFG\\npvUSIBlh/n6ZDGiUDFmH8wOoNMC0C3Q7N458Y/L8VhliCisANhh2R0SXiY+gAUK2\\nisN3N/+/ed5sglP4HCFn2hgog1vAO1FV3PMWOfiE+8sVixi7xVhatJqw5QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WURLRk4zQUtWVUJIWURSVVlCTkFZVEVZNjdB\\nRTdaRkJXTVRCS0ZMU1BSQjJLUTVUVU9IVTVITlkzUDZVUk1LVlRPWEVVUlFVWFlS\\nRklCUVhUS1JJMlJVRU1BRjdVUzdHNE5WWjRWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEHKp8dqMthpjUyoP/2wgVwZYK7Cr\\nM+RP6jrEyV3WV/LqE9hUp5r5pTI6qAslp3APLCBp6Q1BuNWEsx4b/GFhkPrhwZpS\\nJkngPmxw7JHo0aK0SX9+/jBTwb2+orDIHcs+IiDpyRjkpKi8KV87cfvGLvaTE+Jc\\niopTsafJ9O9IE5WpVlwyA7CxESe+2M7cLWknbpImcytlcxPot61a87oIdWk/BZv1\\nwDpsfO/Tv3q5YFbNaGn5kPvUGaVbxhRODqaNcxE/24AxgtrimPpbaf3s5zWERf5k\\nTC6PUq2z3qEmtuKUkj8skBv5DFkaAeq7Ulx4PPkaeguLvQOIhRHDie3pX9cuak2B\\nb/7lFs4FKpMGE4XSkOqXJY4q/kkKlEk7x9sTqI29tkOVbhYaUBw6vDT+O/zLxjg1\\nvKPXFO7ylegdAECUSIJnzDqyN9v+hVOXxt726EYYfMQqIo384zZOp/JOngNWKNfr\\nT2VhBnANjeLCqLcN3ofwJK8jY9fidqqpidZ50IX5lEI2s3/QaouldLhlAKqKH0e5\\nCgmg2F68MJN1o/LbYPCt5hE8xCI9i3Q//MefQKG3GspFRdS3BiXyoLwTf7HrGOoC\\nXzC7byFTxOMYPYj/EYTQd8I6NByvjGbRYMZrv6Dy6NAqZobq9QdrR/F7kYiTLRF/\\ncd3FLzg6d15rMyHMeEQQCj/8Bzrbx0QV\\n=e2OF\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-18T22:23:46.635201Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/remove_star\", - \n \"replies_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies\", - \n \"submissions_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/submissions\", - \n \"url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"8b8325d9-20a5-4687-8bdf-f0d45408ca38\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"constrained\ + \ eyewitness\", \n \"key\": {\n \"fingerprint\": \"CC59B5AB8BC8770B59308BDBB82F554149259C5B\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEANvlFBws8fu6oQaUgWyL+cdPQQrgq8WHi0YBZekQ/svztrmirZFq\\\ + n+5qSiZOQRP1hiet9ZnarWUsi3sFsqq7lDoIWTU6yV3bDda9Fxbsc1TKbN7Df6fUP\\nlB6szCNLq6NEK1nZJIPVkXpBCjUpKQMvQBlQ+6ARPIE6XHEWA5EPmqctABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPENVTDcySlVDVk0zT1lCSFdVRVlNTFJUSFZZQUlES1daU1RL\\nUlRNTUJEVTU0QlNKN1FDQVhOT1hNRVFWQ1haUlFYWk1NT0tBQVBZWk1PQTI2RTM0\\\ + nTlZLN0pBUjZOVE81T0ZRTE1WSUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELgvVUFJJZxb3DEEANlFHYLuLuY23/szcAFwrbUu\\\ + nuUyTV8ylv/YyxJmOl3aXXUBUiM6GMvpW8/Nxz33s8lDOv4/V2ctOoIzMc675Seu5\\nR1BgGwm5BLTOSNyHdXglEkZxBkZC3iTrhR3wSbpsHy8eV6GsqR03WbSakyyXnBhi\\\ + n/++MfchhoxmG4F4JGDs+\\n=9WCS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.606776Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/submissions\"\ + , \n \"url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ + , \n \"uuid\": \"9832893a-001a-41db-b299-55be6c3f8917\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ + \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5210'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '8009' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:57 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/d9eb4d27-b7c8-4599-ba22-daee6d939f17 + uri: http://127.0.0.1:8081/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917 response: - body: {string: "{\n \"message\": \"Source and submissions deleted\"\n}\n"} + body: + string: "{\n \"message\": \"Source and submissions deleted\"\n}\n" headers: - Content-Length: ['50'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '50' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1Mjk3OTkzMSwiaWF0IjoxNTUyOTUxMTMxfQ.eyJpZCI6MX0.9P3wxI-3_VKsD2YC5HZ31pfWuqLEBJsy9aBhW_cdqXE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"untrammeled dancing\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADzzNyczWaTEHPlB0YCa6Kxu4tXmXl7VOXdfCPb7G6XkjWGBSKN\\nQqPJ0rsfilX00vRLf2xxf4036zZ0CO358405eDmN/BNBtLahP8EJBTDi40NebdXf\\nxNE0gaos/MkMIL9fL2SJHcUvJZj7+YfBe+9FatRf1M7+m4Zh4KfRK3xaF0VYGRuo\\nGZ551+16D7243TaM+KNy1oEy3kYXxU32/pdqrxJ4jAGy4J6l++M47o5i0drNbQ4D\\nVNQgYihhCLWGdMAIcF8ORg8j3s196Xv9tQSl89eofw22ccAfqoHCVdcbvcZQ0YKU\\noVXrUoALdueS4imyksmOaKjhJANCxs7ChEnHRNcpGN0XbGITwT6rjLeNCYAVdYVM\\nb4fqM2wHA/y+g3hElrBiBHXvc0hp8S9162CQPSJj60hIe0dJw1dkrAZUFMLA0nvm\\n8SWCnE+2r8J52pI515CY5G6ndnwtrruIigoDazKfIWU/SQWi+eDR0QGzsNzOTJ5L\\n5T4EEO3cXj9DIdBHwaYJ1CvNyxI1mfP2yiDi6Jpb1dVfExh1/yhrZyCkEQfbEAFG\\npvUSIBlh/n6ZDGiUDFmH8wOoNMC0C3Q7N458Y/L8VhliCisANhh2R0SXiY+gAUK2\\nisN3N/+/ed5sglP4HCFn2hgog1vAO1FV3PMWOfiE+8sVixi7xVhatJqw5QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WURLRk4zQUtWVUJIWURSVVlCTkFZVEVZNjdB\\nRTdaRkJXTVRCS0ZMU1BSQjJLUTVUVU9IVTVITlkzUDZVUk1LVlRPWEVVUlFVWFlS\\nRklCUVhUS1JJMlJVRU1BRjdVUzdHNE5WWjRWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEHKp8dqMthpjUyoP/2wgVwZYK7Cr\\nM+RP6jrEyV3WV/LqE9hUp5r5pTI6qAslp3APLCBp6Q1BuNWEsx4b/GFhkPrhwZpS\\nJkngPmxw7JHo0aK0SX9+/jBTwb2+orDIHcs+IiDpyRjkpKi8KV87cfvGLvaTE+Jc\\niopTsafJ9O9IE5WpVlwyA7CxESe+2M7cLWknbpImcytlcxPot61a87oIdWk/BZv1\\nwDpsfO/Tv3q5YFbNaGn5kPvUGaVbxhRODqaNcxE/24AxgtrimPpbaf3s5zWERf5k\\nTC6PUq2z3qEmtuKUkj8skBv5DFkaAeq7Ulx4PPkaeguLvQOIhRHDie3pX9cuak2B\\nb/7lFs4FKpMGE4XSkOqXJY4q/kkKlEk7x9sTqI29tkOVbhYaUBw6vDT+O/zLxjg1\\nvKPXFO7ylegdAECUSIJnzDqyN9v+hVOXxt726EYYfMQqIo384zZOp/JOngNWKNfr\\nT2VhBnANjeLCqLcN3ofwJK8jY9fidqqpidZ50IX5lEI2s3/QaouldLhlAKqKH0e5\\nCgmg2F68MJN1o/LbYPCt5hE8xCI9i3Q//MefQKG3GspFRdS3BiXyoLwTf7HrGOoC\\nXzC7byFTxOMYPYj/EYTQd8I6NByvjGbRYMZrv6Dy6NAqZobq9QdrR/F7kYiTLRF/\\ncd3FLzg6d15rMyHMeEQQCj/8Bzrbx0QV\\n=e2OF\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-18T22:23:46.635201Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/remove_star\", - \n \"replies_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/replies\", - \n \"submissions_url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38/submissions\", - \n \"url\": \"/api/v1/sources/8b8325d9-20a5-4687-8bdf-f0d45408ca38\", - \n \"uuid\": \"8b8325d9-20a5-4687-8bdf-f0d45408ca38\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ + \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['2619'] - Content-Type: [application/json] - Date: ['Mon, 18 Mar 2019 23:18:51 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '6408' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index 9d6de67c2..2da77fd8d 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -2,145 +2,301 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", - \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", - \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", - \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", - \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ + , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ + , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1550'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '3572' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 1, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", - \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", - \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", - \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"exasperating microscope\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", - \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", - \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", - \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ + \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 1, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5214'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '6408' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ + , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ + , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['526'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '532' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80 + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff response: - body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} + body: + string: "{\n \"message\": \"Submission deleted\"\n}\n" headers: - Content-Length: ['38'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '38' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE4MCwiaWF0IjoxNTUzMDE5MzgwfQ.eyJpZCI6MX0.GMXycngr1NHsQ6SoOXCPWqbgPOdHwvYVxKoggrxLYuE] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", - \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", - \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", - \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", - \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1049'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:16:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '3065' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 1f8b304f3..073cd65c2 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -2,130 +2,246 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", - \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", - \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", - \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", - \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", - \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", - \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db/download\"\ + , \n \"filename\": \"1-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db\"\ + , \n \"uuid\": \"00479d52-955a-43eb-bf66-5fbf100589db\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ + , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ + , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['2051'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '4079' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", - \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", - \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", - \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", - \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", - \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", - \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db/download\"\ + , \n \"filename\": \"1-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db\"\ + , \n \"uuid\": \"00479d52-955a-43eb-bf66-5fbf100589db\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ + , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ + , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['2051'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '4079' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3 + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db response: - body: {string: "{\n \"message\": \"Submission deleted\"\n}\n"} + body: + string: "{\n \"message\": \"Submission deleted\"\n}\n" headers: - Content-Length: ['38'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '38' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODE1OSwiaWF0IjoxNTUzMDE5MzU5fQ.eyJpZCI6MX0._1bKHMI2zIWuRatK9QDOO-Xoz-NsDrjVbp_kuFkQJt8] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", - \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", - \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", - \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", - \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ + , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ + , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1550'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:15:59 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '3572' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index 1612ecd70..cdb0c5df6 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -2,91 +2,140 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-bumptious_arthropod-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"5f3d3409-9399-498d-a8d1-f02ab450f885\", - \n \"reply_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/e1f1db54-9cd7-41f3-907d-6a260e269a60\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8\", - \n \"uuid\": \"e1f1db54-9cd7-41f3-907d-6a260e269a60\"\n }, \n {\n - \ \"filename\": \"4-bumptious_arthropod-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"5f3d3409-9399-498d-a8d1-f02ab450f885\", \n \"reply_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/9aa8387b-227f-4d3b-b47d-3c5c96fd3f60\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8\", - \n \"uuid\": \"9aa8387b-227f-4d3b-b47d-3c5c96fd3f60\"\n }, \n {\n - \ \"filename\": \"3-spoken_rhubarb-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"5f3d3409-9399-498d-a8d1-f02ab450f885\", \n \"reply_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3/replies/ffba8ed5-f980-44b3-8dd1-49c3a3f6d71c\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3\", - \n \"uuid\": \"ffba8ed5-f980-44b3-8dd1-49c3a3f6d71c\"\n }, \n {\n - \ \"filename\": \"4-spoken_rhubarb-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"5f3d3409-9399-498d-a8d1-f02ab450f885\", \n \"reply_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3/replies/34542cad-5ccb-4928-85cc-0c60ca9c1331\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/47d4fab2-cb41-4ddd-bc18-b0d7659f73b3\", - \n \"uuid\": \"34542cad-5ccb-4928-85cc-0c60ca9c1331\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ + \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ + , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ + \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ + , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ + \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ + , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ + \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ + , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ + \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ + \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1963'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:04:01 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDowMSBHTVQifX0.Dq_o4Q.qFKcGIvoRsQLKve19AOUFXqLA4M; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '4475' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/1f0a8826-a118-4a2f-b295-4abc0b41e1b8/replies/e1f1db54-9cd7-41f3-907d-6a260e269a60/download + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba/download response: body: string: !!binary | - hQIMA4yXuu5TVfRnAQ/+LS3mPSxrYhYfTp0By8svlMJ2DBCUmZMn74quKHIJ9ElpYfj/1zgYdLgF - dtEiPWuABXEZI0RofFKecBO42Jh3Vh3p8DeuqhXTcjXgrT7wm2XXyDtb/OuaniS2zgPuHtvdC4Kj - h948h/10Irl/RhWwA9wyGpZmDrw79c8j5HqvsYyZw8Cs3PlrW3trLLl/2X2oviEflADiBuhysDlF - f4AUp7mhleR6lS6Fz/6LVrGlhTyKrAlBtfQO98hJnpVly1vlBQ9ygWMYTColISv3jqQb/sXJnXY2 - Hu7oyQIny4VdrEadPXfy9mH8uizhyPFrl7aY5NW2YWUGoh8nrgSSfRlJCBfzrjoAlbCAOo7rsv3X - ypWG66m5e8qKlxWlA93UD4gtDUTHCkYNoqPfY0egdM7BhrxTh8Y1jDOf968eZ/C2N5J2CsEK/cre - 9didltAuAwa7w3lqwanIka3LsVOhm2pCO3YRgXfC+j9UMmyHm95aggQthwHK5sKUhdoHfmJvWMwr - AVK2rti9WNM7ms0r6mbeZuDMxkyqlkAeaB1QF8iGgWzdIwp0Il/5tDJIKXrfD0n1QgOS4pHly8V+ - q5YIr+esp0mXKIGX3BgG6n5XSGFXGbEZajMupi5futzmI/HwEmMVDbWMZIrEMmRw+XDJRVbaSPYP - mDpoZAVQoiPZa4xpg0OFAgwDw+fEwKIgGyoBD/0U2i+krFhtwoO1QCu29BfrwWZ8xROe2MtOsonO - u/uO1PCStaLW0CH9hWxfCux5OxTyE7wGEf5murs7wA/AMbGQvT+q35syYBfbwMOJlZNfr5yCWp52 - rS2M9jnuhHvjYwxbhX5YZoAPwj7dMOFpc3jnyaWSH66ZCRhtQuZ2wlE2p7fG8znx4Rom6ZBeWbMY - 0AL8UZxarwEzZtxjE5zUPsus8QGgIg8s9zeTgH/J6N8IiyktSFDqwno3MhnIdadrUFTNTK1V191D - SsWFetoT1RH8uWV7XQ+VnqKGJKnOWrdh+hqrChXxenfeWsidXD3M6JrfkBHONbEngIcpncd10624 - NVnKv0vTl0PefdFGnMuWQnv1yLKGNeFxOX4SWh/3O7S3AixPHXRSlD/3uLutaTzP0pJDlcCQkClb - sDLW3Qd7z33uP7Mt1bYlbDNTHWdXVOtREaCsHDo2o6PbH6RCChdmO051a+reK8erYzUxi8p0E42M - lEAE+Ga1v8b/zjF63Xr8QDMOrTtHh1PItct5Vdr3nu3Od09IjxQml06aqLsNz4Ui8LhjIhmjydLl - 8S3eQJynPWTJFHrj8BimpwaFQtf4X+xFbS0NfgdpRGg74A/DBpqB3KgzH4ttIaEjfKJb8wzytngk - klLiCx+quHm8diS+0YvXGlUpj3eMeHUAKJfuw9I8AQwaDb3TfkswePxjJTYEVeuyOu8o9HKHRSfU - aGrsr+1AOL3vU9X3dWHI1hEv/lIHZos2l9um6cQ2Yuao + hIwDJiOit8mAPG8BA/4jaGcGWprn0jHC4d8+klBECm0i1YW/HClkK8WOK4sIx2Kt8r44sNICVqaP + KWhBrF/usunU2Rj9ZzZRVxNaV3F6xe0rA4m5u9nAh557IyqYupVzsNS3c8uN92YS6IaKj+eIjPH+ + HbV7RlIy/gb+2FkRMGliHZIooLVC/iBK/TyNd4UCDAPD58TAoiAbKgEQAML2iueyhwsl29GOF1mA + u7L35E6xn2uGIervnj06GMDG7AeA9kYOdggGeSmdlKrfxpuJDowcNrX+QYgRZSlBEo7sTqngtPBc + xwUSSO4SNKZ8d4m+t5FBk233QmG3whTMe0MM+IDJHLqd7RONHZHggjq5861FgedmijH7zhsGBywu + TDd2i9DiCxrOZzZ1E0is+tS3Z/IQAV3vcVrgy3i0xsk/URdnWW1CGnSSXR2u+mAA/o+ySQKSuohh + 4ED4zXr0qNqtyYvv2GKael6xOPWafzZbga/JREkFs+xqBicY0/bAUgdUY13hdcUWj/ZQzsp/8fM0 + xpZOYr1HhG4X1M4Qxs2vcxEptCTu0m0q+tmXI1EqrELjg6U1qFgw+6LA2tuLTHytarPQe2jmU1ju + DuhJmKCv3lwO0hfv8998wyTBvslOBDpZqXUD4cWBA5KPlcr7cWRyLIx4RNXbRjmZ3+OLqTXbPJ1W + 7N8+/j3OVgaHei8d6AZyoop4ZvKiO+RX7StFXgEv+DYmWrhv76DtRJ75vbUFxqCoicNFv92wyenC + WQKJOTzLfcrwdM7LqpFOv+O7cqyQJB8qWkh9/DEV9YncE7Vlxb+13BZ1iEZRMMRyUIJOZDYJGAKN + gpuiEt6V0RKS6vxIKiHvD3M9V0Uur3WrNEWY/QbvoaHEl3cRIqSuew2/0lIBAg/ufznQLyd0Qs9z + tc3PNst1+4unlB5Y/EM046KU6J1kWIzksF82DsQ2OR4U9puhBmip3kpbJ4M4hJCZFQTJiwT95Q1s + Lt2aFIlgYn/CQjpB headers: - Cache-Control: ['public, max-age=43200'] - Content-Disposition: [attachment; filename=3-bumptious_arthropod-reply.gpg] - Content-Length: ['1116'] - Content-Type: [application/pgp-encrypted] - Date: ['Mon, 22 Oct 2018 23:04:01 GMT'] - Etag: ['"sha256:5ce907bd53310f2eb28d9d5720bb24ae183ced608a80ffd58f2f83d4cd8a8f53"'] - Expires: ['Tue, 23 Oct 2018 11:04:01 GMT'] - Last-Modified: ['Mon, 22 Oct 2018 23:03:57 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowNDowMSBHTVQifX0.Dq_o4Q.qFKcGIvoRsQLKve19AOUFXqLA4M; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Cache-Control: + - public, max-age=43200 + Content-Disposition: + - attachment; filename=3-four-lane_downturn-reply.gpg + Content-Length: + - '753' + Content-Type: + - application/pgp-encrypted + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Etag: + - sha256:dcf91e62a64c0460b654545293101c17efbe0374c260d7b4b5a5ade22774fb34 + Expires: + - Tue, 01 Sep 2020 07:06:58 GMT + Last-Modified: + - Mon, 31 Aug 2020 19:05:03 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 7c2e2803c..35e8e8be7 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -2,107 +2,152 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download\", - \n \"filename\": \"1-structural_ageratum-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75\", - \n \"submission_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6\", - \n \"uuid\": \"455db36c-16c5-455e-b06f-5e3e8fc6a8b6\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/c456dc43-66a6-4354-82af-b026f455348d/download\", - \n \"filename\": \"2-structural_ageratum-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75\", - \n \"submission_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/c456dc43-66a6-4354-82af-b026f455348d\", - \n \"uuid\": \"c456dc43-66a6-4354-82af-b026f455348d\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/9228136d-999a-4479-a63a-eb4a37c40e60/download\", - \n \"filename\": \"1-self-imposed_newscast-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15\", - \n \"submission_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/9228136d-999a-4479-a63a-eb4a37c40e60\", - \n \"uuid\": \"9228136d-999a-4479-a63a-eb4a37c40e60\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/28d4557e-e975-4c5f-8348-661e1669a457/download\", - \n \"filename\": \"2-self-imposed_newscast-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15\", - \n \"submission_url\": \"/api/v1/sources/b6991835-4947-4849-97ca-2e04b22c1d15/submissions/28d4557e-e975-4c5f-8348-661e1669a457\", - \n \"uuid\": \"28d4557e-e975-4c5f-8348-661e1669a457\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['2061'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:02:22 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjoyMiBHTVQifX0.Dq_ofg.H18TQ5BtFmSC8t41wtBHhGSZFu8; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '3065' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download + uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqARAA18buNXUm88NJsVQeNErUakSi+AuxGY8pX264uXhqUyvCOwEzi8HXfyAm - K93WpmGQimRFXEevbawyvFk7kRg3ORW0em/AY1oy8fABJS+ODIt1TvUtva3i+aQpALYo20UWzl/v - rKNbN+5/+nI4av4vvAq5uOzJRYwSrWV0QZ+QM6O/hZ/g+Fb8Gk9Jl9KvcSpBlAn2EENYniF53GL1 - hEk1SRZhMleTiSKar7n+U+DC3lTTqr2ogkfhdlMZ1N7Tvuf6iT0l11KKAo+LAQD2qifzXOliT2Gw - SiSpbohyjovnK/ritSejDjt4e37NCPrlVqaEylRGOS4nVGXIvY2+OSuMaOeTy6438eE1Is4MnrGi - hjtc+DFId12HigUNx2fxAMjVH6rdtA1R9a5pp5s/sw3bvlPghyi3/+ci3+r9diqm9UYhfjXqotGR - XE73FvYZMKcS82dNCmQIUAYyx1eb7ec0UH17ZRpBf2g/B9VAcZdU9gXp9Mso/GgP6/ilb506YqHl - QTyKSjdpD7UKR7S9iGQVAcuCQt/3hq/3o66kGNswj17WuJH5RBDpYyRS3hsaXTEZRcD1wS0ZeXG0 - Q+kMDzpozCd5CyS4oXbbx4FNablcilFcc7xbbkSraovBPOogY02YHvVyeuoSSini0j/7jcnfhQyb - 7ShE4QZXEokIP+3TlavSSwE9dr9G/WXJhQaXjlu1izF45h75VMpbatXcYOWhuUlP0jqUhzb1RaaG - HdZnPwLrd8qrP7QCbDOI6mRgPLHogpIXyj/VemYV0p8y1w== + hQIMA8PnxMCiIBsqAQ//ZuomdBniWPSycJGhB//L857Ai4T+Y+tpH/CGtrRIYrAHIuswb/6tH0C5 + 0/gzSfaC9KbNJgL9bdo9FPF1sRavQ7p7crP+m4Qn2y9agrSxu1thmMv+QPwsEUSODFEqOf1CzJYp + 8f9/cLro0d2sw5rKEEW0rzumaoDkQYFAOri4jWRrGsCfklkY9tFKvTAplcRZwfgNWmsF12VhR2SS + /NFRoCjIIXqQKhDHG2Y9bW2mBwVO5I8MT1UzOh6DfH59VL58rbNOnJQrIxbmZDwRQynxDs+9+p+R + qfFoLK41o7GtQqtJ/JgEcVWeJKvymSDuy8/IsTJ5gjP1eCIyMUk+0bZoCNnplc+RaaZefJEqSViU + IHaxp1tlmiOqpIcTuGQMxeQUCeZcXJ8u++hnpW2+aoIJFZoVtpXjbvBLh8I9iLgHQ+BR0GsmHOUc + /5tsQhv19WAEC6spYT2ecuVol5vnfqmlBBE7o0CcSa0T7TDtw3xLCtwHZA8K3fOfTFQDAToDyJ2+ + Zl/mpcd0L9OEFllPiI4fvZrufLaKXl7//4Ta/zMWaOR/Y3+e5pzFU5F6YdWizwmGBdTUoXkcoMry + AzJjMgRvH2taDXUmtsMvfAfJj6d9ZpfpOML3qidfnH4noDNvyRcp8+64i99BUOdaohyMjswOxGWN + +OT8U/j8JdHL+lPBQGfSQAGN2XDMRIeFpA7rFVSikviiSbc0jnqxIw5n3j7ufRSI9j6GyMqLJLEE + VaauPFssuC233VKjaSK3n4xJ8aRXDY0= headers: - Cache-Control: ['public, max-age=43200'] - Content-Disposition: [attachment; filename=1-structural_ageratum-msg.gpg] - Content-Length: ['604'] - Content-Type: [application/pgp-encrypted] - Date: ['Mon, 22 Oct 2018 23:02:22 GMT'] - Etag: ['"sha256:f1ba835050c7ae3dc2802136469b71585a40ef954bda8857d09fe05f863f0570"'] - Expires: ['Tue, 23 Oct 2018 11:02:22 GMT'] - Last-Modified: ['Mon, 22 Oct 2018 23:02:15 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjoyMiBHTVQifX0.Dq_ofg.H18TQ5BtFmSC8t41wtBHhGSZFu8; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Cache-Control: + - public, max-age=43200 + Content-Disposition: + - attachment; filename=1-uplifted_waste-msg.gpg + Content-Length: + - '593' + Content-Type: + - application/pgp-encrypted + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Etag: + - sha256:5d7eef772f95c4bacf4725268f6c7f553e6bac1fa3672f70d1cd8f47c3349105 + Expires: + - Tue, 01 Sep 2020 07:06:58 GMT + Last-Modified: + - Mon, 31 Aug 2020 19:05:04 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6 + uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6/download\", - \n \"filename\": \"1-structural_ageratum-msg.gpg\", \n \"is_read\": true, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75\", - \n \"submission_url\": \"/api/v1/sources/a4f133ff-ba19-4986-a2bd-735b6c33be75/submissions/455db36c-16c5-455e-b06f-5e3e8fc6a8b6\", - \n \"uuid\": \"455db36c-16c5-455e-b06f-5e3e8fc6a8b6\"\n}\n"} + body: + string: "{\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\": true, \n\ + \ \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n}\n" headers: - Content-Length: ['469'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:02:22 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMjoyMiBHTVQifX0.Dq_ofg.H18TQ5BtFmSC8t41wtBHhGSZFu8; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '464' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index 6bf5f7e0f..24b8c26da 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -2,67 +2,135 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"maternal birth\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVpcBEAC0qAIEBjmz+B08teRCg0IXAvF08GBBO2LGgLrq9P0nNICOuEkR\\nKUEbtlzoQUib0eG7G7pGU0rZYNgda3s/iZ8pmfvh0iH6vYXL3KPbDywLURDpZGzd\\nhbl4aE+aRk354S2hrW6vFDdHlveyhRwgDyrdJNuTdRUlDGctp68LNW0Ghm3kjLwF\\nQvTzRAKNaj3VBuXkQ6dmE6iQWR/pCHLYdeSlVxRgolnIYVMdEm9FljfY+msNPSNT\\n7k/6vuMXvrYtI7FNurD8SGTMjdITm0XiYkAHwgKSYez7v6Sp3wmvxkxiWOIbbjjV\\noQZOydOxgxpbj3apXrTwDdaI3OJWJthVVOQbspResv/4hQ88zDz38GMrcG4TnMV9\\n9nqGR2i7hPcbISm7uEbJR6xGk7qIZEyXuS++C0vpG2FwPBcWBocGltzvm8S5mWUR\\n9yrKpkTUhFzvNJsK2iZ+3y76AJYz1RcFaeH/Nz8t7MGKx+/fJ3J5hJ6blgudTC7u\\nWpYQY6AMfSjbxGWRLAjvvK8lX7CHnaO5KOJsmaaZV8l4H7haEJ6Nwe3nL/YSS1+k\\nwSuhyzyXLrLCSHC0yykwRyLMTX8GKis1ziC0y9mZXWhEbuOJCPNq+IK95orADKhV\\ntlYf/nXF5+S+XcrD6xvkG5onrhiGju4MIZi1lPClatZSEcjQUj/F1bHdFwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8UkY3U0xLWk9CM1ZRM05PVDdIVEFCRk83N0xG\\nVUxESElWWERCWkpRRlYzVUlYU0NCWU1CMzQ2Vk1YUUk3TllXUlBGR1pJMlBTUE1Z\\nUkhUTFpGREtOQkJGREpWTEU1SDJPWVlYVkZDST0+iQI/BBMBCgApBQJbzlaXAhsv\\nBQkB4JipBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ9wmJlwMgcpnXwxAA\\nlwIA+mSz73cxBJJTCOhSZ0+ZLZ7I09jF2DQ0hRGHNYiRK7TfCIWhKJ3mvTzWbdt3\\nAZIZ+R2w3Z4BzC9ddQhJ4xnma5HXngh+R7837tkd1aFmER+VjHCm3c7H4AXqJXz9\\nY14cKU8tb4lFR176R8HmmgiyO4DTwCt5beieKx2qKEPR9ThmCb9GdnJNIE/0WjD8\\nnfPN5hjXArKp2DM+rYiQhsa4dhgaLz5k7q9i6/gbJljiOzUuIO/VN3shNv/lB9aP\\nAQDxb90IJL0Kp7o1fALOpOpb8cVE92nU+QW5pMomw03gZWQQLn3zJ5zvP4oPCYoM\\nJKCVYA1xS+/vdi2qzr4XEk+fbmDML+SEF+vIfqxPrgR+jo8O4TELiruseulUyXva\\nQ6nhdoTM7kJMhRYN2H5DEMAOgpFwkprPuImEs36O2riv9e60hhVlJkGVrpYLfEMJ\\n4U8Ho/rg3ZrKXh6wUQ99Mzs8Ew0GgEndUBT4y5tqaYort50hF/AYix6+21uYJrWq\\nI5ludpHUViioA4yI4FV6onG2N8R4q0ng9EohZRakJOHg1ggSOiACOMKl65JhTNq+\\nPlaQVwCFDB4/xWEejOcIic7u0SD/f6bhPRw/aajaDV3eZBzdpnlcLS8SZdrwnYt0\\nMZTuiaucpWtLEDnaEecXxfXkEA32QhLx9kts1L9EG2o=\\n=zgqT\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:00:40.344855Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/remove_star\", - \n \"replies_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/replies\", - \n \"submissions_url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/submissions\", - \n \"url\": \"/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d\", - \n \"uuid\": \"c3d4c09c-8bc5-4465-a980-a16c747a869d\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"dowdy smasher\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVpkBEACaLlXEDQqwdaOuQlpCliOCiNyYZFtEFR1M2yFcG1bfcUA95y3L\\nrBc1cVHM3XMw4przZ/vgAG7xv+tcxF3WqGpO12tevVnGHMT5rkv7TNmJewwa8A8V\\nrF+SxaTXggyeaWnVjsK2uB7oOtSqTqmzAJq2QWkgPW239m8Tmv29jjs/q8vorDdb\\nLz59fUGr41T2MkaJNE8/4De6QVFm8xRBkVq+UYmHwHzieFgL57m3JkO0+sbEijLh\\nrDUNKTbkKzXy19Cf5kqKtcuwims9hZs7BnZrxUMyAdiUJAMAeKfurrnQXhmvS2dX\\nqhBJqFWKtVUmgT6eCtCk9b4DLFPPB1cQenJSCGYyaHFvwZPenEseQW7QJlwvtBJn\\neoGSF/yJto2BWCdo9jhX6Rv/kN+y2RBYv3NWpvwYeAW987gUzo93zJqu5wQVMoxb\\nIl7c9BpVMYcfZ3sGcB3kw+p4JJib8Em9Ho6xN5buWmYsp1kPW7pn43Cf3hTcDY6k\\nCniuvjL/ewuwA9t5o4ZOlx0JxtvvQwVhNb5ztNdlqs/Qvua6rURqLj0rV+a6cMSI\\nWEnJnabkSDCYs7HHC3LFciHVfwCgtMIAytToVDkHroGRzea8+xVdzUe4aOfW26Eq\\nhxytgHPv/bTe7sV0FRfrjJL7at3dmHrGT7h+yoFDikkeu5h7dDov8jCLeQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RElHS0FHNVJMRkFSRUhaSURSNVZNUE1SR0Yz\\nQzZGRTRHUlRDVERORTc3VUlRN1BJQTRZRlBMUkJaQVhCRU5KNDRIWVZSM01MSjdP\\nUE9ENUNZQUJWVzdDT0xCVDNQTUQzRFpMVlozWT0+iQI/BBMBCgApBQJbzlaZAhsv\\nBQkB4JinBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQWHUstq7k6I2n4A/5\\nAUKBeRIfJvvPua3Z1bvpsTiIuchB9W98yl64QyGJGw5Mjk6wwMePuLdp9lPZmHpR\\n9WcvHN5LxHzaLQvW/BYPk9ztgqQ0nkmc/SENn1WufTFZnAQpQpPbqT4Qbh5WLR39\\nUJzUJWGB6GYT2J5sdKdD1Z0xk8oHricUhg0Sffvtll4LrOlwzMU8YZULHGds1hhm\\nI3cdjr3PwRfIXLvfOKtModQ6XgQKJfumvYppeA3Mm/G2NWjmsn2UxWUlg5XChYrj\\neiRRLyP9AjxTH++U+8TbjP6AhCLZKETHijXDSo5QC4+o8TwUcRIcK99ac5p4MgXq\\nbgsidXt1hgiVAqNyNhH83MUUSeTLMoJyFSYt+toiS/v783zklp42PZPGjm+cToiP\\nwFhyCml6DOxJRTWpdASRRewHbPpp3/EgSoj9vTU+BQbMN6phqjArao12UT1znS6/\\nzE95/6ZhLMwEmLVAfy81OkJmJURfned1uuqZ8DgExmOsVBMS2TcyuBXxhRienVfK\\noHUfyC1QSLxTrDWxgaipUT3kQbcBKUq0UjvVjOJMhUiloUMuV/cl5Bt2pt9gYK8B\\nbvD2oIpmi67feAT9m0tl4iqOPytulQXjYZhJpV+eueLNF9Ug28Mx2aAjSURAg8TQ\\nfxdjcFlzddPWHmllIXr9qHDnnvq3xx092d53Me5y14I=\\n=JC7o\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:00:42.581038Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/remove_star\", - \n \"replies_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/replies\", - \n \"submissions_url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3/submissions\", - \n \"url\": \"/api/v1/sources/2fef8d25-37b5-43e5-8f28-9db7e31ccce3\", - \n \"uuid\": \"2fef8d25-37b5-43e5-8f28-9db7e31ccce3\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ + \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5230'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:00:47 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMDo0NyBHTVQifX0.Dq_oHw.zIU7k3SdUk37PmJX7jRn7N1RdXA; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6408' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: '{"reply": "hello"}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Length: ['18'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '18' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/c3d4c09c-8bc5-4465-a980-a16c747a869d/replies + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies response: - body: {string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n"} + body: + string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n" headers: - Content-Length: ['56'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:00:47 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMDo0NyBHTVQifX0.Dq_oHw.zIU7k3SdUk37PmJX7jRn7N1RdXA; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 400, message: BAD REQUEST} + Content-Length: + - '56' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 400 + message: BAD REQUEST version: 1 diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index 52c34b8d1..b7e36abda 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -2,25 +2,35 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources/not%20there response: - body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested - URL was not found on the server. If you entered the URL manually please check - your spelling and try again.\"\n}\n"} + body: + string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL\ + \ was not found on the server. If you entered the URL manually please check\ + \ your spelling and try again.\"\n}\n" headers: - Content-Length: ['166'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:43:50 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Mzo0OSBHTVQifX0.Dq_kJg.-zvE2PBta07XHKi7rmXFI3v6o6o; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 404, message: NOT FOUND} + Content-Length: + - '165' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 404 + message: NOT FOUND version: 1 diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index e062636b5..8190e77bf 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -2,99 +2,183 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"thrilled decimation\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU4EBEAC+cO1VqBDD3WemjQL47kuiJTBLF40SEDdBwbuYcTvhXfVLkhun\\nvfwW64y8Ynwz2iwAg7GtfYPVEviUp5eDpZ/uQMdMuiUTY8prDRsFmyFxc9HwPAUS\\nAvRUy5jFcwZRL7z8y8aIT82FMYRQW3roetdXR4xcbOcVKiGdIYlCRfphnmd5GHJz\\nU91ZKdoYrsgo7v+8oKrLvMDXLM7+FCpIhH5xn8Npczhxxbo5H9KnJqVkfcGXua42\\nx4vPoMggGXJnTwSt2ZHwnGPNK9w4pSpwLtRK/L9tQG7CyCIDU5L7Zkfsm8xN3bN7\\nqQiN/oiLHpc5YSmRGkeVh+ViSo0Nq7Gey6UgrHw9yLzP2Bx5JAsJQFDPb8NKIxZ0\\n+tDOaN+nap+k5nBJHZwEs1raCCapP7eo3VobHibn/qY97YpreBW/h5xDcpOxW+dT\\n9VbPmzOElOPNucjdrjFbBoHxj0uM3KFJpltpIz8TF3AQhSneshJrWqzAUi5AMbwW\\nn0qt/OGAFlfHDW/xmaoGclNcixuBz3mrYabjQ73dYe8WZhdNQt3lnuQLYlX2fn4w\\nX4jusmkIEpA7IZGQsq7+xohm4W9VnsCqrQatlIiy2E6jr76BwFuIMLST2+uwH4Or\\ntjm4Epb5/UsAwsqSv+XfH7ybNq0L23IvSdEksbbMPx5IDw9Cvw3NwMFaxwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RzRTNFpVTkJGWlJEVVdZWFZLU0k2V1FHMlFY\\nVjRWNkhSUjUyRVQ3TjNINVpFRUZJN0hDSjQzSVpKM1BWVVpJR1Y1Q0pJWFFDU1RG\\nS0ZUSDVLREhPTEIzTjRXRENDQ1g1M09RUFRMQT0+iQI/BBMBCgApBQJbzlOBAhsv\\nBQkB4Ju/BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQs6eWVj1rjqlc8RAA\\nmbyiccGl+FPyrGr3OkMnfRjrXz38y6fnY4ax+I32IOcMxajuTlxq7KNAHEb9n4Y2\\nkOq56Yl5wzt1aH/pcKpl5l5OW1xpVZGnRe/zoHcidiycVFANXpa6SyplQCxL7u5a\\n3DD7mobK6uf9NluSYgQSSAL9WwnubIjLEpMzpdIRe3xNyrw/mPIp0219LegUwnyV\\nCjddUNUMuci4gEf1DQLflROm8hCDLUTW7s5MPlqjhifJgWp8q1eThbbHLIdjO7Ff\\neIUcru+9QApvzXFmcAYbrTbe7Hk6hRpL+BZKtGC91Q8XswWdNLPZN1QzI/I83Qfq\\nIFsY4RKlICOw014RF4jgTWAMI4yPkjwbas4vB7xK1cdPtgylL/hKl0arHJeC4w40\\n3kldl98eP+bvJl4xm+f5ekWDQaphQm/z/EvXok+zcse6XUSZWuZ0cbURWCNqQ8yA\\nLOxzhWbf/901UJbA94vq2UlYHrLDXQHMCoP8S6xZzKzDER+TtjMhQra6gTjPNrcW\\nrrMB+dmhQXReKDqLgNbsTgfH/Rat53Yyd6gelyh4rkn82G/NKTUPM4FhHnSQSqme\\nDRQdqRhfBuZSRE1ZPyB7r9va1ucZnmNIA9mlmfvNfXZNxwJyPBvwN8By72fH1lZz\\nzIoNbJbbSq6E89y7/x2R6C5gXeLxP9cSLdipBX4GTjI=\\n=XUgr\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:47:30.463842Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/remove_star\", - \n \"replies_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/replies\", - \n \"submissions_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/submissions\", - \n \"url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a\", - \n \"uuid\": \"bee5c707-de42-4087-886a-1a5cc382467a\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"moronic money\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU4MBEACwNOButPZs91a8LYRMyC8W+TlrDMf4PlpjgLS/Rg82HL5VOOIw\\nnRGX/aWvf4amS11LhAbv/XBBZLOG4RlWBKAk9nV57kd+vMyil6G/urmq94nOsmcK\\nvYVGzh9YKEWC3VU3hkMwfEz47Sr/SaTkluevP1TWJ5W1F2Yt4lN68+GgXFA29rmw\\nUH2KiOgyEUnT2vPkVii/2OtSSqSaMZVCkLlHahSARtQmTMD+NRgr6nSLfsH7JodJ\\n3CpBrD85Sa+0KnRKq3/tsP/EitAwKy+lAoEXWp1qlBF2cZODS83AJdMmjRpr79kC\\n7f//z7uYVz/gJhhk27hqDcEHw5dn6twVevbq5mQr4js+XvgLHjQayHzw2EOfqj+x\\n47LUSqs7I/3sebVLYpz/uRLpiBacVkhrcI2fyPg95JtzFnGBYvKnrkXWPkYaQL+l\\ndBqIcAB/PsVDmbQcX3fttROpFsRZEJlvWSJxoeIN/R4LqJB85nUZ1h5Gz5ufOn1g\\nXDNgxPKYoftFyvspIdQYFeW8MLnfaMqGhLfZtbBpv7xs2PyjhOA4gXo8VW/EYgoy\\n0FUSFgyMfn9kp+nxcyaaZSA42UK9dBaLXpuZlzsFaYdWugZJK8CNWFM+ceIabx5i\\njtrOE2o1LJ45maGOyR3DZAbIPK9kKn6FcRT6faSbT0nUvmZIQ7DOoaxkwwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8NEdZQUdXV1E3WVFJQ1BWQTZMUFdSTFhKVjdN\\nREM0UVpNWE9CUElZR0hZQzVHRjJYUElTTlhDT0xSR0xOM0ZYUUxVWlpQT0JUVURD\\nTUhLTENURjI0VFNFVEFNVlpQNUNTTFpGN1hQWT0+iQI/BBMBCgApBQJbzlODAhsv\\nBQkB4Ju9BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ9npUlQt699zcmhAA\\nnUrLuN+c/5kUy8h0gSeqE3W9lple5jqPYduyX0PvUYY64zhUufQfy9UANYX8YNUk\\n4sXDuxRcNuv2GdFrjHI0A6nreILHovSqoektMv6UI6Ic51IHwz0sOcKMLRRHZcpR\\nm+Ig+unjOzuDFPwvlwvTmlsFmvosRgVdHtC/ShYC2kadKLnGhaimdB2x1W311DdN\\ncW1oof57mU5/4AopkAfV0hMWweIV6C94fQPE2oSUhJhAcJpDs48OTf7QyYokOq5N\\nbv4Nua5z/DEpgtcmEFngf4yL7XVEB2boidu+v2M0NEQvVMnuVfMvYEXPAUvX6tMC\\njN+T01zhaso5DTcXy0xwoMHmeXisC3NFSdvV8a9ooI2hxMlL6PfnWtwjLRdKqImc\\nwZlCjorn65U4LSnwgkssI/nNRuPqHSFp0ur5NjGF6f5z4qdSVFwv6qrOvlfNlCnk\\nUcOEM09EoWjU7+UFlcff9JCfumpVJE0qOnenXxQO6paimjCpP0dC52NM/fCHmCvk\\nlVDIMdTfIAm8CPTteCtU3WV9xjDbKgjIgULjDLFYPJ1LJTj4o3CNzuFI5a3nAwXj\\nDy00W8PZS2EmMyVxyVuyeLwGCPZpRskwJdBVKcm3BFx1mYmAcIQLXojZjoWAcu1V\\nB1yKl7xFW597svfLGwWnZeYjRiv4A5tAeqOpBP2/tq0=\\n=6opB\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:47:32.142924Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/remove_star\", - \n \"replies_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/replies\", - \n \"submissions_url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c/submissions\", - \n \"url\": \"/api/v1/sources/f4bdfc53-43bd-4612-8c6d-828b3db6d79c\", - \n \"uuid\": \"f4bdfc53-43bd-4612-8c6d-828b3db6d79c\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ + \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5235'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:47:37 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NzozNyBHTVQifX0.Dq_lCQ.vJEiukhl-YcHLzNsXv_umPYOpDM; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6408' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/flag + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/flag response: - body: {string: "{\n \"message\": \"Source flagged for reply\"\n}\n"} + body: + string: "{\n \"message\": \"Source flagged for reply\"\n}\n" headers: - Content-Length: ['44'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:47:38 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NzozNyBHTVQifX0.Dq_lCg.ZEaK7UrXWyry4JkU8AiD5dRXPXU; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '44' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:58 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654 response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\": - false, \n \"journalist_designation\": \"thrilled decimation\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOU4EBEAC+cO1VqBDD3WemjQL47kuiJTBLF40SEDdBwbuYcTvhXfVLkhun\\nvfwW64y8Ynwz2iwAg7GtfYPVEviUp5eDpZ/uQMdMuiUTY8prDRsFmyFxc9HwPAUS\\nAvRUy5jFcwZRL7z8y8aIT82FMYRQW3roetdXR4xcbOcVKiGdIYlCRfphnmd5GHJz\\nU91ZKdoYrsgo7v+8oKrLvMDXLM7+FCpIhH5xn8Npczhxxbo5H9KnJqVkfcGXua42\\nx4vPoMggGXJnTwSt2ZHwnGPNK9w4pSpwLtRK/L9tQG7CyCIDU5L7Zkfsm8xN3bN7\\nqQiN/oiLHpc5YSmRGkeVh+ViSo0Nq7Gey6UgrHw9yLzP2Bx5JAsJQFDPb8NKIxZ0\\n+tDOaN+nap+k5nBJHZwEs1raCCapP7eo3VobHibn/qY97YpreBW/h5xDcpOxW+dT\\n9VbPmzOElOPNucjdrjFbBoHxj0uM3KFJpltpIz8TF3AQhSneshJrWqzAUi5AMbwW\\nn0qt/OGAFlfHDW/xmaoGclNcixuBz3mrYabjQ73dYe8WZhdNQt3lnuQLYlX2fn4w\\nX4jusmkIEpA7IZGQsq7+xohm4W9VnsCqrQatlIiy2E6jr76BwFuIMLST2+uwH4Or\\ntjm4Epb5/UsAwsqSv+XfH7ybNq0L23IvSdEksbbMPx5IDw9Cvw3NwMFaxwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RzRTNFpVTkJGWlJEVVdZWFZLU0k2V1FHMlFY\\nVjRWNkhSUjUyRVQ3TjNINVpFRUZJN0hDSjQzSVpKM1BWVVpJR1Y1Q0pJWFFDU1RG\\nS0ZUSDVLREhPTEIzTjRXRENDQ1g1M09RUFRMQT0+iQI/BBMBCgApBQJbzlOBAhsv\\nBQkB4Ju/BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQs6eWVj1rjqlc8RAA\\nmbyiccGl+FPyrGr3OkMnfRjrXz38y6fnY4ax+I32IOcMxajuTlxq7KNAHEb9n4Y2\\nkOq56Yl5wzt1aH/pcKpl5l5OW1xpVZGnRe/zoHcidiycVFANXpa6SyplQCxL7u5a\\n3DD7mobK6uf9NluSYgQSSAL9WwnubIjLEpMzpdIRe3xNyrw/mPIp0219LegUwnyV\\nCjddUNUMuci4gEf1DQLflROm8hCDLUTW7s5MPlqjhifJgWp8q1eThbbHLIdjO7Ff\\neIUcru+9QApvzXFmcAYbrTbe7Hk6hRpL+BZKtGC91Q8XswWdNLPZN1QzI/I83Qfq\\nIFsY4RKlICOw014RF4jgTWAMI4yPkjwbas4vB7xK1cdPtgylL/hKl0arHJeC4w40\\n3kldl98eP+bvJl4xm+f5ekWDQaphQm/z/EvXok+zcse6XUSZWuZ0cbURWCNqQ8yA\\nLOxzhWbf/901UJbA94vq2UlYHrLDXQHMCoP8S6xZzKzDER+TtjMhQra6gTjPNrcW\\nrrMB+dmhQXReKDqLgNbsTgfH/Rat53Yyd6gelyh4rkn82G/NKTUPM4FhHnSQSqme\\nDRQdqRhfBuZSRE1ZPyB7r9va1ucZnmNIA9mlmfvNfXZNxwJyPBvwN8By72fH1lZz\\nzIoNbJbbSq6E89y7/x2R6C5gXeLxP9cSLdipBX4GTjI=\\n=XUgr\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:47:30.463842Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/remove_star\", - \n \"replies_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/replies\", - \n \"submissions_url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a/submissions\", - \n \"url\": \"/api/v1/sources/bee5c707-de42-4087-886a-1a5cc382467a\", \n - \ \"uuid\": \"bee5c707-de42-4087-886a-1a5cc382467a\"\n}\n"} + body: + string: "{\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"four-lane downturn\", \n \"key\"\ + : {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\", \n\ + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n \"remove_star_url\"\ + : \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\", \n\ + \ \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n}\n" headers: - Content-Length: ['2531'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:47:38 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NzozOCBHTVQifX0.Dq_lCg.jP-lL0SbTCbWG6wnxr2FQZV2Ebo; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '1514' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index f79dd561e..10c3197cc 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -2,80 +2,184 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODIyNiwiaWF0IjoxNTUzMDE5NDI2fQ.eyJpZCI6MX0.qO9kEj8hcA2p2_hGHde8ZGuu2PfvylxTYkoQpt8evvc] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 0, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", - \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", - \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", - \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"exasperating microscope\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", - \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", - \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", - \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5214'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:17:07 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODIyNiwiaWF0IjoxNTUzMDE5NDI2fQ.eyJpZCI6MX0.qO9kEj8hcA2p2_hGHde8ZGuu2PfvylxTYkoQpt8evvc] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-seamed_betel-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"63904448-542f-4f17-94c3-61d2f1bd0999\", - \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\"\n }, \n {\n - \ \"filename\": \"4-seamed_betel-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/15114b75-e9eb-425d-8a80-1b0b42fa765b\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"15114b75-e9eb-425d-8a80-1b0b42fa765b\"\n }, \n {\n - \ \"filename\": \"3-exasperating_microscope-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies/b11e3bbf-c7e7-41d3-ba8c-ee56792bedd9\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"uuid\": \"b11e3bbf-c7e7-41d3-ba8c-ee56792bedd9\"\n }, \n {\n - \ \"filename\": \"4-exasperating_microscope-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies/39818849-d051-4796-8a40-129212195891\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"uuid\": \"39818849-d051-4796-8a40-129212195891\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ + \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ + , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ + \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ + , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ + \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ + , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ + \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ + , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ + \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ + \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ + , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1967'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:17:07 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '4475' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 80bceb6d7..836368812 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -2,39 +2,63 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0NzYzOSwiaWF0IjoxNTUzMDE4ODM5fQ.eyJpZCI6MX0.zBrH3qVfk0ttGcMNVWYZMMOVARSQbuQMrIDUumzMXU4] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", - \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", - \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7/download\", - \n \"filename\": \"1-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/75ff4e45-891d-41a5-bc83-ad162c03dcb7\", - \n \"uuid\": \"75ff4e45-891d-41a5-bc83-ad162c03dcb7\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d/download\", - \n \"filename\": \"2-exasperating_microscope-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"submission_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions/c0a5a4b0-8889-41d0-9380-fedd608b7e7d\", - \n \"uuid\": \"c0a5a4b0-8889-41d0-9380-fedd608b7e7d\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['2051'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:07:19 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '3064' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index 2a16e6f92..fdeb198da 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -2,23 +2,36 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU2MDQ2OTgwMywiaWF0IjoxNTYwNDQxMDAzfQ.eyJpZCI6MX0.3iyw2GfggT1pOe-Offan7HKYo86L4JpmoTgaUuy9Sm0] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/user response: - body: {string: "{\n \"first_name\": null, \n \"is_admin\": true, \n \"last_login\"\ - : \"2019-06-13T15:50:03.679186Z\", \n \"last_name\": null, \n \"username\"\ - : \"journalist\", \n \"uuid\": \"e56c08ab-811d-4fdb-ad26-87da555b6858\"\n\ - }\n"} + body: + string: "{\n \"first_name\": \"\", \n \"is_admin\": true, \n \"last_login\"\ + : \"2020-08-31T19:06:57.032162Z\", \n \"last_name\": \"\", \n \"username\"\ + : \"journalist\", \n \"uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\n\ + }\n" headers: - Content-Length: ['196'] - Content-Type: [application/json] - Date: ['Thu, 13 Jun 2019 15:50:03 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '192' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index c40bc8360..33f0b9f2a 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -2,70 +2,146 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODI1NiwiaWF0IjoxNTUzMDE5NDU2fQ.eyJpZCI6MX0.HOWcVss7bM9KuFyqW5OmSX4G-pwH7P4KKWU_nqytS3E] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 0, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", - \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", - \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", - \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"exasperating microscope\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", - \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", - \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", - \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5214'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:17:36 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODI1NiwiaWF0IjoxNTUzMDE5NDU2fQ.eyJpZCI6MX0.HOWcVss7bM9KuFyqW5OmSX4G-pwH7P4KKWU_nqytS3E] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-seamed_betel-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"63904448-542f-4f17-94c3-61d2f1bd0999\", - \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"9d43a86f-51f8-4b11-9d93-c5f7d924b0cc\"\n }, \n {\n - \ \"filename\": \"4-seamed_betel-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"63904448-542f-4f17-94c3-61d2f1bd0999\", \n \"reply_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies/15114b75-e9eb-425d-8a80-1b0b42fa765b\", - \n \"size\": 1134, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"15114b75-e9eb-425d-8a80-1b0b42fa765b\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['983'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:17:36 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '1135' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index 39a1f1d2e..fcb08f2f9 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -2,102 +2,183 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"unabated dysphagia\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVyQBEACk8yFQ3aO3L/fQbmiDEVCaJK+2GzQMWbmYLsFQwS6JLRBP03no\\nL4XO13EvL2F/oC5StWO6QSxoK1k2/0ItqLvgN8IwL8XmiWID2FI3PBR7VyPLH3/r\\njQRLnSgUf/4phyV0aL8tv8sPksQZ4zLRW/DktwVGFbxlaIuP0pqI48PsKJI5TyD6\\na/yFRXAaO6KimzwyyfVoqkNI4v83gwZ07T6muCzKIctDnr2ygulSukWXA6qa9a62\\nSLlwVTviIA1hnufCpq/VFU1duPuq0mN8BfBkBKySnqGkVmEhUhxu6BNFrHEzA0m2\\nJWc+7owEO2RfxnRa32adu6lKQFMllc+7nOc0k+aHqDbEq1qyHT1RVHw+at3hlC9U\\nDxIPiRovWSATka6mAL1D/4rNNQQTsMLLRfO+x+sFoZKQUmyy2l2a2cmEjK0MImew\\nB6YMU96xjqIb+tTWv+B8IOPFoyasxcCVmDBlZ+BuZZDMndmV3PD/7sCRs+LPotUg\\n1fNgagTkBGekoHMMYF+A44nJcK76DLK4z0wWsdHLCFkYz4EhQ2oUYZ2jZwuYVykN\\nZbDc4C4KGmCk62vajfpSv2bPN9EechrsPvxtMD52YNC9vCawmOQMpQ8sy6/pWayR\\nwfJLh7SqZDifDYmdPDXtmTeFby3r9Ng0ujULOBOrM/WstnTVUlBajdhB4wARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VjRXRUZCSVBSV0hRN0RNTkJNU0haVUxHTUUz\\nMkFQREtRUFk1T0FVTTJWU1ZSSDdDU1lZUVVCNENSTjZZUktBVlFNNzJNNVJQUFFM\\nSDNYVVlKWFJCWFdISlhQNUlCWTdUWktSQ1pMST0+iQI/BBMBCgApBQJbzlckAhsv\\nBQkB4JgcBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQpfm40TT/9QFRtw//\\ncwtRPZyIhiB1EWd2WkQrLE9+SU8z8minE3CgshTcMIXl0jbSNOphIEz5bRhs7jj6\\nZQhp0aKIOo/yQ/DsKmhLoTR5dUXh6otMzu9K9yFUzE5+vvuhaqlyiuzHx+/B+ftI\\nrs8kTCRfQsr2ONMlNdi37hwOogjRmVlXayCdJCl7saBIPNxsJ9MmdG9q8e1l813B\\n9C7DljZW3zR7v+LwZw7JQ9ihK+Css7YmJvUeC0IfwRPd6AAx68yngMh/dMt+ETc2\\n1XC+9MPop0ctN1hVHR7wtvZhMVzDFPhAacpC/ItehBRD77H6Az+yKvl4aUG6cFob\\nZVVGnazp6D4Gl2X1qzZ1UbUNmiJ6xRMnpfjF0xMIfbH47oRNVK8b27ElDV3QLkG4\\n/PITG/qKOqWxmiDm+nUnAhCKnGhBaq2RXk8bX4qks1vSbEEbw+7yuOwPRY34POBm\\nl+K+LRbj0fth/73Mjrge4VQBoikvuz8io50rZn8YcrV5B6BP6heoZE/UkX1XUlsN\\nb0FcmjYhT68+FXd2QiKpZZO0p+wfmuuUBqx4vhiyOkB0ZidLGkFf9cJdMUkaAW0r\\n+c06BTU9cZX4YzWBb+uSHrsMb0t1AhtXLHFrZnL76r4P2/mKHCrAW/NfWLWctLOM\\nYfg2YitdC0AeutWLm/iEYFrksf7g2vZHHCPsTcV5YBw=\\n=YfiF\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:03:01.645115Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/remove_star\", - \n \"replies_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies\", - \n \"submissions_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/submissions\", - \n \"url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", - \n \"uuid\": \"562bc2f3-6c23-4168-8218-be8309463bd1\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"shadowy dogmatist\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOVycBEACuHkUzZb8yRB9K8Vi0rIvrdDjy8rC2tjUx0elJupxHF/FjVAsN\\na59Q/ijCYFBZdMhwbYdLmKur+1JmNhOUhEQ2hQQZamj4JO8U0SfAmv3TYJP/nooL\\nCxELC9a8yxDWFIvdaQZIcAW798qXfslg1N9W77tkQ9SEDBZgbNl0JfOBsVbNNi3g\\n0dU+gonddkCY+z8ZQ4ug+iGaz/yd+Oj+6IA6ib3PI0dvB1wgAkhBR7s2Z7HbsHTU\\nncoMIuWO2m6wG9WkPCQt1rjR04mJzRIL+RO1mtMQuAtPrs2dlHF8SQ411g82/jAN\\npv0sveDkX9Dio46EZOwkqR8ARFxjLiPs0zmAYuE90MvtOoLDcet7Y9cKjszlPHeW\\n5YGsYbszc5c0iRXvs0aWx7H1iLlgcCU/USEROCWGSCfzvcg66fGV/EQRpIHMCOJ1\\nHLYqcE0O6mhtFvCU7A4/kE6qNS/N19r1UbOLNwMq4aYhmb/l7K12n9/I+8KNtW1l\\n7wH9aicHW6N0lSiJ8riWIr87FybuOuvezRg3L9GFY/79sU50Ye8F9UiUo3KO3Div\\n9EZj2y19UKn+SzvFC5whHuHa+2vIGv09g4cgF/PQWn9CmqYFbSyonJFlYJmxbPtQ\\nK0hbYxFdldxMG4LBpTznwkKAXr0fHpfTuUT8FlEKiHSOAn1dYFlY2UrKcwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SDI1QVY0R1I0NTdKQzVNUllZU0VDUkFXM0xR\\nVldXUkRGSkhBV0ZUWFBXQUxDRkc1SzdHWE4yQUZDSlBIRlM0VkJWVUlBRkpEVDNC\\nMk5IWldJMlo1WUpDT0taUElWVDZOUTJNQkoyQT0+iQI/BBMBCgApBQJbzlcnAhsv\\nBQkB4JgZBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQLB1Rhd9uHmjDCA/+\\nOtahdf/WnsMjATKBA69UGFqa43RhW2dp3GpohkSL+iKUWNGjd54s/2HolpQZxUc6\\nKIkxP3iRNcVt8QExJYIvh7/Ucewqd9sZzh8rDKE40fJpBf/8REOTZpOdBKjRf5T4\\nAtegAEIp0cIRr3kdf3HHmeay0cNPjxZKm5DtP+ZPKSLNf5vov197mTM2gYZRypdb\\nJlWIICbUNHHL1ayvMwhBpGtNCzpnxXMOAHgfKM7RPLypwa3U1b0gCLrQakmIMUW9\\n6OBt/BKRRBQKk7SsJyjP2T46TUHHNpM4V3lWlwwqsHnjwv8xypt8KTb26BIoubVa\\nV1pwth8xMH9CR40a6nieNl0r+EtRrlaixgtB4q9nlT7X9ZHRdC6dzFc2TKgeedlW\\nevocx8Tk5vgjl3dqXUSVOTYaC3tsk+C6JTf0EjvaTZ8TXQqLB5V3GBKPLToayxPG\\nH+SPVpTraAE5bbBr0YMaHQlT1RyK8DLpbnGrYOawAyeCd2zUglfQaBF//gUmOlSi\\nXQyMHsqjlKslgtJJQ6Y54tBmh8i3RJhPTvaupb9jsKtq02eI4L1LJjjFuqbOI8Iv\\nBZreys1hdS7xD0YMVdAeDAjU1Svd8gUFhFApBRF5okuR+kV6NqdPHGC0liFm7TCy\\n+hzRmMeU+l4zTP9UFSctrxILnJtdrU7iMO4W9rqv/m8=\\n=OBU0\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T23:03:06.236936Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/remove_star\", - \n \"replies_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/replies\", - \n \"submissions_url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25/submissions\", - \n \"url\": \"/api/v1/sources/a90a1a64-3dec-4446-bf2c-d8405ee5de25\", - \n \"uuid\": \"a90a1a64-3dec-4446-bf2c-d8405ee5de25\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5238'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:03:12 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzoxMiBHTVQifX0.Dq_osA.GKwpYrZa6lpSNh5eezPTa1TGUJw; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies response: - body: {string: "{\n \"replies\": [\n {\n \"filename\": \"3-unabated_dysphagia-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_username\": - \"journalist\", \n \"journalist_uuid\": \"d51ee479-f494-4646-9216-ae6b114b13e9\", - \n \"reply_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", - \n \"uuid\": \"c6cb5121-3585-4587-99de-7c82a46cc74e\"\n }, \n {\n - \ \"filename\": \"4-unabated_dysphagia-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"d51ee479-f494-4646-9216-ae6b114b13e9\", \n \"reply_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/31c8f700-2636-44d4-b635-6e9b20932898\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", - \n \"uuid\": \"31c8f700-2636-44d4-b635-6e9b20932898\"\n }\n ]\n}\n"} + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ + \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ + , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['995'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:03:12 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzoxMiBHTVQifX0.Dq_osA.GKwpYrZa6lpSNh5eezPTa1TGUJw; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '1135' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba response: - body: {string: "{\n \"filename\": \"3-unabated_dysphagia-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\": - \"d51ee479-f494-4646-9216-ae6b114b13e9\", \n \"reply_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1/replies/c6cb5121-3585-4587-99de-7c82a46cc74e\", - \n \"size\": 1116, \n \"source_url\": \"/api/v1/sources/562bc2f3-6c23-4168-8218-be8309463bd1\", - \n \"uuid\": \"c6cb5121-3585-4587-99de-7c82a46cc74e\"\n}\n"} + body: + string: "{\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ + , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n}\n" headers: - Content-Length: ['445'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 23:03:12 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMTowMzoxMiBHTVQifX0.Dq_osA.GKwpYrZa6lpSNh5eezPTa1TGUJw; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '507' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 7491ecb44..38306b0f8 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -2,76 +2,149 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"encroaching thrombin\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUlsBEADJBD7CrWdSw0onvipUUR08oXYjnT8yOTLr5JegDvUEUD9G1780\\neZyCYpzDltMLulk7wi5XsS2S556HEBOfcu2cmoRnTxsawFCKx1a39JT3Ql5P8shP\\n4WKD4MRmwDUlrX8RfuzmbHS/mp4cEUQdEJGlLJyxUDrTaog9plbKBmnIArLB9HpY\\nKgYmsX/SrvJk87s2cK3sRhsEUlY5UNEh2MeWIlWjac0apuIQTPTEPyyI8hVu8nNs\\n9SkK7T/YQ0QKLbwl5axd/oEmXg71QbuZW0Xpds8Ce+wbveLwD51uuELweIYLfnKm\\nOJiQfpWiFXpJ1fLovXiD8seOYh3a7Ak9xels6r9CWawOdMLvy1BZAUOfIRdINRnK\\nE95lcvXY3Hl/876KTgwDErTDtkBWFPBCxwJDUVDZczCDdPB9yLm0A0/pngMuXjq5\\nP1uS5LoEQNMB1Gl6LT1TmuteITWpavKRce8iBY4kmf/YYuP1J5YWgXx7kcoMXteC\\nub6KvatKCj3FOrCzJc3EzwjKk73OZKy7Mgzkod0PHIoHp4vVu9ohQjdGT75laQ2a\\nuZSNjNrWmQ4vR8vncs0Sn3cVsABpSx19dsAR0gnJzi3h40F1BSrdB3/dW1QQqAgE\\nvHfuz28kjn4DJ26ZUFGA4EicVGluB52tPcnxxXylgRNlQzonPsaYhNomYwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QklGRFlER05ZV1BSRFhQNEtTRU9MNlhNQUdQ\\nWklBVVlUM1hWVDZKT1BCNFVGN1dRUFBUR0JCM0NVUlVaU0xNQUtENkJNNVE3SE1I\\nTFBWWFRCVkpURlVBRDVQNDZBRUJONFFCWFBBUT0+iQI/BBMBCgApBQJbzlJbAhsv\\nBQkB4JzlBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQvdhJSu7wPN0mqQ/9\\nEdHB2un0t0FnxVXJcEJ4Uxq9f9MadAKKyGxkLvIkrZsb5gOhHNoRaBXlxh+TKnvT\\nZKYzJ//iXZ5lsHc9cuVai4LkBn+bB81BoArQlwVOvLRED+PZ/j3EVkv8L8DGbTOa\\nM0VhhNL0MKVayUngsIySuVgCOEw7CaI3B+f0jI68FuyIk5bPxSLKSd7KZjINJfD3\\nNPGKS4jKUWCwbbhQ3Fu6jHvGmLKgTvHp/5+uVVaZGeVTzRVgqsr+n/fkqvV6q0GR\\nViXjIRey2GAGlox8/OktsbSTbXwUjlxUVeZvjvfYwEaQsuL0w+mije62w5oH3fG4\\nIjJvpKaaVojvOUVOJdWREHGlAoDNkVicNYBS9bXYnzA/kCshqIXYe5nT7vzBxlWk\\nfaPnb4DdPUYNiYH4EVCiPuM7L4rDgjxP+Q4TZ3InJv38Kz0ujGejlPGyfg+nZsUU\\nK7nh+CdGvrxnWEaz46VR7MIOMYG0BNvHH95nOWiCIFXAmSLywgi4ijHGxoF29jek\\nc/s5zPzUjAple9iGRS7NnQ2qlD3HyId5cWx4VTLqkaShaosnn9wlEeQXF1g1FByI\\n3UAL3IKiXjXwwb9X9q7cQaz+20/uLInFPNBTMOEHxBY4S/tbHN/SL2DsHcknyzBx\\nGtaq3CXwiabS4OcYLpfYZEPviTKHu+5Zx/QOVI5bdiM=\\n=bGv9\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:35.770457Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/remove_star\", - \n \"replies_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/replies\", - \n \"submissions_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/submissions\", - \n \"url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc\", - \n \"uuid\": \"a2c25dff-cecb-4194-95b8-8a1cae5c86fc\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"sound wallop\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUl0BEADG7IE7KeyE/qi4DTRgXs+gdrTRxp+XZdq7MqSTc46v2Nop2j2L\\nfYYZYXKZrp0E8LYzQwbG0YOGExj+euNxakdrVOYCS+G4GDeqmu5zOuePTCtkMXkJ\\nwV88RLwi9VJRHTdrlRLVqII5ivcJTGNg3bDzCneTHifGEBTe4EwvX4Xi++idKsoG\\nEjtjF0lilYEylWMbOjWY2vKxOMYlFER6QBH2goGD0BuAX89CR6n+Fhqcbsz3DfOz\\n2nZTXU4ljjuMHooDHFltIkHDEVxdubCFA2anjAMgxDcrBNyk+542tOMp0rFBLjwz\\nB7VIfuEQwvxGdP3lWb9aVeYYvGCEvwLAs+r/X0mIsQ898ez8GqFxTZygjCJpoyuv\\nd/apPH009z6E8it7C2L7tPxsTZR58fxpDeKha6dwekYP0Ei4omAawZ45eeYo6qo2\\nUA0ya4tN6IhlrMltoIXQND7zfzfYclvJCjCWtpL6P1CLkG2NUH+E/2yoMZskAqYw\\nkfrS4L0saLAPzCj3wOgSr/0XpuZSpk7n3IprziRoLCqH1E0YoP9M5N6t6nr0knzM\\nKgMp8cgcF9bkx8mjdH0ccwb7lGaVkGhIY2SQ3g+uzIFpBmMqwQHetO7cbM6XNEDO\\nDLiY4jQXHJ5CABjlXSnMBwqxLirO2aCCQOYXjwTyj9Hga2iuOFJoxv/0iQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TlJHUzRUT0JLVlQ3TUVNWUlOR0hKMzdUWU9G\\nUEFIWUZITEVMVFIzTEdDRzQ0SDNUMk1QRDdSVlIzWTJWTVRJRjMzNE1OWTQ2M1ZO\\nQUtJTjUyRENDUUw1V1NPTFk2RDVRNk9DM0dRWT0+iQI/BBMBCgApBQJbzlJdAhsv\\nBQkB4JzjBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ2q87hxHMEIkVBA/7\\nBrorMcHxVDBJ/naCqIV65nPHvuwEZTXJWH8f8eSRv81LZBp53I6BCx6eMFyBdm41\\nLMvl34iqa77zJnApduda+48mdV1Fei9wmDBbgS2khhRWuunSSHkvro9aALqXXeWO\\nJBpMkYM/htFnSe9Ckz6FzhM4FglacCRrR1POhEq2Dkx1V0aDM1F+36wOj/RteT8v\\nK0AeEZ98um8keuz3BPBKBJnM70jak+YZ7T8mlVJPZHKe418OGnGteFDc7YV/lPlZ\\nyniUk0lxC0SqeG2yeplG3IMpsiYZ6JlVk4bfC6n8R2ZDq/ho7JGTYor3SoWnHHbx\\nbX3WIeJKccpvUqgWa+te8NA6o698HF7v36flrHIFC6LIR7IBLNN8RuMqb1/pEECD\\nrgmgpoS1Q6E8O9Rfm7kpT6Hzbs2Oa7iICn3GVUP1u/Lul7qdGBl6crPIdxtYILd2\\nNJLXr/mpRLR904yfBsXwSnMEDow7PcIJPij+b3L3ikNOWyqpgB0Khl1zJGOFjpJ1\\nuVLbvLmv/4FlPNQCOHujfRYwNQ+q8AOuJCL1T3OGUaearI9b5Sdo9Cqe0hTsEo1+\\nTgWXABQjrgT7OlyumBEx6e8hzb+Vp16rQd+B9GSLip6kQZZ4rSBg++3zXpIjgyRA\\ntDCjQNoSrC2D3rc/fFOvpBPHp1lSC8nT4Zf0uk4DZnc=\\n=N2Ir\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:37.648791Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/remove_star\", - \n \"replies_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/replies\", - \n \"submissions_url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac/submissions\", - \n \"url\": \"/api/v1/sources/c27b0df9-02c7-4add-923f-1b3e73793bac\", - \n \"uuid\": \"c27b0df9-02c7-4add-923f-1b3e73793bac\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5235'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:42:48 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Mjo0OCBHTVQifX0.Dq_j6A.ZIXV7QFjwhUsqO1i4iEjYAy3CJE; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654 response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"encroaching thrombin\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUlsBEADJBD7CrWdSw0onvipUUR08oXYjnT8yOTLr5JegDvUEUD9G1780\\neZyCYpzDltMLulk7wi5XsS2S556HEBOfcu2cmoRnTxsawFCKx1a39JT3Ql5P8shP\\n4WKD4MRmwDUlrX8RfuzmbHS/mp4cEUQdEJGlLJyxUDrTaog9plbKBmnIArLB9HpY\\nKgYmsX/SrvJk87s2cK3sRhsEUlY5UNEh2MeWIlWjac0apuIQTPTEPyyI8hVu8nNs\\n9SkK7T/YQ0QKLbwl5axd/oEmXg71QbuZW0Xpds8Ce+wbveLwD51uuELweIYLfnKm\\nOJiQfpWiFXpJ1fLovXiD8seOYh3a7Ak9xels6r9CWawOdMLvy1BZAUOfIRdINRnK\\nE95lcvXY3Hl/876KTgwDErTDtkBWFPBCxwJDUVDZczCDdPB9yLm0A0/pngMuXjq5\\nP1uS5LoEQNMB1Gl6LT1TmuteITWpavKRce8iBY4kmf/YYuP1J5YWgXx7kcoMXteC\\nub6KvatKCj3FOrCzJc3EzwjKk73OZKy7Mgzkod0PHIoHp4vVu9ohQjdGT75laQ2a\\nuZSNjNrWmQ4vR8vncs0Sn3cVsABpSx19dsAR0gnJzi3h40F1BSrdB3/dW1QQqAgE\\nvHfuz28kjn4DJ26ZUFGA4EicVGluB52tPcnxxXylgRNlQzonPsaYhNomYwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8QklGRFlER05ZV1BSRFhQNEtTRU9MNlhNQUdQ\\nWklBVVlUM1hWVDZKT1BCNFVGN1dRUFBUR0JCM0NVUlVaU0xNQUtENkJNNVE3SE1I\\nTFBWWFRCVkpURlVBRDVQNDZBRUJONFFCWFBBUT0+iQI/BBMBCgApBQJbzlJbAhsv\\nBQkB4JzlBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQvdhJSu7wPN0mqQ/9\\nEdHB2un0t0FnxVXJcEJ4Uxq9f9MadAKKyGxkLvIkrZsb5gOhHNoRaBXlxh+TKnvT\\nZKYzJ//iXZ5lsHc9cuVai4LkBn+bB81BoArQlwVOvLRED+PZ/j3EVkv8L8DGbTOa\\nM0VhhNL0MKVayUngsIySuVgCOEw7CaI3B+f0jI68FuyIk5bPxSLKSd7KZjINJfD3\\nNPGKS4jKUWCwbbhQ3Fu6jHvGmLKgTvHp/5+uVVaZGeVTzRVgqsr+n/fkqvV6q0GR\\nViXjIRey2GAGlox8/OktsbSTbXwUjlxUVeZvjvfYwEaQsuL0w+mije62w5oH3fG4\\nIjJvpKaaVojvOUVOJdWREHGlAoDNkVicNYBS9bXYnzA/kCshqIXYe5nT7vzBxlWk\\nfaPnb4DdPUYNiYH4EVCiPuM7L4rDgjxP+Q4TZ3InJv38Kz0ujGejlPGyfg+nZsUU\\nK7nh+CdGvrxnWEaz46VR7MIOMYG0BNvHH95nOWiCIFXAmSLywgi4ijHGxoF29jek\\nc/s5zPzUjAple9iGRS7NnQ2qlD3HyId5cWx4VTLqkaShaosnn9wlEeQXF1g1FByI\\n3UAL3IKiXjXwwb9X9q7cQaz+20/uLInFPNBTMOEHxBY4S/tbHN/SL2DsHcknyzBx\\nGtaq3CXwiabS4OcYLpfYZEPviTKHu+5Zx/QOVI5bdiM=\\n=bGv9\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:35.770457Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/remove_star\", - \n \"replies_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/replies\", - \n \"submissions_url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc/submissions\", - \n \"url\": \"/api/v1/sources/a2c25dff-cecb-4194-95b8-8a1cae5c86fc\", \n - \ \"uuid\": \"a2c25dff-cecb-4194-95b8-8a1cae5c86fc\"\n}\n"} + body: + string: "{\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"four-lane downturn\", \n \"key\"\ + : {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\", \n\ + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n \"remove_star_url\"\ + : \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\", \n\ + \ \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n}\n" headers: - Content-Length: ['2533'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:42:48 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0Mjo0OCBHTVQifX0.Dq_j6A.ZIXV7QFjwhUsqO1i4iEjYAy3CJE; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '1514' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index 3c27ad902..ae27e352d 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -2,41 +2,101 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0ODMzMywiaWF0IjoxNTUzMDE5NTMzfQ.eyJpZCI6MX0.ddYrDcarObwI5eqbYKHslN1MGzpb1LVIfrLByLuZyfk] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"polycrystalline belch\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEAC5C3SwDH5xGvby2ByI8XBtzUtExsXWq4BJA8agVtjWtc5h8ChI\\nYLkJVv3yOdokpJhaOHPEI/FkoiTv9yGrcS7RGItCDYMWQelB9LhOWU/nNwJgWAKH\\nGdf0951TcTzf1FsfeXtmNhfZlpnoaPegdp6qHSEp7rL9AzbhiGmDEi5esN74NZST\\nSwYTMOgOfNOPOkByerdjVSxWkPFelI4GBzfRP7+bvqjguSrQQaTeW3buSZw5ZjuW\\nVnIt5F21Hn6hwspJJXAxqO9MjKkUjtQMz6R6bTnTC13KO8cdYINsLNXYl/VSde4C\\nQ4VKb00+FT3zyzBnF50Uf76eDJoohiJ7OWxzd2mN7nPdnKxwoGV2WlSO9x64YtZU\\nyHqGM3sb90Mhu9VvACBq/UNUNsTtriXbN9NETMJtMp4CNRuaDraK1nbDW4IF27yk\\nHpAap2kA9gx1MrxwaGpradBffUbfolZPagFvIfN4Z6CKJ8DZ/ykgGZm7K75Q+60b\\n0KrWBOviBYAI4j6/AsqCTEAz6X9W0oEMcWdL3wISLzLQgGd/cLXFvBHxUsAqsroW\\niBb5DdYs0gOoEY7zfBFNt1U1zNin1qCftfn8lf9+eOvCqjeXTqSKwzXg0+ffyauL\\nY49XqTrpkR4NKZxFfpkZ3BYjD91BGdijzZM6B6BJQxclXxFPrZECWAP+4QARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TlRIQkpDVklaWlFCV1lTREo3T1lCRTNWRTVT\\nNkhZSUVUVk1BWUFFM1hLVkJZRkc0UTdIWVdNS1NVTEJRMjQyR1hVV0xPTDVFS0dU\\nWFUzVlVJUUJPRjYzRDRZNEJFVUNRN1VMRkxGUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEMO0d7F1N2cEgdAP/AmVvya7+M4F\\ncU6YFpeBJshGQ1Zikpye+Qp/YoiDsuZuQfYk1SsI+bWATRz8Wp/Q1Z0U/w5DVyyJ\\nD3Bx/g4+0z0jzDFbZ3srqlNoUmA+JKUmARQAvGpRyCYuFat0Xi2P6dKeLlGXM5/c\\nD8l5Te0kSbHizCD12BOWNoyiB/Txjs9Py4R/rbCMGubhWxlPoqQ/+vbL4rYvnDXs\\ng/UW3PTVFMwG21PuG6vrcIhoJGsCISL3equgYFjdBA4Anl787ARr8mpc8oxZg0P8\\nJJe0Er4UfNh+fnQmyNouP7PqsQNB978Im3fGGchMhgpy7QNwGA5NPFmlL7J8HV9N\\nhix0J0cy70N/YXobfiISQvQ7oVDE06udPSiEJvP4VVdWr191nv525z0rubvdIOYR\\n22nZpu6qZXV/DmpACrCccjrzUc2S+CjKNp9FquxxcHGEZC88H5devLmOApnXwi+1\\npuTYgWuQfp56KXXrvOq5JfXa/z36bgiWhuzWE8ZeoPj4gKr6vnWVpgV1LjASRDs4\\n3+LI8GhEUThQvNgVX9LkzZCdYRMA6lmpJb0c2sjtR6ogSh1eRb+bVD/Xx+fnqBjG\\nv7FbysXda6Zf5M/44Xlqu4/V3CiMulkavaRZMIvOXUbZGQc4mRXDP09l7ACEPoOX\\nJJf1lMqec+QCExd+VWwGSs5rG2ixxNyZ\\n=sJFr\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:18:37.336005Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/remove_star\", - \n \"replies_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/replies\", - \n \"submissions_url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82/submissions\", - \n \"url\": \"/api/v1/sources/14738aa1-b256-4049-8f89-8c97e77d6b82\", - \n \"uuid\": \"14738aa1-b256-4049-8f89-8c97e77d6b82\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"unapproachable socialization\", - \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADZLdX2qxqfxtJ/tbuloGq9v3cnVWvn2+Aw4HIloWpdOr90Mf2u\\n7vFYHIlxWmzq2ECRnqeSYC5+mC1FAd41EiWQIS6ouWVdE2IKQqoflmiTW0w1ozPd\\n1PHcCpSGtm36/J3YjPNezuowh7cObI67QXloug/3hK1ds2/ZSPguu83koCWZfqWu\\naScBmG9vRTKSiJ5fARE8y9CYTWYQH7grX24Fh+++mJk3gjsvuMpa3eXsN28EHYhZ\\n6Ce7BXgYqgQKhJxwg4HyFJE60hnQUalibg19kOcGkpVPWjZ5WMBv17Lt4mE7Qc2E\\nhHYaBeyrZRVrkBt0n+V0CRhPtPAiwVGYQQ+8OC+xCSfReiMjcRe6BlQR+zLfmpIy\\nkNw/LkkI03onMQZKpt+qdn0brTROo8GD4R9tp5yvOOuMrx0wxQTvNKL3ccnqRE6M\\ntsxHFEvt6CXckYqcYnCePToMmFdKjYlRwjgaLMwoRe34CYdu3DGGnIzLCWoAT84S\\nGBZfg2pRevzwGwrZlC3bJX50j6wzSBN+czIlIsQU4ph7xwFn0FSndLqpPyI/H0tA\\nwM0aYcFUqauazWb2UacoBmPpwlfCgptxjMbVCF0MgTwMQF5FWvOis5mV3tgGKkWa\\now6D1xmwIjQptoTCH1O6d81vejA/WOuPqzlBe8IQfeEUnmEy1WqE9OsoLwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8WDNZWldTSllNSTJYWVRUSVNQQ1MzV0xCN0xM\\nS0NaWUxTNlhUV1g2QkdaQ01WSTZMTzdNWDc0NURaTkJWUlBGQ1A1VFVOWkQ3UVNQ\\nSklKUlBaUEtMVDI1V09BMjNZUDREM0xWN1RCUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEJpbTCl+0Do/UFcQAKwmzEWYVRv+\\n4YFZMVt4/1sqjVRrAh3Hs1PHlWnQLUklKK9/RrtGXDlnK+qkhcx/Ros2C2CCfHyB\\nOM6/hinZnvKdEtfn04Zp4ETTJJTd1rPvswEmWwpI6d7q16Ei+ySbCzvFU9L9AW7M\\nd6F83bF6c97VeMONoCmS0YZDvWtje7ehRBwH1psCkqm7wrCEH80taZMsHbMuaVbk\\nNdzscM8cqu1QU90FgLTTd1KEwQJcKIsZzw3gC/uRqBO5Czao6zJCKkQHgFKJ5UG8\\n+20OD2ZcgteMRqL0R/F4wCU6YhWwpMDo4Wv65FfCEUdmPcldLJ/OQLrm5qPHtcYb\\nGQjrk1l6mo4suRbIE4i4mBajyE/WNKGLflGB4+MQjhvGDgS7suWDr9ddFxi9hr+d\\nHS48zN8hL9ARlSMhxbNINmJBEdsHxjPJvIMHHA6eO2mRdyQfHZTmfprLY+92XyXN\\nWixUpqAGI2MnhXohd7Wyz3si9Cf2oi+rmOunWki/BJ2o6QAuG1soFkYOebvGzY+k\\nLtCL1nLt7EydlcWbBENbTkMJH0drdqO22D8U2vEzbLnVoZ84XBeWqypEcBxXXqqP\\n7VwLAcXbjMj9P35/mJUs7N8cngUPb9tTHeBOybqsay7NMpv97wYdgEFYkFaKXPeB\\n/usPcLR/AMOZLM9VSJbuf00sY7S5/L9p\\n=KNNT\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:18:39.659948Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/remove_star\", - \n \"replies_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/replies\", - \n \"submissions_url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23/submissions\", - \n \"url\": \"/api/v1/sources/6152a42d-fb5e-40d4-a94d-9eea7caf4f23\", - \n \"uuid\": \"6152a42d-fb5e-40d4-a94d-9eea7caf4f23\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5228'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:18:53 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index 24993f6f8..7f5cf786e 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -2,119 +2,189 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a/download\", - \n \"filename\": \"1-saurian_parley-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", - \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a\", - \n \"uuid\": \"52f8cd06-9930-4df3-91be-d85ce7ad150a\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164/download\", - \n \"filename\": \"2-saurian_parley-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", - \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164\", - \n \"uuid\": \"16c4b949-ce72-4630-afe1-3edc6fb9a164\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/59d06a2b-a175-4d46-94c8-1c4d928c115b/download\", - \n \"filename\": \"1-archival_advancement-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600\", - \n \"submission_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/59d06a2b-a175-4d46-94c8-1c4d928c115b\", - \n \"uuid\": \"59d06a2b-a175-4d46-94c8-1c4d928c115b\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/1cf8dd19-a9bc-487f-9505-355daea34e85/download\", - \n \"filename\": \"2-archival_advancement-msg.gpg\", \n \"is_read\": - false, \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600\", - \n \"submission_url\": \"/api/v1/sources/64d64bd4-3b84-4b13-b80b-bfe550e92600/submissions/1cf8dd19-a9bc-487f-9505-355daea34e85\", - \n \"uuid\": \"1cf8dd19-a9bc-487f-9505-355daea34e85\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ + , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ + , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ + , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ + , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ + , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ + , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ + , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ + is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ + , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['2049'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '3064' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114 + uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab response: - body: {string: "{\n \"add_star_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"saurian parley\", \n \"key\": {\n - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEACybFLV8+B4SkE/Ier8Zw/FTUa0QHpRAXzQfZYJQ7AIe9nmvwmL\\nha8yvLH/2TVu9h9vqMqVDdSOGq7AyqzZJUSvO9g3YJD+reMXzrHCQynlBp1ljFyZ\\nDcfH2WXG0GougWuxcC5FRixUb55t3Oi3jUecQyBa8sTp5GvuFZ5TTpzmXBJn8oa8\\nwXJlZFkg99fkSvhGCjG7rR80PNB2NaAKFI2yXxCNsrpMktzbKF/683LJxiPWRmqS\\nSeJHKynwyE8TXdUTkdvp18NR2VV+rXyAoQJZBcer1e96SSyNrnNuXnznOuHyc0Tz\\nxLEgLECeu7bt8tKRPzn+2e+EqDRceeK67p+annHMDSsIegVeQllR9cDD7MoRduOM\\nT9hWUldcajjpDA0exap+p8vXzxhbdRxZREgqCl1eMxmvT5ggv3xErcw3xJqMpYl2\\npx2ZVZnlwbgXS757qhhS8CPukBIQVsh/jeA9UHyI1IwsKExzy7Yyam6/gimkDlE+\\ntgS6z5axEGc3nI1MPP0IUm4ifHKixEGClGAE3TZvLex+tcXDHmzB2LKUaHUGEIZV\\nNGnH6o2kxqxwCgMCTmA1HlGLUqCLOq+8XQ8QZXRmvkUL6C8C0JJB9x+7yBw996g0\\nSOaibc1tfGJz+0tus7lklt8cwVpPwWc9Rj1J0KRgPoSTeriToKChYmf0iwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFlTNDY3SFdOQjdRUkhHWTROS1g1Mk4ySkE2\\nN1hWV0JNR0tZU0tDRTZVTURKUUhQT0ZBTE1MUExORjM0SUNWSFpEVVAzV0MzRTVa\\nNlNOVk5TRVpRNllYWTRKNUpIVU42UVdYQTdOUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDGBnpwhwH88AlYQAJWQm6EE1NCr\\ndOM1grKGsPZx7ELb/6+4lQRlO2mEQfy9ngOMmJygQXdULGfY53f1QohBsEV2dvCQ\\niVlVNA42CF7TcEQW9qXR8hZbMF/WWxsGHjm/Andvb5NA4NYdd4WoVQs38ws/VV0z\\nggGsM6o99/9HamhQjXUZNcXhj1INf7jG7I/mFECV/ZUWs5Q6ChfONnw65Tg6CBoL\\nmieTK8snhepq0pmBABtsiN5MPn3XfcWBZXB5Lm4429IBHVRBNTt4L/g/3n+iQ9j/\\nPE/40GRBSOvoTlfxrnskA3TYaSodxz4yX1qlYTGPhL/tIRzJHTRZYF60+DKsgitH\\nI5wanH5KA11ZjuhfL025Uvi2uBBEwWRQaY67Hj8qg8ptxfw9CDznssnh2Fx6cOX8\\n+AlELuJ0avubvKc9m7hpWfrrlWSBltVDs9ZDOdA9ZGg2Jdo8MIky/nYevVOUZQ7X\\nJ/02VJx0b6gSTtMxsXoYi7YoU61qmV1UYJFyebhSC1NRtGyiHhdRT/oizKFNmAUE\\n1lokWTxMqV8Nyc+DqdCfMLKYXrqJodJdBSPFbVOI4q7M3Pvh3m2mzp76uXCl1pRg\\nGyRqYDRTlpmRz2AGm7xSpVFNnRCqUwCXEpQTudwkPv+eEx4nseNDNHYdSd36Teva\\nKBVvCg5ykdCYpaeSSVRWwXVdxJK74MmM\\n=7Ki5\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:53:26.366059Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/remove_star\", - \n \"replies_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/replies\", - \n \"submissions_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions\", - \n \"url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", \n - \ \"uuid\": \"92ce92a4-81aa-4a68-8d9f-4636e0d00114\"\n}\n"} + body: + string: "{\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"uplifted waste\", \n \"key\":\ + \ {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\", \n\ + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ + : \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\", \n\ + \ \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n}\n" headers: - Content-Length: ['2515'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '1511' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions + uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a/download\", - \n \"filename\": \"1-saurian_parley-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", - \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a\", - \n \"uuid\": \"52f8cd06-9930-4df3-91be-d85ce7ad150a\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164/download\", - \n \"filename\": \"2-saurian_parley-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", - \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/16c4b949-ce72-4630-afe1-3edc6fb9a164\", - \n \"uuid\": \"16c4b949-ce72-4630-afe1-3edc6fb9a164\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : true, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ + , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ + : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ + , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['1031'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '1030' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA1MDU5MCwiaWF0IjoxNTUzMDIxNzkwfQ.eyJpZCI6MX0.16UNxpkI4yOEI6Jqsz3hrmjhgqSiw61xAENb654nRX0] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a + uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a response: - body: {string: "{\n \"download_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a/download\", - \n \"filename\": \"1-saurian_parley-msg.gpg\", \n \"is_read\": false, \n - \ \"size\": 604, \n \"source_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114\", - \n \"submission_url\": \"/api/v1/sources/92ce92a4-81aa-4a68-8d9f-4636e0d00114/submissions/52f8cd06-9930-4df3-91be-d85ce7ad150a\", - \n \"uuid\": \"52f8cd06-9930-4df3-91be-d85ce7ad150a\"\n}\n"} + body: + string: "{\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ + , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\": true, \n\ + \ \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ + , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n}\n" headers: - Content-Length: ['465'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:56:30 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '464' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index 88d89f6e6..45c61b621 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -2,69 +2,133 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0NzYxMywiaWF0IjoxNTUzMDE4ODEzfQ.eyJpZCI6MX0.S1gNx3iwOmQgjjY7Pqhmkpbk3JCszng0eu31LbMOQhM] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"seamed betel\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADb9T/kz6wfGMdHgRyl0VqXmolVe2ll6m2ULXQMJ0F75OmgEMqX\\nQS7JF/GoyPUWfAr3KW5t1f909w29GKfOHcel48pTXwIjpBeYXkwgV/wQQ7l8jj1g\\nII/jv0EP5a8/DiP5tRjQ8/mO0wSdzZU9nWEdohvkHwvTuxjpUtiN8/qqo8cQU1uf\\n78Psnsb3SEP5J5debt/TfEaTg7YdEnTUo50WMVksp6tVyl4vsE7Pi/Rt46+Ww/Cx\\nGfVjI8YxZR7/CGft6IW6pJIIymwnaVotFOd0gZGoj+kvA3D31uHO+2JYpA2G8oQj\\n6Url/60zSh6IjBy5suV+ioP6LnjOlvi2KQjtHwzckxxIsv/CzJvcPUK4j4k8Jwuv\\nmyT6s7BFteY8dqyGbwaF75zh2OFno7YtHKtw+ktWG/zRUKHL31ztA+dukMOfNj1y\\nkUoNQjUz5yUKhhxCM7mS+8AGv6qWH9wRcewpqxG97YxBWGVtSs742sGShrzrLuP4\\nUtrmSd95CSxLe5RXbSbqWpBZ0Bm6fcTv1gw6R1exfQyIbdOS/lfC+HnnsWBRFgX9\\nKjQ3d253wDTe5X30FYRGvuxE2zyAczOuki4ZFYszViwGWH81xvjv8Iv/ypwgsua+\\nRc1SPIpC4EI38+N4hclbprv92x6CS+xlDGl12XK6kWE2v9ZqW95xX4sCzwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8SFRERFo2UElZTEU3U0RGWVRDN1FQM1BNTklB\\nVEI1WFRFUExOUVFMTEpKV05QQ0lZV1paUlE3R05KWTJPRzVCTEFXMlo1NExQVkdO\\nNVNaWFdURkVXSExFS0pIVEZKSUpMNk9BUFlWUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEtk3eaziePUQ1cQAMg52/7/qN9t\\nkD7Qdb2X1Bpz+ZSHpWqqPpLWCWXwanZALFXommqTOxDHrsZahwaO4YkW1HsNzC9K\\nwdzhKeQfmtE8NBY53nKzdeLJ5HDFq9daa2CDzIwjiCWG7RC9cMYGxuI9RzvMPMxt\\nusHmR2HV+SCipMp+3mAyUaStkqWyeDHZBqPSw2zFy+sJ4t418yl4pf64eu1zKB7x\\nhpyMnoiSx0wYqwLlfSipDdk4+13eVjJgiIjPxmJYfkMRFEAZVVOPUXsNHUSV83OT\\nybnX4nE9+JlwQFrqgg8uLNyEJh+10WYO37Dt4gKy5iR2rJ316ANxe+g41Lxwz+VA\\nDgrJl/OpfhMqf3epwerzPnhqfpn6NgasyNdx+iHr/Z45jLSdGos89mJ3QJwcbjSi\\nwlDSNnMLtFmuxb1wtx9uaIcCIsIbqGAuaMiq7QDHdktp37cqfdCdS2RTGwqibz0V\\n/cWmHuF1r5jwUPUEGpXCaP6eI4J2zBG11BB7xLKwJmIPbrQuDScCinxmpQVN+BIy\\nSG9j4sd1z2CXKr3dyf++tyPol4+QTweTbpSxE+tOeokI3g9Pv/UqBc/lvmAqPJUR\\nvaq8HKGwHWe03mf6bH5CoXb76QlWVB7SbLju0Zct7B2Tt9+pDea5aivqMQJ78VPu\\nS4uu4UfPHvQU+V2sVvOsT127PyhysBvM\\n=n7gc\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:56.323543Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/remove_star\", - \n \"replies_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/replies\", - \n \"submissions_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions\", - \n \"url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"uuid\": \"56208324-861b-4d2b-ac4e-555d516f24ce\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"exasperating microscope\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADKFFsV9PHRYbM9Dk4sDphjk/g8GEJky4kUzZwsD/Z/8DMRYJZw\\nJlkevyBDw5pZr/NhLtGOf085jSwG6O6nr7QTuJOI7Szh2Ib0r30jJwfL1LdWj/6N\\nf4iXVHzk817NSd//c2V7Qu59opHrxIUntfgiIEjj29EgpnoWWuJ4pe4gvfz/WS2G\\nKPPzFVm9CfZ8xc4YBl2l+rP1AIL+LdIWzcTq+/Y7f7nMdOsKYgaHnmjqZ1EIu0R9\\nR40hBDiqTpeoDhn7mwVG2N2Z+hxqHLxstr2m+o66p6xbo5yeWn/rQATueyd0lt/+\\nD/szhl78657zIYuVFMflQibbMz8hPubFVqEv2tiAp9Ul1sZfUPYr0bBjAXzMYllP\\nZDflpJF5AlDTNOr20zsAHUW8fYnm/YiPvM5Gjz9QfRTpa9C6yHceqk75Cr0AKB+q\\nhIQrt7B/J9EMOdkRyERZBewu4DcUHP+pRES+2at1C6d6Qunp6QQPcfILfJS6Bp3H\\nY4tbNl7neqhPQu/GsDD1CDoOiclOgLHUBnDH9ef80jGoCffO3qQDzckQ8S0xrORs\\nxaa6YSsj2u8XL7QbDe0WUFrypUE0Y/4kETw27qtH5xBISHcJbO5tLDllEHCJxAvX\\nNyIv6YvcpNXCh/F2dLP2x1vRt2xayLD5Xd+T/xtCaMdMWJiYu1Qj65uIMQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1lLRVdSNERKQ1EyTTRYWE5LNjMyNVAzU1pU\\nUkxQM1BBR09ZR01MWVBYTDdIWVpPVTRYRkFMSlFKNzJTQlJaTllRUE5CR0dJNlJX\\nVFdGUlhHS1hUUUtCN0VKNEE1UUI0MlpBUDNEST0+iQI3BBMBCgAhBQJRkX6AAhsv\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEFOrutu9FeYMFFEP/22xHEk1Z4jB\\nXxSE7p8hWLaqJgD2BaSOBvqKU5hba91E/RvpTsGjbpmCaHlfLGL8haUQpSFxTW7o\\nR7kiVFdZYjuRCOoOITuH0P2vtVC0VE4/uE3MWF5UWgXeVp5SQz67kgtn9MBV4ZYK\\n1P6cRfZgHfLUsFtEP/U2Z6DjGe580GR9SivCbU2XC3rvcURjZqdvFkT7ABIgjME7\\n4ee0XCFs7oYnzXKZcY9ADrBTTt0d1c9FobavKKJwYs76ZF71WmkfcVEgTaT2DBg+\\nbpAz/3zSX6xSMFUu/VIQ7+iQYstTx/Un9VmV9BnnqwbMeennmQDpc9xC+80kvawD\\nsybSVogVMyjpCweCLYXiP/I1XDu2J3WZIQ1p701fgBvRp4SsPwXWJtE5j2DTQDq6\\noIh9bssdHu8hw0BHXkdprjHRij5Uek8evjbzz9gflat6Vlk2deq7KovFN6nR7xTE\\ngt2XBSoluUlVINN5ozgw/Il5tqDaZDv32hzU7wUmBeQPHvyrm6i9IhiOOTgQr7Wi\\n3DBrUpdXZZNxiKMEoLdAw7VJVXuvCEXELtQBfCoIbuGW7jdWeA+k8C9pxCrOG6O8\\ndNDP33U21/+N9XyMHBCF4TMiLJhhrcvV8/LtJ1t0id3oRm54iwuKel6KL0NQoIE4\\n5tICW7cN9qFg3719pl+SE+t2MqXqoaWO\\n=E8/J\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2019-03-19T18:04:58.189782Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/remove_star\", - \n \"replies_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/replies\", - \n \"submissions_url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86/submissions\", - \n \"url\": \"/api/v1/sources/0755725e-5f7e-436a-be9e-8ac400953b86\", - \n \"uuid\": \"0755725e-5f7e-436a-be9e-8ac400953b86\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5214'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:06:53 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1MzA0NzYxMywiaWF0IjoxNTUzMDE4ODEzfQ.eyJpZCI6MX0.S1gNx3iwOmQgjjY7Pqhmkpbk3JCszng0eu31LbMOQhM] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions response: - body: {string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3/download\", - \n \"filename\": \"1-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/ae7e372b-21e5-4709-bb60-82ce5c6e13e3\", - \n \"uuid\": \"ae7e372b-21e5-4709-bb60-82ce5c6e13e3\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80/download\", - \n \"filename\": \"2-seamed_betel-msg.gpg\", \n \"is_read\": false, - \n \"size\": 604, \n \"source_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce\", - \n \"submission_url\": \"/api/v1/sources/56208324-861b-4d2b-ac4e-555d516f24ce/submissions/f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\", - \n \"uuid\": \"f36c2b09-cbc3-4e14-aad3-a8b2c7d5fb80\"\n }\n ]\n}\n"} + body: + string: "{\n \"submissions\": []\n}\n" headers: - Content-Length: ['1027'] - Content-Type: [application/json] - Date: ['Tue, 19 Mar 2019 18:06:53 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '24' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index 007cfa0b7..bf7786fef 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -2,68 +2,135 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"listed discharge\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUw4BEADXCkiULPPQSCYHTT87jL87VI2PY5GKeJYt5dErdbmLHQcp+Uv9\\nf9m41YQyw7t5RuQrXabrzlJunx2msGQiqoyorMsZEYKj6wGwcsohGnN6XTo3i19X\\nQGEkt3JHOrH+0wkO63kWstmSEb03bPFcVRZOwJW2FvixEB5kxeV/7/eFnNE2TZeG\\nfV5pOoJXe8yNJkw87Lv5a+nxDx3KZC48Y1jrQNoUwE8pv5bTLtpCJmIB9T/tQhL8\\ntnwV0M+FPzOhUAtRBNvoOcVXs4KlIZF+Gamqae4J1I8/hj9dd5qCBC6JMVQTiFJA\\n+dktwA6LDptLnyjTIRLrZb5G1aV8HEuDnimUIeC+Kxek/O3NUtmnk/edsMr5J0Vi\\nuGph/L1e6BgJl7nlCKDyOr0a3pCdpzboHglc//PLpmRUDwXr17v6UnizcYwlVFqg\\n+wbGm/mh/abABty/Skwf0E0nUQT67D2Px6CO+I7UbyqqQS4X9ellmy+1OFSvHgJN\\nlfa5MCH8+Ct/Hp+nVgoc8TibQClztrKFPS6hkwgjNUsJOKHPAzfKaRPNp9SPCdEx\\nH5O7H4FrogYqRyqW7xiSdKBzNunH1e+Xk4hu001DgtnjKRkZhJgOJ3dwWMrfH6v0\\nsqcKDLWfOeKRf5TbSz1K2er6/KSqH3v5tXlykqBC9kaRFUB7JTEhShK1GQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VkxJQllPT0JVTDVWVERBSkFWWkJMSjYyQjZI\\nMlY1UTRVTUM1NUI2WFlUSVNSM0pEWlVIUFRYWFo1UFVKRzdWSFBQVFZBRERWS0JO\\nTEtPTU1CVVNMWDZUTlJQTUw2SVk1M0NKN1BXQT0+iQI/BBMBCgApBQJbzlMOAhsv\\nBQkB4JwyBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQY4c40rWx3BwJjg//\\nUj1F65v29lEgbnUL5wUfKTAP1QSe8IX77E+tgdZcWxS+hE9V5Of3cm1xe6ykQGZH\\n4+NK5fd4bGM6pEw4kNTFLiqs7gBM3Ckm9LzTkoC621zNkzbbZ0GpVpa64N3JFLM8\\nQgCakaI7rkM1oPKduvSbGhE10Mh/Ez3fuByej/PUutDqD9EKg3kbFzWaWVkEwJDl\\n4mM2tABAVdLLJIVsMonmZAzlmatzlJXHB1RYbhtb8Kn/6bVivOcPen3f2gVy4PiO\\ns6aVUFYTI2VqgNfpMGcBhlDoRGFv2TH2/4R7sDwsKfJ5eTum9CvvXXM6Y39EEv9K\\nFNJBI2afijtH+CMUpBCw/CrsxD8OSA/YIhu1XjTa3o60Q19V4duzRJyPSq64h1ly\\nH4/FMtH8mMqHpoRFuJRt8fqJ0xjl3OOQBpstqrgfNoRdeALeFR4CxzPyJEiX1frI\\nNfCoa3iYlOqCtkriiLOqZUs+iRT2SsnDu2DnwP9L0eEmCfn7xmRAUWj6o+cLRTAB\\nnyY91NhyGYEsL89YgAGPo3dThdOgWHyoZ0NigrrxBDZP582YdAgAjdvTIZoXUhLK\\nSNpQCSmizL/7s/errNGu+bx5dPt0RkjEHVNbTcatz8rdbqTMVfMWYcx/n3o2SMi4\\nFAYEMfb3aoUIlh32gVDcnWctPicat2NYmF846+cWKS4=\\n=khYV\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:45:35.806763Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/remove_star\", - \n \"replies_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/replies\", - \n \"submissions_url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c/submissions\", - \n \"url\": \"/api/v1/sources/e1f8baab-2a97-4590-8295-06f08d43731c\", - \n \"uuid\": \"e1f8baab-2a97-4590-8295-06f08d43731c\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"green melancholy\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUxEBEAC3j9Jp7NlagBl+F3MQzrVWNHr4FULlu56E1zOPyz2lHG04JdoC\\n0T2tDTc5yDGb2uoCXfmf4YdIdTufqeAQLshPLtASwI/Ut3snztMYmPM1R7NFai+L\\n9eZCG68/wWePUuSbxx4hT1gfuUBwVdOUx/FMz6IdbLH8sKwbYH/WPozJQwnpc3Jt\\ntRWAut63QjC7/qgAdq4xZCN4p/kUEG9cpK3l2FD8VOVKCjY2nsMh/5tYGSMnll8Y\\nKX2ljSn6r2Jf8oe++3BX5OKqXMSA1yA7e3pNxSOFakrcgke3Vgc3GKwp1YmmPozf\\nrVy2TanHVOWrWAqF7sTtWV3XkJikJ+mgUOIZCOza6pDXPG4QWf5aKE/WIkI3ubFv\\nLDJEWj44r6bgbRNRGqSmolQE0GYvCGN+KzxhmIKqfKogWJ3/EIpFBBvNLnYERP9z\\nwE6n/WuQQ+hS0JlkveRhSc/UbCDt5vfPuyxnTvDsY/VZNW7VtDeGBFpzU5dU/GVF\\n7TFZJhMx4xTXxenQpN4KIC/tmI2aqq8wFVc8lBhqpHrDVkFdTaNM/Di3JreDjQov\\nTmzGpE4O4aPHmwBPTW6/0E0TW0lCVrzMv2mNbizyeZrO2l9laURhjhjfEcg9d3SF\\ngd7i3d6qbkdKoCftZ0VZjwkuDPOMIoFWekv9pSg16ywokd+Ty4BOO5/PYQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TlBIWUlNSEFQVERDNEdFNFBCVTdKS1dSV0ZP\\nWVk3SERFSDJVNEk2MkpEQjJZSUxEWDdNNko3WDM0UlVXSkpUUENTTjI3UjRGSTNZ\\nWkwzNUJLSzc1RUNVNjUyTVc1NzNGWkVPVkJNST0+iQI/BBMBCgApBQJbzlMRAhsv\\nBQkB4JwvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQklSQKhNOKvsW2A//\\ndHcw7rTMhTlV/LUGoVyoXCdKuniRu/LMqU2RP5GCVOX9C2xGb47eICJMNh9LgjP+\\nwFrfvZWA//n2qrPoy/fW7lm3M7CjEWUGABoi54/iFWRSpUZFSkRuFJYq0BAXG28Q\\nfigBbnCgxw+ImuH0OfYVz2RBqlRyUh82htzS/Gu5QOhNaSUGz6bd4fZUqCrHJcrw\\nnlW5INdT4CDFUMkNHsn1G8DSKl+xf5eHv4flInYEpE/jkxKgH7k8692aVZwxHjEn\\n1mB9IEpPktz8L1GFIZQbX28k/fpk+647w5zdF721sMpaFXD8ju4lBSw0gUbNJk/c\\nrfZUFb9BuQYLgx6YRWrwTI5ev2PwNLhTMhwvJvV+SJ+TGUzlMDXup2sVFikvAHfK\\nvyselV1vV6FpdimaGQ8d2qG4FDDGJ+BB7hc26H2rRLmzmi1S6gWcmFXI4DJ038I8\\nnVlvsUtD2Iyqk5ObboGgGXxVgiIFDvN1FoX1RHk3p/xd1dXBm6Gg9CPbHFSdQ6Du\\n40FlHPBjthd2m6brFji1JwBi/KusSDuJqDzxgPULL6EGxwdCCNWWOqD+iWYSKxpl\\n/oJCd77ph+bBrfNwOMiZ9kIdzOHFmQjnomHGMX5xVJLjYx+zvXWZpVJ/Mk2KuJ/L\\n+jiwGWkUP1qgZpWSX5CrU5I2GaUqL+TKVApKhA7LgKk=\\n=5blK\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:45:38.020061Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/remove_star\", - \n \"replies_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/replies\", - \n \"submissions_url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10/submissions\", - \n \"url\": \"/api/v1/sources/4aa5efbc-7793-46bb-b5f5-85ab66f40b10\", - \n \"uuid\": \"4aa5efbc-7793-46bb-b5f5-85ab66f40b10\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5235'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:46:22 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NjoyMSBHTVQifX0.Dq_kvg.nj6Bk6SAiKWrtzV-KKT3ieUHxH4; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources/rofl-missing/submissions response: - body: {string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested - URL was not found on the server. If you entered the URL manually please check - your spelling and try again.\"\n}\n"} + body: + string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL\ + \ was not found on the server. If you entered the URL manually please check\ + \ your spelling and try again.\"\n}\n" headers: - Content-Length: ['166'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:46:22 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0NjoyMiBHTVQifX0.Dq_kvg.O3TdpgxMzRQ74hSdEl29o7bHWW4; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 404, message: NOT FOUND} + Content-Length: + - '165' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 404 + message: NOT FOUND version: 1 diff --git a/data/test-logout.yml b/data/test-logout.yml index e225fc487..a01992f41 100644 --- a/data/test-logout.yml +++ b/data/test-logout.yml @@ -2,21 +2,35 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU1OTg1NjEzNiwiaWF0IjoxNTU5ODI3MzM2fQ.eyJpZCI6MX0.UlITSFSmIoMtloqyUzMJ0KplL_x5l8I_zJL-ROMpSIM] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: POST uri: http://127.0.0.1:8081/api/v1/logout response: - body: {string: "{\n \"message\": \"Your token has been revoked.\"\n}\n"} + body: + string: "{\n \"message\": \"Your token has been revoked.\"\n}\n" headers: - Content-Length: ['48'] - Content-Type: [application/json] - Date: ['Thu, 06 Jun 2019 13:22:16 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.12] - status: {code: 200, message: OK} + Content-Length: + - '48' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:07:00 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index e45b2bc5f..f656bbf84 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -2,93 +2,138 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/add_star\"\ - , \n \"interaction_count\": 5, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"amendable\ - \ oxalate\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFGRfoABEADCT3t+bjtqkXjPdwR9uij7LFmenP1rl4nKNXaVBUTuB9AaDC20\\\ - nK8clNbYM2rXqxk48u1ofIlIy10fK94GY1nIN2OUk9++XZsgwpRfsGOg5dK94cf3G\\nlMNisP+fK+9kR32BPOIOJ9A1gye4/JjVon1JM0XOskC3FvWztS+Pd421nSFuKCHp\\\ - nmtFij1Oi1wrk90Pm8pC2gjkEIi/x4iudJQbtYJ6d2MjdfiA/5OX3U6rWedAa8E5e\\nGlMkVCee3DSjRhvK/lbe/TQgCyeM45G6pgLJupOo1aetVzPTUosLYpzHl9RZpguL\\\ - n2/y168odljHzy3DGJftDwEstx/8kWRYkjUYqyaSfkmJp/f2f70mAzoL3ml1sLXvw\\nA1wEiSSaczDkXL62MRyTpoGVTffDZ2NBN8JLK/SQ8C3UvGq7x0a89TcZ6aqfVyU1\\\ - ntLWMWKmdqvLEU926PsoxLzhGEahdNYRRbFtW4FQKAO97NTTlCL//j4wTXWBLpyD8\\nLBEb6j4l1IvOFG9q3uop9IZhuf8E0n3jafp5FBPC05/i6Wi12rs7gzJIZxcRx+ve\\\ - nWmB/B8xKaiiQxfdMswDQRmvUNIkoMaXPhoznP4L8IWYGthsseFK+rY/RB1o/fwOw\\nnDjvpt/P4L/+M8wtbtmc56nj5GQWOfxgwmaBXVfu0wxrFcYRxSt37nxQiwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T0ZQTVRVSVU1TVZQUDVESFFRVVJWTVBLTkpL\\nNlFZU0s0SUxQTkhNQVRLUFpNQlNBT0E1Tks0VlpPUTMzWE5WNjdLSzdZWlJMQVpX\\\ - nU0RDT1FFS1NQTjY3UFkzSExOUkZVWVhVMjNRWT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQMtLAlDosbglOnA//Y8i65QvX\\\ - n8SDmi+qVDC1lOjDcXTQMSgeSTDW+0XBwJMaQ6rIFaN6NBIudoTwGLYbrgDBmy0CA\\n9qHSIEreng2Hz/EgOPdUMpz0HViDn1EJxvckBBwVKZY684NHMf8f2XVPSvoZj8sA\\\ - nZyi0TpZbVJWGwZPMfTxVNuNuJFuvpUyX769FFiP32Vooxy5wXwvq1Npd0mMRtsMt\\nrnxxOmrzzoq4/nirJg0L0aPHog0ta63t6L5z8OgbtzZs1Su70UtHc+0sxd84xuXV\\\ - nJ8zIGC1iOqum68HzRc7j5JvpkynZJNgy3k2bxuG/OtNuI0CRsY+Pci5WY/Oz0qvk\\nhiF9pKa1uQglbATUi6t9pBTEJCuu2dS6vYHtm+k/FbIoJ7nVrRrgvI+nUqu+aMh9\\\ - ngamKZBdHcVrVccWsxn7nvBFU4heoQVovQ0JuFfxlGAmhIY3gs47ZG7CV9wDrRkrI\\n+RR+MwFq46I1dO8PdY7mEMstpsLhSbE+m2cHy2j3CkQd6hCRwLnIIHy7t8tKZZW6\\\ - nF074MPc0SiFeur1LmO4egL6PzIMYAaaDoWRAzXRb2Kdz50f5qjdvRkTg9Z47vrrC\\n5MiTOSR88XLr25P4Ei6oVwnTDDz9DhFuBhCG+er42T/1VC4udUYqv2cOp8k69Da4\\\ - nbWnUkSalxPHNH5H+PS7R3SJGFhLtgaInKL0=\\n=eEar\\n-----END PGP PUBLIC KEY BLOCK-----\\\ - n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:39.545978Z\"\ + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/submissions\"\ - , \n \"url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\ - , \n \"uuid\": \"6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"unpopular\ - \ immunoassay\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADMxLgS/OCizJBcu37Fy0/irYv6Fd/kgY8FsrNP/3R73YWvlWDK\\\ - nMqZZ27LzXpEQwViiQ/co/dYMBCbcxF/EV9AtTTtcAkhjdQ869EnMwbf+bMKk3aKg\\n24MZcIfP/T7G5dk2z1w51UmOUSq5f7+mCh3aIioPVUsZ3DMzNlXPP8xLBh1Wq+jI\\\ - nZcvkBprlQZ+YeMjSdyrUNi6NlJ9Ex4goUU/h4xKO5GMU5CSmm+foheGqAE/MR8mN\\n7pUhSOrf5i/YTMa6m1SiUlN+QT3pBDXaer72fGskxWbboHBD1l090sJ50aQ0FGnv\\\ - npyqCuqFaMb8bv7YHZ+CAQPvwRQGRMp2gVy0NGJ8j6qmQ7V5KZAlPM/dNn1lY2h8I\\nD0G2VhsRdonsBiwCSpf4WGtoz+nBcvbmm4sbaT2jYvDu/8l5zkpNgL4csXNu7bXg\\\ - nH6cTc60edFDPQtlfI9J3nbNRTF3CZP6U2Jsh9uXKRDjxysxNfrSKSbMInXWOh7Jz\\nw32mES5VNfOKqhngkRnpzAh6bDwG+EjXj7dlOoB2GhNfV46j95YM7NVM38S7s/MM\\\ - n5F8Hcrn5ZRk3d19PLFjinzmsSFkVbCdtymw8/hjidgeayXQe21iZtoLq6d2VMvV7\\nmpdgvHxfo5AOK+qHqvq/PQ2Pc3wULt1OausEyJNauu8FWLd8EYy6InS6LwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U0I3RUtIWVhaUlo1T0JFVklFTTZPU0ZXNFlC\\nQkdURlBURE9MSDNPVElBNEQzVEhaQUNNUE9TNTJWNzRSVUJRVTdQQUFRVENaUTJY\\\ - nMzNCT0paTERMNkRFTEg2QjdYRUVPUko1WFZEUT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+rtHWFtfS4baWBAAu/mc8woq\\\ - n78FJrJwys0OAolnhyBelk0tsASwsKUosR9ObRbEwcDAAc0a8sCMZ/bxsxGPG8keJ\\nk5CVfQ5WJk6Jl5wL2xmG+0OHZAwezGDoO6SGtY3H2iPM+Bq4rimnWWbbTrZFx4ny\\\ - nixVj3N4lW9J13NvRnBPz8DmHfPep09lTVgNiIVwvwqsmdxAnMZerzwpjIrdtud+s\\nz+LxVcAFeKmmzQLNYlrP2jsxjIE1gYLEkM10Jm/NuXZaXbyiT56uCdCI4oRti/Q5\\\ - n3NfzZZ7vfUwsr/PMjPMrGyjvtZy2BHoP4i+83wudoHezVomVlYxUsK24d24Ifj6X\\n/hhItJvZIE0YrOxzRaRi19wfTV9IbVH/Y7aOMZJRn0e61HLEGfAa7FiDtpox3T+M\\\ - nX6/NPGhlXphrCO4jjpVBLt1/F1Vz7ZKC60aPzEPCuUtXjTjttOMW/aUE1ktXVT7L\\nz6KixK04cg9CGvBkxAsZ4TGP+hAy3rmvnxn4kG62kzDPEQqBCzlEL6a+LG/LX503\\\ - n/VcazAUIZ12rTwZSV+0EQ9ZAC0q/vIwM17IqMtgeR/OgK7q79Je83D0mx5UUPLZQ\\nNUvrQBGFWLczaVYo69G53U2G4npVVo6f5/0G1dVZtRrnUxwy9mxZZFboHJ0FanjY\\\ - nSevPdl75hJ6kKp+X+278M6CiNm1NWETjCY4=\\n=wgEJ\\n-----END PGP PUBLIC KEY BLOCK-----\\\ - n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:43.241603Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/submissions\"\ - , \n \"url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\ - , \n \"uuid\": \"c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\n }\n ]\n\ - }\n"} + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5225'] - Content-Type: [application/json] - Date: ['Mon, 21 Jan 2019 17:13:11 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: '{"reply": "-----BEGIN PGP MESSAGE-----\n\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\n=686S\n-----END PGP MESSAGE-----\n\n", "uuid": "e467868c-1fbb-4b5e-bca2-87944ea83855"}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] - Connection: [keep-alive] - Content-Length: ['974'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '974' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies response: - body: {string: "{\n \"filename\": \"6-amendable_oxalate-reply.gpg\", \n \"message\"\ + body: + string: "{\n \"filename\": \"6-four-lane_downturn-reply.gpg\", \n \"message\"\ : \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\ - \n}\n"} + \n}\n" headers: - Content-Length: ['145'] - Content-Type: [application/json] - Date: ['Mon, 21 Jan 2019 17:13:11 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - status: {code: 201, message: CREATED} + Content-Length: + - '146' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:07:00 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 201 + message: CREATED version: 1 diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index 3fdf54fce..c705c33fb 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -2,93 +2,138 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/add_star\"\ + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"amendable\ - \ oxalate\", \n \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC\ - \ KEY BLOCK-----\\n\\nmQINBFGRfoABEADCT3t+bjtqkXjPdwR9uij7LFmenP1rl4nKNXaVBUTuB9AaDC20\\\ - nK8clNbYM2rXqxk48u1ofIlIy10fK94GY1nIN2OUk9++XZsgwpRfsGOg5dK94cf3G\\nlMNisP+fK+9kR32BPOIOJ9A1gye4/JjVon1JM0XOskC3FvWztS+Pd421nSFuKCHp\\\ - nmtFij1Oi1wrk90Pm8pC2gjkEIi/x4iudJQbtYJ6d2MjdfiA/5OX3U6rWedAa8E5e\\nGlMkVCee3DSjRhvK/lbe/TQgCyeM45G6pgLJupOo1aetVzPTUosLYpzHl9RZpguL\\\ - n2/y168odljHzy3DGJftDwEstx/8kWRYkjUYqyaSfkmJp/f2f70mAzoL3ml1sLXvw\\nA1wEiSSaczDkXL62MRyTpoGVTffDZ2NBN8JLK/SQ8C3UvGq7x0a89TcZ6aqfVyU1\\\ - ntLWMWKmdqvLEU926PsoxLzhGEahdNYRRbFtW4FQKAO97NTTlCL//j4wTXWBLpyD8\\nLBEb6j4l1IvOFG9q3uop9IZhuf8E0n3jafp5FBPC05/i6Wi12rs7gzJIZxcRx+ve\\\ - nWmB/B8xKaiiQxfdMswDQRmvUNIkoMaXPhoznP4L8IWYGthsseFK+rY/RB1o/fwOw\\nnDjvpt/P4L/+M8wtbtmc56nj5GQWOfxgwmaBXVfu0wxrFcYRxSt37nxQiwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T0ZQTVRVSVU1TVZQUDVESFFRVVJWTVBLTkpL\\nNlFZU0s0SUxQTkhNQVRLUFpNQlNBT0E1Tks0VlpPUTMzWE5WNjdLSzdZWlJMQVpX\\\ - nU0RDT1FFS1NQTjY3UFkzSExOUkZVWVhVMjNRWT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQMtLAlDosbglOnA//Y8i65QvX\\\ - n8SDmi+qVDC1lOjDcXTQMSgeSTDW+0XBwJMaQ6rIFaN6NBIudoTwGLYbrgDBmy0CA\\n9qHSIEreng2Hz/EgOPdUMpz0HViDn1EJxvckBBwVKZY684NHMf8f2XVPSvoZj8sA\\\ - nZyi0TpZbVJWGwZPMfTxVNuNuJFuvpUyX769FFiP32Vooxy5wXwvq1Npd0mMRtsMt\\nrnxxOmrzzoq4/nirJg0L0aPHog0ta63t6L5z8OgbtzZs1Su70UtHc+0sxd84xuXV\\\ - nJ8zIGC1iOqum68HzRc7j5JvpkynZJNgy3k2bxuG/OtNuI0CRsY+Pci5WY/Oz0qvk\\nhiF9pKa1uQglbATUi6t9pBTEJCuu2dS6vYHtm+k/FbIoJ7nVrRrgvI+nUqu+aMh9\\\ - ngamKZBdHcVrVccWsxn7nvBFU4heoQVovQ0JuFfxlGAmhIY3gs47ZG7CV9wDrRkrI\\n+RR+MwFq46I1dO8PdY7mEMstpsLhSbE+m2cHy2j3CkQd6hCRwLnIIHy7t8tKZZW6\\\ - nF074MPc0SiFeur1LmO4egL6PzIMYAaaDoWRAzXRb2Kdz50f5qjdvRkTg9Z47vrrC\\n5MiTOSR88XLr25P4Ei6oVwnTDDz9DhFuBhCG+er42T/1VC4udUYqv2cOp8k69Da4\\\ - nbWnUkSalxPHNH5H+PS7R3SJGFhLtgaInKL0=\\n=eEar\\n-----END PGP PUBLIC KEY BLOCK-----\\\ - n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:39.545978Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/submissions\"\ - , \n \"url\": \"/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\ - , \n \"uuid\": \"6c3a6a14-6751-4f5f-bba9-36e93943fc45\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"unpopular\ - \ immunoassay\", \n \"key\": {\n \"public\": \"-----BEGIN PGP\ - \ PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADMxLgS/OCizJBcu37Fy0/irYv6Fd/kgY8FsrNP/3R73YWvlWDK\\\ - nMqZZ27LzXpEQwViiQ/co/dYMBCbcxF/EV9AtTTtcAkhjdQ869EnMwbf+bMKk3aKg\\n24MZcIfP/T7G5dk2z1w51UmOUSq5f7+mCh3aIioPVUsZ3DMzNlXPP8xLBh1Wq+jI\\\ - nZcvkBprlQZ+YeMjSdyrUNi6NlJ9Ex4goUU/h4xKO5GMU5CSmm+foheGqAE/MR8mN\\n7pUhSOrf5i/YTMa6m1SiUlN+QT3pBDXaer72fGskxWbboHBD1l090sJ50aQ0FGnv\\\ - npyqCuqFaMb8bv7YHZ+CAQPvwRQGRMp2gVy0NGJ8j6qmQ7V5KZAlPM/dNn1lY2h8I\\nD0G2VhsRdonsBiwCSpf4WGtoz+nBcvbmm4sbaT2jYvDu/8l5zkpNgL4csXNu7bXg\\\ - nH6cTc60edFDPQtlfI9J3nbNRTF3CZP6U2Jsh9uXKRDjxysxNfrSKSbMInXWOh7Jz\\nw32mES5VNfOKqhngkRnpzAh6bDwG+EjXj7dlOoB2GhNfV46j95YM7NVM38S7s/MM\\\ - n5F8Hcrn5ZRk3d19PLFjinzmsSFkVbCdtymw8/hjidgeayXQe21iZtoLq6d2VMvV7\\nmpdgvHxfo5AOK+qHqvq/PQ2Pc3wULt1OausEyJNauu8FWLd8EYy6InS6LwARAQAB\\\ - ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U0I3RUtIWVhaUlo1T0JFVklFTTZPU0ZXNFlC\\nQkdURlBURE9MSDNPVElBNEQzVEhaQUNNUE9TNTJWNzRSVUJRVTdQQUFRVENaUTJY\\\ - nMzNCT0paTERMNkRFTEg2QjdYRUVPUko1WFZEUT0+iQI5BBMBCgAjBQJRkX6AAhsv\\nBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+rtHWFtfS4baWBAAu/mc8woq\\\ - n78FJrJwys0OAolnhyBelk0tsASwsKUosR9ObRbEwcDAAc0a8sCMZ/bxsxGPG8keJ\\nk5CVfQ5WJk6Jl5wL2xmG+0OHZAwezGDoO6SGtY3H2iPM+Bq4rimnWWbbTrZFx4ny\\\ - nixVj3N4lW9J13NvRnBPz8DmHfPep09lTVgNiIVwvwqsmdxAnMZerzwpjIrdtud+s\\nz+LxVcAFeKmmzQLNYlrP2jsxjIE1gYLEkM10Jm/NuXZaXbyiT56uCdCI4oRti/Q5\\\ - n3NfzZZ7vfUwsr/PMjPMrGyjvtZy2BHoP4i+83wudoHezVomVlYxUsK24d24Ifj6X\\n/hhItJvZIE0YrOxzRaRi19wfTV9IbVH/Y7aOMZJRn0e61HLEGfAa7FiDtpox3T+M\\\ - nX6/NPGhlXphrCO4jjpVBLt1/F1Vz7ZKC60aPzEPCuUtXjTjttOMW/aUE1ktXVT7L\\nz6KixK04cg9CGvBkxAsZ4TGP+hAy3rmvnxn4kG62kzDPEQqBCzlEL6a+LG/LX503\\\ - n/VcazAUIZ12rTwZSV+0EQ9ZAC0q/vIwM17IqMtgeR/OgK7q79Je83D0mx5UUPLZQ\\nNUvrQBGFWLczaVYo69G53U2G4npVVo6f5/0G1dVZtRrnUxwy9mxZZFboHJ0FanjY\\\ - nSevPdl75hJ6kKp+X+278M6CiNm1NWETjCY4=\\n=wgEJ\\n-----END PGP PUBLIC KEY BLOCK-----\\\ - n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": \"2019-01-21T17:12:43.241603Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a/submissions\"\ - , \n \"url\": \"/api/v1/sources/c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\ - , \n \"uuid\": \"c53da25f-05ef-43e8-b0c3-fb8e3a8e720a\"\n }\n ]\n\ - }\n"} + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5225'] - Content-Type: [application/json] - Date: ['Mon, 21 Jan 2019 17:13:03 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: '{"reply": "-----BEGIN PGP MESSAGE-----\n\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\n=686S\n-----END PGP MESSAGE-----\n\n"}' headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0ODExOTU4MywiaWF0IjoxNTQ4MDkwNzgzfQ.eyJpZCI6MX0.j9mJdalAHiFTWDT-vvmH_PUGofW625Z8M4hOrYcNmuo] - Connection: [keep-alive] - Content-Length: ['926'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '926' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/6c3a6a14-6751-4f5f-bba9-36e93943fc45/replies + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies response: - body: {string: "{\n \"filename\": \"5-amendable_oxalate-reply.gpg\", \n \"message\"\ - : \"Your reply has been stored\", \n \"uuid\": \"122f1449-2f4e-46c1-8605-0158fe9f3341\"\ - \n}\n"} + body: + string: "{\n \"filename\": \"5-four-lane_downturn-reply.gpg\", \n \"message\"\ + : \"Your reply has been stored\", \n \"uuid\": \"3ab2e017-121e-4b58-8b5a-3a10af991d4c\"\ + \n}\n" headers: - Content-Length: ['145'] - Content-Type: [application/json] - Date: ['Mon, 21 Jan 2019 17:13:03 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - status: {code: 201, message: CREATED} + Content-Length: + - '146' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:06:59 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 201 + message: CREATED version: 1 diff --git a/data/test-setup.yml b/data/test-setup.yml index 7adfd8424..9ca9e1097 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,7 +1,7 @@ interactions: - request: - body: '{"passphrase": "correct horse battery staple profanity oil chewy", "username": - "journalist", "one_time_code": "190968"}' + body: '{"username": "journalist", "passphrase": "correct horse battery staple + profanity oil chewy", "one_time_code": "205004"}' headers: Accept: - '*/*' @@ -12,23 +12,24 @@ interactions: Content-Length: - '119' User-Agent: - - python-requests/2.21.0 + - python-requests/2.22.0 method: POST uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"expiration\": \"2019-11-10T02:12:38.519862Z\", \n \"journalist_first_name\": - \"bob\", \n \"journalist_last_name\": \"bobathy\", \n \"journalist_uuid\": \"6c05e07a-24aa-4475-99b4-25fb5a1ba3c4\", - \n \"token\": \"eyJpYXQiOjE1NzMzMjMxNTgsImFsZyI6IkhTMjU2IiwiZXhwIjoxNTczMzUxOTU4fQ.eyJpZCI6MX0.6DOFozpT3pg5YSF4hk0ISTc1VRNSTjbGxaN17EjPvJM\"\n}\n" + string: "{\n \"expiration\": \"2020-09-01T03:06:57.031782Z\", \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ + , \n \"token\": \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY\"\ + \n}\n" headers: Content-Length: - - '317' + - '313' Content-Type: - application/json Date: - - Sat, 09 Nov 2019 18:12:38 GMT + - Mon, 31 Aug 2020 19:06:57 GMT Server: - - Werkzeug/0.14.1 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.5.2 status: code: 200 message: OK diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 9d0f7a18d..8b847b143 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -2,133 +2,269 @@ interactions: - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"simplified countenance\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkYBEADFQFGsBxfF+U9fMbLGQ0CPT5zu0N4llekm/YitLdMcrx1ZYTM8\\ngTZVbwR0Wn4TEPNlDA6NDNQqL0aYFFEurZ2d9hMVqHLeDDjZ1a86esZYqM8ezRgA\\nBdKLbtYv3goaT4xcZ382LsLWpTC77wHd6woxdQQLbf32i5BFdJ2LzT/gGLEXI7qg\\npiWElSROUhXeWLWGz/OF2XMsDKEzQ8EePq9ZK/LYeTvs4Zi628Cu55yDGaMxY3e0\\n01qiZXD2jWZnVwVmvHX2ZM0ajb/uLPOHSiDYGF/a4ZFCC4GFgGaPuB/EhLS1Rz9c\\ngHlaZ/fFjUxy8s01/Imdg/pvC1yL4TRu2Hw+JDyxbyGxrnZ+GWe76+77Ts5wlQHC\\nUlJ0rcZy8z2dwxgl/qm5sYgPjQjKidiZyEJvTRA6itQ09vFACt8i79ZzrG45NgCn\\nQFhzBHmX/YDXhPMvFhJ74jltmY7EGbI8RuEoePrBxIkTS+DiCakLhA3XRfEm5p/r\\nd8Ujpq6v04WzErDAPzRm9TQz595t8MBuMoKCOAy6HK7YbtLkQWGHm/P0SHOMO4o6\\nyoku3pLBqO0bsooWbt1t9SWmlEpnQYxEgn9MsygDmAKNe9QyRqZ6IXXgpSt82PdH\\nmt7gbvla/HAYJAXj0iHocsfY5Hg36MCN4tD2C3I8M6NeiQLfpgU5oe2vTwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VENXUFpPNVVPSEU0UE1TUVdZT1RIUUFFUklN\\nSDNWTU9NS1hQQ1czUDVRTUE3NldEMkNNSVBMWExFUUdBSTZNWVFQWkVXTVUzT1Ra\\nNTYzWkJVSjdLN0lZS1FBN0lKWkdURTQyV0xNQT0+iQI/BBMBCgApBQJbzlJGAhsv\\nBQkB4Jz6BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQc94RIYU+9eZ9Tw/+\\nOzlH5RSs31JSbjgWaTOrvFUz5kbiIW2qRgUjzLtXhVU79im1osyPb058rtethydy\\nSfFQ1mfhVhdLqH+bQiyYuIxzgX9Kft4OgdXxWjFCcenMwPlqJhcPQDC0aQsIQOfp\\nW/6QGm3cq0Vh/StOwlhfrjl7uPaqNwxQsV2VXYMSXsZLyFUgnrr7clDpROBAcSaH\\nJRGUItvLMMFhR187L5froGctrA5h7KbDyShCF8RQa4nh/h4QbWxdX9bkufjOV7i8\\nGpCivtNohgdJ0UjnhhZmf0AlD/dBFH1bfjTQPD0rl48xDGEDRoSNYgbAx6pibr+K\\nXKj/DQc92PTFJz5DzRzmQbA/WopsSr1KWyZNpaQPuB3Y7qK4KudqC0Y8VTy3Fwdq\\nqO+kSB0R0o6LeprcDevEd/tB5iyHcXaYN90is7zijzJ8FPWtsOmTAtmSnDU8RLq2\\nc9MGNcXCC+sDFSaAEKUO0kodyde/KAZznBsUJ2bCe9vd6ulDBTGNPHhmNPtNEOpe\\nqkDa+X7Ul2X7HUrsBKAqjeGAhKIimRiJp2ApaxpTTjVLfIu2AYLPPeyh6Iu6MIFW\\nduMxWMxYuH7e7EOicGZXjKw/J2DJxr3Gk2Tqc6uGoNz/ofrOmW4R6VIOVW+gMMJE\\ngckgURKb5Y3/0vsHwbzCosytSf8JRalW9xWTY7bOMmY=\\n=NEsZ\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:16.040774Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star\", - \n \"replies_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/replies\", - \n \"submissions_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/submissions\", - \n \"url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c\", - \n \"uuid\": \"d9235b36-b3d4-49f1-b5df-dea96179342c\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"melodic ignition\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkkBEAD3w4vil9pCDsExhuofFmRu5332eIHLSZl5HONFzNOtHOlh9U5H\\nfxpLCLL0cXR7bAnsbQaC7ctEAQs0DCD4IdetOaqDmOFRvWktimWwJdHjlwp3zu1l\\nssFvbh9DFs3XEcKtf0CS7Gr1cfRh5j0D3r9zgP0/1EsBMDv8kGJPAuav8t9qvNPT\\ngH9avjxbOXzqciGBjKnhjtcwSlCa6TPVNqxqdnU1QS5U1mPGejmeE63n0Wa8kcZZ\\nN2UgoR3JK6Izj/OQTGumLD+uYpdJlBlNdkQ3YJHGVLe6ZQ0ZvYrWtwrjPQ3nrFHe\\nHnbhqIF4h+GYr8UmFOGvkbSgm4cUOPuk+ByDSqvW8dS5Dw9/owuJyrN/anVoi29K\\nMDlRCkFeo0f5EUTpH193PVfTfbuzVVcjmqkxU8c573yImoShl6NztW4tfDwK1Zig\\nuYzl8HW8HsyPFEh+bfoGF2Fb3x9kV623tn0EOaM6Bdwmh5hRA7XmjSJASqb6vCgD\\n7m3tPgp4KqxpJvNvTtlQEJtZbX3T21Q17pc4BswEnspwHLEgsuX5PxIJrnIgSQb6\\nDfwpsYQlqCLLyeM2AmrrbYj45K1CRxwgZzMlmqVd14JkaOiJCbDX8+P39KloNjdM\\nniLd1IEloOPyEkn2e4gGRLJEHceXkHSbZeawbmhsJs6X74eeq2EHD2++VQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0RST1RMU0lQR1BPQUtaVE80WlUyS0FGNFNI\\nSUg2UlNZU1ZNQURYWkcyR0NGM1JZTjRDWjNGV1I2VTVEU1RaTkE2U0xGUjYyRTJB\\nRkJBSEpZVk5YSU9ER00yQ1haV0daTkxDT0RMUT0+iQI/BBMBCgApBQJbzlJJAhsv\\nBQkB4Jz3BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+nVriNq1LtN+nw/+\\nPxs+S/US+0p2YoyQS0pTbxyMDTifv1Y9I/BT9XSqeXFQyHW5ZVBXP+GI3LWladep\\nzxQqzUdwbfuLOwKloXDDpWMWT96TtF54zzyUK/RgJKVtLJQakSNdst5559PdZHKZ\\nm+q+xSQ8ZIRVwXVIs/lqYG77Jo3Hp8f1ox1f/uTV+5stW7N/8a82QghSmn9LOaly\\nh+vXfYsl0tb25OcUPR6oDgdsKGecUjJyt1k9vxvJr/Fn6EJJ5RHtYsjifYzdnly8\\nF+21lC4Ol7CzbxdD8K9Hcf21SnsYGF3PRW5/9pOUuIQqgasUur6KFr51cKsN0nzv\\nDp9sDntVM5SHO6e/wNTHwOA3f1/2+/YFGI5sm64v3P8laZSqkpnY88Iq9RkFSCqo\\nrExHVKhRLt/154M+/LP6moqSLzsZVAfIZ/ZvdVRkZz0Wn+Q7EOWx3woY5rfWEvEM\\nvi0NTctMWgi+iwZAED9r+hN0rDFehK/5Fvgw48VQu1oB3O/XZ2xYe1oFOprPDF0C\\nv7j6l0vKg5YNa+u11nUB68eF45+WNX+GiTJqY2oh2DiFK/EZNvKh4SEtddGKBtDZ\\nZBZUaHBMuRJMa9k6ZwTpOOJPhstl0Y2lyh9H4xuIYA03dpbDzCigpFyo9FA2yn/I\\nBofS5ogdjN4soc/c0x2tUtR5LZr4FuW0E36CT5d49E4=\\n=Nhlo\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:18.753919Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/remove_star\", - \n \"replies_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/replies\", - \n \"submissions_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/submissions\", - \n \"url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201\", - \n \"uuid\": \"34f31db0-e3f4-4371-b42a-1fa6105c8201\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5241'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:42:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzA.r0s0ntQL8OomTTpNXi9qXa1YpzA; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:07:00 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star response: - body: {string: "{\n \"message\": \"Star added\"\n}\n"} + body: + string: "{\n \"message\": \"Star added\"\n}\n" headers: - Content-Length: ['30'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:42:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzA.r0s0ntQL8OomTTpNXi9qXa1YpzA; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 201, message: CREATED} + Content-Length: + - '30' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:07:00 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 201 + message: CREATED - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star + uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star response: - body: {string: "{\n \"message\": \"Star removed\"\n}\n"} + body: + string: "{\n \"message\": \"Star removed\"\n}\n" headers: - Content-Length: ['32'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:42:20 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzA.r0s0ntQL8OomTTpNXi9qXa1YpzA; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '32' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:07:00 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK - request: body: null headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU0MDI3NjkxOCwiaWF0IjoxNTQwMjQ4MTE4fQ.eyJpZCI6MX0.fygpQy3CxB1ulUWLFz2UdrtcBKHz-fk5gyRxbcSY720] - Connection: [keep-alive] - Content-Type: [application/json] - User-Agent: [python-requests/2.20.0] + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 method: GET uri: http://127.0.0.1:8081/api/v1/sources response: - body: {string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"simplified countenance\", \n - \ \"key\": {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkYBEADFQFGsBxfF+U9fMbLGQ0CPT5zu0N4llekm/YitLdMcrx1ZYTM8\\ngTZVbwR0Wn4TEPNlDA6NDNQqL0aYFFEurZ2d9hMVqHLeDDjZ1a86esZYqM8ezRgA\\nBdKLbtYv3goaT4xcZ382LsLWpTC77wHd6woxdQQLbf32i5BFdJ2LzT/gGLEXI7qg\\npiWElSROUhXeWLWGz/OF2XMsDKEzQ8EePq9ZK/LYeTvs4Zi628Cu55yDGaMxY3e0\\n01qiZXD2jWZnVwVmvHX2ZM0ajb/uLPOHSiDYGF/a4ZFCC4GFgGaPuB/EhLS1Rz9c\\ngHlaZ/fFjUxy8s01/Imdg/pvC1yL4TRu2Hw+JDyxbyGxrnZ+GWe76+77Ts5wlQHC\\nUlJ0rcZy8z2dwxgl/qm5sYgPjQjKidiZyEJvTRA6itQ09vFACt8i79ZzrG45NgCn\\nQFhzBHmX/YDXhPMvFhJ74jltmY7EGbI8RuEoePrBxIkTS+DiCakLhA3XRfEm5p/r\\nd8Ujpq6v04WzErDAPzRm9TQz595t8MBuMoKCOAy6HK7YbtLkQWGHm/P0SHOMO4o6\\nyoku3pLBqO0bsooWbt1t9SWmlEpnQYxEgn9MsygDmAKNe9QyRqZ6IXXgpSt82PdH\\nmt7gbvla/HAYJAXj0iHocsfY5Hg36MCN4tD2C3I8M6NeiQLfpgU5oe2vTwARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8VENXUFpPNVVPSEU0UE1TUVdZT1RIUUFFUklN\\nSDNWTU9NS1hQQ1czUDVRTUE3NldEMkNNSVBMWExFUUdBSTZNWVFQWkVXTVUzT1Ra\\nNTYzWkJVSjdLN0lZS1FBN0lKWkdURTQyV0xNQT0+iQI/BBMBCgApBQJbzlJGAhsv\\nBQkB4Jz6BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQc94RIYU+9eZ9Tw/+\\nOzlH5RSs31JSbjgWaTOrvFUz5kbiIW2qRgUjzLtXhVU79im1osyPb058rtethydy\\nSfFQ1mfhVhdLqH+bQiyYuIxzgX9Kft4OgdXxWjFCcenMwPlqJhcPQDC0aQsIQOfp\\nW/6QGm3cq0Vh/StOwlhfrjl7uPaqNwxQsV2VXYMSXsZLyFUgnrr7clDpROBAcSaH\\nJRGUItvLMMFhR187L5froGctrA5h7KbDyShCF8RQa4nh/h4QbWxdX9bkufjOV7i8\\nGpCivtNohgdJ0UjnhhZmf0AlD/dBFH1bfjTQPD0rl48xDGEDRoSNYgbAx6pibr+K\\nXKj/DQc92PTFJz5DzRzmQbA/WopsSr1KWyZNpaQPuB3Y7qK4KudqC0Y8VTy3Fwdq\\nqO+kSB0R0o6LeprcDevEd/tB5iyHcXaYN90is7zijzJ8FPWtsOmTAtmSnDU8RLq2\\nc9MGNcXCC+sDFSaAEKUO0kodyde/KAZznBsUJ2bCe9vd6ulDBTGNPHhmNPtNEOpe\\nqkDa+X7Ul2X7HUrsBKAqjeGAhKIimRiJp2ApaxpTTjVLfIu2AYLPPeyh6Iu6MIFW\\nduMxWMxYuH7e7EOicGZXjKw/J2DJxr3Gk2Tqc6uGoNz/ofrOmW4R6VIOVW+gMMJE\\ngckgURKb5Y3/0vsHwbzCosytSf8JRalW9xWTY7bOMmY=\\n=NEsZ\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:16.040774Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/remove_star\", - \n \"replies_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/replies\", - \n \"submissions_url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c/submissions\", - \n \"url\": \"/api/v1/sources/d9235b36-b3d4-49f1-b5df-dea96179342c\", - \n \"uuid\": \"d9235b36-b3d4-49f1-b5df-dea96179342c\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/add_star\", - \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"melodic ignition\", \n \"key\": - {\n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFvOUkkBEAD3w4vil9pCDsExhuofFmRu5332eIHLSZl5HONFzNOtHOlh9U5H\\nfxpLCLL0cXR7bAnsbQaC7ctEAQs0DCD4IdetOaqDmOFRvWktimWwJdHjlwp3zu1l\\nssFvbh9DFs3XEcKtf0CS7Gr1cfRh5j0D3r9zgP0/1EsBMDv8kGJPAuav8t9qvNPT\\ngH9avjxbOXzqciGBjKnhjtcwSlCa6TPVNqxqdnU1QS5U1mPGejmeE63n0Wa8kcZZ\\nN2UgoR3JK6Izj/OQTGumLD+uYpdJlBlNdkQ3YJHGVLe6ZQ0ZvYrWtwrjPQ3nrFHe\\nHnbhqIF4h+GYr8UmFOGvkbSgm4cUOPuk+ByDSqvW8dS5Dw9/owuJyrN/anVoi29K\\nMDlRCkFeo0f5EUTpH193PVfTfbuzVVcjmqkxU8c573yImoShl6NztW4tfDwK1Zig\\nuYzl8HW8HsyPFEh+bfoGF2Fb3x9kV623tn0EOaM6Bdwmh5hRA7XmjSJASqb6vCgD\\n7m3tPgp4KqxpJvNvTtlQEJtZbX3T21Q17pc4BswEnspwHLEgsuX5PxIJrnIgSQb6\\nDfwpsYQlqCLLyeM2AmrrbYj45K1CRxwgZzMlmqVd14JkaOiJCbDX8+P39KloNjdM\\nniLd1IEloOPyEkn2e4gGRLJEHceXkHSbZeawbmhsJs6X74eeq2EHD2++VQARAQAB\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8S0RST1RMU0lQR1BPQUtaVE80WlUyS0FGNFNI\\nSUg2UlNZU1ZNQURYWkcyR0NGM1JZTjRDWjNGV1I2VTVEU1RaTkE2U0xGUjYyRTJB\\nRkJBSEpZVk5YSU9ER00yQ1haV0daTkxDT0RMUT0+iQI/BBMBCgApBQJbzlJJAhsv\\nBQkB4Jz3BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQ+nVriNq1LtN+nw/+\\nPxs+S/US+0p2YoyQS0pTbxyMDTifv1Y9I/BT9XSqeXFQyHW5ZVBXP+GI3LWladep\\nzxQqzUdwbfuLOwKloXDDpWMWT96TtF54zzyUK/RgJKVtLJQakSNdst5559PdZHKZ\\nm+q+xSQ8ZIRVwXVIs/lqYG77Jo3Hp8f1ox1f/uTV+5stW7N/8a82QghSmn9LOaly\\nh+vXfYsl0tb25OcUPR6oDgdsKGecUjJyt1k9vxvJr/Fn6EJJ5RHtYsjifYzdnly8\\nF+21lC4Ol7CzbxdD8K9Hcf21SnsYGF3PRW5/9pOUuIQqgasUur6KFr51cKsN0nzv\\nDp9sDntVM5SHO6e/wNTHwOA3f1/2+/YFGI5sm64v3P8laZSqkpnY88Iq9RkFSCqo\\nrExHVKhRLt/154M+/LP6moqSLzsZVAfIZ/ZvdVRkZz0Wn+Q7EOWx3woY5rfWEvEM\\nvi0NTctMWgi+iwZAED9r+hN0rDFehK/5Fvgw48VQu1oB3O/XZ2xYe1oFOprPDF0C\\nv7j6l0vKg5YNa+u11nUB68eF45+WNX+GiTJqY2oh2DiFK/EZNvKh4SEtddGKBtDZ\\nZBZUaHBMuRJMa9k6ZwTpOOJPhstl0Y2lyh9H4xuIYA03dpbDzCigpFyo9FA2yn/I\\nBofS5ogdjN4soc/c0x2tUtR5LZr4FuW0E36CT5d49E4=\\n=Nhlo\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2018-10-22T22:42:18.753919Z\", \n \"number_of_documents\": 0, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/remove_star\", - \n \"replies_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/replies\", - \n \"submissions_url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201/submissions\", - \n \"url\": \"/api/v1/sources/34f31db0-e3f4-4371-b42a-1fa6105c8201\", - \n \"uuid\": \"34f31db0-e3f4-4371-b42a-1fa6105c8201\"\n }\n ]\n}\n"} + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ + , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ + nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ + nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ + niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ + nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ + \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ + , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ + , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ + , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ + n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ + nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ + nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ + nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ + , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ + , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ + \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ + ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ + nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ + nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ + n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ + , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ + , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ + , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ + \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ + n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ + nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ + naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ + n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ + , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ + , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + }\n" headers: - Content-Length: ['5241'] - Content-Type: [application/json] - Date: ['Mon, 22 Oct 2018 22:42:21 GMT'] - Server: [Werkzeug/0.14.1 Python/2.7.6] - Set-Cookie: [js=eyJleHBpcmVzIjp7IiBkIjoiVHVlLCAyMyBPY3QgMjAxOCAwMDo0MjoyMCBHTVQifX0.Dq_jzQ.QdLLFqWe0-9BW_-AXmvjpiOYpt0; - HttpOnly; Path=/] - Vary: [Cookie] - status: {code: 200, message: OK} + Content-Length: + - '6407' + Content-Type: + - application/json + Date: + - Mon, 31 Aug 2020 19:07:00 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK version: 1 diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 278e34800..3e379e2f9 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/f6c8f358-96da-408d-8585-faf5adcaf387\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"f6c8f358-96da-408d-8585-faf5adcaf387\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/7e12444e-9c87-4ccd-a9b8-7705239bf197\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"7e12444e-9c87-4ccd-a9b8-7705239bf197\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5625\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:19 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/f6c8f358-96da-408d-8585-faf5adcaf387\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"f6c8f358-96da-408d-8585-faf5adcaf387\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/7e12444e-9c87-4ccd-a9b8-7705239bf197\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"7e12444e-9c87-4ccd-a9b8-7705239bf197\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5625\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:20 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/226c3fd3-d718-4d6e-b5bd-5e9c2b1f1840\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:20 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-umbrella_jute-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies/f6c8f358-96da-408d-8585-faf5adcaf387\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"f6c8f358-96da-408d-8585-faf5adcaf387\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"b5d73bbb-8d41-4237-bd68-f110f3c6b683\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-autonomic_planting-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies/7e12444e-9c87-4ccd-a9b8-7705239bf197\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"7e12444e-9c87-4ccd-a9b8-7705239bf197\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5068\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:21 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/1146fff3-ad43-4e0f-b49b-d4522f871b04\\\", \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"1146fff3-ad43-4e0f-b49b-d4522f871b04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/48b46145-9be7-45a6-9d9b-779e9aed706a\\\", \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"48b46145-9be7-45a6-9d9b-779e9aed706a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/08932993-a3e6-4403-a540-87134cecc105\\\", \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"08932993-a3e6-4403-a540-87134cecc105\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/c2bed450-2da0-421b-b361-da1afb05e436\\\", \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c2bed450-2da0-421b-b361-da1afb05e436\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4451\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/1146fff3-ad43-4e0f-b49b-d4522f871b04\\\", \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"1146fff3-ad43-4e0f-b49b-d4522f871b04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/48b46145-9be7-45a6-9d9b-779e9aed706a\\\", \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"48b46145-9be7-45a6-9d9b-779e9aed706a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/08932993-a3e6-4403-a540-87134cecc105\\\", \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"08932993-a3e6-4403-a540-87134cecc105\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/c2bed450-2da0-421b-b361-da1afb05e436\\\", \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c2bed450-2da0-421b-b361-da1afb05e436\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4451\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:29 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/1146fff3-ad43-4e0f-b49b-d4522f871b04\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:29 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/48b46145-9be7-45a6-9d9b-779e9aed706a\\\", \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"48b46145-9be7-45a6-9d9b-779e9aed706a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/08932993-a3e6-4403-a540-87134cecc105\\\", \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"08932993-a3e6-4403-a540-87134cecc105\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/c2bed450-2da0-421b-b361-da1afb05e436\\\", \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c2bed450-2da0-421b-b361-da1afb05e436\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3899\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index 784f12969..14d645872 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"umbrella jute\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7F2CD2AFAF0900543EFC63F2403A0DFD072AE0DE\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC5XB+Yd/YmUbXqC0mxbAO6JNL46y4Ql0ARebVsDBWE2QvLdEew\\\\nvNHu316Jh3PA5uYVLloGyoQokA4Kftqg5xwODiK+qu9B4wmj4p96c+3fehNpG+qO\\\\nrcCPxNh2SxyUESQmTWppK3El20bobqOHCG1G2T12v8UeK3tfKu9bP5JiFq/v4fKY\\\\nHkfTwarHhmg8bZad6ytRaEymjMguirqLJpnwmdnk/Pi8dnvO2iMU24+5TyClw9zP\\\\nlpNFm4KUnjnZG8whnJs41nzy9uyb1w4cxjsqfyaVrvF2waHYE5Jz9mmIc07jKzcy\\\\nuc/jWu/j/P07J2Z/cTVobbgx26+Aos5bEWnTOz8iy+vlmjjztGz5RCxJL9MMMqDj\\\\npy1VCK/Ku98pTySDo45KbZFbr9dc1Ir2BHQ+xIi39N64vqlhSaIm4qXhqwsTZMkV\\\\nS5vepynBEsg5L3wFlRY2MWweHdHYKOmTxd3VmkJL5045DDlm6ZJwwQuNsa0c17c/\\\\nuQrrt8s2+fCzQza2GjzhjqLVfS69Xpl1h9GZHuQXE9jFgKF6m26Gupbb3MfAmqkA\\\\nrDb5KfCcnYeukTLwF+WZRLqStYDZiEWlFB9HF8YeynZygOnD8Ym9gZcfywemCaKV\\\\nb6l8wkUMd3/9o8j0Taz627ddfaPGtva3ts4/Nhq9CzWxUdf4XCsYqRNy+QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RVIzRUtWQ1lDNk1JWEpCVUdDU1Y0UVdNUUpX\\\\nREMyT09FTU1aNUJRNVNDV1gyWEhYTlFNU0JJWUU3STM3SjZBQU5UNEFYNUtMU1FI\\\\nUDI3TUFMQVNFVEtKQUVERjYyRjNNREpSN0RTWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEA6Df0HKuDeIgwP/iumAAGQ7xsM\\\\nqPL3BmAm9BF5H+wxbDn3OehMCHpIQGy8EVAUcmlKd/VrLU5P5jwa/98L+BBAl6+u\\\\nrTuNNLaf6Fi7do9XIMhrMZGquHtSOGP7cuRvzUVKjusZRjY3rRRXAoboWly+16WE\\\\n5K0wAgK6IUWllFx2oWrqlWaVygWqZkhPJl1lPdrrQm4jjrDJQj7PWhGGciaoAXqC\\\\nCRbF9Q7RejZWbexS9d5XVQVspn9OSOJOYGlemJ6Cyhlj8pLQorRUpgKC5Wr3CGiU\\\\nVxp9VQycRNGNKTMpG84Qf1cwExJgf1pjmVySZ49gNKsL30Fua3tXknE8VIc9uUOz\\\\nwE0DcdY4Sr55tR2VTYBOpTbk+b+OPGHo1nY0MPoYxagFvu9jwpgTEUDgfvkm+326\\\\ndBI+VMGHeoMm+8h4DLRQmDaufF3YJAY/7L0w5AbvVJ9aiLVSeznyeUE1H6R1pnJS\\\\n5UwWpN+fvUbVxV8FySrd4CjFvi09nQyfAaZBNalwF0nr5EjFAB2gH/e+xtK0sKRZ\\\\nc3Cd3UybLkz7YZdXUx/QUfw0kTBm0+o+YaQKU3typNrTYmKyv6M5XvMns9L0ghRA\\\\nkw5bE1VmwnGXIpCnLvEXu0kTK79EEGUluCxQQha5YSpeFFzI0jW4XF91GpmE96fL\\\\nzlMB4PEk/CgO8tOugLP1cgQbDe64K2uT\\\\n=CDWk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.076212Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"939539a2-c78d-4869-ac4c-55f0e015f982\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"13338\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:21 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"umbrella jute\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7F2CD2AFAF0900543EFC63F2403A0DFD072AE0DE\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC5XB+Yd/YmUbXqC0mxbAO6JNL46y4Ql0ARebVsDBWE2QvLdEew\\\\nvNHu316Jh3PA5uYVLloGyoQokA4Kftqg5xwODiK+qu9B4wmj4p96c+3fehNpG+qO\\\\nrcCPxNh2SxyUESQmTWppK3El20bobqOHCG1G2T12v8UeK3tfKu9bP5JiFq/v4fKY\\\\nHkfTwarHhmg8bZad6ytRaEymjMguirqLJpnwmdnk/Pi8dnvO2iMU24+5TyClw9zP\\\\nlpNFm4KUnjnZG8whnJs41nzy9uyb1w4cxjsqfyaVrvF2waHYE5Jz9mmIc07jKzcy\\\\nuc/jWu/j/P07J2Z/cTVobbgx26+Aos5bEWnTOz8iy+vlmjjztGz5RCxJL9MMMqDj\\\\npy1VCK/Ku98pTySDo45KbZFbr9dc1Ir2BHQ+xIi39N64vqlhSaIm4qXhqwsTZMkV\\\\nS5vepynBEsg5L3wFlRY2MWweHdHYKOmTxd3VmkJL5045DDlm6ZJwwQuNsa0c17c/\\\\nuQrrt8s2+fCzQza2GjzhjqLVfS69Xpl1h9GZHuQXE9jFgKF6m26Gupbb3MfAmqkA\\\\nrDb5KfCcnYeukTLwF+WZRLqStYDZiEWlFB9HF8YeynZygOnD8Ym9gZcfywemCaKV\\\\nb6l8wkUMd3/9o8j0Taz627ddfaPGtva3ts4/Nhq9CzWxUdf4XCsYqRNy+QARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8RVIzRUtWQ1lDNk1JWEpCVUdDU1Y0UVdNUUpX\\\\nREMyT09FTU1aNUJRNVNDV1gyWEhYTlFNU0JJWUU3STM3SjZBQU5UNEFYNUtMU1FI\\\\nUDI3TUFMQVNFVEtKQUVERjYyRjNNREpSN0RTWT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEEA6Df0HKuDeIgwP/iumAAGQ7xsM\\\\nqPL3BmAm9BF5H+wxbDn3OehMCHpIQGy8EVAUcmlKd/VrLU5P5jwa/98L+BBAl6+u\\\\nrTuNNLaf6Fi7do9XIMhrMZGquHtSOGP7cuRvzUVKjusZRjY3rRRXAoboWly+16WE\\\\n5K0wAgK6IUWllFx2oWrqlWaVygWqZkhPJl1lPdrrQm4jjrDJQj7PWhGGciaoAXqC\\\\nCRbF9Q7RejZWbexS9d5XVQVspn9OSOJOYGlemJ6Cyhlj8pLQorRUpgKC5Wr3CGiU\\\\nVxp9VQycRNGNKTMpG84Qf1cwExJgf1pjmVySZ49gNKsL30Fua3tXknE8VIc9uUOz\\\\nwE0DcdY4Sr55tR2VTYBOpTbk+b+OPGHo1nY0MPoYxagFvu9jwpgTEUDgfvkm+326\\\\ndBI+VMGHeoMm+8h4DLRQmDaufF3YJAY/7L0w5AbvVJ9aiLVSeznyeUE1H6R1pnJS\\\\n5UwWpN+fvUbVxV8FySrd4CjFvi09nQyfAaZBNalwF0nr5EjFAB2gH/e+xtK0sKRZ\\\\nc3Cd3UybLkz7YZdXUx/QUfw0kTBm0+o+YaQKU3typNrTYmKyv6M5XvMns9L0ghRA\\\\nkw5bE1VmwnGXIpCnLvEXu0kTK79EEGUluCxQQha5YSpeFFzI0jW4XF91GpmE96fL\\\\nzlMB4PEk/CgO8tOugLP1cgQbDe64K2uT\\\\n=CDWk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.076212Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\\\", \\n \\\"uuid\\\": \\\"939539a2-c78d-4869-ac4c-55f0e015f982\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"13338\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:22 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/939539a2-c78d-4869-ac4c-55f0e015f982\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:23 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"10678\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:24 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"venous sewing\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"4A65CDDCF501F992EFB4541F7D4C26944FAFBAC4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALUnKVGjUNMqT2W2kDAZ0nypIe6LnVZtLItbKV43DxAJduDmsI+a\\\\nuH9vPUHku/EZ+vLQIUvm/rYfSckdbmrqDSalFhlV0yDrcIEbJ1XCDjX1sZuLtPqJ\\\\nIS9bMbxAGSPcLlU/WQpt+fgWdMgKZrTwflPoIAld6aNJzYY6CtzNZjLFABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc3NlA3RVAyUFBZQ0ZTSVJVUVhLSEpGUlA2VlgzWFlEQVoy\\\\nVEVJNTZDM0k3SlhRWkIzUElORUxST0NQRkNNRjc0MkdPWUFCS0xENU9MQlo2Wk1V\\\\nQUVNS1o0RVE3TkRQQkhBR0dJVFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEH1MJpRPr7rE+AwD/RIJy24fNMtXMm4hYPKXAhDT\\\\nFH4RoP5zoMTG9bagE3KFvKwtMuFyiBK7GbySlVtT5/bh6PI8p/MHlAde4HgbjJo0\\\\nKf+cMMZsBg007yiAD6+z581sO3QOPHLGCPxznyxFlgXXaowPWKoy3nR2N0E6OOHJ\\\\nTg0SUzeE5WyLoUb6X8o/\\\\n=KqFc\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.650801Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4803\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"venous sewing\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"4A65CDDCF501F992EFB4541F7D4C26944FAFBAC4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALUnKVGjUNMqT2W2kDAZ0nypIe6LnVZtLItbKV43DxAJduDmsI+a\\\\nuH9vPUHku/EZ+vLQIUvm/rYfSckdbmrqDSalFhlV0yDrcIEbJ1XCDjX1sZuLtPqJ\\\\nIS9bMbxAGSPcLlU/WQpt+fgWdMgKZrTwflPoIAld6aNJzYY6CtzNZjLFABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc3NlA3RVAyUFBZQ0ZTSVJVUVhLSEpGUlA2VlgzWFlEQVoy\\\\nVEVJNTZDM0k3SlhRWkIzUElORUxST0NQRkNNRjc0MkdPWUFCS0xENU9MQlo2Wk1V\\\\nQUVNS1o0RVE3TkRQQkhBR0dJVFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEH1MJpRPr7rE+AwD/RIJy24fNMtXMm4hYPKXAhDT\\\\nFH4RoP5zoMTG9bagE3KFvKwtMuFyiBK7GbySlVtT5/bh6PI8p/MHlAde4HgbjJo0\\\\nKf+cMMZsBg007yiAD6+z581sO3QOPHLGCPxznyxFlgXXaowPWKoy3nR2N0E6OOHJ\\\\nTg0SUzeE5WyLoUb6X8o/\\\\n=KqFc\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.650801Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4803\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:31 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:32 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3212\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:32 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index c81652714..01e737587 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"10678\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:24 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"autonomic planting\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"9A26267D47606188C85DCE6425218127F4A30CF4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEAC/18qqmO34dEIAQ+eI9RLQYhNI27KdP/kmzE9w3yQoXNAaQGMy\\\\nf63rzWxIRLpHS19TzZcu0lhbRq/a6WCgX8JbF+yd3dsUaJ+wpB3TAYCfn6Ydztn3\\\\nxSUHgi6f7OICED8gO/s6uGh9jMho5BcKe1mYfW6TS+QNYbmSJyyYQIZNsu4mshNe\\\\nBfuyw3Lw7vdpgRQ3Va1CoQe1DW2UqM8HktsOa9+prmEjWy6pvGmW+g1kxaMkx4Fn\\\\nUiD6PybUAp9o5TKDU+BOP4QwzpYqg76djsumfckq4gCSS6mBuZZuu2nSxr9JeNVN\\\\n+ZNg0z+32Nv/3bQY/rPjTEcwOodsj8/nQD77GIu6KlRT5TJyzKFUWfAlt5INpBM3\\\\nhdU3lRtzBKGoy2MPWYgViWHzSVtGAqKnT3YX8PuHFOThq/K3vXvmI/v3yHA5EyWv\\\\nlp6mQI3n+awefn+N0yuOaWkZdfiNV//Asa0k/0nMXEVqjQMbmnzwAZ5YI04H+JuT\\\\n0YV1EezaKKv8AfKEqs4CldrWYgsXnWf2JKFHqogZg00MybeflnlmPYPxN4OYgLSK\\\\nn3TLEvM60SPmFk4hxBziBcp3VjbZrttacYWUIhpj53s9A/YwmyclRV4vp1girlcO\\\\nxi4tLwo2cljJZEwDI7ClRyQinvqFqf7tmnka9l5Gb4Pk7kpaOBwVOcds4wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8U01ZTzVMNzdZQldVWDRWR1FHNU9TQTdWV09E\\\\nSVBNSUFDVEVMQ1NYRzUyUk83UEJONzVXNkY0UExRTU9FM000NUw1TENKUk5RTTdY\\\\nR1ZLU09OR041WEkzNEZTQko0SlBXS0w0SU1RST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJECUhgSf0owz0JlMP/RY3viO82a6A\\\\niGTUEtkXZsAlth7tQ/xO739LKNZI4YrpUq2pAUVgDNHEDuh7BvknXg5TfrxxvqHn\\\\ng+kullCLXP4zSCKqH89meU6yxLUqbIUJFYZaAZmgtpO81spQiFuBD8ySLUT8Uj0/\\\\nEKIfJJeTxgqNn/yStPHepAkIp+1uqgO1bwpCkJpJC6F/w4ijDQxYwCYtdQJ3C387\\\\nY2oO0cDYlelxQ+LAwoAxLQjB2nVd4rXBHcWRjWwbcypfvZQ/TfbzKgCG4oV5wpbx\\\\n7Nu/Y+KJxDkSz7zOARse5FSG6ydDu4Orm87/JoOqj5NEAIKlFUp7r06rWMvknCmW\\\\nNYy2CfB+S7YCeF7Wau8lalVQUbJerjpLIzwz/+YQtr6oIWLKEhCkDCIPmbhHrAF8\\\\n3jqs3Rewwun474FyseeEvvFdrY6K18//4RFsv94yaJ/XDR59klkZQQ3avHKNpPZS\\\\n/QuurjNRKwoZa1usPV0vL0+43+L2Qwu8md5HakKX27774lHGJ0xqbhk92Lp0Ccl0\\\\nPy7wudN2rYyok07rfCkq9dt2JTmXk0dA0SXZvMgIuyVQheM1bTRomzOTuvYk1Wcs\\\\njs3u0bVUK/BUebEQj0FphwG1BVmALz9qoTVW1O7oMtBmCMtP3xwSVhr3n6ijF8q1\\\\ncuORC6A8iyzEExGCj8anWuuU9KZQDFjV\\\\n=ZV0m\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:07.900463Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\\\", \\n \\\"uuid\\\": \\\"077969ab-d98d-4c08-a925-668b523d41a0\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"10678\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:25 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/077969ab-d98d-4c08-a925-668b523d41a0\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:26 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:27 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3212\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:33 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3212\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:33 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:35 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:35 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index 8edf7ffe5..03dd6bb76 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370/download\\\", \\n \\\"filename\\\": \\\"1-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370\\\", \\n \\\"uuid\\\": \\\"f474d139-c5d0-44ee-a17b-ed156bd38370\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3061\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:28 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370/download\\\", \\n \\\"filename\\\": \\\"1-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370\\\", \\n \\\"uuid\\\": \\\"f474d139-c5d0-44ee-a17b-ed156bd38370\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3061\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:28 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/f474d139-c5d0-44ee-a17b-ed156bd38370\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:29 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2553\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:29 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546/download\\\", \\n \\\"filename\\\": \\\"1-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546\\\", \\n \\\"uuid\\\": \\\"c4bf98b2-419b-43e0-ae10-b2756a84a546\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:36 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546/download\\\", \\n \\\"filename\\\": \\\"1-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546\\\", \\n \\\"uuid\\\": \\\"c4bf98b2-419b-43e0-ae10-b2756a84a546\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:36 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:37 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:37 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index 961e4addb..c2ab916ba 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2553\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:30 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568/download\\\", \\n \\\"filename\\\": \\\"2-recoilless_spectrum-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\\\", \\n \\\"uuid\\\": \\\"1bcf128b-53be-4376-82d2-9f902aad2568\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"533\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions/1bcf128b-53be-4376-82d2-9f902aad2568\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:32 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:32 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:39 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:39 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:40 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index 3a8db7a1f..3182d6e3c 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3387\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:33 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"9fe956ed-8f3b-4ba8-a091-8e60d036770d\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-recoilless_spectrum-reply.gpg\", \"Content-Length\": \"1149\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 30 Mar 2020 14:51:12 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Tue, 31 Mar 2020 02:54:34 GMT\", \"Etag\": \"sha256:189c1b0650601755a0764355201730f9ca371bd243ba88fd7079cf08616b5a45\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:34 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:40 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"6988a7d6-a00a-4815-a62c-52cdea15aa93\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-ninety-two_naturopath-reply.gpg\", \"Content-Length\": \"733\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 31 Aug 2020 19:21:09 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Tue, 01 Sep 2020 07:23:40 GMT\", \"Etag\": \"sha256:11444d565cadf5759e907b23bf0ebc64df5c6179875a97c1460ba0feb2a77035\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:40 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index 19ae438eb..fea787c85 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:34 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"fb0e4b21-3510-4ca6-83ae-23b832dc5232\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-nebulous_employee-msg.gpg\", \"Content-Length\": \"627\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 30 Mar 2020 14:51:14 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Tue, 31 Mar 2020 02:54:35 GMT\", \"Etag\": \"sha256:328f20a4bf194b0026ac5cac56411398e5ac1c50b53448c27efe0cef0a6d0079\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:35 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:36 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5093\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"3eae9a49-7662-432d-bd6d-5980bc68563b\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-costly_monarchist-msg.gpg\", \"Content-Length\": \"623\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 31 Aug 2020 19:25:03 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Tue, 01 Sep 2020 07:25:08 GMT\", \"Etag\": \"sha256:0df7cd6df7b017bf16a493dd7a6ffafe183022ca8117d1ef5e20597d47abe1fb\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:12 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index 0ae05fae6..99c797b65 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:36 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:45 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 17afb3b83..49ceb1294 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index b325a26d9..d6f9ce4de 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8013\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:38 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:39 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2583\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:40 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:47 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:47 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1517\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:48 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index ba4628541..bf114d9dc 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:40 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/60558b5f-a430-4448-b000-01a1548943cf\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"60558b5f-a430-4448-b000-01a1548943cf\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-nebulous_employee-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies/3147dd42-a570-4f12-845a-2eaa09fa3691\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"3147dd42-a570-4f12-845a-2eaa09fa3691\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/bd94114c-d22b-41c2-a36d-ea58ce149eef\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bd94114c-d22b-41c2-a36d-ea58ce149eef\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-aversive_warmth-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies/330ad093-a28b-49ea-920a-68b28008a03d\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"330ad093-a28b-49ea-920a-68b28008a03d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3387\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:41 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:48 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index cc0f86eaf..5b44552fa 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2044\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:41 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index 558ef901a..c2d6ce5f6 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-03-30T14:54:18.786407Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"196\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:42 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": \\\"\\\", \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-08-31T19:23:28.418013Z\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"192\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:50 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index 603616a6b..01b00fb7d 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:43 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:43 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:50 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:51 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 73ef4bf57..1b5611234 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:44 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/88912c51-5951-4b89-9445-abba4291ad6f\\\", \\n \\\"size\\\": 1217, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"88912c51-5951-4b89-9445-abba4291ad6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:45 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"3-recoilless_spectrum-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies/eeb6daea-8083-4ea7-872f-bd4f84919be7\\\", \\n \\\"size\\\": 1149, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"eeb6daea-8083-4ea7-872f-bd4f84919be7\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:45 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:51 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:52 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"510\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:52 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index 701c1903a..b5bf7b100 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:46 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2583\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:46 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:53 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1517\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:53 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index dd85ec05e..ed879694b 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:47 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2583\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:48 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:54 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1517\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:54 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index e9daae780..1c673a69c 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:48 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:55 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index 6033a80dd..788698fcc 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2044\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:49 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2582\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:50 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:50 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:51 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5092\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:13 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1514\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:13 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:14 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:14 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index ffefc6b7d..93959a9d1 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016/download\\\", \\n \\\"filename\\\": \\\"1-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/086c5527-6343-4d46-8527-e44e8fb5b016\\\", \\n \\\"uuid\\\": \\\"086c5527-6343-4d46-8527-e44e8fb5b016\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e/download\\\", \\n \\\"filename\\\": \\\"2-aversive_warmth-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions/5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\", \\n \\\"uuid\\\": \\\"5fb5f852-9336-422a-b0c7-9cca3bfe292e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2044\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:51 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2582\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:52 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b/download\\\", \\n \\\"filename\\\": \\\"2-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/3cc893a6-9898-451d-8430-1b8c67092c8b\\\", \\n \\\"uuid\\\": \\\"3cc893a6-9898-451d-8430-1b8c67092c8b\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:53 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223/download\\\", \\n \\\"filename\\\": \\\"1-nebulous_employee-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 627, \\n \\\"source_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions/f42df589-5c91-4834-a72f-c0ff1caf4223\\\", \\n \\\"uuid\\\": \\\"f42df589-5c91-4834-a72f-c0ff1caf4223\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:53 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5092\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:15 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1514\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:15 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:16 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:16 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index 48e02b7ce..67c4727f3 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:54 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:55 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:56 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:57 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index 5bd912c30..bc62483a8 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:55 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:57 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_logout.json b/data/test_logout.json index 3ff6f0383..2b60c4d9c 100644 --- a/data/test_logout.json +++ b/data/test_logout.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:56 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:58 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 675072d9a..510446b09 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:56 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:29 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"5-recoilless_spectrum-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"dee2acb6-00d1-48fc-9d7c-ffc18afbe017\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:30 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:48 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"5-costly_monarchist-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"bd5dd4da-1424-4265-970c-369365644f55\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"145\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:48 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source_with_uuid.json b/data/test_reply_source_with_uuid.json index b91a83c13..539e85b0a 100644 --- a/data/test_reply_source_with_uuid.json +++ b/data/test_reply_source_with_uuid.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:30 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"6-recoilless_spectrum-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"147\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:49 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"6-costly_monarchist-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"145\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index 76940c04f..641c955cc 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-03-30T22:54:18.785946Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"a46e5678-32ab-4c9d-94d6-ef46214a105e\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU4NTYwODg1OCwiaWF0IjoxNTg1NTgwMDU4fQ.eyJpZCI6MX0.3ECVQJecByeF0bYcf0nHSPayyztBjSZuLMwAIaT5hnA\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:54:18 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:31 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:32 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:33 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recoilless spectrum\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2D1A43FA3827689A313FA006D96A534FEC2E5D98\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACwa/C/eH1rp8+uKh+n5ckZkbSQb33L94aTpgiqqz63FXejFiFv\\\\neEjrgroo+YfpimNRxW44w+R1PU8dq+GjJCTI/4HFGaYum3NfS6+dnEhZSdYpuRX5\\\\nk57GSg+0zQrx98kkcuHpJn1ESsuaqsscyvKD/eU9gRO2tMgQPt33Ms6iLp4VzyIj\\\\nyaxJveXyLnW/M9qb+QKR2nkaD6AKL+AZtGjnq6Rn3OCjqaziLO//tkTZ9ynCj57D\\\\nehQJhAY4bZ04KSk/+vWZAkF3Zc6tDcNdrIPkMTQWMjk9DlcNA2wmLZp6fVzv5u2x\\\\nwxls62Ou7U6sfHBNPv9zo1jSDk3laYhucFyEw9S6FYEMTCDW40uDEaKM5O+f0dqg\\\\nqVZ6kYuSVcsBKuX8P9pI7TExu59f/ig2ma07nGXZDSI7QPLGLlz1C4GDl7KHVGp6\\\\n66wqqDukwjtdvWQcafoaUp6lm3muiJA7fz543MxOYZqIFFdOMipBXloCfrYUgH4J\\\\n6zhUSSYzvbE1iPJswkqQ94aY39XIDWX64GLRm28BZGTKl72Q/rbwY3Vd5B71c8Ci\\\\n3rvXEzIA8ekNakaO1604vlWcuyI2YGYzelVSf7FSYFWzaIM8Js6kmNtoiHkhn3tz\\\\nd4UFPU6swiNHeRbvTw/S4bKMnEqfNFzWfoIqUzIj/bk6yKteJ1ptRd1E6wARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8T1NGWVpOR01aQVBIV1RSWVhLNVczVTRHSkxN\\\\nTUhXV0tYRU83T0lPVVNXRlNPSFhWMklWUlAzUjRHVzRFVTU0QVI1WU9FNFAyNTJE\\\\nTFFXNUlMUEtSU0c3WlJCM0VRQVVQWTRHVzRNQT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENlqU0/sLl2Yi/0QAJ2eGxVGmjiV\\\\n/A4194JvhNLTdf472h72esvvyfVSy1gEGgIFLjEU9VBwsE62vkm1zxf9eigUb3L5\\\\n/OtXcDDVQQfJGd1j2Tl+gmddLBRn2sV4AU08rOD5P/umyhZlG7F1bRkMJzz2soR7\\\\nKn5H3cGZFKicSY3zZaz997QrQcFUgwdVn7EvBOOC96tpV4VQg6QjUuRcvzZN7nv2\\\\n14Re/oCRrgFB6vEcb1n8oDtFBYyLibQ7YwtkXqIwBhqnVB8d2IkMR/C53yVGCpeX\\\\ndJq4SiIcMFFys/aXnzkqDow7kbdtBG0d8LKZEIueevefvOmQs+Rcl6jmsNMi7WRg\\\\nNlJHRU2yt9sxxstSAWptzY4uOUh7DRbKTQs9i1X7i/73AjWCjWeOM4M6IaEA6L62\\\\nuVI55djO0Nhyys87/pqDy6oNIFyqXeB7suyTTBalDv739b/6YrrAB5GAPYf027Ly\\\\n035W9gn4Ycojgc9W3R0cLa0dGFWHHKwFSp7YFhjziLXhjwjf575H77rp66JZ3/Lh\\\\nerK4u6oVBiNA5Y0xRJTcnGD8qvRBOz8x9k7Q1x+ky35XLhgOjr0sYTS1XVHsImAL\\\\nDJrYsDx80Cdd79sWE3pXc9cMbgtQmSciNZ673UFzTjbJT+U+EA9wGG78nyE2bJqQ\\\\nJZJGg8Hasz6iAHaqB0tem56VB73xOxGU\\\\n=1ia6\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:12.607557Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\", \\n \\\"uuid\\\": \\\"e0b52ffe-7282-4dd2-87a3-4336e979ef07\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"nebulous employee\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"D3ED33F4A7F835F78C57B406338D734E4EF5A69A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACxmDbJlCOY7UU5qPtxtIaIdBCRCRxpzSz51ve7JvfLIWjaIIG8\\\\nIwFf09Lo/4jueqt94Y442DCLY1QLgz2owHVHNrvHWhR9hCg3QFHxwyILhkN/lCK0\\\\n4It8Hni+KgXWKkybY5OJPP9RcSrkhgZqhvaqvLxQAb5K0j3HvObykNmCcuie4S31\\\\nxKbW2eJoU6F0a0hQ5fZUHSkik2FinR9kkM6tm9oB1VVke5050WjOjzJYjwpg43XH\\\\nm/hDxSkJTLvMCRoWYYe9xKVR+hizyenZtEwdBl63wLposWj1CFyp7PIVFb/g/IRF\\\\nS08j+w4eRq2xc32/Y9CcZ8PYrzcjDMI0mLxDVoKcGdq4i8RhIRk3DaGz3O2zDQ2L\\\\npnibQ/73ks/Mf4SZjxdAhrOMNvyXeVNZdo8bDV8m10PyARLUBoExSTjAqrHNtRLH\\\\nLdTpQFOl+2w3UtsVGgc5OIgzYNAae8f2weJl9gKwmdXavH554jRHlofgban9AXq7\\\\nYfg1EWGftO3aAYDn06kIHuJlPt9ahSRxrlFw3S7dXJ6Q96iFMYflc/npwn1insU3\\\\nIU8aEo8rHC3tteO+Bkhcege8yISlbu2V5TGzN3Gac3wERHwxiZXhnfTgqn5ZOtsv\\\\nuLZ8VN315BKNhsxhtXRY8ZP/F/GsNlmerL+wuxN1o0Md/wjKC0V7NSE/aQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TDRST1UzRVFXSkRURkk1NzIyQkczNlZQWUk3\\\\nQlRPWTNXRlVSWVUyUVJPTUVVTTJBNk5HTFc2Rkc3UTNWRlNKM0lLVzZESE5OUFQy\\\\nNEpDTktYM1BUSlo2SVRLNERYTjNYQ0VWUVNKUT0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEDONc05O9aaaOJYP/igUnDZsGK42\\\\nyGqe3yUOBZlPU3gzo8mQ1nmEctalBsBG8Vfn2CNt4vgtHLeH2G1bgdCYoTw4sgFA\\\\nGuWdDHRRWzVsJ3G214Ci90pw2DMEgTc43IS0EgwuH1GMagJa1P/xcRHI7TmzC3rc\\\\nkLZPd6M2PYr34t+TayTfh7FJmDrkx4dgaAXBL7PJo0o6rTezVSGkH2STdJQAP4jH\\\\nJ0mwKD/jsxrFwEMdRJFLrGm1pcaubLdeVZEwdGCLGCy8KI+Ded3AsBuYQrK25znh\\\\nZ+GeShlGccU5PnqIPitjOEh7kfdd3Wi2xg5Dp5muHD/nN95cEe5gRF8dtudFLzHx\\\\n/aRmd+h7rNprS8sS4xSbPh9u77D1xHzU6Zl/E2928Ju7zjZ9rLlTHAwSFtOnq1fv\\\\n5/uTv43c3owKTy9P/s8jEk7d+f6FK8weD/jeRqu8fCJg4xTGEy9N/lMH958e2rnX\\\\nyNNTKz1szaD3fPMyf8dxOw9/e6jpeiqNR7u0xAx/I1hhzSnfYKnm3DXfFsFnJ7y8\\\\n38P4ozWcR1wB0rtkB4TzqWN7Q3KpRXHf0B8sQhhblw+Ht2oBJVzJ2wxYd30xdxeM\\\\naxhkZUUE1H+NJUJKi9G4hP8Lv5CWPMXHKhvISR8O1YNmQrtFtZqKdfBOakzP9y1D\\\\nub7L1IxOU8H4nMyB9gxajOtBKD5dN8eQ\\\\n=G+w9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:14.828527Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\", \\n \\\"uuid\\\": \\\"147adb2c-9bb6-4849-997a-f9b6fcf8d874\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"aversive warmth\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"E232F6D3806215A57D347C71EC0F171165F3ECB1\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmQINBFGRfoABEACq/+ohYrMIz6tY41OKX/nu98EdqSiFS6GqatHYhqfUXF3ILalS\\\\nCjNtzoQb/0hJh6dmN75+NswCAxPC4rQdfeds3rMgDxsgnQUfN+hA6raiRbg2BgmI\\\\nt7XMK0XpfGWcdw/oy5VsMnWFSGeKovg1q00RILySUYZ16k8xAPhLUVsghtfTgvIg\\\\nrQz0sJGpFlR/KtWJKx8rFz35vq7bIICHW9YTvAy6m9hv5av4mdamI4PIIvpr2eBz\\\\nA1BQCRVaj1mjG+3S2z7i+gcbxO5LGop7gfBNMpt0+R5KdMaLgwl2BEkzhBK+2PD3\\\\n51KbD1cFxoN48/v2C/SucYw6eBNfnCqEYqPR4I3nAsmyWnR9DA8bYHRA4jkISGR7\\\\nIohtrGKZ5rnmF25dNWEGxxB6RA/z/YxDK+hT5rOBiayZVt2ZEA4a6GfyWabhDEmM\\\\nFu3pA6xdloIM90FyV6kWJJlQovNMW1Gk1XhfhcQpTya0lzSAeimlJC4az/4tDzfG\\\\nSnOv8/GYkrXcDFlxkSfXQxgR/v+lYlHLs2PqSJdOaqViu+y2Cy4I40VN3LEs3Qdn\\\\njVDFDfU2D1dzKmsRLiOvia+VIz/kGamgB51iUuLoWMgd2dpvA5dWJegSH20tlVf9\\\\no3J+nzGQZIs2Kb0ixz30WdzkqkmBbyPgRA0PMtHzYhUXB1oXovNOMSeyQQARAQAB\\\\ntHxBdXRvZ2VuZXJhdGVkIEtleSA8TVZJNFVIM01INVE3U1RBTE1PRFdPSFkySDdQ\\\\nSzRYN1VVVDVTSlNXWkJHQk5UNlJEUkozU0FWNkJCSUQ0VEtBUVpQS08ySUpCSDRZ\\\\nQjNDVlRNTzVUTFozVFVYMkRaTVdSNUdSMzQzST0+iQI3BBMBCgAhBQJRkX6AAhsv\\\\nBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEOwPFxFl8+yx4iMQAJ7DENZ/cO2W\\\\ncaYBsQgHuoCRFfoDsgJoGukzSUrewgQ5+mAT+As41PEk1lxjTQlO6L2wBp7jhNkf\\\\nFnCvAF5hQdd+Yotr15dXvVtSeFQ9ttmrUw3Gwt5PuzwR8jzJKUXs4SHKmFaXpSa/\\\\nn4Az8sT/NYx/Ep/HQb0iEqueD3F8KeWP0YCQZ4exdmH3/LNidw2gb8MmbxSk+VXu\\\\nDboULethdtHQwv0DcSLJ7f/E7zU4G8zsdu8WzGeUiPRwYxEl8X2yniRt95Uq3ksK\\\\nw2qeXmgv+p9jmm1DnbB3EJyRAs5p0/FReYRW5K8Ow5s64TMBimFAaqWfYy7qN4A0\\\\nSLCeG1gvUQnv33U3FXM00tO0T25zxgHaU1p3sWeTM9rroUKuVmxlIBuqpIXM61LT\\\\n58rt21iN/tNPv/1T4fCAxNpMGR1QSs5xHXDTddrKRPlkzJBooAs2n/gcOnexgaac\\\\nuHH/ARd/Ituj5YdqKCQ1yiBLhuf7hqY7NKgfBIrN9j0+dXFSF1i63n+R+NEqhjxm\\\\nV7+K4rmr8S60sCZaFmWTb1dBGGNgujDwfK/qVbh1wekmyXPy78mof2ngxPnlnFF3\\\\nYVKUMpXE8TXqFoG64eh1Yf3Ltqx9CC3jDnDn7mmVWZ8rHieVOcGTu36fo8SsFfaX\\\\nbSNYL87mETzgwY2OCM6nhwNGci9BYTZ2\\\\n=PPUv\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-03-30T14:51:17.237357Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\", \\n \\\"uuid\\\": \\\"bdf1d46f-d54d-4d5d-bb24-40f513e51399\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8012\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 30 Mar 2020 14:55:33 GMT\"}, \"version\": \"0.2.0-dev-20200330-060315\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:50 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:50 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:51 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:51 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index ff03c7703..278cd2171 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -103,8 +103,8 @@ def __init__( self.token = None # type: Optional[str] self.token_expiration = None # type: Optional[datetime] self.token_journalist_uuid = None # type: Optional[str] - self.journalist_first_name = None # type: Optional[str] - self.journalist_last_name = None # type: Optional[str] + self.first_name = None # type: Optional[str] + self.last_name = None # type: Optional[str] self.req_headers = dict() # type: Dict[str, str] self.proxy = proxy # type: bool self.default_request_timeout = default_request_timeout or DEFAULT_REQUEST_TIMEOUT @@ -244,8 +244,8 @@ def authenticate(self, totp: Optional[str] = None) -> bool: self.token = token_data["token"] self.token_expiration = datetime.strptime(token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ") self.token_journalist_uuid = token_data["journalist_uuid"] - self.journalist_first_name = token_data["journalist_first_name"] - self.journalist_last_name = token_data["journalist_last_name"] + self.first_name = token_data["journalist_first_name"] + self.last_name = token_data["journalist_last_name"] self.update_auth_header() diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index 5e5443b12..f0525e519 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -59,8 +59,10 @@ class Reply: def __init__(self, **kwargs) -> None: # type: ignore self.filename = "" # type: str - self.journalist_username = "" # type: str self.journalist_uuid = "" # type: str + self.journalist_username = "" # type: str + self.journalist_first_name = "" # type: str + self.journalist_last_name = "" # type: str self.is_deleted_by_source = False # type: bool self.reply_url = "" # type: str self.size = 0 # type: int @@ -76,8 +78,10 @@ def __init__(self, **kwargs) -> None: # type: ignore for key in [ "filename", - "journalist_username", "journalist_uuid", + "journalist_username", + "journalist_first_name", + "journalist_last_name", "is_deleted_by_source", "reply_url", "size", diff --git a/tests/test_api.py b/tests/test_api.py index b47a2aaaf..24f3e3894 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -70,8 +70,8 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.journalist_first_name, (str, type(None)))) - self.assertTrue(isinstance(self.api.journalist_last_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index f7ba35fa3..819ddfa1b 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -66,8 +66,8 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.token, str)) self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.journalist_first_name, (str, type(None)))) - self.assertTrue(isinstance(self.api.journalist_last_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) @dastollervey_datasaver def test_get_sources(self): From c69d54c927e75daf2b0607c732330d9bc51d8ad9 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 3 Sep 2020 15:02:40 -0700 Subject: [PATCH 384/751] securedrop-sdk 0.1.1 --- CHANGELOG.md | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7eebcc605..a90b6b8df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.1.1 +----- + +* Add journalist name to Reply object (#125). + 0.1.0 ----- diff --git a/setup.py b/setup.py index b3860bf77..2120352c9 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.1.0", + version="0.1.1", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 590926b5f2f76aa3ef8ba777dfa35baf59355b0f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 28 Aug 2020 18:03:54 +0530 Subject: [PATCH 385/751] Updates README with better instructions for test data --- README.md | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b5d596f5d..faee84db6 100644 --- a/README.md +++ b/README.md @@ -91,12 +91,41 @@ sd-svs sd-journalist allow @anyvm @anyvm deny ``` -The above mentioned setup can also be created using `securedrop-workstation` project. +Now, first we have to verify that this setup works. For that, comment out the +`@dastollervey_datasaver` decorator in the setup method of `test_apiproxy.py`. +By commenting out that python decorator we make sure that our tests will do +real call to the proxy VM. You can do `journalctl -f` in `dom0` to see the log +entry that `sd-svs` is making a call to the `sd-journalist` vm, and then run +one initial test. -Now, delete any related JSON file under `data/` directory, or remove all of -them, and then execute ``make test TEST=tests/test_apiproxy.py``. This is -command will generate the new data files, which can be used in CI or any other -system. +``` +make test TESTS=tests/test_apiproxy.py::TestAPIProxy::test_api_auth +``` + +Remember to check the logs in `dom0`, you should see an entry like below. + + +``` +Aug 28 15:45:13 dom0 qrexec[1474]: securedrop.Proxy: sd-svs -> sd-journalist: allowed to sd-journalist +``` + +If the setup is good, we should see the test passing. + +## Changing a test or adding a new test in test_apiproxy.py + +Say we are modifying the `test_get_sources`, now to regenerate proper test data +for the same, we should first comment out the `dastollervey_datasaver` +decorator from both `setUp` and `test_get_sources` methods. Then also remove +the `setUp.json` and `test_get_sources.json` files from `data/` directory. Now, +when we will run that one test case, it will connect to the server and fetch +real data. If you wait for 60 seconds for the next call but this time uncomment +the `dastollervey_datasaver` decorators in those two methods, it will now again +connect to the server, and also create fresh JSON data files which you can then +commit to the repository. The same steps has to be taken for any new test case +you are adding. + +If your test is modifying any state in the server, then before you rerun the +test for fresh test data, you should restart the server. **Note:** Remember that file download checks don't read actual file path in the `APIProxy` tests as it requires QubesOS setup. You can manually uncomment those lines to execute them on QubesOS setup. From 77620fc018dd696ca3a31ac6823b41535f7b3173 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 31 Aug 2020 17:00:09 -0700 Subject: [PATCH 386/751] update readme --- README.md | 204 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 137 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index faee84db6..8089f448e 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,7 @@ This SDK provides a convenient Python interface to the [SecureDrop Journalist In The SDK is currently used by the [SecureDrop Client](https://github.com/freedomofpress/securedrop-client) that is a component of the SecureDrop Workstation. When used in Qubes OS, the SDK uses the [securedrop-proxy](https://github.com/freedomofpress/securedrop-proxy) service, as the VM which runs the client does not have network access by design. -# Development - -## Quick Start +# Quick Start ```bash virtualenv --python=python3 .venv @@ -26,108 +24,180 @@ pip uninstall securedrop-sdk pip install git+https://github.com/freedomofpress/securedrop-sdk@my_branch#egg=securedrop-sdk ``` -## Testing +# Running tests + +To run all tests and checks, run: -The tests are located in the `tests` directory. This project uses [vcrpy](http://vcrpy.readthedocs.io/en/latest/) to record and then reply the API calls so that -developers will have repeatable results so that they may work offline. `vcrpy` stores YAML -recordings of the API calls in the `data` directory. +```bash +make check +``` -To run all the test cases, use the following command. +To run all tests, run: ```bash make test ``` -To run a single test, use this following command, replace the test case name at the end. +To run all tests that make API calls over HTTP, run: ```bash -make test TESTS=tests/test_api.py::TestAPI::test_error_unencrypted_reply +make test TESTS=tests/test_api.py ``` -To test against a live development server, you will need to run the SecureDrop -developent container from the main SecureDrop repository on your host. This -can be done via `NUM_SOURCES=5 make -C securedrop dev`. +To run all tests that make API calls over qrexec, run: -In this repo, comment out the `@vcr` decorator of the `setUp` method in -`test_api.py` and execute which ever tests you want to run. If you want to -re-run all tests against the API, remove all the `.yml` files in the -`data` directory. +```bash +make test TESTS=tests/test_apiproxy.py +``` -## Generating test data for `APIProxy` +To run a single test, specify file name, class name, and test name, e.g.: -To test or to generate new test data file for the `APIProxy` class in -`test_apiproxy.py` file, you will have to setup -[QubesOS](https://qubes-os.org) system. +```bash +make test TESTS=tests/test_api.py::TestAPI::test_get_sources +``` -There should be one VM (let us call it `sd-journalist`), where we can run -latest securedrop server code from the development branch using -``NUM_SOURCES=5 make -C securedrop dev`` command. The same VM should also have -`securedrop-proxy` project installed, either from the source by hand or using -the latest Debian package from the FPF repository. +# Creating and updating tests -Below is an example configuration for proxy `/etc/sd-proxy.yaml`: +When tests are run, they replay recorded API request and response data instead of making actual API calls to a server. This is why tests can pass even when there is no server running. If the server ever changes its API or you want to add new tests that make API calls, then you'll need to record new request and response data by following the steps outlined below. -``` -host: 127.0.0.1 -scheme: http -port: 8081 -target_vm: sd-svs -dev: False -``` +**Note:** We have a CI test that does not use the recorded API request and response data in order to make sure we are testing the latest changes to the SDK against the latest server API (see `test-against-latest-api` in https://github.com/freedomofpress/securedrop-sdk/blob/main/.circleci/config.yml). + +We use [vcrpy](https://vcrpy.readthedocs.io/en/latest/) to record and replay API calls made over HTTP and a decorator called `@dastollervey_datasaver` to record and replay API calls made over qrexec. Each request made from a test and its response from the server is stored in a "cassette" in the `data` directory. Tests replay these cassettes instead of making actual API calls to a server. -Then we can create our second developent VM called `sd-svs`, in which we can checkout/develop -the `securedrop-sdk` project. The required configuration file is at `/etc/sd-sdk.conf` +If you run the tests and see the following vcrpy warning, then you'll need to re-record cassettes because none of the existing cassettes contain the expected API call and we don't allow existing cassettes to be overwritten: ``` -[proxy] -name=sd-journalist +Can't overwrite existing cassette ('') in your current record mode ('once'). ``` -We should also add a corresponding entry in `/etc/qubes-rpc/policy/securedrop.Proxy` file -in **dom0**. +The steps to generate new cassettes are split into two sections based on communication protocol: [Generating cassettes for API calls over HTTP](#generating-cassettes-for-api-calls-over-http) and [Generating cassettes for API calls over qrexec](#generating-cassettes-for-api-calls-over-qrexec). + +## Generating cassettes for API calls over HTTP + +1. Start the server in a docker container by running: + + ```bash + NUM_SOURCES=5 make dev + ``` + +2. [Skip if adding a new test] Delete the cassettes you wish to regenerate or just delete all yaml files by running: + + ```bash + rm data/*.yml + ``` + +3. Generate new cassettes that make API calls over HTTP by running: + + ```bash + make test TESTS=tests/test_api.py + ``` +Note: Some tests alter source and conversation data on the server so you may need to restart the server in between test runs. + +## Generating cassettes for API calls over qrexec + +In order to generate cassettes for tests that make API calls over qrexec, you'll need to run the server and proxy on a separate VM. If this is the first time you are generating cassettes, first follow the steps outlined in the [Test setup for qrexec communication](#test-setup-for-qrexec-communication) section, which will help you set up a new VM called `sd-dev-proxy`. + +Once your proxy are set up, follow these steps: + +1. Start the server in a docker container on `sd-dev-proxy` by running: + + ```bash + NUM_SOURCES=5 make dev + ``` + +2. [Skip if adding a new test] Delete the cassettes you wish to regenerate or just delete all json files by running: + + ```bash + rm data/*.json + ``` + +3. Comment out the `@dastollervey_datasaver` decorator above the test you want to generate a new cassette for or just generate all new cassettes by commenting out the decorator above all methods in the `test_apiproxy.py::TestAPIProxy` class. + +4. Make qrexec calls to the server and collect real response data: + + ```bash + make test TESTS=tests/test_apiproxy.py + ``` + +5. Uncomment the `@dastollervey_datasaver` decorator wherever you commented it out. +6. Record new cassettes from the response data collected in step 4: + + ```bash + make test TESTS=tests/test_apiproxy.py + ``` + +**Note:** If you get a 403 error it's becuase the test is trying to reuse an old TOTP code, so wait for 60 seconds and try again. Some tests alter source and conversation data on the server so you should restart the server in between test runs. + +## Test setup for qrexec communication + +If this is the first time you are generating new cassettes that make API calls over qrexec, then you'll need to set up a new VM for running the server and proxy following these steps: + +1. Create a new AppVM based on the **debian-10** template called **sd-dev-proxy**. +2. Install the lastest proxy package: + + ```bash + wget https://apt.freedom.press/pool/main/s/securedrop-proxy/.deb + dpkg -i .deb + ``` + +3. Create `/etc/sd-proxy.yaml` with the following contents (assuming the VM you'll be running the SDK tests from is called **sd-dev**): + + ``` + host: 127.0.0.1 + scheme: http + port: 8081 + target_vm: sd-dev + dev: False + ``` + +4. Install Docker. +5. Clone `securedrop` on **sd-dev-proxy** and run the server in a Docker container: + + ```bash + git clone https://github.com/freedomofpress/securedrop + virtualenv .venv --python=python3 + source .venv/bin/activate + pip install -r securedrop/requirements/python3/develop-requirements.txt + NUM_SOURCES=5 make dev + ``` + +6. Open a terminal in **sd-dev** and create `/etc/sd-sdk.conf` with the following contents: ``` -sd-svs sd-journalist allow -@anyvm @anyvm deny +[proxy] +name=sd-dev-proxy ``` -Now, first we have to verify that this setup works. For that, comment out the -`@dastollervey_datasaver` decorator in the setup method of `test_apiproxy.py`. -By commenting out that python decorator we make sure that our tests will do -real call to the proxy VM. You can do `journalctl -f` in `dom0` to see the log -entry that `sd-svs` is making a call to the `sd-journalist` vm, and then run -one initial test. +7. Modify `/etc/qubes-rpc/policy/securedrop.Proxy` in **dom0** by adding the following line to the top of the file so that the sdk tests can make calls to the proxy: ``` -make test TESTS=tests/test_apiproxy.py::TestAPIProxy::test_api_auth +sd-dev sd-dev-proxy allow ``` -Remember to check the logs in `dom0`, you should see an entry like below. - +8. Modify `/etc/qubes-rpc/qubes.Filecopy` in **dom0** by adding the following line so that the proxy can send files over qrexec to the sdk: ``` -Aug 28 15:45:13 dom0 qrexec[1474]: securedrop.Proxy: sd-svs -> sd-journalist: allowed to sd-journalist +sd-dev-proxy sd-dev allow ``` -If the setup is good, we should see the test passing. +9. Verify qrexec communication between `sd-dev-proxy` and `sd-dev` is set up properly. + a. Run the server on `sd-dev-proxy` if it isn't already running: -## Changing a test or adding a new test in test_apiproxy.py + ```bash + NUM_SOURCES=5 make dev + ``` + b. With the main branch of this repo checked out on `sd-dev`, comment out the `@dastollervey_datasaver` decorator above the `test_apiproxy.py::TestAPIProxy::setUp` method so that `test_api_auth` makes an actual API call over qrexec. + c. Run `test_api_auth`: -Say we are modifying the `test_get_sources`, now to regenerate proper test data -for the same, we should first comment out the `dastollervey_datasaver` -decorator from both `setUp` and `test_get_sources` methods. Then also remove -the `setUp.json` and `test_get_sources.json` files from `data/` directory. Now, -when we will run that one test case, it will connect to the server and fetch -real data. If you wait for 60 seconds for the next call but this time uncomment -the `dastollervey_datasaver` decorators in those two methods, it will now again -connect to the server, and also create fresh JSON data files which you can then -commit to the repository. The same steps has to be taken for any new test case -you are adding. + ```bash + make test TESTS=tests/test_apiproxy.py::TestAPIProxy::test_api_auth + ``` -If your test is modifying any state in the server, then before you rerun the -test for fresh test data, you should restart the server. + **Note:** If the test fails, run `journalctl -f` in **dom0** before trying again to see if communication between `sd-dev` and `sd-dev-proxy` is being denied. A successful log looks like this: -**Note:** Remember that file download checks don't read actual file path in the `APIProxy` tests as it requires QubesOS setup. You can manually uncomment those lines to execute them on QubesOS setup. + ``` + Aug 28 15:45:13 dom0 qrexec[1474]: securedrop.Proxy: sd-dev -> sd-dev-proxy: allowed to sd-dev-proxy + ``` # Releasing From bf75744fdbc08d75e1e731c3e4ec5c7be17b767c Mon Sep 17 00:00:00 2001 From: mickael e Date: Thu, 1 Oct 2020 15:51:41 -0400 Subject: [PATCH 387/751] Create codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 71 +++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000..0e907d316 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,71 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +name: "CodeQL" + +on: + push: + branches: [main] + pull_request: + # The branches below must be a subset of the branches above + branches: [main] + schedule: + - cron: '0 3 * * 6' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # Override automatic language detection by changing the below list + # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] + language: ['python'] + # Learn more... + # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + # We must fetch at least the immediate parents so that if this is + # a pull request then we can checkout the head. + fetch-depth: 2 + + # If this run was triggered by a pull request event, then checkout + # the head of the pull request instead of the merge commit. + - run: git checkout HEAD^2 + if: ${{ github.event_name == 'pull_request' }} + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From 00d5ba14576c7551a48877b5d720f568380a1f19 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 1 Oct 2020 17:53:51 -0700 Subject: [PATCH 388/751] Use qubesdb-read instead of gethostname This prevents misidentification of Whonix VMs, which always use 'host' as the hostname. --- sd-rsyslog | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/sd-rsyslog b/sd-rsyslog index 09432263d..4f62d95e3 100644 --- a/sd-rsyslog +++ b/sd-rsyslog @@ -30,11 +30,11 @@ import os import logging import configparser from subprocess import Popen, PIPE -from socket import gethostname # Global definitions specific to your plugin process = None + class RecoverableError(Exception): """An error that has caused the processing of the current message to fail, but does not require restarting the plugin. @@ -74,7 +74,6 @@ def onInit(): # emitted you must set 'level' to logging.DEBUG above.) logging.debug("onInit called") - global process if not os.path.exists("/etc/sd-rsyslog.conf"): print("Please create the configuration file at /etc/sd-rsyslog.conf", file=sys.stderr) @@ -82,7 +81,26 @@ def onInit(): config = configparser.ConfigParser() config.read('/etc/sd-rsyslog.conf') logvmname = config['sd-rsyslog']['remotevm'] - localvmname = config['sd-rsyslog'].get('localvm', gethostname()) + localvmname = config['sd-rsyslog'].get('localvm', None) + + # If no localvm name is specified, it must be supplied by Qubes OS. If this + # fails, we exit, to avoid falsely identified logs. + if localvmname is None: + try: + get_vm_name_process = Popen(["/usr/bin/qubesdb-read", "/name"], + stdout=PIPE, stderr=PIPE) + vm_name_output, vm_name_error = get_vm_name_process.communicate() + if vm_name_error != b"": + print("Error obtaining VM name via qubesdb-read:") + print(vm_name_error.decode("utf-8").strip()) + sys.exit(1) + localvmname = vm_name_output.decode("utf-8").strip() + except FileNotFoundError: # not on Qubes? + print("Could not run qubesdb-read command to obtain VM name.") + print("Note that sd-rsyslog must be run on Qubes OS if no") + print("localvm name is specified in the configuration.") + sys.exit(1) + process = Popen( ["/usr/lib/qubes/qrexec-client-vm", logvmname, "securedrop.Log"], stdin=PIPE, @@ -144,7 +162,7 @@ via stdout. In most cases, modifying this code should not be necessary. """ try: onInit() -except Exception as e: +except Exception: # If an error occurs during initialization, log it and terminate. The # 'omprog' action will eventually restart the program. logging.exception("Initialization error, exiting program") @@ -191,4 +209,3 @@ if endedWithError: sys.exit(1) else: sys.exit(0) - From df49576e43c28bf77edea0ca98338b06116e398c Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Sat, 3 Oct 2020 22:42:37 -0400 Subject: [PATCH 389/751] Updated dependencies to clear safety checks - updated urllib3 from 1.25.8 to 1.25.10 - updated pip-tools to >=5.0.0 to clear pip-related error - Updated Makefile to pin pip and setuptools in dev requirements --- Makefile | 2 +- dev-requirements.in | 2 +- dev-requirements.txt | 28 ++++++++++++++++------------ requirements.in | 4 ++-- requirements.txt | 38 ++++++++++++++++++++++++-------------- 5 files changed, 44 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 81dcf37f4..9c754f119 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ isort: ## Run isort for file formatting .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in + pip-compile --allow-unsafe --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in pip-compile --generate-hashes --output-file requirements.txt requirements.in .PHONY: test diff --git a/dev-requirements.in b/dev-requirements.in index 8f8b1ef46..e4fe026d6 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -6,7 +6,7 @@ mccabe==0.6.1 multidict==4.4.2 mypy==0.761 mypy-extensions==0.4.3 -pip-tools==4.3.0 +pip-tools>=5.0.0 pycodestyle==2.4.0 pyflakes==2.0.0 six==1.11.0 diff --git a/dev-requirements.txt b/dev-requirements.txt index f2d820fb3..2bdc0745f 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -140,9 +140,9 @@ pathspec==0.7.0 \ --hash=sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424 \ --hash=sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96 \ # via black -pip-tools==4.3.0 \ - --hash=sha256:06efa50b7089b2abbfcf4b47684960538af74669e801e69a557cb8a1c6ad6674 \ - --hash=sha256:79e8137a2b96906ccaed0151e1df42daf386d51abb80286173d112b5296a5775 \ +pip-tools==5.3.1 \ + --hash=sha256:5672c2b6ca0f1fd803f3b45568c2cf7fadf135b4971e7d665232b2075544c0ef \ + --hash=sha256:73787e23269bf8a9230f376c351297b9037ed0d32ab0f9bef4a187d976acc054 \ # via -r dev-requirements.in pycodestyle==2.4.0 \ --hash=sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83 \ @@ -188,9 +188,9 @@ regex==2020.1.8 \ --hash=sha256:e7c7661f7276507bce416eaae22040fd91ca471b5b33c13f8ff21137ed6f248c \ --hash=sha256:ecc6de77df3ef68fee966bb8cb4e067e84d4d1f397d0ef6fce46913663540d77 \ # via black -requests==2.20.0 \ - --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ - --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 \ +requests==2.22.0 \ + --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ # via -r requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ @@ -228,9 +228,9 @@ typing-extensions==3.7.4.1 \ --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 \ # via mypy -urllib3==1.24.3 \ - --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ - --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb \ +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ # via -r requirements.in, requests vcrpy==2.0.1 \ --hash=sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3 \ @@ -256,7 +256,11 @@ yarl==1.2.6 \ # via -r dev-requirements.in, vcrpy # The following packages are considered to be unsafe in a requirements file: -setuptools==47.1.1 \ - --hash=sha256:145fa62b9d7bb544fce16e9b5a9bf4ab2032d2f758b7cd674af09a92736aff74 \ - --hash=sha256:74f33f44290f95c5c4a7c13ccc9d6d1a16837fe9dce0acf411dd244e7de95143 \ +pip==20.2.3 \ + --hash=sha256:0f35d63b7245205f4060efe1982f5ea2196aa6e5b26c07669adcf800e2542026 \ + --hash=sha256:30c70b6179711a7c4cf76da89e8a0f5282279dfb0278bec7b94134be92543b6d \ + # via pip-tools +setuptools==50.3.0 \ + --hash=sha256:39060a59d91cf5cf403fa3bacbb52df4205a8c3585e0b9ba4b30e0e19d4c4b18 \ + --hash=sha256:c77b3920663a435c9450d9d971c48f5a7478fca8881b2cd2564e59f970f03536 \ # via flake8 diff --git a/requirements.in b/requirements.in index 1f2566b91..ba72056e0 100644 --- a/requirements.in +++ b/requirements.in @@ -5,6 +5,6 @@ idna==2.7 orderedmultidict==1.0 PyYAML==5.3.1 six==1.11.0 -requests==2.20.0 -urllib3==1.24.3 +requests==2.22.0 +urllib3>=1.25.10 Werkzeug==0.16.0 diff --git a/requirements.txt b/requirements.txt index 214b04d95..a61eb958b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,19 +6,24 @@ # certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ - --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a + --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a \ + # via -r requirements.in, requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ + # via -r requirements.in, requests furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ - --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec + --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec \ + # via -r requirements.in idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ - --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 + --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 \ + # via -r requirements.in, requests orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ - --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 + --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 \ + # via -r requirements.in, furl pyyaml==5.3.1 \ --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ @@ -30,16 +35,21 @@ pyyaml==5.3.1 \ --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a -requests==2.20.0 \ - --hash=sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c \ - --hash=sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279 + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a \ + # via -r requirements.in +requests==2.22.0 \ + --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + # via -r requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb -urllib3==1.24.3 \ - --hash=sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4 \ - --hash=sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb + --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb \ + # via -r requirements.in, furl, orderedmultidict +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ + # via -r requirements.in, requests werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ - --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 + --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 \ + # via -r requirements.in From c2b295a8668261147a99f7d24550aac566190a5b Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Wed, 7 Oct 2020 22:20:52 -0400 Subject: [PATCH 390/751] updated urllib3 and requests in build requirements --- build-requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-requirements.txt b/build-requirements.txt index ed7807329..85d0a6825 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -4,7 +4,7 @@ furl==2.0.0 --hash=sha256:1855003e64dcb934556ad79994ba1a3a852da337e353d84d3b4ef7 idna==2.7 --hash=sha256:491f674364ba3232ed1eb4c1eb7407887f62cef6c300aad7df6e01acd88ffb25 orderedmultidict==1.0 --hash=sha256:51efddca0b4ae6d885bbafd8ca44e51758166c144cf006dbead5c9394b2a9eae pyyaml==5.3.1 --hash=sha256:cb4442140d3195f5f799096aa35aadce15f493046135a03668023b80824dd44c -requests==2.20.0 --hash=sha256:d87b2085783d31d874ac7bc62660e287932aaee7059e80b41b76462eb18d35cc +requests==2.22.0 --hash=sha256:e3711bd465fd013abe428a8dade2938b578f05d2b06b0ae83daa98869c4548e8 six==1.11.0 --hash=sha256:aa4ad34049ddff178b533062797fd1db9f0038b7c5c2461a7cde2244300b9f3d -urllib3==1.24.3 --hash=sha256:3d440cbb168e2c963d5099232bdb3f7390bf031b6270dad1bc79751698a1399a +urllib3==1.25.10 --hash=sha256:32bcd1ec52a4dd17ede2725ad166c789f50d402870947d6824598915b89ecf70 werkzeug==0.16.0 --hash=sha256:429de1b931a2a58bf5cfac8447253949f7a930d30a73f2755e0ad0f9824592bf From 5abc4816186c4126a216ad92a840fc306a21ce35 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Wed, 7 Oct 2020 21:46:32 -0700 Subject: [PATCH 391/751] Fix is_read test per changes in SecureDrop 1.6.0 As of SecureDrop 1.6.0, we no longer mark files as downloaded/read if they are downloaded via the API. See https://github.com/freedomofpress/securedrop/pull/5505/files#diff-ae5533e7465f1995039d69a8b9175df0L196-L197 --- data/test-download-submission.yml | 94 ++++++++++-------------------- data/test_download_submission.json | 2 +- tests/test_api.py | 4 +- tests/test_apiproxy.py | 4 +- 4 files changed, 37 insertions(+), 67 deletions(-) diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 35e8e8be7..0058e427e 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDIxNjA4ODUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTMyMDg1fQ.eyJpZCI6MX0.0qc97f-U7IGw3KXH9CzXlho6rgjV8EmTaBO3CTsUhYM Connection: - keep-alive Content-Type: @@ -18,44 +18,16 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ - }\n" + string: '{"submissions":[{"download_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148/download","filename":"1-unkind_skyhook-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":593,"source_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b","submission_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148","uuid":"ad149cb6-8012-4bd1-9353-35c33cc20148"},{"download_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/4ea067ee-24b9-43bf-8a87-d465f95cb2ce/download","filename":"2-unkind_skyhook-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":595,"source_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b","submission_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/4ea067ee-24b9-43bf-8a87-d465f95cb2ce","uuid":"4ea067ee-24b9-43bf-8a87-d465f95cb2ce"},{"download_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/3b9ec029-873a-4a12-99e5-3ac2c921da47/download","filename":"1-divided_proline-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":637,"source_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9","submission_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/3b9ec029-873a-4a12-99e5-3ac2c921da47","uuid":"3b9ec029-873a-4a12-99e5-3ac2c921da47"},{"download_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/cbd56dd0-c65e-4811-a65c-d8815292e58d/download","filename":"2-divided_proline-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":666,"source_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9","submission_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/cbd56dd0-c65e-4811-a65c-d8815292e58d","uuid":"cbd56dd0-c65e-4811-a65c-d8815292e58d"},{"download_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/fda2e6fa-f451-4d2a-9a93-de4e0d7e7906/download","filename":"1-demoralized_cruller-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":591,"source_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16","submission_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/fda2e6fa-f451-4d2a-9a93-de4e0d7e7906","uuid":"fda2e6fa-f451-4d2a-9a93-de4e0d7e7906"},{"download_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/b5de546a-2850-4740-a650-9fbed6992561/download","filename":"2-demoralized_cruller-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":591,"source_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16","submission_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/b5de546a-2850-4740-a650-9fbed6992561","uuid":"b5de546a-2850-4740-a650-9fbed6992561"}]} + + ' headers: Content-Length: - - '3065' + - '2892' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Thu, 08 Oct 2020 04:41:25 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -69,7 +41,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDIxNjA4ODUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTMyMDg1fQ.eyJpZCI6MX0.0qc97f-U7IGw3KXH9CzXlho6rgjV8EmTaBO3CTsUhYM Connection: - keep-alive Content-Type: @@ -77,38 +49,38 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download + uri: http://127.0.0.1:8081/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqAQ//ZuomdBniWPSycJGhB//L857Ai4T+Y+tpH/CGtrRIYrAHIuswb/6tH0C5 - 0/gzSfaC9KbNJgL9bdo9FPF1sRavQ7p7crP+m4Qn2y9agrSxu1thmMv+QPwsEUSODFEqOf1CzJYp - 8f9/cLro0d2sw5rKEEW0rzumaoDkQYFAOri4jWRrGsCfklkY9tFKvTAplcRZwfgNWmsF12VhR2SS - /NFRoCjIIXqQKhDHG2Y9bW2mBwVO5I8MT1UzOh6DfH59VL58rbNOnJQrIxbmZDwRQynxDs+9+p+R - qfFoLK41o7GtQqtJ/JgEcVWeJKvymSDuy8/IsTJ5gjP1eCIyMUk+0bZoCNnplc+RaaZefJEqSViU - IHaxp1tlmiOqpIcTuGQMxeQUCeZcXJ8u++hnpW2+aoIJFZoVtpXjbvBLh8I9iLgHQ+BR0GsmHOUc - /5tsQhv19WAEC6spYT2ecuVol5vnfqmlBBE7o0CcSa0T7TDtw3xLCtwHZA8K3fOfTFQDAToDyJ2+ - Zl/mpcd0L9OEFllPiI4fvZrufLaKXl7//4Ta/zMWaOR/Y3+e5pzFU5F6YdWizwmGBdTUoXkcoMry - AzJjMgRvH2taDXUmtsMvfAfJj6d9ZpfpOML3qidfnH4noDNvyRcp8+64i99BUOdaohyMjswOxGWN - +OT8U/j8JdHL+lPBQGfSQAGN2XDMRIeFpA7rFVSikviiSbc0jnqxIw5n3j7ufRSI9j6GyMqLJLEE - VaauPFssuC233VKjaSK3n4xJ8aRXDY0= + hQIMA8PnxMCiIBsqAQ//TKxBZbznui0QDMB8aIoSGr3qf3VGc0S3rz+igkJ7ml4AIsW2DPNDlh+m + Rl4AoxioPPIllpjYP6ZqkMI9GJYQmMYVacVnW/VA6PNke1wkZgZGtK0lbtT+3GY9+Bc6B70kzhqp + /+3cfw69SVQvFecSSiK8CY8O7H4Pz38ut5SYq6idvgeAqLWhRXw9Fz2K17xYb5CvI8vFSPOQC6jf + F+XZH4I7W+3dlbe17K8cSgohzkkHiu50LtnUrf8Cw15NSvins6PBkVTivlym96kOSoS2jkVJJIFr + 91wBhikx/Q21SXFvUB1XpyInArDPQ9NAvMLE/jv02ebuqpK+8DM9gNkKE6NpvMKepZpANwo1m9xW + YtDyyqdepUNLjQDvuCqpJZQcq+Phqp8JEr0niW4BDaqoxOMNuX52BRS0MhvnR3z2heJK3ZhGgvsn + WCsBEPTCSCw1i5/C2wkAg9xVB7xM5ssEUGXh8cbHbI0d0fX0U6XvftB7d97Z6CQhf9zKzQ8RRnXx + lxVP6Tz5NqnQCrjfyAMALx8Hk2UZfUiYi7tpmP3WAr+niXtFZxb4B7wiVsLAvaYUyl9eGZYIDoCY + tJMhRvjygZ0lXfVAXpRnB5AseKglowcGUMVPB8nGE9GbJdfhJtR0raumeswou5b6O1IjQCgzcmVY + 8pEfYiK6AaNk2FGMzL7SQAHglqEI/29yutM6wovZKtDZCDk4VJO18qQ9nl0Uxp0gUlWxv6x2eoUB + IdUrD51y3+wqLK+8lUHa1NNryQfm3Ec= headers: Cache-Control: - - public, max-age=43200 + - max-age=43200, public Content-Disposition: - - attachment; filename=1-uplifted_waste-msg.gpg + - attachment; filename=1-unkind_skyhook-msg.gpg Content-Length: - '593' Content-Type: - application/pgp-encrypted Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Thu, 08 Oct 2020 04:41:25 GMT Etag: - - sha256:5d7eef772f95c4bacf4725268f6c7f553e6bac1fa3672f70d1cd8f47c3349105 + - sha256:e52e15a2b5adaa497a7d2bc66a7cea78b07efaa60b0139fbb3006849e2296adb Expires: - - Tue, 01 Sep 2020 07:06:58 GMT + - Thu, 08 Oct 2020 16:41:25 GMT Last-Modified: - - Mon, 31 Aug 2020 19:05:04 GMT + - Thu, 08 Oct 2020 00:10:30 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -122,7 +94,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDIxNjA4ODUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTMyMDg1fQ.eyJpZCI6MX0.0qc97f-U7IGw3KXH9CzXlho6rgjV8EmTaBO3CTsUhYM Connection: - keep-alive Content-Type: @@ -130,21 +102,19 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a + uri: http://127.0.0.1:8081/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148 response: body: - string: "{\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\": true, \n\ - \ \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n}\n" + string: '{"download_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148/download","filename":"1-unkind_skyhook-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":593,"source_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b","submission_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148","uuid":"ad149cb6-8012-4bd1-9353-35c33cc20148"} + + ' headers: Content-Length: - - '464' + - '477' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Thu, 08 Oct 2020 04:41:25 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test_download_submission.json b/data/test_download_submission.json index fea787c85..a922e6b09 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5093\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"3eae9a49-7662-432d-bd6d-5980bc68563b\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-costly_monarchist-msg.gpg\", \"Content-Length\": \"623\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 31 Aug 2020 19:25:03 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Tue, 01 Sep 2020 07:25:08 GMT\", \"Etag\": \"sha256:0df7cd6df7b017bf16a493dd7a6ffafe183022ca8117d1ef5e20597d47abe1fb\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:12 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5093\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"3eae9a49-7662-432d-bd6d-5980bc68563b\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-costly_monarchist-msg.gpg\", \"Content-Length\": \"623\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 31 Aug 2020 19:25:03 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Tue, 01 Sep 2020 07:25:08 GMT\", \"Etag\": \"sha256:0df7cd6df7b017bf16a493dd7a6ffafe183022ca8117d1ef5e20597d47abe1fb\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:12 GMT\"}, \"version\": \"0.3.0\\n\"}"} diff --git a/tests/test_api.py b/tests/test_api.py index 24f3e3894..7998ebdf8 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -275,9 +275,9 @@ def test_download_submission(self): assert etag == "sha256:{}".format(hasher.hexdigest()) - # Now the submission should have is_read as True. + # is_read should still be False as of SecureDrop 1.6.0 or later s = self.api.get_submission(s) - self.assertTrue(s.is_read) + self.assertFalse(s.is_read) # Let us remove the temporary directory shutil.rmtree(tmpdir) diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 819ddfa1b..8878b0361 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -267,10 +267,10 @@ def test_download_submission(self): # with open(filepath, "rb") as fobj: # fobj.read() - # Now the submission should have is_read as True. + # is_read should still be False as of SecureDrop 1.6.0 or later. s = self.api.get_submission(s) - self.assertTrue(s.is_read) + self.assertFalse(s.is_read) # Let us remove the temporary directory shutil.rmtree(tmpdir) From cc64e2caa65fd7b73bfd5abcaefdaddfa0873a23 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Sat, 3 Oct 2020 21:58:28 -0400 Subject: [PATCH 392/751] updated urllib from 1.25.8 to 1.25.10 --- dev-requirements.in | 2 +- dev-requirements.txt | 54 +++++++++++++++++++++++++++++--------------- requirements.in | 2 +- requirements.txt | 10 ++++---- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/dev-requirements.in b/dev-requirements.in index de0c29345..7a6b97346 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -9,4 +9,4 @@ pytest-cov vcrpy pyyaml>=5.3.1,<6 pytest-mock -pip-tools +pip-tools>=5.0.0 diff --git a/dev-requirements.txt b/dev-requirements.txt index 9d86296f0..190312fd1 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -14,7 +14,8 @@ attrs==19.3.0 \ # via black, pytest black==19.10b0 \ --hash=sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b \ - --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 + --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 \ + # via -r dev-requirements.in certifi==2019.11.28 \ --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f \ @@ -58,14 +59,16 @@ coverage==5.0.3 \ --hash=sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af \ --hash=sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52 \ --hash=sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37 \ - --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 + --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 \ + # via -r dev-requirements.in, pytest-cov entrypoints==0.3 \ --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ # via flake8 flake8==3.7.9 \ --hash=sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb \ - --hash=sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca + --hash=sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca \ + # via -r dev-requirements.in idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ @@ -76,7 +79,8 @@ importlib-metadata==1.5.0 \ # via pluggy, pytest isort==4.3.21 \ --hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \ - --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd + --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd \ + # via -r dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ @@ -122,7 +126,8 @@ mypy==0.761 \ --hash=sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b \ --hash=sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72 \ --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ - --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 + --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 \ + # via -r dev-requirements.in packaging==20.1 \ --hash=sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73 \ --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 \ @@ -131,9 +136,10 @@ pathspec==0.8.0 \ --hash=sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0 \ --hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 \ # via black -pip-tools==4.4.1 \ - --hash=sha256:2a5e67f539a67658614e2b2c6f484db05183a29e472f99ecbb2668838006ece2 \ - --hash=sha256:3d0c21b5e0b54ab15cf4a47065b9fa7567e8fc83246ebd732e954c65a6310a59 +pip-tools==5.3.1 \ + --hash=sha256:5672c2b6ca0f1fd803f3b45568c2cf7fadf135b4971e7d665232b2075544c0ef \ + --hash=sha256:73787e23269bf8a9230f376c351297b9037ed0d32ab0f9bef4a187d976acc054 \ + # via -r dev-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d \ @@ -152,20 +158,24 @@ pyflakes==2.1.1 \ # via flake8 pyotp==2.3.0 \ --hash=sha256:c88f37fd47541a580b744b42136f387cdad481b560ef410c0d85c957eb2a2bc0 \ - --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 + --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 \ + # via -r dev-requirements.in pyparsing==2.4.6 \ --hash=sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f \ --hash=sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec \ # via packaging pytest-cov==2.8.1 \ --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ - --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 + --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 \ + # via -r dev-requirements.in pytest-mock==2.0.0 \ --hash=sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f \ - --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 + --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 \ + # via -r dev-requirements.in pytest==5.3.5 \ --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ - --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 + --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 \ + # via -r dev-requirements.in, pytest-cov, pytest-mock pyyaml==5.3.1 \ --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ @@ -177,7 +187,8 @@ pyyaml==5.3.1 \ --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a \ + # via -r dev-requirements.in, vcrpy regex==2020.5.14 \ --hash=sha256:1386e75c9d1574f6aa2e4eb5355374c8e55f9aac97e224a8a5a6abded0f9c927 \ --hash=sha256:27ff7325b297fb6e5ebb70d10437592433601c423f5acf86e5bc1ee2919b9561 \ @@ -203,7 +214,8 @@ regex==2020.5.14 \ # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + # via -r requirements.in six==1.14.0 \ --hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a \ --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c \ @@ -240,12 +252,14 @@ typing-extensions==3.7.4.1 \ --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 \ # via mypy -urllib3==1.25.8 \ - --hash=sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc \ - --hash=sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ + # via -r requirements.in, requests vcrpy==4.0.2 \ --hash=sha256:9740c5b1b63626ec55cefb415259a2c77ce00751e97b0f7f214037baaf13c7bf \ - --hash=sha256:c4ddf1b92c8a431901c56a1738a2c797d965165a96348a26f4b2bbc5fa6d36d9 + --hash=sha256:c4ddf1b92c8a431901c56a1738a2c797d965165a96348a26f4b2bbc5fa6d36d9 \ + # via -r dev-requirements.in wcwidth==0.1.8 \ --hash=sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603 \ --hash=sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8 \ @@ -276,3 +290,7 @@ zipp==2.2.0 \ --hash=sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50 \ --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e \ # via importlib-metadata + +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. +# pip diff --git a/requirements.in b/requirements.in index 804abb1bf..90039c034 100644 --- a/requirements.in +++ b/requirements.in @@ -1,2 +1,2 @@ requests -urllib3 +urllib3>=1.25.9 diff --git a/requirements.txt b/requirements.txt index da1527607..f4afd448e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,9 @@ idna==2.8 \ # via requests requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 -urllib3==1.25.8 \ - --hash=sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc \ - --hash=sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + # via -r requirements.in +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ + # via -r requirements.in, requests From 9741be4a944a159f8945a2c4b6ba6f6e83da6033 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Wed, 7 Oct 2020 18:03:27 -0700 Subject: [PATCH 393/751] Fix TOTP retry logic, improve cassette handling, document --- README.md | 13 ++++++++++++- tests/test_api.py | 41 ++++++++++++++++++++++++----------------- tests/utils.py | 13 ------------- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 8089f448e..ed6f2188a 100644 --- a/README.md +++ b/README.md @@ -80,12 +80,23 @@ The steps to generate new cassettes are split into two sections based on communi NUM_SOURCES=5 make dev ``` -2. [Skip if adding a new test] Delete the cassettes you wish to regenerate or just delete all yaml files by running: +2. Delete the cassettes you wish to regenerate or just delete all yaml files by running: ```bash rm data/*.yml ``` + If you are only adding a new test and not modifying existing ones, you can + skip this step, but you still need to remove the authentication setup during + cassette generation. Otherwise you will get 403 errors for API endpoints that + require a valid token. Remove the setup cassette by running: + + ```bash + rm data/test-setup.yml + ``` + + (You can reinstate the unmodified version later.) + 3. Generate new cassettes that make API calls over HTTP by running: ```bash diff --git a/tests/test_api.py b/tests/test_api.py index 7998ebdf8..da9b8e40e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -14,39 +14,46 @@ from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import ( AuthError, - BaseError, Reply, ReplyError, Source, Submission, WrongUUIDError, ) -from utils import load_auth_for_http, save_auth_for_http NUM_REPLIES_PER_SOURCE = 2 class TestAPI(unittest.TestCase): - @vcr.use_cassette("data/test-setup.yml") def setUp(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" self.server = "http://127.0.0.1:8081/" - self.api = API(self.server, self.username, self.password, str(self.totp.now())) - for i in range(3): - try: - self.api.authenticate() - except BaseError: - token = load_auth_for_http() - if token: - self.api.token = token - self.api.update_auth_header() - break - time.sleep(31) - - save_auth_for_http(self.api.token) - break + + # Because we may be using a TOTP code from a previous run that has since + # been invalidated (or that may be invalid because of bad timing), + # we retry repeatedly to get the token with a new TOTP code. + # + # It doesn't matter if these intermittent 403s are captured in the + # cassette as we ignore them during playback. + auth_result = None + with vcr.use_cassette("data/test-setup.yml") as cassette: + for i in range(3): + totp = self.totp.now() + self.api = API(self.server, self.username, self.password, str(totp)) + try: + auth_result = self.api.authenticate() + except AuthError: + # Don't sleep on final retry attempt or during playback + if i < 2 and cassette.play_count == 0: + time.sleep(31) + continue + # No error, let's move on + break + + if auth_result is None: + raise AuthError("Could not obtain API token during test setup.") @vcr.use_cassette("data/test-baduser.yml") def test_auth_baduser(self): diff --git a/tests/utils.py b/tests/utils.py index f50bf3da1..0725abee3 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -123,16 +123,3 @@ def load_auth(): def save_auth(token): with open("testtoken.json", "w") as fobj: json.dump(token, fobj) - - -def load_auth_for_http(): - "Helper function to load token" - if os.path.exists("testtoken_http.json"): - with open("testtoken_http.json") as fobj: - return json.load(fobj) - return None - - -def save_auth_for_http(token): - with open("testtoken_http.json", "w") as fobj: - json.dump(token, fobj) From 3afc03f776ee5df977a6715fbb46637fae737087 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 8 Oct 2020 17:06:28 -0700 Subject: [PATCH 394/751] Use logging instead of print --- sd-rsyslog | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sd-rsyslog b/sd-rsyslog index 4f62d95e3..47bd25d2b 100644 --- a/sd-rsyslog +++ b/sd-rsyslog @@ -76,7 +76,8 @@ def onInit(): global process if not os.path.exists("/etc/sd-rsyslog.conf"): - print("Please create the configuration file at /etc/sd-rsyslog.conf", file=sys.stderr) + logging.exception("Please create the configuration file at /etc/sd-rsyslog.conf", + file=sys.stderr) sys.exit(1) config = configparser.ConfigParser() config.read('/etc/sd-rsyslog.conf') @@ -91,14 +92,14 @@ def onInit(): stdout=PIPE, stderr=PIPE) vm_name_output, vm_name_error = get_vm_name_process.communicate() if vm_name_error != b"": - print("Error obtaining VM name via qubesdb-read:") - print(vm_name_error.decode("utf-8").strip()) + logging.exception("Error obtaining VM name via qubesdb-read:") + logging.exception(vm_name_error.decode("utf-8").strip()) sys.exit(1) localvmname = vm_name_output.decode("utf-8").strip() except FileNotFoundError: # not on Qubes? - print("Could not run qubesdb-read command to obtain VM name.") - print("Note that sd-rsyslog must be run on Qubes OS if no") - print("localvm name is specified in the configuration.") + logging.exception("Could not run qubesdb-read command to obtain VM name.") + logging.exception("Note that sd-rsyslog must be run on Qubes OS if no " + "localvm name is specified in the configuration.") sys.exit(1) process = Popen( From 4643ec24787ff4150fae8d5fe9949769d5769e2b Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 9 Oct 2020 12:46:58 -0700 Subject: [PATCH 395/751] Fix incorrect path in docs, clarify location --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ed6f2188a..f0d0b1871 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ name=sd-dev-proxy sd-dev sd-dev-proxy allow ``` -8. Modify `/etc/qubes-rpc/qubes.Filecopy` in **dom0** by adding the following line so that the proxy can send files over qrexec to the sdk: +8. Modify `/etc/qubes-rpc/policy/qubes.Filecopy` in **dom0** by adding the following line to the top of the file so that the proxy can send files over qrexec to the sdk: ``` sd-dev-proxy sd-dev allow From 5256ebc4e55af392dd73b60928fc2a1800c50eb7 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Fri, 9 Oct 2020 14:51:39 -0700 Subject: [PATCH 396/751] Fixes logging exception statement Holdover from the previous refactor from 'print' to 'logging.exception'. --- sd-rsyslog | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sd-rsyslog b/sd-rsyslog index 47bd25d2b..e79e86005 100644 --- a/sd-rsyslog +++ b/sd-rsyslog @@ -76,8 +76,7 @@ def onInit(): global process if not os.path.exists("/etc/sd-rsyslog.conf"): - logging.exception("Please create the configuration file at /etc/sd-rsyslog.conf", - file=sys.stderr) + logging.exception("Please create the configuration file at /etc/sd-rsyslog.conf") sys.exit(1) config = configparser.ConfigParser() config.read('/etc/sd-rsyslog.conf') From 3d2a5a8555873402e1ced0dd47b6c30dcf3b9cb5 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Wed, 7 Oct 2020 17:38:05 -0700 Subject: [PATCH 397/751] Add support for /users endpoint --- data/test-get-users.yml | 36 +++++++++++++++++++++++++++++++++++ sdclientapi/__init__.py | 24 +++++++++++++++++++++++ sdclientapi/sdlocalobjects.py | 23 ++++++++++++++++++++++ tests/test_api.py | 14 ++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 data/test-get-users.yml diff --git a/data/test-get-users.yml b/data/test-get-users.yml new file mode 100644 index 000000000..a5576c51c --- /dev/null +++ b/data/test-get-users.yml @@ -0,0 +1,36 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJleHAiOjE2MDIxNDYxMDIsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTE3MzAyfQ.eyJpZCI6MX0.z7UGeKx0191qRhU97f0bJJDuY4y4fJi9njDGD0OXrpA + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/users + response: + body: + string: '{"users":[{"first_name":"","last_name":"","username":"journalist","uuid":"0a5db1b6-a003-4aa9-812b-53c6abbf1124"},{"first_name":"","last_name":"","username":"dellsberg","uuid":"3325fde8-a339-4847-aa3e-d2be412fbaf7"}]} + + ' + headers: + Content-Length: + - '217' + Content-Type: + - application/json + Date: + - Thu, 08 Oct 2020 00:35:02 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK +version: 1 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 278cd2171..38d93b2ae 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -17,6 +17,7 @@ ReplyError, Source, Submission, + User, WrongUUIDError, ) @@ -598,6 +599,29 @@ def get_current_user(self) -> Any: return data + def get_users(self) -> List[User]: + """ + Returns a list of all the journalist and admin users registered on the + server. + + :returns: List of User objects. + """ + path_query = "api/v1/users" + method = "GET" + + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + ) + + users = data["users"] + result = [] # type: List[User] + + for user in users: + u = User(**user) + result.append(u) + + return result + def reply_source(self, source: Source, msg: str, reply_uuid: Optional[str] = None) -> Reply: """ This method is used to reply to a given source. The message should be preencrypted with the diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index f0525e519..58bd9f246 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -177,3 +177,26 @@ def __init__(self, **kwargs) -> None: # type: ignore if key not in kwargs: AttributeError("Missing key {}".format(key)) setattr(self, key, kwargs[key]) + + +class User: + """ + This class represents a user (journalist or admin) of the Journalist + Interface. + """ + + def __init__(self, **kwargs) -> None: # type: ignore + self.first_name = "" # type: str + self.last_name = "" # type: str + self.username = "" # type: str + self.uuid = "" # type: str + + for key in [ + "first_name", + "last_name", + "username", + "uuid", + ]: + if key not in kwargs: + AttributeError("Missing key {}".format(key)) + setattr(self, key, kwargs[key]) diff --git a/tests/test_api.py b/tests/test_api.py index da9b8e40e..0841d8c19 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -231,6 +231,20 @@ def test_get_current_user(self): self.assertTrue("first_name" in user) self.assertTrue("last_name" in user) + @vcr.use_cassette("data/test-get-users.yml") + def test_get_users(self): + users = self.api.get_users() + for user in users: + # Assert expected fields are present + assert hasattr(user, "first_name") + assert hasattr(user, "last_name") + # Every user has a non-empty name and UUID + assert user.username + assert user.uuid + # The API should never return these fields + assert not hasattr(user, "last_login") + assert not hasattr(user, "is_admin") + @vcr.use_cassette("data/test-error-unencrypted-reply.yml") def test_error_unencrypted_reply(self): s = self.api.get_sources()[0] From ce2257bdf9ecacda1bf9fd15d7d7d354a5973476 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 9 Oct 2020 13:01:52 -0700 Subject: [PATCH 398/751] Add API proxy test --- data/test_get_users.json | 1 + tests/test_apiproxy.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 data/test_get_users.json diff --git a/data/test_get_users.json b/data/test_get_users.json new file mode 100644 index 000000000..ef624ee3a --- /dev/null +++ b/data/test_get_users.json @@ -0,0 +1 @@ +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\\"expiration\\\":\\\"2020-10-10T04:06:41.835560Z\\\",\\\"journalist_first_name\\\":\\\"\\\",\\\"journalist_last_name\\\":\\\"\\\",\\\"journalist_uuid\\\":\\\"2ef9ec39-696d-4707-a1bf-4c00aa726468\\\",\\\"token\\\":\\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTYwMjMwMjgwMSwiaWF0IjoxNjAyMjc0MDAxfQ.eyJpZCI6MX0.vcLFjEKqEbQ12Vbky9eurp_yQEznGk1KFFVKc_ZaE2A\\\"}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"288\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 09 Oct 2020 20:06:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\\"users\\\":[{\\\"first_name\\\":\\\"\\\",\\\"last_name\\\":\\\"\\\",\\\"username\\\":\\\"journalist\\\",\\\"uuid\\\":\\\"2ef9ec39-696d-4707-a1bf-4c00aa726468\\\"},{\\\"first_name\\\":\\\"\\\",\\\"last_name\\\":\\\"\\\",\\\"username\\\":\\\"dellsberg\\\",\\\"uuid\\\":\\\"c9729e59-6c4b-4f56-9f6f-4a87eb22d130\\\"}]}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"217\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 09 Oct 2020 20:06:42 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 8878b0361..5e2ea53c4 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -220,6 +220,20 @@ def test_get_current_user(self): self.assertTrue("first_name" in user) self.assertTrue("last_name" in user) + @dastollervey_datasaver + def test_get_users(self): + users = self.api.get_users() + for user in users: + # Assert expected fields are present + assert hasattr(user, "first_name") + assert hasattr(user, "last_name") + # Every user has a non-empty name and UUID + assert user.username + assert user.uuid + # The API should never return these fields + assert not hasattr(user, "last_login") + assert not hasattr(user, "is_admin") + @dastollervey_datasaver def test_error_unencrypted_reply(self): s = self.api.get_sources()[0] From cafcddec9cfa9946536202f4b28fef77b46f008e Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 13 Oct 2020 08:49:43 -0400 Subject: [PATCH 399/751] Remove Pipfile and Pipfile.lock Pipenv was removed in favor of pip-tools in #112 --- Pipfile | 23 --- Pipfile.lock | 543 --------------------------------------------------- 2 files changed, 566 deletions(-) delete mode 100644 Pipfile delete mode 100644 Pipfile.lock diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 546e16438..000000000 --- a/Pipfile +++ /dev/null @@ -1,23 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[requires] -python_version = "3.5" - -[packages] -requests = "*" -urllib3 = "*" - -[dev-packages] -coverage = "*" -flake8 = "*" -mypy = "*" -pyotp = "*" -pytest = "*" -pytest-cov = "*" -sphinx = "*" -vcrpy = "*" -pyyaml = ">=5.1,<6" -pytest-mock = "*" diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index 00b10cdde..000000000 --- a/Pipfile.lock +++ /dev/null @@ -1,543 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "4cdc00b2f615bf3233d0d02e4878b495cbb43f978c72dded0d3c37246c1a9218" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.5" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "certifi": { - "hashes": [ - "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", - "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" - ], - "version": "==2019.3.9" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "idna": { - "hashes": [ - "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", - "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" - ], - "version": "==2.8" - }, - "requests": { - "hashes": [ - "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", - "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" - ], - "index": "pypi", - "version": "==2.21.0" - }, - "urllib3": { - "hashes": [ - "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", - "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" - ], - "index": "pypi", - "version": "==1.24.3" - } - }, - "develop": { - "alabaster": { - "hashes": [ - "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", - "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" - ], - "version": "==0.7.12" - }, - "atomicwrites": { - "hashes": [ - "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", - "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" - ], - "version": "==1.3.0" - }, - "attrs": { - "hashes": [ - "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", - "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" - ], - "version": "==19.1.0" - }, - "babel": { - "hashes": [ - "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669", - "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23" - ], - "version": "==2.6.0" - }, - "certifi": { - "hashes": [ - "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", - "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" - ], - "version": "==2019.3.9" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "coverage": { - "hashes": [ - "sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9", - "sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74", - "sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390", - "sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8", - "sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe", - "sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf", - "sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e", - "sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741", - "sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09", - "sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd", - "sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034", - "sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420", - "sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c", - "sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab", - "sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba", - "sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e", - "sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609", - "sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2", - "sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49", - "sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b", - "sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d", - "sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce", - "sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9", - "sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4", - "sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773", - "sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723", - "sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c", - "sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f", - "sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1", - "sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260", - "sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a" - ], - "index": "pypi", - "version": "==4.5.3" - }, - "docutils": { - "hashes": [ - "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", - "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", - "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" - ], - "version": "==0.14" - }, - "entrypoints": { - "hashes": [ - "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", - "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" - ], - "version": "==0.3" - }, - "flake8": { - "hashes": [ - "sha256:859996073f341f2670741b51ec1e67a01da142831aa1fdc6242dbf88dffbe661", - "sha256:a796a115208f5c03b18f332f7c11729812c8c3ded6c46319c59b53efd3819da8" - ], - "index": "pypi", - "version": "==3.7.7" - }, - "idna": { - "hashes": [ - "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", - "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" - ], - "version": "==2.8" - }, - "imagesize": { - "hashes": [ - "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8", - "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5" - ], - "version": "==1.1.0" - }, - "jinja2": { - "hashes": [ - "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", - "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" - ], - "version": "==2.10.1" - }, - "markupsafe": { - "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" - ], - "version": "==1.1.1" - }, - "mccabe": { - "hashes": [ - "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" - ], - "version": "==0.6.1" - }, - "more-itertools": { - "hashes": [ - "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", - "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" - ], - "markers": "python_version > '2.7'", - "version": "==7.0.0" - }, - "multidict": { - "hashes": [ - "sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f", - "sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3", - "sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef", - "sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b", - "sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73", - "sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc", - "sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3", - "sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd", - "sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351", - "sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941", - "sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d", - "sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1", - "sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b", - "sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a", - "sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3", - "sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7", - "sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0", - "sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0", - "sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014", - "sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5", - "sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036", - "sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d", - "sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a", - "sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce", - "sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1", - "sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a", - "sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9", - "sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7", - "sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b" - ], - "version": "==4.5.2" - }, - "mypy": { - "hashes": [ - "sha256:2afe51527b1f6cdc4a5f34fc90473109b22bf7f21086ba3e9451857cf11489e6", - "sha256:56a16df3e0abb145d8accd5dbb70eba6c4bd26e2f89042b491faa78c9635d1e2", - "sha256:5764f10d27b2e93c84f70af5778941b8f4aa1379b2430f85c827e0f5464e8714", - "sha256:5bbc86374f04a3aa817622f98e40375ccb28c4836f36b66706cf3c6ccce86eda", - "sha256:6a9343089f6377e71e20ca734cd8e7ac25d36478a9df580efabfe9059819bf82", - "sha256:6c9851bc4a23dc1d854d3f5dfd5f20a016f8da86bcdbb42687879bb5f86434b0", - "sha256:b8e85956af3fcf043d6f87c91cbe8705073fc67029ba6e22d3468bfee42c4823", - "sha256:b9a0af8fae490306bc112229000aa0c2ccc837b49d29a5c42e088c132a2334dd", - "sha256:bbf643528e2a55df2c1587008d6e3bda5c0445f1240dfa85129af22ae16d7a9a", - "sha256:c46ab3438bd21511db0f2c612d89d8344154c0c9494afc7fbc932de514cf8d15", - "sha256:f7a83d6bd805855ef83ec605eb01ab4fa42bcef254b13631e451cbb44914a9b0" - ], - "index": "pypi", - "version": "==0.701" - }, - "mypy-extensions": { - "hashes": [ - "sha256:37e0e956f41369209a3d5f34580150bcacfabaa57b33a15c0b25f4b5725e0812", - "sha256:b16cabe759f55e3409a7d231ebd2841378fb0c27a5d1994719e340e4f429ac3e" - ], - "version": "==0.4.1" - }, - "packaging": { - "hashes": [ - "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", - "sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3" - ], - "version": "==19.0" - }, - "pathlib2": { - "hashes": [ - "sha256:25199318e8cc3c25dcb45cbe084cc061051336d5a9ea2a12448d3d8cb748f742", - "sha256:5887121d7f7df3603bca2f710e7219f3eca0eb69e0b7cc6e0a022e155ac931a7" - ], - "markers": "python_version < '3.6'", - "version": "==2.3.3" - }, - "pluggy": { - "hashes": [ - "sha256:25a1bc1d148c9a640211872b4ff859878d422bccb59c9965e04eed468a0aa180", - "sha256:964cedd2b27c492fbf0b7f58b3284a09cf7f99b0f715941fb24a439b3af1bd1a" - ], - "version": "==0.11.0" - }, - "py": { - "hashes": [ - "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", - "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" - ], - "version": "==1.8.0" - }, - "pycodestyle": { - "hashes": [ - "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", - "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" - ], - "version": "==2.5.0" - }, - "pyflakes": { - "hashes": [ - "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", - "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" - ], - "version": "==2.1.1" - }, - "pygments": { - "hashes": [ - "sha256:31cba6ffb739f099a85e243eff8cb717089fdd3c7300767d9fc34cb8e1b065f5", - "sha256:5ad302949b3c98dd73f8d9fcdc7e9cb592f120e32a18e23efd7f3dc51194472b" - ], - "version": "==2.4.0" - }, - "pyotp": { - "hashes": [ - "sha256:1e3dc3d16919c4efac528d1dbecc17de1a97c4ecfdacb89d7726ed2c6645adff", - "sha256:be0ffeabddaa5ee53e7204e7740da842d070cf69168247a3d0c08541b84de602" - ], - "index": "pypi", - "version": "==2.2.7" - }, - "pyparsing": { - "hashes": [ - "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", - "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" - ], - "version": "==2.4.0" - }, - "pytest": { - "hashes": [ - "sha256:1a8aa4fa958f8f451ac5441f3ac130d9fc86ea38780dd2715e6d5c5882700b24", - "sha256:b8bf138592384bd4e87338cb0f256bf5f615398a649d4bd83915f0e4047a5ca6" - ], - "index": "pypi", - "version": "==4.5.0" - }, - "pytest-cov": { - "hashes": [ - "sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6", - "sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a" - ], - "index": "pypi", - "version": "==2.7.1" - }, - "pytest-mock": { - "hashes": [ - "sha256:43ce4e9dd5074993e7c021bb1c22cbb5363e612a2b5a76bc6d956775b10758b7", - "sha256:5bf5771b1db93beac965a7347dc81c675ec4090cb841e49d9d34637a25c30568" - ], - "index": "pypi", - "version": "==1.10.4" - }, - "pytz": { - "hashes": [ - "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", - "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" - ], - "version": "==2019.1" - }, - "pyyaml": { - "hashes": [ - "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", - "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", - "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", - "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", - "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", - "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", - "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", - "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", - "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", - "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", - "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" - ], - "index": "pypi", - "version": "==5.1" - }, - "requests": { - "hashes": [ - "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", - "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" - ], - "index": "pypi", - "version": "==2.21.0" - }, - "six": { - "hashes": [ - "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", - "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" - ], - "version": "==1.12.0" - }, - "snowballstemmer": { - "hashes": [ - "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", - "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" - ], - "version": "==1.2.1" - }, - "sphinx": { - "hashes": [ - "sha256:423280646fb37944dd3c85c58fb92a20d745793a9f6c511f59da82fa97cd404b", - "sha256:de930f42600a4fef993587633984cc5027dedba2464bcf00ddace26b40f8d9ce" - ], - "index": "pypi", - "version": "==2.0.1" - }, - "sphinxcontrib-applehelp": { - "hashes": [ - "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", - "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" - ], - "version": "==1.0.1" - }, - "sphinxcontrib-devhelp": { - "hashes": [ - "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", - "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" - ], - "version": "==1.0.1" - }, - "sphinxcontrib-htmlhelp": { - "hashes": [ - "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", - "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7" - ], - "version": "==1.0.2" - }, - "sphinxcontrib-jsmath": { - "hashes": [ - "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", - "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" - ], - "version": "==1.0.1" - }, - "sphinxcontrib-qthelp": { - "hashes": [ - "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", - "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" - ], - "version": "==1.0.2" - }, - "sphinxcontrib-serializinghtml": { - "hashes": [ - "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", - "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" - ], - "version": "==1.1.3" - }, - "typed-ast": { - "hashes": [ - "sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b", - "sha256:18141c1484ab8784006c839be8b985cfc82a2e9725837b0ecfa0203f71c4e39d", - "sha256:2baf617f5bbbfe73fd8846463f5aeafc912b5ee247f410700245d68525ec584a", - "sha256:3d90063f2cbbe39177e9b4d888e45777012652d6110156845b828908c51ae462", - "sha256:4304b2218b842d610aa1a1d87e1dc9559597969acc62ce717ee4dfeaa44d7eee", - "sha256:4983ede548ffc3541bae49a82675996497348e55bafd1554dc4e4a5d6eda541a", - "sha256:5315f4509c1476718a4825f45a203b82d7fdf2a6f5f0c8f166435975b1c9f7d4", - "sha256:6cdfb1b49d5345f7c2b90d638822d16ba62dc82f7616e9b4caa10b72f3f16649", - "sha256:7b325f12635598c604690efd7a0197d0b94b7d7778498e76e0710cd582fd1c7a", - "sha256:8d3b0e3b8626615826f9a626548057c5275a9733512b137984a68ba1598d3d2f", - "sha256:8f8631160c79f53081bd23446525db0bc4c5616f78d04021e6e434b286493fd7", - "sha256:912de10965f3dc89da23936f1cc4ed60764f712e5fa603a09dd904f88c996760", - "sha256:b010c07b975fe853c65d7bbe9d4ac62f1c69086750a574f6292597763781ba18", - "sha256:c908c10505904c48081a5415a1e295d8403e353e0c14c42b6d67f8f97fae6616", - "sha256:c94dd3807c0c0610f7c76f078119f4ea48235a953512752b9175f9f98f5ae2bd", - "sha256:ce65dee7594a84c466e79d7fb7d3303e7295d16a83c22c7c4037071b059e2c21", - "sha256:eaa9cfcb221a8a4c2889be6f93da141ac777eb8819f077e1d09fb12d00a09a93", - "sha256:f3376bc31bad66d46d44b4e6522c5c21976bf9bca4ef5987bb2bf727f4506cbb", - "sha256:f9202fa138544e13a4ec1a6792c35834250a85958fde1251b6a22e07d1260ae7" - ], - "version": "==1.3.5" - }, - "urllib3": { - "hashes": [ - "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", - "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" - ], - "index": "pypi", - "version": "==1.24.3" - }, - "vcrpy": { - "hashes": [ - "sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3", - "sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f" - ], - "index": "pypi", - "version": "==2.0.1" - }, - "wcwidth": { - "hashes": [ - "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", - "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" - ], - "version": "==0.1.7" - }, - "wrapt": { - "hashes": [ - "sha256:4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533" - ], - "version": "==1.11.1" - }, - "yarl": { - "hashes": [ - "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9", - "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f", - "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb", - "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320", - "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842", - "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0", - "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829", - "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310", - "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4", - "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8", - "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1" - ], - "markers": "python_version >= '3.4'", - "version": "==1.3.0" - } - } -} From 59fb62ed92aa267abf4b54bc88f758a3e6527314 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 7 Oct 2020 14:33:05 -0700 Subject: [PATCH 400/751] support seen endpoint --- data/setUp.json | 2 +- data/test-badotp.yml | 2 +- data/test-badpassword.yml | 4 +- data/test-baduser.yml | 4 +- data/test-delete-reply.yml | 346 +++++++------ data/test-delete-source.yml | 498 +++++++++---------- data/test-delete-submission-from-string.yml | 430 ++++++++++------ data/test-delete-submission.yml | 426 +++++++++++----- data/test-download-reply.yml | 139 +++--- data/test-download-submission.yml | 151 ++++-- data/test-error-unencrypted-reply.yml | 144 +++--- data/test-failed-single-source.yml | 4 +- data/test-flag-source.yml | 186 +++---- data/test-get-all-replies.yml | 235 ++++----- data/test-get-all-submissions.yml | 120 +++-- data/test-get-current-user.yml | 8 +- data/test-get-replies-from-source.yml | 171 +++---- data/test-get-reply-from-source.yml | 188 +++---- data/test-get-single-source.yml | 180 +++---- data/test-get-sources.yml | 138 ++--- data/test-get-submission.yml | 209 +++++--- data/test-get-submissions.yml | 160 +++--- data/test-get-users.yml | 14 +- data/test-get-wrong-submissions.yml | 142 +++--- data/test-logout.yml | 4 +- data/test-reply-source-with-uuid.yml | 148 +++--- data/test-reply-source.yml | 150 +++--- data/test-seen.yml | 271 ++++++++++ data/test-setup.yml | 10 +- data/test-star-add-remove.yml | 288 +++++------ data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_users.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_logout.json | 2 +- data/test_reply_source.json | 2 +- data/test_reply_source_with_uuid.json | 2 +- data/test_seen.json | 1 + data/test_star_add_remove.json | 2 +- sdclientapi/__init__.py | 30 ++ sdclientapi/sdlocalobjects.py | 5 + tests/test_api.py | 22 + tests/test_apiproxy.py | 22 + 62 files changed, 2909 insertions(+), 1997 deletions(-) create mode 100644 data/test-seen.yml create mode 100644 data/test_seen.json diff --git a/data/setUp.json b/data/setUp.json index 0f9529652..b53d34e6f 100644 --- a/data/setUp.json +++ b/data/setUp.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test-badotp.yml b/data/test-badotp.yml index 0082a6982..d57d7ba07 100644 --- a/data/test-badotp.yml +++ b/data/test-badotp.yml @@ -25,7 +25,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-badpassword.yml b/data/test-badpassword.yml index 8434ee079..91e98edea 100644 --- a/data/test-badpassword.yml +++ b/data/test-badpassword.yml @@ -1,6 +1,6 @@ interactions: - request: - body: '{"username": "journalist", "passphrase": "no", "one_time_code": "205004"}' + body: '{"username": "journalist", "passphrase": "no", "one_time_code": "877484"}' headers: Accept: - '*/*' @@ -24,7 +24,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-baduser.yml b/data/test-baduser.yml index a0df2c89c..a8c0c0460 100644 --- a/data/test-baduser.yml +++ b/data/test-baduser.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "no", "passphrase": "correct horse battery staple profanity - oil chewy", "one_time_code": "205004"}' + oil chewy", "one_time_code": "877484"}' headers: Accept: - '*/*' @@ -25,7 +25,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index 00d527a0d..85be9c516 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,78 +18,88 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"3-constrained_eyewitness-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-unalike_plaint-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\ - , \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\n }, \n \ - \ {\n \"filename\": \"4-constrained_eyewitness-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/2f622872-67ac-4c00-aa43-362a13f1d221\"\ - , \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"2f622872-67ac-4c00-aa43-362a13f1d221\"\n }, \n \ - \ {\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\ + , \n \"seen_by\": [], \n \"size\": 765, \n \"source_url\":\ + \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ + : \"5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\n }, \n {\n \"filename\"\ + : \"6-unalike_plaint-reply.gpg\", \n \"is_deleted_by_source\": false,\ + \ \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\ + , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ + \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ + : \"ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\n }, \n {\n \"filename\"\ + : \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ - \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ + \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ - , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ - \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ + \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ - , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ - \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ + \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ + \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ + \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ - , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ - \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ + \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ - , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ - \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ - \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ }\n" headers: Content-Length: - - '5533' + - '6169' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -103,7 +113,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -114,78 +124,88 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"3-constrained_eyewitness-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-unalike_plaint-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\ - , \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"cac11bb8-7ea7-45c2-8887-65be8dd7df5d\"\n }, \n \ - \ {\n \"filename\": \"4-constrained_eyewitness-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/2f622872-67ac-4c00-aa43-362a13f1d221\"\ - , \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"2f622872-67ac-4c00-aa43-362a13f1d221\"\n }, \n \ - \ {\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\ + , \n \"seen_by\": [], \n \"size\": 765, \n \"source_url\":\ + \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ + : \"5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\n }, \n {\n \"filename\"\ + : \"6-unalike_plaint-reply.gpg\", \n \"is_deleted_by_source\": false,\ + \ \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\ + , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ + \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ + : \"ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\n }, \n {\n \"filename\"\ + : \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ - \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ + \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ - , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ - \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ + \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ - , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ - \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ + \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ + \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ + \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ - , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ - \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ + \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ - , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ - \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ - \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ }\n" headers: Content-Length: - - '5533' + - '6169' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -199,7 +219,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -209,7 +229,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/cac11bb8-7ea7-45c2-8887-65be8dd7df5d + uri: http://127.0.0.1:8081/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/5c03a992-c3ed-4b6c-9e14-1f94e94f20d8 response: body: string: "{\n \"message\": \"Reply deleted\"\n}\n" @@ -219,7 +239,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -233,7 +253,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -244,71 +264,81 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"4-constrained_eyewitness-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"6-unalike_plaint-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies/2f622872-67ac-4c00-aa43-362a13f1d221\"\ - , \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"2f622872-67ac-4c00-aa43-362a13f1d221\"\n }, \n \ - \ {\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\ + , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ + \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ + : \"ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\n }, \n {\n \"filename\"\ + : \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ - \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ + \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ - , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ - \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ + \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ - , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ - \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ + \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ + \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ + \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ - , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ - \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ + \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ - , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ - \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ - \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ }\n" headers: Content-Length: - - '5004' + - '5626' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:56 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index 83713585f..07f432649 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,99 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"constrained\ - \ eyewitness\", \n \"key\": {\n \"fingerprint\": \"CC59B5AB8BC8770B59308BDBB82F554149259C5B\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEANvlFBws8fu6oQaUgWyL+cdPQQrgq8WHi0YBZekQ/svztrmirZFq\\\ - n+5qSiZOQRP1hiet9ZnarWUsi3sFsqq7lDoIWTU6yV3bDda9Fxbsc1TKbN7Df6fUP\\nlB6szCNLq6NEK1nZJIPVkXpBCjUpKQMvQBlQ+6ARPIE6XHEWA5EPmqctABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPENVTDcySlVDVk0zT1lCSFdVRVlNTFJUSFZZQUlES1daU1RL\\nUlRNTUJEVTU0QlNKN1FDQVhOT1hNRVFWQ1haUlFYWk1NT0tBQVBZWk1PQTI2RTM0\\\ - nTlZLN0pBUjZOVE81T0ZRTE1WSUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELgvVUFJJZxb3DEEANlFHYLuLuY23/szcAFwrbUu\\\ - nuUyTV8ylv/YyxJmOl3aXXUBUiM6GMvpW8/Nxz33s8lDOv4/V2ctOoIzMc675Seu5\\nR1BgGwm5BLTOSNyHdXglEkZxBkZC3iTrhR3wSbpsHy8eV6GsqR03WbSakyyXnBhi\\\ - n/++MfchhoxmG4F4JGDs+\\n=9WCS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.606776Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/submissions\"\ - , \n \"url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"9832893a-001a-41db-b299-55be6c3f8917\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ - \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"unalike plaint\"\ + , \n \"key\": {\n \"fingerprint\": \"D62E44143E57136D1CBFC42544E687CF2A62D43C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAK+OY8V1Vw/twyYrmBXGkV+FLpYD8Gp2NmlfW6MVzgxeY9lNleMw\\\ + nRM65oOWCHpiLh4ZI+qS4h/tyJ95JK+q9FEl9hKqgZwWYHlQkTBq6mkx4m0taz45j\\n19rbuYhGp9XCdaDg0Oa5+q1hPNbD6QbrzdYBzHjjKXqYxbrBLrXyO9ZZABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEg3WTVRS0JBUExSV0hCR1FWT0tQSkVSRlFTU0ROVkYzVktY\\nTEQ3REtIVUdBQUFLVktYWFNSWVZaSVA3REJKQVlCWFhFTVlKQTJFSkhRNFJRVEVJ\\\ + nRkRLMkhIUUtFNTJIN0NKSFpQNlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEETmh88qYtQ8uwUD/AydTjc6MOQVv6NOiRcATc6s\\\ + nzkxVwaDxQDhsu5viy8yCS61MiaxfqfFFYvE8DZ+0sLP/S8noF4jrzUIL7uAZQ81o\\n5FR/4CmzC+tBHOqtBGQIok52HRjbQgzR6JWWLfZ3DDf1Cwm3ZrfFD5/8ylSA3AsM\\\ + n2AuWKAruHtDgaDbVq5Ck\\n=HiGI\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.163035Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/submissions\"\ + , \n \"url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\ + , \n \"uuid\": \"51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8009' + - '8001' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:56 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -124,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -135,99 +135,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"constrained\ - \ eyewitness\", \n \"key\": {\n \"fingerprint\": \"CC59B5AB8BC8770B59308BDBB82F554149259C5B\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEANvlFBws8fu6oQaUgWyL+cdPQQrgq8WHi0YBZekQ/svztrmirZFq\\\ - n+5qSiZOQRP1hiet9ZnarWUsi3sFsqq7lDoIWTU6yV3bDda9Fxbsc1TKbN7Df6fUP\\nlB6szCNLq6NEK1nZJIPVkXpBCjUpKQMvQBlQ+6ARPIE6XHEWA5EPmqctABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPENVTDcySlVDVk0zT1lCSFdVRVlNTFJUSFZZQUlES1daU1RL\\nUlRNTUJEVTU0QlNKN1FDQVhOT1hNRVFWQ1haUlFYWk1NT0tBQVBZWk1PQTI2RTM0\\\ - nTlZLN0pBUjZOVE81T0ZRTE1WSUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELgvVUFJJZxb3DEEANlFHYLuLuY23/szcAFwrbUu\\\ - nuUyTV8ylv/YyxJmOl3aXXUBUiM6GMvpW8/Nxz33s8lDOv4/V2ctOoIzMc675Seu5\\nR1BgGwm5BLTOSNyHdXglEkZxBkZC3iTrhR3wSbpsHy8eV6GsqR03WbSakyyXnBhi\\\ - n/++MfchhoxmG4F4JGDs+\\n=9WCS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.606776Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917/submissions\"\ - , \n \"url\": \"/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917\"\ - , \n \"uuid\": \"9832893a-001a-41db-b299-55be6c3f8917\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ - \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"unalike plaint\"\ + , \n \"key\": {\n \"fingerprint\": \"D62E44143E57136D1CBFC42544E687CF2A62D43C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAK+OY8V1Vw/twyYrmBXGkV+FLpYD8Gp2NmlfW6MVzgxeY9lNleMw\\\ + nRM65oOWCHpiLh4ZI+qS4h/tyJ95JK+q9FEl9hKqgZwWYHlQkTBq6mkx4m0taz45j\\n19rbuYhGp9XCdaDg0Oa5+q1hPNbD6QbrzdYBzHjjKXqYxbrBLrXyO9ZZABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEg3WTVRS0JBUExSV0hCR1FWT0tQSkVSRlFTU0ROVkYzVktY\\nTEQ3REtIVUdBQUFLVktYWFNSWVZaSVA3REJKQVlCWFhFTVlKQTJFSkhRNFJRVEVJ\\\ + nRkRLMkhIUUtFNTJIN0NKSFpQNlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEETmh88qYtQ8uwUD/AydTjc6MOQVv6NOiRcATc6s\\\ + nzkxVwaDxQDhsu5viy8yCS61MiaxfqfFFYvE8DZ+0sLP/S8noF4jrzUIL7uAZQ81o\\n5FR/4CmzC+tBHOqtBGQIok52HRjbQgzR6JWWLfZ3DDf1Cwm3ZrfFD5/8ylSA3AsM\\\ + n2AuWKAruHtDgaDbVq5Ck\\n=HiGI\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.163035Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/submissions\"\ + , \n \"url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\ + , \n \"uuid\": \"51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8009' + - '8001' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Wed, 14 Oct 2020 22:59:56 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -241,7 +241,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -251,7 +251,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/9832893a-001a-41db-b299-55be6c3f8917 + uri: http://127.0.0.1:8081/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e response: body: string: "{\n \"message\": \"Source and submissions deleted\"\n}\n" @@ -261,7 +261,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:56 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -275,7 +275,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -286,74 +286,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ - \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -361,7 +361,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:56 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index 2da77fd8d..e24229ce2 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,49 +18,105 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ - , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ - , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ + , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ + , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '3572' + - '8753' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -74,7 +130,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -85,74 +141,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ - \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 1, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + , \n \"number_of_documents\": 1, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -160,7 +216,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -174,7 +230,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -182,22 +238,36 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ - , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ - , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ + , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ + , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }\n ]\n\ }\n" headers: Content-Length: - - '532' + - '1783' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -211,7 +281,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -221,7 +291,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c response: body: string: "{\n \"message\": \"Submission deleted\"\n}\n" @@ -231,7 +301,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -245,7 +315,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -256,44 +326,98 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '3065' + - '8165' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 073cd65c2..2dc114db4 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,54 +18,112 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db/download\"\ - , \n \"filename\": \"1-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db\"\ - , \n \"uuid\": \"00479d52-955a-43eb-bf66-5fbf100589db\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ - , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ - , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b/download\"\ + , \n \"filename\": \"1-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b\"\ + , \n \"uuid\": \"a7e3339c-f5d2-400b-a64e-046d6e40288b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ + , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ + , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '4079' + - '9341' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -79,7 +137,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -90,54 +148,112 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db/download\"\ - , \n \"filename\": \"1-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db\"\ - , \n \"uuid\": \"00479d52-955a-43eb-bf66-5fbf100589db\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ - , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ - , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b/download\"\ + , \n \"filename\": \"1-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b\"\ + , \n \"uuid\": \"a7e3339c-f5d2-400b-a64e-046d6e40288b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ + , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ + , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '4079' + - '9341' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -151,7 +267,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -161,7 +277,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/00479d52-955a-43eb-bf66-5fbf100589db + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b response: body: string: "{\n \"message\": \"Submission deleted\"\n}\n" @@ -171,7 +287,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -185,7 +301,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -196,49 +312,105 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff/download\"\ - , \n \"filename\": \"2-four-lane_downturn-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 760, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"submission_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions/ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\ - , \n \"uuid\": \"ec63dee5-0412-4c8d-9816-cd146ec6ffff\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ + , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ + \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ + , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '3572' + - '8753' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index cdb0c5df6..d570aba06 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,65 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ - \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ + \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ - , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ - \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ + \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ - , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ - \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ + \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ + \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ + \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ - , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ - \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ + \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ - , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ - \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ - \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ }\n" headers: Content-Length: - - '4475' + - '5083' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -90,7 +99,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -98,41 +107,41 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba/download + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29/download response: body: string: !!binary | - hIwDJiOit8mAPG8BA/4jaGcGWprn0jHC4d8+klBECm0i1YW/HClkK8WOK4sIx2Kt8r44sNICVqaP - KWhBrF/usunU2Rj9ZzZRVxNaV3F6xe0rA4m5u9nAh557IyqYupVzsNS3c8uN92YS6IaKj+eIjPH+ - HbV7RlIy/gb+2FkRMGliHZIooLVC/iBK/TyNd4UCDAPD58TAoiAbKgEQAML2iueyhwsl29GOF1mA - u7L35E6xn2uGIervnj06GMDG7AeA9kYOdggGeSmdlKrfxpuJDowcNrX+QYgRZSlBEo7sTqngtPBc - xwUSSO4SNKZ8d4m+t5FBk233QmG3whTMe0MM+IDJHLqd7RONHZHggjq5861FgedmijH7zhsGBywu - TDd2i9DiCxrOZzZ1E0is+tS3Z/IQAV3vcVrgy3i0xsk/URdnWW1CGnSSXR2u+mAA/o+ySQKSuohh - 4ED4zXr0qNqtyYvv2GKael6xOPWafzZbga/JREkFs+xqBicY0/bAUgdUY13hdcUWj/ZQzsp/8fM0 - xpZOYr1HhG4X1M4Qxs2vcxEptCTu0m0q+tmXI1EqrELjg6U1qFgw+6LA2tuLTHytarPQe2jmU1ju - DuhJmKCv3lwO0hfv8998wyTBvslOBDpZqXUD4cWBA5KPlcr7cWRyLIx4RNXbRjmZ3+OLqTXbPJ1W - 7N8+/j3OVgaHei8d6AZyoop4ZvKiO+RX7StFXgEv+DYmWrhv76DtRJ75vbUFxqCoicNFv92wyenC - WQKJOTzLfcrwdM7LqpFOv+O7cqyQJB8qWkh9/DEV9YncE7Vlxb+13BZ1iEZRMMRyUIJOZDYJGAKN - gpuiEt6V0RKS6vxIKiHvD3M9V0Uur3WrNEWY/QbvoaHEl3cRIqSuew2/0lIBAg/ufznQLyd0Qs9z - tc3PNst1+4unlB5Y/EM046KU6J1kWIzksF82DsQ2OR4U9puhBmip3kpbJ4M4hJCZFQTJiwT95Q1s - Lt2aFIlgYn/CQjpB + hIwDUKWHpE2qfMMBBAChlQuL+PxmtcunD5Q+fQG0mceGCqmT4kGmbmUIVO0rSwfEy1vN34Vg2kEJ + x3AutNf2zdbiM2pTsa8iffLNNPYkpLVfd+ktIqy9napV/RHIpcvVTEd4Arz6Llx1xzF3WQjGL7ZZ + EzyrDBmlOAdXkOwuFxRNLPdSKpI4/RnGYHq/zYUCDAPD58TAoiAbKgEP/Ax4ETQ2hCiUNbGmhs9q + Y4DUHwVrtbP7bz6nLkUqQqy76xLKoYIHtO1liUAe9V/EW8BQYaKt97A/9I9IA7xnF0nJWcAH9FO7 + NGLdOYsy1+ZKyC5NSPRSmZ+eIzNLt3WdCEfX5lEEMZdnW6HDczOOED6mmyqKqbT1m7bBpISlH6sw + 52MDWTIqN7BK15XiLgE4DZIaSWWDaEmEfO16CgCMWv7tVKR3gyeWoTYYVym7tFQTT33Zzp7tMl3N + oCkgYVqndMxPIb3jZroCr5xNdG9wvHT0sFYRmVCk9TE4bhOfjzB6YTdrIoEKzuRAcurVsWRoGPgf + Q1ZnePMIAAm53y/DcMK7T379hI4AOexn2BzpbZFrnLPqtxzMLniLGR7tMR6iA97RuGVLxrbqV5YA + u6Xi/C0B+q+H59eDnBpjt+68aGkwP2cDDU72yoh+azuY8SubxA34SvaJAgcJ55CFTLt9cm7OnvVj + A17bPYkn+N/yxm0bVL2D7Ta0Q+wlU0HZMpc4ihGsY3yi+GCVsBjtr5MvVMeD4l0iVJy5YVMLwZ4l + Nvn0mTjUucqs0mXmdIa9BEry7fw7jVkF8aWCTWFMZwgYQKsRO690/549qYPOwvM8e+GCmEhvfYU0 + EFSJMpWI2+COh/8DqQuhoB1PjTXNNxAtbkD/wOabXVhR8HJoyZvuu8ST0lIBJLwESKkTULweBIxD + Zx2szqgnmxGsXX95iIdbyvmLaqktTrVPwqya/+hgwFjFBYmIe0adfsFvzHcMXWnEX9lQrdGurWax + etrYtRxujWR80D7S headers: Cache-Control: - public, max-age=43200 Content-Disposition: - - attachment; filename=3-four-lane_downturn-reply.gpg + - attachment; filename=5-subsonic_discoloration-reply.gpg Content-Length: - '753' Content-Type: - application/pgp-encrypted Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:57 GMT Etag: - - sha256:dcf91e62a64c0460b654545293101c17efbe0374c260d7b4b5a5ade22774fb34 + - sha256:62d79adff5b183ee872ed2ecbb06167f487b72fd66ae3a2f3ae8e1535296bccf Expires: - - Tue, 01 Sep 2020 07:06:58 GMT + - Thu, 15 Oct 2020 10:59:57 GMT Last-Modified: - - Mon, 31 Aug 2020 19:05:03 GMT + - Wed, 14 Oct 2020 22:59:06 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 0058e427e..0c2921430 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDIxNjA4ODUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTMyMDg1fQ.eyJpZCI6MX0.0qc97f-U7IGw3KXH9CzXlho6rgjV8EmTaBO3CTsUhYM + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,16 +18,98 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: '{"submissions":[{"download_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148/download","filename":"1-unkind_skyhook-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":593,"source_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b","submission_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148","uuid":"ad149cb6-8012-4bd1-9353-35c33cc20148"},{"download_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/4ea067ee-24b9-43bf-8a87-d465f95cb2ce/download","filename":"2-unkind_skyhook-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":595,"source_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b","submission_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/4ea067ee-24b9-43bf-8a87-d465f95cb2ce","uuid":"4ea067ee-24b9-43bf-8a87-d465f95cb2ce"},{"download_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/3b9ec029-873a-4a12-99e5-3ac2c921da47/download","filename":"1-divided_proline-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":637,"source_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9","submission_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/3b9ec029-873a-4a12-99e5-3ac2c921da47","uuid":"3b9ec029-873a-4a12-99e5-3ac2c921da47"},{"download_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/cbd56dd0-c65e-4811-a65c-d8815292e58d/download","filename":"2-divided_proline-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":666,"source_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9","submission_url":"/api/v1/sources/23a8cdc7-e90f-40cb-a485-967060372dc9/submissions/cbd56dd0-c65e-4811-a65c-d8815292e58d","uuid":"cbd56dd0-c65e-4811-a65c-d8815292e58d"},{"download_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/fda2e6fa-f451-4d2a-9a93-de4e0d7e7906/download","filename":"1-demoralized_cruller-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":591,"source_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16","submission_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/fda2e6fa-f451-4d2a-9a93-de4e0d7e7906","uuid":"fda2e6fa-f451-4d2a-9a93-de4e0d7e7906"},{"download_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/b5de546a-2850-4740-a650-9fbed6992561/download","filename":"2-demoralized_cruller-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":591,"source_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16","submission_url":"/api/v1/sources/ff6f03ab-778e-4552-aa8b-d75b2f528d16/submissions/b5de546a-2850-4740-a650-9fbed6992561","uuid":"b5de546a-2850-4740-a650-9fbed6992561"}]} - - ' + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + }\n" headers: Content-Length: - - '2892' + - '8165' Content-Type: - application/json Date: - - Thu, 08 Oct 2020 04:41:25 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -41,7 +123,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDIxNjA4ODUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTMyMDg1fQ.eyJpZCI6MX0.0qc97f-U7IGw3KXH9CzXlho6rgjV8EmTaBO3CTsUhYM + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -49,38 +131,38 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148/download + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqAQ//TKxBZbznui0QDMB8aIoSGr3qf3VGc0S3rz+igkJ7ml4AIsW2DPNDlh+m - Rl4AoxioPPIllpjYP6ZqkMI9GJYQmMYVacVnW/VA6PNke1wkZgZGtK0lbtT+3GY9+Bc6B70kzhqp - /+3cfw69SVQvFecSSiK8CY8O7H4Pz38ut5SYq6idvgeAqLWhRXw9Fz2K17xYb5CvI8vFSPOQC6jf - F+XZH4I7W+3dlbe17K8cSgohzkkHiu50LtnUrf8Cw15NSvins6PBkVTivlym96kOSoS2jkVJJIFr - 91wBhikx/Q21SXFvUB1XpyInArDPQ9NAvMLE/jv02ebuqpK+8DM9gNkKE6NpvMKepZpANwo1m9xW - YtDyyqdepUNLjQDvuCqpJZQcq+Phqp8JEr0niW4BDaqoxOMNuX52BRS0MhvnR3z2heJK3ZhGgvsn - WCsBEPTCSCw1i5/C2wkAg9xVB7xM5ssEUGXh8cbHbI0d0fX0U6XvftB7d97Z6CQhf9zKzQ8RRnXx - lxVP6Tz5NqnQCrjfyAMALx8Hk2UZfUiYi7tpmP3WAr+niXtFZxb4B7wiVsLAvaYUyl9eGZYIDoCY - tJMhRvjygZ0lXfVAXpRnB5AseKglowcGUMVPB8nGE9GbJdfhJtR0raumeswou5b6O1IjQCgzcmVY - 8pEfYiK6AaNk2FGMzL7SQAHglqEI/29yutM6wovZKtDZCDk4VJO18qQ9nl0Uxp0gUlWxv6x2eoUB - IdUrD51y3+wqLK+8lUHa1NNryQfm3Ec= + hQIMA8PnxMCiIBsqAQ/+I9lnTF1D5SKAZlzl7QJbch15mmAy0lWv8v8XDJLBvAaz29bj7lH14nkZ + FOELaOaVvXWnwyOWQjnp+KukBcisFfNir6gjvp0CtdEM/2piARs5htI/zd+sm5tp524IbtpRSQLS + vVi+0Nwq8C4IfzmmO0Pg2ggQdYk4kTfa6IkzOYVAIwu+UCGJqdIi+UQnStMKHqwterD2FIy4qLmz + t9X/EKnX9ZV75qqLLRRVVv6yymVvaQJuMh0BgHGYmoffFOQ4KVnSfn/hakPsQQAxOhxmLzc8JJjC + UAWPtwxaQ8+5cwwo0ciPdPWU6POQfsKmkiF7h0WynXGxzl4Cqt+uqfO7fXWBP+fL6c6fybWuPogx + OqssZd1fXxkzUtGd2lQNGdh7TnERbqKDm+BygRaR99fr2Ed4X1l+c7ApG3Kc/31gG4D31WejTyXp + ymgxL9mjrhxDqEZNUjRwVVC6LITDGWAq82MBPogAgBq/81TXDwXZZng0YrxpkutwhRXzrXy21bbN + kGjp36842wx84eUz0iZZYPygK30TwSo+PlV2K5oU7IPary+31aTXUCZaOiPkqWXi9VLQqfnI7GPl + HJ1Ozu6zLf3E8qT8IY5ts/dKYeuORatGPtB6H60TjqjbSC9HaGhhd8g/q7cb8hPt0xd3NxOZIjYW + FHZRjxS2oypzt1eTF23SUgHu80eVeDgUXPxjZvffFthXAUdrm8YhhObyqm/AMqI8WWtBjGrS4AOZ + 44jUHUFo2W6Qc21WbQtmkbzikTCFIX4f2xztjyb/GgipocbYKXh1QQo= headers: Cache-Control: - - max-age=43200, public + - public, max-age=43200 Content-Disposition: - - attachment; filename=1-unkind_skyhook-msg.gpg + - attachment; filename=3-subsonic_discoloration-msg.gpg Content-Length: - - '593' + - '611' Content-Type: - application/pgp-encrypted Date: - - Thu, 08 Oct 2020 04:41:25 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Etag: - - sha256:e52e15a2b5adaa497a7d2bc66a7cea78b07efaa60b0139fbb3006849e2296adb + - sha256:10049f224415ce52844d35709ca40d9cca22afb9bde06079c3d429e12f721a10 Expires: - - Thu, 08 Oct 2020 16:41:25 GMT + - Thu, 15 Oct 2020 10:59:58 GMT Last-Modified: - - Thu, 08 Oct 2020 00:10:30 GMT + - Wed, 14 Oct 2020 22:59:06 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -94,7 +176,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDIxNjA4ODUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTMyMDg1fQ.eyJpZCI6MX0.0qc97f-U7IGw3KXH9CzXlho6rgjV8EmTaBO3CTsUhYM + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -102,19 +184,22 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148 + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31 response: body: - string: '{"download_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148/download","filename":"1-unkind_skyhook-msg.gpg","is_file":false,"is_message":true,"is_read":false,"seen_by":[],"size":593,"source_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b","submission_url":"/api/v1/sources/5102e29d-eef6-4ac1-906c-4feff2f7ef6b/submissions/ad149cb6-8012-4bd1-9353-35c33cc20148","uuid":"ad149cb6-8012-4bd1-9353-35c33cc20148"} - - ' + string: "{\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\"\ + : [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n}\n" headers: Content-Length: - - '477' + - '535' Content-Type: - application/json Date: - - Thu, 08 Oct 2020 04:41:25 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index 24b8c26da..b7e285205 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ - \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -117,7 +117,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies response: body: string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n" @@ -127,7 +127,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index b7e36abda..695015603 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -27,7 +27,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index 8190e77bf..1988f282b 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane\ - \ downturn\", \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -117,7 +117,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/flag + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/flag response: body: string: "{\n \"message\": \"Source flagged for reply\"\n}\n" @@ -127,7 +127,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:58 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -141,7 +141,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -149,33 +149,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654 + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9 response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"four-lane downturn\", \n \"key\"\ - : {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\", \n\ - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n \"remove_star_url\"\ - : \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\", \n\ - \ \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"subsonic discoloration\", \n \"\ + key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n\ + \ \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n}\n" headers: Content-Length: - - '1514' + - '1518' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index 10c3197cc..20a016109 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -118,65 +118,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }, \n \ - \ {\n \"filename\": \"3-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ + \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\ - , \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"0ff58047-fa79-40b9-b1bc-8fda7324d5e9\"\n }, \n \ - \ {\n \"filename\": \"4-uplifted_waste-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ + \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies/1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\ - , \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"1d9f72de-c13a-497a-8efd-1d6cc9e918a4\"\n }, \n \ - \ {\n \"filename\": \"3-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ + \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ + \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ + \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/567b4981-5d19-4fcd-a3ee-f907b6939a89\"\ - , \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"567b4981-5d19-4fcd-a3ee-f907b6939a89\"\n }, \n \ - \ {\n \"filename\": \"4-artificial_rough-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ + \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies/14cde394-13a7-4c1c-a344-3a0d0468447f\"\ - , \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"14cde394-13a7-4c1c-a344-3a0d0468447f\"\n }, \n \ - \ {\n \"filename\": \"3-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"eaa48c36-700e-4ade-bd20-fcaafc7a9d05\"\n }, \n \ - \ {\n \"filename\": \"4-antagonistic_hesitation-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies/83492695-cad6-430b-b1d8-339bc5689de3\"\ - , \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"83492695-cad6-430b-b1d8-339bc5689de3\"\n }\n ]\n\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ }\n" headers: Content-Length: - - '4475' + - '5083' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 836368812..62788d2e0 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,44 +18,98 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '3064' + - '8165' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index fdeb198da..891ff6c31 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -19,8 +19,8 @@ interactions: response: body: string: "{\n \"first_name\": \"\", \n \"is_admin\": true, \n \"last_login\"\ - : \"2020-08-31T19:06:57.032162Z\", \n \"last_name\": \"\", \n \"username\"\ - : \"journalist\", \n \"uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\n\ + : \"2020-10-14T22:59:55.614299Z\", \n \"last_name\": \"\", \n \"username\"\ + : \"journalist\", \n \"uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\n\ }\n" headers: Content-Length: @@ -28,7 +28,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index 33f0b9f2a..16ba67646 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -115,30 +115,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }\n ]\n\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1135' + - '1295' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index fcb08f2f9..de378f9eb 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -115,30 +115,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"3-four-lane_downturn-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n }, \n \ - \ {\n \"filename\": \"4-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\ - , \n \"size\": 902, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"8a5e3f11-b265-4956-a6bf-41680ce7a27e\"\n }\n ]\n\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1135' + - '1295' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -152,7 +155,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -160,22 +163,23 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29 response: body: - string: "{\n \"filename\": \"3-four-lane_downturn-reply.gpg\", \n \"is_deleted_by_source\"\ + string: "{\n \"filename\": \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\", \n \"reply_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies/9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\ - , \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9049ecdc-a96d-46bd-b5e6-161af7e8f2ba\"\n}\n" + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\n ], \n\ + \ \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n}\n" headers: Content-Length: - - '507' + - '575' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 38306b0f8..6fb66b5fd 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -115,33 +115,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654 + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9 response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"four-lane downturn\", \n \"key\"\ - : {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\", \n\ - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n \"remove_star_url\"\ - : \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\", \n\ - \ \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"subsonic discoloration\", \n \"\ + key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n\ + \ \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n}\n" headers: Content-Length: - - '1514' + - '1518' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index ae27e352d..0387dea4a 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:58 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index 7f5cf786e..04d37d0a3 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,44 +18,98 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151/download\"\ - , \n \"filename\": \"1-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 636, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/8a5f2eda-d0a9-42db-abec-99774a9e1151\"\ - , \n \"uuid\": \"8a5f2eda-d0a9-42db-abec-99774a9e1151\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf/download\"\ - , \n \"filename\": \"2-artificial_rough-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"submission_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions/3a23bb39-974e-4609-a05c-2aa814477aaf\"\ - , \n \"uuid\": \"3a23bb39-974e-4609-a05c-2aa814477aaf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd/download\"\ - , \n \"filename\": \"1-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/c8d772b6-8849-4477-8f26-35ad86b50bcd\"\ - , \n \"uuid\": \"c8d772b6-8849-4477-8f26-35ad86b50bcd\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf/download\"\ - , \n \"filename\": \"2-antagonistic_hesitation-msg.gpg\", \n \"\ - is_read\": false, \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"submission_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions/03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\ - , \n \"uuid\": \"03732157-f9c9-4aee-8a66-0ac2e10ed4bf\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ }\n" headers: Content-Length: - - '3064' + - '8165' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -69,7 +123,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -77,33 +131,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9 response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"uplifted waste\", \n \"key\":\ - \ {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\", \n\ - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"subsonic discoloration\", \n \"\ + key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\", \n\ - \ \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n}\n" + : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n\ + \ \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n}\n" headers: Content-Length: - - '1511' + - '1518' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -117,7 +171,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -125,27 +179,29 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : true, \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3/download\"\ - , \n \"filename\": \"2-uplifted_waste-msg.gpg\", \n \"is_read\"\ - : false, \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\ - , \n \"uuid\": \"38b74926-8e8e-4308-8c1c-4fb6fa092ad3\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1030' + - '1195' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -159,7 +215,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -167,21 +223,22 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31 response: body: - string: "{\n \"download_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a/download\"\ - , \n \"filename\": \"1-uplifted_waste-msg.gpg\", \n \"is_read\": true, \n\ - \ \"size\": 593, \n \"source_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"submission_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions/1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\ - , \n \"uuid\": \"1c7d4577-2cb7-4d3a-bde2-4f8341472c4a\"\n}\n" + string: "{\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\"\ + : [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n}\n" headers: Content-Length: - - '464' + - '535' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index 45c61b621..935a4d68e 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -115,17 +115,29 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions response: body: - string: "{\n \"submissions\": []\n}\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }\n ]\n\ + }\n" headers: Content-Length: - - '24' + - '1195' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-users.yml b/data/test-get-users.yml index a5576c51c..ddeedb68c 100644 --- a/data/test-get-users.yml +++ b/data/test-get-users.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDIxNDYxMDIsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyMTE3MzAyfQ.eyJpZCI6MX0.z7UGeKx0191qRhU97f0bJJDuY4y4fJi9njDGD0OXrpA + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,16 +18,18 @@ interactions: uri: http://127.0.0.1:8081/api/v1/users response: body: - string: '{"users":[{"first_name":"","last_name":"","username":"journalist","uuid":"0a5db1b6-a003-4aa9-812b-53c6abbf1124"},{"first_name":"","last_name":"","username":"dellsberg","uuid":"3325fde8-a339-4847-aa3e-d2be412fbaf7"}]} - - ' + string: "{\n \"users\": [\n {\n \"first_name\": \"\", \n \"last_name\"\ + : \"\", \n \"username\": \"journalist\", \n \"uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n }, \n {\n \"first_name\": \"\", \n \"last_name\": \"\"\ + , \n \"username\": \"dellsberg\", \n \"uuid\": \"ec48edc1-778f-4320-8720-ff915969911c\"\ + \n }\n ]\n}\n" headers: Content-Length: - - '217' + - '316' Content-Type: - application/json Date: - - Thu, 08 Oct 2020 00:35:02 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index bf7786fef..cc5c19328 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -127,7 +127,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-logout.yml b/data/test-logout.yml index a01992f41..cf6a5aa13 100644 --- a/data/test-logout.yml +++ b/data/test-logout.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -27,7 +27,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:07:00 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index f656bbf84..c2751645e 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 5, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 7, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -108,7 +108,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -118,19 +118,19 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies response: body: - string: "{\n \"filename\": \"6-four-lane_downturn-reply.gpg\", \n \"message\"\ + string: "{\n \"filename\": \"8-subsonic_discoloration-reply.gpg\", \n \"message\"\ : \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\ \n}\n" headers: Content-Length: - - '146' + - '150' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:07:00 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index c705c33fb..29bc16c6c 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -108,7 +108,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -118,19 +118,19 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies response: body: - string: "{\n \"filename\": \"5-four-lane_downturn-reply.gpg\", \n \"message\"\ - : \"Your reply has been stored\", \n \"uuid\": \"3ab2e017-121e-4b58-8b5a-3a10af991d4c\"\ + string: "{\n \"filename\": \"7-subsonic_discoloration-reply.gpg\", \n \"message\"\ + : \"Your reply has been stored\", \n \"uuid\": \"63778a9d-5d28-4467-9479-38473e020f4b\"\ \n}\n" headers: Content-Length: - - '146' + - '150' Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:59 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-seen.yml b/data/test-seen.yml new file mode 100644 index 000000000..c22fab3a4 --- /dev/null +++ b/data/test-seen.yml @@ -0,0 +1,271 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/submissions + response: + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ + , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ + , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ + , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ + , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ + , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ + , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ + , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ + , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ + , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ + , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ + , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ + , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ + , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ + , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ + , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ + , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ + , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ + , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ + , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ + , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ + , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ + , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ + , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ + , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ + , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ + , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ + , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ + , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + }\n" + headers: + Content-Length: + - '8165' + Content-Type: + - application/json + Date: + - Thu, 15 Oct 2020 00:05:55 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/replies + response: + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ + , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ + \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ + \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ + \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ + \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ + \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ + \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ + journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ + \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ + \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ + : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }, \n \ + \ {\n \"filename\": \"7-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/63778a9d-5d28-4467-9479-38473e020f4b\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 895, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"63778a9d-5d28-4467-9479-38473e020f4b\"\n }, \n \ + \ {\n \"filename\": \"8-subsonic_discoloration-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ + , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ + : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\"\ + , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + \n ], \n \"size\": 895, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\n }\n ]\n\ + }\n" + headers: + Content-Length: + - '6357' + Content-Type: + - application/json + Date: + - Thu, 15 Oct 2020 00:05:55 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK +- request: + body: '{"files": ["1c9f78e7-2f3c-495f-aea1-1cdf5668fda0", "8e06b833-1ca6-49f7-af4d-c6024c88a9bc", + "7adfa4dd-84a8-459b-8975-908c8c6cbec4", "4a3b9999-2146-4a97-bec6-372a9defb259", + "cb2dd23c-0914-4533-ab75-c28b85ef1f69", "7e690293-2783-47a8-9a11-c1668c8438e6"], + "messages": ["0d1a631e-3010-4d96-9169-5b973e308a31", "2d33d119-9a74-41cb-86cb-313d884b6891", + "194849f8-25e9-4992-9c85-20b1c255764e", "ff6800fc-b88b-418c-8485-d7f29f7cd400", + "4058ebd2-f4f6-4ef8-9bf5-3102f004a508", "c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e", + "2a4a46b7-d5ba-43d7-808c-986351b8bef1", "3ecbffb5-01e8-4176-8ddd-b9b056c517f6"], + "replies": ["d565d3eb-e128-4356-8b07-439b2cae9f29", "35dda97c-debb-4d0a-af02-0376aae43f78", + "d81d63dd-2f6a-4af4-9f47-6454419be092", "5706c8ff-e86e-4998-a6e1-c6a5b2b9160f", + "5335680f-6f66-474a-bef6-675694557c0c", "e12bf324-6710-4228-95e6-b70cb6e16cc2", + "6df313e4-031e-4a06-b8f2-fe342ce76650", "54afdfd7-f206-4e5c-a06c-1033a6dadeda", + "63778a9d-5d28-4467-9479-38473e020f4b", "e467868c-1fbb-4b5e-bca2-87944ea83855"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM + Connection: + - keep-alive + Content-Length: + - '998' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: POST + uri: http://127.0.0.1:8081/api/v1/seen + response: + body: + string: "{\n \"message\": \"resources marked seen\"\n}\n" + headers: + Content-Length: + - '41' + Content-Type: + - application/json + Date: + - Thu, 15 Oct 2020 00:05:55 GMT + Server: + - Werkzeug/0.16.0 Python/3.5.2 + status: + code: 200 + message: OK +version: 1 diff --git a/data/test-setup.yml b/data/test-setup.yml index 9ca9e1097..09a0b5730 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "journalist", "passphrase": "correct horse battery staple - profanity oil chewy", "one_time_code": "205004"}' + profanity oil chewy", "one_time_code": "641659"}' headers: Accept: - '*/*' @@ -17,9 +17,9 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"expiration\": \"2020-09-01T03:06:57.031782Z\", \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_uuid\": \"f9e1600b-4a77-40c4-a4fc-e68259df7adc\"\ - , \n \"token\": \"eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY\"\ + string: "{\n \"expiration\": \"2020-10-15T08:05:55.446302Z\", \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ + , \n \"token\": \"eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM\"\ \n}\n" headers: Content-Length: @@ -27,7 +27,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:06:57 GMT + - Thu, 15 Oct 2020 00:05:55 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 8b847b143..801477dfe 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -18,74 +18,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -93,7 +93,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:07:00 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -117,7 +117,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star response: body: string: "{\n \"message\": \"Star added\"\n}\n" @@ -127,7 +127,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:07:00 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -141,7 +141,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Length: @@ -151,7 +151,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star + uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star response: body: string: "{\n \"message\": \"Star removed\"\n}\n" @@ -161,7 +161,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:07:00 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -175,7 +175,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJhbGciOiJIUzI1NiIsImV4cCI6MTU5ODkyOTYxNywiaWF0IjoxNTk4OTAwODE3fQ.eyJpZCI6MX0.RXCqanRX2A_p7vQfzb9bmcthdcd38TTMNPqsMQnX_sY + - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 Connection: - keep-alive Content-Type: @@ -186,74 +186,74 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"four-lane downturn\"\ - , \n \"key\": {\n \"fingerprint\": \"A5B46A0C75B6A1679243F17B2623A2B7C9803C6F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJiRvi8eVMeqej7dZJDPsIHjiSN80EuSx2nDTn3egjdPjhUhs5tE\\\ - nIDcLlgPAJ4LKZUEIhbIO9yH/NRomliL9Qib7EvnpQHhHWqSb0sg13NtNijeAHzpx\\nmKdwmgN79XqsOrJN9nFcC2WQCb2kxuTIHxFxBGyHMvMaV5CIn+JXeRhpABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEE3V05RUUhPNlVFV0NQM1ZZWTJRMkRRTkFFSEU2VlBRS0lI\\nUUZRM1VTTUFLT1FVUENUM0NLN0lCU0FOUk8zRUJOSVlIU1JGQTU2WVAzSlJTWVhK\\\ - nTkRXTzNUUVROSUs1NzJONlVQV0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECYjorfJgDxvsM0D+wXQx5EsIhDRgj85CvUzUcl1\\\ - niv7tI/43Fvl3sIm2o7lxlwjCJPJiyTdsW86Xf7yOqLSP7yCTNHxHg+Z5Bt0e8/Z0\\n9RHMsap5J+0ZRPgNvOJUn5EgR7RAeOctCpYrcZkoJKnKVFO6ygKWauqnZHxU/S/g\\\ - nLpLNr0G4RIGNZFJz5kAV\\n=TScf\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:03.926883Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 0, \n\ - \ \"remove_star_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654/submissions\"\ - , \n \"url\": \"/api/v1/sources/9151bc7b-2a45-4195-9a3f-7298bd047654\"\ - , \n \"uuid\": \"9151bc7b-2a45-4195-9a3f-7298bd047654\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"uplifted waste\"\ - , \n \"key\": {\n \"fingerprint\": \"6E1880699CACC08C59184B37C186CCE4493CD2F2\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMGvJIDJ7FIVKUaoPmoAaPsRm4MBhLxpO7XU5zqydd8nHgUPeOrk\\\ - n4juA96lZbu1Pr+XCxHPzOyt7PwVLCAq353Q64ge9WhIukp7kAlFUlOou8lNV9sci\\nJAVKlpO79pet4JdC6+mO4PkRjvBztAbycMnfUaot2GScSPvTVx5fL30fABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPExPSFRJS1BFUVhFS01CQkRMTlNaUE9XRFZPQlJKTEUzQTdK\\nSUdNNVRWRDJNN0NOVDdaUUdMM1dLRDRLSDZSU0pET0dITFpHQ1VWNDJaN0lJVEIy\\\ - nRlBZVks3T1NCTjVHUEtIV1VJMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEMGGzORJPNLyYGID/0UMJcx2xFDqrX9ATRp1Uubo\\\ - nmKYW7GPkRwTZGfTVmkGUjCfeU30Ewoyx4+4wX4LMahkb3rJcy5UIqS5i+8Le0zwj\\nBVUwgPh80lTPq5bf3J3DKnatVeipp/9Tz2D//R50yBafTLBzRHRIUAFrhEX8Q+iQ\\\ - nwABlt9w3p8D9ts5Gbgki\\n=Mqfp\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.225139Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab/submissions\"\ - , \n \"url\": \"/api/v1/sources/7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\ - , \n \"uuid\": \"7899f1e0-48fe-4795-98b2-ac133dcc53ab\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"artificial\ - \ rough\", \n \"key\": {\n \"fingerprint\": \"2A6C688ECB2C31F71D6180D24A1FE15F5033E2AC\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL65aEASJ51zLPY6yTfMioFUFyGKrXWR4lL5DorZKTHVErf05Zb4\\\ - ncAC7lkvDBZkYN/+XKdQ8KDGFLl5Og/6uAmVKbOSZ4bZ7CN3cVq2XByQaWz/N3jw+\\nMv5L7lvrOCQ9ftco7vgdXk6+Jd5gSGvxByiKqt70tEc2bHlHVdcyYjf9ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDNRS1k0Q001U0hHMzREM1Y0S0lKWEFTMzRFUEhIRUJMQ0hT\\nTjVOTUUzSjVVVklSMlFWVFYzQUIzNVVYRlFEWFhKT1NFT0RINVROSjVNMktNT1U0\\\ - nTkVZTERST1AzTFFFTUxBTk41VkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEEof4V9QM+KsJuIEAK79iDx8awAXBKpFS6J76VXr\\\ - nSFS0uXaneRER6XnQxtnTstvtzzzTOTjWjoyAgqTvg7nAiUT6AiWI7LOApVunoryh\\n+Uq6zh2liLkRJFsT9IpiC+jF2VoCBKJWDRrQyIxtFMVgsJkmzbRk9Y+8FrphWSfc\\\ - n6VjVrcDGcDl+54Pv0dwN\\n=TgZB\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.543546Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0/submissions\"\ - , \n \"url\": \"/api/v1/sources/6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\ - , \n \"uuid\": \"6a1bbd23-e336-49b5-a6ba-d1e7880529f0\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/add_star\"\ - , \n \"interaction_count\": 4, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"antagonistic\ - \ hesitation\", \n \"key\": {\n \"fingerprint\": \"BD3BC81FCE21F5E46E0116C97F698B2E1C58228F\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOeVxKI6RlmU3XyfuuIdJn1Uhi+qk/JnAk5DiqUzTS44Y4GHy/Ns\\\ - n2tuOT5QF/MZu+H3wkDmxA9DSkfuXH/vMvuTiFPUWaRXd/aOA/N3QaVxrcAUuTxCx\\nYe8Li1WnDv4W0bgdtr++0mgPrz6QFntVhAihihqkqLocGHecw1datvxrABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEEzT0lOT0RWSEtVNzdCWDUyQ0NEU1ZQRzRNWkRUWkRRR01G\\nNFVSQkRNWDY2SlpKRllWSEE0TVRGRVpURkdPUjRXQkE0UVg1NUFTS0pOVkFGUlBM\\\ - nSUJJS1JBSFMzVFhQQk1aUjdHNUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEH9piy4cWCKPZWQEAIhvH8eTR3rCtpmcZ4TSgPMi\\\ - naeTd6PKqA9p5djwYo90cdziHTJTAP2mVpKoyeglweNgC+Nmuig5hLDzhcLi5PI12\\nvD2Z3cdYNtC/0Ew02rmMZg4ALH9TvjY6KGxYwchKolyu0F6TjFs0+ahXAvbX27SO\\\ - n9rQOslwdXtl2kA6KdTi2\\n=OOuR\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-08-31T19:05:04.859544Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ + , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ + ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ + nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ + nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ + nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346/submissions\"\ - , \n \"url\": \"/api/v1/sources/68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\ - , \n \"uuid\": \"68c0cdee-764f-4cb6-8af9-c3abe66e8346\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ + , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ + , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ + \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ + ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ + nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ + nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ + n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ + , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ + , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ + , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ + nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ + nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ + nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ + n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ + , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ + , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ + \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ + nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ + nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ + nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ + nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ + , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ + , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ }\n" headers: Content-Length: @@ -261,7 +261,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 31 Aug 2020 19:07:00 GMT + - Wed, 14 Oct 2020 22:59:59 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 3e379e2f9..08e950dc7 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/1146fff3-ad43-4e0f-b49b-d4522f871b04\\\", \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"1146fff3-ad43-4e0f-b49b-d4522f871b04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/48b46145-9be7-45a6-9d9b-779e9aed706a\\\", \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"48b46145-9be7-45a6-9d9b-779e9aed706a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/08932993-a3e6-4403-a540-87134cecc105\\\", \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"08932993-a3e6-4403-a540-87134cecc105\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/c2bed450-2da0-421b-b361-da1afb05e436\\\", \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c2bed450-2da0-421b-b361-da1afb05e436\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4451\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/1146fff3-ad43-4e0f-b49b-d4522f871b04\\\", \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"1146fff3-ad43-4e0f-b49b-d4522f871b04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/48b46145-9be7-45a6-9d9b-779e9aed706a\\\", \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"48b46145-9be7-45a6-9d9b-779e9aed706a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/08932993-a3e6-4403-a540-87134cecc105\\\", \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"08932993-a3e6-4403-a540-87134cecc105\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/c2bed450-2da0-421b-b361-da1afb05e436\\\", \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c2bed450-2da0-421b-b361-da1afb05e436\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4451\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:29 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/1146fff3-ad43-4e0f-b49b-d4522f871b04\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:29 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"4-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/48b46145-9be7-45a6-9d9b-779e9aed706a\\\", \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"48b46145-9be7-45a6-9d9b-779e9aed706a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/08932993-a3e6-4403-a540-87134cecc105\\\", \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"08932993-a3e6-4403-a540-87134cecc105\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-frowsy_otter-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies/c2bed450-2da0-421b-b361-da1afb05e436\\\", \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c2bed450-2da0-421b-b361-da1afb05e436\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"d1582b2a-bdc6-4e12-bfee-0bf0f20ce0c8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-venous_sewing-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3899\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/48516080-0d80-43dc-9e08-dfbe02117c8d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"48516080-0d80-43dc-9e08-dfbe02117c8d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/ca6e2271-fde4-439f-b117-438387433a41\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 898, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"ca6e2271-fde4-439f-b117-438387433a41\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6199\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/48516080-0d80-43dc-9e08-dfbe02117c8d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"48516080-0d80-43dc-9e08-dfbe02117c8d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/ca6e2271-fde4-439f-b117-438387433a41\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 898, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"ca6e2271-fde4-439f-b117-438387433a41\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6199\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:31 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:31 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"6-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/48516080-0d80-43dc-9e08-dfbe02117c8d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"48516080-0d80-43dc-9e08-dfbe02117c8d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/ca6e2271-fde4-439f-b117-438387433a41\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 898, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"ca6e2271-fde4-439f-b117-438387433a41\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5650\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:32 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index 14d645872..cf76a86e5 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"venous sewing\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"4A65CDDCF501F992EFB4541F7D4C26944FAFBAC4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALUnKVGjUNMqT2W2kDAZ0nypIe6LnVZtLItbKV43DxAJduDmsI+a\\\\nuH9vPUHku/EZ+vLQIUvm/rYfSckdbmrqDSalFhlV0yDrcIEbJ1XCDjX1sZuLtPqJ\\\\nIS9bMbxAGSPcLlU/WQpt+fgWdMgKZrTwflPoIAld6aNJzYY6CtzNZjLFABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc3NlA3RVAyUFBZQ0ZTSVJVUVhLSEpGUlA2VlgzWFlEQVoy\\\\nVEVJNTZDM0k3SlhRWkIzUElORUxST0NQRkNNRjc0MkdPWUFCS0xENU9MQlo2Wk1V\\\\nQUVNS1o0RVE3TkRQQkhBR0dJVFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEH1MJpRPr7rE+AwD/RIJy24fNMtXMm4hYPKXAhDT\\\\nFH4RoP5zoMTG9bagE3KFvKwtMuFyiBK7GbySlVtT5/bh6PI8p/MHlAde4HgbjJo0\\\\nKf+cMMZsBg007yiAD6+z581sO3QOPHLGCPxznyxFlgXXaowPWKoy3nR2N0E6OOHJ\\\\nTg0SUzeE5WyLoUb6X8o/\\\\n=KqFc\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.650801Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4803\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"venous sewing\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"4A65CDDCF501F992EFB4541F7D4C26944FAFBAC4\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALUnKVGjUNMqT2W2kDAZ0nypIe6LnVZtLItbKV43DxAJduDmsI+a\\\\nuH9vPUHku/EZ+vLQIUvm/rYfSckdbmrqDSalFhlV0yDrcIEbJ1XCDjX1sZuLtPqJ\\\\nIS9bMbxAGSPcLlU/WQpt+fgWdMgKZrTwflPoIAld6aNJzYY6CtzNZjLFABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc3NlA3RVAyUFBZQ0ZTSVJVUVhLSEpGUlA2VlgzWFlEQVoy\\\\nVEVJNTZDM0k3SlhRWkIzUElORUxST0NQRkNNRjc0MkdPWUFCS0xENU9MQlo2Wk1V\\\\nQUVNS1o0RVE3TkRQQkhBR0dJVFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEH1MJpRPr7rE+AwD/RIJy24fNMtXMm4hYPKXAhDT\\\\nFH4RoP5zoMTG9bagE3KFvKwtMuFyiBK7GbySlVtT5/bh6PI8p/MHlAde4HgbjJo0\\\\nKf+cMMZsBg007yiAD6+z581sO3QOPHLGCPxznyxFlgXXaowPWKoy3nR2N0E6OOHJ\\\\nTg0SUzeE5WyLoUb6X8o/\\\\n=KqFc\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.650801Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\", \\n \\\"uuid\\\": \\\"fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4803\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:31 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/fbfd8c3e-c6f8-443b-a84d-9181bd12ac29\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:32 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3212\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:32 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unoccupied hydration\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B422C98C7E44ABB157E1472801C6AB4F7E88B1F0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMJihZfKsXleHh4Prxfwitu5Zc0Mp5d2Ig15wp71csFXkKmBDB0h\\\\nteyEEFTxqFMzIeNnZ+zqokYefu33C95jNeukMMfmMwMnsinPTsdtSYZrsmBsw+ng\\\\nzsVpSKjUgMm6kp8yFw6AKT/lT2Ax2CWo9axuq7Hjpvk8rBUUNH6T/Pp5ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLU1lLNVpBRFQ2SDdEU0pFQlg1Wk42UVpBTVBGS1VITkU3\\\\nR1RHVVhMNkVFR1VYVENZS0gzWVlMWUVYUjRaTklYUDVYU1ZBS01WT1dERFRKQ1pR\\\\nRTVWTzRMWE5QRUNUMkk2TFVaVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEAHGq09+iLHwlxsD/R4vZ8+nFQRxDnWYHcqzzt3V\\\\nq8OKjI8/nAVnvVC/Dam7+wG+nerz7fkjeZQPpshg3bArYEjEkeymZz9fFmARsZQo\\\\nxcP+RUPOiN81AU3DysxpZULkxpXH1ILO4jPv9GYdr/BaUH5qXdkt0mUQ9F2tkH6I\\\\nARz2hy9JzLiFwqI/omo5\\\\n=vwR/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:15.876191Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"2caffd52-ca47-4479-86fd-97164d5ae6ab\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8016\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:32 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unoccupied hydration\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B422C98C7E44ABB157E1472801C6AB4F7E88B1F0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMJihZfKsXleHh4Prxfwitu5Zc0Mp5d2Ig15wp71csFXkKmBDB0h\\\\nteyEEFTxqFMzIeNnZ+zqokYefu33C95jNeukMMfmMwMnsinPTsdtSYZrsmBsw+ng\\\\nzsVpSKjUgMm6kp8yFw6AKT/lT2Ax2CWo9axuq7Hjpvk8rBUUNH6T/Pp5ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLU1lLNVpBRFQ2SDdEU0pFQlg1Wk42UVpBTVBGS1VITkU3\\\\nR1RHVVhMNkVFR1VYVENZS0gzWVlMWUVYUjRaTklYUDVYU1ZBS01WT1dERFRKQ1pR\\\\nRTVWTzRMWE5QRUNUMkk2TFVaVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEAHGq09+iLHwlxsD/R4vZ8+nFQRxDnWYHcqzzt3V\\\\nq8OKjI8/nAVnvVC/Dam7+wG+nerz7fkjeZQPpshg3bArYEjEkeymZz9fFmARsZQo\\\\nxcP+RUPOiN81AU3DysxpZULkxpXH1ILO4jPv9GYdr/BaUH5qXdkt0mUQ9F2tkH6I\\\\nARz2hy9JzLiFwqI/omo5\\\\n=vwR/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:15.876191Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"2caffd52-ca47-4479-86fd-97164d5ae6ab\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8016\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:33 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:34 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6417\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:35 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index 01e737587..94c4e1ff4 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3212\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:33 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"frowsy otter\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"47E12FC0AAEC8AA97F164CC187ED18288E0E346F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOfmVeJ3ks/DMi4EyhX2VcFclraFgqK52mD8GuhkNQR5w1bzL3mm\\\\nU5COKpORhZkWY7PjPY6kqn0usJRkLIrA8y9ZUPvyJwWhk4bhAsLrFNJvA8mJeFyV\\\\n4Tj0bIBv1Nyy8nMb5gx4boii3ppJ9Zrddhn04nS411YRZPiYJrGmhpIVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFNES1lXWEtPQzRTR0lBRlVSNk9KNlU2S1RGVDVLUE9VVEtE\\\\nQlRUWkk3QlRURlJaSlZLT1hNRVlVNDVBUU40RFk1VExQTEs0RVZORklNNEhDM1gy\\\\nTDJNVEhPT1JRNDUzSUNKSUsyQlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEIftGCiODjRvhRcD/R46Ul5S0s5mvuc36BT+ad6J\\\\n4+tZIwqFjg0g5OisO7Fi1cq0nnTqS05kAhq+LqDkA7Eo75EGJR8ADj4FEQ0tSkkF\\\\nNKeNpjpeehQPIyo8vzUWjWbWmpwfSv52xFCUVlWsRGPjI6ICldaaEqd0zs2ZhGXj\\\\nKQSkORZWVDK8JjDjAgvm\\\\n=rkDx\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:08.949649Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\", \\n \\\"uuid\\\": \\\"c4d85b07-8d02-4f49-b9cc-e90d3251c226\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3212\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:33 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/c4d85b07-8d02-4f49-b9cc-e90d3251c226\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:35 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:35 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6417\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:35 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6417\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:36 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:37 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:37 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index 03dd6bb76..fd814fe8c 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546/download\\\", \\n \\\"filename\\\": \\\"1-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546\\\", \\n \\\"uuid\\\": \\\"c4bf98b2-419b-43e0-ae10-b2756a84a546\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:36 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546/download\\\", \\n \\\"filename\\\": \\\"1-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546\\\", \\n \\\"uuid\\\": \\\"c4bf98b2-419b-43e0-ae10-b2756a84a546\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1045\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:36 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/c4bf98b2-419b-43e0-ae10-b2756a84a546\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:37 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:37 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3/download\\\", \\n \\\"filename\\\": \\\"1-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3\\\", \\n \\\"uuid\\\": \\\"c1676853-00e4-4e6c-b703-79ddec93dfa3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7031\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3/download\\\", \\n \\\"filename\\\": \\\"1-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3\\\", \\n \\\"uuid\\\": \\\"c1676853-00e4-4e6c-b703-79ddec93dfa3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7031\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:39 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6443\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:40 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index c2ab916ba..e26b98cd5 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157/download\\\", \\n \\\"filename\\\": \\\"2-ninety-two_naturopath-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\\\", \\n \\\"uuid\\\": \\\"f0977712-ef5b-4ce1-94e8-4d9500958157\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:39 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions/f0977712-ef5b-4ce1-94e8-4d9500958157\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:39 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:40 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6443\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:40 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 1, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1783\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:42 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:42 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index 3182d6e3c..ba3cd98fa 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:40 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"6988a7d6-a00a-4815-a62c-52cdea15aa93\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-ninety-two_naturopath-reply.gpg\", \"Content-Length\": \"733\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 31 Aug 2020 19:21:09 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Tue, 01 Sep 2020 07:23:40 GMT\", \"Etag\": \"sha256:11444d565cadf5759e907b23bf0ebc64df5c6179875a97c1460ba0feb2a77035\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:40 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3827\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:43 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"5d3a9021-9f20-47ac-9b8b-e8f0bcdccc5f\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=5-revolutionary_theology-reply.gpg\", \"Content-Length\": \"735\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Wed, 14 Oct 2020 23:00:16 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Thu, 15 Oct 2020 11:00:43 GMT\", \"Etag\": \"sha256:8b0b8ecf31fe17460554acc44dacc34e7bdb53d1178805aab964e56fd91463cb\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:43 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index a922e6b09..15ff5dc3a 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5093\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"3eae9a49-7662-432d-bd6d-5980bc68563b\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-costly_monarchist-msg.gpg\", \"Content-Length\": \"623\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Mon, 31 Aug 2020 19:25:03 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Tue, 01 Sep 2020 07:25:08 GMT\", \"Etag\": \"sha256:0df7cd6df7b017bf16a493dd7a6ffafe183022ca8117d1ef5e20597d47abe1fb\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:08 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:12 GMT\"}, \"version\": \"0.3.0\\n\"}"} +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:44 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"54501ee6-5f90-4b7d-a442-9f1aa320a607\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-revolutionary_theology-msg.gpg\", \"Content-Length\": \"593\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Wed, 14 Oct 2020 23:00:16 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Thu, 15 Oct 2020 11:00:45 GMT\", \"Etag\": \"sha256:bff2be843bb81b8e79cd28087532ea72105938e64a085239ca7464dd76d0f670\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:45 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:45 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index 99c797b65..72590b175 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:45 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:46 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 49ceb1294..543e427c0 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index d6f9ce4de..04ebe2dcc 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1621\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:47 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:47 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1517\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:48 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:47 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:48 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:48 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index bf114d9dc..b8e2afeb7 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:48 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:49 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3827\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index 5b44552fa..8e077107d 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:50 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index c2d6ce5f6..f2949705c 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": \\\"\\\", \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-08-31T19:23:28.418013Z\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"192\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:50 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": \\\"\\\", \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-10-14T23:00:30.325492Z\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"192\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:50 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index 01b00fb7d..7fd99b983 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:50 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:51 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:51 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1295\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:52 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 1b5611234..31a4fc484 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:51 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"4-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/6344d620-6cf2-4370-8808-18b048ff20ec\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"6344d620-6cf2-4370-8808-18b048ff20ec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:52 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"3-ninety-two_naturopath-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies/71319160-6d72-4c9c-80cb-ec3364da04f7\\\", \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"71319160-6d72-4c9c-80cb-ec3364da04f7\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"510\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:52 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:52 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1295\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:53 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"575\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:53 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index b5bf7b100..87799c09d 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:53 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1517\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:53 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:54 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:54 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index ed879694b..c16edb172 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:54 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1517\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:54 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:55 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:55 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index 1c673a69c..31662c1a5 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:55 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:56 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index 788698fcc..7845729bc 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5092\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:13 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1514\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:13 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:14 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:14 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:56 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:57 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1195\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:57 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:58 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index 93959a9d1..afed11d3a 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d/download\\\", \\n \\\"filename\\\": \\\"1-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/dea5c9b8-0f0b-4c97-b437-927df753d06d\\\", \\n \\\"uuid\\\": \\\"dea5c9b8-0f0b-4c97-b437-927df753d06d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3/download\\\", \\n \\\"filename\\\": \\\"2-third_cot-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions/1f2212f2-95d6-4573-9275-5299222023c3\\\", \\n \\\"uuid\\\": \\\"1f2212f2-95d6-4573-9275-5299222023c3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a/download\\\", \\n \\\"filename\\\": \\\"1-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/58f0b471-5e20-46ca-8869-4b3a3c94595a\\\", \\n \\\"uuid\\\": \\\"58f0b471-5e20-46ca-8869-4b3a3c94595a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1/download\\\", \\n \\\"filename\\\": \\\"2-unyielding_predisposition-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions/5164ceb9-aed9-4038-9028-5c345093dda1\\\", \\n \\\"uuid\\\": \\\"5164ceb9-aed9-4038-9028-5c345093dda1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919/download\\\", \\n \\\"filename\\\": \\\"1-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/80c6ec11-8d58-4563-9621-7124e2579919\\\", \\n \\\"uuid\\\": \\\"80c6ec11-8d58-4563-9621-7124e2579919\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c/download\\\", \\n \\\"filename\\\": \\\"2-branching_patroness-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions/71b1b3c8-e628-433f-8e63-bee4263c937c\\\", \\n \\\"uuid\\\": \\\"71b1b3c8-e628-433f-8e63-bee4263c937c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38/download\\\", \\n \\\"filename\\\": \\\"1-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\", \\n \\\"uuid\\\": \\\"d323e9f1-8ab6-46fd-8f37-15dbeffcfe38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec/download\\\", \\n \\\"filename\\\": \\\"2-intimidated_absence-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions/5cac4a6b-828d-482a-8b28-8faa07dcddec\\\", \\n \\\"uuid\\\": \\\"5cac4a6b-828d-482a-8b28-8faa07dcddec\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5092\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:15 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1514\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:15 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9/download\\\", \\n \\\"filename\\\": \\\"2-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": false, \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\", \\n \\\"uuid\\\": \\\"6f55a911-a52c-4aea-8615-9f3c5a2468d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1036\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:16 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a/download\\\", \\n \\\"filename\\\": \\\"1-costly_monarchist-msg.gpg\\\", \\n \\\"is_read\\\": true, \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions/b944b043-c17d-4971-ab04-53339d35463a\\\", \\n \\\"uuid\\\": \\\"b944b043-c17d-4971-ab04-53339d35463a\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"467\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:16 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:58 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:59 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1195\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:59 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:00 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index 67c4727f3..f3132db7b 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:56 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:57 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:00 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1195\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:01 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_users.json b/data/test_get_users.json index ef624ee3a..2cbe79a4c 100644 --- a/data/test_get_users.json +++ b/data/test_get_users.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\\"expiration\\\":\\\"2020-10-10T04:06:41.835560Z\\\",\\\"journalist_first_name\\\":\\\"\\\",\\\"journalist_last_name\\\":\\\"\\\",\\\"journalist_uuid\\\":\\\"2ef9ec39-696d-4707-a1bf-4c00aa726468\\\",\\\"token\\\":\\\"eyJhbGciOiJIUzI1NiIsImV4cCI6MTYwMjMwMjgwMSwiaWF0IjoxNjAyMjc0MDAxfQ.eyJpZCI6MX0.vcLFjEKqEbQ12Vbky9eurp_yQEznGk1KFFVKc_ZaE2A\\\"}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"288\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 09 Oct 2020 20:06:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\\"users\\\":[{\\\"first_name\\\":\\\"\\\",\\\"last_name\\\":\\\"\\\",\\\"username\\\":\\\"journalist\\\",\\\"uuid\\\":\\\"2ef9ec39-696d-4707-a1bf-4c00aa726468\\\"},{\\\"first_name\\\":\\\"\\\",\\\"last_name\\\":\\\"\\\",\\\"username\\\":\\\"dellsberg\\\",\\\"uuid\\\":\\\"c9729e59-6c4b-4f56-9f6f-4a87eb22d130\\\"}]}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"217\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 09 Oct 2020 20:06:42 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"users\\\": [\\n {\\n \\\"first_name\\\": \\\"\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n }, \\n {\\n \\\"first_name\\\": \\\"\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"dellsberg\\\", \\n \\\"uuid\\\": \\\"11709640-55ae-40eb-b23a-a3a8672ba66e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"316\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:01 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index bc62483a8..2a325d948 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ninety-two naturopath\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0FE8CF651C17DE3D31781841FEFAFECD64F81B22\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOvlrQBDG62bPN79Px5xTLXGx95a9x1CjuElK38GT+qLGZcwq6hO\\\\nzcvMlFNwWMqcedYm/Zjk//mCgNIkzRVv0BhFaA22q6WLGSbuKAn91Gn6e5zabphD\\\\nV3XQ9ZBiVNXPUKzQxmA8nU6ieJemvpnjphA/oajzgw1lAeQe0D6ovEj1ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDc0QVQ0UTU2S1ZFN083QzdBWk43R05UQTZHRzc3NldNT0lN\\\\nVUFIUVZGTTRWN1lDU1pINDNVS1JPNzY0RERINklOVjVIU1E0UENZRllBVVhVRjJW\\\\nWVlFTkI1TEdPNFdaR09JMk5KSVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEP76/s1k+BsicsIEAOsb3OBh6knug1FQk6v5ixKQ\\\\nB6bePdY13brOjS1KYY5o0a160WOccUe3YCXZbydJi7Otn9xB+VCN76u3IjYDctkk\\\\nfSbi55rNQPp4hMP3EG3DPpyu7R0d9S2MHvQsXTjvwWIofPxrJ7WfNbosGaok+LXk\\\\n8qs2M5jg7JpOO8JXD+NX\\\\n=OavD\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:21:09.242279Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/722c38c3-053f-472d-8686-5cb0ba8a25d9\\\", \\n \\\"uuid\\\": \\\"722c38c3-053f-472d-8686-5cb0ba8a25d9\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1620\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:57 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:02 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_logout.json b/data/test_logout.json index 2b60c4d9c..6de6241a1 100644 --- a/data/test_logout.json +++ b/data/test_logout.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:58 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:03 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 510446b09..ff76fe7a3 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:48 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"5-costly_monarchist-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"bd5dd4da-1424-4265-970c-369365644f55\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"145\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:48 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:07:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"7-revolutionary_theology-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"150\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:07:41 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source_with_uuid.json b/data/test_reply_source_with_uuid.json index 539e85b0a..59479da25 100644 --- a/data/test_reply_source_with_uuid.json +++ b/data/test_reply_source_with_uuid.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 5, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:49 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"6-costly_monarchist-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"145\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:40 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"8-revolutionary_theology-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"150\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:40 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_seen.json b/data/test_seen.json new file mode 100644 index 000000000..d27744f0d --- /dev/null +++ b/data/test_seen.json @@ -0,0 +1 @@ +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Thu, 15 Oct 2020 00:04:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"7-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"8-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5101\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Thu, 15 Oct 2020 00:04:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"files\\\": [\\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"], \\\"messages\\\": [\\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\", \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"], \\\"replies\\\": [\\\"50e493a2-8974-4538-98ca-a350da076dca\\\", \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\\"a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\", \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"]}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/seen\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"resources marked seen\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"41\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Thu, 15 Oct 2020 00:04:29 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index 641c955cc..333232e47 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-09-01T03:23:28.417689Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"eb6326bb-fb03-434b-a628-d093b1c8027d\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE1OTg5MDE4MDgsImV4cCI6MTU5ODkzMDYwOCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.tMkp4aHcxOhQwARYa7Db3OL4JTz2iPSXNZbMO-eHLEE\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:23:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:50 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:50 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:51 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"costly monarchist\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"186F958CF71576864F91B7BD1826775AF1FE785C\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMu5gz4+gXeyoYeoaingAlqrMJHDzL28ebhZdcFxfoKyB+lphqSD\\\\n3vBEri63EyQYzD+uK+ksFD9ciSxlwqzdj6G+GTKtzoWXDS00Z0Dgkg/EZrtrlWxO\\\\nqi3povFd6uIyKu546WJwKNqZj8z4ncUoHHvBFwaEHJIbzPoI1j6v+CvdABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFVBMktRRjJOT0FGRllZMktTMk41VFpMWUFPV1JWNEdFTEoy\\\\nVjRSUE1OTktBQUZMVDQ3VEw2Vk5ETTVMWUlUQU9YVEhaSUI0SjVTQ1paVVdWSTRB\\\\nWDZZU1ozV0dJVEJMNEVTMlFMRkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBgmd1rx/nhcXM8D/3GLnojP0ySdZrOQdWOtLczb\\\\n7cjogR3NvXeuiamuizLSgJQlkMIm1LVKL4L3Da4kjSsa1aeYCNVLBTtm6HWiniii\\\\n79/Q2W8CIvNmJ69kxs8UN1RsYTg3T9FXrzOn1xW4HjRu+Rj184KnkYmGnrzWRemz\\\\nKJNDyUvKl6yzVhHNxFJv\\\\n=JZRF\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.425837Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\", \\n \\\"uuid\\\": \\\"0d9a5d80-9060-4cc4-bbcd-b89ef81ed062\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"third cot\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B8F3C13DD2EF1286AD9FB220CEC83A18F94FF32E\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANwmZ6D0XKku4lppAGSnH44gAToY24YGrtqV9FBIgVl/K9+rPkTg\\\\n4FAmRKbZ7y0FyFfV5He8uTqQIIjKSjEfFaYm7AHNnS9E0WowpbYSHh4MJ50H//B1\\\\nYnw3IgbgWPF5fB0iFSzvUZoQr9Tycby4vgu9Q8G7UlIOWpv9DfzLh+dpABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtaSlRSNkdOS09CN1I2WTZCRE41UVNKU0VMVjdZS0xRRlU0\\\\nMkxRRUtFVE1aTk9ERU42SU5UU0ZUTE01WDZaWUZaN0w0MlBOTEdIQkhQUUVJM1g0\\\\nTVVSWkk2TERCWUY2SVE3WTM0Wkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEM7IOhj5T/MuRA4D/iU4P9vTQNpmYfb38J5gJnUA\\\\ng59TpMsHhRW3fmY1913I+2Ssbt0eApMwphldptjOkHjDYCaDeHo9E72gAQXAw5ad\\\\nfOBy+dsykZt5df/tu8KJwicsMKBcFFn+EOX3tpYqdEw+eqK/zSoHmjqvcVL/eigE\\\\nrY01ECisfF8QxfhGsg3b\\\\n=+HRT\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:03.736809Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/115514a5-8f06-4f3f-b622-29a1eef2a512\\\", \\n \\\"uuid\\\": \\\"115514a5-8f06-4f3f-b622-29a1eef2a512\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unyielding predisposition\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BC129CD039D6CBCB9AD60800112C86A1E856A932\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALCiOqHVoArK1br/JC8H8VLJwXwC8VF6uzIri1aaZF98LuiOhQqk\\\\nHwJozKjmlIAZrro+YcRdFikQ5TJv5v4LasuSowyo7v0hpH4j4NlGathRmkQDQJG2\\\\nhVP2TAH91wCpp9BU6e0hzogWo9Z8NxEwTfwGzggYoGVfbYH0uycwwO81ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFRERjNJRkFXWFdSQ0lVT0NBUERaVVUzQUdXSUc3SldLRVNT\\\\nRExLWTZERVZHUkRPWEZJT0w0Vk9PWUpaS0ZYU1c3UFJNWVNFTlpWQk5PQ0xIVFBF\\\\nU1dJSk1MRENGQlpWNERLSzVMM0k9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBEshqHoVqkyLEsD/2muPP1lP3umoQnsI9xzPh/7\\\\n22cT4I0ZBwINoOCxMsJ1mqr3j9Zs2DLKc6HEJEB5aJqCWmichRSCn6ljaW41vDxc\\\\n7VE7qRk70S4bQOkyqyhRSNSffHv06qDi6JDUU33X3DQk6iMBFcOAq+Xlg71Z+83I\\\\nMcs9cHqrfc+7PX0T5aXc\\\\n=NCsk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.037886Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\", \\n \\\"uuid\\\": \\\"3d0d9c16-d65a-43ff-8e18-995c43a6f699\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"branching patroness\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"7C6283A277CE7079A9A34499AF47CF84E23BEE31\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMyQuoR5n0IRpXrOgqPGFmDpl8O/7i/tG9OBV3i2FzFV1UGKd2L4\\\\nYrA940tW4gNfe+Agct+aAA02vh2lZhAQWCoWImWv2lqYzyKkRUQsyaC8QgNYr62K\\\\nGbx339MCJmEEf3kGq2KKZ4zr+Osr8fG11at1dZOwU+JJfXNutdd8aPxfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDU0NEVFREJIR05GU1dDV0RURzVGV0JLRkdRNDdRWk9XUlJM\\\\nRkxCNFE0S0ZQUkdFUEhBRERURFNHVUdQRTdGVUM2VExHRzQ0R0ZIT0lFNjJGNVo1\\\\nTUhBTkZaS0JNTERPTVRJVFIyVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEK9Hz4TiO+4xmeEEAKyDb4Cspf8Lf+kFAY/j8bfh\\\\nRRxychnTYACzYMlJs8VOHbbZJvOGZXa8cmG0f9szFGE6Ele68ijMgnoPT86dFz+C\\\\n3ivB5hfrS0NKVk2yUlPCUYTlBr+ZR89RXk1OF1YvD1oDQZRJcqNDrYqgL8ZcOFtU\\\\nKlblFv6vGUhvyy6roxp/\\\\n=cFJU\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.352335Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\", \\n \\\"uuid\\\": \\\"beeda7a4-ec47-48b6-9c8c-e9333eb5e45f\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/add_star\\\", \\n \\\"interaction_count\\\": 4, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"intimidated absence\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B42C7E86A4B07FF267289E1F7774318C3E00812B\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAOgXV8ugy9pQF8GEI5hRb9bPxhlGleb3HatiFvml4VMg9mCfby//\\\\nIsx0wK8P5OcAY7RcvbAalQG0fYuRkSgInDm66jARW7KDPZo/2TJaCS7KcK/bVnw9\\\\np5Oz0pRNx/bxGUUoyw3o0TZDVVFDU9O9Z++HNULHcYemMHZunStjLpndABEBAAG0\\\\ndVNvdXJjZSBLZXkgPE5XR1pIQlhPR0tGMkRBN1VGVFNWUlE0SUFOU0I2TUU0QVA2\\\\nMzNTREVLR0RBV0xUV1NZQ1FJUFJTNFNMU0hCNlZEU1FCVFFLWllINTdVTU5QS0s0\\\\nSk83WEc1N0ZFR1FQSVNaN0dHQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEHd0MYw+AIEracYD+wQZQ6vv77XI2nsRvp1FuJ57\\\\n0ChVkl0HpvKHm5dxyJh4/qiUpnRMZ7WVS2dpVAb5EGkfpUuL11B9HHhB7LWQdyId\\\\nCL1vGlxQhjznPmHQ3iLE/+WjDQuD2bAG7DmXaIeW4Noi/9CBMlA1jjoSMsZT2LlM\\\\nPcSwpX2cqLr1jtLJr/gy\\\\n=TnNe\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-08-31T19:25:04.667408Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2e65c404-eae4-4d61-9179-96c26a7928e2\\\", \\n \\\"uuid\\\": \\\"2e65c404-eae4-4d61-9179-96c26a7928e2\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Mon, 31 Aug 2020 19:25:51 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:17 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:18 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:18 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:19 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 38d93b2ae..ceb70bd53 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -802,3 +802,33 @@ def logout(self) -> bool: return True else: return False + + def seen(self, files: List[str], messages: List[str], replies: List[str]) -> str: + """ + Mark supplied files, messages, and replies as seen by the current user. The current user + will be retrieved from the auth header on the server. + + :param conversation_items: The items to mark as seen by the current user. + :param files: list of file uuids to mark as seen + :param messages: list of message uuids to mark as seen + :param replies: list of reply uuids to mark as seen + :returns: Raise exception if 404, else the direct response from the server + """ + method = "POST" + path_query = "api/v1/seen" + body = json.dumps({"files": files, "messages": messages, "replies": replies}) + + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + body=body, + timeout=self.default_request_timeout, + ) + + data_str = json.dumps(data) + + if status_code == 404: + raise WrongUUIDError("{}".format(data_str)) + + return data_str diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index 58bd9f246..c8453ca41 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -87,6 +87,7 @@ def __init__(self, **kwargs) -> None: # type: ignore "size", "source_url", "uuid", + "seen_by", ]: if key not in kwargs: AttributeError("Missing key {}".format(key)) @@ -125,12 +126,16 @@ def __init__(self, **kwargs) -> None: # type: ignore "source_url", "submission_url", "uuid", + "seen_by", ]: if key not in kwargs: AttributeError("Missing key {}".format(key)) setattr(self, key, kwargs[key]) _, self.source_uuid = self.source_url.rsplit("/", 1) + def is_file(self) -> bool: + return self.filename.endswith("doc.gz.gpg") or self.filename.endswith("doc.zip.gpg") + class Source: """ diff --git a/tests/test_api.py b/tests/test_api.py index 0841d8c19..939c80358 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -80,6 +80,28 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) + @vcr.use_cassette("data/test-seen.yml") + def test_seen(self): + submissions = self.api.get_all_submissions() + replies = self.api.get_all_replies() + + file_uuids = [] + message_uuids = [] + reply_uuids = [] + + for submission in submissions: + if submission.is_file(): + file_uuids.append(submission.uuid) + else: + message_uuids.append(submission.uuid) + + for reply in replies: + reply_uuids.append(reply.uuid) + + self.assertTrue( + self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) + ) + @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): sources = self.api.get_sources() diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 5e2ea53c4..3e7479a13 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -69,6 +69,28 @@ def test_api_auth(self): self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) + @dastollervey_datasaver + def test_seen(self): + submissions = self.api.get_all_submissions() + replies = self.api.get_all_replies() + + file_uuids = [] + message_uuids = [] + reply_uuids = [] + + for submission in submissions: + if submission.is_file(): + file_uuids.append(submission.uuid) + else: + message_uuids.append(submission.uuid) + + for reply in replies: + reply_uuids.append(reply.uuid) + + self.assertTrue( + self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) + ) + @dastollervey_datasaver def test_get_sources(self): sources = self.api.get_sources() From f6168f856fea9c9650241194e921dd3954ad32c7 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Tue, 13 Oct 2020 15:31:55 -0700 Subject: [PATCH 401/751] Document that making RPC policy changes will cause tests to fail --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f0d0b1871..b7e56ca9d 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,8 @@ name=sd-dev-proxy sd-dev sd-dev-proxy allow ``` +**NOTE:** You may want to switch back to the RPC configuration files in their as-provisioned state before a `make test` run in `dom0`, as this and the following change to the RPC policies will break the strict validation of the RPC policies that is one of those tests. + 8. Modify `/etc/qubes-rpc/policy/qubes.Filecopy` in **dom0** by adding the following line to the top of the file so that the proxy can send files over qrexec to the sdk: ``` From 54b5c63f22b256f025563e9a284dc0c291436dab Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Tue, 13 Oct 2020 19:34:06 -0700 Subject: [PATCH 402/751] Update README.md --- README.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b7e56ca9d..886dd65d7 100644 --- a/README.md +++ b/README.md @@ -166,6 +166,7 @@ If this is the first time you are generating new cassettes that make API calls o ```bash git clone https://github.com/freedomofpress/securedrop + cd securedrop virtualenv .venv --python=python3 source .venv/bin/activate pip install -r securedrop/requirements/python3/develop-requirements.txt @@ -194,23 +195,24 @@ sd-dev-proxy sd-dev allow ``` 9. Verify qrexec communication between `sd-dev-proxy` and `sd-dev` is set up properly. + a. Run the server on `sd-dev-proxy` if it isn't already running: - ```bash - NUM_SOURCES=5 make dev - ``` + ```bash + NUM_SOURCES=5 make dev + ``` b. With the main branch of this repo checked out on `sd-dev`, comment out the `@dastollervey_datasaver` decorator above the `test_apiproxy.py::TestAPIProxy::setUp` method so that `test_api_auth` makes an actual API call over qrexec. c. Run `test_api_auth`: - ```bash - make test TESTS=tests/test_apiproxy.py::TestAPIProxy::test_api_auth - ``` + ```bash + make test TESTS=tests/test_apiproxy.py::TestAPIProxy::test_api_auth + ``` **Note:** If the test fails, run `journalctl -f` in **dom0** before trying again to see if communication between `sd-dev` and `sd-dev-proxy` is being denied. A successful log looks like this: - ``` - Aug 28 15:45:13 dom0 qrexec[1474]: securedrop.Proxy: sd-dev -> sd-dev-proxy: allowed to sd-dev-proxy - ``` + ``` + Aug 28 15:45:13 dom0 qrexec[1474]: securedrop.Proxy: sd-dev -> sd-dev-proxy: allowed to sd-dev-proxy + ``` # Releasing From 17a94fa0551b07887491c06aab517bf28c541f73 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 21 Oct 2020 12:22:34 -0700 Subject: [PATCH 403/751] get first unread test submission --- data/test-download-submission.yml | 261 ++++++++++++++++++------------ data/test-setup.yml | 10 +- tests/test_api.py | 16 +- 3 files changed, 171 insertions(+), 116 deletions(-) diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 0c2921430..f8ec163ef 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s Connection: - keep-alive Content-Type: @@ -18,98 +18,145 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e/download\"\ + , \n \"filename\": \"1-darkening_deserter-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ + , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\ + , \n \"uuid\": \"1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/e05ea85e-1e50-4591-a3c8-d6d65fcbca65/download\"\ + , \n \"filename\": \"2-darkening_deserter-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ + , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/e05ea85e-1e50-4591-a3c8-d6d65fcbca65\"\ + , \n \"uuid\": \"e05ea85e-1e50-4591-a3c8-d6d65fcbca65\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/7b06b91f-1e39-48c0-9b6f-600d175aa098/download\"\ + , \n \"filename\": \"3-darkening_deserter-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ + , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/7b06b91f-1e39-48c0-9b6f-600d175aa098\"\ + , \n \"uuid\": \"7b06b91f-1e39-48c0-9b6f-600d175aa098\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/f9aed593-9576-4738-9157-a21e04f69dbe/download\"\ + , \n \"filename\": \"4-darkening_deserter-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ + , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/f9aed593-9576-4738-9157-a21e04f69dbe\"\ + , \n \"uuid\": \"f9aed593-9576-4738-9157-a21e04f69dbe\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/eb0007a4-5ccd-4198-9869-8b60cb759d82/download\"\ + , \n \"filename\": \"1-conjunctive_simulacrum-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ + , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/eb0007a4-5ccd-4198-9869-8b60cb759d82\"\ + , \n \"uuid\": \"eb0007a4-5ccd-4198-9869-8b60cb759d82\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/840f3bd1-177d-4a28-a40e-0627bc2073da/download\"\ + , \n \"filename\": \"2-conjunctive_simulacrum-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 757, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ + , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/840f3bd1-177d-4a28-a40e-0627bc2073da\"\ + , \n \"uuid\": \"840f3bd1-177d-4a28-a40e-0627bc2073da\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/df033ddf-f2a6-4d6f-8137-6bafa21b513e/download\"\ + , \n \"filename\": \"3-conjunctive_simulacrum-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ + , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/df033ddf-f2a6-4d6f-8137-6bafa21b513e\"\ + , \n \"uuid\": \"df033ddf-f2a6-4d6f-8137-6bafa21b513e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/a50d596f-de4b-44ba-bf12-dd312b567a26/download\"\ + , \n \"filename\": \"4-conjunctive_simulacrum-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ + , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/a50d596f-de4b-44ba-bf12-dd312b567a26\"\ + , \n \"uuid\": \"a50d596f-de4b-44ba-bf12-dd312b567a26\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/a08bf726-1054-421a-84e5-04a7faf2600f/download\"\ + , \n \"filename\": \"1-dark-colored_frailty-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\"\ + , \n \"submission_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/a08bf726-1054-421a-84e5-04a7faf2600f\"\ + , \n \"uuid\": \"a08bf726-1054-421a-84e5-04a7faf2600f\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/c24c5ff1-b604-433d-8f87-7bd18213f9b1/download\"\ + , \n \"filename\": \"2-dark-colored_frailty-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\"\ + , \n \"submission_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/c24c5ff1-b604-433d-8f87-7bd18213f9b1\"\ + , \n \"uuid\": \"c24c5ff1-b604-433d-8f87-7bd18213f9b1\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/7790f0d1-9eec-4e4a-803c-04c97b9aafab/download\"\ + , \n \"filename\": \"3-dark-colored_frailty-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\"\ + , \n \"submission_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/7790f0d1-9eec-4e4a-803c-04c97b9aafab\"\ + , \n \"uuid\": \"7790f0d1-9eec-4e4a-803c-04c97b9aafab\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/77e4018c-db24-4dcc-8503-70de725492b5/download\"\ + , \n \"filename\": \"4-dark-colored_frailty-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ + \ \n \"seen_by\": [], \n \"size\": 661, \n \"source_url\":\ + \ \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\", \n \"submission_url\"\ + : \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/77e4018c-db24-4dcc-8503-70de725492b5\"\ + , \n \"uuid\": \"77e4018c-db24-4dcc-8503-70de725492b5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/3306be34-50b0-48ad-8874-06b968eec167/download\"\ + , \n \"filename\": \"1-judicial_alertness-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ + , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/3306be34-50b0-48ad-8874-06b968eec167\"\ + , \n \"uuid\": \"3306be34-50b0-48ad-8874-06b968eec167\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/00b09a27-a7ae-4e83-b99d-366280baf5fe/download\"\ + , \n \"filename\": \"2-judicial_alertness-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ + , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/00b09a27-a7ae-4e83-b99d-366280baf5fe\"\ + , \n \"uuid\": \"00b09a27-a7ae-4e83-b99d-366280baf5fe\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/af80e8f8-b458-4ea1-bec9-0814722b8db3/download\"\ + , \n \"filename\": \"3-judicial_alertness-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ + , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/af80e8f8-b458-4ea1-bec9-0814722b8db3\"\ + , \n \"uuid\": \"af80e8f8-b458-4ea1-bec9-0814722b8db3\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/897f47b6-462f-479e-98df-bf91906d810d/download\"\ + , \n \"filename\": \"4-judicial_alertness-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ + , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/897f47b6-462f-479e-98df-bf91906d810d\"\ + , \n \"uuid\": \"897f47b6-462f-479e-98df-bf91906d810d\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/c8db2bab-b362-4c3f-8894-faeb6e01f471/download\"\ + , \n \"filename\": \"1-interim_oddity-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ + , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/c8db2bab-b362-4c3f-8894-faeb6e01f471\"\ + , \n \"uuid\": \"c8db2bab-b362-4c3f-8894-faeb6e01f471\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/3d8a9b76-987e-4322-b359-db1df7b5a16c/download\"\ + , \n \"filename\": \"2-interim_oddity-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ + , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/3d8a9b76-987e-4322-b359-db1df7b5a16c\"\ + , \n \"uuid\": \"3d8a9b76-987e-4322-b359-db1df7b5a16c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/41f43938-e8a3-4cd5-88c1-b2a6cb410a97/download\"\ + , \n \"filename\": \"3-interim_oddity-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ + , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/41f43938-e8a3-4cd5-88c1-b2a6cb410a97\"\ + , \n \"uuid\": \"41f43938-e8a3-4cd5-88c1-b2a6cb410a97\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/d8ab9bd8-644d-47ac-b8a3-fd80235cc4f5/download\"\ + , \n \"filename\": \"4-interim_oddity-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ + , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/d8ab9bd8-644d-47ac-b8a3-fd80235cc4f5\"\ + , \n \"uuid\": \"d8ab9bd8-644d-47ac-b8a3-fd80235cc4f5\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8165' + - '12213' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 21 Oct 2020 19:22:09 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -123,7 +170,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s Connection: - keep-alive Content-Type: @@ -131,38 +178,38 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download + uri: http://127.0.0.1:8081/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqAQ/+I9lnTF1D5SKAZlzl7QJbch15mmAy0lWv8v8XDJLBvAaz29bj7lH14nkZ - FOELaOaVvXWnwyOWQjnp+KukBcisFfNir6gjvp0CtdEM/2piARs5htI/zd+sm5tp524IbtpRSQLS - vVi+0Nwq8C4IfzmmO0Pg2ggQdYk4kTfa6IkzOYVAIwu+UCGJqdIi+UQnStMKHqwterD2FIy4qLmz - t9X/EKnX9ZV75qqLLRRVVv6yymVvaQJuMh0BgHGYmoffFOQ4KVnSfn/hakPsQQAxOhxmLzc8JJjC - UAWPtwxaQ8+5cwwo0ciPdPWU6POQfsKmkiF7h0WynXGxzl4Cqt+uqfO7fXWBP+fL6c6fybWuPogx - OqssZd1fXxkzUtGd2lQNGdh7TnERbqKDm+BygRaR99fr2Ed4X1l+c7ApG3Kc/31gG4D31WejTyXp - ymgxL9mjrhxDqEZNUjRwVVC6LITDGWAq82MBPogAgBq/81TXDwXZZng0YrxpkutwhRXzrXy21bbN - kGjp36842wx84eUz0iZZYPygK30TwSo+PlV2K5oU7IPary+31aTXUCZaOiPkqWXi9VLQqfnI7GPl - HJ1Ozu6zLf3E8qT8IY5ts/dKYeuORatGPtB6H60TjqjbSC9HaGhhd8g/q7cb8hPt0xd3NxOZIjYW - FHZRjxS2oypzt1eTF23SUgHu80eVeDgUXPxjZvffFthXAUdrm8YhhObyqm/AMqI8WWtBjGrS4AOZ - 44jUHUFo2W6Qc21WbQtmkbzikTCFIX4f2xztjyb/GgipocbYKXh1QQo= + hQIMA8PnxMCiIBsqAQ/+Njq9PBg013NM1bzkXRpqkpCS1FJNfcwPruhBqCCvu86+hduZuK8c/cgW + FriywEmHAKvuNld+HPl+Q5wTr5sMdmBXQgQuAJzyOCD5wSevksvlrlfxuZY/uG3eCaAM/JJDYfPq + WWhw1Wd1rjsTONPivNsR7/VyzInXamoJ3NMOBA9nCeiwZMonwEH6nqf2z/q1cWyXeEEMpelGIaI4 + 6aF/dI+2o+L1NzpaLUuokm4aD2hm43t/pOlcgdT0mVf4z9/GTABTwEe2alvxmUY6oM85XKxT/oOj + KJBN728BjfyjhV8kK9UzJfFXf6gz3BdGJlMqdb6putPw/hXtkTBrvasVKiJxehzOMl2KlsNJ5cR3 + 98CE0VKf1ryWyUrEkC3auV5jN2TvTWhWtzVp6/O9V3R9iXvBtiQKzPt6cFu20w/4303eShSPKSY4 + R54Q87Fl5+Vu3AKFL5YdQ7FElsLycYCSR2OFRZjnqqj5tADoE+86jus8T3EgqyCXVl7gPhLY0AAx + DQidHMOs5QD4Pd1EsZsUuPo2q/u5BuT57V/0EYCWECa2MimGOhhgZpkHBlM05Lnxmv0kfEHJyW2k + jCx4w7brBTgYBQJ00WFDYXZZT8GIgH618uVss6RTRMQ2MnRSE2pwhe3LyPeZc9tkNOqpc3QxlHzx + 63HPhTFeWFPjPGfDtXrSXgEhc630Pxe204UhUMFEIn+3XI9Rd5XPtwmXa41ivQtRs/oqoXyA5wwQ + juY7iyFY6T0LTHlP8Rk5DEV/PCx5FoZH4bTVx8MZVQXKSFAjW9ePcVjyYxmXKQtvx/1/eNE= headers: Cache-Control: - public, max-age=43200 Content-Disposition: - - attachment; filename=3-subsonic_discoloration-msg.gpg + - attachment; filename=1-darkening_deserter-msg.gpg Content-Length: - - '611' + - '623' Content-Type: - application/pgp-encrypted Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 21 Oct 2020 19:22:09 GMT Etag: - - sha256:10049f224415ce52844d35709ca40d9cca22afb9bde06079c3d429e12f721a10 + - sha256:1334326462914e522e2c9c9a95c6c3586be3abd3b1257c41ca2d73a29168bc19 Expires: - - Thu, 15 Oct 2020 10:59:58 GMT + - Thu, 22 Oct 2020 07:22:09 GMT Last-Modified: - - Wed, 14 Oct 2020 22:59:06 GMT + - Wed, 21 Oct 2020 19:22:03 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -176,7 +223,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s Connection: - keep-alive Content-Type: @@ -184,22 +231,22 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31 + uri: http://127.0.0.1:8081/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e response: body: - string: "{\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\"\ - : [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n}\n" + string: "{\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e/download\"\ + , \n \"filename\": \"1-darkening_deserter-msg.gpg\", \n \"is_file\": false,\ + \ \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": [], \n\ + \ \"size\": 623, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ + , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\ + , \n \"uuid\": \"1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\n}\n" headers: Content-Length: - - '535' + - '531' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 21 Oct 2020 19:22:09 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-setup.yml b/data/test-setup.yml index 09a0b5730..1b22878bb 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "journalist", "passphrase": "correct horse battery staple - profanity oil chewy", "one_time_code": "641659"}' + profanity oil chewy", "one_time_code": "661555"}' headers: Accept: - '*/*' @@ -17,9 +17,9 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"expiration\": \"2020-10-15T08:05:55.446302Z\", \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"token\": \"eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM\"\ + string: "{\n \"expiration\": \"2020-10-22T03:22:09.637809Z\", \n \"journalist_first_name\"\ + : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_uuid\": \"769af71c-61b7-493e-b063-3594530a28b6\"\ + , \n \"token\": \"eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s\"\ \n}\n" headers: Content-Length: @@ -27,7 +27,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 15 Oct 2020 00:05:55 GMT + - Wed, 21 Oct 2020 19:22:09 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/tests/test_api.py b/tests/test_api.py index 939c80358..87e2240c5 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -300,9 +300,17 @@ def test_reply_source_with_uuid(self): @vcr.use_cassette("data/test-download-submission.yml") def test_download_submission(self): - s = self.api.get_all_submissions()[0] + submissions = self.api.get_all_submissions() + unread_submission = None + for s in submissions: + if not s.is_read: + unread_submission = s + break + + if not unread_submission: + self.assertFalse("There must be an unread submission in the db for this test to work.") - self.assertFalse(s.is_read) + self.assertFalse(unread_submission.is_read) # We need a temporary directory to download tmpdir = tempfile.mkdtemp() @@ -319,8 +327,8 @@ def test_download_submission(self): assert etag == "sha256:{}".format(hasher.hexdigest()) # is_read should still be False as of SecureDrop 1.6.0 or later - s = self.api.get_submission(s) - self.assertFalse(s.is_read) + submission = self.api.get_submission(unread_submission) + self.assertFalse(submission.is_read) # Let us remove the temporary directory shutil.rmtree(tmpdir) From d0b04a73abdcc45718d6306a7acd2f5191ce9508 Mon Sep 17 00:00:00 2001 From: mickael e Date: Wed, 21 Oct 2020 14:54:48 -0400 Subject: [PATCH 404/751] ci: run nightly job on default (main) branch --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 86be12f30..d2563a6d9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -86,6 +86,6 @@ workflows: filters: branches: only: - - master + - main jobs: - test-against-latest-api From 9d7fb42a510631d8eb41632e72160d82b90f264a Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 21 Oct 2020 09:51:56 -0700 Subject: [PATCH 405/751] securedrop-sdk 0.2.0 --- CHANGELOG.md | 8 ++++++++ setup.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a90b6b8df..729986c3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========= +0.2.0 +----- + +* Support "users" endpoint (#134). +* Update urllib3 from 1.25.8 to 1.25.10 (#136). +* Support "seen" endpoint (#140). +* Add "seen_by" as an attribute on the Submission and Reply objects (#140). + 0.1.1 ----- diff --git a/setup.py b/setup.py index 2120352c9..e879a19a5 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.1.1", + version="0.2.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 34a8cf6e032d6e7cc7b768d8a29f01cabecae08c Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Thu, 15 Oct 2020 15:02:44 -0700 Subject: [PATCH 406/751] Removes mimetype associations As part of template consolidation [0], we're moving mimetype associations out of system volumes and into private volumes. Therefore we no longer need these files in the 'securedrop-export' package, as the corresponding files have already been ported to 'securedrop-workstation-config'. [0] https://github.com/freedomofpress/securedrop-workstation/issues/471 --- MANIFEST.in | 3 - changelog.md | 3 + files/mimeapps.list | 298 -------------------------------------- files/open-in-dvm.desktop | 10 -- securedrop_export/VERSION | 2 +- 5 files changed, 4 insertions(+), 312 deletions(-) delete mode 100644 files/mimeapps.list delete mode 100644 files/open-in-dvm.desktop diff --git a/MANIFEST.in b/MANIFEST.in index e1056bffe..ad64433d6 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -9,6 +9,3 @@ include setup.py include files/send-to-usb.desktop include files/application-x-sd-export.xml include files/sd-logo.png -include files/mimeapps.list -include files/open-in-dvm.desktop - diff --git a/changelog.md b/changelog.md index dafcbb260..b443f7f94 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 0.2.4 + * Removes mimetype associations and open-in-dvm desktop file + ## 0.2.3 * Adds gnome-disks to sd-devices diff --git a/files/mimeapps.list b/files/mimeapps.list deleted file mode 100644 index 886a600b0..000000000 --- a/files/mimeapps.list +++ /dev/null @@ -1,298 +0,0 @@ -[Default Applications] -application/x-sd-export=send-to-usb.desktop; -application/x-dia-diagram=open-in-dvm.desktop; -text/x-vcard=open-in-dvm.desktop; -text/directory=open-in-dvm.desktop; -text/calendar=open-in-dvm.desktop; -application/x-cd-image=open-in-dvm.desktop; -application/x-desktop=open-in-dvm.desktop; -application/x-raw-disk-image=open-in-dvm.desktop; -application/x-raw-disk-image-xz-compressed=open-in-dvm.desktop; -image/x-compressed-xcf=open-in-dvm.desktop; -image/x-xcf=open-in-dvm.desktop; -image/x-psd=open-in-dvm.desktop; -image/x-fits=open-in-dvm.desktop; -image/bmp=open-in-dvm.desktop; -image/gif=open-in-dvm.desktop; -image/x-icb=open-in-dvm.desktop; -image/x-ico=open-in-dvm.desktop; -image/x-pcx=open-in-dvm.desktop; -image/x-portable-anymap=open-in-dvm.desktop; -image/x-portable-bitmap=open-in-dvm.desktop; -image/x-portable-graymap=open-in-dvm.desktop; -image/x-portable-pixmap=open-in-dvm.desktop; -image/x-xbitmap=open-in-dvm.desktop; -image/x-xpixmap=open-in-dvm.desktop; -image/svg+xml=open-in-dvm.desktop; -application/vnd.ms-word=open-in-dvm.desktop; -application/vnd.wordperfect=open-in-dvm.desktop; -application/vnd.sun.xml.writer=open-in-dvm.desktop; -application/vnd.sun.xml.writer.global=open-in-dvm.desktop; -application/vnd.sun.xml.writer.template=open-in-dvm.desktop; -application/vnd.stardivision.writer=open-in-dvm.desktop; -application/vnd.oasis.opendocument.text=open-in-dvm.desktop; -application/vnd.oasis.opendocument.text-template=open-in-dvm.desktop; -application/vnd.oasis.opendocument.text-web=open-in-dvm.desktop; -application/vnd.oasis.opendocument.text-master=open-in-dvm.desktop; -application/vnd.openxmlformats-officedocument.wordprocessingml.document=open-in-dvm.desktop; -application/vnd.openxmlformats-officedocument.wordprocessingml.template=open-in-dvm.desktop; -application/vnd.ms-excel=open-in-dvm.desktop; -application/vnd.stardivision.calc=open-in-dvm.desktop; -application/vnd.sun.xml.calc=open-in-dvm.desktop; -application/vnd.sun.xml.calc.template=open-in-dvm.desktop; -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=open-in-dvm.desktop; -application/vnd.openxmlformats-officedocument.spreadsheetml.template=open-in-dvm.desktop; -application/vnd.oasis.opendocument.spreadsheet=open-in-dvm.desktop; -application/vnd.oasis.opendocument.spreadsheet-template=open-in-dvm.desktop; -application/vnd.ms-powerpoint=open-in-dvm.desktop; -application/vnd.stardivision.impress=open-in-dvm.desktop; -application/vnd.sun.xml.impress=open-in-dvm.desktop; -application/vnd.sun.xml.impress.template=open-in-dvm.desktop; -application/vnd.oasis.opendocument.presentation=open-in-dvm.desktop; -application/vnd.oasis.opendocument.presentation-template=open-in-dvm.desktop; -application/vnd.openxmlformats-officedocument.presentationml.presentation=open-in-dvm.desktop; -application/vnd.openxmlformats-officedocument.presentationml.template=open-in-dvm.desktop; -application/vnd.stardivision.draw=open-in-dvm.desktop; -application/vnd.sun.xml.draw=open-in-dvm.desktop; -application/vnd.sun.xml.draw.template=open-in-dvm.desktop; -application/vnd.oasis.opendocument.graphics=open-in-dvm.desktop; -application/vnd.oasis.opendocument.graphics-template=open-in-dvm.desktop; -application/vnd.oasis.opendocument.formula=open-in-dvm.desktop; -application/vnd.sun.xml.math=open-in-dvm.desktop; -application/vnd.stardivision.math=open-in-dvm.desktop; -application/vnd.oasis.opendocument.database=open-in-dvm.desktop; -application/vnd.sun.xml.base=open-in-dvm.desktop; -application/pdf=open-in-dvm.desktop; -application/postscript=open-in-dvm.desktop; -application/x-qw=open-in-dvm.desktop; -application/x-gnucash=open-in-dvm.desktop; -application/vnd.lotus-1-2-3=open-in-dvm.desktop; -application/x-oleo=open-in-dvm.desktop; -application/x-gnumeric=open-in-dvm.desktop; -application/x-xbase=open-in-dvm.desktop; -application/x-abiword=open-in-dvm.desktop; -application/x-dvi=open-in-dvm.desktop; -application/x-catalog=open-in-dvm.desktop; -application/x-rpm=open-in-dvm.desktop; -text/csv=open-in-dvm.desktop; -text/plain=open-in-dvm.desktop; -text/html=open-in-dvm.desktop; -application/xhtml+xml=open-in-dvm.desktop; -inode/directory=open-in-dvm.desktop; -x-content/blank-cd=open-in-dvm.desktop; -x-content/blank-dvd=open-in-dvm.desktop; -x-content/blank-bd=open-in-dvm.desktop; -x-content/blank-hddvd=open-in-dvm.desktop; -x-content/video-dvd=open-in-dvm.desktop; -x-content/video-vcd=open-in-dvm.desktop; -x-content/video-svcd=open-in-dvm.desktop; -#x-content/video-bluray=open-in-dvm.desktop; -#x-content/video-hddvd=open-in-dvm.desktop; -x-content/audio-cdda=open-in-dvm.desktop; -x-content/audio-dvd=open-in-dvm.desktop; -x-content/audio-player=open-in-dvm.desktop; -x-content/image-dcf=open-in-dvm.desktop; -x-content/image-picturecd=open-in-dvm.desktop; -# URI scheme handlers -x-scheme-handler/mailto=open-in-dvm.desktop; -x-scheme-handler/http=open-in-dvm.desktop; -x-scheme-handler/https=open-in-dvm.desktop; -application/mxf=open-in-dvm.desktop; -application/ogg=open-in-dvm.desktop; -application/ram=open-in-dvm.desktop; -application/sdp=open-in-dvm.desktop; -application/smil=open-in-dvm.desktop; -application/smil+xml=open-in-dvm.desktop; -application/vnd.apple.mpegurl=open-in-dvm.desktop; -application/vnd.ms-wpl=open-in-dvm.desktop; -application/vnd.rn-realmedia=open-in-dvm.desktop; -application/x-extension-m4a=open-in-dvm.desktop; -application/x-extension-mp4=open-in-dvm.desktop; -application/x-flac=open-in-dvm.desktop; -application/x-flash-video=open-in-dvm.desktop; -application/x-matroska=open-in-dvm.desktop; -application/x-netshow-channel=open-in-dvm.desktop; -application/x-ogg=open-in-dvm.desktop; -application/x-quicktime-media-link=open-in-dvm.desktop; -application/x-quicktimeplayer=open-in-dvm.desktop; -application/x-shorten=open-in-dvm.desktop; -application/x-smil=open-in-dvm.desktop; -application/xspf+xml=open-in-dvm.desktop; -audio/3gpp=open-in-dvm.desktop; -audio/ac3=open-in-dvm.desktop; -audio/AMR=open-in-dvm.desktop; -audio/AMR-WB=open-in-dvm.desktop; -audio/basic=open-in-dvm.desktop; -audio/midi=open-in-dvm.desktop; -audio/mp2=open-in-dvm.desktop; -audio/mp4=open-in-dvm.desktop; -audio/mpeg=open-in-dvm.desktop; -audio/mpegurl=open-in-dvm.desktop; -audio/ogg=open-in-dvm.desktop; -audio/prs.sid=open-in-dvm.desktop; -audio/vnd.rn-realaudio=open-in-dvm.desktop; -audio/x-aiff=open-in-dvm.desktop; -audio/x-ape=open-in-dvm.desktop; -audio/x-flac=open-in-dvm.desktop; -audio/x-gsm=open-in-dvm.desktop; -audio/x-it=open-in-dvm.desktop; -audio/x-m4a=open-in-dvm.desktop; -audio/x-matroska=open-in-dvm.desktop; -audio/x-mod=open-in-dvm.desktop; -audio/x-mp3=open-in-dvm.desktop; -audio/x-mpeg=open-in-dvm.desktop; -audio/x-mpegurl=open-in-dvm.desktop; -audio/x-ms-asf=open-in-dvm.desktop; -audio/x-ms-asx=open-in-dvm.desktop; -audio/x-ms-wax=open-in-dvm.desktop; -audio/x-ms-wma=open-in-dvm.desktop; -audio/x-musepack=open-in-dvm.desktop; -audio/x-pn-aiff=open-in-dvm.desktop; -audio/x-pn-au=open-in-dvm.desktop; -audio/x-pn-realaudio=open-in-dvm.desktop; -audio/x-pn-realaudio-plugin=open-in-dvm.desktop; -audio/x-pn-wav=open-in-dvm.desktop; -audio/x-pn-windows-acm=open-in-dvm.desktop; -audio/x-realaudio=open-in-dvm.desktop; -audio/x-real-audio=open-in-dvm.desktop; -audio/x-s3m=open-in-dvm.desktop; -audio/x-sbc=open-in-dvm.desktop; -audio/x-scpls=open-in-dvm.desktop; -audio/x-speex=open-in-dvm.desktop; -audio/x-stm=open-in-dvm.desktop; -audio/x-tta=open-in-dvm.desktop; -audio/x-wav=open-in-dvm.desktop; -audio/x-wavpack=open-in-dvm.desktop; -audio/x-vorbis=open-in-dvm.desktop; -audio/x-vorbis+ogg=open-in-dvm.desktop; -audio/x-xm=open-in-dvm.desktop; -image/vnd.rn-realpix=open-in-dvm.desktop; -image/x-pict=open-in-dvm.desktop; -misc/ultravox=open-in-dvm.desktop; -text/google-video-pointer=open-in-dvm.desktop; -text/x-google-video-pointer=open-in-dvm.desktop; -video/3gp=open-in-dvm.desktop; -video/3gpp=open-in-dvm.desktop; -video/dv=open-in-dvm.desktop; -video/divx=open-in-dvm.desktop; -video/fli=open-in-dvm.desktop; -video/flv=open-in-dvm.desktop; -video/mp2t=open-in-dvm.desktop; -video/mp4=open-in-dvm.desktop; -video/mp4v-es=open-in-dvm.desktop; -video/mpeg=open-in-dvm.desktop; -video/msvideo=open-in-dvm.desktop; -video/ogg=open-in-dvm.desktop; -video/quicktime=open-in-dvm.desktop; -video/vivo=open-in-dvm.desktop; -video/vnd.divx=open-in-dvm.desktop; -video/vnd.mpegurl=open-in-dvm.desktop; -video/vnd.rn-realvideo=open-in-dvm.desktop; -video/vnd.vivo=open-in-dvm.desktop; -video/webm=open-in-dvm.desktop; -video/x-anim=open-in-dvm.desktop; -video/x-avi=open-in-dvm.desktop; -video/x-flc=open-in-dvm.desktop; -video/x-fli=open-in-dvm.desktop; -video/x-flic=open-in-dvm.desktop; -video/x-flv=open-in-dvm.desktop; -video/x-m4v=open-in-dvm.desktop; -video/x-matroska=open-in-dvm.desktop; -video/x-mpeg=open-in-dvm.desktop; -video/x-mpeg2=open-in-dvm.desktop; -video/x-ms-asf=open-in-dvm.desktop; -video/x-ms-asx=open-in-dvm.desktop; -video/x-msvideo=open-in-dvm.desktop; -video/x-ms-wm=open-in-dvm.desktop; -video/x-ms-wmv=open-in-dvm.desktop; -video/x-ms-wmx=open-in-dvm.desktop; -video/x-ms-wvx=open-in-dvm.desktop; -video/x-nsv=open-in-dvm.desktop; -video/x-ogm+ogg=open-in-dvm.desktop; -video/x-theora+ogg=open-in-dvm.desktop; -video/x-totem-stream=open-in-dvm.desktop; -x-content/video-dvd=open-in-dvm.desktop; -x-content/video-vcd=open-in-dvm.desktop; -x-content/video-svcd=open-in-dvm.desktop; -x-scheme-handler/pnm=open-in-dvm.desktop; -x-scheme-handler/mms=open-in-dvm.desktop; -x-scheme-handler/net=open-in-dvm.desktop; -x-scheme-handler/rtp=open-in-dvm.desktop; -x-scheme-handler/rtmp=open-in-dvm.desktop; -x-scheme-handler/rtsp=open-in-dvm.desktop; -x-scheme-handler/mmsh=open-in-dvm.desktop; -x-scheme-handler/uvox=open-in-dvm.desktop; -x-scheme-handler/icy=open-in-dvm.desktop; -x-scheme-handler/icyx=open-in-dvm.desktop; -application/x-7z-compressed=open-in-dvm.desktop; -application/x-7z-compressed-tar=open-in-dvm.desktop; -application/x-ace=open-in-dvm.desktop; -application/x-alz=open-in-dvm.desktop; -application/x-ar=open-in-dvm.desktop; -application/x-arj=open-in-dvm.desktop; -application/x-bzip=open-in-dvm.desktop; -application/x-bzip-compressed-tar=open-in-dvm.desktop; -application/x-bzip1=open-in-dvm.desktop; -application/x-bzip1-compressed-tar=open-in-dvm.desktop; -application/x-cabinet=open-in-dvm.desktop; -application/x-cbr=open-in-dvm.desktop; -application/x-cbz=open-in-dvm.desktop; -application/x-compress=open-in-dvm.desktop; -application/x-compressed-tar=open-in-dvm.desktop; -application/x-cpio=open-in-dvm.desktop; -application/x-deb=open-in-dvm.desktop; -application/x-ear=open-in-dvm.desktop; -application/x-ms-dos-executable=open-in-dvm.desktop; -application/x-gtar=open-in-dvm.desktop; -application/x-gzip=open-in-dvm.desktop; -application/x-gzpostscript=open-in-dvm.desktop; -application/x-java-archive=open-in-dvm.desktop; -application/x-lha=open-in-dvm.desktop; -application/x-lhz=open-in-dvm.desktop; -application/x-lrzip=open-in-dvm.desktop; -application/x-lrzip-compressed-tar=open-in-dvm.desktop; -application/x-lzip=open-in-dvm.desktop; -application/x-lzip-compressed-tar=open-in-dvm.desktop; -application/x-lzma=open-in-dvm.desktop; -application/x-lzma-compressed-tar=open-in-dvm.desktop; -application/x-lzop=open-in-dvm.desktop; -application/x-lzop-compressed-tar=open-in-dvm.desktop; -application/x-ms-wim=open-in-dvm.desktop; -application/x-rar=open-in-dvm.desktop; -application/x-rar-compressed=open-in-dvm.desktop; -application/x-rzip=open-in-dvm.desktop; -application/x-tar=open-in-dvm.desktop; -application/x-tarz=open-in-dvm.desktop; -application/x-stuffit=open-in-dvm.desktop; -application/x-war=open-in-dvm.desktop; -application/x-xz=open-in-dvm.desktop; -application/x-xz-compressed-tar=open-in-dvm.desktop; -application/x-zip=open-in-dvm.desktop; -application/x-zip-compressed=open-in-dvm.desktop; -application/x-zoo=open-in-dvm.desktop; -application/zip=open-in-dvm.desktop; -application/x-archive=open-in-dvm.desktop; -application/vnd.ms-cab-compressed=open-in-dvm.desktop; -application/x-source-rpm=open-in-dvm.desktop; -image/bmp=open-in-dvm.desktop; -image/gif=open-in-dvm.desktop; -image/jpeg=open-in-dvm.desktop; -image/jpg=open-in-dvm.desktop; -image/pjpeg=open-in-dvm.desktop; -image/png=open-in-dvm.desktop; -image/tiff=open-in-dvm.desktop; -image/x-bmp=open-in-dvm.desktop; -image/x-gray=open-in-dvm.desktop; -image/x-icb=open-in-dvm.desktop; -image/x-ico=open-in-dvm.desktop; -image/x-png=open-in-dvm.desktop; -image/x-portable-anymap=open-in-dvm.desktop; -image/x-portable-bitmap=open-in-dvm.desktop; -image/x-portable-graymap=open-in-dvm.desktop; -image/x-portable-pixmap=open-in-dvm.desktop; -image/x-xbitmap=open-in-dvm.desktop; -image/x-xpixmap=open-in-dvm.desktop; -image/x-pcx=open-in-dvm.desktop; -image/svg+xml=open-in-dvm.desktop; -image/svg+xml-compressed=open-in-dvm.desktop; -image/vnd.wap.wbmp=open-in-dvm.desktop; diff --git a/files/open-in-dvm.desktop b/files/open-in-dvm.desktop deleted file mode 100644 index 5dd268167..000000000 --- a/files/open-in-dvm.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Type=Application -Version=1.0 -Name=Open in Disposable VM -Comment=Open file in a Disposable VM -TryExec=/usr/bin/qvm-open-in-vm -Exec=/usr/bin/qvm-open-in-vm --view-only '@dispvm:sd-viewer' %f -Icon=/usr/share/icons/Qubes/dispvm-gray.png -Terminal=false -Categories=Qubes;Utility; diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index 717903969..abd410582 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.3 +0.2.4 From 947405ea3f7286cd22cc013482a0296a28e9604b Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 21 Oct 2020 09:56:18 -0700 Subject: [PATCH 407/751] update links and old references --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 886dd65d7..1cd677e26 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Python SDK for SecureDrop -[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/master.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/master) +[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/main.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/main) This SDK provides a convenient Python interface to the [SecureDrop Journalist Interface API](https://docs.securedrop.org/en/latest/development/journalist_api.html). The development of the SDK was primarily motivated by the creation of the [SecureDrop Workstation](https://github.com/freedomofpress/securedrop-workstation) based on Qubes OS. @@ -221,15 +221,15 @@ To make a release, you should: 1. Create a branch named `release/$new_version_number` 2. Update `CHANGELOG.md` and `setup.py` 3. Commit the changes. -4. Create a PR and get the PR reviewed and merged into ``master``. +4. Create a PR and get the PR reviewed and merged into ``main``. 5. ``git tag $new_version_number`` and push the new tag. 6. Checkout the new tag locally. 7. Push the new release source tarball to the PSF's PyPI [following this documentation](https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives). Do not upload the wheel (by deleting it from your `dist/` directory prior to upload). -8. If you want to publish the new SDK release to the FPF PyPI mirror, Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/master/README.md#build-a-package) instructions to push the package up to our PyPI mirror: https://pypi.org/simple +8. If you want to publish the new SDK release to the FPF PyPI mirror, Hop over to the the `securedrop-debian-packaging` repo and follow the [build-a-package](https://github.com/freedomofpress/securedrop-debian-packaging/blob/HEAD/README.md#build-a-package) instructions to push the package up to our PyPI mirror: https://pypi.org/simple # Contributing -Please read [CONTRIBUTING.md](https://github.com/freedomofpress/securedrop-sdk/blob/master/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. +Please read [CONTRIBUTING.md](https://github.com/freedomofpress/securedrop-sdk/blob/HEAD/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. # Versioning From 85e3241e34ea92a3da0db008e340a72895a3bdf0 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 27 Oct 2020 13:00:04 -0700 Subject: [PATCH 408/751] Moves config to private volume The Qubes RPC file hardcodes the filepath to the YAML config file, which contains site-specific information such as the Onion URL for the Journalist Interface. As part of template consolidation [0], we're moving the config file out of the system/root partition and into the private (i.e. /home/) volume, so that the `sd-proxy` AppVM has the config information it needs while sharing a TemplateVM with other components. [0] https://github.com/freedomofpress/securedrop-workstation#471 --- qubes/securedrop.Proxy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qubes/securedrop.Proxy b/qubes/securedrop.Proxy index cea1922e4..f8eee7cb2 100755 --- a/qubes/securedrop.Proxy +++ b/qubes/securedrop.Proxy @@ -1 +1 @@ -/usr/bin/sd-proxy /etc/sd-proxy.yaml +/usr/bin/sd-proxy /home/user/.securedrop_proxy/sd-proxy.yaml From 51567adf1190d99594ca32ebeb77171b7a112d7f Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Thu, 29 Oct 2020 16:12:57 -0400 Subject: [PATCH 409/751] Updates version and changelog in preparation for new package --- VERSION | 2 +- changelog.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 17e51c385..d917d3e26 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.1 +0.1.2 diff --git a/changelog.md b/changelog.md index 32937ae6f..8a5d98b3b 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.2 + + * Uses Qubes domain name instead of system hostname. + ## 0.1.1 * Infers hostname from system settings, if no config value found. From 25175d39f5ae9e52feef469c4973042226a48867 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Thu, 29 Oct 2020 16:39:42 -0400 Subject: [PATCH 410/751] updated version and changelog --- changelog.md | 6 ++++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index bfded302f..7b6a457e4 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,11 @@ # Changelog +## 0.3.1 + + * Moved proxy configuration to private volume (#79) + * Added black and isort checks to standardise code formatting (#61) + * Update urllib3 to version 1.25.10, requests to version 2.22.0, due to CVE-2020-26137 (#76). + ## 0.3.0 * Use incoming timeout value from JSON (#69). diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 0d91a54c7..9e11b32fc 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.3.0 +0.3.1 From edc2745fa7ba98c04f541e5cbe4bfb95fffa316d Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 12 Nov 2020 00:30:32 -0800 Subject: [PATCH 411/751] Move redundant code into shared test class --- tests/test_api.py | 232 ++++++---------------------------- tests/test_apiproxy.py | 274 +++++++++-------------------------------- tests/test_shared.py | 236 +++++++++++++++++++++++++++++++++++ 3 files changed, 327 insertions(+), 415 deletions(-) create mode 100644 tests/test_shared.py diff --git a/tests/test_api.py b/tests/test_api.py index 87e2240c5..6c70095f2 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,10 +1,7 @@ -import datetime import hashlib -import os import shutil import tempfile import time -import unittest import pyotp import pytest @@ -12,19 +9,18 @@ from requests.exceptions import ConnectTimeout, ReadTimeout from sdclientapi import API, RequestTimeoutError -from sdclientapi.sdlocalobjects import ( - AuthError, - Reply, - ReplyError, - Source, - Submission, - WrongUUIDError, -) +from sdclientapi.sdlocalobjects import AuthError, Reply, Submission +from test_shared import TestShared NUM_REPLIES_PER_SOURCE = 2 -class TestAPI(unittest.TestCase): +class TestAPI(TestShared): + """ + Note that TestShared contains most of the test code, which is shared between + API and API Proxy tests. + """ + def setUp(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" @@ -74,230 +70,93 @@ def test_auth_badotp(self): self.api.authenticate() def test_api_auth(self): - self.assertTrue(isinstance(self.api.token, str)) - self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) - self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) - self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) + super().api_auth() @vcr.use_cassette("data/test-seen.yml") def test_seen(self): - submissions = self.api.get_all_submissions() - replies = self.api.get_all_replies() - - file_uuids = [] - message_uuids = [] - reply_uuids = [] - - for submission in submissions: - if submission.is_file(): - file_uuids.append(submission.uuid) - else: - message_uuids.append(submission.uuid) - - for reply in replies: - reply_uuids.append(reply.uuid) - - self.assertTrue( - self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) - ) + super().seen() @vcr.use_cassette("data/test-get-sources.yml") def test_get_sources(self): - sources = self.api.get_sources() - for source in sources: - # Assert expected fields are present - assert source.journalist_designation - assert source.uuid - assert source.last_updated + super().get_sources() @vcr.use_cassette("data/test-star-add-remove.yml") def test_star_add_remove(self): - s = self.api.get_sources()[0] - self.assertTrue(self.api.add_star(s)) - self.assertTrue(self.api.remove_star(s)) - for source in self.api.get_sources(): - if source.uuid == s.uuid: - self.assertFalse(source.is_starred) + super().star_add_remove() @vcr.use_cassette("data/test-get-single-source.yml") def test_get_single_source(self): - s = self.api.get_sources()[0] - # Now we will try to get the same source again - s2 = self.api.get_source(s) - - self.assertEqual(s.journalist_designation, s2.journalist_designation) - self.assertEqual(s.uuid, s2.uuid) + super().get_single_source() @vcr.use_cassette("data/test-get-single-source.yml") def test_get_single_source_from_string(self): - s = self.api.get_sources()[0] - # Now we will try to get the same source again using uuid - s2 = self.api.get_source_from_string(s.uuid) - - self.assertEqual(s.journalist_designation, s2.journalist_designation) - self.assertEqual(s.uuid, s2.uuid) + super().get_single_source(from_string=True) @vcr.use_cassette("data/test-failed-single-source.yml") def test_failed_single_source(self): - with self.assertRaises(WrongUUIDError): - self.api.get_source(Source(uuid="not there")) + super().failed_single_source() @vcr.use_cassette("data/test-get-submissions.yml") def test_get_submissions(self): - s = self.api.get_sources()[0] - - subs = self.api.get_submissions(s) - for submission in subs: - assert submission.filename + super().get_submissions() @vcr.use_cassette("data/test-get-submission.yml") def test_get_submission(self): - # Get a source with submissions - source_uuid = self.api.get_all_submissions()[0].source_uuid - s = self.api.get_source(Source(uuid=source_uuid)) - - subs = self.api.get_submissions(s) - sub = self.api.get_submission(subs[0]) - self.assertEqual(sub.filename, subs[0].filename) + super().get_submission() @vcr.use_cassette("data/test-get-submission.yml") def test_get_submission_from_string(self): - # Get a source with submissions - source_uuid = self.api.get_all_submissions()[0].source_uuid - s = self.api.get_source(Source(uuid=source_uuid)) - - subs = self.api.get_submissions(s) - sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) - self.assertEqual(sub.filename, subs[0].filename) + super().get_submission(from_string=True) @vcr.use_cassette("data/test-get-wrong-submissions.yml") def test_get_wrong_submissions(self): - s = self.api.get_sources()[0] - s.uuid = "rofl-missing" - with self.assertRaises(WrongUUIDError): - self.api.get_submissions(s) + super().get_wrong_submissions() @vcr.use_cassette("data/test-get-all-submissions.yml") def test_get_all_submissions(self): - subs = self.api.get_all_submissions() - for submission in subs: - assert submission.filename + super().get_all_submissions() @vcr.use_cassette("data/test-flag-source.yml") def test_flag_source(self): - s = self.api.get_sources()[0] - self.assertTrue(self.api.flag_source(s)) - # Now we will try to get the same source again - s2 = self.api.get_source(s) - self.assertTrue(s2.is_flagged) + super().flag_source() @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source(self): - number_of_sources_before = len(self.api.get_sources()) - - s = self.api.get_sources()[0] - self.assertTrue(self.api.delete_source(s)) - - # Now there should be one less source - sources = self.api.get_sources() - self.assertEqual(len(sources), number_of_sources_before - 1) + super().delete_source() @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source_from_string(self): - number_of_sources_before = len(self.api.get_sources()) - - s = self.api.get_sources()[0] - self.assertTrue(self.api.delete_source_from_string(s.uuid)) - - # Now there should be one less source - sources = self.api.get_sources() - self.assertEqual(len(sources), number_of_sources_before - 1) + super().delete_source(from_string=True) @vcr.use_cassette("data/test-delete-submission.yml") def test_delete_submission(self): - number_of_submissions_before = len(self.api.get_all_submissions()) - - subs = self.api.get_all_submissions() - self.assertTrue(self.api.delete_submission(subs[0])) - new_subs = self.api.get_all_submissions() - # We now should have 1 less submission - self.assertEqual(len(new_subs), number_of_submissions_before - 1) - - # Let us make sure that sub[0] is not there - for s in new_subs: - self.assertNotEqual(s.uuid, subs[0].uuid) + super().delete_submission() @vcr.use_cassette("data/test-delete-submission-from-string.yml") def test_delete_submission_from_string(self): - number_of_submissions_before = len(self.api.get_all_submissions()) - - s = self.api.get_sources()[0] - - subs = self.api.get_submissions(s) - - self.assertTrue(self.api.delete_submission(subs[0])) - new_subs = self.api.get_all_submissions() - # We now should have 1 less submission - self.assertEqual(len(new_subs), number_of_submissions_before - 1) - - # Let us make sure that sub[0] is not there - for s in new_subs: - self.assertNotEqual(s.uuid, subs[0].uuid) + super().delete_submission(from_string=True) @vcr.use_cassette("data/test-get-current-user.yml") def test_get_current_user(self): - user = self.api.get_current_user() - self.assertTrue(user["is_admin"]) - self.assertEqual(user["username"], "journalist") - self.assertTrue("first_name" in user) - self.assertTrue("last_name" in user) + super().get_current_user() @vcr.use_cassette("data/test-get-users.yml") def test_get_users(self): - users = self.api.get_users() - for user in users: - # Assert expected fields are present - assert hasattr(user, "first_name") - assert hasattr(user, "last_name") - # Every user has a non-empty name and UUID - assert user.username - assert user.uuid - # The API should never return these fields - assert not hasattr(user, "last_login") - assert not hasattr(user, "is_admin") + super().get_users() @vcr.use_cassette("data/test-error-unencrypted-reply.yml") def test_error_unencrypted_reply(self): - s = self.api.get_sources()[0] - with self.assertRaises(ReplyError) as err: - self.api.reply_source(s, "hello") - - self.assertEqual(err.exception.msg, "bad request") + super().error_unencrypted_reply() @vcr.use_cassette("data/test-reply-source.yml") def test_reply_source(self): - s = self.api.get_sources()[0] - dirname = os.path.dirname(__file__) - with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: - data = fobj.read() - - reply = self.api.reply_source(s, data) - assert isinstance(reply, Reply) - assert reply.uuid - assert reply.filename + super().reply_source() @vcr.use_cassette("data/test-reply-source-with-uuid.yml") def test_reply_source_with_uuid(self): - s = self.api.get_sources()[0] - dirname = os.path.dirname(__file__) - with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: - data = fobj.read() - - msg_uuid = "e467868c-1fbb-4b5e-bca2-87944ea83855" - reply = self.api.reply_source(s, data, msg_uuid) - assert reply.uuid == msg_uuid + super().reply_source_with_uuid() + # This test is materially different in the API & API Proxy versions. @vcr.use_cassette("data/test-download-submission.yml") def test_download_submission(self): submissions = self.api.get_all_submissions() @@ -335,29 +194,17 @@ def test_download_submission(self): @vcr.use_cassette("data/test-get-replies-from-source.yml") def test_get_replies_from_source(self): - s = self.api.get_sources()[0] - replies = self.api.get_replies_from_source(s) - self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE) + super().get_replies_from_source() @vcr.use_cassette("data/test-get-reply-from-source.yml") def test_get_reply_from_source(self): - s = self.api.get_sources()[0] - replies = self.api.get_replies_from_source(s) - reply = replies[0] - - r = self.api.get_reply_from_source(s, reply.uuid) - - self.assertEqual(reply.filename, r.filename) - self.assertEqual(reply.size, r.size) - self.assertEqual(reply.reply_url, r.reply_url) - self.assertEqual(reply.journalist_username, r.journalist_username) + super().get_reply_from_source() @vcr.use_cassette("data/test-get-all-replies.yml") def test_get_all_replies(self): - num_sources = len(self.api.get_sources()) - replies = self.api.get_all_replies() - self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE * num_sources) + super().get_all_replies() + # This test is materially different in the API & API Proxy versions. @vcr.use_cassette("data/test-download-reply.yml") def test_download_reply(self): r = self.api.get_all_replies()[0] @@ -381,14 +228,7 @@ def test_download_reply(self): @vcr.use_cassette("data/test-delete-reply.yml") def test_delete_reply(self): - r = self.api.get_all_replies()[0] - - number_of_replies_before = len(self.api.get_all_replies()) - - self.assertTrue(self.api.delete_reply(r)) - - # We deleted one, so there must be 1 less reply now - self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + super().delete_reply() @vcr.use_cassette("data/test-logout.yml") def test_zlogout(self): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 3e7479a13..a5d2725d1 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,31 +1,26 @@ -import datetime import http import json import os import shutil import tempfile import time -import unittest from subprocess import TimeoutExpired import pyotp import pytest from sdclientapi import API, RequestTimeoutError -from sdclientapi.sdlocalobjects import ( - BaseError, - Reply, - ReplyError, - Source, - Submission, - WrongUUIDError, -) +from sdclientapi.sdlocalobjects import BaseError, Reply, Submission +from test_shared import TestShared from utils import dastollervey_datasaver, load_auth, save_auth -NUM_REPLIES_PER_SOURCE = 2 +class TestAPIProxy(TestShared): + """ + Note that TestShared contains most of the test code, which is shared between + API and API Proxy tests. + """ -class TestAPIProxy(unittest.TestCase): @dastollervey_datasaver def setUp(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") @@ -62,279 +57,107 @@ def setUp(self): break def test_api_auth(self): - - self.assertTrue(isinstance(self.api.token, str)) - self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) - self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) - self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) + super().api_auth() @dastollervey_datasaver def test_seen(self): - submissions = self.api.get_all_submissions() - replies = self.api.get_all_replies() - - file_uuids = [] - message_uuids = [] - reply_uuids = [] - - for submission in submissions: - if submission.is_file(): - file_uuids.append(submission.uuid) - else: - message_uuids.append(submission.uuid) - - for reply in replies: - reply_uuids.append(reply.uuid) - - self.assertTrue( - self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) - ) + super().seen() @dastollervey_datasaver def test_get_sources(self): - sources = self.api.get_sources() - for source in sources: - # Assert expected fields are present - assert source.journalist_designation - assert source.uuid - assert source.last_updated + super().get_sources() @dastollervey_datasaver def test_star_add_remove(self): - s = self.api.get_sources()[0] - self.assertTrue(self.api.add_star(s)) - self.assertTrue(self.api.remove_star(s)) - for source in self.api.get_sources(): - if source.uuid == s.uuid: - self.assertFalse(source.is_starred) + super().star_add_remove() @dastollervey_datasaver def test_get_single_source(self): - s = self.api.get_sources()[0] - # Now we will try to get the same source again - s2 = self.api.get_source(s) - - self.assertEqual(s.journalist_designation, s2.journalist_designation) - self.assertEqual(s.uuid, s2.uuid) + super().get_single_source() @dastollervey_datasaver def test_get_single_source_from_string(self): - s = self.api.get_sources()[0] - # Now we will try to get the same source again using uuid - s2 = self.api.get_source_from_string(s.uuid) - - self.assertEqual(s.journalist_designation, s2.journalist_designation) - self.assertEqual(s.uuid, s2.uuid) + super().get_single_source(from_string=True) @dastollervey_datasaver def test_failed_single_source(self): - with self.assertRaises(WrongUUIDError): - self.api.get_source(Source(uuid="not there")) + super().failed_single_source() @dastollervey_datasaver def test_get_submissions(self): - s = self.api.get_sources()[0] - - subs = self.api.get_submissions(s) - for submission in subs: - assert submission.filename + super().get_submissions() @dastollervey_datasaver def test_get_submission(self): - # Get a source with submissions - source_uuid = self.api.get_all_submissions()[0].source_uuid - s = self.api.get_source(Source(uuid=source_uuid)) - - subs = self.api.get_submissions(s) - sub = self.api.get_submission(subs[0]) - self.assertEqual(sub.filename, subs[0].filename) + super().get_submission() @dastollervey_datasaver def test_get_submission_from_string(self): - # Get a source with submissions - source_uuid = self.api.get_all_submissions()[0].source_uuid - s = self.api.get_source(Source(uuid=source_uuid)) - - subs = self.api.get_submissions(s) - sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) - self.assertEqual(sub.filename, subs[0].filename) + super().get_submission(from_string=True) @dastollervey_datasaver def test_get_wrong_submissions(self): - s = self.api.get_sources()[0] - s.uuid = "rofl-missing" - with self.assertRaises(WrongUUIDError): - self.api.get_submissions(s) + super().get_wrong_submissions() @dastollervey_datasaver def test_get_all_submissions(self): - subs = self.api.get_all_submissions() - for submission in subs: - assert submission.filename + super().get_all_submissions() @dastollervey_datasaver def test_flag_source(self): - s = self.api.get_sources()[0] - self.assertTrue(self.api.flag_source(s)) - # Now we will try to get the same source again - s2 = self.api.get_source(s) - self.assertTrue(s2.is_flagged) + super().flag_source() @dastollervey_datasaver def test_delete_source(self): - number_of_sources_before = len(self.api.get_sources()) - - s = self.api.get_sources()[0] - self.assertTrue(self.api.delete_source(s)) - - # Now there should be one less source - sources = self.api.get_sources() - self.assertEqual(len(sources), number_of_sources_before - 1) + super().delete_source() @dastollervey_datasaver def test_delete_source_from_string(self): - number_of_sources_before = len(self.api.get_sources()) - - s = self.api.get_sources()[0] - self.assertTrue(self.api.delete_source_from_string(s.uuid)) - - # Now there should be one less source - sources = self.api.get_sources() - self.assertEqual(len(sources), number_of_sources_before - 1) + super().delete_source(from_string=True) @dastollervey_datasaver def test_delete_submission(self): - number_of_submissions_before = len(self.api.get_all_submissions()) - - subs = self.api.get_all_submissions() - self.assertTrue(self.api.delete_submission(subs[0])) - new_subs = self.api.get_all_submissions() - # We now should have 1 less submission - self.assertEqual(len(new_subs), number_of_submissions_before - 1) - - # Let us make sure that sub[0] is not there - for s in new_subs: - self.assertNotEqual(s.uuid, subs[0].uuid) + super().delete_submission() @dastollervey_datasaver def test_delete_submission_from_string(self): - number_of_submissions_before = len(self.api.get_all_submissions()) - - s = self.api.get_sources()[0] - - subs = self.api.get_submissions(s) - - self.assertTrue(self.api.delete_submission(subs[0])) - new_subs = self.api.get_all_submissions() - # We now should have 1 less submission - self.assertEqual(len(new_subs), number_of_submissions_before - 1) - - # Let us make sure that sub[0] is not there - for s in new_subs: - self.assertNotEqual(s.uuid, subs[0].uuid) + super().delete_submission(from_string=True) @dastollervey_datasaver def test_get_current_user(self): - user = self.api.get_current_user() - self.assertTrue(user["is_admin"]) - self.assertEqual(user["username"], "journalist") - self.assertTrue("first_name" in user) - self.assertTrue("last_name" in user) + super().get_current_user() @dastollervey_datasaver def test_get_users(self): - users = self.api.get_users() - for user in users: - # Assert expected fields are present - assert hasattr(user, "first_name") - assert hasattr(user, "last_name") - # Every user has a non-empty name and UUID - assert user.username - assert user.uuid - # The API should never return these fields - assert not hasattr(user, "last_login") - assert not hasattr(user, "is_admin") + super().get_users() @dastollervey_datasaver def test_error_unencrypted_reply(self): - s = self.api.get_sources()[0] - with self.assertRaises(ReplyError) as err: - self.api.reply_source(s, "hello") - - self.assertEqual(err.exception.msg, "bad request") + super().error_unencrypted_reply() @dastollervey_datasaver def test_reply_source(self): - s = self.api.get_sources()[0] - dirname = os.path.dirname(__file__) - with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: - data = fobj.read() - - reply = self.api.reply_source(s, data) - assert isinstance(reply, Reply) - assert reply.uuid - assert reply.filename + super().reply_source() @dastollervey_datasaver def test_reply_source_with_uuid(self): - s = self.api.get_sources()[0] - dirname = os.path.dirname(__file__) - with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: - data = fobj.read() - - msg_uuid = "e467868c-1fbb-4b5e-bca2-87944ea83855" - reply = self.api.reply_source(s, data, msg_uuid) - assert reply.uuid == msg_uuid - - @dastollervey_datasaver - def test_download_submission(self): - s = self.api.get_all_submissions()[0] - - self.assertFalse(s.is_read) - - # We need a temporary directory to download - tmpdir = tempfile.mkdtemp() - _, filepath = self.api.download_submission(s, tmpdir) - - # Uncomment the following part only on QubesOS - # for testing against real server. - # now let us read the downloaded file - # with open(filepath, "rb") as fobj: - # fobj.read() - - # is_read should still be False as of SecureDrop 1.6.0 or later. - - s = self.api.get_submission(s) - self.assertFalse(s.is_read) - - # Let us remove the temporary directory - shutil.rmtree(tmpdir) + super().reply_source_with_uuid() @dastollervey_datasaver def test_get_replies_from_source(self): - s = self.api.get_sources()[0] - replies = self.api.get_replies_from_source(s) - self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE) + super().get_replies_from_source() @dastollervey_datasaver def test_get_reply_from_source(self): - s = self.api.get_sources()[0] - replies = self.api.get_replies_from_source(s) - reply = replies[0] - - r = self.api.get_reply_from_source(s, reply.uuid) - - self.assertEqual(reply.filename, r.filename) - self.assertEqual(reply.size, r.size) - self.assertEqual(reply.reply_url, r.reply_url) - self.assertEqual(reply.journalist_username, r.journalist_username) + super().get_reply_from_source() @dastollervey_datasaver def test_get_all_replies(self): - num_sources = len(self.api.get_sources()) - replies = self.api.get_all_replies() - self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE * num_sources) + super().get_all_replies() + + @dastollervey_datasaver + def test_delete_reply(self): + super().delete_reply() @dastollervey_datasaver def test_download_reply(self): @@ -354,15 +177,28 @@ def test_download_reply(self): shutil.rmtree(tmpdir) @dastollervey_datasaver - def test_delete_reply(self): - r = self.api.get_all_replies()[0] + def test_download_submission(self): + s = self.api.get_all_submissions()[0] + + self.assertFalse(s.is_read) + + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + _, filepath = self.api.download_submission(s, tmpdir) + + # Uncomment the following part only on QubesOS + # for testing against real server. + # now let us read the downloaded file + # with open(filepath, "rb") as fobj: + # fobj.read() - number_of_replies_before = len(self.api.get_all_replies()) + # is_read should still be False as of SecureDrop 1.6.0 or later. - self.assertTrue(self.api.delete_reply(r)) + s = self.api.get_submission(s) + self.assertFalse(s.is_read) - # We deleted one, so there must be 1 less reply now - self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + # Let us remove the temporary directory + shutil.rmtree(tmpdir) @dastollervey_datasaver def test_logout(self): diff --git a/tests/test_shared.py b/tests/test_shared.py new file mode 100644 index 000000000..bcd303e52 --- /dev/null +++ b/tests/test_shared.py @@ -0,0 +1,236 @@ +import datetime +import os +import unittest + +from sdclientapi.sdlocalobjects import Reply, ReplyError, Source, WrongUUIDError + +NUM_REPLIES_PER_SOURCE = 2 + + +class TestShared(unittest.TestCase): + """ + Base class for test code that is shared by the API and API proxy tests. + Tests in this file should not be prefixed with test_; they are called + only from subclasses. + """ + + # ---------------- AUTH ---------------- + + def api_auth(self): + self.assertTrue(isinstance(self.api.token, str)) + self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) + self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) + self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) + self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) + + # ---------------- SOURCES ---------------- + + def delete_source(self, from_string=False): + number_of_sources_before = len(self.api.get_sources()) + + s = self.api.get_sources()[0] + if from_string: + self.assertTrue(self.api.delete_source_from_string(s.uuid)) + else: + self.assertTrue(self.api.delete_source(s)) + + # Now there should be one less source + sources = self.api.get_sources() + self.assertEqual(len(sources), number_of_sources_before - 1) + + def failed_single_source(self): + with self.assertRaises(WrongUUIDError): + self.api.get_source(Source(uuid="not there")) + + def flag_source(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.flag_source(s)) + # Now we will try to get the same source again + s2 = self.api.get_source(s) + self.assertTrue(s2.is_flagged) + + def get_single_source(self, from_string=False): + s = self.api.get_sources()[0] + # Now we will try to get the same source again + + if from_string: + s2 = self.api.get_source_from_string(s.uuid) + else: + s2 = self.api.get_source(s) + + self.assertEqual(s.journalist_designation, s2.journalist_designation) + self.assertEqual(s.uuid, s2.uuid) + + def get_sources(self): + sources = self.api.get_sources() + for source in sources: + # Assert expected fields are present + assert source.journalist_designation + assert source.uuid + assert source.last_updated + + # ---------------- SUBMISSIONS ---------------- + + def delete_submission(self, from_string=False): + number_of_submissions_before = len(self.api.get_all_submissions()) + + if from_string: + s = self.api.get_sources()[0] + subs = self.api.get_submissions(s) + else: + subs = self.api.get_all_submissions() + self.assertTrue(self.api.delete_submission(subs[0])) + new_subs = self.api.get_all_submissions() + # We now should have 1 less submission + self.assertEqual(len(new_subs), number_of_submissions_before - 1) + + # Let us make sure that sub[0] is not there + for s in new_subs: + self.assertNotEqual(s.uuid, subs[0].uuid) + + def get_submission(self, from_string=False): + # Get a source with submissions + source_uuid = self.api.get_all_submissions()[0].source_uuid + s = self.api.get_source(Source(uuid=source_uuid)) + + subs = self.api.get_submissions(s) + if from_string: + sub = self.api.get_submission_from_string(subs[0].uuid, s.uuid) + else: + sub = self.api.get_submission(subs[0]) + + self.assertEqual(sub.filename, subs[0].filename) + + def get_all_submissions(self): + subs = self.api.get_all_submissions() + for submission in subs: + assert submission.filename + + def get_submissions(self): + s = self.api.get_sources()[0] + subs = self.api.get_submissions(s) + for submission in subs: + assert submission.filename + + def get_wrong_submissions(self): + s = self.api.get_sources()[0] + s.uuid = "rofl-missing" + with self.assertRaises(WrongUUIDError): + self.api.get_submissions(s) + + # ---------------- REPLIES ---------------- + + def error_unencrypted_reply(self): + s = self.api.get_sources()[0] + with self.assertRaises(ReplyError) as err: + self.api.reply_source(s, "hello") + + self.assertEqual(err.exception.msg, "bad request") + + def delete_reply(self): + r = self.api.get_all_replies()[0] + + number_of_replies_before = len(self.api.get_all_replies()) + + self.assertTrue(self.api.delete_reply(r)) + + # We deleted one, so there must be 1 less reply now + self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + + def get_replies_from_source(self): + s = self.api.get_sources()[0] + replies = self.api.get_replies_from_source(s) + self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE) + + def get_reply_from_source(self): + s = self.api.get_sources()[0] + replies = self.api.get_replies_from_source(s) + reply = replies[0] + + r = self.api.get_reply_from_source(s, reply.uuid) + + self.assertEqual(reply.filename, r.filename) + self.assertEqual(reply.size, r.size) + self.assertEqual(reply.reply_url, r.reply_url) + self.assertEqual(reply.journalist_username, r.journalist_username) + + def get_all_replies(self): + num_sources = len(self.api.get_sources()) + replies = self.api.get_all_replies() + self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE * num_sources) + + def reply_source(self): + s = self.api.get_sources()[0] + dirname = os.path.dirname(__file__) + with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: + data = fobj.read() + + reply = self.api.reply_source(s, data) + assert isinstance(reply, Reply) + assert reply.uuid + assert reply.filename + + def reply_source_with_uuid(self): + s = self.api.get_sources()[0] + dirname = os.path.dirname(__file__) + with open(os.path.join(dirname, "encrypted_msg.asc")) as fobj: + data = fobj.read() + + msg_uuid = "e467868c-1fbb-4b5e-bca2-87944ea83855" + reply = self.api.reply_source(s, data, msg_uuid) + assert reply.uuid == msg_uuid + + # ---------------- USERS ---------------- + + def get_current_user(self): + user = self.api.get_current_user() + self.assertTrue(user["is_admin"]) + self.assertEqual(user["username"], "journalist") + self.assertTrue("first_name" in user) + self.assertTrue("last_name" in user) + + def get_users(self): + users = self.api.get_users() + for user in users: + # Assert expected fields are present + assert hasattr(user, "first_name") + assert hasattr(user, "last_name") + # Every user has a non-empty name and UUID + assert user.username + assert user.uuid + # The API should never return these fields + assert not hasattr(user, "last_login") + assert not hasattr(user, "is_admin") + + # ---------------- SEEN/UNSEEN ---------------- + + def seen(self): + submissions = self.api.get_all_submissions() + replies = self.api.get_all_replies() + + file_uuids = [] + message_uuids = [] + reply_uuids = [] + + for submission in submissions: + if submission.is_file(): + file_uuids.append(submission.uuid) + else: + message_uuids.append(submission.uuid) + + for reply in replies: + reply_uuids.append(reply.uuid) + + self.assertTrue( + self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) + ) + + # ---------------- STARRING ---------------- + + def star_add_remove(self): + s = self.api.get_sources()[0] + self.assertTrue(self.api.add_star(s)) + self.assertTrue(self.api.remove_star(s)) + for source in self.api.get_sources(): + if source.uuid == s.uuid: + self.assertFalse(source.is_starred) From 4ec68ccdd7cc514f3ba274267f5d213f68bf4224 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 19 Nov 2020 16:50:04 -0800 Subject: [PATCH 412/751] Avoid use of unittest; reorder tests for reliability --- data/setUp.json | 1 - tests/test_api.py | 134 +++++++++++++++++++++-------------------- tests/test_apiproxy.py | 69 +++++++++++---------- tests/test_shared.py | 79 ++++++++++++------------ tests/utils.py | 6 +- 5 files changed, 147 insertions(+), 142 deletions(-) delete mode 100644 data/setUp.json diff --git a/data/setUp.json b/data/setUp.json deleted file mode 100644 index b53d34e6f..000000000 --- a/data/setUp.json +++ /dev/null @@ -1 +0,0 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/tests/test_api.py b/tests/test_api.py index 6c70095f2..e691464d1 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -21,7 +21,7 @@ class TestAPI(TestShared): API and API Proxy tests. """ - def setUp(self): + def setup_method(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" @@ -54,24 +54,60 @@ def setUp(self): @vcr.use_cassette("data/test-baduser.yml") def test_auth_baduser(self): self.api = API(self.server, "no", self.password, str(self.totp.now())) - with self.assertRaises(AuthError): + with pytest.raises(AuthError): self.api.authenticate() @vcr.use_cassette("data/test-badpassword.yml") def test_auth_badpassword(self): self.api = API(self.server, self.username, "no", str(self.totp.now())) - with self.assertRaises(AuthError): + with pytest.raises(AuthError): self.api.authenticate() @vcr.use_cassette("data/test-badotp.yml") def test_auth_badotp(self): self.api = API(self.server, self.username, self.password, "no") - with self.assertRaises(AuthError): + with pytest.raises(AuthError): self.api.authenticate() def test_api_auth(self): super().api_auth() + # This test is materially different in the API & API Proxy versions. + @vcr.use_cassette("data/test-download-submission.yml") + def test_download_submission(self): + submissions = self.api.get_all_submissions() + unread_submission = None + for s in submissions: + if not s.is_read: + unread_submission = s + break + + if not unread_submission: + assert False, "There must be an unread submission in the db for this test to work." + + assert not unread_submission.is_read + + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + etag, filepath = self.api.download_submission(s, tmpdir) + + # now let us read the downloaded file + with open(filepath, "rb") as fobj: + content = fobj.read() + + # Verify the ETag contains the algorithm and the hash is correct + hasher = hashlib.sha256() + hasher.update(content) + + assert etag == "sha256:{}".format(hasher.hexdigest()) + + # is_read should still be False as of SecureDrop 1.6.0 or later + submission = self.api.get_submission(unread_submission) + assert not submission.is_read + + # Let us remove the temporary directory + shutil.rmtree(tmpdir) + @vcr.use_cassette("data/test-seen.yml") def test_seen(self): super().seen() @@ -120,22 +156,6 @@ def test_get_all_submissions(self): def test_flag_source(self): super().flag_source() - @vcr.use_cassette("data/test-delete-source.yml") - def test_delete_source(self): - super().delete_source() - - @vcr.use_cassette("data/test-delete-source.yml") - def test_delete_source_from_string(self): - super().delete_source(from_string=True) - - @vcr.use_cassette("data/test-delete-submission.yml") - def test_delete_submission(self): - super().delete_submission() - - @vcr.use_cassette("data/test-delete-submission-from-string.yml") - def test_delete_submission_from_string(self): - super().delete_submission(from_string=True) - @vcr.use_cassette("data/test-get-current-user.yml") def test_get_current_user(self): super().get_current_user() @@ -148,50 +168,6 @@ def test_get_users(self): def test_error_unencrypted_reply(self): super().error_unencrypted_reply() - @vcr.use_cassette("data/test-reply-source.yml") - def test_reply_source(self): - super().reply_source() - - @vcr.use_cassette("data/test-reply-source-with-uuid.yml") - def test_reply_source_with_uuid(self): - super().reply_source_with_uuid() - - # This test is materially different in the API & API Proxy versions. - @vcr.use_cassette("data/test-download-submission.yml") - def test_download_submission(self): - submissions = self.api.get_all_submissions() - unread_submission = None - for s in submissions: - if not s.is_read: - unread_submission = s - break - - if not unread_submission: - self.assertFalse("There must be an unread submission in the db for this test to work.") - - self.assertFalse(unread_submission.is_read) - - # We need a temporary directory to download - tmpdir = tempfile.mkdtemp() - etag, filepath = self.api.download_submission(s, tmpdir) - - # now let us read the downloaded file - with open(filepath, "rb") as fobj: - content = fobj.read() - - # Verify the ETag contains the algorithm and the hash is correct - hasher = hashlib.sha256() - hasher.update(content) - - assert etag == "sha256:{}".format(hasher.hexdigest()) - - # is_read should still be False as of SecureDrop 1.6.0 or later - submission = self.api.get_submission(unread_submission) - self.assertFalse(submission.is_read) - - # Let us remove the temporary directory - shutil.rmtree(tmpdir) - @vcr.use_cassette("data/test-get-replies-from-source.yml") def test_get_replies_from_source(self): super().get_replies_from_source() @@ -226,6 +202,34 @@ def test_download_reply(self): # Let us remove the temporary directory shutil.rmtree(tmpdir) + # ORDER MATTERS: The following tests add or delete data, and should + # not be run before other tests, which may rely on the original fixture + # state. + + @vcr.use_cassette("data/test-reply-source.yml") + def test_reply_source(self): + super().reply_source() + + @vcr.use_cassette("data/test-reply-source-with-uuid.yml") + def test_reply_source_with_uuid(self): + super().reply_source_with_uuid() + + @vcr.use_cassette("data/test-delete-source.yml") + def test_delete_source(self): + super().delete_source() + + @vcr.use_cassette("data/test-delete-source.yml") + def test_delete_source_from_string(self): + super().delete_source(from_string=True) + + @vcr.use_cassette("data/test-delete-submission.yml") + def test_delete_submission(self): + super().delete_submission() + + @vcr.use_cassette("data/test-delete-submission-from-string.yml") + def test_delete_submission_from_string(self): + super().delete_submission(from_string=True) + @vcr.use_cassette("data/test-delete-reply.yml") def test_delete_reply(self): super().delete_reply() @@ -233,7 +237,7 @@ def test_delete_reply(self): @vcr.use_cassette("data/test-logout.yml") def test_zlogout(self): r = self.api.logout() - self.assertTrue(r) + assert r def test_request_connect_timeout(mocker): diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index a5d2725d1..a20d2532b 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -22,7 +22,7 @@ class TestAPIProxy(TestShared): """ @dastollervey_datasaver - def setUp(self): + def setup_method(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" @@ -56,6 +56,7 @@ def setUp(self): save_auth(self.api.token) break + @dastollervey_datasaver def test_api_auth(self): super().api_auth() @@ -107,22 +108,6 @@ def test_get_all_submissions(self): def test_flag_source(self): super().flag_source() - @dastollervey_datasaver - def test_delete_source(self): - super().delete_source() - - @dastollervey_datasaver - def test_delete_source_from_string(self): - super().delete_source(from_string=True) - - @dastollervey_datasaver - def test_delete_submission(self): - super().delete_submission() - - @dastollervey_datasaver - def test_delete_submission_from_string(self): - super().delete_submission(from_string=True) - @dastollervey_datasaver def test_get_current_user(self): super().get_current_user() @@ -135,14 +120,6 @@ def test_get_users(self): def test_error_unencrypted_reply(self): super().error_unencrypted_reply() - @dastollervey_datasaver - def test_reply_source(self): - super().reply_source() - - @dastollervey_datasaver - def test_reply_source_with_uuid(self): - super().reply_source_with_uuid() - @dastollervey_datasaver def test_get_replies_from_source(self): super().get_replies_from_source() @@ -155,10 +132,6 @@ def test_get_reply_from_source(self): def test_get_all_replies(self): super().get_all_replies() - @dastollervey_datasaver - def test_delete_reply(self): - super().delete_reply() - @dastollervey_datasaver def test_download_reply(self): r = self.api.get_all_replies()[0] @@ -180,7 +153,7 @@ def test_download_reply(self): def test_download_submission(self): s = self.api.get_all_submissions()[0] - self.assertFalse(s.is_read) + assert not s.is_read # We need a temporary directory to download tmpdir = tempfile.mkdtemp() @@ -195,15 +168,47 @@ def test_download_submission(self): # is_read should still be False as of SecureDrop 1.6.0 or later. s = self.api.get_submission(s) - self.assertFalse(s.is_read) + assert not s.is_read # Let us remove the temporary directory shutil.rmtree(tmpdir) + # ORDER MATTERS: The following tests add or delete data, and should + # not be run before other tests which may rely on the original fixture + # state. + + @dastollervey_datasaver + def test_reply_source(self): + super().reply_source() + + @dastollervey_datasaver + def test_reply_source_with_uuid(self): + super().reply_source_with_uuid() + + @dastollervey_datasaver + def test_delete_source(self): + super().delete_source() + + @dastollervey_datasaver + def test_delete_source_from_string(self): + super().delete_source(from_string=True) + + @dastollervey_datasaver + def test_delete_submission(self): + super().delete_submission() + + @dastollervey_datasaver + def test_delete_submission_from_string(self): + super().delete_submission(from_string=True) + + @dastollervey_datasaver + def test_delete_reply(self): + super().delete_reply() + @dastollervey_datasaver def test_logout(self): r = self.api.logout() - self.assertTrue(r) + assert r if os.path.exists("login.txt"): os.unlink("login.txt") if os.path.exists("testtoken.json"): diff --git a/tests/test_shared.py b/tests/test_shared.py index bcd303e52..d557f27f3 100644 --- a/tests/test_shared.py +++ b/tests/test_shared.py @@ -1,13 +1,13 @@ import datetime import os -import unittest +import pytest from sdclientapi.sdlocalobjects import Reply, ReplyError, Source, WrongUUIDError NUM_REPLIES_PER_SOURCE = 2 -class TestShared(unittest.TestCase): +class TestShared(): """ Base class for test code that is shared by the API and API proxy tests. Tests in this file should not be prefixed with test_; they are called @@ -17,11 +17,11 @@ class TestShared(unittest.TestCase): # ---------------- AUTH ---------------- def api_auth(self): - self.assertTrue(isinstance(self.api.token, str)) - self.assertTrue(isinstance(self.api.token_expiration, datetime.datetime)) - self.assertTrue(isinstance(self.api.token_journalist_uuid, str)) - self.assertTrue(isinstance(self.api.first_name, (str, type(None)))) - self.assertTrue(isinstance(self.api.last_name, (str, type(None)))) + assert isinstance(self.api.token, str) + assert isinstance(self.api.token_expiration, datetime.datetime) + assert isinstance(self.api.token_journalist_uuid, str) + assert isinstance(self.api.first_name, (str, type(None))) + assert isinstance(self.api.last_name, (str, type(None))) # ---------------- SOURCES ---------------- @@ -30,24 +30,24 @@ def delete_source(self, from_string=False): s = self.api.get_sources()[0] if from_string: - self.assertTrue(self.api.delete_source_from_string(s.uuid)) + assert self.api.delete_source_from_string(s.uuid) else: - self.assertTrue(self.api.delete_source(s)) + assert self.api.delete_source(s) # Now there should be one less source sources = self.api.get_sources() - self.assertEqual(len(sources), number_of_sources_before - 1) + assert len(sources) == number_of_sources_before - 1 def failed_single_source(self): - with self.assertRaises(WrongUUIDError): + with pytest.raises(WrongUUIDError): self.api.get_source(Source(uuid="not there")) def flag_source(self): s = self.api.get_sources()[0] - self.assertTrue(self.api.flag_source(s)) + assert self.api.flag_source(s) # Now we will try to get the same source again s2 = self.api.get_source(s) - self.assertTrue(s2.is_flagged) + assert s2.is_flagged def get_single_source(self, from_string=False): s = self.api.get_sources()[0] @@ -58,8 +58,8 @@ def get_single_source(self, from_string=False): else: s2 = self.api.get_source(s) - self.assertEqual(s.journalist_designation, s2.journalist_designation) - self.assertEqual(s.uuid, s2.uuid) + assert s.journalist_designation == s2.journalist_designation + assert s.uuid == s2.uuid def get_sources(self): sources = self.api.get_sources() @@ -79,14 +79,14 @@ def delete_submission(self, from_string=False): subs = self.api.get_submissions(s) else: subs = self.api.get_all_submissions() - self.assertTrue(self.api.delete_submission(subs[0])) + assert self.api.delete_submission(subs[0]) new_subs = self.api.get_all_submissions() # We now should have 1 less submission - self.assertEqual(len(new_subs), number_of_submissions_before - 1) + assert len(new_subs) == number_of_submissions_before - 1 # Let us make sure that sub[0] is not there for s in new_subs: - self.assertNotEqual(s.uuid, subs[0].uuid) + assert s.uuid != subs[0].uuid def get_submission(self, from_string=False): # Get a source with submissions @@ -99,7 +99,7 @@ def get_submission(self, from_string=False): else: sub = self.api.get_submission(subs[0]) - self.assertEqual(sub.filename, subs[0].filename) + assert sub.filename == subs[0].filename def get_all_submissions(self): subs = self.api.get_all_submissions() @@ -115,32 +115,31 @@ def get_submissions(self): def get_wrong_submissions(self): s = self.api.get_sources()[0] s.uuid = "rofl-missing" - with self.assertRaises(WrongUUIDError): + with pytest.raises(WrongUUIDError): self.api.get_submissions(s) # ---------------- REPLIES ---------------- def error_unencrypted_reply(self): s = self.api.get_sources()[0] - with self.assertRaises(ReplyError) as err: + with pytest.raises(ReplyError) as err: self.api.reply_source(s, "hello") - - self.assertEqual(err.exception.msg, "bad request") + assert err.exception.msg == "bad request" def delete_reply(self): r = self.api.get_all_replies()[0] number_of_replies_before = len(self.api.get_all_replies()) - self.assertTrue(self.api.delete_reply(r)) + assert self.api.delete_reply(r) # We deleted one, so there must be 1 less reply now - self.assertEqual(len(self.api.get_all_replies()), number_of_replies_before - 1) + assert len(self.api.get_all_replies()) == number_of_replies_before - 1 def get_replies_from_source(self): s = self.api.get_sources()[0] replies = self.api.get_replies_from_source(s) - self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE) + assert len(replies) == NUM_REPLIES_PER_SOURCE def get_reply_from_source(self): s = self.api.get_sources()[0] @@ -149,15 +148,15 @@ def get_reply_from_source(self): r = self.api.get_reply_from_source(s, reply.uuid) - self.assertEqual(reply.filename, r.filename) - self.assertEqual(reply.size, r.size) - self.assertEqual(reply.reply_url, r.reply_url) - self.assertEqual(reply.journalist_username, r.journalist_username) + assert reply.filename == r.filename + assert reply.size == r.size + assert reply.reply_url == r.reply_url + assert reply.journalist_username == r.journalist_username def get_all_replies(self): num_sources = len(self.api.get_sources()) replies = self.api.get_all_replies() - self.assertEqual(len(replies), NUM_REPLIES_PER_SOURCE * num_sources) + assert len(replies) == NUM_REPLIES_PER_SOURCE * num_sources def reply_source(self): s = self.api.get_sources()[0] @@ -184,10 +183,10 @@ def reply_source_with_uuid(self): def get_current_user(self): user = self.api.get_current_user() - self.assertTrue(user["is_admin"]) - self.assertEqual(user["username"], "journalist") - self.assertTrue("first_name" in user) - self.assertTrue("last_name" in user) + assert user["is_admin"] + assert user["username"] == "journalist" + assert "first_name" in user + assert "last_name" in user def get_users(self): users = self.api.get_users() @@ -221,16 +220,14 @@ def seen(self): for reply in replies: reply_uuids.append(reply.uuid) - self.assertTrue( - self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) - ) + assert self.api.seen(files=file_uuids, messages=message_uuids, replies=reply_uuids) # ---------------- STARRING ---------------- def star_add_remove(self): s = self.api.get_sources()[0] - self.assertTrue(self.api.add_star(s)) - self.assertTrue(self.api.remove_star(s)) + assert self.api.add_star(s) + assert self.api.remove_star(s) for source in self.api.get_sources(): if source.uuid == s.uuid: - self.assertFalse(source.is_starred) + assert not source.is_starred diff --git a/tests/utils.py b/tests/utils.py index 0725abee3..8e803c568 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -84,7 +84,7 @@ def internal_sideeffect(*args, **kwargs): def dastollervey_datasaver(func): "This is the decorator to save qrexec call data" - def wrapper(*args, **kwargs): + def wrapper(self, *args, **kwargs): global CALLNUMBER global RES # This is the filename to store the results @@ -93,7 +93,7 @@ def wrapper(*args, **kwargs): # so, we should do a real login call if os.path.exists("logout.txt") and func.__name__ == "setUp": if not os.path.exists(filename): - return func(*args, **kwargs) + return func(self, *args, **kwargs) if os.path.exists(filename): with open(filename) as fobj: @@ -101,7 +101,7 @@ def wrapper(*args, **kwargs): mock = MagicMock() mock.side_effect = internal_sideeffect with patch("sdclientapi.json_query", mock): - result = func(*args, **kwargs) + result = func(self, *args, **kwargs) if not os.path.exists(filename): with open(filename, "w") as fobj: From 9f3a1f058efc8cd118352a41481dbfa8053aab4a Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Tue, 1 Dec 2020 16:57:04 -0800 Subject: [PATCH 413/751] Update cassettes, including naming of setup method --- data/setup_method.json | 1 + data/test-badotp.yml | 2 +- data/test-badpassword.yml | 4 +- data/test-baduser.yml | 4 +- data/test-delete-reply.yml | 428 +++++++------ data/test-delete-source.yml | 448 +++++++------- data/test-delete-submission-from-string.yml | 572 ++++++++--------- data/test-delete-submission.yml | 640 +++++++++++--------- data/test-download-reply.yml | 189 +++--- data/test-download-submission.yml | 293 +++++---- data/test-error-unencrypted-reply.yml | 151 +++-- data/test-failed-single-source.yml | 4 +- data/test-flag-source.yml | 191 +++--- data/test-get-all-replies.yml | 288 +++++---- data/test-get-all-submissions.yml | 230 ++++--- data/test-get-current-user.yml | 12 +- data/test-get-replies-from-source.yml | 180 +++--- data/test-get-reply-from-source.yml | 200 +++--- data/test-get-single-source.yml | 189 +++--- data/test-get-sources.yml | 147 +++-- data/test-get-submission.yml | 341 +++++++---- data/test-get-submissions.yml | 195 +++--- data/test-get-users.yml | 14 +- data/test-get-wrong-submissions.yml | 151 +++-- data/test-logout.yml | 4 +- data/test-reply-source-with-uuid.yml | 155 ++--- data/test-reply-source.yml | 157 ++--- data/test-seen.yml | 390 ++++++------ data/test-setup.yml | 12 +- data/test-star-add-remove.yml | 306 +++++----- data/test_api_auth.json | 1 + 31 files changed, 3207 insertions(+), 2692 deletions(-) create mode 100644 data/setup_method.json create mode 100644 data/test_api_auth.json diff --git a/data/setup_method.json b/data/setup_method.json new file mode 100644 index 000000000..b53d34e6f --- /dev/null +++ b/data/setup_method.json @@ -0,0 +1 @@ +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file diff --git a/data/test-badotp.yml b/data/test-badotp.yml index d57d7ba07..32831828b 100644 --- a/data/test-badotp.yml +++ b/data/test-badotp.yml @@ -25,7 +25,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:55 GMT + - Wed, 02 Dec 2020 00:56:36 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-badpassword.yml b/data/test-badpassword.yml index 91e98edea..a0db919b6 100644 --- a/data/test-badpassword.yml +++ b/data/test-badpassword.yml @@ -1,6 +1,6 @@ interactions: - request: - body: '{"username": "journalist", "passphrase": "no", "one_time_code": "877484"}' + body: '{"username": "journalist", "passphrase": "no", "one_time_code": "436824"}' headers: Accept: - '*/*' @@ -24,7 +24,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:55 GMT + - Wed, 02 Dec 2020 00:56:36 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-baduser.yml b/data/test-baduser.yml index a8c0c0460..695b62f63 100644 --- a/data/test-baduser.yml +++ b/data/test-baduser.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "no", "passphrase": "correct horse battery staple profanity - oil chewy", "one_time_code": "877484"}' + oil chewy", "one_time_code": "436824"}' headers: Accept: - '*/*' @@ -25,7 +25,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:55 GMT + - Wed, 02 Dec 2020 00:56:36 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index 85be9c516..c2f59a5fb 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,88 +18,82 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-unalike_plaint-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-port_regularization-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\ - , \n \"seen_by\": [], \n \"size\": 765, \n \"source_url\":\ - \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ - : \"5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\n }, \n {\n \"filename\"\ - : \"6-unalike_plaint-reply.gpg\", \n \"is_deleted_by_source\": false,\ - \ \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\ - , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ - \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ - : \"ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\n }, \n {\n \"filename\"\ - : \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ - \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ - \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ - \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ - \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ - \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ - \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ + : null, \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ + \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ + \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ + \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ + \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ + \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ + \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ + \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6169' + - '5503' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:55 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -113,7 +107,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -124,88 +118,82 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-unalike_plaint-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-port_regularization-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\ - , \n \"seen_by\": [], \n \"size\": 765, \n \"source_url\":\ - \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ - : \"5c03a992-c3ed-4b6c-9e14-1f94e94f20d8\"\n }, \n {\n \"filename\"\ - : \"6-unalike_plaint-reply.gpg\", \n \"is_deleted_by_source\": false,\ - \ \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\ - , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ - \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ - : \"ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\n }, \n {\n \"filename\"\ - : \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ - \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ - \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ - \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ - \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ - \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ - \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ + : null, \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ + \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ + \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ + \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ + \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ + \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ + \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ + \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6169' + - '5503' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:55 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -219,7 +207,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -229,7 +217,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/5c03a992-c3ed-4b6c-9e14-1f94e94f20d8 + uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7 response: body: string: "{\n \"message\": \"Reply deleted\"\n}\n" @@ -239,7 +227,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:55 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -253,7 +241,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -264,81 +252,73 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"6-unalike_plaint-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"6-port_regularization-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies/ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\ - , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ - \ \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\", \n \"uuid\"\ - : \"ba0b40ca-38f0-4de2-b93d-d2e6e6641a49\"\n }, \n {\n \"filename\"\ - : \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ - \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ - \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ - \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ - \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ - \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ - \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ + : null, \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ + \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ + \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ + \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ + \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ + \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ + \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ }\n" headers: Content-Length: - - '5626' + - '4817' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:56 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index 07f432649..a525b77dd 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,99 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"unalike plaint\"\ - , \n \"key\": {\n \"fingerprint\": \"D62E44143E57136D1CBFC42544E687CF2A62D43C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAK+OY8V1Vw/twyYrmBXGkV+FLpYD8Gp2NmlfW6MVzgxeY9lNleMw\\\ - nRM65oOWCHpiLh4ZI+qS4h/tyJ95JK+q9FEl9hKqgZwWYHlQkTBq6mkx4m0taz45j\\n19rbuYhGp9XCdaDg0Oa5+q1hPNbD6QbrzdYBzHjjKXqYxbrBLrXyO9ZZABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEg3WTVRS0JBUExSV0hCR1FWT0tQSkVSRlFTU0ROVkYzVktY\\nTEQ3REtIVUdBQUFLVktYWFNSWVZaSVA3REJKQVlCWFhFTVlKQTJFSkhRNFJRVEVJ\\\ - nRkRLMkhIUUtFNTJIN0NKSFpQNlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEETmh88qYtQ8uwUD/AydTjc6MOQVv6NOiRcATc6s\\\ - nzkxVwaDxQDhsu5viy8yCS61MiaxfqfFFYvE8DZ+0sLP/S8noF4jrzUIL7uAZQ81o\\n5FR/4CmzC+tBHOqtBGQIok52HRjbQgzR6JWWLfZ3DDf1Cwm3ZrfFD5/8ylSA3AsM\\\ - n2AuWKAruHtDgaDbVq5Ck\\n=HiGI\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.163035Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ + , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/submissions\"\ - , \n \"url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\ - , \n \"uuid\": \"51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8001' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:56 GMT + - Wed, 02 Dec 2020 00:56:41 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -124,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -135,99 +135,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"unalike plaint\"\ - , \n \"key\": {\n \"fingerprint\": \"D62E44143E57136D1CBFC42544E687CF2A62D43C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAK+OY8V1Vw/twyYrmBXGkV+FLpYD8Gp2NmlfW6MVzgxeY9lNleMw\\\ - nRM65oOWCHpiLh4ZI+qS4h/tyJ95JK+q9FEl9hKqgZwWYHlQkTBq6mkx4m0taz45j\\n19rbuYhGp9XCdaDg0Oa5+q1hPNbD6QbrzdYBzHjjKXqYxbrBLrXyO9ZZABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEg3WTVRS0JBUExSV0hCR1FWT0tQSkVSRlFTU0ROVkYzVktY\\nTEQ3REtIVUdBQUFLVktYWFNSWVZaSVA3REJKQVlCWFhFTVlKQTJFSkhRNFJRVEVJ\\\ - nRkRLMkhIUUtFNTJIN0NKSFpQNlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEETmh88qYtQ8uwUD/AydTjc6MOQVv6NOiRcATc6s\\\ - nzkxVwaDxQDhsu5viy8yCS61MiaxfqfFFYvE8DZ+0sLP/S8noF4jrzUIL7uAZQ81o\\n5FR/4CmzC+tBHOqtBGQIok52HRjbQgzR6JWWLfZ3DDf1Cwm3ZrfFD5/8ylSA3AsM\\\ - n2AuWKAruHtDgaDbVq5Ck\\n=HiGI\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.163035Z\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ + , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e/submissions\"\ - , \n \"url\": \"/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\ - , \n \"uuid\": \"51c5b319-fd2d-4a1e-b5eb-412fbf460f0e\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8001' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:56 GMT + - Wed, 02 Dec 2020 00:56:41 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -241,7 +241,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -251,7 +251,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/51c5b319-fd2d-4a1e-b5eb-412fbf460f0e + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 response: body: string: "{\n \"message\": \"Source and submissions deleted\"\n}\n" @@ -261,7 +261,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:56 GMT + - Wed, 02 Dec 2020 00:56:41 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -275,7 +275,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -286,82 +286,82 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6408' + - '6410' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:56 GMT + - Wed, 02 Dec 2020 00:56:41 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index e24229ce2..f521a58cc 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,105 +18,119 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ - , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ - , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8753' + - '9562' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -130,7 +144,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -141,82 +155,82 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 1, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 1, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6408' + - '6410' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -230,7 +244,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -238,36 +252,38 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions + uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ - , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ - , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1783' + - '1936' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -281,7 +297,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -291,7 +307,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c + uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb response: body: string: "{\n \"message\": \"Submission deleted\"\n}\n" @@ -301,7 +317,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -315,7 +331,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -326,98 +342,112 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8165' + - '8927' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index 2dc114db4..d21312b83 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,112 +18,126 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b/download\"\ - , \n \"filename\": \"1-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b\"\ - , \n \"uuid\": \"a7e3339c-f5d2-400b-a64e-046d6e40288b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ - , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ - , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ + , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ + , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '9341' + - '10197' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -137,7 +151,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -148,112 +162,126 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b/download\"\ - , \n \"filename\": \"1-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b\"\ - , \n \"uuid\": \"a7e3339c-f5d2-400b-a64e-046d6e40288b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ - , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ - , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ + , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ + , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '9341' + - '10197' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -267,7 +295,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -277,7 +305,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/a7e3339c-f5d2-400b-a64e-046d6e40288b + uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192 response: body: string: "{\n \"message\": \"Submission deleted\"\n}\n" @@ -287,7 +315,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -301,7 +329,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -312,105 +340,119 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c/download\"\ - , \n \"filename\": \"2-subsonic_discoloration-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 623, \n \"source_url\":\ - \ \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n \"submission_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/d22a7539-3f9c-441a-83d0-3f3807289a4c\"\ - , \n \"uuid\": \"d22a7539-3f9c-441a-83d0-3f3807289a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8753' + - '9562' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:42 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index d570aba06..d2532718f 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,74 +18,97 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ - \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ + \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ - \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ - \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ - \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ - \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ - \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }, \n \ + \ {\n \"filename\": \"5-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ + \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ + \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ + \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ + \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ + \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ + \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ + \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ }\n" headers: Content-Length: - - '5083' + - '6705' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -99,7 +122,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -107,41 +130,41 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29/download + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93/download response: body: string: !!binary | - hIwDUKWHpE2qfMMBBAChlQuL+PxmtcunD5Q+fQG0mceGCqmT4kGmbmUIVO0rSwfEy1vN34Vg2kEJ - x3AutNf2zdbiM2pTsa8iffLNNPYkpLVfd+ktIqy9napV/RHIpcvVTEd4Arz6Llx1xzF3WQjGL7ZZ - EzyrDBmlOAdXkOwuFxRNLPdSKpI4/RnGYHq/zYUCDAPD58TAoiAbKgEP/Ax4ETQ2hCiUNbGmhs9q - Y4DUHwVrtbP7bz6nLkUqQqy76xLKoYIHtO1liUAe9V/EW8BQYaKt97A/9I9IA7xnF0nJWcAH9FO7 - NGLdOYsy1+ZKyC5NSPRSmZ+eIzNLt3WdCEfX5lEEMZdnW6HDczOOED6mmyqKqbT1m7bBpISlH6sw - 52MDWTIqN7BK15XiLgE4DZIaSWWDaEmEfO16CgCMWv7tVKR3gyeWoTYYVym7tFQTT33Zzp7tMl3N - oCkgYVqndMxPIb3jZroCr5xNdG9wvHT0sFYRmVCk9TE4bhOfjzB6YTdrIoEKzuRAcurVsWRoGPgf - Q1ZnePMIAAm53y/DcMK7T379hI4AOexn2BzpbZFrnLPqtxzMLniLGR7tMR6iA97RuGVLxrbqV5YA - u6Xi/C0B+q+H59eDnBpjt+68aGkwP2cDDU72yoh+azuY8SubxA34SvaJAgcJ55CFTLt9cm7OnvVj - A17bPYkn+N/yxm0bVL2D7Ta0Q+wlU0HZMpc4ihGsY3yi+GCVsBjtr5MvVMeD4l0iVJy5YVMLwZ4l - Nvn0mTjUucqs0mXmdIa9BEry7fw7jVkF8aWCTWFMZwgYQKsRO690/549qYPOwvM8e+GCmEhvfYU0 - EFSJMpWI2+COh/8DqQuhoB1PjTXNNxAtbkD/wOabXVhR8HJoyZvuu8ST0lIBJLwESKkTULweBIxD - Zx2szqgnmxGsXX95iIdbyvmLaqktTrVPwqya/+hgwFjFBYmIe0adfsFvzHcMXWnEX9lQrdGurWax - etrYtRxujWR80D7S + hIwDKAH55Hy3CBwBA/9zrq+dIiiVpBy6FAc83Rt8WL521V2dgbrs+eLvriN0SjNUk4QkmR/eJHUi + 7PmIJ2RvGnN1hx36zTp7GtiCgyF5ir84Apw1jB8OTQQ9GDryLPxBbEfE1kwgZPZT+DXkpSSHb3BY + N5q7/ndShEVhuiSyCpo/vDtJos9E83y4uqmEYoUCDAPD58TAoiAbKgEP/3GAHVvAHFmgOcmx3vgG + boCnzQelBb/GgVJT5C7N2Xx3DWt6wIrE7wrm57jBZMvA1B2SoSd7gjbuUutx/41RblHfaWJUwDn2 + mA5NF34QJJy3yJfW2GHbDg4apLwkb76E+oYRXfnfAorj/0pT8luqJz5nttsk/8TRss+2JIDqnvRk + w2kD7dAvwUq9e6hJLca4ziujf51eAsDDKms4YW0YKVWte9ZtWg/nnTaQX52OuLTfBIG77I/FoRiG + hsxUqOEYnz8Lx5Tmy3VV669OyFKUBYMlUuEW06rNsVuuMNsOHU5NqT6nV6UFkzLS7LIml0ky+pmX + xAjV0KSreMkfOxsbRGYeVZkGviqP/+2CDLek+UF1dRt1C9cA+6oE6Z3kRgcLs3G1mktIThDOBMFZ + 4ZgpljP9Y+jam2TeHr9U8FvAi3qO/WPq8GzioyQ5yDVZKo7QCVnoq3nrM+rDASEC9bV5jaxswd7X + kSWZfTceNBH5iUI+ovcO67IAmnVH1iZZam2KA/sldc70l9Q21Cn4OfyI3HPICHlLEs6njv+5yuMn + trOvMtE3z97AmhCmUbclKsGwy8+IJST5FHQAVa9v7/0dcRWisFh/4UFWXMY1ECkeQsVeMvWu/C1A + PyCQVIhuOy2LlW3BYdvPQyFVojxomaq5WnjfkJ1AYbkf/gFRiNkOEYOL0l4Be1yTuZ6oWkKpiPcc + 5OFp+qf8lu/AS3Pbhget5QiKaYHFqTPQC/5TDcMEf3f6/ChBABr+bVxFa+AgOzqn3ydPD7eysnna + ooGybB/AWB8qiJLIqDvwPVVzC5WNpJfl headers: Cache-Control: - - public, max-age=43200 + - max-age=43200, public Content-Disposition: - - attachment; filename=5-subsonic_discoloration-reply.gpg + - attachment; filename=5-relocated_backbone-reply.gpg Content-Length: - - '753' + - '765' Content-Type: - application/pgp-encrypted Date: - - Wed, 14 Oct 2020 22:59:57 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Etag: - - sha256:62d79adff5b183ee872ed2ecbb06167f487b72fd66ae3a2f3ae8e1535296bccf + - sha256:eb96cb4f9c0b1ef7feddc00ce29666f060de0142734c1a9fd85b7bb51b81ff8d Expires: - - Thu, 15 Oct 2020 10:59:57 GMT + - Wed, 02 Dec 2020 12:56:40 GMT Last-Modified: - - Wed, 14 Oct 2020 22:59:06 GMT + - Wed, 02 Dec 2020 00:56:17 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index f8ec163ef..204750411 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,145 +18,144 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e/download\"\ - , \n \"filename\": \"1-darkening_deserter-msg.gpg\", \n \"is_file\"\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ - , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\ - , \n \"uuid\": \"1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/e05ea85e-1e50-4591-a3c8-d6d65fcbca65/download\"\ - , \n \"filename\": \"2-darkening_deserter-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ + , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ - , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/e05ea85e-1e50-4591-a3c8-d6d65fcbca65\"\ - , \n \"uuid\": \"e05ea85e-1e50-4591-a3c8-d6d65fcbca65\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/7b06b91f-1e39-48c0-9b6f-600d175aa098/download\"\ - , \n \"filename\": \"3-darkening_deserter-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ + , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ + , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ - , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/7b06b91f-1e39-48c0-9b6f-600d175aa098\"\ - , \n \"uuid\": \"7b06b91f-1e39-48c0-9b6f-600d175aa098\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/f9aed593-9576-4738-9157-a21e04f69dbe/download\"\ - , \n \"filename\": \"4-darkening_deserter-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ + , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ + , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ - , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/f9aed593-9576-4738-9157-a21e04f69dbe\"\ - , \n \"uuid\": \"f9aed593-9576-4738-9157-a21e04f69dbe\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/eb0007a4-5ccd-4198-9869-8b60cb759d82/download\"\ - , \n \"filename\": \"1-conjunctive_simulacrum-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ + , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ + , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ - , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/eb0007a4-5ccd-4198-9869-8b60cb759d82\"\ - , \n \"uuid\": \"eb0007a4-5ccd-4198-9869-8b60cb759d82\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/840f3bd1-177d-4a28-a40e-0627bc2073da/download\"\ - , \n \"filename\": \"2-conjunctive_simulacrum-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ + , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 757, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ - , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/840f3bd1-177d-4a28-a40e-0627bc2073da\"\ - , \n \"uuid\": \"840f3bd1-177d-4a28-a40e-0627bc2073da\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/df033ddf-f2a6-4d6f-8137-6bafa21b513e/download\"\ - , \n \"filename\": \"3-conjunctive_simulacrum-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ - , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/df033ddf-f2a6-4d6f-8137-6bafa21b513e\"\ - , \n \"uuid\": \"df033ddf-f2a6-4d6f-8137-6bafa21b513e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/a50d596f-de4b-44ba-bf12-dd312b567a26/download\"\ - , \n \"filename\": \"4-conjunctive_simulacrum-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a\"\ - , \n \"submission_url\": \"/api/v1/sources/b944326b-db1c-4f14-93c8-3dcb66dbe48a/submissions/a50d596f-de4b-44ba-bf12-dd312b567a26\"\ - , \n \"uuid\": \"a50d596f-de4b-44ba-bf12-dd312b567a26\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/a08bf726-1054-421a-84e5-04a7faf2600f/download\"\ - , \n \"filename\": \"1-dark-colored_frailty-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\"\ - , \n \"submission_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/a08bf726-1054-421a-84e5-04a7faf2600f\"\ - , \n \"uuid\": \"a08bf726-1054-421a-84e5-04a7faf2600f\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/c24c5ff1-b604-433d-8f87-7bd18213f9b1/download\"\ - , \n \"filename\": \"2-dark-colored_frailty-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\"\ - , \n \"submission_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/c24c5ff1-b604-433d-8f87-7bd18213f9b1\"\ - , \n \"uuid\": \"c24c5ff1-b604-433d-8f87-7bd18213f9b1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/7790f0d1-9eec-4e4a-803c-04c97b9aafab/download\"\ - , \n \"filename\": \"3-dark-colored_frailty-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\"\ - , \n \"submission_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/7790f0d1-9eec-4e4a-803c-04c97b9aafab\"\ - , \n \"uuid\": \"7790f0d1-9eec-4e4a-803c-04c97b9aafab\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/77e4018c-db24-4dcc-8503-70de725492b5/download\"\ - , \n \"filename\": \"4-dark-colored_frailty-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": false,\ - \ \n \"seen_by\": [], \n \"size\": 661, \n \"source_url\":\ - \ \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a\", \n \"submission_url\"\ - : \"/api/v1/sources/bbf86e80-7e21-4e70-bbcb-0c220b5f465a/submissions/77e4018c-db24-4dcc-8503-70de725492b5\"\ - , \n \"uuid\": \"77e4018c-db24-4dcc-8503-70de725492b5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/3306be34-50b0-48ad-8874-06b968eec167/download\"\ - , \n \"filename\": \"1-judicial_alertness-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": false, \n \ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ - , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/3306be34-50b0-48ad-8874-06b968eec167\"\ - , \n \"uuid\": \"3306be34-50b0-48ad-8874-06b968eec167\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/00b09a27-a7ae-4e83-b99d-366280baf5fe/download\"\ - , \n \"filename\": \"2-judicial_alertness-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ - , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/00b09a27-a7ae-4e83-b99d-366280baf5fe\"\ - , \n \"uuid\": \"00b09a27-a7ae-4e83-b99d-366280baf5fe\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/af80e8f8-b458-4ea1-bec9-0814722b8db3/download\"\ - , \n \"filename\": \"3-judicial_alertness-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ - , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/af80e8f8-b458-4ea1-bec9-0814722b8db3\"\ - , \n \"uuid\": \"af80e8f8-b458-4ea1-bec9-0814722b8db3\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/897f47b6-462f-479e-98df-bf91906d810d/download\"\ - , \n \"filename\": \"4-judicial_alertness-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12\"\ - , \n \"submission_url\": \"/api/v1/sources/8ab2d024-b0ac-4b92-ad40-e5654be10c12/submissions/897f47b6-462f-479e-98df-bf91906d810d\"\ - , \n \"uuid\": \"897f47b6-462f-479e-98df-bf91906d810d\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/c8db2bab-b362-4c3f-8894-faeb6e01f471/download\"\ - , \n \"filename\": \"1-interim_oddity-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ - , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/c8db2bab-b362-4c3f-8894-faeb6e01f471\"\ - , \n \"uuid\": \"c8db2bab-b362-4c3f-8894-faeb6e01f471\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/3d8a9b76-987e-4322-b359-db1df7b5a16c/download\"\ - , \n \"filename\": \"2-interim_oddity-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ - , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/3d8a9b76-987e-4322-b359-db1df7b5a16c\"\ - , \n \"uuid\": \"3d8a9b76-987e-4322-b359-db1df7b5a16c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/41f43938-e8a3-4cd5-88c1-b2a6cb410a97/download\"\ - , \n \"filename\": \"3-interim_oddity-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ - , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/41f43938-e8a3-4cd5-88c1-b2a6cb410a97\"\ - , \n \"uuid\": \"41f43938-e8a3-4cd5-88c1-b2a6cb410a97\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/d8ab9bd8-644d-47ac-b8a3-fd80235cc4f5/download\"\ - , \n \"filename\": \"4-interim_oddity-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"769af71c-61b7-493e-b063-3594530a28b6\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21\"\ - , \n \"submission_url\": \"/api/v1/sources/68ba7b11-23f9-4f01-b16b-9e71af379e21/submissions/d8ab9bd8-644d-47ac-b8a3-fd80235cc4f5\"\ - , \n \"uuid\": \"d8ab9bd8-644d-47ac-b8a3-fd80235cc4f5\"\n }\n ]\n\ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '12213' + - '12209' Content-Type: - application/json Date: - - Wed, 21 Oct 2020 19:22:09 GMT + - Wed, 02 Dec 2020 00:56:37 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -170,7 +169,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -178,38 +177,38 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e/download + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqAQ/+Njq9PBg013NM1bzkXRpqkpCS1FJNfcwPruhBqCCvu86+hduZuK8c/cgW - FriywEmHAKvuNld+HPl+Q5wTr5sMdmBXQgQuAJzyOCD5wSevksvlrlfxuZY/uG3eCaAM/JJDYfPq - WWhw1Wd1rjsTONPivNsR7/VyzInXamoJ3NMOBA9nCeiwZMonwEH6nqf2z/q1cWyXeEEMpelGIaI4 - 6aF/dI+2o+L1NzpaLUuokm4aD2hm43t/pOlcgdT0mVf4z9/GTABTwEe2alvxmUY6oM85XKxT/oOj - KJBN728BjfyjhV8kK9UzJfFXf6gz3BdGJlMqdb6putPw/hXtkTBrvasVKiJxehzOMl2KlsNJ5cR3 - 98CE0VKf1ryWyUrEkC3auV5jN2TvTWhWtzVp6/O9V3R9iXvBtiQKzPt6cFu20w/4303eShSPKSY4 - R54Q87Fl5+Vu3AKFL5YdQ7FElsLycYCSR2OFRZjnqqj5tADoE+86jus8T3EgqyCXVl7gPhLY0AAx - DQidHMOs5QD4Pd1EsZsUuPo2q/u5BuT57V/0EYCWECa2MimGOhhgZpkHBlM05Lnxmv0kfEHJyW2k - jCx4w7brBTgYBQJ00WFDYXZZT8GIgH618uVss6RTRMQ2MnRSE2pwhe3LyPeZc9tkNOqpc3QxlHzx - 63HPhTFeWFPjPGfDtXrSXgEhc630Pxe204UhUMFEIn+3XI9Rd5XPtwmXa41ivQtRs/oqoXyA5wwQ - juY7iyFY6T0LTHlP8Rk5DEV/PCx5FoZH4bTVx8MZVQXKSFAjW9ePcVjyYxmXKQtvx/1/eNE= + hQIMA8PnxMCiIBsqARAAhKtMUfraQHm9OIrAY9Tjw7ocA4JWqtUi6JD+/r1fGS+KvF8H1QoAA4/H + 09KBJ8U1RZBRo4veAR1VU7qwZcJf9kNNRRJeqR01izu8+VbAkaZG2NqmHM2NwlqKTmHUOmSt/Klg + dxTGKDeIA58Jkc5svm/r1fms8UTTz/WIdIYZvU1NDl4TUyKVbNvejnqm/tIdhpuX/Lj9UWugk5DS + 63WjseAco5LJJkLy0fG3wXkoYnVPi6WATHybdpCvx3mSsWZ/xbzrnq+3sV8+LcYpEFMh0V9HVahb + pEmqy5axCbRTmPYFRDUGsM/tQvwa6xtcK/ZSolcBLFwvlKVsUBtfIrwxEFw7MvylgwU1fF2aHlfq + PLY66FOSazOTPPLzoxTpzj5Jf0Sll1QYZLBVxBiS/JKtUQol19MUVh58SBhPfzPzM9dRJfRH8ynW + ea7B/uiwqyy9NZRQfExIHE5VBMuh3/Gn0O1wPLA53IaLfURwh578EVN8FGSdEvCGzccglEWKlxLH + kMErXJ43Qjpcx4AMjIr0zCiISsYcUjfJWpmhtpHwJ/mbnN4/5D9CKtKokz5AL65YRlvZ+R2qqO5x + Y/yjnVHpXvCw1cLVUwQbsu/wzcpVuok6mtvJlCd5cZNwcH7TE5dVZoZWSKjhLBfarWikMedkAs4y + UJZjzmLiY39qEGq9ltnSXgHY2qivVXKFel923bIooen8d3jBd34Wb82qVP2gD2tA/7U55iTulq3S + Eob8asRoiMElTZUJBKKPKV0cPkHpykAfa8GBIMpHQ4pD4x/kPVHcpbsbQxAS6UBUZQF2+WQ= headers: Cache-Control: - - public, max-age=43200 + - max-age=43200, public Content-Disposition: - - attachment; filename=1-darkening_deserter-msg.gpg + - attachment; filename=1-relocated_backbone-msg.gpg Content-Length: - '623' Content-Type: - application/pgp-encrypted Date: - - Wed, 21 Oct 2020 19:22:09 GMT + - Wed, 02 Dec 2020 00:56:37 GMT Etag: - - sha256:1334326462914e522e2c9c9a95c6c3586be3abd3b1257c41ca2d73a29168bc19 + - sha256:a468cf4b184d35c9f56966f567d43bc4ccc77d719f3e8e2bcc1da95442217e2b Expires: - - Thu, 22 Oct 2020 07:22:09 GMT + - Wed, 02 Dec 2020 12:56:37 GMT Last-Modified: - - Wed, 21 Oct 2020 19:22:03 GMT + - Wed, 02 Dec 2020 00:56:17 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -223,7 +222,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -231,22 +230,22 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025 response: body: - string: "{\n \"download_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e/download\"\ - , \n \"filename\": \"1-darkening_deserter-msg.gpg\", \n \"is_file\": false,\ + string: "{\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\": false,\ \ \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": [], \n\ - \ \"size\": 623, \n \"source_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8\"\ - , \n \"submission_url\": \"/api/v1/sources/3241767d-b67c-40df-80b5-dcea1e6542c8/submissions/1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\ - , \n \"uuid\": \"1cf4b508-35f7-45a5-b3e6-b4d2ed89202e\"\n}\n" + \ \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n}\n" headers: Content-Length: - '531' Content-Type: - application/json Date: - - Wed, 21 Oct 2020 19:22:09 GMT + - Wed, 02 Dec 2020 00:56:37 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index b7e285205..6efc2d354 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6408' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -117,7 +134,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies response: body: string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n" @@ -127,7 +144,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index 695015603..6a0908682 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -27,7 +27,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index 1988f282b..f1e4f09e9 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6408' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -117,7 +134,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/flag + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/flag response: body: string: "{\n \"message\": \"Source flagged for reply\"\n}\n" @@ -127,7 +144,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -141,7 +158,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -149,33 +166,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9 + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"subsonic discoloration\", \n \"\ - key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n\ - \ \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n}\n" + : false, \n \"journalist_designation\": \"relocated backbone\", \n \"key\"\ + : {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\", \n\ + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ + \ \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n}\n" headers: Content-Length: - - '1518' + - '1514' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index 20a016109..5c10b6842 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -118,74 +135,97 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ - \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ - \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ - \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ - \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ - \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ - \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ + \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }\n ]\n\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }, \n \ + \ {\n \"filename\": \"5-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ + \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ + \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ + \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ + \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ + \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ + \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ + \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ }\n" headers: Content-Length: - - '5083' + - '6705' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 62788d2e0..07f07ec9b 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,98 +18,154 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ + , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ + , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ + , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ + , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ + , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ + , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ + , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ + , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8165' + - '12739' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index 891ff6c31..a8c720b96 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,17 +18,17 @@ interactions: uri: http://127.0.0.1:8081/api/v1/user response: body: - string: "{\n \"first_name\": \"\", \n \"is_admin\": true, \n \"last_login\"\ - : \"2020-10-14T22:59:55.614299Z\", \n \"last_name\": \"\", \n \"username\"\ - : \"journalist\", \n \"uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\n\ + string: "{\n \"first_name\": null, \n \"is_admin\": true, \n \"last_login\"\ + : \"2020-12-02T00:56:36.660997Z\", \n \"last_name\": null, \n \"username\"\ + : \"journalist\", \n \"uuid\": \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n\ }\n" headers: Content-Length: - - '192' + - '196' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index 16ba67646..d17bee1bb 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -115,33 +132,32 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }\n ]\n\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ + \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1295' + - '1223' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index de378f9eb..e7e31990f 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -115,33 +132,32 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }\n ]\n\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ + \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1295' + - '1223' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -155,7 +171,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -163,23 +179,23 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29 + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93 response: body: - string: "{\n \"filename\": \"5-subsonic_discoloration-reply.gpg\", \n \"is_deleted_by_source\"\ + string: "{\n \"filename\": \"5-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\n ], \n\ - \ \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n}\n" + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n ], \n\ + \ \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n}\n" headers: Content-Length: - - '575' + - '539' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 6fb66b5fd..66c6a41ed 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -115,33 +132,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9 + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"subsonic discoloration\", \n \"\ - key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n\ - \ \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"relocated backbone\", \n \"key\"\ + : {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\", \n\ + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ + \ \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n}\n" headers: Content-Length: - - '1518' + - '1515' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index 0387dea4a..aa89d8f1e 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:58 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index 04d37d0a3..c228ece2e 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,98 +18,154 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ + , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ + , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ + , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ + , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ + , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ + , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ + , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ + , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8165' + - '12739' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -123,7 +179,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -131,33 +187,33 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9 + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"subsonic discoloration\", \n \"\ - key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\", \n\ - \ \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\"\ + : false, \n \"journalist_designation\": \"relocated backbone\", \n \"key\"\ + : {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\", \n\ + \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\", \n\ + \ \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ + \ \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n}\n" headers: Content-Length: - - '1518' + - '1515' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -171,7 +227,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -179,29 +235,45 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ + , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ + , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ + , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ + , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ + , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ + , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1195' + - '2567' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -215,7 +287,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -223,22 +295,23 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31 + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025 response: body: - string: "{\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\"\ - : [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n}\n" + string: "{\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\": false,\ + \ \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": [\n \ + \ \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n ], \n \"size\": 623, \n \"\ + source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ + \ \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n}\n" headers: Content-Length: - - '535' + - '576' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index 935a4d68e..e7bbdcea5 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -115,29 +132,45 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }\n ]\n\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ + , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ + , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ + , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ + , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ + , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ + , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }\n ]\n\ }\n" headers: Content-Length: - - '1195' + - '2567' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-users.yml b/data/test-get-users.yml index ddeedb68c..9f5344d02 100644 --- a/data/test-get-users.yml +++ b/data/test-get-users.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,18 +18,18 @@ interactions: uri: http://127.0.0.1:8081/api/v1/users response: body: - string: "{\n \"users\": [\n {\n \"first_name\": \"\", \n \"last_name\"\ - : \"\", \n \"username\": \"journalist\", \n \"uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n }, \n {\n \"first_name\": \"\", \n \"last_name\": \"\"\ - , \n \"username\": \"dellsberg\", \n \"uuid\": \"ec48edc1-778f-4320-8720-ff915969911c\"\ + string: "{\n \"users\": [\n {\n \"first_name\": null, \n \"last_name\"\ + : null, \n \"username\": \"journalist\", \n \"uuid\": \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n }, \n {\n \"first_name\": null, \n \"last_name\": null,\ + \ \n \"username\": \"dellsberg\", \n \"uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ \n }\n ]\n}\n" headers: Content-Length: - - '316' + - '324' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index cc5c19328..ccc295428 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -127,7 +144,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:39 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-logout.yml b/data/test-logout.yml index cf6a5aa13..e397a784a 100644 --- a/data/test-logout.yml +++ b/data/test-logout.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -27,7 +27,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:43 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index c2751645e..77a2fdcce 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 7, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:41 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -108,7 +125,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -118,19 +135,19 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies response: body: - string: "{\n \"filename\": \"8-subsonic_discoloration-reply.gpg\", \n \"message\"\ + string: "{\n \"filename\": \"8-relocated_backbone-reply.gpg\", \n \"message\"\ : \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\ \n}\n" headers: Content-Length: - - '150' + - '146' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:41 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index 29bc16c6c..ce8a6c7d2 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ + , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8006' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -108,7 +125,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -118,19 +135,19 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies response: body: - string: "{\n \"filename\": \"7-subsonic_discoloration-reply.gpg\", \n \"message\"\ - : \"Your reply has been stored\", \n \"uuid\": \"63778a9d-5d28-4467-9479-38473e020f4b\"\ + string: "{\n \"filename\": \"7-relocated_backbone-reply.gpg\", \n \"message\"\ + : \"Your reply has been stored\", \n \"uuid\": \"167cb614-a0e0-42b3-b9fa-be6cd2d2ebbf\"\ \n}\n" headers: Content-Length: - - '150' + - '146' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:40 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-seen.yml b/data/test-seen.yml index c22fab3a4..55290fec7 100644 --- a/data/test-seen.yml +++ b/data/test-seen.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,98 +18,144 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31/download\"\ - , \n \"filename\": \"3-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ + , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/0d1a631e-3010-4d96-9169-5b973e308a31\"\ - , \n \"uuid\": \"0d1a631e-3010-4d96-9169-5b973e308a31\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891/download\"\ - , \n \"filename\": \"4-subsonic_discoloration-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ + , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ + , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 756, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"submission_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions/2d33d119-9a74-41cb-86cb-313d884b6891\"\ - , \n \"uuid\": \"2d33d119-9a74-41cb-86cb-313d884b6891\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0/download\"\ - , \n \"filename\": \"1-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ + , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ + , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\ - , \n \"uuid\": \"1c9f78e7-2f3c-495f-aea1-1cdf5668fda0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc/download\"\ - , \n \"filename\": \"2-adulatory_patty-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ + , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ + , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\ - , \n \"uuid\": \"8e06b833-1ca6-49f7-af4d-c6024c88a9bc\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e/download\"\ - , \n \"filename\": \"3-adulatory_patty-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ + , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ + , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ + , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ + , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ + , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ + , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ + , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ + , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ + , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ + , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ + , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ + , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/194849f8-25e9-4992-9c85-20b1c255764e\"\ - , \n \"uuid\": \"194849f8-25e9-4992-9c85-20b1c255764e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400/download\"\ - , \n \"filename\": \"4-adulatory_patty-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"submission_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions/ff6800fc-b88b-418c-8485-d7f29f7cd400\"\ - , \n \"uuid\": \"ff6800fc-b88b-418c-8485-d7f29f7cd400\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4/download\"\ - , \n \"filename\": \"1-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\ - , \n \"uuid\": \"7adfa4dd-84a8-459b-8975-908c8c6cbec4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259/download\"\ - , \n \"filename\": \"2-totemic_incarnation-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ + , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ + , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ + : true, \n \"is_message\": false, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ + , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ + , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4a3b9999-2146-4a97-bec6-372a9defb259\"\ - , \n \"uuid\": \"4a3b9999-2146-4a97-bec6-372a9defb259\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508/download\"\ - , \n \"filename\": \"3-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ + , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ + , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\ - , \n \"uuid\": \"4058ebd2-f4f6-4ef8-9bf5-3102f004a508\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e/download\"\ - , \n \"filename\": \"4-totemic_incarnation-msg.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ + , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ + , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"submission_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions/c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\ - , \n \"uuid\": \"c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69/download\"\ - , \n \"filename\": \"1-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ + , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ + , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\ - , \n \"uuid\": \"cb2dd23c-0914-4533-ab75-c28b85ef1f69\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6/download\"\ - , \n \"filename\": \"2-charitable_boss-doc.gz.gpg\", \n \"is_file\"\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ + , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ + , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/7e690293-2783-47a8-9a11-c1668c8438e6\"\ - , \n \"uuid\": \"7e690293-2783-47a8-9a11-c1668c8438e6\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1/download\"\ - , \n \"filename\": \"3-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\ - , \n \"uuid\": \"2a4a46b7-d5ba-43d7-808c-986351b8bef1\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6/download\"\ - , \n \"filename\": \"4-charitable_boss-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"submission_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions/3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\ - , \n \"uuid\": \"3ecbffb5-01e8-4176-8ddd-b9b056c517f6\"\n }\n ]\n\ + \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ + , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ + , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ + , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ + , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ + : false, \n \"is_message\": true, \n \"is_read\": true, \n \ + \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ + \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ + , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ + , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ + , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ + \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ + , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ + is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ + \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ + , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ }\n" headers: Content-Length: - - '8165' + - '12209' Content-Type: - application/json Date: - - Thu, 15 Oct 2020 00:05:55 GMT + - Wed, 02 Dec 2020 00:56:37 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -123,7 +169,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -134,119 +180,125 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-subsonic_discoloration-reply.gpg\"\ + string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/d565d3eb-e128-4356-8b07-439b2cae9f29\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"d565d3eb-e128-4356-8b07-439b2cae9f29\"\n }, \n \ - \ {\n \"filename\": \"6-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/35dda97c-debb-4d0a-af02-0376aae43f78\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 898, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"35dda97c-debb-4d0a-af02-0376aae43f78\"\n }, \n \ - \ {\n \"filename\": \"5-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/d81d63dd-2f6a-4af4-9f47-6454419be092\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 735, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"d81d63dd-2f6a-4af4-9f47-6454419be092\"\n }, \n \ - \ {\n \"filename\": \"6-adulatory_patty-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies/5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"5706c8ff-e86e-4998-a6e1-c6a5b2b9160f\"\n }, \n \ - \ {\n \"filename\": \"5-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/5335680f-6f66-474a-bef6-675694557c0c\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"5335680f-6f66-474a-bef6-675694557c0c\"\n }, \n \ - \ {\n \"filename\": \"6-totemic_incarnation-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": \"\", \n\ - \ \"journalist_last_name\": \"\", \n \"journalist_username\": \"\ - journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies/e12bf324-6710-4228-95e6-b70cb6e16cc2\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"e12bf324-6710-4228-95e6-b70cb6e16cc2\"\n }, \n \ - \ {\n \"filename\": \"5-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/6df313e4-031e-4a06-b8f2-fe342ce76650\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"6df313e4-031e-4a06-b8f2-fe342ce76650\"\n }, \n \ - \ {\n \"filename\": \"6-charitable_boss-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"journalist\", \n \"journalist_uuid\"\ - : \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\", \n \"reply_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies/54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"54afdfd7-f206-4e5c-a06c-1033a6dadeda\"\n }, \n \ - \ {\n \"filename\": \"7-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/63778a9d-5d28-4467-9479-38473e020f4b\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 895, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"63778a9d-5d28-4467-9479-38473e020f4b\"\n }, \n \ - \ {\n \"filename\": \"8-subsonic_discoloration-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": \"\"\ - , \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"journalist\", \n \"journalist_uuid\": \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - , \n \"reply_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\"\ - , \n \"seen_by\": [\n \"d1a781e9-2e7b-4b12-982e-adbd1e37bc16\"\ - \n ], \n \"size\": 895, \n \"source_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\n }\n ]\n\ + : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ + : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ + , \n \"seen_by\": [], \n \"size\": 765, \n \"source_url\":\ + \ \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n \"uuid\"\ + : \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n {\n \"filename\"\ + : \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\": false,\ + \ \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ + : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ + : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ + , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ + \ \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n \"uuid\"\ + : \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }, \n {\n \"filename\"\ + : \"5-port_regularization-reply.gpg\", \n \"is_deleted_by_source\": false,\ + \ \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ + \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ + is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ + \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ + dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ + \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ + \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ + , \n \"seen_by\": [\n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ + \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ + , \n \"seen_by\": [\n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + \n ], \n \"size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ + \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ + : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ + : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ + : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ + , \n \"seen_by\": [\n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + \n ], \n \"size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ + \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ + \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ + \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ + \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ + : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ + , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ + , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ + size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6357' + - '6450' Content-Type: - application/json Date: - - Thu, 15 Oct 2020 00:05:55 GMT + - Wed, 02 Dec 2020 00:56:37 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: code: 200 message: OK - request: - body: '{"files": ["1c9f78e7-2f3c-495f-aea1-1cdf5668fda0", "8e06b833-1ca6-49f7-af4d-c6024c88a9bc", - "7adfa4dd-84a8-459b-8975-908c8c6cbec4", "4a3b9999-2146-4a97-bec6-372a9defb259", - "cb2dd23c-0914-4533-ab75-c28b85ef1f69", "7e690293-2783-47a8-9a11-c1668c8438e6"], - "messages": ["0d1a631e-3010-4d96-9169-5b973e308a31", "2d33d119-9a74-41cb-86cb-313d884b6891", - "194849f8-25e9-4992-9c85-20b1c255764e", "ff6800fc-b88b-418c-8485-d7f29f7cd400", - "4058ebd2-f4f6-4ef8-9bf5-3102f004a508", "c8a88b8b-f4a4-4b4e-b37b-f53efad2b90e", - "2a4a46b7-d5ba-43d7-808c-986351b8bef1", "3ecbffb5-01e8-4176-8ddd-b9b056c517f6"], - "replies": ["d565d3eb-e128-4356-8b07-439b2cae9f29", "35dda97c-debb-4d0a-af02-0376aae43f78", - "d81d63dd-2f6a-4af4-9f47-6454419be092", "5706c8ff-e86e-4998-a6e1-c6a5b2b9160f", - "5335680f-6f66-474a-bef6-675694557c0c", "e12bf324-6710-4228-95e6-b70cb6e16cc2", - "6df313e4-031e-4a06-b8f2-fe342ce76650", "54afdfd7-f206-4e5c-a06c-1033a6dadeda", - "63778a9d-5d28-4467-9479-38473e020f4b", "e467868c-1fbb-4b5e-bca2-87944ea83855"]}' + body: '{"files": ["cf8b0a7f-d1f8-48cd-8812-50b853533a4c", "1782e93d-f678-4f0a-a998-b44601a6a34a", + "065cf9f9-987c-46b0-907c-3387ef31d50e", "42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2", + "e84d6f83-02c9-4df2-94e0-9fe185e7fe24", "8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09", + "939458c2-1c74-4955-b781-0ca51d6f28a7", "dc12e125-0f58-4f59-a38c-706714600df5", + "9529d24d-dd5f-46fb-a926-e2d1d0162ea0", "38f56c75-fdde-4d99-8775-121699bcd596"], + "messages": ["e5b5e21b-ac05-40e9-b87b-668ce8b9d025", "6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf", + "a66b43fb-293e-4562-8c21-ad52a45d5192", "505992f6-2672-424e-ab19-a0b35eea15eb", + "29fc7412-ef38-40fd-b43b-a8109d215070", "7eaa6546-1472-4305-ba5b-3fd32060d2b4", + "90b6647a-20ab-4842-bc5d-90a797c0a999", "5bedf5ad-48a6-410f-88d1-72a96e6ae0e8", + "cc3480f1-3395-4a79-9be5-58b2a574e11b", "9dcffdac-285c-409f-a3b4-260daaf17a78"], + "replies": ["6e0bd610-b3de-4008-b62c-dd8e73931e93", "c4e1fa36-029e-4020-af64-9341750c7a40", + "dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7", "3d7028c2-b702-4b1a-8461-c36733494e77", + "34d13069-0ce8-49ff-a5cb-135e834081d7", "37449e40-c9a0-4c84-b582-fc99eaffbb5d", + "ebf85b28-9606-41df-bd3a-ed8c951bbd1e", "1a0f9cf5-d83c-4f97-9491-a2b24f52a761", + "58f6b1f5-3a00-4fbd-b66d-d1c98243a825", "9840f6ca-4e60-493a-9615-d735e98c378c"]}' headers: Accept: - application/json Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDkxNTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzIwMzU1fQ.eyJpZCI6MX0.sgnzWxPG61pXqhhs4YPpR6iNMyCThbEUqFaIMG4fWeM + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: - - '998' + - '1238' Content-Type: - application/json User-Agent: @@ -262,7 +314,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 15 Oct 2020 00:05:55 GMT + - Wed, 02 Dec 2020 00:56:37 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-setup.yml b/data/test-setup.yml index 1b22878bb..2ee52c1c8 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "journalist", "passphrase": "correct horse battery staple - profanity oil chewy", "one_time_code": "661555"}' + profanity oil chewy", "one_time_code": "436824"}' headers: Accept: - '*/*' @@ -17,17 +17,17 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"expiration\": \"2020-10-22T03:22:09.637809Z\", \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_uuid\": \"769af71c-61b7-493e-b063-3594530a28b6\"\ - , \n \"token\": \"eyJleHAiOjE2MDMzMzY5MjksImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAzMzA4MTI5fQ.eyJpZCI6MX0.ZKP1HZdf4nV5DmHeGX6fz7eZWgQU79aPdDjfzQFl3_s\"\ + string: "{\n \"expiration\": \"2020-12-02T08:56:36.660604Z\", \n \"journalist_first_name\"\ + : null, \n \"journalist_last_name\": null, \n \"journalist_uuid\": \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ + , \n \"token\": \"eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc\"\ \n}\n" headers: Content-Length: - - '313' + - '317' Content-Type: - application/json Date: - - Wed, 21 Oct 2020 19:22:09 GMT + - Wed, 02 Dec 2020 00:56:36 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 801477dfe..5c5b413cf 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -18,82 +18,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -107,7 +124,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -117,7 +134,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star response: body: string: "{\n \"message\": \"Star added\"\n}\n" @@ -127,7 +144,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -141,7 +158,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Length: @@ -151,7 +168,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star + uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star response: body: string: "{\n \"message\": \"Star removed\"\n}\n" @@ -161,7 +178,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: @@ -175,7 +192,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDI3NDUxOTUsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjAyNzE2Mzk1fQ.eyJpZCI6MX0.1lrA6kdh8XiwEdggOCGwh8d_jNpoUWinYGmSsiDQf-0 + - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc Connection: - keep-alive Content-Type: @@ -186,82 +203,99 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/add_star\"\ - , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"subsonic discoloration\"\ - , \n \"key\": {\n \"fingerprint\": \"3E9C0B5848CDD93C45576F8850A587A44DAA7CC3\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALuYXA15P8gcN76Zwepnf59oz03sFGdPZgNNMrNgx7iNK8JFTTyg\\\ - ntv2PZIhZ8mGDlnDW+/8D1NR+myTKdBRSl2EfrGZtzRf/byWmVb9lt9TUa5JBKYV2\\nQnIEAyvnMt92onUIFOAGQzY28gKCKAr/7XDdrIuVK6oNiqbCTWfTSn+XABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFc1WlVGV1FOVFBWWEU1UVFJRkdaNUFWRVhYNjIyNUJKV1lF\\nVzZCSVhWWkxKWURBUTNORDY3SkFVWEdRQjNWN0w3UkxURlZaQUQ2TTU3WlpHUDJa\\\ - nNEFQQ1VEM0JKSEZBVExTSUNDRlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFClh6RNqnzD9LYD+gORpUW5ynKnwgHmJfLUIpoA\\\ - nL1aln9IEK6BV5a3ri61ar2iFEb9ynHurzSZ4zp5lWzrFl2KwKxKikTT6ehKmxyNw\\nWpNedXaKtof7TKd14sX9DJaQfkPND/CPYzy13cD8xx4CMAQF2G9rC/w3uPcNzNqz\\\ - nbAMlsBxnkPBG4WGeQTdJ\\n=XdtX\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.476313Z\"\ - , \n \"number_of_documents\": 0, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9/submissions\"\ - , \n \"url\": \"/api/v1/sources/cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\ - , \n \"uuid\": \"cd1a308d-8bb4-46cd-a0f7-76cdd5f218e9\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/add_star\"\ + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ + \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ + nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ + nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ + n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ + nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ + , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ + , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ + , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ + \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ + , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ + n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ + nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ + nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ + ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ + , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ + \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ + , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ + , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"adulatory\ - \ patty\", \n \"key\": {\n \"fingerprint\": \"783D6006F840033625A71E378F7BF508A26C6919\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMsEJd4rrKox73M0/u9gbxZfywdLm/AhTSqG6UTu2zBvlRsNl8AP\\\ - ngKz5GTkrprxMkNQyeYaRsDD60EYpTZxyw10GpU2dBkn4T1wNcx/iTn97JKtTGf5r\\n0SVJFQ9nuj2cmRYy9sIaEIdlIp4EfN0jVPV/4AO3sH6kuem/JW+5K+xfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFBOVkw1VjNQUU8zVEI3REdOUFpQNVI0VVlKRVBKM0ZMSTVT\\nQUpXV1VXQ0FFVk5BUklEQUVLUFdOUFJTVE9OQUpYTkpKWUNSNlZOV1RVRVdEMlBQ\\\ - nWVozVFFQSEZFTVRZQk43Q1Y0WVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEI979QiibGkZrFcEAJFAAcDtSQqHxJ7IEchZqMdx\\\ - nue8cXuUVYum5joYr/DxFIVyXYzArraRCoeGlDU7jsITz0fYn55briKI84sbdgFS5\\neNwm5JY47sE1AMNVsadkGdXyGVaE85b5V5uOMtI1pTLka/qSgOLU1/75yWYduBHJ\\\ - n8tTmKxmwSewRzCJNXMGV\\n=ck57\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:06.793940Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ + \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ + nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ + nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ + n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ + nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c/submissions\"\ - , \n \"url\": \"/api/v1/sources/b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\ - , \n \"uuid\": \"b2e7cc71-d45a-44c6-86f0-7fbfaf5cc36c\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ + , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ + , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"totemic incarnation\"\ - , \n \"key\": {\n \"fingerprint\": \"4E98B6081FCF47B264BCF360B65FDBB8E31F841C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOWbdN2UzPlb8VlhTUCTjYe2vm/3vjqNWghSV5wgwgaEYPIe24by\\\ - nLDFGMXNBqQIPInVYvoZTKPrKVluCygFy7sN5+/uvymXz/Ax9N6YEbQMl9yMVJIUc\\nPLei0d2f2ecBmZeL2nI+WEnlxhxEWg3wdu0E59nV3bNreoJlZ0RRuCLzABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPDVVSkIyNFBUMjdNWjJWQTdUUkFIN0NZQU1IUjU0TkFBWlpY\\nNTZURUEzUVNBNzdBS1JFNE1GRkdUSEhJQjY1QkxFNVk2NVlCRUtLSEsyTDVTT0RC\\\ - nVTdHSFNKUFoyV1FSUEpYM0xVMlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELZf27jjH4QczvAEAK2uhyX27jq7isi5aKVeXw0J\\\ - nNbbcPME1tyBbqzqvnQNh81ePRB7rQD+lAGv4MLYGkBm+9F/X0WtJ0O+UrFkSrwlM\\ntnBgnCY2ZbJc5cPv/gMlwZVaFuSPyavKyzrJmv/OZZS77v60HQjZfwKE83X4BBy8\\\ - n3ILYLyNhj2186Yy+0md8\\n=jH7M\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.089026Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ + , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ + nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ + nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ + nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ + nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7/submissions\"\ - , \n \"url\": \"/api/v1/sources/65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\ - , \n \"uuid\": \"65f576e1-e185-4d76-a2d7-5c7298bd50e7\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/add_star\"\ + \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ + , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ + , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ + \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"charitable\ - \ boss\", \n \"key\": {\n \"fingerprint\": \"55D07C8360515279DE23546718911C1E39FB5558\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOTXVnoRWF2hm3iA9qvWGQxa5AL1oMFF4vtY7T74j+/+0NUKWCdT\\\ - nvbFJ4bPRbD8yPE6FOE1ZOM6g8abjQ+3cKkNnYP0ipCptOYzZXtWn/k1kmdJJp9K2\\nJRZFqIsC+lHtwVcMwtrtRkzxb5198Scsz59l5Bqh9PeLNWe/HZM5nsrRABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFNBQzNERUdWWFBWVTJaQldSS09GSFpPSzRXSUxSV0xBQUs0\\nTFhGMlhNUlBTNk1NNExWUEZaSUZNWUZWVTRPV0NDRjZFUTJEWFlKQUI3VURCNU5E\\\ - nUkdFNlJXNEJXU1dUUUJMRkkyWlk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBiRHB45+1VYaggEAKr3H6X3g13GOF5I8iov4rpw\\\ - nPfHHoZ3AFh0sp3pCoRBFpj0DjpzNsE7dj70/CKPH/RVKDyArOgzAVnCttKTm3ktb\\nHm/sZRQjj4H2fOFlRLyrp0xGODlvdJ57x0++Rthb6rApatuORjPqquK53O0ZMxkg\\\ - nXabFctuEthpVB70UvY/J\\n=WUVk\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-10-14T22:59:07.409739Z\"\ + \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ + \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ + , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ + ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ + ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ + nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ + nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ + nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ + \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b/submissions\"\ - , \n \"url\": \"/api/v1/sources/d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\ - , \n \"uuid\": \"d9f5bb51-8ce3-4424-b5fd-046eb200116b\"\n }\n ]\n\ + \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ + , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ + , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ + , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ + , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ }\n" headers: Content-Length: - - '6407' + - '8007' Content-Type: - application/json Date: - - Wed, 14 Oct 2020 22:59:59 GMT + - Wed, 02 Dec 2020 00:56:38 GMT Server: - Werkzeug/0.16.0 Python/3.5.2 status: diff --git a/data/test_api_auth.json b/data/test_api_auth.json new file mode 100644 index 000000000..b53d34e6f --- /dev/null +++ b/data/test_api_auth.json @@ -0,0 +1 @@ +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file From b36604dbc97a5e86aa93db3e7fc79a37d232d527 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Tue, 1 Dec 2020 17:17:20 -0800 Subject: [PATCH 414/751] black/isort reformatting --- tests/test_shared.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_shared.py b/tests/test_shared.py index d557f27f3..39b95e466 100644 --- a/tests/test_shared.py +++ b/tests/test_shared.py @@ -1,5 +1,6 @@ import datetime import os + import pytest from sdclientapi.sdlocalobjects import Reply, ReplyError, Source, WrongUUIDError @@ -7,7 +8,7 @@ NUM_REPLIES_PER_SOURCE = 2 -class TestShared(): +class TestShared: """ Base class for test code that is shared by the API and API proxy tests. Tests in this file should not be prefixed with test_; they are called From 93fd9f72b81294905738544a1c897eea35f139a1 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 3 Dec 2020 17:32:07 -0800 Subject: [PATCH 415/751] Simplify proxy tests and regenerate cassettes - Rely on datasaver to provide API token - Avoid retry logic in proxy tests -- without a way to exclude sleeps from the cassettes, there's very little value in automatically retrying TOTP tokens - Remove logout.txt logic as we currently don't need it --- README.md | 10 +- data/setup_method.json | 2 +- data/test_api_auth.json | 2 +- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_download_submission.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_users.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_logout.json | 2 +- data/test_reply_source.json | 2 +- data/test_reply_source_with_uuid.json | 2 +- data/test_seen.json | 2 +- data/test_star_add_remove.json | 2 +- tests/test_api.py | 3 +- tests/test_apiproxy.py | 158 ++++++++----------- tests/test_shared.py | 2 +- tests/utils.py | 32 +--- 35 files changed, 114 insertions(+), 151 deletions(-) diff --git a/README.md b/README.md index 1cd677e26..135efbc5e 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ When tests are run, they replay recorded API request and response data instead o **Note:** We have a CI test that does not use the recorded API request and response data in order to make sure we are testing the latest changes to the SDK against the latest server API (see `test-against-latest-api` in https://github.com/freedomofpress/securedrop-sdk/blob/main/.circleci/config.yml). -We use [vcrpy](https://vcrpy.readthedocs.io/en/latest/) to record and replay API calls made over HTTP and a decorator called `@dastollervey_datasaver` to record and replay API calls made over qrexec. Each request made from a test and its response from the server is stored in a "cassette" in the `data` directory. Tests replay these cassettes instead of making actual API calls to a server. +We use [vcrpy](https://vcrpy.readthedocs.io/en/latest/) to record and replay API calls made over HTTP and a decorator called `@qrexec_datasaver` to record and replay API calls made over qrexec. Each request made from a test and its response from the server is stored in a "cassette" in the `data` directory. Tests replay these cassettes instead of making actual API calls to a server. If you run the tests and see the following vcrpy warning, then you'll need to re-record cassettes because none of the existing cassettes contain the expected API call and we don't allow existing cassettes to be overwritten: @@ -122,7 +122,7 @@ Once your proxy are set up, follow these steps: rm data/*.json ``` -3. Comment out the `@dastollervey_datasaver` decorator above the test you want to generate a new cassette for or just generate all new cassettes by commenting out the decorator above all methods in the `test_apiproxy.py::TestAPIProxy` class. +3. Comment out the `@qrexec_datasaver` decorator above the test you want to generate a new cassette for or just generate all new cassettes by commenting out the decorator above all methods in the `test_apiproxy.py::TestAPIProxy` class. 4. Make qrexec calls to the server and collect real response data: @@ -130,7 +130,7 @@ Once your proxy are set up, follow these steps: make test TESTS=tests/test_apiproxy.py ``` -5. Uncomment the `@dastollervey_datasaver` decorator wherever you commented it out. +5. Uncomment the `@qrexec_datasaver` decorator wherever you commented it out. 6. Record new cassettes from the response data collected in step 4: ```bash @@ -151,7 +151,7 @@ If this is the first time you are generating new cassettes that make API calls o dpkg -i .deb ``` -3. Create `/etc/sd-proxy.yaml` with the following contents (assuming the VM you'll be running the SDK tests from is called **sd-dev**): +3. Create `/home/user/.securedrop_proxy/sd-proxy.yaml` with the following contents (assuming the VM you'll be running the SDK tests from is called **sd-dev**): ``` host: 127.0.0.1 @@ -201,7 +201,7 @@ sd-dev-proxy sd-dev allow ```bash NUM_SOURCES=5 make dev ``` - b. With the main branch of this repo checked out on `sd-dev`, comment out the `@dastollervey_datasaver` decorator above the `test_apiproxy.py::TestAPIProxy::setUp` method so that `test_api_auth` makes an actual API call over qrexec. + b. With the main branch of this repo checked out on `sd-dev`, comment out the `@qrexec_datasaver` decorator above the `test_apiproxy.py::TestAPIProxy::setUp` method so that `test_api_auth` makes an actual API call over qrexec. c. Run `test_api_auth`: ```bash diff --git a/data/setup_method.json b/data/setup_method.json index b53d34e6f..16eb50730 100644 --- a/data/setup_method.json +++ b/data/setup_method.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_api_auth.json b/data/test_api_auth.json index b53d34e6f..16eb50730 100644 --- a/data/test_api_auth.json +++ b/data/test_api_auth.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 08e950dc7..5678195e5 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/48516080-0d80-43dc-9e08-dfbe02117c8d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"48516080-0d80-43dc-9e08-dfbe02117c8d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/ca6e2271-fde4-439f-b117-438387433a41\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 898, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"ca6e2271-fde4-439f-b117-438387433a41\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6199\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/48516080-0d80-43dc-9e08-dfbe02117c8d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"48516080-0d80-43dc-9e08-dfbe02117c8d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/ca6e2271-fde4-439f-b117-438387433a41\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 898, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"ca6e2271-fde4-439f-b117-438387433a41\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6199\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:31 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/87c6b3ba-799a-4dcb-aa9e-eb49ad5a4677\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:31 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"6-unoccupied_hydration-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies/48516080-0d80-43dc-9e08-dfbe02117c8d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"48516080-0d80-43dc-9e08-dfbe02117c8d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"1cc97b72-2693-4852-ad3e-a1f09d304ed0\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-shallow-draft_antipode-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies/ca6e2271-fde4-439f-b117-438387433a41\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 898, \\n \\\"source_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"ca6e2271-fde4-439f-b117-438387433a41\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5650\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:32 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:50 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:51 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:51 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3454\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:52 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index cf76a86e5..c102978eb 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unoccupied hydration\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B422C98C7E44ABB157E1472801C6AB4F7E88B1F0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMJihZfKsXleHh4Prxfwitu5Zc0Mp5d2Ig15wp71csFXkKmBDB0h\\\\nteyEEFTxqFMzIeNnZ+zqokYefu33C95jNeukMMfmMwMnsinPTsdtSYZrsmBsw+ng\\\\nzsVpSKjUgMm6kp8yFw6AKT/lT2Ax2CWo9axuq7Hjpvk8rBUUNH6T/Pp5ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLU1lLNVpBRFQ2SDdEU0pFQlg1Wk42UVpBTVBGS1VITkU3\\\\nR1RHVVhMNkVFR1VYVENZS0gzWVlMWUVYUjRaTklYUDVYU1ZBS01WT1dERFRKQ1pR\\\\nRTVWTzRMWE5QRUNUMkk2TFVaVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEAHGq09+iLHwlxsD/R4vZ8+nFQRxDnWYHcqzzt3V\\\\nq8OKjI8/nAVnvVC/Dam7+wG+nerz7fkjeZQPpshg3bArYEjEkeymZz9fFmARsZQo\\\\nxcP+RUPOiN81AU3DysxpZULkxpXH1ILO4jPv9GYdr/BaUH5qXdkt0mUQ9F2tkH6I\\\\nARz2hy9JzLiFwqI/omo5\\\\n=vwR/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:15.876191Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"2caffd52-ca47-4479-86fd-97164d5ae6ab\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8016\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:32 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unoccupied hydration\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B422C98C7E44ABB157E1472801C6AB4F7E88B1F0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMJihZfKsXleHh4Prxfwitu5Zc0Mp5d2Ig15wp71csFXkKmBDB0h\\\\nteyEEFTxqFMzIeNnZ+zqokYefu33C95jNeukMMfmMwMnsinPTsdtSYZrsmBsw+ng\\\\nzsVpSKjUgMm6kp8yFw6AKT/lT2Ax2CWo9axuq7Hjpvk8rBUUNH6T/Pp5ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLU1lLNVpBRFQ2SDdEU0pFQlg1Wk42UVpBTVBGS1VITkU3\\\\nR1RHVVhMNkVFR1VYVENZS0gzWVlMWUVYUjRaTklYUDVYU1ZBS01WT1dERFRKQ1pR\\\\nRTVWTzRMWE5QRUNUMkk2TFVaVVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEAHGq09+iLHwlxsD/R4vZ8+nFQRxDnWYHcqzzt3V\\\\nq8OKjI8/nAVnvVC/Dam7+wG+nerz7fkjeZQPpshg3bArYEjEkeymZz9fFmARsZQo\\\\nxcP+RUPOiN81AU3DysxpZULkxpXH1ILO4jPv9GYdr/BaUH5qXdkt0mUQ9F2tkH6I\\\\nARz2hy9JzLiFwqI/omo5\\\\n=vwR/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:15.876191Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\\\", \\n \\\"uuid\\\": \\\"2caffd52-ca47-4479-86fd-97164d5ae6ab\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8016\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:33 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2caffd52-ca47-4479-86fd-97164d5ae6ab\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:34 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6417\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:35 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 8, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:40 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 8, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:41 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:42 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6410\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:42 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index 94c4e1ff4..8a086380a 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6417\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:35 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"shallow-draft antipode\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"2863989ECD9B9FC451D13B4A680C24767C489F00\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMnqSbSJ6Z5A4hxk/9gv20Pv/xL/sD+SXzcYXGtXJaBPP/EooMsy\\\\nH49rD0+kLzM9008WkXjif2vBoL0pf0cG4jBgMQj4gm3Zv2bH35k7DrfiGyZIhYhF\\\\nZE3t+fE2QuoYGxbSPulfug5Ug9ZeqPst6RNmrGYo6B6WjcC3dkqFgIVBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFlHNUNYRzQzRFFKTVROTkdNU1ZTR0FHQTRaQUxNQU9HQ0Uz\\\\nMzNGQjVBSklWQVgyQkJVQUJTTkxVNjQ0T0haVEtVQjJMUDJUUklZN09ETUhSSlla\\\\nSUxHNUE1Wk00NkVPUzJOUVRGUVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEGgMJHZ8SJ8AW/sD/1rbM5vWKvK5EUSFKQGHriIU\\\\nKLKEJ44dNUCmZMzYgQqn9yl3FecjUvlR2C2rJy7Y51E8JSST28egcPImgHfe1zhg\\\\nVT4aLcyJpkBbohgmJUPxia0mI9uwo6YVLH8AYGSkyvCBRvaOSYP7nW5U3Vxpa3A7\\\\nqsNGqAF0W4GsWBQflPq7\\\\n=2Dz9\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.243253Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\", \\n \\\"uuid\\\": \\\"9061de04-a685-46b9-b6d9-4a65c0a8c3d4\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6417\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:36 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/9061de04-a685-46b9-b6d9-4a65c0a8c3d4\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:37 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:37 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6410\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:43 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6410\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:43 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:44 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4817\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:45 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index fd814fe8c..bbec8920d 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3/download\\\", \\n \\\"filename\\\": \\\"1-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3\\\", \\n \\\"uuid\\\": \\\"c1676853-00e4-4e6c-b703-79ddec93dfa3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7031\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3/download\\\", \\n \\\"filename\\\": \\\"1-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3\\\", \\n \\\"uuid\\\": \\\"c1676853-00e4-4e6c-b703-79ddec93dfa3\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7031\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:38 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/c1676853-00e4-4e6c-b703-79ddec93dfa3\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:39 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6443\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:40 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7671\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:45 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7671\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:46 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:47 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7035\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:47 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index e26b98cd5..75cd25bac 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6443\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:40 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 1, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f/download\\\", \\n \\\"filename\\\": \\\"2-revolutionary_theology-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\\\", \\n \\\"uuid\\\": \\\"0a39c76a-f52c-4480-b07b-fa851204560f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1783\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/0a39c76a-f52c-4480-b07b-fa851204560f\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:42 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:42 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7035\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:48 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4817\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:48 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1939\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:49 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:49 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6399\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:50 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index ba3cd98fa..547b5b51d 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3827\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:43 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"5d3a9021-9f20-47ac-9b8b-e8f0bcdccc5f\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=5-revolutionary_theology-reply.gpg\", \"Content-Length\": \"735\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Wed, 14 Oct 2020 23:00:16 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Thu, 15 Oct 2020 11:00:43 GMT\", \"Etag\": \"sha256:8b0b8ecf31fe17460554acc44dacc34e7bdb53d1178805aab964e56fd91463cb\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:43 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 900, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6701\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:37 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"a01bcbec-7b54-4f34-984e-12fc1b90d4f7\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=5-absorbent_ranula-reply.gpg\", \"Content-Length\": \"765\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Fri, 04 Dec 2020 01:22:04 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Fri, 04 Dec 2020 13:22:37 GMT\", \"Etag\": \"sha256:dfb71fafaf6b45ffb65e76ac16deb2f499e7c399125ee6b47f71aa0a4c7d6437\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:37 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_download_submission.json b/data/test_download_submission.json index 15ff5dc3a..9707aac41 100644 --- a/data/test_download_submission.json +++ b/data/test_download_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:44 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"54501ee6-5f90-4b7d-a442-9f1aa320a607\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=3-revolutionary_theology-msg.gpg\", \"Content-Length\": \"593\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Wed, 14 Oct 2020 23:00:16 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Thu, 15 Oct 2020 11:00:45 GMT\", \"Etag\": \"sha256:bff2be843bb81b8e79cd28087532ea72105938e64a085239ca7464dd76d0f670\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:45 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:45 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12201\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:14 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\", \"timeout\": 3600}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"badfa92f-6936-4184-9948-7e670779df7b\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=1-absorbent_ranula-msg.gpg\", \"Content-Length\": \"623\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Fri, 04 Dec 2020 01:22:04 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Fri, 04 Dec 2020 13:22:14 GMT\", \"Etag\": \"sha256:18e05b0356134e7cc81a0c3079bc36bc832e2594c046cf0426ff922feaec00b8\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:14 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"529\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:15 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index 72590b175..9922faaf0 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:46 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:32 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 543e427c0..95f1cf289 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index 04ebe2dcc..b363a6948 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4816\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:47 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:48 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:48 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1512\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:31 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index b8e2afeb7..5a1ca260f 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:49 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3827\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:49 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:36 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 900, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6701\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:36 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index 8e077107d..c1ff8806c 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:50 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12731\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:29 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index f2949705c..93a6a0cfb 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": \\\"\\\", \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-10-14T23:00:30.325492Z\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"192\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:50 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-12-04T01:22:13.577866Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"196\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:31 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index 7fd99b983..05a66a30c 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:51 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1295\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:52 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:33 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1219\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:34 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 31a4fc484..4260096cb 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:52 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1295\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:53 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"575\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:53 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:34 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1219\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:35 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"537\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:35 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index 87799c09d..5adfa2e12 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:54 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:54 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:20 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:21 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index c16edb172..dbb83ddad 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:55 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:55 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:21 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:22 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index 31662c1a5..ef1651b7b 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:56 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:17 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index 7845729bc..ca1a8b0e1 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:56 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:57 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1195\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:57 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:58 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12731\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:24 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:24 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2559\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:25 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"574\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:25 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index afed11d3a..f18d78b7e 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:58 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1518\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:59 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1195\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:59 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"535\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:00 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12731\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:26 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:26 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2559\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:27 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"574\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:27 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index f3132db7b..f185ac695 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:00 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1195\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:01 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:23 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2559\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:23 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_users.json b/data/test_get_users.json index 2cbe79a4c..780ca7877 100644 --- a/data/test_get_users.json +++ b/data/test_get_users.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"users\\\": [\\n {\\n \\\"first_name\\\": \\\"\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n }, \\n {\\n \\\"first_name\\\": \\\"\\\", \\n \\\"last_name\\\": \\\"\\\", \\n \\\"username\\\": \\\"dellsberg\\\", \\n \\\"uuid\\\": \\\"11709640-55ae-40eb-b23a-a3a8672ba66e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"316\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:01 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"users\\\": [\\n {\\n \\\"first_name\\\": null, \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n }, \\n {\\n \\\"first_name\\\": null, \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"dellsberg\\\", \\n \\\"uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"324\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:32 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index 2a325d948..96db2bf3e 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:02 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:28 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_logout.json b/data/test_logout.json index 6de6241a1..171913951 100644 --- a/data/test_logout.json +++ b/data/test_logout.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-10-15T07:00:30.316050Z\\\", \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDI3MTY0MzAsImV4cCI6MTYwMjc0NTIzMCwiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.kmFARZQ8lI0PrzLgHw3UGTBRX84oI9DhB-E-eJIIsg4\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"313\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:00:30 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:01:03 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:52 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index ff76fe7a3..09b9f575e 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:07:41 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"7-revolutionary_theology-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"150\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:07:41 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:38 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"7-absorbent_ranula-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"ef79f3fa-de68-4338-b255-7d54949ff5bb\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"144\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:39 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source_with_uuid.json b/data/test_reply_source_with_uuid.json index 59479da25..8f646b822 100644 --- a/data/test_reply_source_with_uuid.json +++ b/data/test_reply_source_with_uuid.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:40 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"8-revolutionary_theology-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"150\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:40 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:39 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"8-absorbent_ranula-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"144\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:40 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_seen.json b/data/test_seen.json index d27744f0d..2bf25f263 100644 --- a/data/test_seen.json +++ b/data/test_seen.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0/download\\\", \\n \\\"filename\\\": \\\"3-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\n \\\"uuid\\\": \\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd/download\\\", \\n \\\"filename\\\": \\\"4-revolutionary_theology-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 594, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions/19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\n \\\"uuid\\\": \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de/download\\\", \\n \\\"filename\\\": \\\"1-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\n \\\"uuid\\\": \\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd/download\\\", \\n \\\"filename\\\": \\\"2-unfailing_bookbinder-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\n \\\"uuid\\\": \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05/download\\\", \\n \\\"filename\\\": \\\"3-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\n \\\"uuid\\\": \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2/download\\\", \\n \\\"filename\\\": \\\"4-unfailing_bookbinder-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions/c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\n \\\"uuid\\\": \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df/download\\\", \\n \\\"filename\\\": \\\"1-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\n \\\"uuid\\\": \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c/download\\\", \\n \\\"filename\\\": \\\"2-consuming_raster-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/72a2e418-99ef-4468-9289-b241d8f4159c\\\", \\n \\\"uuid\\\": \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72/download\\\", \\n \\\"filename\\\": \\\"3-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/402213e5-1939-45df-afeb-915c0bdbef72\\\", \\n \\\"uuid\\\": \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654/download\\\", \\n \\\"filename\\\": \\\"4-consuming_raster-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions/53551320-775a-4c36-a9f5-65a4914e0654\\\", \\n \\\"uuid\\\": \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5855\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Thu, 15 Oct 2020 00:04:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/50e493a2-8974-4538-98ca-a350da076dca\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"50e493a2-8974-4538-98ca-a350da076dca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 736, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfailing_bookbinder-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies/92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-consuming_raster-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies/d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"7-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"8-revolutionary_theology-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"journalist\\\", \\n \\\"journalist_uuid\\\": \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies/e467868c-1fbb-4b5e-bca2-87944ea83855\\\", \\n \\\"seen_by\\\": [\\n \\\"122ef3e3-2577-4638-b66a-671fe423f216\\\"\\n ], \\n \\\"size\\\": 895, \\n \\\"source_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"5101\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Thu, 15 Oct 2020 00:04:28 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": \"{\\\"files\\\": [\\\"3924d4fb-2e7b-41ba-88b2-45aa9f01d9de\\\", \\\"243a371c-3f5c-42e4-a14c-08ead0221dcd\\\", \\\"34ee5bc8-183c-4fa3-95b8-125d086c48df\\\", \\\"72a2e418-99ef-4468-9289-b241d8f4159c\\\"], \\\"messages\\\": [\\\"471944a1-d9d2-42b1-9bff-11e551de3cc0\\\", \\\"19f35ad4-8cf6-4de1-92ae-12cbe14ce2dd\\\", \\\"7fcfa5c8-b199-4c10-af92-1b230c2d8a05\\\", \\\"c49f31b0-9a37-4f1f-8fa7-f5ba34604dd2\\\", \\\"402213e5-1939-45df-afeb-915c0bdbef72\\\", \\\"53551320-775a-4c36-a9f5-65a4914e0654\\\"], \\\"replies\\\": [\\\"50e493a2-8974-4538-98ca-a350da076dca\\\", \\\"3e74cdf0-0fd7-4dad-bd32-902657754f28\\\", \\\"5e2c9fbb-b149-4489-9381-67b3d861dec9\\\", \\\"92431ca6-9cbf-474c-95b1-d6c24b6d56e8\\\", \\\"b05fe0b4-46bf-4e8d-b63d-365547c0b13e\\\", \\\"d0d3c0a2-a536-4e7e-a39f-8e1be2f4422f\\\", \\\"a3b5b1ab-8aee-4623-9eb4-3b8f978955aa\\\", \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"]}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/seen\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"resources marked seen\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"41\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Thu, 15 Oct 2020 00:04:29 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12201\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:16 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 900, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6446\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:16 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"files\\\": [\\\"396be7fb-cacb-478c-8a07-da17d7521474\\\", \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"], \\\"messages\\\": [\\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"], \\\"replies\\\": [\\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\\"07df4a39-2210-4589-8110-4923395f606a\\\", \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"]}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/seen\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"resources marked seen\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"41\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:17 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index 333232e47..d51e51f9a 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:17 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:18 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:18 GMT\"}, \"version\": \"0.3.0\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"revolutionary theology\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"BA0AE26E1CC2EA2F469BCEBBDD4A45CA20822D19\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALJTT2RwJJjVJl0DVE1WZR6ryXrlAks7exhiRDO6GmLp9RFfuUIU\\\\nhLSQExiw3jz4EGp5wWVcmBLkHkI26nupMF4PYILSapf0s8Bde4iSQcExZyMSja0y\\\\nRmvGuYlY1x83GwhD7JZ7TyE1h3Nop0GOFZfmI2exGXUE5n4SixU2+aVNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBXR0dXTUE3T1BCUDI3NE1OUllBTEw1N09OQzNSNEdHMkk0\\\\nVDVSRVNMWEZYWENGVFI3U0pMVFYyQ0NPUUNXSjJFNVVWUklMWFozRENQMjVJRzVK\\\\nNUpXS1dXVVNRNktWQVlONUFaUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN1KRcoggi0ZEI8D/RC+lUa+4BonWGdoVcFgK9Cc\\\\nJiPJK4zNvziDy9COaeTzOAXZSZWnvuMHVwZ7lek90EYjQkahw71ofKc0Ya4QVoV/\\\\nE80BadBfaCzRIsqWa/ZinEgJlMdOvCAgX7xHUbWoSnmFqJgOojhGpnHdt0OhcC9L\\\\n7C6U62wR72U+rh/nbSDY\\\\n=O/eI\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.597989Z\\\", \\n \\\"number_of_documents\\\": 0, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/6b34015e-dedb-4251-99d9-8168b11d27a9\\\", \\n \\\"uuid\\\": \\\"6b34015e-dedb-4251-99d9-8168b11d27a9\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfailing bookbinder\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CAE6F8C55B41F9030BD723E0B8B2D03FA99A8C65\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAPPcV2aE52OSTejkdFhrKHJZ6rQCHbOj1tud1/dC6Nk7QeHg+tZa\\\\ngTkQFAS9b0lWd8PqtZHqqytV2G38J5dQaG06zcEvDmgUv82hHaLoVbWGf+tvR919\\\\npXTzOJcHCAJod1Yv7uQBTu4ZN4n6f1o8nSRer2Rc33IFEySGMXi2wc9LABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEhERFBZTUFZMklWVDRaUUgzWUM0QUNOTkdQN05YVklINzY2\\\\nQUdCM1k0Q0ZTS0ZLNlM2SUlLTlZRMlhHUVZXWU1BTERSVFM0WEVORk9WTkpLQTNW\\\\nN0VIUkdXRUo0MlpGR1ZENTRHTkE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELiy0D+pmoxlOrAD/338KifDEs4Bk3oHTsgvok+L\\\\n3hIpiY1eT8Lgq7nbloxEg+Mtu9jhgIOjPX+pSUBw59yQxhv5eD59xC8RFtXr/cHs\\\\n1Xh6xxwUvpL5GK0YhllWzu3zgtemU0mZmS3d7k9vjo7LkJ3opdFtUuBaOw9r1bo9\\\\n3z0FmN+1YeS8D5y1HIzj\\\\n=of6q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:16.964245Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/336ec4ec-05b4-4455-b95c-d10b45842061\\\", \\n \\\"uuid\\\": \\\"336ec4ec-05b4-4455-b95c-d10b45842061\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"consuming raster\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"971A0889CE7A4BE3EA646A7BB8F917EA063034D7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALntOQBPnMmCCXtdxbRNLK28uufBsI05NOw3T6pCERR0j9VYsdT8\\\\nA2ZdpAVaOaZCSUZB64QXI1mXqL12DoOwzA7ncxp66ph62uTH0i0IRmpb1AvHz6Qq\\\\ngxVBS8AHsZ8eUg6j0fhEcF48fGc7VrS+j2uGYwmOtubOSyxwcrrk+PGrABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDJISkJTSU1UWDZPVzVJWFM3Nko1S0dWWEtIU1JLQlpPUEpU\\\\nWjRUWldaU0FaTEs0UFFaUUFQNVM2QVJXR1dDNElJVFpaREtHTVUyVUdDTktSTU9G\\\\nSkMzWVFaTUNOVVdGVUZGNkZFVlE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJELj5F+oGMDTX94AD/0dAXLRdmfNkQdnD4Ax9t2VT\\\\nruitdg4zGb+EaQN6KYz/Fo19epIVkaGwmeTkgtdW3WO8H7HiyRC4KMNSJeWkGNr5\\\\njGUzFk1g4VylS1J2WP3Q2UL1k3Ix1+h4swFdJ7u881GwbnkC4eNhrwEKkCLKUM9i\\\\nXVPNeEk0T+oprZ5rkYF2\\\\n=oLwa\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-10-14T23:00:17.306174Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\", \\n \\\"uuid\\\": \\\"e0ca749b-fb22-4aee-bb96-d3a1a98eb7b3\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4815\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Wed, 14 Oct 2020 23:08:19 GMT\"}, \"version\": \"0.3.0\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:18 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:19 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:19 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:20 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/tests/test_api.py b/tests/test_api.py index e691464d1..0ff27b03e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -72,7 +72,8 @@ def test_auth_badotp(self): def test_api_auth(self): super().api_auth() - # This test is materially different in the API & API Proxy versions. + # This test is order-sensitive and must be run before the "seen" + # state of files is altered. @vcr.use_cassette("data/test-download-submission.yml") def test_download_submission(self): submissions = self.api.get_all_submissions() diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index a20d2532b..ac1e3aa91 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -1,18 +1,16 @@ import http import json -import os import shutil import tempfile -import time from subprocess import TimeoutExpired import pyotp import pytest from sdclientapi import API, RequestTimeoutError -from sdclientapi.sdlocalobjects import BaseError, Reply, Submission +from sdclientapi.sdlocalobjects import AuthError, BaseError, Reply, Submission from test_shared import TestShared -from utils import dastollervey_datasaver, load_auth, save_auth +from utils import qrexec_datasaver class TestAPIProxy(TestShared): @@ -21,118 +19,128 @@ class TestAPIProxy(TestShared): API and API Proxy tests. """ - @dastollervey_datasaver + @qrexec_datasaver def setup_method(self): self.totp = pyotp.TOTP("JHCOGO7VCER3EJ4L") self.username = "journalist" self.password = "correct horse battery staple profanity oil chewy" self.server = "http://localhost:8081/" self.api = API(self.server, self.username, self.password, str(self.totp.now()), proxy=True) + auth_result = None + try: + auth_result = self.api.authenticate() + except Exception as err: + print(err) + + if auth_result is None: + raise AuthError( + "Could not obtain API token during test setup. TOTP code may have expired." + ) - for i in range(3): - if os.path.exists("testtoken.json"): - token = load_auth() - self.api.token = token - self.api.update_auth_header() - break - - # The following is True when we did a logout - if os.path.exists("logout.txt"): - os.unlink("logout.txt") - time.sleep(31) - # Now let us try to login - try: - self.api = API( - self.server, self.username, self.password, str(self.totp.now()), proxy=True - ) - self.api.authenticate() - with open("login.txt", "w") as fobj: - fobj.write("in") - except Exception as err: - print(err) - time.sleep(31) - continue - - save_auth(self.api.token) - break - - @dastollervey_datasaver + @qrexec_datasaver def test_api_auth(self): super().api_auth() - @dastollervey_datasaver + # This test is order-sensitive and must be run before the "seen" + # state of files is altered. + # This test is materially different in the API & API Proxy versions. + @qrexec_datasaver + def test_download_submission(self): + s = self.api.get_all_submissions()[0] + + assert not s.is_read + + # We need a temporary directory to download + tmpdir = tempfile.mkdtemp() + _, filepath = self.api.download_submission(s, tmpdir) + + # Uncomment the following part only on QubesOS + # for testing against real server. + # now let us read the downloaded file + # with open(filepath, "rb") as fobj: + # fobj.read() + + # is_read should still be False as of SecureDrop 1.6.0 or later. + + s = self.api.get_submission(s) + assert not s.is_read + + # Let us remove the temporary directory + shutil.rmtree(tmpdir) + + @qrexec_datasaver def test_seen(self): super().seen() - @dastollervey_datasaver + @qrexec_datasaver def test_get_sources(self): super().get_sources() - @dastollervey_datasaver + @qrexec_datasaver def test_star_add_remove(self): super().star_add_remove() - @dastollervey_datasaver + @qrexec_datasaver def test_get_single_source(self): super().get_single_source() - @dastollervey_datasaver + @qrexec_datasaver def test_get_single_source_from_string(self): super().get_single_source(from_string=True) - @dastollervey_datasaver + @qrexec_datasaver def test_failed_single_source(self): super().failed_single_source() - @dastollervey_datasaver + @qrexec_datasaver def test_get_submissions(self): super().get_submissions() - @dastollervey_datasaver + @qrexec_datasaver def test_get_submission(self): super().get_submission() - @dastollervey_datasaver + @qrexec_datasaver def test_get_submission_from_string(self): super().get_submission(from_string=True) - @dastollervey_datasaver + @qrexec_datasaver def test_get_wrong_submissions(self): super().get_wrong_submissions() - @dastollervey_datasaver + @qrexec_datasaver def test_get_all_submissions(self): super().get_all_submissions() - @dastollervey_datasaver + @qrexec_datasaver def test_flag_source(self): super().flag_source() - @dastollervey_datasaver + @qrexec_datasaver def test_get_current_user(self): super().get_current_user() - @dastollervey_datasaver + @qrexec_datasaver def test_get_users(self): super().get_users() - @dastollervey_datasaver + @qrexec_datasaver def test_error_unencrypted_reply(self): super().error_unencrypted_reply() - @dastollervey_datasaver + @qrexec_datasaver def test_get_replies_from_source(self): super().get_replies_from_source() - @dastollervey_datasaver + @qrexec_datasaver def test_get_reply_from_source(self): super().get_reply_from_source() - @dastollervey_datasaver + @qrexec_datasaver def test_get_all_replies(self): super().get_all_replies() - @dastollervey_datasaver + @qrexec_datasaver def test_download_reply(self): r = self.api.get_all_replies()[0] @@ -149,72 +157,42 @@ def test_download_reply(self): # Let us remove the temporary directory shutil.rmtree(tmpdir) - @dastollervey_datasaver - def test_download_submission(self): - s = self.api.get_all_submissions()[0] - - assert not s.is_read - - # We need a temporary directory to download - tmpdir = tempfile.mkdtemp() - _, filepath = self.api.download_submission(s, tmpdir) - - # Uncomment the following part only on QubesOS - # for testing against real server. - # now let us read the downloaded file - # with open(filepath, "rb") as fobj: - # fobj.read() - - # is_read should still be False as of SecureDrop 1.6.0 or later. - - s = self.api.get_submission(s) - assert not s.is_read - - # Let us remove the temporary directory - shutil.rmtree(tmpdir) - # ORDER MATTERS: The following tests add or delete data, and should # not be run before other tests which may rely on the original fixture # state. - @dastollervey_datasaver + @qrexec_datasaver def test_reply_source(self): super().reply_source() - @dastollervey_datasaver + @qrexec_datasaver def test_reply_source_with_uuid(self): super().reply_source_with_uuid() - @dastollervey_datasaver + @qrexec_datasaver def test_delete_source(self): super().delete_source() - @dastollervey_datasaver + @qrexec_datasaver def test_delete_source_from_string(self): super().delete_source(from_string=True) - @dastollervey_datasaver + @qrexec_datasaver def test_delete_submission(self): super().delete_submission() - @dastollervey_datasaver + @qrexec_datasaver def test_delete_submission_from_string(self): super().delete_submission(from_string=True) - @dastollervey_datasaver + @qrexec_datasaver def test_delete_reply(self): super().delete_reply() - @dastollervey_datasaver + @qrexec_datasaver def test_logout(self): r = self.api.logout() assert r - if os.path.exists("login.txt"): - os.unlink("login.txt") - if os.path.exists("testtoken.json"): - os.unlink("testtoken.json") - with open("logout.txt", "w") as fobj: - fobj.write("out") def test_request_timeout(mocker): diff --git a/tests/test_shared.py b/tests/test_shared.py index 39b95e466..0a1552940 100644 --- a/tests/test_shared.py +++ b/tests/test_shared.py @@ -15,7 +15,7 @@ class TestShared: only from subclasses. """ - # ---------------- AUTH ---------------- + # ---------------- AUTH VALIDATION ---------------- def api_auth(self): assert isinstance(self.api.token, str) diff --git a/tests/utils.py b/tests/utils.py index 8e803c568..a95065e1a 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -8,7 +8,7 @@ # We are making calls to securedrop.Proxy qrexec service # in the QubesOS to get the data from the server. This is difficult to test # unless we have an easy way to store/cache each function call and returned -# result. In this file we have a new decorator called `dastollervey_datasaver`. +# result. In this file we have a new decorator called `qrexec_datasaver`. # This decorator checks for each json_query call and related arguments sent # to the function, and then stores the result in a json file if required. # From the next time, for the same signature, it will serve the result from the @@ -20,10 +20,12 @@ CALLNUMBER = 0 -alternative = json_query +real_json_query = json_query -def internal_sideeffect(*args, **kwargs): +# This function obtains a JSON query result from the cache object (RES), or +# otherwise performs a real query. +def mocked_json_query(*args, **kwargs): global CALLNUMBER global RES CALLNUMBER += 1 @@ -76,12 +78,12 @@ def internal_sideeffect(*args, **kwargs): if not answer: # Means it is not in cache. # So, execute the real function and store in cache - answer = alternative(*args) + answer = real_json_query(*args) RES[key] = answer return answer -def dastollervey_datasaver(func): +def qrexec_datasaver(func): "This is the decorator to save qrexec call data" def wrapper(self, *args, **kwargs): @@ -89,17 +91,12 @@ def wrapper(self, *args, **kwargs): global RES # This is the filename to store the results filename = os.path.join("data", func.__name__ + ".json") - # if the logout.txt file is there, means we have a logout scenario - # so, we should do a real login call - if os.path.exists("logout.txt") and func.__name__ == "setUp": - if not os.path.exists(filename): - return func(self, *args, **kwargs) if os.path.exists(filename): with open(filename) as fobj: RES = json.load(fobj) mock = MagicMock() - mock.side_effect = internal_sideeffect + mock.side_effect = mocked_json_query with patch("sdclientapi.json_query", mock): result = func(self, *args, **kwargs) @@ -110,16 +107,3 @@ def wrapper(self, *args, **kwargs): return result return wrapper - - -def load_auth(): - "Helper function to load token" - if os.path.exists("testtoken.json"): - with open("testtoken.json") as fobj: - return json.load(fobj) - return None - - -def save_auth(token): - with open("testtoken.json", "w") as fobj: - json.dump(token, fobj) From e43f835ba9b72710d5920c35e8df663894d8118b Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 10 Dec 2020 23:16:36 -0800 Subject: [PATCH 416/751] Simplify proxy test setup; more useful error when proxy is AWOL --- sdclientapi/__init__.py | 6 +++++- tests/test_apiproxy.py | 12 +++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index ceb70bd53..d9449c544 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -189,8 +189,12 @@ def _send_rpc_json_request( data_str = json.dumps(data) + json_result = json_query(self.proxy_vm_name, data_str, timeout) + if not json_result: + raise BaseError("No response from proxy") + try: - result = json.loads(json_query(self.proxy_vm_name, data_str, timeout)) + result = json.loads(json_result) except json.decoder.JSONDecodeError: raise BaseError("Error in parsing JSON") diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index ac1e3aa91..97c03e1a0 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -26,15 +26,13 @@ def setup_method(self): self.password = "correct horse battery staple profanity oil chewy" self.server = "http://localhost:8081/" self.api = API(self.server, self.username, self.password, str(self.totp.now()), proxy=True) - auth_result = None try: - auth_result = self.api.authenticate() - except Exception as err: - print(err) - - if auth_result is None: + self.api.authenticate() + except BaseError as err: raise AuthError( - "Could not obtain API token during test setup. TOTP code may have expired." + "Could not obtain API token during test setup. " + "TOTP code may have expired or proxy may not be reachable. " + "Error was: {}".format(err.msg) ) @qrexec_datasaver From 2a3e7e0ce261b2f042688817d7971931922eee96 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 11 Dec 2020 14:12:54 -0800 Subject: [PATCH 417/751] Further README clarifications for running proxy tests It's not necessary to comment/uncomment the datasaver; just deleting JSON files will cause it to regenerate them if needed. However, it is necessary to get a fresh token whenever you're running tests that require it. --- README.md | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 135efbc5e..d356b7d16 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Note: Some tests alter source and conversation data on the server so you may nee In order to generate cassettes for tests that make API calls over qrexec, you'll need to run the server and proxy on a separate VM. If this is the first time you are generating cassettes, first follow the steps outlined in the [Test setup for qrexec communication](#test-setup-for-qrexec-communication) section, which will help you set up a new VM called `sd-dev-proxy`. -Once your proxy are set up, follow these steps: +Once your proxy VM is set up, follow these steps: 1. Start the server in a docker container on `sd-dev-proxy` by running: @@ -116,28 +116,34 @@ Once your proxy are set up, follow these steps: NUM_SOURCES=5 make dev ``` -2. [Skip if adding a new test] Delete the cassettes you wish to regenerate or just delete all json files by running: +2. Delete the cassettes you wish to regenerate or just delete all JSON files by running: ```bash rm data/*.json ``` -3. Comment out the `@qrexec_datasaver` decorator above the test you want to generate a new cassette for or just generate all new cassettes by commenting out the decorator above all methods in the `test_apiproxy.py::TestAPIProxy` class. + If you are only adding a new test and not modifying existing ones, you can + skip this step, but you still need to remove the authentication setup during + cassette generation. Otherwise you will get 403 errors for API endpoints that + require a valid token. Remove the setup cassette by running: -4. Make qrexec calls to the server and collect real response data: + ```bash + rm data/setup_method.json + ``` - ```bash - make test TESTS=tests/test_apiproxy.py - ``` + (You can reinstate the unmodified version later.) -5. Uncomment the `@qrexec_datasaver` decorator wherever you commented it out. -6. Record new cassettes from the response data collected in step 4: +3. Make qrexec calls to the server and collect response data. To run all proxy + tests: ```bash make test TESTS=tests/test_apiproxy.py ``` -**Note:** If you get a 403 error it's becuase the test is trying to reuse an old TOTP code, so wait for 60 seconds and try again. Some tests alter source and conversation data on the server so you should restart the server in between test runs. +**Note:** If you get a 403 error it may also be because the test is trying to +reuse an old TOTP code, so wait for 60 seconds and try again. Some tests alter +source and conversation data on the server so you should restart the server in +between test runs. ## Test setup for qrexec communication From b3fbfb86de871e20819dc145f6db5409f46c65b1 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 6 Jan 2021 14:32:52 +0530 Subject: [PATCH 418/751] Uses new reproducible wheels from our builds The new wheels are coming in the following PR: https://github.com/freedomofpress/securedrop-debian-packaging/pull/213 These wheels are reproducible, you can build them following our Makefile. --- build-requirements.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/build-requirements.txt b/build-requirements.txt index 85d0a6825..509f24abc 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -1,10 +1,10 @@ -certifi==2018.10.15 --hash=sha256:173b19dd31ca7faa50d1fcc0eaf30f5e32e8e99e17d8c7fd4cfc8bc8d94e18a6 -chardet==3.0.4 --hash=sha256:f5632e583a4f61f1e16d0cc98127d241fb11c3c6ddfddee159307d4215186837 -furl==2.0.0 --hash=sha256:1855003e64dcb934556ad79994ba1a3a852da337e353d84d3b4ef75031913451 -idna==2.7 --hash=sha256:491f674364ba3232ed1eb4c1eb7407887f62cef6c300aad7df6e01acd88ffb25 -orderedmultidict==1.0 --hash=sha256:51efddca0b4ae6d885bbafd8ca44e51758166c144cf006dbead5c9394b2a9eae -pyyaml==5.3.1 --hash=sha256:cb4442140d3195f5f799096aa35aadce15f493046135a03668023b80824dd44c -requests==2.22.0 --hash=sha256:e3711bd465fd013abe428a8dade2938b578f05d2b06b0ae83daa98869c4548e8 -six==1.11.0 --hash=sha256:aa4ad34049ddff178b533062797fd1db9f0038b7c5c2461a7cde2244300b9f3d -urllib3==1.25.10 --hash=sha256:32bcd1ec52a4dd17ede2725ad166c789f50d402870947d6824598915b89ecf70 -werkzeug==0.16.0 --hash=sha256:429de1b931a2a58bf5cfac8447253949f7a930d30a73f2755e0ad0f9824592bf +certifi==2018.10.15 --hash=sha256:2d5538b9d89b3a9cb423b8f08417c657856cab733d560067e864157f71b1c5aa +chardet==3.0.4 --hash=sha256:e5cf39014befb85add77118fdc946f0a3387df7840235ba5d20fd6e3a672410a +furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc +idna==2.7 --hash=sha256:a967a752dba5492be34f30f8633cee512d2ec923fe3a2e201d87353b540d2955 +orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f +pyyaml==5.3.1 --hash=sha256:ff021f812a5dbaeb10678462952bb447bf6b322ab54923f5591811056a827c15 +requests==2.22.0 --hash=sha256:83ddbb326afd5524e7fbca582fd9673103652ea3b0c6601ac5ba1a4501f077c9 +six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 +urllib3==1.25.10 --hash=sha256:c78fdeffd1a01640ea99d35851539a4bc91e46a672989c4d96663e3808121389 +werkzeug==0.16.0 --hash=sha256:bd05301a84a9bc3b33f178e53446181879744b74f098ed35850ba21125379be1 From 3772d666f70f38f36d6d5f8e4851e525b50c5cbd Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 8 Jan 2021 10:05:07 -0500 Subject: [PATCH 419/751] Update pip requirements Update py to 1.10.0 to address CVE-2020-29651 --- dev-requirements.in | 1 + dev-requirements.txt | 134 +++++++++++++++++++++++++------------------ 2 files changed, 80 insertions(+), 55 deletions(-) diff --git a/dev-requirements.in b/dev-requirements.in index 7a6b97346..a284a5db3 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -3,6 +3,7 @@ coverage flake8 isort mypy +py>=1.10.0 pyotp pytest pytest-cov diff --git a/dev-requirements.txt b/dev-requirements.txt index 190312fd1..cd840e708 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -6,28 +6,32 @@ # appdirs==1.4.4 \ --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ - --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 \ + --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 # via black attrs==19.3.0 \ --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ - --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ - # via black, pytest + --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 + # via + # black + # pytest black==19.10b0 \ --hash=sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b \ - --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 \ + --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 # via -r dev-requirements.in certifi==2019.11.28 \ --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ - --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f \ + --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f # via requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 # via requests click==7.0 \ --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ - --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ - # via black, pip-tools + --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 + # via + # black + # pip-tools coverage==5.0.3 \ --hash=sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3 \ --hash=sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c \ @@ -59,35 +63,41 @@ coverage==5.0.3 \ --hash=sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af \ --hash=sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52 \ --hash=sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37 \ - --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 \ - # via -r dev-requirements.in, pytest-cov + --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 + # via + # -r dev-requirements.in + # pytest-cov entrypoints==0.3 \ --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ - --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ + --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 # via flake8 flake8==3.7.9 \ --hash=sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb \ - --hash=sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca \ + --hash=sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca # via -r dev-requirements.in idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ - --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ - # via requests, yarl + --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c + # via + # requests + # yarl importlib-metadata==1.5.0 \ --hash=sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302 \ - --hash=sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b \ - # via pluggy, pytest + --hash=sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b + # via + # pluggy + # pytest isort==4.3.21 \ --hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \ - --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd \ + --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd # via -r dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 more-itertools==8.2.0 \ --hash=sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c \ - --hash=sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507 \ + --hash=sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507 # via pytest multidict==4.7.4 \ --hash=sha256:13f3ebdb5693944f52faa7b2065b751cb7e578b8dd0a5bb8e4ab05ad0188b85e \ @@ -106,11 +116,11 @@ multidict==4.7.4 \ --hash=sha256:a8ed33e8f9b67e3b592c56567135bb42e7e0e97417a4b6a771e60898dfd5182b \ --hash=sha256:d7d428488c67b09b26928950a395e41cc72bb9c3d5abfe9f0521940ee4f796d4 \ --hash=sha256:dcfed56aa085b89d644af17442cdc2debaa73388feba4b8026446d168ca8dad7 \ - --hash=sha256:f29b885e4903bd57a7789f09fe9d60b6475a6c1a4c0eca874d8558f00f9d4b51 \ + --hash=sha256:f29b885e4903bd57a7789f09fe9d60b6475a6c1a4c0eca874d8558f00f9d4b51 # via yarl mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 # via mypy mypy==0.761 \ --hash=sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a \ @@ -126,56 +136,61 @@ mypy==0.761 \ --hash=sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b \ --hash=sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72 \ --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ - --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 \ + --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 # via -r dev-requirements.in packaging==20.1 \ --hash=sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73 \ - --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 \ + --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 # via pytest pathspec==0.8.0 \ --hash=sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0 \ - --hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 \ + --hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 # via black pip-tools==5.3.1 \ --hash=sha256:5672c2b6ca0f1fd803f3b45568c2cf7fadf135b4971e7d665232b2075544c0ef \ - --hash=sha256:73787e23269bf8a9230f376c351297b9037ed0d32ab0f9bef4a187d976acc054 \ + --hash=sha256:73787e23269bf8a9230f376c351297b9037ed0d32ab0f9bef4a187d976acc054 # via -r dev-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ - --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d \ - # via pytest -py==1.8.1 \ - --hash=sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa \ - --hash=sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0 \ + --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d # via pytest +py==1.10.0 \ + --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ + --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a + # via + # -r dev-requirements.in + # pytest pycodestyle==2.5.0 \ --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ - --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c \ + --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c # via flake8 pyflakes==2.1.1 \ --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ - --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 \ + --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 # via flake8 pyotp==2.3.0 \ --hash=sha256:c88f37fd47541a580b744b42136f387cdad481b560ef410c0d85c957eb2a2bc0 \ - --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 \ + --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 # via -r dev-requirements.in pyparsing==2.4.6 \ --hash=sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f \ - --hash=sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec \ + --hash=sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec # via packaging pytest-cov==2.8.1 \ --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ - --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 \ + --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 # via -r dev-requirements.in pytest-mock==2.0.0 \ --hash=sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f \ - --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 \ + --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 # via -r dev-requirements.in pytest==5.3.5 \ --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ - --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 \ - # via -r dev-requirements.in, pytest-cov, pytest-mock + --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 + # via + # -r dev-requirements.in + # pytest-cov + # pytest-mock pyyaml==5.3.1 \ --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ @@ -187,8 +202,10 @@ pyyaml==5.3.1 \ --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a \ - # via -r dev-requirements.in, vcrpy + --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a + # via + # -r dev-requirements.in + # vcrpy regex==2020.5.14 \ --hash=sha256:1386e75c9d1574f6aa2e4eb5355374c8e55f9aac97e224a8a5a6abded0f9c927 \ --hash=sha256:27ff7325b297fb6e5ebb70d10437592433601c423f5acf86e5bc1ee2919b9561 \ @@ -210,19 +227,22 @@ regex==2020.5.14 \ --hash=sha256:d466967ac8e45244b9dfe302bbe5e3337f8dc4dec8d7d10f5e950d83b140d33a \ --hash=sha256:d881c2e657c51d89f02ae4c21d9adbef76b8325fe4d5cf0e9ad62f850f3a98fd \ --hash=sha256:e565569fc28e3ba3e475ec344d87ed3cd8ba2d575335359749298a0899fe122e \ - --hash=sha256:ea55b80eb0d1c3f1d8d784264a6764f931e172480a2f1868f2536444c5f01e01 \ + --hash=sha256:ea55b80eb0d1c3f1d8d784264a6764f931e172480a2f1868f2536444c5f01e01 # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in six==1.14.0 \ --hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a \ - --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c \ - # via packaging, pip-tools, vcrpy + --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c + # via + # packaging + # pip-tools + # vcrpy toml==0.10.1 \ --hash=sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f \ - --hash=sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88 \ + --hash=sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88 # via black typed-ast==1.4.1 \ --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ @@ -245,27 +265,31 @@ typed-ast==1.4.1 \ --hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \ --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ - --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \ - # via black, mypy + --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 + # via + # black + # mypy typing-extensions==3.7.4.1 \ --hash=sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2 \ --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ - --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 \ + --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 # via mypy urllib3==1.25.10 \ --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ - # via -r requirements.in, requests + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 + # via + # -r requirements.in + # requests vcrpy==4.0.2 \ --hash=sha256:9740c5b1b63626ec55cefb415259a2c77ce00751e97b0f7f214037baaf13c7bf \ - --hash=sha256:c4ddf1b92c8a431901c56a1738a2c797d965165a96348a26f4b2bbc5fa6d36d9 \ + --hash=sha256:c4ddf1b92c8a431901c56a1738a2c797d965165a96348a26f4b2bbc5fa6d36d9 # via -r dev-requirements.in wcwidth==0.1.8 \ --hash=sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603 \ - --hash=sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8 \ + --hash=sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8 # via pytest wrapt==1.11.2 \ - --hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 \ + --hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 # via vcrpy yarl==1.4.2 \ --hash=sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce \ @@ -284,11 +308,11 @@ yarl==1.4.2 \ --hash=sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a \ --hash=sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b \ --hash=sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080 \ - --hash=sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2 \ + --hash=sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2 # via vcrpy zipp==2.2.0 \ --hash=sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50 \ - --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e \ + --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e # via importlib-metadata # WARNING: The following packages were not pinned, but pip requires them to be From 0329232f1457eebaf07c50d9cce5b31edce3bf20 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Wed, 6 Jan 2021 14:44:45 +0530 Subject: [PATCH 420/751] Uses new reproducible wheels from our builds The new wheels are coming in the following PR: https://github.com/freedomofpress/securedrop-debian-packaging/pull/213 These wheels are reproducible, you can build them following our Makefile. --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index af566a319..b9813f49e 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -1 +1 @@ -redis==3.3.11 --hash=sha256:022f124431ae16ee3a3a69c8016e3e2b057b4f4e0bfa7787b6271d893890c3cc +redis==3.3.11 --hash=sha256:974926675d246ade47a101e305596a0f50282a405a03b7173a70d99c79e6370c From 28356891da6a2ea409c70af762699e01b306b410 Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 2 Mar 2021 15:54:03 -0500 Subject: [PATCH 421/751] Updates PyYAML to 5.4.1 Addresses CVE-2020-14343 --- dev-requirements.in | 2 +- dev-requirements.txt | 34 ++++++++++++++++++++++------------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/dev-requirements.in b/dev-requirements.in index a284a5db3..5534f0d56 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -8,6 +8,6 @@ pyotp pytest pytest-cov vcrpy -pyyaml>=5.3.1,<6 +pyyaml>=5.4.1,<6 pytest-mock pip-tools>=5.0.0 diff --git a/dev-requirements.txt b/dev-requirements.txt index cd840e708..07a7d81f2 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -191,18 +191,28 @@ pytest==5.3.5 \ # -r dev-requirements.in # pytest-cov # pytest-mock -pyyaml==5.3.1 \ - --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ - --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ - --hash=sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2 \ - --hash=sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648 \ - --hash=sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf \ - --hash=sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f \ - --hash=sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2 \ - --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ - --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ - --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a +pyyaml==5.4.1 \ + --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ + --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ + --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ + --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ + --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ + --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ + --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ + --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ + --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ + --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ + --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ + --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ + --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ + --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ + --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc # via # -r dev-requirements.in # vcrpy From f43623fd78f389ddf71ce729ce1db04c41ee27f5 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 12 Mar 2021 14:23:00 -0800 Subject: [PATCH 422/751] add tests, semgrep and some rulez Signed-off-by: Allie Crevier --- .flake8 | 2 +- .semgrep/custom-rules.yaml | 99 +++++++++++++++++++++++ Makefile | 15 ++++ test-requirements.in | 1 + test-requirements.txt | 157 +++++++++++++++++++++++++++++++------ tests/test_export.py | 127 +++++++++++++++++++++++++++++- 6 files changed, 373 insertions(+), 28 deletions(-) create mode 100644 .semgrep/custom-rules.yaml diff --git a/.flake8 b/.flake8 index 61d908155..7da1f9608 100644 --- a/.flake8 +++ b/.flake8 @@ -1,2 +1,2 @@ [flake8] -max-line-length = 99 +max-line-length = 100 diff --git a/.semgrep/custom-rules.yaml b/.semgrep/custom-rules.yaml new file mode 100644 index 000000000..6793bb298 --- /dev/null +++ b/.semgrep/custom-rules.yaml @@ -0,0 +1,99 @@ +rules: + +- id: tarfile-extractall-traversal + languages: + - python + severity: ERROR + message: Possible path traversal through tarfile.open($PATH).extractall() if the source tar is controlled by an attacker. + patterns: + - pattern: "....extractall(...)" + - pattern-not-inside: | + def safe_extractall(...): + ... + +- id: tarfile-extract-traversal + languages: + - python + severity: ERROR + message: Possible path traversal through tarfile.open($PATH).extract() if the source tar is controlled by an attacker. + patterns: + - pattern: "....extract(...)" + +- id: gzip-extract-traversal + languages: + - python + severity: ERROR + message: Possible path traversal through gzip.open if the source zip file is controlled by an attacker. + patterns: + - pattern: | + with gzip.open(...) as $IN, open(...) as $OUT: + ... + copyfileobj(...) + +- id: gzip-open-insecure + languages: + - python + severity: ERROR + message: Possible path traversal through gzip.open if the source zip file is controlled by an attacker. + patterns: + - pattern: | + with gzip.open(...) as $IN, open(...) as $OUT: + ... + - pattern-not-inside: | + def safe_gzip_extract(...): + ... + +- id: mkdir-insecure + languages: + - python + severity: ERROR + message: Possible path traversal or insecure directory and file permissions through os.mkdir(). Use securedrop_export.utils.safe_mkdir instead. + patterns: + - pattern: "....mkdir(...)" + - pattern-not-inside: | + def safe_mkdir(...): + ... + +- id: makedirs-insecure + languages: + - python + severity: ERROR + message: Possible path traversal or insecure directory and file permissions through os.makedirs(). Use securedrop_export.utils.safe_mkdir instead. + patterns: + - pattern: "....makedirs(...)" + - pattern-not-inside: | + def safe_mkdir(...): + ... + +- id: copy-insecure + languages: + - python + severity: ERROR + message: Possible path traversal or insecure directory and file permissions through shutil.copy(). Use securedrop_export.utils.safe_copy instead. + patterns: + - pattern: "....shutil.copy(...)" + - pattern-not-inside: | + def safe_copy(...): + ... + +- id: copyfileobj-insecure + languages: + - python + severity: ERROR + message: Possible path traversal or insecure directory and file permissions through shutil.copyfileobj(). Use securedrop_export.utils.safe_copyfileobj instead. + patterns: + - pattern: "....shutil.copyfileobj(...)" + - pattern-not-inside: | + def safe_copyfileobj(...): + ... + +- id: move-insecure + languages: + - python + severity: ERROR + message: Possible path traversal or insecure directory and file permissions through shutil.move(). Use securedrop_export.utils.safe_move instead. + patterns: + - pattern: "....shutil.move(...)" + - pattern-not-inside: | + def safe_move(...): + ... diff --git a/Makefile b/Makefile index 762c42ec9..153924c04 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,21 @@ test: ## Run tests lint: ## Run linter flake8 securedrop_export/ tests/ +SEMGREP_FLAGS := --exclude "tests/" --error --strict --verbose + +.PHONY: semgrep +semgrep:semgrep-community semgrep-local + +.PHONY: semgrep-community +semgrep-community: + @echo "Running semgrep with semgrep.dev community rules..." + @semgrep $(SEMGREP_FLAGS) --config "p/r2c-security-audit" --config "p/r2c-ci" + +.PHONY: semgrep-local +semgrep-local: + @echo "Running semgrep with local rules..." + @semgrep $(SEMGREP_FLAGS) --config ".semgrep" + # Explaination of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets diff --git a/test-requirements.in b/test-requirements.in index 6a68d166f..305ef7cbc 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -4,3 +4,4 @@ pip-tools pytest pytest-cov pytest-mock +semgrep==0.42.0 diff --git a/test-requirements.txt b/test-requirements.txt index e18ef566f..8225364f0 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -6,16 +6,31 @@ # atomicwrites==1.3.0 \ --hash=sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4 \ - --hash=sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6 \ - # via pytest -attrs==19.1.0 \ - --hash=sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79 \ - --hash=sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399 \ + --hash=sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6 # via pytest +attrs==20.3.0 \ + --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ + --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 + # via + # jsonschema + # pytest + # semgrep +certifi==2020.12.5 \ + --hash=sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c \ + --hash=sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830 + # via requests +chardet==4.0.0 \ + --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \ + --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 + # via requests click==7.0 \ --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ - --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ + --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 # via pip-tools +colorama==0.4.4 \ + --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ + --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 + # via semgrep coverage==4.5.4 \ --hash=sha256:08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6 \ --hash=sha256:0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650 \ @@ -48,76 +63,168 @@ coverage==4.5.4 \ --hash=sha256:ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c \ --hash=sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7 \ --hash=sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0 \ - --hash=sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025 \ + --hash=sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025 # via pytest-cov entrypoints==0.3 \ --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ - --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 \ + --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 # via flake8 flake8==3.7.8 \ --hash=sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548 \ --hash=sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696 + # via -r test-requirements.in +idna==2.10 \ + --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ + --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 + # via requests importlib-metadata==0.18 \ --hash=sha256:6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7 \ - --hash=sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db \ - # via pluggy, pytest + --hash=sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db + # via + # jsonschema + # pluggy + # pytest +jsonschema==3.2.0 \ + --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ + --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a + # via semgrep +junit-xml==1.9 \ + --hash=sha256:ec5ca1a55aefdd76d28fcc0b135251d156c7106fa979686a4b48d62b761b4732 + # via semgrep mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 more-itertools==5.0.0 \ --hash=sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4 \ --hash=sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc \ - --hash=sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9 \ - # via pytest -packaging==19.0 \ - --hash=sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af \ - --hash=sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3 \ + --hash=sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9 # via pytest +packaging==20.9 \ + --hash=sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5 \ + --hash=sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a + # via + # pytest + # semgrep pathlib2==2.3.5 \ --hash=sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db \ --hash=sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868 + # via -r test-requirements.in pip-tools==4.2.0 \ --hash=sha256:123174aabf7f4a63dd6e0bfc8aeeb5eaddbecb75a41e9f0dd4c447b1f2de14f7 \ --hash=sha256:5427ea4dcc175649723985fbcace9b2d8f46f9adbcc63bc2d7b247d9bcc74917 + # via -r test-requirements.in pluggy==0.12.0 \ --hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \ - --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c \ + --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c # via pytest py==1.8.0 \ --hash=sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa \ - --hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53 \ + --hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53 # via pytest pycodestyle==2.5.0 \ --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ - --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c \ + --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c # via flake8 pyflakes==2.1.1 \ --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ - --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 \ + --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 # via flake8 pyparsing==2.4.1.1 \ --hash=sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580 \ - --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 \ + --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 # via packaging +pyrsistent==0.17.3 \ + --hash=sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e + # via jsonschema pytest-cov==2.8.1 \ --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 + # via -r test-requirements.in pytest-mock==1.12.1 \ --hash=sha256:96a0cebc66e09930be2a15b03333d90b59584d3fb011924f81c14b50ee0afbba \ --hash=sha256:e5381be2608e49547f5e47633c5f81241ebf6206d17ce516a7a18d5a917e3859 + # via -r test-requirements.in pytest==4.6.4 \ --hash=sha256:6aa9bc2f6f6504d7949e9df2a756739ca06e58ffda19b5e53c725f7b03fb4aae \ --hash=sha256:b77ae6f2d1a760760902a7676887b665c086f71e3461c64ed2a312afcedc00d6 + # via + # -r test-requirements.in + # pytest-cov + # pytest-mock +requests==2.25.1 \ + --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ + --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e + # via semgrep +ruamel.yaml.clib==0.2.2 \ + --hash=sha256:058a1cc3df2a8aecc12f983a48bda99315cebf55a3b3a5463e37bb599b05727b \ + --hash=sha256:1236df55e0f73cd138c0eca074ee086136c3f16a97c2ac719032c050f7e0622f \ + --hash=sha256:1f8c0a4577c0e6c99d208de5c4d3fd8aceed9574bb154d7a2b21c16bb924154c \ + --hash=sha256:2602e91bd5c1b874d6f93d3086f9830f3e907c543c7672cf293a97c3fabdcd91 \ + --hash=sha256:28116f204103cb3a108dfd37668f20abe6e3cafd0d3fd40dba126c732457b3cc \ + --hash=sha256:2d24bd98af676f4990c4d715bcdc2a60b19c56a3fb3a763164d2d8ca0e806ba7 \ + --hash=sha256:2fd336a5c6415c82e2deb40d08c222087febe0aebe520f4d21910629018ab0f3 \ + --hash=sha256:30dca9bbcbb1cc858717438218d11eafb78666759e5094dd767468c0d577a7e7 \ + --hash=sha256:44c7b0498c39f27795224438f1a6be6c5352f82cb887bc33d962c3a3acc00df6 \ + --hash=sha256:464e66a04e740d754170be5e740657a3b3b6d2bcc567f0c3437879a6e6087ff6 \ + --hash=sha256:46d6d20815064e8bb023ea8628cfb7402c0f0e83de2c2227a88097e239a7dffd \ + --hash=sha256:4df5019e7783d14b79217ad9c56edf1ba7485d614ad5a385d1b3c768635c81c0 \ + --hash=sha256:4e52c96ca66de04be42ea2278012a2342d89f5e82b4512fb6fb7134e377e2e62 \ + --hash=sha256:5254af7d8bdf4d5484c089f929cb7f5bafa59b4f01d4f48adda4be41e6d29f99 \ + --hash=sha256:52ae5739e4b5d6317b52f5b040b1b6639e8af68a5b8fd606a8b08658fbd0cab5 \ + --hash=sha256:53b9dd1abd70e257a6e32f934ebc482dac5edb8c93e23deb663eac724c30b026 \ + --hash=sha256:6c0a5dc52fc74eb87c67374a4e554d4761fd42a4d01390b7e868b30d21f4b8bb \ + --hash=sha256:73b3d43e04cc4b228fa6fa5d796409ece6fcb53a6c270eb2048109cbcbc3b9c2 \ + --hash=sha256:74161d827407f4db9072011adcfb825b5258a5ccb3d2cd518dd6c9edea9e30f1 \ + --hash=sha256:75f0ee6839532e52a3a53f80ce64925ed4aed697dd3fa890c4c918f3304bd4f4 \ + --hash=sha256:839dd72545ef7ba78fd2aa1a5dd07b33696adf3e68fae7f31327161c1093001b \ + --hash=sha256:8be05be57dc5c7b4a0b24edcaa2f7275866d9c907725226cdde46da09367d923 \ + --hash=sha256:8e8fd0a22c9d92af3a34f91e8a2594eeb35cba90ab643c5e0e643567dc8be43e \ + --hash=sha256:a873e4d4954f865dcb60bdc4914af7eaae48fb56b60ed6daa1d6251c72f5337c \ + --hash=sha256:ab845f1f51f7eb750a78937be9f79baea4a42c7960f5a94dde34e69f3cce1988 \ + --hash=sha256:b1e981fe1aff1fd11627f531524826a4dcc1f26c726235a52fcb62ded27d150f \ + --hash=sha256:b4b0d31f2052b3f9f9b5327024dc629a253a83d8649d4734ca7f35b60ec3e9e5 \ + --hash=sha256:c6ac7e45367b1317e56f1461719c853fd6825226f45b835df7436bb04031fd8a \ + --hash=sha256:daf21aa33ee9b351f66deed30a3d450ab55c14242cfdfcd377798e2c0d25c9f1 \ + --hash=sha256:e9f7d1d8c26a6a12c23421061f9022bb62704e38211fe375c645485f38df34a2 \ + --hash=sha256:f6061a31880c1ed6b6ce341215336e2f3d0c1deccd84957b6fa8ca474b41e89f + # via ruamel.yaml +ruamel.yaml==0.16.10 \ + --hash=sha256:0962fd7999e064c4865f96fb1e23079075f4a2a14849bcdc5cdba53a24f9759b \ + --hash=sha256:099c644a778bf72ffa00524f78dd0b6476bca94a1da344130f4bf3381ce5b954 + # via semgrep +semgrep==0.42.0 \ + --hash=sha256:179741ce6f8f6785d048af5402bb2452a8771d4282f8aa7cb6852a5adad79fe8 \ + --hash=sha256:376b7a25817a24b32302f49656ea0ddcb2e535de2b05fdf42646f0bd4f33957e \ + --hash=sha256:e50ac0028b98f344166d2464853009837aed9abe669deac93fec04b677b97d2c + # via -r test-requirements.in six==1.12.0 \ --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ - --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \ - # via more-itertools, packaging, pathlib2, pip-tools, pytest + --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 + # via + # jsonschema + # junit-xml + # more-itertools + # pathlib2 + # pip-tools + # pytest +tqdm==4.59.0 \ + --hash=sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7 \ + --hash=sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33 + # via semgrep +urllib3==1.26.3 \ + --hash=sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80 \ + --hash=sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73 + # via requests wcwidth==0.1.7 \ --hash=sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e \ - --hash=sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c \ + --hash=sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c # via pytest zipp==0.5.2 \ --hash=sha256:4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a \ - --hash=sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec \ + --hash=sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec # via importlib-metadata + +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. +# setuptools diff --git a/tests/test_export.py b/tests/test_export.py index a161e75ed..ec6df0a69 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -1,8 +1,12 @@ import os -import pytest import subprocess # noqa: F401 import tempfile +import json +import pytest +import tarfile +from io import BytesIO + from securedrop_export import export TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") @@ -10,8 +14,127 @@ ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") -def test_exit_gracefully_no_exception(capsys): +def test_extract_tarball(): + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + content = b"test" + file_info = tarfile.TarInfo("some/dirs/file.txt") + file_info.size = len(content) + file_info.mode = 0o777 + archive.addfile(file_info, BytesIO(content)) + + dir_info = tarfile.TarInfo("some") + dir_info.type = tarfile.DIRTYPE + dir_info.mode = 0o777 + archive.addfile(dir_info) + + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" + + submission.extract_tarball() + + extracted_file_path = os.path.join(submission.tmpdir, "some", "dirs", "file.txt") + assert os.path.exists(extracted_file_path) + assert oct(os.stat(extracted_file_path).st_mode) == "0o100600" + + # Subdirectories that are added as members are extracted with 700 permissions + assert oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" + # Subdirectories that are not added as members are extracted with 700 permissions + # because os.umask(0o077) is set in the SDExport constructor. + assert oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) == "0o40700" + + +def test_extract_tarball_with_symlink(): + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + symlink_info = tarfile.TarInfo("symlink") + symlink_info.type = tarfile.SYMTYPE + symlink_info.linkname = "file" + archive.addfile(symlink_info) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" + + submission.extract_tarball() + + symlink_path = os.path.join(submission.tmpdir, "symlink") + assert os.path.islink(symlink_path) + + +def test_extract_tarball_raises_if_doing_path_traversal(): + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + content = b"test" + traversed_file_info = tarfile.TarInfo("../../../../../../../../../tmp/traversed") + traversed_file_info.size = len(content) + archive.addfile(traversed_file_info, BytesIO(content)) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/traversed') + assert not os.path.exists(os.path.join(submission.tmpdir, "tmp", "traversed")) + + +def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): + """ + This is a contrived path-traversal check because /tmp/traversed2 would have to be created as + another tafile member, so it would be extracted to the extraction path and not to /tmp. + However, it allows us to test that we raise if there is a path traversal attempt via a symlink. + """ + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + content = b"test" + symlink_info = tarfile.TarInfo("symlink") + symlink_info.size = len(content) + symlink_info.type = tarfile.SYMTYPE + symlink_info.linkname = "../../../../../../../../../tmp/traversed2" + archive.addfile(symlink_info, BytesIO(content)) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists(os.path.join(submission.tmpdir, "symlink")) + +def test_exit_gracefully_no_exception(capsys): submission = export.SDExport("testfile", TEST_CONFIG) test_msg = 'test' From 569bd56e2a87d6421ff66df55f72ebb94bcea36d Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 16 Mar 2021 14:47:20 -0700 Subject: [PATCH 423/751] ensure minimal perms and validate target path --- securedrop_export/entrypoint.py | 10 ++- securedrop_export/export.py | 13 +-- securedrop_export/utils.py | 147 ++++++++++++++++++++++++++++++++ 3 files changed, 161 insertions(+), 9 deletions(-) create mode 100644 securedrop_export/utils.py diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index a34c6dd25..b82e8e3bc 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -8,9 +8,12 @@ from securedrop_export import __version__ from securedrop_export import export from securedrop_export import main +from securedrop_export.utils import safe_mkdir CONFIG_PATH = "/etc/sd-export-config.json" DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") +LOG_DIR_NAME = "logs" +EXPORT_LOG_FILENAME = "export.log" logger = logging.getLogger(__name__) @@ -19,11 +22,10 @@ def configure_logging(): """ All logging related settings are set up by this function. """ - log_folder = os.path.join(DEFAULT_HOME, 'logs') - if not os.path.exists(log_folder): - os.makedirs(log_folder) + safe_mkdir(DEFAULT_HOME) + safe_mkdir(DEFAULT_HOME, LOG_DIR_NAME) - log_file = os.path.join(DEFAULT_HOME, 'logs', 'export.log') + log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) # set logging format log_fmt = ('%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) ' diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 814a034df..ab3bf45f2 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -8,10 +8,10 @@ import shutil import subprocess import sys -import tarfile import tempfile from securedrop_export.exceptions import ExportStatus +from securedrop_export.utils import safe_extractall logger = logging.getLogger(__name__) @@ -78,6 +78,7 @@ def is_valid(self): class SDExport(object): def __init__(self, archive, config_path): + os.umask(0o077) self.archive = archive self.submission_dirname = os.path.basename(self.archive).split(".")[0] self.target_dirname = "sd-export-{}".format( @@ -87,10 +88,12 @@ def __init__(self, archive, config_path): def extract_tarball(self): try: - logger.info('Extracting tarball {} into {}'.format(self.archive, self.tmpdir)) - with tarfile.open(self.archive) as tar: - tar.extractall(self.tmpdir) - except Exception: + logger.info( + "Extracting tarball {} into {}".format(self.archive, self.tmpdir) + ) + safe_extractall(self.archive, self.tmpdir, self.tmpdir) + except Exception as ex: + logger.error("Unable to extract tarball: {}".format(ex)) self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) def exit_gracefully(self, msg, e=False): diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py new file mode 100644 index 000000000..bd219a4fc --- /dev/null +++ b/securedrop_export/utils.py @@ -0,0 +1,147 @@ +import os +import tarfile +from pathlib import Path +from typing import Optional, Union + + +def safe_mkdir( + base_path: Union[Path, str], + relative_path: Union[Optional[Path], Optional[str]] = None, +) -> None: + """ + Safely create directories with restricted 700 permissions inside the base_path directory. The + caller of this function should ensure that base_path comes from a hard-coded string. + + Raises FileNotFoundError if base_path does not already exist or requires more than one new dir + Raises RuntimeError if any dir in relative_path or the last dir of base_path have insecure perms + Raises ValueError if any of the following conditions is true: + * base_dir fails path traversal check, e.g. "/home/../traversed" fails check + * the resolved relative_path is not a subdirectory of base_path + * a child directory in relative_path already exists with permissions other than 700 + """ + base_path = Path(base_path) + if not base_path.is_absolute(): + raise ValueError(f"Base directory '{base_path}' must be an absolute path") + + check_path_traversal(base_path) + + if relative_path: + check_path_traversal(relative_path) + full_path = base_path.joinpath(relative_path) + else: + full_path = base_path + + # Create each parent directory, including base_path, first. + # + # Note: We do not use parents=True because the parent directories will not be created with the + # specified mode. Parents are created using system default permissions, which we modify to be + # 700 via os.umask in the SDExport contructor. Creating directories one-by-one with mode=0o0700 + # is not necessary but adds defense in depth. + relative_path = relative_filepath(full_path, base_path) + for parent in reversed(relative_path.parents): + base_path.joinpath(parent).mkdir(mode=0o0700, exist_ok=True) + + # Now create the full_path directory. + full_path.mkdir(mode=0o0700, exist_ok=True) + + # Check permissions after creating the directories + check_all_permissions(relative_path, base_path) + + +def safe_extractall(archive_file_path: str, dest_path: str, base_path: str) -> None: + """ + Safely extract a file specified by archive_file_path to dest_path. + """ + safe_mkdir(base_path, dest_path) + + with tarfile.open(archive_file_path) as tar: + # Tarfile types include: + # + # FIFO special file (a named pipe) + # Regular file + # Directory + # Symbolic link + # Hard link + # Block device + # Character device + for file_info in tar.getmembers(): + file_info.mode = 0o600 + if file_info.isdir(): + file_info.mode = 0o700 + elif file_info.islnk() or file_info.issym(): + check_path_traversal(file_info.linkname) + else: + check_path_traversal(file_info.name) + + tar.extractall(dest_path) + + +def relative_filepath(filepath: Union[str, Path], base_dir: Union[str, Path]) -> Path: + """ + Raise ValueError if the filepath is not relative to the supplied base_dir or if base_dir is not + an absolute path. + + Note: resolve() will also resolve symlinks, so a symlink such as /tmp/tmp1a2s3d4f/innocent + that points to ../../../../../tmp/traversed will raise a ValueError if the base_dir is the + expected /tmp/tmp1a2s3d4f. + """ + return Path(filepath).resolve().relative_to(base_dir) + + +def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: + """ + Raise ValueError if filename_or_filepath does any path traversal. This works on filenames, + relative paths, and absolute paths. + """ + filename_or_filepath = Path(filename_or_filepath) + if filename_or_filepath.is_absolute(): + base_path = filename_or_filepath + else: + base_path = Path().resolve() + + try: + relative_path = relative_filepath(filename_or_filepath, base_path) + + # One last check just to cover "weird/../traversals" that may not traverse past the relative + # base, but can still have harmful side effects to the application. If this kind of + # traversal is needed, then call relative_filepath instead in order to check that the + # desired traversal does not go past a safe base directory. + if ( + relative_path != filename_or_filepath + and not filename_or_filepath.is_absolute() + ): + raise ValueError + except ValueError: + raise ValueError(f"Unsafe file or directory name: '{filename_or_filepath}'") + + +def check_all_permissions(path: Union[str, Path], base_path: Union[str, Path]) -> None: + """ + Check that the permissions of each directory between base_path and path are set to 700. + """ + base_path = Path(base_path) + full_path = base_path.joinpath(path) + if not full_path.exists(): + return + + Path(full_path).chmod(0o700) + check_dir_permissions(full_path) + + relative_path = relative_filepath(full_path, base_path) + for parent in relative_path.parents: + full_path = base_path.joinpath(parent) + Path(full_path).chmod(0o700) + check_dir_permissions(str(full_path)) + + +def check_dir_permissions(dir_path: Union[str, Path]) -> None: + """ + Check that a directory has ``700`` as the final 3 bytes. Raises a ``RuntimeError`` otherwise. + """ + if os.path.exists(dir_path): + stat_res = os.stat(dir_path).st_mode + masked = stat_res & 0o777 + if masked & 0o077: + raise RuntimeError( + "Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path) + ) From a47574ef58034c060697eb2dc3fc33f4e0f93c2a Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 16 Mar 2021 15:10:48 -0700 Subject: [PATCH 424/751] update ci image --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d4fb3a49f..1bba7c98a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,7 +61,7 @@ version: 2 jobs: lint: docker: - - image: circleci/python:3.5 + - image: circleci/python:3.7 steps: - checkout - run: From 03c1640a70e18e07fa4c09cfe36336582986fe83 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 16 Mar 2021 15:28:06 -0700 Subject: [PATCH 425/751] Updates "py" test dependency to 1.9.0 Closes #68. --- test-requirements.in | 1 + test-requirements.txt | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test-requirements.in b/test-requirements.in index 305ef7cbc..024c0a86a 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -1,6 +1,7 @@ flake8 pathlib2 # required by pytest for python 3.5 pip-tools +py>=1.9.0 pytest pytest-cov pytest-mock diff --git a/test-requirements.txt b/test-requirements.txt index 8225364f0..107e041fc 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -118,10 +118,9 @@ pluggy==0.12.0 \ --hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \ --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c # via pytest -py==1.8.0 \ - --hash=sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa \ - --hash=sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53 - # via pytest +py==1.10.0 \ + --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ + --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a pycodestyle==2.5.0 \ --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c From 9e717f07ee1e46de2261b4009b7ea3ce3306bdba Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 16 Mar 2021 15:24:26 -0700 Subject: [PATCH 426/751] Bumps version 0.2.4 -> 0.2.5 --- changelog.md | 3 +++ securedrop_export/VERSION | 2 +- securedrop_export/__init__.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index b443f7f94..0b31003fa 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 0.2.5 + * Sets restrictive permissions, validates target paths + ## 0.2.4 * Removes mimetype associations and open-in-dvm desktop file diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index abd410582..3a4036fb4 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.4 +0.2.5 diff --git a/securedrop_export/__init__.py b/securedrop_export/__init__.py index 10939f01b..13a85f774 100644 --- a/securedrop_export/__init__.py +++ b/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = '0.1.2' +__version__ = '0.2.5' From b683bdb8e413df6dd8b3c6508dd543e90acce2ea Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 2 Mar 2021 16:09:10 -0500 Subject: [PATCH 427/751] Update PyYAML to 5.4.1 Addresses CVE-2020-14343 --- dev-requirements.txt | 34 ++++++++++++++++++++++------------ requirements.in | 2 +- requirements.txt | 34 ++++++++++++++++++++++------------ 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 2bdc0745f..daa7e02d9 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -152,18 +152,28 @@ pyflakes==2.0.0 \ --hash=sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49 \ --hash=sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae \ # via -r dev-requirements.in, flake8 -pyyaml==5.3.1 \ - --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ - --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ - --hash=sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2 \ - --hash=sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648 \ - --hash=sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf \ - --hash=sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f \ - --hash=sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2 \ - --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ - --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ - --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a \ +pyyaml==5.4.1 \ + --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ + --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ + --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ + --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ + --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ + --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ + --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ + --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ + --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ + --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ + --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ + --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ + --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ + --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ + --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ # via -r requirements.in, vcrpy regex==2020.1.8 \ --hash=sha256:07b39bf943d3d2fe63d46281d8504f8df0ff3fe4c57e13d1656737950e53e525 \ diff --git a/requirements.in b/requirements.in index ba72056e0..8aa528ea4 100644 --- a/requirements.in +++ b/requirements.in @@ -3,7 +3,7 @@ chardet==3.0.4 furl==2.0.0 idna==2.7 orderedmultidict==1.0 -PyYAML==5.3.1 +PyYAML==5.4.1 six==1.11.0 requests==2.22.0 urllib3>=1.25.10 diff --git a/requirements.txt b/requirements.txt index a61eb958b..4b2f9fbe2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,18 +24,28 @@ orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 \ # via -r requirements.in, furl -pyyaml==5.3.1 \ - --hash=sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97 \ - --hash=sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76 \ - --hash=sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2 \ - --hash=sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648 \ - --hash=sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf \ - --hash=sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f \ - --hash=sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2 \ - --hash=sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee \ - --hash=sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d \ - --hash=sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c \ - --hash=sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a \ +pyyaml==5.4.1 \ + --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ + --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ + --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ + --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ + --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ + --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ + --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ + --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ + --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ + --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ + --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ + --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ + --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ + --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ + --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ # via -r requirements.in requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ From 2bd058f7bb039e802bfb9171db5a678bb3b0f9fc Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 2 Mar 2021 17:00:21 -0500 Subject: [PATCH 428/751] Adds locally build PyYAML 5.4.1 wheel from securedrop-debian-packaging --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index 509f24abc..c5c3c27cd 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -3,7 +3,7 @@ chardet==3.0.4 --hash=sha256:e5cf39014befb85add77118fdc946f0a3387df7840235ba5d20 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==2.7 --hash=sha256:a967a752dba5492be34f30f8633cee512d2ec923fe3a2e201d87353b540d2955 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f -pyyaml==5.3.1 --hash=sha256:ff021f812a5dbaeb10678462952bb447bf6b322ab54923f5591811056a827c15 +pyyaml==5.4.1 --hash=sha256:c2ab2737721fe6f5545fa830312fe7b77e74932c8bbd780a17a3d7df2ff65f99 requests==2.22.0 --hash=sha256:83ddbb326afd5524e7fbca582fd9673103652ea3b0c6601ac5ba1a4501f077c9 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.25.10 --hash=sha256:c78fdeffd1a01640ea99d35851539a4bc91e46a672989c4d96663e3808121389 From a5da1db19d70bb6059e359e1300d5bbe05ea3e9a Mon Sep 17 00:00:00 2001 From: mickael e Date: Tue, 2 Mar 2021 17:24:33 -0500 Subject: [PATCH 429/751] Adds nightly CI run --- .circleci/config.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index dedca8c84..7b2d242fb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -77,3 +77,15 @@ workflows: jobs: - test-buster - build-buster + + nightly: + triggers: + - schedule: + cron: "0 6 * * *" + filters: + branches: + only: + - main + jobs: + - test-buster + - build-buster From d6787c7cc7a0890a3d21c7a948ab708ce6b39510 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 23 Mar 2021 14:59:54 -0700 Subject: [PATCH 430/751] validate paths for all tarfile types --- securedrop_export/export.py | 2 +- securedrop_export/utils.py | 22 ++-- tests/test_export.py | 234 +++++++++++++++++++++++++++++++++++- 3 files changed, 242 insertions(+), 16 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index ab3bf45f2..1f8274037 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -91,7 +91,7 @@ def extract_tarball(self): logger.info( "Extracting tarball {} into {}".format(self.archive, self.tmpdir) ) - safe_extractall(self.archive, self.tmpdir, self.tmpdir) + safe_extractall(self.archive, self.tmpdir) except Exception as ex: logger.error("Unable to extract tarball: {}".format(ex)) self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py index bd219a4fc..8aeaba86e 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/utils.py @@ -48,12 +48,10 @@ def safe_mkdir( check_all_permissions(relative_path, base_path) -def safe_extractall(archive_file_path: str, dest_path: str, base_path: str) -> None: +def safe_extractall(archive_file_path: str, dest_path: str) -> None: """ Safely extract a file specified by archive_file_path to dest_path. """ - safe_mkdir(base_path, dest_path) - with tarfile.open(archive_file_path) as tar: # Tarfile types include: # @@ -65,13 +63,19 @@ def safe_extractall(archive_file_path: str, dest_path: str, base_path: str) -> N # Block device # Character device for file_info in tar.getmembers(): - file_info.mode = 0o600 - if file_info.isdir(): - file_info.mode = 0o700 - elif file_info.islnk() or file_info.issym(): + file_info.mode = 0o700 if file_info.isdir() else 0o600 + + check_path_traversal(file_info.name) + + # If the path is relative then we don't need to check that it resolves to dest_path + if Path(file_info.name).is_absolute(): + relative_filepath(file_info.name, dest_path) + + if file_info.islnk() or file_info.issym(): check_path_traversal(file_info.linkname) - else: - check_path_traversal(file_info.name) + # If the path is relative then we don't need to check that it resolves to dest_path + if Path(file_info.linkname).is_absolute(): + relative_filepath(file_info.linkname, dest_path) tar.extractall(dest_path) diff --git a/tests/test_export.py b/tests/test_export.py index ec6df0a69..b3caf17be 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -15,6 +15,9 @@ def test_extract_tarball(): + """ + Check that we can successfully extract a valid tarball. + """ with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: @@ -54,6 +57,9 @@ def test_extract_tarball(): def test_extract_tarball_with_symlink(): + """ + Check that we can successfully extract a valid tarball that contains a valid symlink. + """ with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: @@ -79,6 +85,12 @@ def test_extract_tarball_with_symlink(): def test_extract_tarball_raises_if_doing_path_traversal(): + """ + Check that we do not allow tarfile member file to do path traversal via TarInfo.name. + """ + if os.path.exists("/tmp/traversed"): + os.remove("/tmp/traversed") + with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: @@ -100,15 +112,225 @@ def test_extract_tarball_raises_if_doing_path_traversal(): submission.extract_tarball() assert not os.path.exists('/tmp/traversed') - assert not os.path.exists(os.path.join(submission.tmpdir, "tmp", "traversed")) + + +def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): + """ + Check that we do not allow tarfile member directory to do path traversal via TarInfo.name. + """ + if os.path.exists("/tmp/traversed/"): + os.rmdir("/tmp/traversed/") + + if os.path.exists("/tmp/traversed"): + os.remove("/tmp/traversed") + + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + dir_info = tarfile.TarInfo("../../../../../../../../../tmp/traversed") + dir_info.type = tarfile.DIRTYPE + dir_info.mode = 0o777 + archive.addfile(dir_info) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/traversed') def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): """ - This is a contrived path-traversal check because /tmp/traversed2 would have to be created as - another tafile member, so it would be extracted to the extraction path and not to /tmp. - However, it allows us to test that we raise if there is a path traversal attempt via a symlink. + Check that we do not allow tarfile member symlink to do path traversal via TarInfo.name. + """ + if os.path.exists("/tmp/traversed/"): + os.rmdir("/tmp/traversed/") + + if os.path.exists("/tmp/traversed"): + os.remove("/tmp/traversed") + + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + content = b"test" + symlink_info = tarfile.TarInfo("symlink") + symlink_info.size = len(content) + symlink_info.type = tarfile.SYMTYPE + symlink_info.name = "../../../../../../../../../tmp/traversed" + archive.addfile(symlink_info, BytesIO(content)) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/traversed') + + +def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): + """ + Check that we do not allow tarfile member symlink to do path traversal via TarInfo.linkname. """ + if os.path.exists("/tmp/traversed/"): + os.rmdir("/tmp/traversed/") + + if os.path.exists("/tmp/traversed"): + os.remove("/tmp/traversed") + + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + content = b"test" + symlink_info = tarfile.TarInfo("symlink") + symlink_info.size = len(content) + symlink_info.type = tarfile.SYMTYPE + symlink_info.linkname = "../../../../../../../../../tmp/traversed" + archive.addfile(symlink_info, BytesIO(content)) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/traversed') + + +def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): + """ + Check that we do not allow tarfile member file to specify an unsafe absolute path via + TarInfo.name. + """ + if os.path.exists("/tmp/unsafe"): + os.remove("/tmp/unsafe") + + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + content = b"test" + file_info = tarfile.TarInfo("/tmp/unsafe") + file_info.size = len(content) + file_info.mode = 0o777 + archive.addfile(file_info, BytesIO(content)) + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/unsafe') + + +def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): + """ + Check that we do not allow tarfile member symlink to specify an unsafe absolute path via + TarInfo.name. + """ + if os.path.exists("/tmp/unsafe"): + os.remove("/tmp/unsafe") + + tmp = tempfile.gettempdir() + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + symlink_path = os.path.join(temp_dir, "symlink") + + os.system(f"ln -s {tmp}/unsafe {symlink_path}") # create symlink to "/tmp/unsafe" + + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + archive.add(symlink_path, "symlink") + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/unsafe') + + +def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to_dir(): + """ + Check that we do not allow tarfile member symlink to specify an unsafe absolute path via + TarInfo.name. + + Note: Same test as `test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink` + but checks that symlinks to absolute directories are also caught. + """ + if os.path.exists("/tmp/unsafe"): + os.remove("/tmp/unsafe") + + tmp = tempfile.gettempdir() + with tempfile.TemporaryDirectory() as temp_dir: + archive_path = os.path.join(temp_dir, "archive.sd-export") + symlink_path = os.path.join(temp_dir, "symlink") + file_path = os.path.join(temp_dir, "unsafe") + + with open(file_path, "w") as file: + file.write("some-content") + + os.system(f"ln -s {tmp} {symlink_path}") # create symlink to "/tmp" + + with tarfile.open(archive_path, "w:gz") as archive: + metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata_str = json.dumps(metadata) + metadata_bytes = BytesIO(metadata_str.encode("utf-8")) + metadata_file_info = tarfile.TarInfo("metadata.json") + metadata_file_info.size = len(metadata_str) + archive.addfile(metadata_file_info, metadata_bytes) + archive.add(symlink_path, "symlink") + archive.add(file_path, "symlink/unsafe") + archive.close() + + submission = export.SDExport(archive_path, TEST_CONFIG) + + with pytest.raises(SystemExit): + submission.extract_tarball() + + assert not os.path.exists('/tmp/unsafe') + + +def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): + """ + Check that we do not allow tarfile member file to specify an unsafe absolute path via + TarInfo.linkname. + """ + if os.path.exists("/tmp/unsafe"): + os.remove("/tmp/unsafe") + with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: @@ -122,7 +344,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): symlink_info = tarfile.TarInfo("symlink") symlink_info.size = len(content) symlink_info.type = tarfile.SYMTYPE - symlink_info.linkname = "../../../../../../../../../tmp/traversed2" + symlink_info.linkname = "/tmp/unsafe" archive.addfile(symlink_info, BytesIO(content)) archive.close() @@ -131,7 +353,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists(os.path.join(submission.tmpdir, "symlink")) + assert not os.path.exists('/tmp/unsafe') def test_exit_gracefully_no_exception(capsys): From e6fdccd3d7a1d577aa8fc909f16e89fba7c04bd1 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 26 Mar 2021 13:32:33 -0400 Subject: [PATCH 431/751] seucredrop-export 0.2.6 --- changelog.md | 3 +++ securedrop_export/VERSION | 2 +- securedrop_export/__init__.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 0b31003fa..5653795a1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 0.2.6 + * Further validate target paths + ## 0.2.5 * Sets restrictive permissions, validates target paths diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index 3a4036fb4..53a75d673 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.5 +0.2.6 diff --git a/securedrop_export/__init__.py b/securedrop_export/__init__.py index 13a85f774..44b18069b 100644 --- a/securedrop_export/__init__.py +++ b/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = '0.2.5' +__version__ = '0.2.6' From bb2d58ac39c9e67d67b8e9dd3bfab844a74bce8d Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 5 Apr 2021 14:05:10 -0700 Subject: [PATCH 432/751] use new reproducible wheel from packaging with build --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index c5c3c27cd..fd3cc471c 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -1,7 +1,7 @@ certifi==2018.10.15 --hash=sha256:2d5538b9d89b3a9cb423b8f08417c657856cab733d560067e864157f71b1c5aa chardet==3.0.4 --hash=sha256:e5cf39014befb85add77118fdc946f0a3387df7840235ba5d20fd6e3a672410a furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc -idna==2.7 --hash=sha256:a967a752dba5492be34f30f8633cee512d2ec923fe3a2e201d87353b540d2955 +idna==2.7 --hash=sha256:69bbcd9c42b0add994610a68202532e9b327992b61344cd76e743ee592725f50 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f pyyaml==5.4.1 --hash=sha256:c2ab2737721fe6f5545fa830312fe7b77e74932c8bbd780a17a3d7df2ff65f99 requests==2.22.0 --hash=sha256:83ddbb326afd5524e7fbca582fd9673103652ea3b0c6601ac5ba1a4501f077c9 From 46618848668bddd97f444ce1e75c732f886f30fa Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Mon, 5 Apr 2021 16:50:48 -0700 Subject: [PATCH 433/751] Refresh all test requirements --- test-requirements.in | 3 + test-requirements.txt | 235 ++++++++++++++++++++++++------------------ 2 files changed, 135 insertions(+), 103 deletions(-) diff --git a/test-requirements.in b/test-requirements.in index 024c0a86a..09ef16b5d 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -1,4 +1,5 @@ flake8 +importlib-metadata # otherwise introduced unpinned via flake8 pathlib2 # required by pytest for python 3.5 pip-tools py>=1.9.0 @@ -6,3 +7,5 @@ pytest pytest-cov pytest-mock semgrep==0.42.0 +typing-extensions # otherwise introduced unpinned via importlib-metadata +zipp # otherwise introduced unpinned via pep517 (via pip-tools) diff --git a/test-requirements.txt b/test-requirements.txt index 107e041fc..610ede02e 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,12 +2,8 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --generate-hashes --output-file=test-requirements.txt test-requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=test-requirements.txt test-requirements.in # -atomicwrites==1.3.0 \ - --hash=sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4 \ - --hash=sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6 - # via pytest attrs==20.3.0 \ --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 @@ -23,67 +19,84 @@ chardet==4.0.0 \ --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \ --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 # via requests -click==7.0 \ - --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ - --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 +click==7.1.2 \ + --hash=sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a \ + --hash=sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc # via pip-tools colorama==0.4.4 \ --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 # via semgrep -coverage==4.5.4 \ - --hash=sha256:08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6 \ - --hash=sha256:0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650 \ - --hash=sha256:141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5 \ - --hash=sha256:19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d \ - --hash=sha256:23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351 \ - --hash=sha256:245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755 \ - --hash=sha256:331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef \ - --hash=sha256:386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca \ - --hash=sha256:3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca \ - --hash=sha256:60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9 \ - --hash=sha256:63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc \ - --hash=sha256:6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5 \ - --hash=sha256:6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f \ - --hash=sha256:7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe \ - --hash=sha256:826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888 \ - --hash=sha256:93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5 \ - --hash=sha256:9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce \ - --hash=sha256:af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5 \ - --hash=sha256:bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e \ - --hash=sha256:bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e \ - --hash=sha256:c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9 \ - --hash=sha256:dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437 \ - --hash=sha256:df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1 \ - --hash=sha256:e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c \ - --hash=sha256:e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24 \ - --hash=sha256:e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47 \ - --hash=sha256:eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2 \ - --hash=sha256:eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28 \ - --hash=sha256:ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c \ - --hash=sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7 \ - --hash=sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0 \ - --hash=sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025 +coverage==5.5 \ + --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \ + --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \ + --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \ + --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \ + --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \ + --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \ + --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \ + --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \ + --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \ + --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \ + --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \ + --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \ + --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \ + --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \ + --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \ + --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \ + --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \ + --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \ + --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \ + --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \ + --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \ + --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \ + --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \ + --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \ + --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \ + --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \ + --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \ + --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \ + --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \ + --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \ + --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \ + --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \ + --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \ + --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \ + --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \ + --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \ + --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \ + --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \ + --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \ + --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \ + --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \ + --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \ + --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \ + --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \ + --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \ + --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \ + --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \ + --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \ + --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \ + --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ + --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ + --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 # via pytest-cov -entrypoints==0.3 \ - --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ - --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 - # via flake8 -flake8==3.7.8 \ - --hash=sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548 \ - --hash=sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696 +flake8==3.9.0 \ + --hash=sha256:12d05ab02614b6aee8df7c36b97d1a3b2372761222b19b58621355e82acddcff \ + --hash=sha256:78873e372b12b093da7b5e5ed302e8ad9e988b38b063b61ad937f26ca58fc5f0 # via -r test-requirements.in idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests -importlib-metadata==0.18 \ - --hash=sha256:6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7 \ - --hash=sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db - # via - # jsonschema - # pluggy - # pytest +importlib-metadata==3.10.0 \ + --hash=sha256:c9db46394197244adf2f0b08ec5bc3cf16757e9590b02af1fca085c16c0d600a \ + --hash=sha256:d2d46ef77ffc85cbf7dac7e81dd663fde71c45326131bea8033b9bad42268ebe + # via -r test-requirements.in +iniconfig==1.1.1 \ + --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ + --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 + # via pytest jsonschema==3.2.0 \ --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a @@ -95,11 +108,6 @@ mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 -more-itertools==5.0.0 \ - --hash=sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4 \ - --hash=sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc \ - --hash=sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9 - # via pytest packaging==20.9 \ --hash=sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5 \ --hash=sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a @@ -110,43 +118,50 @@ pathlib2==2.3.5 \ --hash=sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db \ --hash=sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868 # via -r test-requirements.in -pip-tools==4.2.0 \ - --hash=sha256:123174aabf7f4a63dd6e0bfc8aeeb5eaddbecb75a41e9f0dd4c447b1f2de14f7 \ - --hash=sha256:5427ea4dcc175649723985fbcace9b2d8f46f9adbcc63bc2d7b247d9bcc74917 +pep517==0.10.0 \ + --hash=sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b \ + --hash=sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249 + # via pip-tools +pip-tools==6.0.1 \ + --hash=sha256:3b0c7b95e8d3dfb011bb42cb38f356fcf5d0630480462b59c4d0a112b8d90281 \ + --hash=sha256:50ec26df7710557ab574f19f7511830294999e6121b42b87473b48cb9984d788 # via -r test-requirements.in -pluggy==0.12.0 \ - --hash=sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc \ - --hash=sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c +pluggy==0.13.1 \ + --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ + --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d # via pytest py==1.10.0 \ --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a -pycodestyle==2.5.0 \ - --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ - --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c + # via + # -r test-requirements.in + # pytest +pycodestyle==2.7.0 \ + --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ + --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef # via flake8 -pyflakes==2.1.1 \ - --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ - --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 +pyflakes==2.3.1 \ + --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ + --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db # via flake8 -pyparsing==2.4.1.1 \ - --hash=sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580 \ - --hash=sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265 +pyparsing==2.4.7 \ + --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ + --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b # via packaging pyrsistent==0.17.3 \ --hash=sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e # via jsonschema -pytest-cov==2.8.1 \ - --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ - --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 +pytest-cov==2.11.1 \ + --hash=sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7 \ + --hash=sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da # via -r test-requirements.in -pytest-mock==1.12.1 \ - --hash=sha256:96a0cebc66e09930be2a15b03333d90b59584d3fb011924f81c14b50ee0afbba \ - --hash=sha256:e5381be2608e49547f5e47633c5f81241ebf6206d17ce516a7a18d5a917e3859 +pytest-mock==3.5.1 \ + --hash=sha256:379b391cfad22422ea2e252bdfc008edd08509029bcde3c25b2c0bd741e0424e \ + --hash=sha256:a1e2aba6af9560d313c642dae7e00a2a12b022b80301d9d7fc8ec6858e1dd9fc # via -r test-requirements.in -pytest==4.6.4 \ - --hash=sha256:6aa9bc2f6f6504d7949e9df2a756739ca06e58ffda19b5e53c725f7b03fb4aae \ - --hash=sha256:b77ae6f2d1a760760902a7676887b665c086f71e3461c64ed2a312afcedc00d6 +pytest==6.2.3 \ + --hash=sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634 \ + --hash=sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc # via # -r test-requirements.in # pytest-cov @@ -197,33 +212,47 @@ semgrep==0.42.0 \ --hash=sha256:376b7a25817a24b32302f49656ea0ddcb2e535de2b05fdf42646f0bd4f33957e \ --hash=sha256:e50ac0028b98f344166d2464853009837aed9abe669deac93fec04b677b97d2c # via -r test-requirements.in -six==1.12.0 \ - --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ - --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 +six==1.15.0 \ + --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ + --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced # via # jsonschema # junit-xml - # more-itertools # pathlib2 - # pip-tools +toml==0.10.2 \ + --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ + --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + # via + # pep517 # pytest tqdm==4.59.0 \ --hash=sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7 \ --hash=sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33 # via semgrep -urllib3==1.26.3 \ - --hash=sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80 \ - --hash=sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73 +typing-extensions==3.7.4.3 \ + --hash=sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918 \ + --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ + --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f + # via -r test-requirements.in +urllib3==1.26.4 \ + --hash=sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df \ + --hash=sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937 # via requests -wcwidth==0.1.7 \ - --hash=sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e \ - --hash=sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c - # via pytest -zipp==0.5.2 \ - --hash=sha256:4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a \ - --hash=sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec - # via importlib-metadata +zipp==3.4.1 \ + --hash=sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76 \ + --hash=sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098 + # via + # -r test-requirements.in + # importlib-metadata -# WARNING: The following packages were not pinned, but pip requires them to be -# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. -# setuptools +# The following packages are considered to be unsafe in a requirements file: +pip==21.0.1 \ + --hash=sha256:37fd50e056e2aed635dec96594606f0286640489b0db0ce7607f7e51890372d5 \ + --hash=sha256:99bbde183ec5ec037318e774b0d8ae0a64352fe53b2c7fd630be1d07e94f41e5 + # via pip-tools +setuptools==54.2.0 \ + --hash=sha256:aa9c24fb83a9116b8d425e53bec24c7bfdbffc313c2159f9ed036d4a6dd32d7d \ + --hash=sha256:b726461910b9ba30f077880c228bea22121aec50b172edf39eb7ff026c054a11 + # via + # jsonschema + # semgrep From b1741a303bffa8820bb5f3432b1d7d486c71f31c Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 8 Apr 2021 17:07:32 -0700 Subject: [PATCH 434/751] Replace local copy of Code of Conduct with centralized one --- CODE_OF_CONDUCT.md | 199 --------------------------------------------- README.md | 2 + 2 files changed, 2 insertions(+), 199 deletions(-) delete mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 027da3333..000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,199 +0,0 @@ -# SecureDrop Community Code of Conduct - -## Preamble - -Like the broader technical and activism communities as a whole, the SecureDrop -community is made up of a mixture of staff and volunteers from all over the world, -engaged in various activities—including operations, software -development, mentorship, and building connections with great people and -organizations. - -To work together effectively in a large, diverse and open community, we have a -few ground rules that we expect everyone to adhere to, be it paid staff and -board members, volunteers and event attendees; mentors, veterans, novices, or -those seeking help and guidance. - -This isn't an exhaustive list of things that you cannot do. Rather, take it in -the spirit in which it’s intended: a guide to make it easier to enrich all of -us and the communities in which we participate. - -This code of conduct applies to all spaces and events under the responsibility of someone who belongs to the -SecureDrop Community. This includes physical offices, GitHub repositories, online chat -systems, the Support Forum, SecureDrop hosted or sponsored events, and any other -forums created by the SecureDrop Community which are used for communication. -In addition, we take violations of this code outside these spaces into account -when determining a person's ability to participate within them. - -## Summary - -The SecureDrop Community should be a place where people feel safe and welcome. -They should enjoy participating in discussions and contributing. To these ends, -members of the community should: - -- Be friendly and patient -- Assume good faith and good intentions -- Be welcoming, considerate, and respectful -- Be careful in the words they choose -- Listen to each other, and communicate openly and honestly - -Members of the community should not: - -- Intimidate, harass, or insult each other -- Follow the letter of this Code of Conduct while disregarding its spirit - -Members of the community should not hesitate to contact the Community Moderation -and Safety Team ("Community Team") if they feel someone has violated this Code of -Conduct, or if they have questions or concerns. - -## Behavioral Guidelines - -As a member of the community, you are expected to: - -- Be friendly and patient. Your work will be used by other people, and you in - turn will depend on the work of others. Any decision you take will affect - human beings, and you should take those consequences into account when making - decisions. Remember that our community is international, and that the people - you interact with may be communicating with you in a language that is not - their native tongue. - -- Assume good faith and good intentions. Disagreements — both social and - technical — happen all the time. Our diverse backgrounds give us the ability - to see things from many different perspectives, but they can also lead to - misunderstandings. It is important that we resolve disagreements - constructively, and that we do not jump to conclusions about each other's - motives. - -- Be welcoming, considerate, and respectful. We strive to be a community that - welcomes and supports people of all backgrounds and identities. This includes, - but is not limited to, members of any race, ethnicity, culture, national - origin, color, immigration status, social and economic class, educational - level, sex, sexual orientation, gender identity and expression, age, size, - family status, political belief, religion and mental and physical ability. - -- Be careful in the words you choose. Exclusionary behavior is absolutely - unacceptable. This includes, but is not limited to: - - - Discriminatory (e.g., racist or sexist) jokes and language - - Inappropriate names for user accounts, servers, files, repositories, etc. - - Posting sexually explicit or violent material - - Personal insults - - Misgendering or deadnaming - - Unwelcome sexual attention - - Advocating for, or encouraging, any of the above behavior - -- Listen and communicate openly and honestly. Yield the floor to - others, and help to make sure that everyone gets heard. In other words, try to - be your best self. In doing so, you contribute the health and longevity of - this community. - -As a member of the SecureDrop Community, you are expected to never engage in the -following behaviors: - -- Intimidation, harassments, or insults. This includes but is not limited to: - - Physical intimidation or threats against someone's physical safety - - Obscene or intimidating gestures - - Stalking - - Demeaning another person - - Unwelcome following - - Enlisting the help of others, whether in person or online, in order to - target an individual - - Taking photographs, video, or audio recordings or recordings without consent - - Shouting - - Sustained disruption of talks and events - - Disruption of meetings - - Inappropriate physical contact - - Unwelcome sexual attention - - Posting (or threatening to post) other people's personally identifying - information ("doxing") - - Violation of people's stated personal boundaries - -- Following the letter of this Code of Conduct while disregarding its spirit. - When judging whether certain behavior represents a violation of this code, we - will consider a violation in spirit (e.g., clearly behaving in a damaging or - obnoxious manner in a way not explicitly specified) to be no different from - any other violation of this code. That includes trolling and other forms of - consistently disruptive behavior. - -## Enforcement - -We do not tolerate unacceptable behavior from any community member, and there -are no exceptions for those in positions of power such as maintainers, -sponsors, funders, or other individuals with decision making authority. -Further, people in positions of power can wield it to exacerbate the effects of -harassment and to diminish the repercussions. For these reasons, those who are -informal or formal leaders are held to a higher standard. - -Anyone asked by another community member to stop unacceptable behavior is -expected to comply immediately. However, you should not step in on someone -else's behalf without their consent. - -### How to get help - -The Community Team is made up established members of the community who -assist with resolving conflicts within the community. - -Currently the Community Team consists of: - -- Jen Helsby (`@redshiftzero`) - Principal Research Engineer - [jen@freedom.press](mailto:jen@freedom.press) -- Mickael E. (`@emkll`) - Lead Engineer - [mickael@freedom.press](mailto:mickael@freedom.press) - -You can contact the whole Community Team or members individually. - -You should contact the Community Team if you have questions or concerns about -the Code of Conduct (including improvements) or if you feel that you have -witnessed a Code of Conduct violation. In the even of a violation either -directed at yourself or someone else, please contact the Community Team as -soon as possible through whatever analog or digital medium you are most -comfortable with. - -Should your report be about any member of the Community Team or if there is a -conflict of interest, that member will recuse themselves from the conflict -resolution proceedings. They will not be involved with the discussion, -documentation, communications, or decisions made by the rest of the Community -Team with regards to the incident. - -## What the person reporting a violation can expect - -The Community Team will respond to reports as quickly as possible. When -responding to a report, the Community Team will prioritize the safety of the -person(s) who have been harmed or are at risk of harm and the reporter(s). No -actions will be taken without the consent of the person who has been harmed or -is at risk of harm except in cases where danger or harm are imminent. - -All reports to the Community Team, no matter how minor or severe, will be -taken seriously and looked into. - -## How the Community Team responds to incidents - -The Community Team does not have a fixed of set responses to some enumerated -set of incidents that may occur. The Community Team operates on a -case-by-case basis taking into account past behavior; the relationship between -the person(s) who were harmed and the person(s) causing the harm; the responses -of the person(s) who caused harm; and the perceived threat of future harm. - -Actions the Community Team may take to mitigate harm include, but are not -limited to: - -- A simple warning -- Informal mediation -- A temporary ban from email lists, chat channels, repositories, or other online - communication mediums -- A temporary ban from events or community spaces -- Permanent expulsion from the community - -Once the Community Team has reached a decision on how to mitigate the harm or -risk of harm, the person(s) on the receiving end of the mitigation(s) may appeal -the decision by writing or otherwise communicating with the Community Team. - -## License and Attribution - -Parts of this code of conduct are derived from or inspired by: - -- The Citizen Code of Conduct -- The Django Code of Conduct -- The Tor Project Code of Conduct -- The OpenStack Foundation Community Code of Conduct -- The Freedom of the Press Foundation Code of Conduct - -This Code of Conduct is shared under a Creative Commons CC-BY-SA 4.0 International -license. diff --git a/README.md b/README.md index d356b7d16..82fae73f2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). + # Python SDK for SecureDrop [![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/main.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-sdk/tree/main) From de638b860ddf62342f4cebbc076c0ab928e2030c Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 9 Apr 2021 09:07:45 -0700 Subject: [PATCH 435/751] Add link to Code of Conduct to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index df6198d8c..de9b10490 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). + ## securedrop workstation proxy [![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-proxy.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-proxy) From 2ba05e2f7bc0a8260376f4b7bcea12104dd6147e Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 9 Apr 2021 09:18:58 -0700 Subject: [PATCH 436/751] Add link to Code of Conduct to README --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0379fca7b..888f606c4 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ +> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). + # securedrop-log This is a Python module and qrexec service for logging in Qubes for [SecureDrop](https://securedrop.org). ## How to use/try this? -In our example, we will use a vm named *logging* for storing logs, and we will use +In our example, we will use a vm named *logging* for storing logs, and we will use *workvm* to send in logs to the *logging* vm. ### In dom0 @@ -48,7 +50,7 @@ Put `sd-rsyslog-example.conf` file to `/etc/sd-rsyslog.conf`, make sure update it so that is shows the right **localvm** name. Copy `sd-rsyslog` executable to **/usr/sbin**, and remember to `chmod +x` -the binary. +the binary. Next, restart the rsyslog service. @@ -81,4 +83,3 @@ Or use the logger command. ``` logger This line should show in the syslog.log file in the sd-log file. ``` - From 9e4dcf450090f91d526380ce7d944b6cf0ed9f7c Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Fri, 9 Apr 2021 09:12:07 -0700 Subject: [PATCH 437/751] Add link to Code of Conduct to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9abfc7190..7572ee30c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). + [![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-export.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-export) # securedrop-export From fcb05d2bb8b41b2aaf538169055e29ec72be98cc Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Tue, 13 Apr 2021 18:25:04 +0530 Subject: [PATCH 438/751] Updates the wheel sha256sum for PyYAML --- build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-requirements.txt b/build-requirements.txt index fd3cc471c..824f7b9bf 100644 --- a/build-requirements.txt +++ b/build-requirements.txt @@ -3,7 +3,7 @@ chardet==3.0.4 --hash=sha256:e5cf39014befb85add77118fdc946f0a3387df7840235ba5d20 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==2.7 --hash=sha256:69bbcd9c42b0add994610a68202532e9b327992b61344cd76e743ee592725f50 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f -pyyaml==5.4.1 --hash=sha256:c2ab2737721fe6f5545fa830312fe7b77e74932c8bbd780a17a3d7df2ff65f99 +pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 requests==2.22.0 --hash=sha256:83ddbb326afd5524e7fbca582fd9673103652ea3b0c6601ac5ba1a4501f077c9 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.25.10 --hash=sha256:c78fdeffd1a01640ea99d35851539a4bc91e46a672989c4d96663e3808121389 From e8ec8a3afc5024dacf391de005c80c011833b205 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 29 Apr 2021 17:42:36 -0700 Subject: [PATCH 439/751] update semgrep and deps --- test-requirements.in | 4 +-- test-requirements.txt | 78 +++++++++++++++++++++---------------------- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/test-requirements.in b/test-requirements.in index 09ef16b5d..008c85a3d 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -6,6 +6,6 @@ py>=1.9.0 pytest pytest-cov pytest-mock -semgrep==0.42.0 +semgrep==0.49.0 typing-extensions # otherwise introduced unpinned via importlib-metadata -zipp # otherwise introduced unpinned via pep517 (via pip-tools) +zipp # otherwise introduced unpinned via pep517 (via pip-tools) \ No newline at end of file diff --git a/test-requirements.txt b/test-requirements.txt index 610ede02e..9a1709c3a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --allow-unsafe --generate-hashes --output-file=test-requirements.txt test-requirements.in +# pip-compile --generate-hashes --output-file=test-requirements.txt test-requirements.in # attrs==20.3.0 \ --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ @@ -81,18 +81,24 @@ coverage==5.5 \ --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 # via pytest-cov -flake8==3.9.0 \ - --hash=sha256:12d05ab02614b6aee8df7c36b97d1a3b2372761222b19b58621355e82acddcff \ - --hash=sha256:78873e372b12b093da7b5e5ed302e8ad9e988b38b063b61ad937f26ca58fc5f0 +flake8==3.9.1 \ + --hash=sha256:1aa8990be1e689d96c745c5682b687ea49f2e05a443aff1f8251092b0014e378 \ + --hash=sha256:3b9f848952dddccf635be78098ca75010f073bfe14d2c6bda867154bea728d2a # via -r test-requirements.in idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests -importlib-metadata==3.10.0 \ - --hash=sha256:c9db46394197244adf2f0b08ec5bc3cf16757e9590b02af1fca085c16c0d600a \ - --hash=sha256:d2d46ef77ffc85cbf7dac7e81dd663fde71c45326131bea8033b9bad42268ebe - # via -r test-requirements.in +importlib-metadata==4.0.1 \ + --hash=sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581 \ + --hash=sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d + # via + # -r test-requirements.in + # flake8 + # jsonschema + # pep517 + # pluggy + # pytest iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 @@ -101,9 +107,6 @@ jsonschema==3.2.0 \ --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a # via semgrep -junit-xml==1.9 \ - --hash=sha256:ec5ca1a55aefdd76d28fcc0b135251d156c7106fa979686a4b48d62b761b4732 - # via semgrep mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f @@ -122,9 +125,9 @@ pep517==0.10.0 \ --hash=sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b \ --hash=sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249 # via pip-tools -pip-tools==6.0.1 \ - --hash=sha256:3b0c7b95e8d3dfb011bb42cb38f356fcf5d0630480462b59c4d0a112b8d90281 \ - --hash=sha256:50ec26df7710557ab574f19f7511830294999e6121b42b87473b48cb9984d788 +pip-tools==6.1.0 \ + --hash=sha256:197e3f8839095ccec3ad1ef410e0804c07d9f17dff1c340fb417ca2b63feacc9 \ + --hash=sha256:400bf77e29cca48c31abc210042932bb52dcc138ef4ea4d52c5db429aa8ae6ee # via -r test-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ @@ -155,9 +158,9 @@ pytest-cov==2.11.1 \ --hash=sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7 \ --hash=sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da # via -r test-requirements.in -pytest-mock==3.5.1 \ - --hash=sha256:379b391cfad22422ea2e252bdfc008edd08509029bcde3c25b2c0bd741e0424e \ - --hash=sha256:a1e2aba6af9560d313c642dae7e00a2a12b022b80301d9d7fc8ec6858e1dd9fc +pytest-mock==3.6.0 \ + --hash=sha256:952139a535b5b48ac0bb2f90b5dd36b67c7e1ba92601f3a8012678c4bd7f0bcc \ + --hash=sha256:f7c3d42d6287f4e45846c8231c31902b6fa2bea98735af413a43da4cf5b727f1 # via -r test-requirements.in pytest==6.2.3 \ --hash=sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634 \ @@ -203,21 +206,20 @@ ruamel.yaml.clib==0.2.2 \ --hash=sha256:e9f7d1d8c26a6a12c23421061f9022bb62704e38211fe375c645485f38df34a2 \ --hash=sha256:f6061a31880c1ed6b6ce341215336e2f3d0c1deccd84957b6fa8ca474b41e89f # via ruamel.yaml -ruamel.yaml==0.16.10 \ - --hash=sha256:0962fd7999e064c4865f96fb1e23079075f4a2a14849bcdc5cdba53a24f9759b \ - --hash=sha256:099c644a778bf72ffa00524f78dd0b6476bca94a1da344130f4bf3381ce5b954 +ruamel.yaml==0.17.4 \ + --hash=sha256:44bc6b54fddd45e4bc0619059196679f9e8b79c027f4131bb072e6a22f4d5e28 \ + --hash=sha256:ac79fb25f5476e8e9ed1c53b8a2286d2c3f5dde49eb37dbcee5c7eb6a8415a22 # via semgrep -semgrep==0.42.0 \ - --hash=sha256:179741ce6f8f6785d048af5402bb2452a8771d4282f8aa7cb6852a5adad79fe8 \ - --hash=sha256:376b7a25817a24b32302f49656ea0ddcb2e535de2b05fdf42646f0bd4f33957e \ - --hash=sha256:e50ac0028b98f344166d2464853009837aed9abe669deac93fec04b677b97d2c +semgrep==0.49.0 \ + --hash=sha256:99b2bae87afc824a232063c91524fda2039699733f34ba28fc963f2b76228f1a \ + --hash=sha256:cca38e34824bdf17aeae6e7a8fc3ce0ac441fec51b207783a469fff9994eb08b \ + --hash=sha256:e49c84f452809af7895a09f06ce48bd86fdbb7b09482fef99f528da2afb71b46 # via -r test-requirements.in six==1.15.0 \ --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced # via # jsonschema - # junit-xml # pathlib2 toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ @@ -225,15 +227,17 @@ toml==0.10.2 \ # via # pep517 # pytest -tqdm==4.59.0 \ - --hash=sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7 \ - --hash=sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33 +tqdm==4.60.0 \ + --hash=sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3 \ + --hash=sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae # via semgrep typing-extensions==3.7.4.3 \ --hash=sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918 \ --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f - # via -r test-requirements.in + # via + # -r test-requirements.in + # importlib-metadata urllib3==1.26.4 \ --hash=sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df \ --hash=sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937 @@ -244,15 +248,9 @@ zipp==3.4.1 \ # via # -r test-requirements.in # importlib-metadata + # pep517 -# The following packages are considered to be unsafe in a requirements file: -pip==21.0.1 \ - --hash=sha256:37fd50e056e2aed635dec96594606f0286640489b0db0ce7607f7e51890372d5 \ - --hash=sha256:99bbde183ec5ec037318e774b0d8ae0a64352fe53b2c7fd630be1d07e94f41e5 - # via pip-tools -setuptools==54.2.0 \ - --hash=sha256:aa9c24fb83a9116b8d425e53bec24c7bfdbffc313c2159f9ed036d4a6dd32d7d \ - --hash=sha256:b726461910b9ba30f077880c228bea22121aec50b172edf39eb7ff026c054a11 - # via - # jsonschema - # semgrep +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. +# pip +# setuptools From 36b95b97e0680c2789e49aa79f0c7fc8314a16e9 Mon Sep 17 00:00:00 2001 From: mickael e Date: Fri, 30 Apr 2021 15:03:16 -0400 Subject: [PATCH 440/751] Also run semgrep in ci --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 153924c04..338e22a92 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ update-pip-requirements: ## Updates all Python requirements files via pip-compil pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in .PHONY: check -check: lint test ## Run linter and tests +check: lint semgrep test ## Run linter and tests TESTS ?= tests .PHONY: test From 7a09df7b0b64670e339add27979b73a40192dd6f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Thu, 29 Apr 2021 17:29:05 -0700 Subject: [PATCH 441/751] make relpath traversal check clearer --- securedrop_export/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py index 8aeaba86e..219d0e963 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/utils.py @@ -101,7 +101,7 @@ def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: if filename_or_filepath.is_absolute(): base_path = filename_or_filepath else: - base_path = Path().resolve() + base_path = Path.cwd() # use cwd so we can next ensure relative path does not traverse up try: relative_path = relative_filepath(filename_or_filepath, base_path) From 7d351b28fa5a31b91a9a40bedce8153f2cc6cdd7 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Apr 2021 12:38:10 -0700 Subject: [PATCH 442/751] cleanup project root directory Signed-off-by: Allie Crevier --- .circleci/config.yml | 4 ++-- MANIFEST.in | 4 ++-- Makefile | 2 +- build-requirements.txt => requirements/build-requirements.txt | 0 requirements.txt => requirements/requirements.txt | 0 test-requirements.in => requirements/test-requirements.in | 0 test-requirements.txt => requirements/test-requirements.txt | 0 7 files changed, 5 insertions(+), 5 deletions(-) rename build-requirements.txt => requirements/build-requirements.txt (100%) rename requirements.txt => requirements/requirements.txt (100%) rename test-requirements.in => requirements/test-requirements.in (100%) rename test-requirements.txt => requirements/test-requirements.txt (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1bba7c98a..1d00acdbb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,7 +17,7 @@ common-steps: command: | virtualenv .venv source .venv/bin/activate - pip install --require-hashes -r test-requirements.txt + pip install --require-hashes -r requirements/test-requirements.txt make test - &install_packaging_dependencies @@ -69,7 +69,7 @@ jobs: command: | virtualenv .venv source .venv/bin/activate - pip install --require-hashes -r test-requirements.txt + pip install --require-hashes -r requirements/test-requirements.txt make lint - run: name: Check Python dependencies for CVEs diff --git a/MANIFEST.in b/MANIFEST.in index ad64433d6..4322c8cb2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,8 +2,8 @@ include LICENSE include README.md include securedrop_export/VERSION include changelog.md -include build-requirements.txt -include requirements.txt +include requirements/build-requirements.txt +include requirements/requirements.txt include securedrop_export/*.py include setup.py include files/send-to-usb.desktop diff --git a/Makefile b/Makefile index 338e22a92..91be0943e 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --generate-hashes --output-file test-requirements.txt test-requirements.in + pip-compile --generate-hashes --output-file requirements/test-requirements.txt requirements/test-requirements.in .PHONY: check check: lint semgrep test ## Run linter and tests diff --git a/build-requirements.txt b/requirements/build-requirements.txt similarity index 100% rename from build-requirements.txt rename to requirements/build-requirements.txt diff --git a/requirements.txt b/requirements/requirements.txt similarity index 100% rename from requirements.txt rename to requirements/requirements.txt diff --git a/test-requirements.in b/requirements/test-requirements.in similarity index 100% rename from test-requirements.in rename to requirements/test-requirements.in diff --git a/test-requirements.txt b/requirements/test-requirements.txt similarity index 100% rename from test-requirements.txt rename to requirements/test-requirements.txt From 93ab598e1eed4f6591a6a9a8b0d3a63c52b37622 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Apr 2021 13:13:05 -0700 Subject: [PATCH 443/751] update pip requirements using requirements directory --- requirements/test-requirements.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 9a1709c3a..86f75e2a7 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --generate-hashes --output-file=test-requirements.txt test-requirements.in +# pip-compile --generate-hashes --output-file=requirements/test-requirements.txt requirements/test-requirements.in # attrs==20.3.0 \ --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ @@ -84,7 +84,7 @@ coverage==5.5 \ flake8==3.9.1 \ --hash=sha256:1aa8990be1e689d96c745c5682b687ea49f2e05a443aff1f8251092b0014e378 \ --hash=sha256:3b9f848952dddccf635be78098ca75010f073bfe14d2c6bda867154bea728d2a - # via -r test-requirements.in + # via -r requirements/test-requirements.in idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 @@ -93,7 +93,7 @@ importlib-metadata==4.0.1 \ --hash=sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581 \ --hash=sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d # via - # -r test-requirements.in + # -r requirements/test-requirements.in # flake8 # jsonschema # pep517 @@ -120,7 +120,7 @@ packaging==20.9 \ pathlib2==2.3.5 \ --hash=sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db \ --hash=sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868 - # via -r test-requirements.in + # via -r requirements/test-requirements.in pep517==0.10.0 \ --hash=sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b \ --hash=sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249 @@ -128,7 +128,7 @@ pep517==0.10.0 \ pip-tools==6.1.0 \ --hash=sha256:197e3f8839095ccec3ad1ef410e0804c07d9f17dff1c340fb417ca2b63feacc9 \ --hash=sha256:400bf77e29cca48c31abc210042932bb52dcc138ef4ea4d52c5db429aa8ae6ee - # via -r test-requirements.in + # via -r requirements/test-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d @@ -137,7 +137,7 @@ py==1.10.0 \ --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a # via - # -r test-requirements.in + # -r requirements/test-requirements.in # pytest pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ @@ -157,16 +157,16 @@ pyrsistent==0.17.3 \ pytest-cov==2.11.1 \ --hash=sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7 \ --hash=sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da - # via -r test-requirements.in + # via -r requirements/test-requirements.in pytest-mock==3.6.0 \ --hash=sha256:952139a535b5b48ac0bb2f90b5dd36b67c7e1ba92601f3a8012678c4bd7f0bcc \ --hash=sha256:f7c3d42d6287f4e45846c8231c31902b6fa2bea98735af413a43da4cf5b727f1 - # via -r test-requirements.in + # via -r requirements/test-requirements.in pytest==6.2.3 \ --hash=sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634 \ --hash=sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc # via - # -r test-requirements.in + # -r requirements/test-requirements.in # pytest-cov # pytest-mock requests==2.25.1 \ @@ -214,7 +214,7 @@ semgrep==0.49.0 \ --hash=sha256:99b2bae87afc824a232063c91524fda2039699733f34ba28fc963f2b76228f1a \ --hash=sha256:cca38e34824bdf17aeae6e7a8fc3ce0ac441fec51b207783a469fff9994eb08b \ --hash=sha256:e49c84f452809af7895a09f06ce48bd86fdbb7b09482fef99f528da2afb71b46 - # via -r test-requirements.in + # via -r requirements/test-requirements.in six==1.15.0 \ --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced @@ -236,7 +236,7 @@ typing-extensions==3.7.4.3 \ --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f # via - # -r test-requirements.in + # -r requirements/test-requirements.in # importlib-metadata urllib3==1.26.4 \ --hash=sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df \ @@ -246,7 +246,7 @@ zipp==3.4.1 \ --hash=sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76 \ --hash=sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098 # via - # -r test-requirements.in + # -r requirements/test-requirements.in # importlib-metadata # pep517 From e1e6c194c205c32c77c486f8d2b47389abe675a2 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 7 May 2021 14:59:26 -0700 Subject: [PATCH 444/751] add venv make target --- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Makefile b/Makefile index 9c754f119..992cc6298 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,14 @@ .PHONY: all all: help +.PHONY: venv +venv: + python3 -m venv .venv + ## Good idea to upgrade pip and wheel when you create a new virtual environment. + ## Or you could use the virtualenv command instead. + .venv/bin/pip install --upgrade pip wheel + .venv/bin/pip install --require-hashes -r "dev-requirements.txt" + .PHONY: bandit bandit: ## Run bandit with medium level excluding test-related folders pip install --upgrade pip && \ From 8ba39f20361c3011dd58be7229881005eb61af71 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 7 May 2021 16:53:55 -0700 Subject: [PATCH 445/751] update dev dependencies Signed-off-by: Allie Crevier --- Makefile | 2 +- dev-requirements.in | 30 +-- dev-requirements.txt | 577 +++++++++++++++++++++++++++---------------- requirements.txt | 45 ++-- 4 files changed, 410 insertions(+), 244 deletions(-) diff --git a/Makefile b/Makefile index 992cc6298..68a156801 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ isort: ## Run isort for file formatting .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --allow-unsafe --generate-hashes --output-file dev-requirements.txt dev-requirements.in requirements.in + pip-compile --generate-hashes --allow-unsafe --upgrade --output-file dev-requirements.txt dev-requirements.in requirements.in pip-compile --generate-hashes --output-file requirements.txt requirements.in .PHONY: test diff --git a/dev-requirements.in b/dev-requirements.in index e4fe026d6..238652e24 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -1,15 +1,15 @@ -black==19.10b0 -coverage==5.0 -flake8==3.6.0 -isort==4.3.21 -mccabe==0.6.1 -multidict==4.4.2 -mypy==0.761 -mypy-extensions==0.4.3 -pip-tools>=5.0.0 -pycodestyle==2.4.0 -pyflakes==2.0.0 -six==1.11.0 -vcrpy==2.0.1 -wrapt==1.10.11 -yarl==1.2.6 +black +coverage +flake8 +isort +mccabe +multidict +mypy +mypy-extensions +pip-tools +pycodestyle +pyflakes +six +vcrpy +wrapt +yarl diff --git a/dev-requirements.txt b/dev-requirements.txt index daa7e02d9..b14a54c05 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -4,154 +4,219 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in # -appdirs==1.4.3 \ - --hash=sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92 \ - --hash=sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e \ +appdirs==1.4.4 \ + --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ + --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 # via black -attrs==19.3.0 \ - --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ - --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ - # via black -black==19.10b0 \ - --hash=sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b \ - --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 \ +black==21.5b1 \ + --hash=sha256:23695358dbcb3deafe7f0a3ad89feee5999a46be5fec21f4f1d108be0bcdb3b1 \ + --hash=sha256:8a60071a0043876a4ae96e6c69bd3a127dad2c1ca7c8083573eb82f92705d008 # via -r dev-requirements.in certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ - --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a \ - # via -r requirements.in, requests + --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a + # via + # -r requirements.in + # requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ - # via -r requirements.in, requests -click==7.0 \ - --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ - --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 \ - # via black, pip-tools -coverage==5.0 \ - --hash=sha256:0cd13a6e98c37b510a2d34c8281d5e1a226aaf9b65b7d770ef03c63169965351 \ - --hash=sha256:1a4b6b6a2a3a6612e6361130c2cc3dc4378d8c221752b96167ccbad94b47f3cd \ - --hash=sha256:2ee55e6dba516ddf6f484aa83ccabbb0adf45a18892204c23486938d12258cde \ - --hash=sha256:3be5338a2eb4ef03c57f20917e1d12a1fd10e3853fed060b6d6b677cb3745898 \ - --hash=sha256:44b783b02db03c4777d8cf71bae19eadc171a6f2a96777d916b2c30a1eb3d070 \ - --hash=sha256:475bf7c4252af0a56e1abba9606f1e54127cdf122063095c75ab04f6f99cf45e \ - --hash=sha256:47c81ee687eafc2f1db7f03fbe99aab81330565ebc62fb3b61edfc2216a550c8 \ - --hash=sha256:4a7f8e72b18f2aca288ff02255ce32cc830bc04d993efbc87abf6beddc9e56c0 \ - --hash=sha256:50197163a22fd17f79086e087a787883b3ec9280a509807daf158dfc2a7ded02 \ - --hash=sha256:56b13000acf891f700f5067512b804d1ec8c301d627486c678b903859d07f798 \ - --hash=sha256:79388ae29c896299b3567965dbcd93255f175c17c6c7bca38614d12718c47466 \ - --hash=sha256:79fd5d3d62238c4f583b75d48d53cdae759fe04d4fb18fe8b371d88ad2b6f8be \ - --hash=sha256:7fe3e2fde2bf1d7ce25ebcd2d3de3650b8d60d9a73ce6dcef36e20191291613d \ - --hash=sha256:81042a24f67b96e4287774014fa27220d8a4d91af1043389e4d73892efc89ac6 \ - --hash=sha256:81326f1095c53111f8afc95da281e1414185f4a538609a77ca50bdfa39a6c207 \ - --hash=sha256:8873dc0d8f42142ea9f20c27bbdc485190fff93823c6795be661703369e5877d \ - --hash=sha256:88d2cbcb0a112f47eef71eb95460b6995da18e6f8ca50c264585abc2c473154b \ - --hash=sha256:91f2491aeab9599956c45a77c5666d323efdec790bfe23fcceafcd91105d585a \ - --hash=sha256:979daa8655ae5a51e8e7a24e7d34e250ae8309fd9719490df92cbb2fe2b0422b \ - --hash=sha256:9c871b006c878a890c6e44a5b2f3c6291335324b298c904dc0402ee92ee1f0be \ - --hash=sha256:a6d092545e5af53e960465f652e00efbf5357adad177b2630d63978d85e46a72 \ - --hash=sha256:b5ed7837b923d1d71c4f587ae1539ccd96bfd6be9788f507dbe94dab5febbb5d \ - --hash=sha256:ba259f68250f16d2444cbbfaddaa0bb20e1560a4fdaad50bece25c199e6af864 \ - --hash=sha256:be1d89614c6b6c36d7578496dc8625123bda2ff44f224cf8b1c45b810ee7383f \ - --hash=sha256:c1b030a79749aa8d1f1486885040114ee56933b15ccfc90049ba266e4aa2139f \ - --hash=sha256:c95bb147fab76f2ecde332d972d8f4138b8f2daee6c466af4ff3b4f29bd4c19e \ - --hash=sha256:d52c1c2d7e856cecc05aa0526453cb14574f821b7f413cc279b9514750d795c1 \ - --hash=sha256:d609a6d564ad3d327e9509846c2c47f170456344521462b469e5cb39e48ba31c \ - --hash=sha256:e1bad043c12fb58e8c7d92b3d7f2f49977dcb80a08a6d1e7a5114a11bf819fca \ - --hash=sha256:e5a675f6829c53c87d79117a8eb656cc4a5f8918185a32fc93ba09778e90f6db \ - --hash=sha256:fec32646b98baf4a22fdceb08703965bd16dea09051fbeb31a04b5b6e72b846c \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 + # via + # -r requirements.in + # requests +click==8.0.0 \ + --hash=sha256:7d8c289ee437bcb0316820ccee14aefcb056e58d31830ecab8e47eda6540e136 \ + --hash=sha256:e90e62ced43dc8105fb9a26d62f0d9340b5c8db053a814e25d95c19873ae87db + # via + # black + # pip-tools +coverage==5.5 \ + --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \ + --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \ + --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \ + --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \ + --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \ + --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \ + --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \ + --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \ + --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \ + --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \ + --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \ + --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \ + --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \ + --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \ + --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \ + --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \ + --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \ + --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \ + --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \ + --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \ + --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \ + --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \ + --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \ + --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \ + --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \ + --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \ + --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \ + --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \ + --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \ + --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \ + --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \ + --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \ + --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \ + --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \ + --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \ + --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \ + --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \ + --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \ + --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \ + --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \ + --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \ + --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \ + --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \ + --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \ + --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \ + --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \ + --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \ + --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \ + --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \ + --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ + --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ + --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 # via -r dev-requirements.in -flake8==3.6.0 \ - --hash=sha256:6a35f5b8761f45c5513e3405f110a86bea57982c3b75b766ce7b65217abe1670 \ - --hash=sha256:c01f8a3963b3571a8e6bd7a4063359aff90749e160778e03817cd9b71c9e07d2 \ +flake8==3.9.2 \ + --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ + --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 # via -r dev-requirements.in furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ - --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec \ + --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec # via -r requirements.in idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ - --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 \ - # via -r requirements.in, requests, yarl -isort==4.3.21 \ - --hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \ - --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd \ + --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 + # via + # -r requirements.in + # requests + # yarl +importlib-metadata==4.0.1 \ + --hash=sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581 \ + --hash=sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d + # via + # flake8 + # pep517 +isort==5.8.0 \ + --hash=sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6 \ + --hash=sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d # via -r dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f \ - # via -r dev-requirements.in, flake8 -multidict==4.4.2 \ - --hash=sha256:05eeab69bf2b0664644c62bd92fabb045163e5b8d4376a31dfb52ce0210ced7b \ - --hash=sha256:0c85880efa7cadb18e3b5eef0aa075dc9c0a3064cbbaef2e20be264b9cf47a64 \ - --hash=sha256:136f5a4a6a4adeacc4dc820b8b22f0a378fb74f326e259c54d1817639d1d40a0 \ - --hash=sha256:14906ad3347c7d03e9101749b16611cf2028547716d0840838d3c5e2b3b0f2d3 \ - --hash=sha256:1ade4a3b71b1bf9e90c5f3d034a87fe4949c087ef1f6cd727fdd766fe8bbd121 \ - --hash=sha256:22939a00a511a59f9ecc0158b8db728afef57975ce3782b3a265a319d05b9b12 \ - --hash=sha256:2b86b02d872bc5ba5b3a4530f6a7ba0b541458ab4f7c1429a12ac326231203f7 \ - --hash=sha256:3c11e92c3dfc321014e22fb442bc9eb70e01af30d6ce442026b0c35723448c66 \ - --hash=sha256:4ba3bd26f282b201fdbce351f1c5d17ceb224cbedb73d6e96e6ce391b354aacc \ - --hash=sha256:4c6e78d042e93751f60672989efbd6a6bc54213ed7ff695fff82784bbb9ea035 \ - --hash=sha256:4d80d1901b89cc935a6cf5b9fd89df66565272722fe2e5473168927a9937e0ca \ - --hash=sha256:4fcf71d33178a00cc34a57b29f5dab1734b9ce0f1c97fb34666deefac6f92037 \ - --hash=sha256:52f7670b41d4b4d97866ebc38121de8bcb9813128b7c4942b07794d08193c0ab \ - --hash=sha256:5368e2b7649a26b7253c6c9e53241248aab9da49099442f5be238fde436f18c9 \ - --hash=sha256:5bb65fbb48999044938f0c0508e929b14a9b8bf4939d8263e9ea6691f7b54663 \ - --hash=sha256:60672bb5577472800fcca1ac9dae232d1461db9f20f055184be8ce54b0052572 \ - --hash=sha256:669e9be6d148fc0283f53e17dd140cde4dc7c87edac8319147edd5aa2a830771 \ - --hash=sha256:6a0b7a804e8d1716aa2c72e73210b48be83d25ba9ec5cf52cf91122285707bb1 \ - --hash=sha256:79034ea3da3cf2a815e3e52afdc1f6c1894468c98bdce5d2546fa2342585497f \ - --hash=sha256:79247feeef6abcc11137ad17922e865052f23447152059402fc320f99ff544bb \ - --hash=sha256:81671c2049e6bf42c7fd11a060f8bc58f58b7b3d6f3f951fc0b15e376a6a5a98 \ - --hash=sha256:82ac4a5cb56cc9280d4ae52c2d2ebcd6e0668dd0f9ef17f0a9d7c82bd61e24fa \ - --hash=sha256:9436267dbbaa49dad18fbbb54f85386b0f5818d055e7b8e01d219661b6745279 \ - --hash=sha256:94e4140bb1343115a1afd6d84ebf8fca5fb7bfb50e1c2cbd6f2fb5d3117ef102 \ - --hash=sha256:a2cab366eae8a0ffe0813fd8e335cf0d6b9bb6c5227315f53bb457519b811537 \ - --hash=sha256:a596019c3eafb1b0ae07db9f55a08578b43c79adb1fe1ab1fd818430ae59ee6f \ - --hash=sha256:e8848ae3cd6a784c29fae5055028bee9bffcc704d8bcad09bd46b42b44a833e2 \ - --hash=sha256:e8a048bfd7d5a280f27527d11449a509ddedf08b58a09a24314828631c099306 \ - --hash=sha256:f6dd28a0ac60e2426a6918f36f1b4e2620fc785a0de7654cd206ba842eee57fd \ - # via -r dev-requirements.in, yarl + --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f + # via + # -r dev-requirements.in + # flake8 +multidict==5.1.0 \ + --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ + --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \ + --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \ + --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \ + --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \ + --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \ + --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \ + --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \ + --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \ + --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \ + --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \ + --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \ + --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \ + --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \ + --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \ + --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \ + --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \ + --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \ + --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \ + --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \ + --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \ + --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \ + --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \ + --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \ + --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \ + --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \ + --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \ + --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \ + --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \ + --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \ + --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \ + --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \ + --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \ + --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \ + --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \ + --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ + --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 + # via + # -r dev-requirements.in + # yarl mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 \ - # via -r dev-requirements.in, mypy -mypy==0.761 \ - --hash=sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a \ - --hash=sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7 \ - --hash=sha256:4b9365ade157794cef9685791032521233729cb00ce76b0ddc78749abea463d2 \ - --hash=sha256:53ea810ae3f83f9c9b452582261ea859828a9ed666f2e1ca840300b69322c474 \ - --hash=sha256:634aef60b4ff0f650d3e59d4374626ca6153fcaff96ec075b215b568e6ee3cb0 \ - --hash=sha256:7e396ce53cacd5596ff6d191b47ab0ea18f8e0ec04e15d69728d530e86d4c217 \ - --hash=sha256:7eadc91af8270455e0d73565b8964da1642fe226665dd5c9560067cd64d56749 \ - --hash=sha256:7f672d02fffcbace4db2b05369142e0506cdcde20cea0e07c7c2171c4fd11dd6 \ - --hash=sha256:85baab8d74ec601e86134afe2bcccd87820f79d2f8d5798c889507d1088287bf \ - --hash=sha256:87c556fb85d709dacd4b4cb6167eecc5bbb4f0a9864b69136a0d4640fdc76a36 \ - --hash=sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b \ - --hash=sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72 \ - --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ - --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 + # via + # -r dev-requirements.in + # black + # mypy +mypy==0.812 \ + --hash=sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e \ + --hash=sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064 \ + --hash=sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c \ + --hash=sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4 \ + --hash=sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97 \ + --hash=sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df \ + --hash=sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8 \ + --hash=sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a \ + --hash=sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56 \ + --hash=sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7 \ + --hash=sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6 \ + --hash=sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5 \ + --hash=sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a \ + --hash=sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521 \ + --hash=sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564 \ + --hash=sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49 \ + --hash=sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66 \ + --hash=sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a \ + --hash=sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119 \ + --hash=sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506 \ + --hash=sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c \ + --hash=sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb # via -r dev-requirements.in orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ - --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 \ - # via -r requirements.in, furl -pathspec==0.7.0 \ - --hash=sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424 \ - --hash=sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96 \ + --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 + # via + # -r requirements.in + # furl +pathspec==0.8.1 \ + --hash=sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd \ + --hash=sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d # via black -pip-tools==5.3.1 \ - --hash=sha256:5672c2b6ca0f1fd803f3b45568c2cf7fadf135b4971e7d665232b2075544c0ef \ - --hash=sha256:73787e23269bf8a9230f376c351297b9037ed0d32ab0f9bef4a187d976acc054 \ +pep517==0.10.0 \ + --hash=sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b \ + --hash=sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249 + # via pip-tools +pip-tools==6.1.0 \ + --hash=sha256:197e3f8839095ccec3ad1ef410e0804c07d9f17dff1c340fb417ca2b63feacc9 \ + --hash=sha256:400bf77e29cca48c31abc210042932bb52dcc138ef4ea4d52c5db429aa8ae6ee # via -r dev-requirements.in -pycodestyle==2.4.0 \ - --hash=sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83 \ - --hash=sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a \ - # via -r dev-requirements.in, flake8 -pyflakes==2.0.0 \ - --hash=sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49 \ - --hash=sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae \ - # via -r dev-requirements.in, flake8 +pycodestyle==2.7.0 \ + --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ + --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef + # via + # -r dev-requirements.in + # flake8 +pyflakes==2.3.1 \ + --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ + --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db + # via + # -r dev-requirements.in + # flake8 pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -165,112 +230,200 @@ pyyaml==5.4.1 \ --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - # via -r requirements.in, vcrpy -regex==2020.1.8 \ - --hash=sha256:07b39bf943d3d2fe63d46281d8504f8df0ff3fe4c57e13d1656737950e53e525 \ - --hash=sha256:0932941cdfb3afcbc26cc3bcf7c3f3d73d5a9b9c56955d432dbf8bbc147d4c5b \ - --hash=sha256:0e182d2f097ea8549a249040922fa2b92ae28be4be4895933e369a525ba36576 \ - --hash=sha256:10671601ee06cf4dc1bc0b4805309040bb34c9af423c12c379c83d7895622bb5 \ - --hash=sha256:23e2c2c0ff50f44877f64780b815b8fd2e003cda9ce817a7fd00dea5600c84a0 \ - --hash=sha256:26ff99c980f53b3191d8931b199b29d6787c059f2e029b2b0c694343b1708c35 \ - --hash=sha256:27429b8d74ba683484a06b260b7bb00f312e7c757792628ea251afdbf1434003 \ - --hash=sha256:3e77409b678b21a056415da3a56abfd7c3ad03da71f3051bbcdb68cf44d3c34d \ - --hash=sha256:4e8f02d3d72ca94efc8396f8036c0d3bcc812aefc28ec70f35bb888c74a25161 \ - --hash=sha256:4eae742636aec40cf7ab98171ab9400393360b97e8f9da67b1867a9ee0889b26 \ - --hash=sha256:6a6ae17bf8f2d82d1e8858a47757ce389b880083c4ff2498dba17c56e6c103b9 \ - --hash=sha256:6a6ba91b94427cd49cd27764679024b14a96874e0dc638ae6bdd4b1a3ce97be1 \ - --hash=sha256:7bcd322935377abcc79bfe5b63c44abd0b29387f267791d566bbb566edfdd146 \ - --hash=sha256:98b8ed7bb2155e2cbb8b76f627b2fd12cf4b22ab6e14873e8641f266e0fb6d8f \ - --hash=sha256:bd25bb7980917e4e70ccccd7e3b5740614f1c408a642c245019cff9d7d1b6149 \ - --hash=sha256:d0f424328f9822b0323b3b6f2e4b9c90960b24743d220763c7f07071e0778351 \ - --hash=sha256:d58e4606da2a41659c84baeb3cfa2e4c87a74cec89a1e7c56bee4b956f9d7461 \ - --hash=sha256:e3cd21cc2840ca67de0bbe4071f79f031c81418deb544ceda93ad75ca1ee9f7b \ - --hash=sha256:e6c02171d62ed6972ca8631f6f34fa3281d51db8b326ee397b9c83093a6b7242 \ - --hash=sha256:e7c7661f7276507bce416eaae22040fd91ca471b5b33c13f8ff21137ed6f248c \ - --hash=sha256:ecc6de77df3ef68fee966bb8cb4e067e84d4d1f397d0ef6fce46913663540d77 \ + --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ + --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ + --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 + # via + # -r requirements.in + # vcrpy +regex==2021.4.4 \ + --hash=sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5 \ + --hash=sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79 \ + --hash=sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31 \ + --hash=sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500 \ + --hash=sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11 \ + --hash=sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14 \ + --hash=sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3 \ + --hash=sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439 \ + --hash=sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c \ + --hash=sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82 \ + --hash=sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711 \ + --hash=sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093 \ + --hash=sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a \ + --hash=sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb \ + --hash=sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8 \ + --hash=sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17 \ + --hash=sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000 \ + --hash=sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d \ + --hash=sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480 \ + --hash=sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc \ + --hash=sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0 \ + --hash=sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9 \ + --hash=sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765 \ + --hash=sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e \ + --hash=sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a \ + --hash=sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07 \ + --hash=sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f \ + --hash=sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac \ + --hash=sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7 \ + --hash=sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed \ + --hash=sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968 \ + --hash=sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7 \ + --hash=sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2 \ + --hash=sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4 \ + --hash=sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87 \ + --hash=sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8 \ + --hash=sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10 \ + --hash=sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29 \ + --hash=sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605 \ + --hash=sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6 \ + --hash=sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042 # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb \ - # via -r dev-requirements.in, -r requirements.in, furl, orderedmultidict, pip-tools, vcrpy -toml==0.10.0 \ - --hash=sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c \ - --hash=sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e \ - # via black -typed-ast==1.4.1 \ - --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ - --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ - --hash=sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa \ - --hash=sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652 \ - --hash=sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75 \ - --hash=sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01 \ - --hash=sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d \ - --hash=sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1 \ - --hash=sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907 \ - --hash=sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c \ - --hash=sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3 \ - --hash=sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b \ - --hash=sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614 \ - --hash=sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb \ - --hash=sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b \ - --hash=sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41 \ - --hash=sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6 \ - --hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \ - --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ - --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ - --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \ - # via black, mypy -typing-extensions==3.7.4.1 \ - --hash=sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2 \ - --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ - --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 \ - # via mypy -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ - # via -r requirements.in, requests -vcrpy==2.0.1 \ - --hash=sha256:127e79cf7b569d071d1bd761b83f7b62b2ce2a2eb63ceca7aa67cba8f2602ea3 \ - --hash=sha256:57be64aa8e9883a4117d0b15de28af62275c001abcdb00b6dc2d4406073d9a4f \ + --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb + # via + # -r dev-requirements.in + # -r requirements.in + # furl + # orderedmultidict + # vcrpy +toml==0.10.2 \ + --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ + --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + # via + # black + # pep517 +typed-ast==1.4.3 \ + --hash=sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace \ + --hash=sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff \ + --hash=sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266 \ + --hash=sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528 \ + --hash=sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6 \ + --hash=sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808 \ + --hash=sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4 \ + --hash=sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363 \ + --hash=sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341 \ + --hash=sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04 \ + --hash=sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41 \ + --hash=sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e \ + --hash=sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3 \ + --hash=sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899 \ + --hash=sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805 \ + --hash=sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c \ + --hash=sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c \ + --hash=sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39 \ + --hash=sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a \ + --hash=sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3 \ + --hash=sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7 \ + --hash=sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f \ + --hash=sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075 \ + --hash=sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0 \ + --hash=sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40 \ + --hash=sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428 \ + --hash=sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927 \ + --hash=sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3 \ + --hash=sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f \ + --hash=sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65 + # via + # black + # mypy +typing-extensions==3.10.0.0 \ + --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ + --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ + --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 + # via + # black + # importlib-metadata + # mypy + # yarl +urllib3==1.25.11 \ + --hash=sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2 \ + --hash=sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e + # via + # -r requirements.in + # requests +vcrpy==4.1.1 \ + --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ + --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 # via -r dev-requirements.in werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ - --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 \ + --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 # via -r requirements.in -wrapt==1.10.11 \ - --hash=sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6 \ - # via -r dev-requirements.in, vcrpy -yarl==1.2.6 \ - --hash=sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9 \ - --hash=sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee \ - --hash=sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308 \ - --hash=sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357 \ - --hash=sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78 \ - --hash=sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8 \ - --hash=sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1 \ - --hash=sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4 \ - --hash=sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7 \ - # via -r dev-requirements.in, vcrpy +wrapt==1.12.1 \ + --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 + # via + # -r dev-requirements.in + # vcrpy +yarl==1.6.3 \ + --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ + --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \ + --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \ + --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \ + --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \ + --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \ + --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \ + --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \ + --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \ + --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \ + --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \ + --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \ + --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \ + --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \ + --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \ + --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \ + --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \ + --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \ + --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \ + --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \ + --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \ + --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \ + --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \ + --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \ + --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \ + --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \ + --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \ + --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \ + --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \ + --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \ + --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \ + --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \ + --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \ + --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \ + --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \ + --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ + --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 + # via + # -r dev-requirements.in + # vcrpy +zipp==3.4.1 \ + --hash=sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76 \ + --hash=sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098 + # via + # importlib-metadata + # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==20.2.3 \ - --hash=sha256:0f35d63b7245205f4060efe1982f5ea2196aa6e5b26c07669adcf800e2542026 \ - --hash=sha256:30c70b6179711a7c4cf76da89e8a0f5282279dfb0278bec7b94134be92543b6d \ +pip==21.1.1 \ + --hash=sha256:11d095ed5c15265fc5c15cc40a45188675c239fb0f9913b673a33e54ff7d45f0 \ + --hash=sha256:51ad01ddcd8de923533b01a870e7b987c2eb4d83b50b89e1bf102723ff9fed8b # via pip-tools -setuptools==50.3.0 \ - --hash=sha256:39060a59d91cf5cf403fa3bacbb52df4205a8c3585e0b9ba4b30e0e19d4c4b18 \ - --hash=sha256:c77b3920663a435c9450d9d971c48f5a7478fca8881b2cd2564e59f970f03536 \ - # via flake8 diff --git a/requirements.txt b/requirements.txt index 4b2f9fbe2..70515d60d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,24 +6,32 @@ # certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ - --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a \ - # via -r requirements.in, requests + --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a + # via + # -r requirements.in + # requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ - # via -r requirements.in, requests + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 + # via + # -r requirements.in + # requests furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ - --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec \ + --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec # via -r requirements.in idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ - --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 \ - # via -r requirements.in, requests + --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 + # via + # -r requirements.in + # requests orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ - --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 \ - # via -r requirements.in, furl + --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 + # via + # -r requirements.in + # furl pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -45,21 +53,26 @@ pyyaml==5.4.1 \ --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc # via -r requirements.in requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb \ - # via -r requirements.in, furl, orderedmultidict + --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb + # via + # -r requirements.in + # furl + # orderedmultidict urllib3==1.25.10 \ --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ - # via -r requirements.in, requests + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 + # via + # -r requirements.in + # requests werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ - --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 \ + --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 # via -r requirements.in From 610104dbf9aee27bad7e09eea490c80fd89e4206 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 17 May 2021 11:56:53 -0700 Subject: [PATCH 446/751] correct errors from running mypy and black --- Makefile | 14 +++++++++++--- blackconfig/pyproject.toml | 2 -- pyproject.toml | 5 +++++ securedrop_proxy/proxy.py | 23 +++++++++++++---------- 4 files changed, 29 insertions(+), 15 deletions(-) delete mode 100644 blackconfig/pyproject.toml create mode 100644 pyproject.toml diff --git a/Makefile b/Makefile index 68a156801..688163fcf 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities done .PHONY: lint -lint: isort black ## Run isort, black and flake8 +lint: isort-check black-check ## Run isort, black and flake8 @flake8 securedrop_proxy tests .PHONY: mypy @@ -37,11 +37,19 @@ mypy: ## Run mypy static type checker .PHONY: black black: ## Run black for file formatting - @black --config ./blackconfig/pyproject.toml --check securedrop_proxy tests + @black securedrop_proxy tests + +.PHONY: black-check +black-check: ## Check Python source code formatting with black + @black --check --diff securedrop_proxy tests .PHONY: isort isort: ## Run isort for file formatting - @isort -c -w 100 securedrop_proxy/*.py tests/*.py --diff + @isort securedrop_proxy/*.py tests/*.py + +.PHONY: isort-check +isort-check: ## Check isort for file formatting + @isort --check-only --diff securedrop_proxy/*.py tests/*.py .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. diff --git a/blackconfig/pyproject.toml b/blackconfig/pyproject.toml deleted file mode 100644 index aa4949aa1..000000000 --- a/blackconfig/pyproject.toml +++ /dev/null @@ -1,2 +0,0 @@ -[tool.black] -line-length = 100 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..7eaeaea01 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,5 @@ +[tool.black] +line-length = 100 + +[tool.isort] +line_length = 100 diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 69a4f4429..4e6170233 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -9,7 +9,7 @@ from tempfile import _TemporaryFileWrapper # type: ignore from typing import Dict, Optional -import furl +import furl # type: ignore import requests import werkzeug import yaml @@ -32,14 +32,14 @@ def __init__(self) -> None: self.method = "" self.path_query = "" self.body = "" - self.headers: Dict[str, str] = {} + self.headers = {} # type: Dict[str, str] class Response: def __init__(self, status: int) -> None: self.status = status self.body = "" - self.headers: Dict[str, str] = {} + self.headers = {} # type: Dict[str, str] self.version = version.version @@ -48,10 +48,10 @@ def __init__(self, conf_path: str, req: Req = Req(), timeout: float = 10.0) -> N self.read_conf(conf_path) self.req = req - self.res: Optional[Response] = None + self.res = None # type: Optional[Response] self.timeout = float(timeout) - self._prepared_request: Optional[Req] = None + self._prepared_request = None # type: Optional[requests.PreparedRequest] def on_done(self) -> None: print(json.dumps(self.res.__dict__)) @@ -79,12 +79,14 @@ def read_conf(self, conf_path: str) -> None: conf_in = yaml.safe_load(fh) except yaml.YAMLError: self.simple_error( - 500, "YAML syntax error while reading configuration file {}".format(conf_path), + 500, + "YAML syntax error while reading configuration file {}".format(conf_path), ) self.err_on_done() except Exception: self.simple_error( - 500, "Error while opening or reading configuration file {}".format(conf_path), + 500, + "Error while opening or reading configuration file {}".format(conf_path), ) self.err_on_done() @@ -186,7 +188,7 @@ def handle_json_response(self) -> None: res = Response(self._presp.status_code) - res.headers = self._presp.headers + res.headers = dict(self._presp.headers) res.body = self._presp.content.decode() self.res = res @@ -204,7 +206,7 @@ def handle_non_json_response(self) -> None: fh.close() - res.headers = self._presp.headers + res.headers = dict(self._presp.headers) self.on_save(fh, res) @@ -259,7 +261,8 @@ def proxy(self) -> None: logger.error(e) try: self.simple_error( - e.response.status_code, http.HTTPStatus(e.response.status_code).phrase.lower(), + e.response.status_code, + http.HTTPStatus(e.response.status_code).phrase.lower(), ) except ValueError: # Return a generic error message when the response From 36688d6aa4012982b6d339f9904f7ccf3c3a4520 Mon Sep 17 00:00:00 2001 From: Allie Crevier <4522213+creviera@users.noreply.github.com> Date: Mon, 7 Jun 2021 11:19:06 -0700 Subject: [PATCH 447/751] Create SECURITY.md --- SECURITY.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..1e84430bb --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,8 @@ +# Security Policy + +## Reporting a Vulnerability + +If you have found a vulnerability, please **DO NOT** file a public issue. Please send us your report privately either via: + +- SecureDrop's public bug bounty program managed by [Bugcrowd](https://bugcrowd.com/freedomofpress) +- Email to security@freedom.press (Optionally GPG-encrypted to [734F6E707434ECA6C007E1AE82BD6C9616DABB79](https://securedrop.org/documents/6/fpf-email.asc) From 8ae31448401a9285a29d816009b3175d7846bc75 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Thu, 17 Jun 2021 10:51:26 -0400 Subject: [PATCH 448/751] Update tests for obsolete flag-for-reply workflow Sources' "is_flagged" attribute is now always false from the server. --- tests/test_shared.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_shared.py b/tests/test_shared.py index 0a1552940..dfe6f0eee 100644 --- a/tests/test_shared.py +++ b/tests/test_shared.py @@ -48,7 +48,7 @@ def flag_source(self): assert self.api.flag_source(s) # Now we will try to get the same source again s2 = self.api.get_source(s) - assert s2.is_flagged + assert not s2.is_flagged def get_single_source(self, from_string=False): s = self.api.get_sources()[0] From db767ac3c145cb588b676b5812635dff3b2ab469 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Tue, 22 Jun 2021 14:07:20 -0400 Subject: [PATCH 449/751] regenerate cassettes --- data/setup_method.json | 2 +- data/test-badotp.yml | 8 +- data/test-badpassword.yml | 10 +- data/test-baduser.yml | 10 +- data/test-delete-reply.yml | 408 ++++++----- data/test-delete-source.yml | 441 +++++------- data/test-delete-submission-from-string.yml | 610 ++++++++-------- data/test-delete-submission.yml | 693 +++++++++---------- data/test-download-reply.yml | 215 +++--- data/test-download-submission.yml | 336 ++++----- data/test-error-unencrypted-reply.yml | 162 ++--- data/test-failed-single-source.yml | 12 +- data/test-flag-source.yml | 205 +++--- data/test-get-all-replies.yml | 323 ++++----- data/test-get-all-submissions.yml | 289 ++++---- data/test-get-current-user.yml | 13 +- data/test-get-replies-from-source.yml | 196 +++--- data/test-get-reply-from-source.yml | 220 +++--- data/test-get-single-source.yml | 193 +++--- data/test-get-sources.yml | 154 ++--- data/test-get-submission.yml | 418 ++++++----- data/test-get-submissions.yml | 221 +++--- data/test-get-users.yml | 16 +- data/test-get-wrong-submissions.yml | 166 ++--- data/test-logout.yml | 6 +- data/test-reply-source-with-uuid.yml | 169 ++--- data/test-reply-source.yml | 169 ++--- data/test-seen.yml | 466 ++++++------- data/test-setup.yml | 13 +- data/test-star-add-remove.yml | 324 ++++----- data/test_api_auth.json | 2 +- data/test_delete_reply.json | 2 +- data/test_delete_source.json | 2 +- data/test_delete_source_from_string.json | 2 +- data/test_delete_submission.json | 2 +- data/test_delete_submission_from_string.json | 2 +- data/test_download_reply.json | 2 +- data/test_error_unencrypted_reply.json | 2 +- data/test_failed_single_source.json | 2 +- data/test_flag_source.json | 2 +- data/test_get_all_replies.json | 2 +- data/test_get_all_submissions.json | 2 +- data/test_get_current_user.json | 2 +- data/test_get_replies_from_source.json | 2 +- data/test_get_reply_from_source.json | 2 +- data/test_get_single_source.json | 2 +- data/test_get_single_source_from_string.json | 2 +- data/test_get_sources.json | 2 +- data/test_get_submission.json | 2 +- data/test_get_submission_from_string.json | 2 +- data/test_get_submissions.json | 2 +- data/test_get_users.json | 2 +- data/test_get_wrong_submissions.json | 2 +- data/test_logout.json | 2 +- data/test_reply_source.json | 2 +- data/test_reply_source_with_uuid.json | 2 +- data/test_seen.json | 2 +- data/test_star_add_remove.json | 2 +- 58 files changed, 3011 insertions(+), 3513 deletions(-) diff --git a/data/setup_method.json b/data/setup_method.json index 16eb50730..1bb39d15a 100644 --- a/data/setup_method.json +++ b/data/setup_method.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test-badotp.yml b/data/test-badotp.yml index 32831828b..11a49509e 100644 --- a/data/test-badotp.yml +++ b/data/test-badotp.yml @@ -17,17 +17,17 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication\ - \ failed.\"\n}\n" + string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication + failed.\"\n}\n" headers: Content-Length: - '73' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:36 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 403 message: FORBIDDEN diff --git a/data/test-badpassword.yml b/data/test-badpassword.yml index a0db919b6..0d26b2179 100644 --- a/data/test-badpassword.yml +++ b/data/test-badpassword.yml @@ -1,6 +1,6 @@ interactions: - request: - body: '{"username": "journalist", "passphrase": "no", "one_time_code": "436824"}' + body: '{"username": "journalist", "passphrase": "no", "one_time_code": "320603"}' headers: Accept: - '*/*' @@ -16,17 +16,17 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication\ - \ failed.\"\n}\n" + string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication + failed.\"\n}\n" headers: Content-Length: - '73' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:36 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 403 message: FORBIDDEN diff --git a/data/test-baduser.yml b/data/test-baduser.yml index 695b62f63..718d620c3 100644 --- a/data/test-baduser.yml +++ b/data/test-baduser.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "no", "passphrase": "correct horse battery staple profanity - oil chewy", "one_time_code": "436824"}' + oil chewy", "one_time_code": "320603"}' headers: Accept: - '*/*' @@ -17,17 +17,17 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication\ - \ failed.\"\n}\n" + string: "{\n \"error\": \"Forbidden\", \n \"message\": \"Token authentication + failed.\"\n}\n" headers: Content-Length: - '73' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:36 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 403 message: FORBIDDEN diff --git a/data/test-delete-reply.yml b/data/test-delete-reply.yml index c2f59a5fb..236ae9e01 100644 --- a/data/test-delete-reply.yml +++ b/data/test-delete-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,84 +18,77 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-port_regularization-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : null, \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ - \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ - \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ - \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ - \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ - \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ - \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ - \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-humorless_steelmaker-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/f5fe9fa3-3a17-4cd6-b48e-90257877bb33\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 753, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"f5fe9fa3-3a17-4cd6-b48e-90257877bb33\"\n }, \n {\n + \ \"filename\": \"6-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/2387a167-4c3c-4732-a13e-a104b2657b74\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 900, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"2387a167-4c3c-4732-a13e-a104b2657b74\"\n }, \n {\n + \ \"filename\": \"5-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 735, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\"\n }, \n {\n + \ \"filename\": \"6-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/3154a8e5-2cde-416a-b53d-2168865d70b6\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 737, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"3154a8e5-2cde-416a-b53d-2168865d70b6\"\n }, \n {\n + \ \"filename\": \"5-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/1953dde7-8506-4faf-97cf-e40b7c99391c\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"1953dde7-8506-4faf-97cf-e40b7c99391c\"\n }, \n {\n + \ \"filename\": \"6-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/6359a232-cb5d-4fae-b832-409b348124f7\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"6359a232-cb5d-4fae-b832-409b348124f7\"\n }, \n {\n + \ \"filename\": \"5-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\"\n }, \n {\n + \ \"filename\": \"6-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/d3145c36-ea7f-4da5-89b5-c507c473aaa2\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"d3145c36-ea7f-4da5-89b5-c507c473aaa2\"\n }\n ]\n}\n" headers: Content-Length: - - '5503' + - '5251' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -107,7 +100,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -118,84 +111,77 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-port_regularization-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : null, \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ - \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ - \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ - \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ - \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ - \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ - \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ - \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-humorless_steelmaker-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/f5fe9fa3-3a17-4cd6-b48e-90257877bb33\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 753, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"f5fe9fa3-3a17-4cd6-b48e-90257877bb33\"\n }, \n {\n + \ \"filename\": \"6-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/2387a167-4c3c-4732-a13e-a104b2657b74\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 900, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"2387a167-4c3c-4732-a13e-a104b2657b74\"\n }, \n {\n + \ \"filename\": \"5-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 735, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\"\n }, \n {\n + \ \"filename\": \"6-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/3154a8e5-2cde-416a-b53d-2168865d70b6\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 737, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"3154a8e5-2cde-416a-b53d-2168865d70b6\"\n }, \n {\n + \ \"filename\": \"5-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/1953dde7-8506-4faf-97cf-e40b7c99391c\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"1953dde7-8506-4faf-97cf-e40b7c99391c\"\n }, \n {\n + \ \"filename\": \"6-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/6359a232-cb5d-4fae-b832-409b348124f7\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"6359a232-cb5d-4fae-b832-409b348124f7\"\n }, \n {\n + \ \"filename\": \"5-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\"\n }, \n {\n + \ \"filename\": \"6-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/d3145c36-ea7f-4da5-89b5-c507c473aaa2\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"d3145c36-ea7f-4da5-89b5-c507c473aaa2\"\n }\n ]\n}\n" headers: Content-Length: - - '5503' + - '5251' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:22 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -207,7 +193,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -217,7 +203,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7 + uri: http://127.0.0.1:8081/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/f5fe9fa3-3a17-4cd6-b48e-90257877bb33 response: body: string: "{\n \"message\": \"Reply deleted\"\n}\n" @@ -227,9 +213,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:22 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -241,7 +227,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -252,75 +238,69 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"6-port_regularization-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : null, \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ - \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ - \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ - \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ - \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ - \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ - \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"6-humorless_steelmaker-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/2387a167-4c3c-4732-a13e-a104b2657b74\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 900, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"2387a167-4c3c-4732-a13e-a104b2657b74\"\n }, \n {\n + \ \"filename\": \"5-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 735, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\"\n }, \n {\n + \ \"filename\": \"6-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/3154a8e5-2cde-416a-b53d-2168865d70b6\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 737, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"3154a8e5-2cde-416a-b53d-2168865d70b6\"\n }, \n {\n + \ \"filename\": \"5-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/1953dde7-8506-4faf-97cf-e40b7c99391c\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"1953dde7-8506-4faf-97cf-e40b7c99391c\"\n }, \n {\n + \ \"filename\": \"6-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/6359a232-cb5d-4fae-b832-409b348124f7\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"6359a232-cb5d-4fae-b832-409b348124f7\"\n }, \n {\n + \ \"filename\": \"5-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\"\n }, \n {\n + \ \"filename\": \"6-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/d3145c36-ea7f-4da5-89b5-c507c473aaa2\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"d3145c36-ea7f-4da5-89b5-c507c473aaa2\"\n }\n ]\n}\n" headers: Content-Length: - - '4817' + - '4564' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:22 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-delete-source.yml b/data/test-delete-source.yml index a525b77dd..e66f91d2e 100644 --- a/data/test-delete-source.yml +++ b/data/test-delete-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 8, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:41 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -135,101 +109,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 8, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 8, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:41 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -241,7 +189,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -251,7 +199,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b response: body: string: "{\n \"message\": \"Source and submissions deleted\"\n}\n" @@ -261,9 +209,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:41 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -275,7 +223,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -286,84 +234,63 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '6410' + - '6538' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:41 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-delete-submission-from-string.yml b/data/test-delete-submission-from-string.yml index f521a58cc..34130ec8f 100644 --- a/data/test-delete-submission-from-string.yml +++ b/data/test-delete-submission-from-string.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,121 +18,120 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '9562' + - '9904' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -144,7 +143,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -155,84 +154,63 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 1, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 1, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '6410' + - '6538' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -244,7 +222,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -252,40 +230,39 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions + uri: http://127.0.0.1:8081/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }\n ]\n}\n" headers: Content-Length: - - '1936' + - '2037' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -297,7 +274,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -307,7 +284,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb + uri: http://127.0.0.1:8081/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1 response: body: string: "{\n \"message\": \"Submission deleted\"\n}\n" @@ -317,9 +294,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -331,7 +308,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -342,114 +319,113 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '8927' + - '9268' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-delete-submission.yml b/data/test-delete-submission.yml index d21312b83..2f7652e5a 100644 --- a/data/test-delete-submission.yml +++ b/data/test-delete-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,128 +18,127 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ - , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ - , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905/download\", + \n \"filename\": \"1-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905\", + \n \"uuid\": \"7474699f-ef83-44a2-bdbe-072ff5e19905\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '10197' + - '10589' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -151,7 +150,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -162,128 +161,127 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ - , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ - , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905/download\", + \n \"filename\": \"1-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905\", + \n \"uuid\": \"7474699f-ef83-44a2-bdbe-072ff5e19905\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '10197' + - '10589' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -295,7 +293,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -305,7 +303,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192 + uri: http://127.0.0.1:8081/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905 response: body: string: "{\n \"message\": \"Submission deleted\"\n}\n" @@ -315,9 +313,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -329,7 +327,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -340,121 +338,120 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '9562' + - '9904' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:42 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-download-reply.yml b/data/test-download-reply.yml index d2532718f..02c4be6c8 100644 --- a/data/test-download-reply.yml +++ b/data/test-download-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,99 +18,92 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ - \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }, \n \ - \ {\n \"filename\": \"5-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ - \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ - \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ - \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ - \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ - \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ - \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ - \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-welcoming_imperialist-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 765, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"61891d96-19d8-4753-9be9-705eb0d2bf88\"\n }, \n {\n + \ \"filename\": \"6-welcoming_imperialist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/38e040ba-f004-41e1-98a9-5c66b704b3da\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 832, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"38e040ba-f004-41e1-98a9-5c66b704b3da\"\n }, \n {\n + \ \"filename\": \"5-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/f5fe9fa3-3a17-4cd6-b48e-90257877bb33\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 753, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"f5fe9fa3-3a17-4cd6-b48e-90257877bb33\"\n }, \n {\n + \ \"filename\": \"6-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/2387a167-4c3c-4732-a13e-a104b2657b74\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 900, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"2387a167-4c3c-4732-a13e-a104b2657b74\"\n }, \n {\n + \ \"filename\": \"5-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 735, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\"\n }, \n {\n + \ \"filename\": \"6-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/3154a8e5-2cde-416a-b53d-2168865d70b6\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 737, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"3154a8e5-2cde-416a-b53d-2168865d70b6\"\n }, \n {\n + \ \"filename\": \"5-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/1953dde7-8506-4faf-97cf-e40b7c99391c\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"1953dde7-8506-4faf-97cf-e40b7c99391c\"\n }, \n {\n + \ \"filename\": \"6-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/6359a232-cb5d-4fae-b832-409b348124f7\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"6359a232-cb5d-4fae-b832-409b348124f7\"\n }, \n {\n + \ \"filename\": \"5-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\"\n }, \n {\n + \ \"filename\": \"6-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/d3145c36-ea7f-4da5-89b5-c507c473aaa2\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"d3145c36-ea7f-4da5-89b5-c507c473aaa2\"\n }\n ]\n}\n" headers: Content-Length: - - '6705' + - '6543' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -122,7 +115,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -130,43 +123,43 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93/download + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88/download response: body: string: !!binary | - hIwDKAH55Hy3CBwBA/9zrq+dIiiVpBy6FAc83Rt8WL521V2dgbrs+eLvriN0SjNUk4QkmR/eJHUi - 7PmIJ2RvGnN1hx36zTp7GtiCgyF5ir84Apw1jB8OTQQ9GDryLPxBbEfE1kwgZPZT+DXkpSSHb3BY - N5q7/ndShEVhuiSyCpo/vDtJos9E83y4uqmEYoUCDAPD58TAoiAbKgEP/3GAHVvAHFmgOcmx3vgG - boCnzQelBb/GgVJT5C7N2Xx3DWt6wIrE7wrm57jBZMvA1B2SoSd7gjbuUutx/41RblHfaWJUwDn2 - mA5NF34QJJy3yJfW2GHbDg4apLwkb76E+oYRXfnfAorj/0pT8luqJz5nttsk/8TRss+2JIDqnvRk - w2kD7dAvwUq9e6hJLca4ziujf51eAsDDKms4YW0YKVWte9ZtWg/nnTaQX52OuLTfBIG77I/FoRiG - hsxUqOEYnz8Lx5Tmy3VV669OyFKUBYMlUuEW06rNsVuuMNsOHU5NqT6nV6UFkzLS7LIml0ky+pmX - xAjV0KSreMkfOxsbRGYeVZkGviqP/+2CDLek+UF1dRt1C9cA+6oE6Z3kRgcLs3G1mktIThDOBMFZ - 4ZgpljP9Y+jam2TeHr9U8FvAi3qO/WPq8GzioyQ5yDVZKo7QCVnoq3nrM+rDASEC9bV5jaxswd7X - kSWZfTceNBH5iUI+ovcO67IAmnVH1iZZam2KA/sldc70l9Q21Cn4OfyI3HPICHlLEs6njv+5yuMn - trOvMtE3z97AmhCmUbclKsGwy8+IJST5FHQAVa9v7/0dcRWisFh/4UFWXMY1ECkeQsVeMvWu/C1A - PyCQVIhuOy2LlW3BYdvPQyFVojxomaq5WnjfkJ1AYbkf/gFRiNkOEYOL0l4Be1yTuZ6oWkKpiPcc - 5OFp+qf8lu/AS3Pbhget5QiKaYHFqTPQC/5TDcMEf3f6/ChBABr+bVxFa+AgOzqn3ydPD7eysnna - ooGybB/AWB8qiJLIqDvwPVVzC5WNpJfl + hIwDbv4ZBGDDU0YBA/sHZ/R6kYC9KKEJ9phgr21CpUbaYt+E1Ki8YsHiq/uSw1Kz40aWh088raQk + BD1YyKAWKecRDuCVLUX773P7ZpycRrNALQC+lEiC2lKcPR97rin3c53EQqM+SIErEUsL5tXt3Xw8 + /q+69XsLss7ON34C//ZPX2jqKX3Yi6ROivtAbIUCDAPD58TAoiAbKgEP/AhAkqtHqA6wAOZhoc3U + KqofBCy8+LnuR8sp53o8JYaTqAotcgx+DGbti0/DmLOZR2+mWgRToQ7WJUDFmU8FWE/a4IDsdPl7 + eJmbLDZ/zCmHIMGQGm/QZpAWlbzG54nD9C+SagUGz+RDNMmfWbo37GIPF9TnasVGQByjfSdWSbqQ + BUCP1Aew9l/0Z6u+VB0VVV/2DRROlYFFM9j37mKv+I5G4tah9QrojiUertCNLRU5nTzY4EOx/wbf + 2g1VOFOQ6wyXvFHN3bSOsNZ+t+nEZWgOZYmaYBG8210OlIt6fqsSMfiJTWkEQPV2BFEEZ9oXLOLm + b/nyaO8UxheKCErgtVZSotoBhWwK2AoHmAtPl93zmyT2nHdiymWbowkK4pWa0dpPy0RIXeQiQMdM + MjHi8LuNMOR1VOsj1Q8vDenHe45tNzabP9lN2kS1eVLYRH15BXolu7q38FqHdUPYNxEL5ZwYCwBh + 4rRR6j3z1Wx8iFhGGjShH1NNDlHDzCR4o9Wy+rP9AXksZTUNhqBLd4P8mi9lkjRrrYVfZF/faHvX + bt3WYHtN6iI5eDtRIuXV+zgtStRkH7HWbuchYRhgwbvIgsouWlpCL6ZLsGLak53ijrVXVMz9VCdW + e0d3E6PYn82IcBg122v6JgZw0QmaW5jhgXaknbl72YXRR9Rf8Mf9w8TE0l4B+v535V5fv8sGvXpj + h0OGMbZnmZADOqemqH6owqUJf43/EElVW5LYAoCRCWqxxH6Yv0HSFURBcQf2sJo04mbzZsXP/GHO + OKLCv29jcrVRrZYmwfkOTQoMUD0QxOkB headers: Cache-Control: - - max-age=43200, public + - public, max-age=43200 Content-Disposition: - - attachment; filename=5-relocated_backbone-reply.gpg + - attachment; filename=5-welcoming_imperialist-reply.gpg Content-Length: - '765' Content-Type: - application/pgp-encrypted Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Etag: - - sha256:eb96cb4f9c0b1ef7feddc00ce29666f060de0142734c1a9fd85b7bb51b81ff8d + - sha256:880e6ef3117e8888563e9cd7fdda1622a7855582f2d5f29c5273d0f37f10e776 Expires: - - Wed, 02 Dec 2020 12:56:40 GMT + - Fri, 18 Jun 2021 03:12:20 GMT Last-Modified: - - Wed, 02 Dec 2020 00:56:17 GMT + - Thu, 17 Jun 2021 15:11:16 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-download-submission.yml b/data/test-download-submission.yml index 204750411..e3fbac4f8 100644 --- a/data/test-download-submission.yml +++ b/data/test-download-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,146 +18,147 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ - , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ - , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ - , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ - , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ - , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ - , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ - , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ - , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8/download\", + \n \"filename\": \"2-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 690, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\", + \n \"uuid\": \"dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1/download\", + \n \"filename\": \"3-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1\", + \n \"uuid\": \"47a7b028-5bb4-41d7-b7c7-f69baba318d1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193/download\", + \n \"filename\": \"4-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193\", + \n \"uuid\": \"48d2441c-7ffc-4878-8369-d13ecde02193\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905/download\", + \n \"filename\": \"1-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 611, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905\", + \n \"uuid\": \"7474699f-ef83-44a2-bdbe-072ff5e19905\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [], \n \"size\": 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '12209' + - '12325' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:37 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -169,7 +170,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -177,40 +178,41 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download + uri: http://127.0.0.1:8081/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download response: body: string: !!binary | - hQIMA8PnxMCiIBsqARAAhKtMUfraQHm9OIrAY9Tjw7ocA4JWqtUi6JD+/r1fGS+KvF8H1QoAA4/H - 09KBJ8U1RZBRo4veAR1VU7qwZcJf9kNNRRJeqR01izu8+VbAkaZG2NqmHM2NwlqKTmHUOmSt/Klg - dxTGKDeIA58Jkc5svm/r1fms8UTTz/WIdIYZvU1NDl4TUyKVbNvejnqm/tIdhpuX/Lj9UWugk5DS - 63WjseAco5LJJkLy0fG3wXkoYnVPi6WATHybdpCvx3mSsWZ/xbzrnq+3sV8+LcYpEFMh0V9HVahb - pEmqy5axCbRTmPYFRDUGsM/tQvwa6xtcK/ZSolcBLFwvlKVsUBtfIrwxEFw7MvylgwU1fF2aHlfq - PLY66FOSazOTPPLzoxTpzj5Jf0Sll1QYZLBVxBiS/JKtUQol19MUVh58SBhPfzPzM9dRJfRH8ynW - ea7B/uiwqyy9NZRQfExIHE5VBMuh3/Gn0O1wPLA53IaLfURwh578EVN8FGSdEvCGzccglEWKlxLH - kMErXJ43Qjpcx4AMjIr0zCiISsYcUjfJWpmhtpHwJ/mbnN4/5D9CKtKokz5AL65YRlvZ+R2qqO5x - Y/yjnVHpXvCw1cLVUwQbsu/wzcpVuok6mtvJlCd5cZNwcH7TE5dVZoZWSKjhLBfarWikMedkAs4y - UJZjzmLiY39qEGq9ltnSXgHY2qivVXKFel923bIooen8d3jBd34Wb82qVP2gD2tA/7U55iTulq3S - Eob8asRoiMElTZUJBKKPKV0cPkHpykAfa8GBIMpHQ4pD4x/kPVHcpbsbQxAS6UBUZQF2+WQ= + hQIMA8PnxMCiIBsqAQ//Wgt1JhL+gNuLe6sXBVg4LCljLxK0epbUKmAWiiihp+y6kW355kFciJPn + JwK4Fn0+hYU08ir6qC/j56zZHvg5w9WG3WxlXFFaV5hFMb5CTP3tQleS+Y7YecGqkiw/cR26flnm + FnFkHNIBBB95g0zvuxTIAQUC9VrehXyt5HpqHruI7AXabsdx2aiI9T5DAMyZGlJ1ubdXOqqRRYCk + /JtumDJSfRW3BifRNzcjzKMDgm7MVYyiv+vD1mI/E/UAg3j8RKK5TmRuf3vxKRTHE0PfF07B4hc9 + pik042jm4MdIpvsp/4Ua2RMZjyc6oTsXgv4BzV7SoC78TOC10ZpLP+yj7ecV/6fIKqq9ApLAZ6YF + LpNVFlhIncLu+TalQ9oa8rkZ12p425OfSfi7jZ0pkeEKFyI6GAYnhJ6DBsvI4++pVpd28TKe5maW + q1htxKBJhtjxoBhjb5JuL1FH4Yj1/lFj17cad1lr3kK/C3JbNz0QWZQgHPajYOiUeAlTWDpmYWkE + 8yX1DstJbBQlodKrMwBYsays0OBJupXYHNqIS6vLxiZKkVK8UeWReGuL7Lj1Sq4WKAhEKnU1I502 + 4eijz8rCOVum4gJ+LOH/YTF1dL+F21Sh2afFaAJyOQWnWf2ztcv3G3zIYVoMBlaSsUSqONYnErmG + epwkL19JBw7lgr2CfunSiQHCk9y81LhIDdFEI0xV2FeLC9+O88df2j9CICn4wWma81Fpu/HQIqxX + UkxaGtrdp/C1K+2VHta4xED2IXZnOeghHpWsZmROckrexLxb4vsONVVUQUKqDo3JxMetj4drTKpw + hTc7491C9EowviPECSH9onuir5vusSUSkvnFNZwlTTr03xDG7dHX headers: Cache-Control: - - max-age=43200, public + - public, max-age=43200 Content-Disposition: - - attachment; filename=1-relocated_backbone-msg.gpg + - attachment; filename=2-elliptic_friar-msg.gpg Content-Length: - - '623' + - '666' Content-Type: - application/pgp-encrypted Date: - - Wed, 02 Dec 2020 00:56:37 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Etag: - - sha256:a468cf4b184d35c9f56966f567d43bc4ccc77d719f3e8e2bcc1da95442217e2b + - sha256:20a4ff1887cee798ddc76e14ea886db1d12aac42c729bef5b4a939d169855258 Expires: - - Wed, 02 Dec 2020 12:56:37 GMT + - Fri, 18 Jun 2021 03:12:18 GMT Last-Modified: - - Wed, 02 Dec 2020 00:56:17 GMT + - Thu, 17 Jun 2021 15:11:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -222,7 +224,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -230,24 +232,24 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025 + uri: http://127.0.0.1:8081/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d response: body: - string: "{\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\": false,\ - \ \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": [], \n\ - \ \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n}\n" + string: "{\n \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, \n + \ \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": [], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n}\n" headers: Content-Length: - - '531' + - '527' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:37 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-error-unencrypted-reply.yml b/data/test-error-unencrypted-reply.yml index 6efc2d354..fd03bfd08 100644 --- a/data/test-error-unencrypted-reply.yml +++ b/data/test-error-unencrypted-reply.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -134,7 +108,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies response: body: string: "{\n \"message\": \"You must encrypt replies client side\"\n}\n" @@ -144,9 +118,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 400 message: BAD REQUEST diff --git a/data/test-failed-single-source.yml b/data/test-failed-single-source.yml index 6a0908682..7bc7492e9 100644 --- a/data/test-failed-single-source.yml +++ b/data/test-failed-single-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,18 +18,18 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources/not%20there response: body: - string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL\ - \ was not found on the server. If you entered the URL manually please check\ - \ your spelling and try again.\"\n}\n" + string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL + was not found on the server. If you entered the URL manually please check + your spelling and try again.\"\n}\n" headers: Content-Length: - '165' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 404 message: NOT FOUND diff --git a/data/test-flag-source.yml b/data/test-flag-source.yml index f1e4f09e9..aedf1f9db 100644 --- a/data/test-flag-source.yml +++ b/data/test-flag-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -134,19 +108,19 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/flag + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/flag response: body: - string: "{\n \"message\": \"Source flagged for reply\"\n}\n" + string: "{\n \"message\": \"Sources no longer need to be flagged for reply\"\n}\n" headers: Content-Length: - - '44' + - '66' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -158,7 +132,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -166,35 +140,30 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"relocated backbone\", \n \"key\"\ - : {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\", \n\ - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ - \ \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", \n \"public\": + \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", \n + \ \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n}\n" headers: Content-Length: - - '1514' + - '1550' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-all-replies.yml b/data/test-get-all-replies.yml index 5c10b6842..52674970f 100644 --- a/data/test-get-all-replies.yml +++ b/data/test-get-all-replies.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -135,99 +109,92 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ - \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }, \n \ - \ {\n \"filename\": \"5-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ - \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ - \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ - \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ - \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ - \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ - \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ - \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-welcoming_imperialist-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 765, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"61891d96-19d8-4753-9be9-705eb0d2bf88\"\n }, \n {\n + \ \"filename\": \"6-welcoming_imperialist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/38e040ba-f004-41e1-98a9-5c66b704b3da\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 832, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"38e040ba-f004-41e1-98a9-5c66b704b3da\"\n }, \n {\n + \ \"filename\": \"5-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/f5fe9fa3-3a17-4cd6-b48e-90257877bb33\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 753, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"f5fe9fa3-3a17-4cd6-b48e-90257877bb33\"\n }, \n {\n + \ \"filename\": \"6-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/2387a167-4c3c-4732-a13e-a104b2657b74\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 900, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"2387a167-4c3c-4732-a13e-a104b2657b74\"\n }, \n {\n + \ \"filename\": \"5-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 735, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\"\n }, \n {\n + \ \"filename\": \"6-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/3154a8e5-2cde-416a-b53d-2168865d70b6\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 737, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"3154a8e5-2cde-416a-b53d-2168865d70b6\"\n }, \n {\n + \ \"filename\": \"5-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/1953dde7-8506-4faf-97cf-e40b7c99391c\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"1953dde7-8506-4faf-97cf-e40b7c99391c\"\n }, \n {\n + \ \"filename\": \"6-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/6359a232-cb5d-4fae-b832-409b348124f7\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"6359a232-cb5d-4fae-b832-409b348124f7\"\n }, \n {\n + \ \"filename\": \"5-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\"\n }, \n {\n + \ \"filename\": \"6-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/d3145c36-ea7f-4da5-89b5-c507c473aaa2\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"d3145c36-ea7f-4da5-89b5-c507c473aaa2\"\n }\n ]\n}\n" headers: Content-Length: - - '6705' + - '6543' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-all-submissions.yml b/data/test-get-all-submissions.yml index 07f07ec9b..801b677b7 100644 --- a/data/test-get-all-submissions.yml +++ b/data/test-get-all-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,156 +18,155 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ - , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ - , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ - , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ - , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ - , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ - , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ - , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ - , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8/download\", + \n \"filename\": \"2-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 690, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\", + \n \"uuid\": \"dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1/download\", + \n \"filename\": \"3-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1\", + \n \"uuid\": \"47a7b028-5bb4-41d7-b7c7-f69baba318d1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193/download\", + \n \"filename\": \"4-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193\", + \n \"uuid\": \"48d2441c-7ffc-4878-8369-d13ecde02193\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905/download\", + \n \"filename\": \"1-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905\", + \n \"uuid\": \"7474699f-ef83-44a2-bdbe-072ff5e19905\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '12739' + - '13192' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-current-user.yml b/data/test-get-current-user.yml index a8c720b96..ebbed7e36 100644 --- a/data/test-get-current-user.yml +++ b/data/test-get-current-user.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,19 +18,18 @@ interactions: uri: http://127.0.0.1:8081/api/v1/user response: body: - string: "{\n \"first_name\": null, \n \"is_admin\": true, \n \"last_login\"\ - : \"2020-12-02T00:56:36.660997Z\", \n \"last_name\": null, \n \"username\"\ - : \"journalist\", \n \"uuid\": \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n\ - }\n" + string: "{\n \"first_name\": null, \n \"is_admin\": true, \n \"last_login\": + \"2021-06-17T15:12:18.455273Z\", \n \"last_name\": null, \n \"username\": + \"journalist\", \n \"uuid\": \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n}\n" headers: Content-Length: - '196' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-replies-from-source.yml b/data/test-get-replies-from-source.yml index d17bee1bb..480f61faf 100644 --- a/data/test-get-replies-from-source.yml +++ b/data/test-get-replies-from-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -132,34 +106,34 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ - \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-welcoming_imperialist-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 765, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"61891d96-19d8-4753-9be9-705eb0d2bf88\"\n }, \n {\n + \ \"filename\": \"6-welcoming_imperialist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/38e040ba-f004-41e1-98a9-5c66b704b3da\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 832, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"38e040ba-f004-41e1-98a9-5c66b704b3da\"\n }\n ]\n}\n" headers: Content-Length: - - '1223' + - '1313' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-reply-from-source.yml b/data/test-get-reply-from-source.yml index e7e31990f..e6f4f61ab 100644 --- a/data/test-get-reply-from-source.yml +++ b/data/test-get-reply-from-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -132,34 +106,34 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n \ - \ {\n \"filename\": \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 834, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-welcoming_imperialist-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 765, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"61891d96-19d8-4753-9be9-705eb0d2bf88\"\n }, \n {\n + \ \"filename\": \"6-welcoming_imperialist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/38e040ba-f004-41e1-98a9-5c66b704b3da\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 832, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"38e040ba-f004-41e1-98a9-5c66b704b3da\"\n }\n ]\n}\n" headers: Content-Length: - - '1223' + - '1313' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -171,7 +145,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -179,25 +153,25 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93 + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88 response: body: - string: "{\n \"filename\": \"5-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n ], \n\ - \ \"size\": 765, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n}\n" + string: "{\n \"filename\": \"5-welcoming_imperialist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"61891d96-19d8-4753-9be9-705eb0d2bf88\"\n}\n" headers: Content-Length: - - '539' + - '622' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-single-source.yml b/data/test-get-single-source.yml index 66c6a41ed..b040dc490 100644 --- a/data/test-get-single-source.yml +++ b/data/test-get-single-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -132,35 +106,30 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"relocated backbone\", \n \"key\"\ - : {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\", \n\ - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ - \ \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", \n \"public\": + \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", \n + \ \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n}\n" headers: Content-Length: - - '1515' + - '1550' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-sources.yml b/data/test-get-sources.yml index aa89d8f1e..6b4616637 100644 --- a/data/test-get-sources.yml +++ b/data/test-get-sources.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-submission.yml b/data/test-get-submission.yml index c228ece2e..e02ea7ef0 100644 --- a/data/test-get-submission.yml +++ b/data/test-get-submission.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,156 +18,155 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ - , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ - , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ - , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ - , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ - , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ - , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ - , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ - , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8/download\", + \n \"filename\": \"2-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 690, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\", + \n \"uuid\": \"dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1/download\", + \n \"filename\": \"3-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1\", + \n \"uuid\": \"47a7b028-5bb4-41d7-b7c7-f69baba318d1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193/download\", + \n \"filename\": \"4-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193\", + \n \"uuid\": \"48d2441c-7ffc-4878-8369-d13ecde02193\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905/download\", + \n \"filename\": \"1-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905\", + \n \"uuid\": \"7474699f-ef83-44a2-bdbe-072ff5e19905\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '12739' + - '13192' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -179,7 +178,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -187,35 +186,30 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20 + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b response: body: - string: "{\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\"\ - : false, \n \"journalist_designation\": \"relocated backbone\", \n \"key\"\ - : {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\", \n\ - \ \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n \"remove_star_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\", \n\ - \ \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ - \ \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n}\n" + string: "{\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", \n \"public\": + \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", \n + \ \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n}\n" headers: Content-Length: - - '1515' + - '1550' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -227,7 +221,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -235,47 +229,46 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ - , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ - , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ - , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ - , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ - , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ - , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8/download\", + \n \"filename\": \"2-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 690, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\", + \n \"uuid\": \"dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1/download\", + \n \"filename\": \"3-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1\", + \n \"uuid\": \"47a7b028-5bb4-41d7-b7c7-f69baba318d1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193/download\", + \n \"filename\": \"4-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193\", + \n \"uuid\": \"48d2441c-7ffc-4878-8369-d13ecde02193\"\n }\n ]\n}\n" headers: Content-Length: - - '2567' + - '2628' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -287,7 +280,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -295,25 +288,24 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025 + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c response: body: - string: "{\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\": false,\ - \ \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": [\n \ - \ \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n ], \n \"size\": 623, \n \"\ - source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n\ - \ \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n}\n" + string: "{\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n}\n" headers: Content-Length: - - '576' + - '579' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-submissions.yml b/data/test-get-submissions.yml index e7bbdcea5..006d738a6 100644 --- a/data/test-get-submissions.yml +++ b/data/test-get-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -132,47 +106,46 @@ interactions: User-Agent: - python-requests/2.22.0 method: GET - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ - , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ - , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ - , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ - , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ - , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ - , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8/download\", + \n \"filename\": \"2-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 690, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\", + \n \"uuid\": \"dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1/download\", + \n \"filename\": \"3-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1\", + \n \"uuid\": \"47a7b028-5bb4-41d7-b7c7-f69baba318d1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193/download\", + \n \"filename\": \"4-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193\", + \n \"uuid\": \"48d2441c-7ffc-4878-8369-d13ecde02193\"\n }\n ]\n}\n" headers: Content-Length: - - '2567' + - '2628' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-users.yml b/data/test-get-users.yml index 9f5344d02..eaf064077 100644 --- a/data/test-get-users.yml +++ b/data/test-get-users.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,20 +18,20 @@ interactions: uri: http://127.0.0.1:8081/api/v1/users response: body: - string: "{\n \"users\": [\n {\n \"first_name\": null, \n \"last_name\"\ - : null, \n \"username\": \"journalist\", \n \"uuid\": \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n }, \n {\n \"first_name\": null, \n \"last_name\": null,\ - \ \n \"username\": \"dellsberg\", \n \"uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - \n }\n ]\n}\n" + string: "{\n \"users\": [\n {\n \"first_name\": null, \n \"last_name\": + null, \n \"username\": \"journalist\", \n \"uuid\": \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ }, \n {\n \"first_name\": null, \n \"last_name\": null, \n + \ \"username\": \"dellsberg\", \n \"uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ }\n ]\n}\n" headers: Content-Length: - '324' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-get-wrong-submissions.yml b/data/test-get-wrong-submissions.yml index ccc295428..0d9db08ed 100644 --- a/data/test-get-wrong-submissions.yml +++ b/data/test-get-wrong-submissions.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -135,18 +109,18 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources/rofl-missing/submissions response: body: - string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL\ - \ was not found on the server. If you entered the URL manually please check\ - \ your spelling and try again.\"\n}\n" + string: "{\n \"error\": \"Not Found\", \n \"message\": \"The requested URL + was not found on the server. If you entered the URL manually please check + your spelling and try again.\"\n}\n" headers: Content-Length: - '165' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:39 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 404 message: NOT FOUND diff --git a/data/test-logout.yml b/data/test-logout.yml index e397a784a..f2e3359f2 100644 --- a/data/test-logout.yml +++ b/data/test-logout.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -27,9 +27,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:43 GMT + - Thu, 17 Jun 2021 15:12:22 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-reply-source-with-uuid.yml b/data/test-reply-source-with-uuid.yml index 77a2fdcce..4106412e8 100644 --- a/data/test-reply-source-with-uuid.yml +++ b/data/test-reply-source-with-uuid.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 7, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 7, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:41 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -125,7 +99,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -135,21 +109,20 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies response: body: - string: "{\n \"filename\": \"8-relocated_backbone-reply.gpg\", \n \"message\"\ - : \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\ - \n}\n" + string: "{\n \"filename\": \"8-welcoming_imperialist-reply.gpg\", \n \"message\": + \"Your reply has been stored\", \n \"uuid\": \"e467868c-1fbb-4b5e-bca2-87944ea83855\"\n}\n" headers: Content-Length: - - '146' + - '149' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:41 GMT + - Thu, 17 Jun 2021 15:12:21 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 201 message: CREATED diff --git a/data/test-reply-source.yml b/data/test-reply-source.yml index ce8a6c7d2..56fa8b994 100644 --- a/data/test-reply-source.yml +++ b/data/test-reply-source.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": true, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated backbone\"\ - , \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8006' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -125,7 +99,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -135,21 +109,20 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies response: body: - string: "{\n \"filename\": \"7-relocated_backbone-reply.gpg\", \n \"message\"\ - : \"Your reply has been stored\", \n \"uuid\": \"167cb614-a0e0-42b3-b9fa-be6cd2d2ebbf\"\ - \n}\n" + string: "{\n \"filename\": \"7-welcoming_imperialist-reply.gpg\", \n \"message\": + \"Your reply has been stored\", \n \"uuid\": \"88e0dfc2-cfd3-427b-9de4-c11e29ebc76d\"\n}\n" headers: Content-Length: - - '146' + - '149' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:40 GMT + - Thu, 17 Jun 2021 15:12:20 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 201 message: CREATED diff --git a/data/test-seen.yml b/data/test-seen.yml index 55290fec7..0a56ffd43 100644 --- a/data/test-seen.yml +++ b/data/test-seen.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,146 +18,147 @@ interactions: uri: http://127.0.0.1:8081/api/v1/submissions response: body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025/download\"\ - , \n \"filename\": \"1-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\ - , \n \"uuid\": \"e5b5e21b-ac05-40e9-b87b-668ce8b9d025\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf/download\"\ - , \n \"filename\": \"2-relocated_backbone-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 692, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\ - , \n \"uuid\": \"6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c/download\"\ - , \n \"filename\": \"3-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\ - , \n \"uuid\": \"cf8b0a7f-d1f8-48cd-8812-50b853533a4c\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a/download\"\ - , \n \"filename\": \"4-relocated_backbone-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"submission_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions/1782e93d-f678-4f0a-a998-b44601a6a34a\"\ - , \n \"uuid\": \"1782e93d-f678-4f0a-a998-b44601a6a34a\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192/download\"\ - , \n \"filename\": \"1-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 611, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/a66b43fb-293e-4562-8c21-ad52a45d5192\"\ - , \n \"uuid\": \"a66b43fb-293e-4562-8c21-ad52a45d5192\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb/download\"\ - , \n \"filename\": \"2-port_regularization-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 759, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/505992f6-2672-424e-ab19-a0b35eea15eb\"\ - , \n \"uuid\": \"505992f6-2672-424e-ab19-a0b35eea15eb\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e/download\"\ - , \n \"filename\": \"3-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/065cf9f9-987c-46b0-907c-3387ef31d50e\"\ - , \n \"uuid\": \"065cf9f9-987c-46b0-907c-3387ef31d50e\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2/download\"\ - , \n \"filename\": \"4-port_regularization-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"submission_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions/42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\ - , \n \"uuid\": \"42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070/download\"\ - , \n \"filename\": \"1-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 593, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/29fc7412-ef38-40fd-b43b-a8109d215070\"\ - , \n \"uuid\": \"29fc7412-ef38-40fd-b43b-a8109d215070\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4/download\"\ - , \n \"filename\": \"2-exhaustive_icing-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\ - , \n \"uuid\": \"7eaa6546-1472-4305-ba5b-3fd32060d2b4\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24/download\"\ - , \n \"filename\": \"3-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\ - , \n \"uuid\": \"e84d6f83-02c9-4df2-94e0-9fe185e7fe24\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09/download\"\ - , \n \"filename\": \"4-exhaustive_icing-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"submission_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions/8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\ - , \n \"uuid\": \"8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999/download\"\ - , \n \"filename\": \"1-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 638, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/90b6647a-20ab-4842-bc5d-90a797c0a999\"\ - , \n \"uuid\": \"90b6647a-20ab-4842-bc5d-90a797c0a999\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8/download\"\ - , \n \"filename\": \"2-accrued_houseful-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\ - , \n \"uuid\": \"5bedf5ad-48a6-410f-88d1-72a96e6ae0e8\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7/download\"\ - , \n \"filename\": \"3-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/939458c2-1c74-4955-b781-0ca51d6f28a7\"\ - , \n \"uuid\": \"939458c2-1c74-4955-b781-0ca51d6f28a7\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5/download\"\ - , \n \"filename\": \"4-accrued_houseful-doc.gz.gpg\", \n \"is_file\"\ - : true, \n \"is_message\": false, \n \"is_read\": false, \n \ - \ \"seen_by\": [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"submission_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions/dc12e125-0f58-4f59-a38c-706714600df5\"\ - , \n \"uuid\": \"dc12e125-0f58-4f59-a38c-706714600df5\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b/download\"\ - , \n \"filename\": \"1-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/cc3480f1-3395-4a79-9be5-58b2a574e11b\"\ - , \n \"uuid\": \"cc3480f1-3395-4a79-9be5-58b2a574e11b\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78/download\"\ - , \n \"filename\": \"2-undisciplined_swindler-msg.gpg\", \n \"is_file\"\ - : false, \n \"is_message\": true, \n \"is_read\": true, \n \ - \ \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\n \ - \ ], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9dcffdac-285c-409f-a3b4-260daaf17a78\"\ - , \n \"uuid\": \"9dcffdac-285c-409f-a3b4-260daaf17a78\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0/download\"\ - , \n \"filename\": \"3-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\ - , \n \"uuid\": \"9529d24d-dd5f-46fb-a926-e2d1d0162ea0\"\n }, \n \ - \ {\n \"download_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596/download\"\ - , \n \"filename\": \"4-undisciplined_swindler-doc.gz.gpg\", \n \"\ - is_file\": true, \n \"is_message\": false, \n \"is_read\": true,\ - \ \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - \n ], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"submission_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions/38f56c75-fdde-4d99-8775-121699bcd596\"\ - , \n \"uuid\": \"38f56c75-fdde-4d99-8775-121699bcd596\"\n }\n ]\n\ - }\n" + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c/download\", + \n \"filename\": \"1-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [], \n \"size\": 623, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/fae66b29-bea2-4c70-8386-f23c575cc63c\", + \n \"uuid\": \"fae66b29-bea2-4c70-8386-f23c575cc63c\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8/download\", + \n \"filename\": \"2-welcoming_imperialist-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 690, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\", + \n \"uuid\": \"dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1/download\", + \n \"filename\": \"3-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/47a7b028-5bb4-41d7-b7c7-f69baba318d1\", + \n \"uuid\": \"47a7b028-5bb4-41d7-b7c7-f69baba318d1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193/download\", + \n \"filename\": \"4-welcoming_imperialist-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"submission_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions/48d2441c-7ffc-4878-8369-d13ecde02193\", + \n \"uuid\": \"48d2441c-7ffc-4878-8369-d13ecde02193\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905/download\", + \n \"filename\": \"1-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 611, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/7474699f-ef83-44a2-bdbe-072ff5e19905\", + \n \"uuid\": \"7474699f-ef83-44a2-bdbe-072ff5e19905\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1/download\", + \n \"filename\": \"2-humorless_steelmaker-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [], \n \"size\": 758, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/bc914985-dd69-4aee-b25a-549e8d5daeb1\", + \n \"uuid\": \"bc914985-dd69-4aee-b25a-549e8d5daeb1\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd/download\", + \n \"filename\": \"3-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/59822dde-92c9-4872-80dc-6061818fdadd\", + \n \"uuid\": \"59822dde-92c9-4872-80dc-6061818fdadd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd/download\", + \n \"filename\": \"4-humorless_steelmaker-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"submission_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions/9690a838-56f1-45a9-9920-d97ad3c645fd\", + \n \"uuid\": \"9690a838-56f1-45a9-9920-d97ad3c645fd\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec/download\", + \n \"filename\": \"1-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 593, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/2971feb6-bd55-4bea-bb89-14a2b75b13ec\", + \n \"uuid\": \"2971feb6-bd55-4bea-bb89-14a2b75b13ec\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508/download\", + \n \"filename\": \"2-compensable_patchiness-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n ], \n \"size\": + 595, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/f61693ef-ff7f-4602-aa3a-b56ea90a1508\", + \n \"uuid\": \"f61693ef-ff7f-4602-aa3a-b56ea90a1508\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf/download\", + \n \"filename\": \"3-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/897f81a7-7d67-4638-b804-396fdbcd4daf\", + \n \"uuid\": \"897f81a7-7d67-4638-b804-396fdbcd4daf\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84/download\", + \n \"filename\": \"4-compensable_patchiness-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"submission_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions/62361a6d-4574-4d10-82b2-988f37730a84\", + \n \"uuid\": \"62361a6d-4574-4d10-82b2-988f37730a84\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae/download\", + \n \"filename\": \"1-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 637, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/fe6b99ee-a541-45a8-bcec-13a31ee57bae\", + \n \"uuid\": \"fe6b99ee-a541-45a8-bcec-13a31ee57bae\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d/download\", + \n \"filename\": \"2-elliptic_friar-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 666, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/c86fc22e-fc95-46e1-9db7-5ff524efb54d\", + \n \"uuid\": \"c86fc22e-fc95-46e1-9db7-5ff524efb54d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00/download\", + \n \"filename\": \"3-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/38984757-d81b-47ad-b79f-d0e8e6c84d00\", + \n \"uuid\": \"38984757-d81b-47ad-b79f-d0e8e6c84d00\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102/download\", + \n \"filename\": \"4-elliptic_friar-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"submission_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions/d9ea9d08-9474-45c9-b00b-8f4127620102\", + \n \"uuid\": \"d9ea9d08-9474-45c9-b00b-8f4127620102\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5/download\", + \n \"filename\": \"1-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\", + \n \"uuid\": \"85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5/download\", + \n \"filename\": \"2-welcome_nightmare-msg.gpg\", \n \"is_file\": + false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/7738b283-b094-433b-a62f-1212b6dd24f5\", + \n \"uuid\": \"7738b283-b094-433b-a62f-1212b6dd24f5\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59/download\", + \n \"filename\": \"3-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/53150f88-7a9a-4e3b-bb8f-a2582ee5be59\", + \n \"uuid\": \"53150f88-7a9a-4e3b-bb8f-a2582ee5be59\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223/download\", + \n \"filename\": \"4-welcome_nightmare-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": + [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"submission_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions/711ea1dc-092f-41e2-9036-c19b6b62c223\", + \n \"uuid\": \"711ea1dc-092f-41e2-9036-c19b6b62c223\"\n }\n ]\n}\n" headers: Content-Length: - - '12209' + - '12325' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:37 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -169,7 +170,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -180,121 +181,112 @@ interactions: uri: http://127.0.0.1:8081/api/v1/replies response: body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-relocated_backbone-reply.gpg\"\ - , \n \"is_deleted_by_source\": false, \n \"journalist_first_name\"\ - : \"\", \n \"journalist_last_name\": \"\", \n \"journalist_username\"\ - : \"deleted\", \n \"journalist_uuid\": \"deleted\", \n \"reply_url\"\ - : \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/6e0bd610-b3de-4008-b62c-dd8e73931e93\"\ - , \n \"seen_by\": [], \n \"size\": 765, \n \"source_url\":\ - \ \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n \"uuid\"\ - : \"6e0bd610-b3de-4008-b62c-dd8e73931e93\"\n }, \n {\n \"filename\"\ - : \"6-relocated_backbone-reply.gpg\", \n \"is_deleted_by_source\": false,\ - \ \n \"journalist_first_name\": \"\", \n \"journalist_last_name\"\ - : \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\"\ - : \"deleted\", \n \"reply_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies/c4e1fa36-029e-4020-af64-9341750c7a40\"\ - , \n \"seen_by\": [], \n \"size\": 834, \n \"source_url\":\ - \ \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\", \n \"uuid\"\ - : \"c4e1fa36-029e-4020-af64-9341750c7a40\"\n }, \n {\n \"filename\"\ - : \"5-port_regularization-reply.gpg\", \n \"is_deleted_by_source\": false,\ - \ \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 753, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7\"\n }, \n \ - \ {\n \"filename\": \"6-port_regularization-reply.gpg\", \n \"\ - is_deleted_by_source\": false, \n \"journalist_first_name\": null, \n\ - \ \"journalist_last_name\": null, \n \"journalist_username\": \"\ - dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies/3d7028c2-b702-4b1a-8461-c36733494e77\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 901, \n \"source_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"3d7028c2-b702-4b1a-8461-c36733494e77\"\n }, \n \ - \ {\n \"filename\": \"5-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/34d13069-0ce8-49ff-a5cb-135e834081d7\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 735, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"34d13069-0ce8-49ff-a5cb-135e834081d7\"\n }, \n \ - \ {\n \"filename\": \"6-exhaustive_icing-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies/37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\ - , \n \"seen_by\": [\n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - \n ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"37449e40-c9a0-4c84-b582-fc99eaffbb5d\"\n }, \n \ - \ {\n \"filename\": \"5-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\ - , \n \"seen_by\": [\n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - \n ], \n \"size\": 780, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"ebf85b28-9606-41df-bd3a-ed8c951bbd1e\"\n }, \n \ - \ {\n \"filename\": \"6-accrued_houseful-reply.gpg\", \n \"is_deleted_by_source\"\ - : false, \n \"journalist_first_name\": null, \n \"journalist_last_name\"\ - : null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\"\ - : \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\", \n \"reply_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies/1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\ - , \n \"seen_by\": [\n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - \n ], \n \"size\": 809, \n \"source_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"1a0f9cf5-d83c-4f97-9491-a2b24f52a761\"\n }, \n \ - \ {\n \"filename\": \"5-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"58f6b1f5-3a00-4fbd-b66d-d1c98243a825\"\n }, \n \ - \ {\n \"filename\": \"6-undisciplined_swindler-reply.gpg\", \n \ - \ \"is_deleted_by_source\": false, \n \"journalist_first_name\": null,\ - \ \n \"journalist_last_name\": null, \n \"journalist_username\"\ - : \"dellsberg\", \n \"journalist_uuid\": \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\ - , \n \"reply_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies/9840f6ca-4e60-493a-9615-d735e98c378c\"\ - , \n \"seen_by\": [\n \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"3cdbbd6a-376b-42af-9e38-1f33141ff04e\"\n ], \n \"\ - size\": 733, \n \"source_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"9840f6ca-4e60-493a-9615-d735e98c378c\"\n }\n ]\n\ - }\n" + string: "{\n \"replies\": [\n {\n \"filename\": \"5-welcoming_imperialist-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", + \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/61891d96-19d8-4753-9be9-705eb0d2bf88\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 765, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"61891d96-19d8-4753-9be9-705eb0d2bf88\"\n }, \n {\n + \ \"filename\": \"6-welcoming_imperialist-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies/38e040ba-f004-41e1-98a9-5c66b704b3da\", + \n \"seen_by\": [], \n \"size\": 832, \n \"source_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"38e040ba-f004-41e1-98a9-5c66b704b3da\"\n }, \n {\n + \ \"filename\": \"5-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/f5fe9fa3-3a17-4cd6-b48e-90257877bb33\", + \n \"seen_by\": [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 753, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"f5fe9fa3-3a17-4cd6-b48e-90257877bb33\"\n }, \n {\n + \ \"filename\": \"6-humorless_steelmaker-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies/2387a167-4c3c-4732-a13e-a104b2657b74\", + \n \"seen_by\": [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 900, \n \"source_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"2387a167-4c3c-4732-a13e-a104b2657b74\"\n }, \n {\n + \ \"filename\": \"5-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 735, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"9ad0bf31-f920-411b-a0e0-d7d45b5bebd8\"\n }, \n {\n + \ \"filename\": \"6-compensable_patchiness-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies/3154a8e5-2cde-416a-b53d-2168865d70b6\", + \n \"seen_by\": [\n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n + \ ], \n \"size\": 737, \n \"source_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"3154a8e5-2cde-416a-b53d-2168865d70b6\"\n }, \n {\n + \ \"filename\": \"5-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/1953dde7-8506-4faf-97cf-e40b7c99391c\", + \n \"seen_by\": [], \n \"size\": 779, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"1953dde7-8506-4faf-97cf-e40b7c99391c\"\n }, \n {\n + \ \"filename\": \"6-elliptic_friar-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies/6359a232-cb5d-4fae-b832-409b348124f7\", + \n \"seen_by\": [], \n \"size\": 808, \n \"source_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"6359a232-cb5d-4fae-b832-409b348124f7\"\n }, \n {\n + \ \"filename\": \"5-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"636dbf24-2f83-458b-8ec2-f26e9c14dc86\"\n ], \n \"size\": + 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363\"\n }, \n {\n + \ \"filename\": \"6-welcome_nightmare-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": + \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": + \"deleted\", \n \"reply_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies/d3145c36-ea7f-4da5-89b5-c507c473aaa2\", + \n \"seen_by\": [\n \"4333050a-5415-4ef7-bfd6-2152f9743648\"\n + \ ], \n \"size\": 733, \n \"source_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"d3145c36-ea7f-4da5-89b5-c507c473aaa2\"\n }\n ]\n}\n" headers: Content-Length: - - '6450' + - '6234' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:37 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK - request: - body: '{"files": ["cf8b0a7f-d1f8-48cd-8812-50b853533a4c", "1782e93d-f678-4f0a-a998-b44601a6a34a", - "065cf9f9-987c-46b0-907c-3387ef31d50e", "42f0dae0-9de9-4ff4-93e7-ad67e0ba03e2", - "e84d6f83-02c9-4df2-94e0-9fe185e7fe24", "8b4797a3-b6b3-4d6e-a80b-0e5c2f78de09", - "939458c2-1c74-4955-b781-0ca51d6f28a7", "dc12e125-0f58-4f59-a38c-706714600df5", - "9529d24d-dd5f-46fb-a926-e2d1d0162ea0", "38f56c75-fdde-4d99-8775-121699bcd596"], - "messages": ["e5b5e21b-ac05-40e9-b87b-668ce8b9d025", "6c8ed062-4cfd-4f30-bc6c-b8cfd6139fdf", - "a66b43fb-293e-4562-8c21-ad52a45d5192", "505992f6-2672-424e-ab19-a0b35eea15eb", - "29fc7412-ef38-40fd-b43b-a8109d215070", "7eaa6546-1472-4305-ba5b-3fd32060d2b4", - "90b6647a-20ab-4842-bc5d-90a797c0a999", "5bedf5ad-48a6-410f-88d1-72a96e6ae0e8", - "cc3480f1-3395-4a79-9be5-58b2a574e11b", "9dcffdac-285c-409f-a3b4-260daaf17a78"], - "replies": ["6e0bd610-b3de-4008-b62c-dd8e73931e93", "c4e1fa36-029e-4020-af64-9341750c7a40", - "dfa0e6df-3634-40ea-8fa7-0c4aa8714ec7", "3d7028c2-b702-4b1a-8461-c36733494e77", - "34d13069-0ce8-49ff-a5cb-135e834081d7", "37449e40-c9a0-4c84-b582-fc99eaffbb5d", - "ebf85b28-9606-41df-bd3a-ed8c951bbd1e", "1a0f9cf5-d83c-4f97-9491-a2b24f52a761", - "58f6b1f5-3a00-4fbd-b66d-d1c98243a825", "9840f6ca-4e60-493a-9615-d735e98c378c"]}' + body: '{"files": ["47a7b028-5bb4-41d7-b7c7-f69baba318d1", "48d2441c-7ffc-4878-8369-d13ecde02193", + "59822dde-92c9-4872-80dc-6061818fdadd", "9690a838-56f1-45a9-9920-d97ad3c645fd", + "897f81a7-7d67-4638-b804-396fdbcd4daf", "62361a6d-4574-4d10-82b2-988f37730a84", + "38984757-d81b-47ad-b79f-d0e8e6c84d00", "d9ea9d08-9474-45c9-b00b-8f4127620102", + "53150f88-7a9a-4e3b-bb8f-a2582ee5be59", "711ea1dc-092f-41e2-9036-c19b6b62c223"], + "messages": ["fae66b29-bea2-4c70-8386-f23c575cc63c", "dd7d7fd1-2f1b-49e6-a66e-540c20aa21f8", + "7474699f-ef83-44a2-bdbe-072ff5e19905", "bc914985-dd69-4aee-b25a-549e8d5daeb1", + "2971feb6-bd55-4bea-bb89-14a2b75b13ec", "f61693ef-ff7f-4602-aa3a-b56ea90a1508", + "fe6b99ee-a541-45a8-bcec-13a31ee57bae", "c86fc22e-fc95-46e1-9db7-5ff524efb54d", + "85d7e9ff-7e86-4a05-b19e-a62d3c87a0f5", "7738b283-b094-433b-a62f-1212b6dd24f5"], + "replies": ["61891d96-19d8-4753-9be9-705eb0d2bf88", "38e040ba-f004-41e1-98a9-5c66b704b3da", + "f5fe9fa3-3a17-4cd6-b48e-90257877bb33", "2387a167-4c3c-4732-a13e-a104b2657b74", + "9ad0bf31-f920-411b-a0e0-d7d45b5bebd8", "3154a8e5-2cde-416a-b53d-2168865d70b6", + "1953dde7-8506-4faf-97cf-e40b7c99391c", "6359a232-cb5d-4fae-b832-409b348124f7", + "4ff5e1cf-eb2c-44b7-85ca-c47c85dbb363", "d3145c36-ea7f-4da5-89b5-c507c473aaa2"]}' headers: Accept: - application/json Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -314,9 +306,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:37 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-setup.yml b/data/test-setup.yml index 2ee52c1c8..dc3595a01 100644 --- a/data/test-setup.yml +++ b/data/test-setup.yml @@ -1,7 +1,7 @@ interactions: - request: body: '{"username": "journalist", "passphrase": "correct horse battery staple - profanity oil chewy", "one_time_code": "436824"}' + profanity oil chewy", "one_time_code": "320603"}' headers: Accept: - '*/*' @@ -17,19 +17,18 @@ interactions: uri: http://127.0.0.1:8081/api/v1/token response: body: - string: "{\n \"expiration\": \"2020-12-02T08:56:36.660604Z\", \n \"journalist_first_name\"\ - : null, \n \"journalist_last_name\": null, \n \"journalist_uuid\": \"24653890-bf5f-4399-bec3-4a0d8b973b76\"\ - , \n \"token\": \"eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc\"\ - \n}\n" + string: "{\n \"expiration\": \"2021-06-17T23:12:18.454912Z\", \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_uuid\": \"4333050a-5415-4ef7-bfd6-2152f9743648\", + \n \"token\": \"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do\"\n}\n" headers: Content-Length: - '317' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:36 GMT + - Thu, 17 Jun 2021 15:12:18 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test-star-add-remove.yml b/data/test-star-add-remove.yml index 5c5b413cf..6a03c6c90 100644 --- a/data/test-star-add-remove.yml +++ b/data/test-star-add-remove.yml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -18,101 +18,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -124,7 +98,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -134,7 +108,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: POST - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star response: body: string: "{\n \"message\": \"Star added\"\n}\n" @@ -144,9 +118,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 201 message: CREATED @@ -158,7 +132,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Length: @@ -168,7 +142,7 @@ interactions: User-Agent: - python-requests/2.22.0 method: DELETE - uri: http://127.0.0.1:8081/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star + uri: http://127.0.0.1:8081/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star response: body: string: "{\n \"message\": \"Star removed\"\n}\n" @@ -178,9 +152,9 @@ interactions: Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK @@ -192,7 +166,7 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Token eyJleHAiOjE2MDY4OTkzOTYsImFsZyI6IkhTMjU2IiwiaWF0IjoxNjA2ODcwNTk2fQ.eyJpZCI6MX0.6-NszJpAh76FAsjfR8uo7CpVO9nnxlMtHJZLThWRuZc + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzk0MjczOCwiZXhwIjoxNjIzOTcxNTM4fQ.eyJpZCI6MX0.xNE1oOw5qVbJjX3qZB4dYJW1pnhWHu1pEJ6j7Xoy0do Connection: - keep-alive Content-Type: @@ -203,101 +177,75 @@ interactions: uri: http://127.0.0.1:8081/api/v1/sources response: body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"relocated\ - \ backbone\", \n \"key\": {\n \"fingerprint\": \"29788F636BEA5032DD5DCCB12801F9E47CB7081C\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALfkNnWqVV7RZCw0BipWx97MCnAlSTlwhsIiVEHOn2/pT5id3H1A\\\ - nENC4GkKw6qN6dxKKJYTi15ILn5iXLpPI8ykbVw/W12zn8AVbHCebW1xGpsAi0kja\\nZpS34/iZeNTlKcK1UEjeXVFuSLi5f9ymY5liTmXuBvEWcP9MNev5KzQXABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE42UTdHTE1KS0I1QzVOT0FQUUZINEdZRjY1SjdOR0FNNFFT\\nR0VSU1pYREQzSjMzNk5XQk1NV1hSR1lST1FKUUdCR1NEVlBRNjYzWkM0SFk0SzdS\\\ - nWllORUFIVU5STFlYRlBLS0taREE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJECgB+eR8twgc3c8EALC978dqm1yIiCHBd3GaxVZo\\\ - n4JASoQl5SxsOFyhiT5TVSlcOG+rte0djg+GOKW8V0Fjmx+zwMiFvnLqgejvvrZ90\\npeJ1j+XQ159lguNrY+NG38pd/msfs4f8MYue5sN+ocxr441POt/NYcnRKfdgijWT\\\ - nIYImSm8mgjrUNhUcQQ0x\\n=aMUS\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.371633Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20/submissions\"\ - , \n \"url\": \"/api/v1/sources/7acd44a5-ac6b-4649-be97-a13f2352be20\"\ - , \n \"uuid\": \"7acd44a5-ac6b-4649-be97-a13f2352be20\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"port regularization\"\ - , \n \"key\": {\n \"fingerprint\": \"D5C1EBBF07D76091F44EC1B750F300AC7895C05D\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJ+Z/Urag7HH7w4FNL8qUYpM8ezWeBvRZiE4H2FJuCTC7sC5RhmK\\\ - n84vk9h56Jiy4HCqJdDUlJBkNXimhLwShMgfQhoTUHXxDialNd434GFhYm0KgiJS6\\nA2j+/Inn7ZrJHXx4MM4llrizeTia/fLcUiIU434Pw+atjmaWWMOsNSKTABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEc2TldNTjVOQ1dPQUFZRVNHS01MM1ZFQVBRTUU3Q1RTSkVM\\nVlpSVVVBN1JJWExBWFhQUlFIVEpQTUNWNFdJTUg1WTJHRzZUWDZLT0xEVkU2VlhP\\\ - nUllDT1M2UjdTN0xDWTJEU1g2Rkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEFDzAKx4lcBdolYEAIJTIao5DRb+EmGkgqbRwnFX\\\ - nJp6JOVoC8x2soBNKU032/uuTuG7QHAVRKSlRc2+Kupg4893/mzn9UNRaO2qrM2LP\\nKBnubbTgk5kozBTutyZup/7BcK34XrKUUOidciuHLIlUHKfwuN3HTG9jyDhV/hfG\\\ - ntWGBvfn2xOaxemgPQ1jw\\n=/+25\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:17.745777Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb/submissions\"\ - , \n \"url\": \"/api/v1/sources/dda2d844-c819-43cd-a026-b72d670235cb\"\ - , \n \"uuid\": \"dda2d844-c819-43cd-a026-b72d670235cb\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"exhaustive\ - \ icing\", \n \"key\": {\n \"fingerprint\": \"9219DD568DC216E6B3B269C9686AC6C69EB71C64\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKibT7BlgtBRV1YtbiA6cEjIa9zL5H8tpsbskapsqwjCN6ijuWVT\\\ - nA91xLJz1y4kYq7lyik2NvnhuWOECHT1O2FS1FhtLc5P7HC0vm3Mui+RvCbhlezaD\\nhN3c2nS+Plk6BiAgI0ECu+xnE+Ij+9WE4MjEKfQQukxBo5pBs4aBKbaBABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPEk2UllDRDZRTUlaU0dRV0s0VURWQlYyTVJPUEozVjdQUVFB\\nRVdCQU1OUUtHTU41RzZKQU01QkY1RFMySjRLSEFKMlkzVERCQ01KUzIyRUVXWTdV\\\ - nR0s1VEdNQTJNRlZFNERISUREUkk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEGhqxsaetxxkmwwD/j1QQ1HmdYXRocwy6Fm3kKKA\\\ - n/hC39MKwD7/Z8tGKhxh/SGwyTWokilZXvaOCi2qPGkbprRQTYwHsYInun1QNPqZC\\n0eJgI5erfqq5N5DPUugZcdVG+526q2u4vWVYITrPKqgnHCxjwJ80cIM3Io2EtbUS\\\ - nYrvXHBRZjtWwnMjElwEp\\n=zvgc\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.103221Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8/submissions\"\ - , \n \"url\": \"/api/v1/sources/5b39f406-4499-4273-8fd6-42360c48fab8\"\ - , \n \"uuid\": \"5b39f406-4499-4273-8fd6-42360c48fab8\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"accrued houseful\"\ - , \n \"key\": {\n \"fingerprint\": \"1FCAA7C525004B3F12721877B0129144296A8796\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKTMc6178NIfiEJcWrs2U4F8tTwrytf4fz2MXlNzYUCq6JgLMuC0\\\ - nG151mkGqfSehcqjHsSRgVskzmEjr9KalUg4TyAkCadIWlXub/6EM2CwY8hl7fRk2\\nq1Yt0B5UOGtm01Af6ALku31dCmVYft2+d+fFqMCjL8cK/PJzHaEAarBfABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPFVSNkRLRFZHNTNXVU1LRVVUNExNSVRYQkJHWTU2SElWM0VS\\nRlRCTk1YQk43Tk83SExUM0NER1dTT0JaNlpUUjNST0lOUkUzR0dDSjNJR0hVVzNY\\\ - nVlhQN1IzTTJVREpHNEc3R0pRWVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJELASkUQpaoeWKFED/j8YuIiEKMo7c3W4SheH3LrS\\\ - nGcoeATgGkvZQqqD86ByUvFFjeUjllVuJf1gEu5vTvLQaltFok3XQWvyOLYJef7Z9\\n8a+/y3/dAn2db0obKmxFsLLHdnXKBfCTRQOt/++zsJzifbhEBa+8zT/bK0r/TB7h\\\ - nz+HCMRsYZppBR+d0LYoC\\n=YLt7\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.546559Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593/submissions\"\ - , \n \"url\": \"/api/v1/sources/125f04cc-535a-42ac-a3ab-7533ca88d593\"\ - , \n \"uuid\": \"125f04cc-535a-42ac-a3ab-7533ca88d593\"\n }, \n \ - \ {\n \"add_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/add_star\"\ - , \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \ - \ \"is_starred\": false, \n \"journalist_designation\": \"undisciplined\ - \ swindler\", \n \"key\": {\n \"fingerprint\": \"BC0910D44D53940D90A568271338BE7FCC3B11D7\"\ - , \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAJP2zVlTVzylsJeiczfFIJ0MtbX0qeGSykmc3zb0xnmXYZEJyP/Z\\\ - ngRKC43noGsEHYckHij9PlQ0rfoSwHdOeqhcZNrUV7x+kosEHsApG9jlVRF8Nwq/T\\nXkdmf+qz+LHnoInpRESHmdWthtp8gyCR18dZ3cvBhIGMJSdGLVs+6ot5ABEBAAG0\\\ - ndVNvdXJjZSBLZXkgPE5XWUFYSERMR01NSUVMWkJOS0JMT09YSTZYVDRBSFVMUDdO\\nTDI3VVJUS0gzTlhZN1Q3TVlHT0U2STdSRVNPTENBWVQ2RkdDTEsyQU9UMlQzWEw2\\\ - nNks2Tk1LT1EyRVRHWlVNUTRKSVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\nCQoLAgQWAgMBAh4BAheAAAoJEBM4vn/MOxHXBIUEAI8OhpdsVFvpQj+8OOIVXeIH\\\ - nFingGx5LqXHZxyauLGt33Rf8mC7UWC9u1KBMUUzxveWRlHWtL/TcdYbcLUHykeHc\\ntB3AraO8UBO/hacD5rcb+C908+v0N7eFJcyLi1K++TWMt4peD2+hNenCGUtegCY3\\\ - nOWMiaVz2Llc0LKlyXmNQ\\n=7fX1\\n-----END PGP PUBLIC KEY BLOCK-----\\n\", \n\ - \ \"type\": \"PGP\"\n }, \n \"last_updated\": \"2020-12-02T00:56:18.916965Z\"\ - , \n \"number_of_documents\": 2, \n \"number_of_messages\": 2, \n\ - \ \"remove_star_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/remove_star\"\ - , \n \"replies_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/replies\"\ - , \n \"submissions_url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335/submissions\"\ - , \n \"url\": \"/api/v1/sources/fd91c015-8066-435d-8589-65a4da14b335\"\ - , \n \"uuid\": \"fd91c015-8066-435d-8589-65a4da14b335\"\n }\n ]\n\ - }\n" + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcoming imperialist\", \n \"key\": + {\n \"fingerprint\": \"6CA4799C305D7DB5ADBAD5CF6EFE190460C35346\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAO+DZTMnikgIxD5cOoqEXzvoepd506s4ouBAuIQwUPcdqI9xouV1\\nkV0x3ENffVC6slpr4o0Ash06RgysOl6EFHWjvP7ZstY+bJ6LmZXU2ZAvwhGmm9P/\\nHr9Mzgr4qa+SyCXrJy4MfUodbfQg+FmIV4wanpG7HRUQT2abvHNOPZZjABEBAAG0\\ndVNvdXJjZSBLZXkgPEI3WFFKTENIU1FBR1ZSQlpaTldQVDRaQVZMRjRUQzNDQ0RE\\nM05EWDREQzNLQUNST0tWN0xBVlJDWVlIV0pGWE8zNjU2NUJRNkNFNkEzR1o1Q1lY\\nTFA0NVJZN1pTTUpZTFhETDNIV0k9PojOBBMBCgA4FiEEbKR5nDBdfbWtutXPbv4Z\\nBGDDU0YFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQbv4ZBGDD\\nU0bR5AP/cuDEPCLCNhB+2hvQw6j/CJzjI2YXJxq509+oupd/YTzNRU//5zsN0scu\\nTyc/zhQYBs3H5cSLn15QKMvpvO/AZiXH1wwbkHEHCM/p6FLRU01Toa6rQB0R67ym\\nvzZG+iHup0yJQYYOtIJ3LK89btDw0dk2/YgcQZAb5P5osq3pdjk=\\n=MP5H\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.055418Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/remove_star\", + \n \"replies_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/replies\", + \n \"submissions_url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b/submissions\", + \n \"url\": \"/api/v1/sources/e203b5fe-c2c7-40c2-a679-7c5e663d627b\", + \n \"uuid\": \"e203b5fe-c2c7-40c2-a679-7c5e663d627b\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"humorless steelmaker\", \n \"key\": + {\n \"fingerprint\": \"B8731EC83AD2B4153B4C903FA5A82A960615D39A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAKxl4c1JRkkrpzLBdKZYHe/OFZHiFbzldNbLNdqASsEBAYa7zPcv\\nSH9bo8/8igoOHjA6jwH2oBDHMBsfXNImByaAy0K9ZXCEj7bMVyoEar/bzRKffTNk\\npFeBz7Muw/fEc2Hcy+Y6DUnI+EBBfHlq+eueb8+7+JCadq6BWL0tFFG3ABEBAAG0\\ndVNvdXJjZSBLZXkgPExDSlEzT0tQNUpUTkg2QU1XM0pXREVNVkhCSzNNVEZPTjM1\\nSDNYWlpLSVVQSTcyQURHU1dESUVPRFpKRVdZWFY1UVlSTVRVUVJJUkdHSFFCS1VP\\nVEVCSjRIRUVLWkI2WVdQTkFZNEk9PojOBBMBCgA4FiEEuHMeyDrStBU7TJA/pagq\\nlgYV05oFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQpagqlgYV\\n05oBqAQAiwPAUgCNg5IUyBnqsxG/kZSaJzOMHZl/6D8saZ5HiLUkYkDhoD/65CB5\\nuHU5Z5zoXwOeXD5ov9IHQNZkJu68TdzJleAP7XznAJoRfFvH63wIsmEGyuDqduyL\\nnCb7wJU0vTq2a9K+DsnhASqSKsWFmuXh6vDszPAc/AiLI1Q0bnM=\\n=5Pyy\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:16.892220Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2/submissions\", + \n \"url\": \"/api/v1/sources/a04f525c-155c-4f5a-a549-a1966f78c1d2\", + \n \"uuid\": \"a04f525c-155c-4f5a-a549-a1966f78c1d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"compensable patchiness\", \n + \ \"key\": {\n \"fingerprint\": \"EE7E1CFB095A4C40EA84E206EA45EBA3F72F6175\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL5PzVxdpTvfacoQx66neG41pBe+fah1z7OTju8UpLmFiPE0IvdB\\n6bcHS3Fa+wDa61Ap6BeF2wYiRGN72EPScl+kF9x1alsbyqU9yp6nFod1w1FPnlK1\\ngGPBQsQrTP8Cw2cSMtaYGsy3ZXG9f4/aIKwCU1eRuEP/utbxBQymaa19ABEBAAG0\\ndVNvdXJjZSBLZXkgPERBU1BZQlRUTk5KSkFIUUFaN01aNlpJSVlGNjJGVTZaQzZR\\nNVFUUDRQRE9SR01YNlJPM0oyVVFSN1hUSUpSNlpDVk1DTk1MRjQyWEtQU0lPTEY0\\nTFVGQktRSUdHU09TUDRXN0w3RFk9PojOBBMBCgA4FiEE7n4c+wlaTEDqhOIG6kXr\\no/cvYXUFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ6kXro/cv\\nYXUNHQP/ZxjQj+W9Rp63gQqz/8PU01dHL7I57KiTjW3GG4zo4ru0yEIsEjBcy+Yk\\nettmiFIxsoBPqG+qxWS3Hg/EqGetlKr2iR0LPIS8wOgPydglrlqUKas9uvRZaopR\\nB7JqPJp8F57u1SohOfp5c0AQAwjsWWHSdzgC6y3je6UuUH+SMoE=\\n=O8uE\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:17.718469Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/remove_star\", + \n \"replies_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/replies\", + \n \"submissions_url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c/submissions\", + \n \"url\": \"/api/v1/sources/fa717c8e-fa66-4ef4-b15f-1621318bbd5c\", + \n \"uuid\": \"fa717c8e-fa66-4ef4-b15f-1621318bbd5c\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"elliptic friar\", \n \"key\": + {\n \"fingerprint\": \"823CCF06BC9551E71394D74092B928DF26417DBB\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEALPv54sCQNbIkJVy3W3MWXJWb+NWUOfeyOjn3xnEHS/+8yl+olzv\\n+rUkm0GLhdCbKBMCEgwykZX1qbAf9Av88jT88mRHIWRgRk/V2Kd8bPAc0aCggUjB\\nPtP89aIjiNVrWfQ32hTriNtMzHimOebwqi1u5uKJ9ZhuRsiAQkkNSQK9ABEBAAG0\\ndVNvdXJjZSBLZXkgPEg3NzQ0V0ZKTENTSEFKUkdFSTRER1RBTUNYTllUSVZPTUZV\\nR0ZNQ0Y1WFpCRTJGNE5CNjI2R0NRUklHWklOVkhLQlZaSTdRTFlQN09RTFBEQ1M0\\nWUk0QlNISVBXQlA0MlA0UUlONkE9PojOBBMBCgA4FiEEgjzPBryVUecTlNdAkrko\\n3yZBfbsFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQkrko3yZB\\nfbsoiQQAlOAE9Hdl2XIrIQvCMl0ZHgNmSUi/YZfR1ouicJyIycyitGwujE9RsWI4\\njUBEEmOACVlN0FPz2v7PAo7M8A8v+KM7eGaeBNsjqMDphzRH6r5zBs+ZP3poPc50\\n3cQ92JGp3QgT0HICF2N7CHnG0ngNlwu42oai1hhx6NPH5cTeuYE=\\n=f1bh\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:18.595067Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/remove_star\", + \n \"replies_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/replies\", + \n \"submissions_url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e/submissions\", + \n \"url\": \"/api/v1/sources/887ab883-d5db-4ccf-9884-4125fa32076e\", + \n \"uuid\": \"887ab883-d5db-4ccf-9884-4125fa32076e\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"welcome nightmare\", \n \"key\": + {\n \"fingerprint\": \"7E60F24FC982BDDD83FAA9950FA06EC42E9E8C29\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAOseWZbEtFEPF4BZMl3PR10YGRNCeE5OM3w225Kmv8DCVWgmezld\\nvAgVqpVfPyqB0W7Se1nBAamCZ+A2cqd5/vH6qc9pxNRCRUsX0fUtK0Aaszn8M4p3\\nucg5nV8qy0Ild4T23uV+AKaUs+20p4kUmtGHCAyeIqccQ+mvYrS/UX1XABEBAAG0\\ndVNvdXJjZSBLZXkgPFFUTEVZVVdWVFhMV1BLWUhZWDZQMkZHVFNMN0lVRFVTMlAy\\nRTNRVkRGSkU1TU9TMk5TVlJNTVJZVEtSNzUzUEVKNURWS0FXUTZMQ1hDTTIyTVZE\\nWFRLWVFDUVBYUVJOUFJVUjc3M1E9PojOBBMBCgA4FiEEfmDyT8mCvd2D+qmVD6Bu\\nxC6ejCkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQD6BuxC6e\\njClOZgQA4n0Ae691orM2+wWBtL2f1cuGlRrebTAru6hC6t04dmxSNITrZEd36kwF\\nxcfF3z7C1bAn3DgCwAKSQgvSA5DsPM4tyA3vI/Wuw+mEG2wje3GeYMe+wg+vjtP6\\nbEzgW9+sigIq3isTz740pqEB9iXJ7bumhlXklq8ngobF+6JvqUM=\\n=heDS\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-17T15:11:19.445532Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/remove_star\", + \n \"replies_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/replies\", + \n \"submissions_url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87/submissions\", + \n \"url\": \"/api/v1/sources/08085505-fe4d-41aa-8732-6f6fe67e4e87\", + \n \"uuid\": \"08085505-fe4d-41aa-8732-6f6fe67e4e87\"\n }\n ]\n}\n" headers: Content-Length: - - '8007' + - '8170' Content-Type: - application/json Date: - - Wed, 02 Dec 2020 00:56:38 GMT + - Thu, 17 Jun 2021 15:12:19 GMT Server: - - Werkzeug/0.16.0 Python/3.5.2 + - Werkzeug/0.16.0 Python/3.8.5 status: code: 200 message: OK diff --git a/data/test_api_auth.json b/data/test_api_auth.json index 16eb50730..1bb39d15a 100644 --- a/data/test_api_auth.json +++ b/data/test_api_auth.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_reply.json b/data/test_delete_reply.json index 5678195e5..dd156ef1e 100644 --- a/data/test_delete_reply.json +++ b/data/test_delete_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:50 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4141\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:51 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:51 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3454\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:52 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 780, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 809, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4023\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 780, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 809, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4023\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:14 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Reply deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"33\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:14 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 780, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 809, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"3429\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:15 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source.json b/data/test_delete_source.json index c102978eb..fbb2b0861 100644 --- a/data/test_delete_source.json +++ b/data/test_delete_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 8, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:40 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 8, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:41 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:42 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6410\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:42 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 8, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:01 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 8, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:01 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:02 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6523\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:03 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_source_from_string.json b/data/test_delete_source_from_string.json index 8a086380a..591eb2ed5 100644 --- a/data/test_delete_source_from_string.json +++ b/data/test_delete_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6410\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:43 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6410\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:43 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:44 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4817\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:45 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6523\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:04 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6523\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:04 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source and submissions deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"50\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:05 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4896\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:06 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission.json b/data/test_delete_submission.json index bbec8920d..f44f1b4b5 100644 --- a/data/test_delete_submission.json +++ b/data/test_delete_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7671\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:45 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7671\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:46 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:47 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7035\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:47 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873/download\\\", \\n \\\"filename\\\": \\\"1-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\n \\\"uuid\\\": \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7652\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:07 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873/download\\\", \\n \\\"filename\\\": \\\"1-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\n \\\"uuid\\\": \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7652\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:07 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:08 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7025\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:09 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_delete_submission_from_string.json b/data/test_delete_submission_from_string.json index 75cd25bac..67511b8df 100644 --- a/data/test_delete_submission_from_string.json +++ b/data/test_delete_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7035\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:48 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4817\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:48 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1939\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:49 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:49 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6399\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:50 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"7025\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:09 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 1, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4896\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:10 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1961\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:11 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Submission deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"38\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:11 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6398\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:12 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_download_reply.json b/data/test_download_reply.json index 547b5b51d..a76031fdf 100644 --- a/data/test_download_reply.json +++ b/data/test_download_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 900, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6701\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:37 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"a01bcbec-7b54-4f34-984e-12fc1b90d4f7\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=5-absorbent_ranula-reply.gpg\", \"Content-Length\": \"765\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Fri, 04 Dec 2020 01:22:04 GMT\", \"Cache-Control\": \"max-age=43200, public\", \"Expires\": \"Fri, 04 Dec 2020 13:22:37 GMT\", \"Etag\": \"sha256:dfb71fafaf6b45ffb65e76ac16deb2f499e7c399125ee6b47f71aa0a4c7d6437\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:37 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 834, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-hairy_witchcraft-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies/0f684031-4cbc-4035-b40c-18827abda77d\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"0f684031-4cbc-4035-b40c-18827abda77d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-hairy_witchcraft-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies/a95c1e96-1b38-4676-bff0-7fc16e430add\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 902, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"a95c1e96-1b38-4676-bff0-7fc16e430add\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 780, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 809, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6427\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:56 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca/download\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\\"filename\\\": \\\"89fa83c9-376c-41e7-b5cf-3760a78dd9bd\\\"}\", \"headers\": {\"Content-Disposition\": \"attachment; filename=5-unfavorable_littoral-reply.gpg\", \"Content-Length\": \"765\", \"Content-Type\": \"application/json\", \"Last-Modified\": \"Tue, 22 Jun 2021 17:59:18 GMT\", \"Cache-Control\": \"public, max-age=43200\", \"Expires\": \"Wed, 23 Jun 2021 06:00:57 GMT\", \"Etag\": \"sha256:ccb3e9bfdbe91f4bd1180e43a0be8c0d5cba06fc925e29761834c96d01039ce3\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:57 GMT\", \"X-Origin-Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_error_unencrypted_reply.json b/data/test_error_unencrypted_reply.json index 9922faaf0..b3e8547a2 100644 --- a/data/test_error_unencrypted_reply.json +++ b/data/test_error_unencrypted_reply.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:32 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:50 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"hello\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\", \"timeout\": 20}+2": "{\"status\": 400, \"body\": \"{\\\"error\\\": \\\"bad request\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_failed_single_source.json b/data/test_failed_single_source.json index 95f1cf289..268e9f783 100644 --- a/data/test_failed_single_source.json +++ b/data/test_failed_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/not there\", \"timeout\": 20}+1": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_flag_source.json b/data/test_flag_source.json index b363a6948..a80dd5f95 100644 --- a/data/test_flag_source.json +++ b/data/test_flag_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"44\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1512\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:31 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:47 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/flag\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Sources no longer need to be flagged for reply\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"66\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:47 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1549\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:48 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_replies.json b/data/test_get_all_replies.json index 5a1ca260f..b1f26e4e7 100644 --- a/data/test_get_all_replies.json +++ b/data/test_get_all_replies.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:36 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 900, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6701\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:36 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:55 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 834, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-hairy_witchcraft-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies/0f684031-4cbc-4035-b40c-18827abda77d\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"0f684031-4cbc-4035-b40c-18827abda77d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-hairy_witchcraft-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies/a95c1e96-1b38-4676-bff0-7fc16e430add\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 902, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"a95c1e96-1b38-4676-bff0-7fc16e430add\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 780, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 809, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6427\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:56 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_all_submissions.json b/data/test_get_all_submissions.json index c1ff8806c..699de9a1f 100644 --- a/data/test_get_all_submissions.json +++ b/data/test_get_all_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12731\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:29 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e/download\\\", \\n \\\"filename\\\": \\\"1-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e\\\", \\n \\\"uuid\\\": \\\"55707270-e7b3-415e-9b8a-cc102d94d51e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462/download\\\", \\n \\\"filename\\\": \\\"2-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 760, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462\\\", \\n \\\"uuid\\\": \\\"fb36cb05-0da1-4008-b191-dddc8ae6b462\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4/download\\\", \\n \\\"filename\\\": \\\"3-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\", \\n \\\"uuid\\\": \\\"0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b/download\\\", \\n \\\"filename\\\": \\\"4-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\", \\n \\\"uuid\\\": \\\"b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873/download\\\", \\n \\\"filename\\\": \\\"1-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\n \\\"uuid\\\": \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12834\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:46 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_current_user.json b/data/test_get_current_user.json index 93a6a0cfb..03bcd6030 100644 --- a/data/test_get_current_user.json +++ b/data/test_get_current_user.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2020-12-04T01:22:13.577866Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"196\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:31 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/user\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"first_name\\\": null, \\n \\\"is_admin\\\": true, \\n \\\"last_login\\\": \\\"2021-06-22T18:00:28.608109Z\\\", \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"196\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:49 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_replies_from_source.json b/data/test_get_replies_from_source.json index 05a66a30c..d153b90a0 100644 --- a/data/test_get_replies_from_source.json +++ b/data/test_get_replies_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:33 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1219\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:34 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:51 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 834, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1227\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:52 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_reply_from_source.json b/data/test_get_reply_from_source.json index 4260096cb..322d3ef8f 100644 --- a/data/test_get_reply_from_source.json +++ b/data/test_get_reply_from_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:34 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1219\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:35 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"537\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:35 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:53 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 834, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1227\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:54 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"filename\\\": \\\"5-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"541\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:54 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source.json b/data/test_get_single_source.json index 5adfa2e12..9579aff6f 100644 --- a/data/test_get_single_source.json +++ b/data/test_get_single_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:20 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:21 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:34 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1549\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:35 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_single_source_from_string.json b/data/test_get_single_source_from_string.json index dbb83ddad..1d303c289 100644 --- a/data/test_get_single_source_from_string.json +++ b/data/test_get_single_source_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:21 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:22 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:36 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1549\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:36 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_sources.json b/data/test_get_sources.json index ef1651b7b..6e10b5698 100644 --- a/data/test_get_sources.json +++ b/data/test_get_sources.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:17 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:31 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission.json b/data/test_get_submission.json index ca1a8b0e1..dfa47cc0a 100644 --- a/data/test_get_submission.json +++ b/data/test_get_submission.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12731\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:24 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:24 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2559\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:25 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"574\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:25 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e/download\\\", \\n \\\"filename\\\": \\\"1-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e\\\", \\n \\\"uuid\\\": \\\"55707270-e7b3-415e-9b8a-cc102d94d51e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462/download\\\", \\n \\\"filename\\\": \\\"2-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 760, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462\\\", \\n \\\"uuid\\\": \\\"fb36cb05-0da1-4008-b191-dddc8ae6b462\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4/download\\\", \\n \\\"filename\\\": \\\"3-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\", \\n \\\"uuid\\\": \\\"0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b/download\\\", \\n \\\"filename\\\": \\\"4-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\", \\n \\\"uuid\\\": \\\"b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873/download\\\", \\n \\\"filename\\\": \\\"1-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\n \\\"uuid\\\": \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12834\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:39 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1549\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:40 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2575\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:40 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"578\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:41 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submission_from_string.json b/data/test_get_submission_from_string.json index f18d78b7e..790ef1837 100644 --- a/data/test_get_submission_from_string.json +++ b/data/test_get_submission_from_string.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12731\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:26 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1513\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:26 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2559\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:27 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"574\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:27 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e/download\\\", \\n \\\"filename\\\": \\\"1-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e\\\", \\n \\\"uuid\\\": \\\"55707270-e7b3-415e-9b8a-cc102d94d51e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462/download\\\", \\n \\\"filename\\\": \\\"2-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 760, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462\\\", \\n \\\"uuid\\\": \\\"fb36cb05-0da1-4008-b191-dddc8ae6b462\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4/download\\\", \\n \\\"filename\\\": \\\"3-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\", \\n \\\"uuid\\\": \\\"0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b/download\\\", \\n \\\"filename\\\": \\\"4-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\", \\n \\\"uuid\\\": \\\"b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873/download\\\", \\n \\\"filename\\\": \\\"1-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\n \\\"uuid\\\": \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12834\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:42 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1549\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:42 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2575\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:43 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"578\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:44 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_submissions.json b/data/test_get_submissions.json index f185ac695..c56fa9020 100644 --- a/data/test_get_submissions.json +++ b/data/test_get_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:23 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2559\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:23 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:38 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"2575\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:38 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_users.json b/data/test_get_users.json index 780ca7877..1aef80f04 100644 --- a/data/test_get_users.json +++ b/data/test_get_users.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"users\\\": [\\n {\\n \\\"first_name\\\": null, \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n }, \\n {\\n \\\"first_name\\\": null, \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"dellsberg\\\", \\n \\\"uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"324\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:32 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/users\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"users\\\": [\\n {\\n \\\"first_name\\\": null, \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"journalist\\\", \\n \\\"uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n }, \\n {\\n \\\"first_name\\\": null, \\n \\\"last_name\\\": null, \\n \\\"username\\\": \\\"dellsberg\\\", \\n \\\"uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"324\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:49 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_get_wrong_submissions.json b/data/test_get_wrong_submissions.json index 96db2bf3e..57a62d558 100644 --- a/data/test_get_wrong_submissions.json +++ b/data/test_get_wrong_submissions.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:28 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:44 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/rofl-missing/submissions\", \"timeout\": 20}+2": "{\"status\": 404, \"body\": \"{\\\"error\\\": \\\"not found\\\"}\", \"headers\": {\"Content-Type\": \"application/json\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_logout.json b/data/test_logout.json index 171913951..2cb9b5e0e 100644 --- a/data/test_logout.json +++ b/data/test_logout.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:52 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/logout\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Your token has been revoked.\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"48\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:16 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source.json b/data/test_reply_source.json index 09b9f575e..36090141a 100644 --- a/data/test_reply_source.json +++ b/data/test_reply_source.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:38 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"7-absorbent_ranula-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"ef79f3fa-de68-4338-b255-7d54949ff5bb\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"144\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:39 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:58 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"7-unfavorable_littoral-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"1c461c02-d0cf-47f8-9ff5-8eca6fd675c7\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"148\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:59 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_reply_source_with_uuid.json b/data/test_reply_source_with_uuid.json index 8f646b822..e0ffc6d57 100644 --- a/data/test_reply_source_with_uuid.json +++ b/data/test_reply_source_with_uuid.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": true, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8004\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:39 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"8-absorbent_ranula-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"144\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:40 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 7, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:59 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"reply\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n\\\\nhQIMA/uCql0ybaddAQ//dg2iojyiyXBaUzKbPaL9+FlEEvraxXO+BbhcsbEdLI5E\\\\nKYxP5xb1LEOdaJjUcQaPjSARPnFbLzq3vsafZCBrEHtMWnSWxEpxbI1/DO+/Wbk1\\\\nT+ZVltaAdOIulfuMlIlL4rVCbprg+QUQbsbtIIOFdXpvuS1kQdv+F/sfYsFQanQw\\\\nV6u/yz3hgyymUyoBfZOXUfpFQ/t759s3rt3OGvwTzOx6o8Q3X+cKypwYsGsHzAUr\\\\n/N2Ggy6hYVzDj1czjtgUF2EWyKKfTN2RO9y+E0PYnu7C6QN41dx4yPsXFq16kOWC\\\\nLDyeXW2A/3/fGqp9176V4DRHMkUB6WkkXnekJBiyar1rG7WJ09KNdXGKJw6tjlqT\\\\nz4mnjgkZopSbuwJJgs+RZFddpGU31PSQg3ODWZRmSQbL/7lFtsJCY0yFjGoEdJFw\\\\npg5nJ6uOQN6bWPdM47nEPweFgNBIPmQccm0ayewaxvpIgTH+okBlLMPxnDg51vaA\\\\nF7dzZP4SdNQuBkHKq3DW7tu21+haa5YcjY5vJry9o5Fu9qJJadiI8Cg0JJqTVsUs\\\\n7Vu4eK1F9popI5hzdRBvBIdNB4LlIJiYmMKxD7l5yyOXSdoyINPU04PwxM3yO6QH\\\\n5Uw7gVNYCvgKSHAvfFnYAjPSd1m7CPW/aI2EjIHMBf+8FEyyWdHduPCMHZhUZ5XS\\\\nVAFdU++LS7PKxIFsXKtkHSMmO+GRfI/+SrVmGfw1YJbSmhaRAPk5ChqS7RQMgz/j\\\\nt+mAINV0vHUNAJkMW/QZXgdVw+eca0ITs/1u3fKsBlmQNv4Efg==\\\\n=686S\\\\n-----END PGP MESSAGE-----\\\\n\\\\n\\\", \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"filename\\\": \\\"8-unfavorable_littoral-reply.gpg\\\", \\n \\\"message\\\": \\\"Your reply has been stored\\\", \\n \\\"uuid\\\": \\\"e467868c-1fbb-4b5e-bca2-87944ea83855\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"148\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:01:00 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_seen.json b/data/test_seen.json index 2bf25f263..1b86cd6c2 100644 --- a/data/test_seen.json +++ b/data/test_seen.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39/download\\\", \\n \\\"filename\\\": \\\"1-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\n \\\"uuid\\\": \\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114/download\\\", \\n \\\"filename\\\": \\\"2-absorbent_ranula-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 691, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\n \\\"uuid\\\": \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474/download\\\", \\n \\\"filename\\\": \\\"3-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/396be7fb-cacb-478c-8a07-da17d7521474\\\", \\n \\\"uuid\\\": \\\"396be7fb-cacb-478c-8a07-da17d7521474\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c/download\\\", \\n \\\"filename\\\": \\\"4-absorbent_ranula-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions/5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\n \\\"uuid\\\": \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38/download\\\", \\n \\\"filename\\\": \\\"1-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\n \\\"uuid\\\": \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c/download\\\", \\n \\\"filename\\\": \\\"2-slushy_drought-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 758, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\n \\\"uuid\\\": \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae/download\\\", \\n \\\"filename\\\": \\\"3-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\n \\\"uuid\\\": \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727/download\\\", \\n \\\"filename\\\": \\\"4-slushy_drought-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions/208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\n \\\"uuid\\\": \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf/download\\\", \\n \\\"filename\\\": \\\"1-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\n \\\"uuid\\\": \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea/download\\\", \\n \\\"filename\\\": \\\"2-unnoticeable_blinker-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\n \\\"uuid\\\": \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1/download\\\", \\n \\\"filename\\\": \\\"3-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\n \\\"uuid\\\": \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d/download\\\", \\n \\\"filename\\\": \\\"4-unnoticeable_blinker-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions/c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\n \\\"uuid\\\": \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe/download\\\", \\n \\\"filename\\\": \\\"1-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 637, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\n \\\"uuid\\\": \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192/download\\\", \\n \\\"filename\\\": \\\"2-recognized_preamble-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 666, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\n \\\"uuid\\\": \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f/download\\\", \\n \\\"filename\\\": \\\"3-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\n \\\"uuid\\\": \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd/download\\\", \\n \\\"filename\\\": \\\"4-recognized_preamble-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions/bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\n \\\"uuid\\\": \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f/download\\\", \\n \\\"filename\\\": \\\"1-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\n \\\"uuid\\\": \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b/download\\\", \\n \\\"filename\\\": \\\"2-chaste_disappearance-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/5d7affca-c97e-4039-85a9-3411cecdc36b\\\", \\n \\\"uuid\\\": \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39/download\\\", \\n \\\"filename\\\": \\\"3-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\n \\\"uuid\\\": \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f/download\\\", \\n \\\"filename\\\": \\\"4-chaste_disappearance-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions/e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\", \\n \\\"uuid\\\": \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"12201\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:16 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-absorbent_ranula-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies/11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 833, \\n \\\"source_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-slushy_drought-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies/16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 900, \\n \\\"source_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unnoticeable_blinker-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies/03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\n \\\"seen_by\\\": [\\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\n \\\"seen_by\\\": [\\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 779, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-recognized_preamble-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies/07df4a39-2210-4589-8110-4923395f606a\\\", \\n \\\"seen_by\\\": [\\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 808, \\n \\\"source_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"07df4a39-2210-4589-8110-4923395f606a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-chaste_disappearance-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies/3e54efba-618a-42f0-8ea2-b08efac77fb8\\\", \\n \\\"seen_by\\\": [\\n \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"121ebd0c-5747-4b99-b999-cd705e174980\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6446\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:16 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"files\\\": [\\\"396be7fb-cacb-478c-8a07-da17d7521474\\\", \\\"5f9af148-4c1b-4f78-82bb-f603bf08d68c\\\", \\\"2c9e9ec4-8379-493b-a625-2616bb23c3ae\\\", \\\"208d022d-9ff3-40c6-9931-38bd799ce727\\\", \\\"0238ac90-7e30-49fa-b1db-6cdf2e89a6f1\\\", \\\"c78c83e6-7b96-4343-b363-b6951a7b303d\\\", \\\"e312bfd1-2505-49fa-b962-2a7a6e2ccc0f\\\", \\\"bf4fbba9-97a5-401f-8686-7ec908403fbd\\\", \\\"dc4de804-8cd0-43a4-99fa-a9b90859be39\\\", \\\"e3dca9e4-29aa-4db7-8f7f-d49e23834b6f\\\"], \\\"messages\\\": [\\\"2ab16096-7e4b-4978-b7da-d4191ba39f39\\\", \\\"bd88347d-2889-459e-8e15-9ab9fde38114\\\", \\\"97870a00-63d7-4c58-aac2-bb02e6562e38\\\", \\\"c330f51e-dc97-4c8f-98c5-2dc29926920c\\\", \\\"eca5264c-72f3-402b-a9e4-02a22e0700bf\\\", \\\"c6697de2-928b-4f5e-aaf2-e2e18c7f6eea\\\", \\\"b22d012f-8cac-42ee-9a4b-792099a3bcbe\\\", \\\"9d247e85-65eb-4f22-bc96-88d7f217c192\\\", \\\"c1017670-6b6d-4660-bc24-2894d6b1113f\\\", \\\"5d7affca-c97e-4039-85a9-3411cecdc36b\\\"], \\\"replies\\\": [\\\"93f1ed64-62ae-4876-9792-01b2c7b4ef71\\\", \\\"11338447-c1f7-44cd-98be-54ab03965dbe\\\", \\\"eff56def-75b0-420c-9abb-95130c8e5b75\\\", \\\"16a1de4a-a792-426d-ad1d-c4a1013e8d4f\\\", \\\"be2ca2bc-a545-4690-937a-0380a761dba5\\\", \\\"03a71e6a-7db7-48cf-bfc5-d90aba46b233\\\", \\\"3e44cb14-e5db-4136-a001-3f02e2ffb273\\\", \\\"07df4a39-2210-4589-8110-4923395f606a\\\", \\\"9059aa43-5f33-49c1-a7c6-4d820f490bc6\\\", \\\"3e54efba-618a-42f0-8ea2-b08efac77fb8\\\"]}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/seen\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"resources marked seen\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"41\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:17 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T02:00:28.607726Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDgyOCwiZXhwIjoxNjI0NDEzNjI4fQ.eyJpZCI6MX0.86Gii-Z4jQi_7_MWB1Z6VON3SbsRykzGNd3b73ocZhY\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:28 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/submissions\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d/download\\\", \\n \\\"filename\\\": \\\"1-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 623, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e406a921-caca-408a-a804-3b6de138b00d\\\", \\n \\\"uuid\\\": \\\"e406a921-caca-408a-a804-3b6de138b00d\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1/download\\\", \\n \\\"filename\\\": \\\"2-unfavorable_littoral-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 692, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\n \\\"uuid\\\": \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1/download\\\", \\n \\\"filename\\\": \\\"3-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\n \\\"uuid\\\": \\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb/download\\\", \\n \\\"filename\\\": \\\"4-unfavorable_littoral-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions/e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\n \\\"uuid\\\": \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e/download\\\", \\n \\\"filename\\\": \\\"1-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 611, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/55707270-e7b3-415e-9b8a-cc102d94d51e\\\", \\n \\\"uuid\\\": \\\"55707270-e7b3-415e-9b8a-cc102d94d51e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462/download\\\", \\n \\\"filename\\\": \\\"2-hairy_witchcraft-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 760, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/fb36cb05-0da1-4008-b191-dddc8ae6b462\\\", \\n \\\"uuid\\\": \\\"fb36cb05-0da1-4008-b191-dddc8ae6b462\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4/download\\\", \\n \\\"filename\\\": \\\"3-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\", \\n \\\"uuid\\\": \\\"0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b/download\\\", \\n \\\"filename\\\": \\\"4-hairy_witchcraft-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions/b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\", \\n \\\"uuid\\\": \\\"b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873/download\\\", \\n \\\"filename\\\": \\\"1-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 593, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\n \\\"uuid\\\": \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677/download\\\", \\n \\\"filename\\\": \\\"2-uric_parole-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 595, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\n \\\"uuid\\\": \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245/download\\\", \\n \\\"filename\\\": \\\"1-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 638, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\n \\\"uuid\\\": \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391/download\\\", \\n \\\"filename\\\": \\\"2-ciliate_vigil-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 667, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/f1536dc5-354e-458e-9629-bdf477e97391\\\", \\n \\\"uuid\\\": \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4/download\\\", \\n \\\"filename\\\": \\\"3-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\n \\\"uuid\\\": \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08/download\\\", \\n \\\"filename\\\": \\\"4-ciliate_vigil-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions/8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\n \\\"uuid\\\": \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1/download\\\", \\n \\\"filename\\\": \\\"1-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\n \\\"uuid\\\": \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635/download\\\", \\n \\\"filename\\\": \\\"2-opinionated_afghan-msg.gpg\\\", \\n \\\"is_file\\\": false, \\n \\\"is_message\\\": true, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 591, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/d140c84b-048f-408f-b9dd-68284bd7b635\\\", \\n \\\"uuid\\\": \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e/download\\\", \\n \\\"filename\\\": \\\"3-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\n \\\"uuid\\\": \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508/download\\\", \\n \\\"filename\\\": \\\"4-opinionated_afghan-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": false, \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions/0cde7242-1200-4b30-a410-1eefee154508\\\", \\n \\\"uuid\\\": \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"11883\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:29 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/replies\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"5-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 765, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-unfavorable_littoral-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies/5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 834, \\n \\\"source_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-hairy_witchcraft-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies/0f684031-4cbc-4035-b40c-18827abda77d\\\", \\n \\\"seen_by\\\": [], \\n \\\"size\\\": 753, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"0f684031-4cbc-4035-b40c-18827abda77d\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-hairy_witchcraft-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies/a95c1e96-1b38-4676-bff0-7fc16e430add\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 902, \\n \\\"source_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"a95c1e96-1b38-4676-bff0-7fc16e430add\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": \\\"\\\", \\n \\\"journalist_last_name\\\": \\\"\\\", \\n \\\"journalist_username\\\": \\\"deleted\\\", \\n \\\"journalist_uuid\\\": \\\"deleted\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 735, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 780, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-ciliate_vigil-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies/185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 809, \\n \\\"source_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"5-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\"\\n }, \\n {\\n \\\"filename\\\": \\\"6-opinionated_afghan-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies/789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 733, \\n \\\"source_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"6324\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:29 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": \"{\\\"files\\\": [\\\"5a36649b-8243-40ac-adc2-4505f8e653e1\\\", \\\"e8491faf-4f78-4f43-b494-624fff8ef2bb\\\", \\\"0ba3d18b-3b84-443b-acc1-af5be43d74e4\\\", \\\"b00a1b6e-b7c1-4fc1-ad66-b8d9b0cac35b\\\", \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\\"4602dd25-3784-4a00-8407-2c22b3ac4eb4\\\", \\\"8adf3f07-4a24-45b0-9a78-8a4126202c08\\\", \\\"c59373e2-fe17-4853-88a7-fbe53cbab39e\\\", \\\"0cde7242-1200-4b30-a410-1eefee154508\\\"], \\\"messages\\\": [\\\"e406a921-caca-408a-a804-3b6de138b00d\\\", \\\"2354cc66-ba4b-4dd9-a1c6-105776f80af1\\\", \\\"55707270-e7b3-415e-9b8a-cc102d94d51e\\\", \\\"fb36cb05-0da1-4008-b191-dddc8ae6b462\\\", \\\"af6c9aa5-a29c-4213-818c-e1b1f8832873\\\", \\\"7ab63f77-2eb5-4773-9b11-08a4e1137677\\\", \\\"b09ff4b2-1c26-4f97-9b8b-076b26b69245\\\", \\\"f1536dc5-354e-458e-9629-bdf477e97391\\\", \\\"cca8b580-ddae-4a0b-b62a-ab05a4cabff1\\\", \\\"d140c84b-048f-408f-b9dd-68284bd7b635\\\"], \\\"replies\\\": [\\\"f12ffa01-934a-424f-8406-6b57917a88ca\\\", \\\"5598a1f3-c937-4782-b956-ff8c0e2a8da4\\\", \\\"0f684031-4cbc-4035-b40c-18827abda77d\\\", \\\"a95c1e96-1b38-4676-bff0-7fc16e430add\\\", \\\"aa9f1f85-4bed-41e1-b0f4-ae2c3302d6ad\\\", \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\\"a6b9e60b-6eb2-4537-9dc4-7fad0b668f96\\\", \\\"185b258d-7d9a-4414-bbd7-67efe2038b5a\\\", \\\"2e18d130-6e5d-4952-85c2-20b21aeb048b\\\", \\\"789e1ba2-b29c-469a-b0c7-4b71b3eae510\\\"]}\", \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/seen\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"resources marked seen\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"41\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:30 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/data/test_star_add_remove.json b/data/test_star_add_remove.json index d51e51f9a..82f30fb78 100644 --- a/data/test_star_add_remove.json +++ b/data/test_star_add_remove.json @@ -1 +1 @@ -{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2020-12-04T09:22:13.577450Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"24289313-c416-47eb-9d2f-2f504b0ab7a2\\\", \\n \\\"token\\\": \\\"eyJpYXQiOjE2MDcwNDQ5MzMsImV4cCI6MTYwNzA3MzczMywiYWxnIjoiSFMyNTYifQ.eyJpZCI6MX0.1aFf3Qe32xpCMKCwEh7oiBiZyUKV2n3gNJ2UsxHEZkU\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:13 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:18 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:19 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:19 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"absorbent ranula\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"0014F77CFD207555E7ED903E9DEFA6DEA0090A47\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAKSoa3xwlqz4Sqz52rEJK28J7RP2014ZA6lELIWz/+Ebm6FbERAN\\\\nRo3SzaJeUBql4M1wZTkffJfjd5ri6XLUuZ5tM++NQ/UWwChFWMCi4qEH4Oo/z6F3\\\\nSmrKhAHPKhD7Aod8i8FxoqMP2w6Mbhr0JElRkjftRgFRSaTrqu6jm2TVABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERTN0pDRFZCVk81TVNNS1dUWTZNV1VYSFRURkdJSEszRlBX\\\\nR05SR1JPRFA1U0dCVUdXVlZBUExCM1pPNTU1NjdYSlZQUlNMWTVBMlpDNUpUTjJF\\\\nVUREM0dSVUtPVjJKRE1QMzc0TVk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEJ3vpt6gCQpHe/ID+gO/jiKjkFWb8RTORXULRwP5\\\\n7ak3326qFIn/gvQ8SMOhE+DuqPddA+IFS9nYl8nfdqo6NSVzXidc+kfdtCfEw2j2\\\\n5OiBRFojxJSJt13VgswN8u63WqG0gKKc/43AzVvsI5DpjRqkkXLZ4BJtT7EU86yT\\\\n2vaQYS0DJXu0quYfMELp\\\\n=Xk/p\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:04.816830Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\", \\n \\\"uuid\\\": \\\"b2a23227-7c5a-4c06-93b0-aba3e77237d8\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"slushy drought\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"CB7A0DB50A504802478FD60D15F014CC26E9E40A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALdQ7PY47gE14ei/VmaDg/vtgrJXhspqpxack+C688lo4IZI9yZz\\\\ng4JqSy1ukcQDbXOccReiQoN5yMA9CAcx9BO2gycpiDGBuE2WuS+kl7OR+SxrLZOP\\\\n7iHVAw4iF9F0HQDDsW+uNzY+NzCNPBtII0nUrOfdKe3QLrvYNAQei3MtABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEpHNURZRFZHU043UFI3TDVDU1Y3T0o1WDdINU9XQlRWV0Ey\\\\nSEROSURTREhHSTdOSU82R0U2M0JQRVg3NURUWkw3M0lLR1RGSDJPWU82SDdETEtE\\\\nQk1VMlVONVhENFozUFNZNDY3SVE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEBXwFMwm6eQKSyUD/jnesOGSdjJX9qEKUcIxdsHM\\\\nSguQuCmaHWAejli7BWobeyYWst2H9H5sXRSwXDSi2HKxqdIrKHf/yKPsKO0u0yS4\\\\n0SYSjvfRdSR5uCMztaUvjjcubGNh9+CcnL/LkCUekYks0bbihvXsbWTBO2FjB1TC\\\\ngzcZQY5T5FG2/U9pPwF/\\\\n=BpmK\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.145602Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\", \\n \\\"uuid\\\": \\\"14c7d062-6d66-4f70-b68f-9f1cc76a1108\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unnoticeable blinker\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"03B327FDA4A16BFE4AB13008DD93B9082322841A\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAJ1N4MKk1Xf3w6AZwCOnt58mibwt/P67uicWwVIXqnWel3R9Wjrh\\\\nIDsLsFdimG2VUkxD5hbjXgun0jpARR+DRjELzmRmSyWg+wNDDU1T30sbwEmg8t0S\\\\nAoTrkK3m3f5p18lzRxnKJKL2BvyxdHgQELL7OYrPdJrjHqrUaCgYg7w7ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBLWVhOVjROT1E3NFNXVEVQS0VMR1dPUDY3UFVLM1U0RDRa\\\\nUlVBQ1dYTk5UTTJPWVNZWk5NQVNKVFlFRFdQVEg1MlRWNjZIQUtZVEEyRzRJVTNU\\\\nWEtMWFFWU0tXRFlVU1BMNVdFSFk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEN2TuQgjIoQaLGMD/3MDh5zY5q6nrvv5I3C6KDla\\\\nS86GymnbMcnZp5rCEl8d3TXniDWdhKUT1VXxRGTGEnvPBqwItRg0yRok4iiYwPxz\\\\nJZ+tNAruzTBjoNmbUBrjcKwJEn4NB1ytG+YeFTiADIBY/anBwq+zeeGDxhYcshKo\\\\n7Qh8Lb8t2kbJe0pFTLh3\\\\n=KNep\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.480902Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1b477106-add5-489a-ba20-6916b75b5b8d\\\", \\n \\\"uuid\\\": \\\"1b477106-add5-489a-ba20-6916b75b5b8d\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"recognized preamble\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"F96DFCDF908B4E3C09255F452A543D3E627DEA66\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMhg5gao1ESokyD18ZxspIibMj7hwy3PW5IYiPXBI1+M4b/2SztX\\\\nBeRbqCh6141NOfZqjWn1SWPXO98L33KtmYdDe0lxUuD+qJVGT+I4wFCWdyiT6XWP\\\\nUOvY7QsAYG4VIQ5Pj7Cnw/GNLUefVV53viKYfwGgsdlCDW2foPnJ6E4BABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFhFWkwyTUk2SldNRU9KVTZERlZVREVHVDJEU0EzSjNaQjJI\\\\nWlpXRVBIQkVZNlpMWjY1NUk3NlFKV05ENVo1N1FURFZBNE5GMkJQQUpXMksyRUNL\\\\nSFdBTTY2VEc2UzNZSFRPWFpTQUk9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJECpUPT5ifepmwtYEAKInLf7MmU9aKMcdeL715OW3\\\\nDfYGnpDlNf5ZmCpRAO3e3CV2wW8VS5U3T/SWxps1/KfasRgX7uI8kxheqzGoEIw1\\\\n1PUsbbb3abLyqL5Wyrx8AMP3xEWkwD6i93LpA5BIw9dbOMRaGd3HNg9sn1U39X7B\\\\nfuyDB3IQIBP30yoP0hjL\\\\n=ujT2\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:05.806895Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\", \\n \\\"uuid\\\": \\\"e37ec0c8-e7d4-4912-b519-7be8680e72c1\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"chaste disappearance\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"30D7D09FF46E3E445587986F3104929994186224\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEANS2rlmgmtWUF6R4/8D2x81Pwj19KAIAuWbwil7d9duRwEShxp7m\\\\n9vKIQdGE8P6iYZuhkqtUYffgcJTVj/82gp6pog6h1gqblRE+gxOBTVXYZV8epJZa\\\\nnnFU8hCp8dwWAXzdSVuVgLaxZJiyfwkb9MlYVaZ6Kce11Lckg1PDCm7RABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEtKQjRKQ0NJQks0RTU0TjJSUEJXSlNVR1ZSNk9KV0VFRFQy\\\\nQ1hWUFo2VUtXM0FKSjU0QUFJNDVLRlVaWEo2NlNYRkJIS1E1NkpNVUFTQ0NRSzJF\\\\nUElQRFBSUkNERjNTTUZMRVlYNFE9Poi3BBMBCgAhBQJRkX6AAhsvBQsJCAcCBhUI\\\\nCQoLAgQWAgMBAh4BAheAAAoJEDEEkpmUGGIkq6UEAMBsFkFXJEomJ7gJp5arTbo3\\\\n386C0eQ6k5liBJDLofs/PqVFTYYgkYD9qYIymIRBJ1NEw1SvsHg4B5PNJYF7CRDv\\\\nUPrnQFQ+asittYs5RkA/sSwqyK8QqQ/L+WhnaJHZA0MyT76AEOuGbjpg6VvWoMow\\\\nq9oQCpcm2o6kqvIZBkRz\\\\n=+zbA\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2020-12-04T01:22:06.134227Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\", \\n \\\"uuid\\\": \\\"af16ae9c-9902-47f5-9ad2-d0853afcc97e\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8005\", \"Server\": \"Werkzeug/0.16.0 Python/3.5.2\", \"Date\": \"Fri, 04 Dec 2020 01:22:20 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T01:59:30.050058Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NDc3MCwiZXhwIjoxNjI0NDEzNTcwfQ.eyJpZCI6MX0.Hmva4qg7mONNpC0Da0ZI_Z8PObixhAKRwnytcHw3e2c\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 17:59:30 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:32 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"body\": null, \"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\", \"timeout\": 20}+2": "{\"status\": 201, \"body\": \"{\\n \\\"message\\\": \\\"Star added\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"30\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:32 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Star removed\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"32\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:33 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"unfavorable littoral\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"68D6CCD683C7824C690259E84EEBDFC61747C41F\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMFzgIBb9WYNvovEx4+/jJOMkjrWw/dupdTKMVm4RVduYpUQLYbw\\\\nLEClgWy6H+A8ZzAz2+l55+cwafk/dBRfhq5dJ+gRpgnLSiXqyCua2iZldWgMG8uy\\\\ngc94kKG9nmnodBjAdABhvTlKK31Nh6827Oyguwhf9YoDoMYp0lzraDyfABEBAAG0\\\\ndVNvdXJjZSBLZXkgPERDV1JIU0RXQllNNlU3T1hMMlMyVE9IQ05RQzU2R0JSUkc3\\\\nUFVFVVROSjQzRkFYTFhORFNJRTVZTVVLVDJaUkNMRkw0NkdHMzJVV09EMzI3N1BO\\\\nN0dSU1dIREpLRUVIRDJKR1Q1N1E9PojOBBMBCgA4FiEEaNbM1oPHgkxpAlnoTuvf\\\\nxhdHxB8FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQTuvfxhdH\\\\nxB9Z7wP+JJlH6VdzT8FEhOprG6ShyNgsp/H7tLHk6yYjvdT9qcyhVSCgTIb9NGHk\\\\nocxt3VhVPmtI8uipdMWeqNmvRPmDUktnxDIVZr9pbykSyRssnFhb80+CdOuJ+yMo\\\\nS4nhk47phJlyWx9ByP5jbeOKN17P9bizDByAOOV3Q7DZODy/170=\\\\n=U3Re\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:18.574331Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/1f91201a-3321-4924-a8e8-f7f2001b543e\\\", \\n \\\"uuid\\\": \\\"1f91201a-3321-4924-a8e8-f7f2001b543e\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"hairy witchcraft\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"A91B037C37CB86D20FAAC4B0DC8DD7DED20F0459\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAM3j4S2mxl5F7eWT/r0kU2Z3KuGNLHhoScwpaVqMQLo8fuB+QUZx\\\\nOMifVo0eM4qo18rs2JwNhMCJB1oLDdNJKEZJaRhmf1mppW54uviA3t9odGsnImpQ\\\\nf/zZqOYWxYB+hTFFkDWmFbB3kG4oqWeJxL6yXtyROmuLtwIxIUDOolpNABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFBIUklKT1FBSkJYVUFMNlVFREpPSFhNRUpFUUFJSTZRUU5X\\\\nM0pRNk1CSkpTVEhFTVoyWlI0NE5JSUZHUFc0SFhINURSSU1BT0FTWVhMNVk3U1FS\\\\nN0xKSFZFVVFIWllNTzdVNUtaVFE9PojOBBMBCgA4FiEEqRsDfDfLhtIPqsSw3I3X\\\\n3tIPBFkFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3I3X3tIP\\\\nBFl7vgP+O6sHLZg/CSTJq5K/1N+ax0k18sNVOLCnNsOArNEfrWjdhWiCOXDv3/2y\\\\nvWsmAyViE/Nj2jGbggqwWupR9vFmdaIMrok65n+rWWNSVqro3Im2Mzi+6nrfqmQ9\\\\nnjGbEPOOoZ4He6b6w+RlcC0XShnvX47syaMIEhnuO57HskBy2Sc=\\\\n=qt7q\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:19.399286Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/2d8e9e65-5472-41fb-b31e-86adab149eb7\\\", \\n \\\"uuid\\\": \\\"2d8e9e65-5472-41fb-b31e-86adab149eb7\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"8154\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:00:34 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file From 0b2b69bdfd144c5af28e7e2764f3434ca738de3b Mon Sep 17 00:00:00 2001 From: John Hensley Date: Wed, 2 Jun 2021 17:26:34 -0400 Subject: [PATCH 450/751] Add delete_conversation --- data/test-delete-conversation.yml | 271 +++++++++++++++++++++++++++++ data/test_delete_conversation.json | 1 + sdclientapi/__init__.py | 25 +++ tests/test_api.py | 4 + tests/test_apiproxy.py | 4 + tests/test_shared.py | 17 ++ 6 files changed, 322 insertions(+) create mode 100644 data/test-delete-conversation.yml create mode 100644 data/test_delete_conversation.json diff --git a/data/test-delete-conversation.yml b/data/test-delete-conversation.yml new file mode 100644 index 000000000..a1c0b94d5 --- /dev/null +++ b/data/test-delete-conversation.yml @@ -0,0 +1,271 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzY5NjMwOCwiZXhwIjoxNjIzNzI1MTA4fQ.eyJpZCI6MX0.nxhSbGPxX_UAFmfWQoKpZjMa274B6Oxld8t2T504ElU + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/sources + response: + body: + string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"local deletion\", \n \"key\": + {\n \"fingerprint\": \"59BBCF63ABC005932BB1D9A59D436C5EA0AC24FD\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAMoP+RjJSfzDOUyQ+OeJgAntHdaOThkheSx4g9MUFlj3oDJgxJkx\\nMWIQ9pWG3gKqznpOCXFT/dm4qz93chbqyKbtOUeyh/h24RAGV43hTGC8QvyiGTks\\n71n2u3oHr2LAbJIL0Q2+p9EkmcEYsKt1i79iO+yYJuvQnXpHeT+ElM/NABEBAAG0\\ndVNvdXJjZSBLZXkgPEhaS1pXVjRSSERYTlYzMlVTWjZEQlpMREk2SEVPWEVNVVJZ\\nNDREN1lVMzNKQ1Y1VzQ2V0YzVE5UNUI1SzRLQlpJUEY1NVFSUzNaWktOSVBFWVNE\\nNlRDWEdSN1NUMk1ITlROQVVWRkE9PojOBBMBCgA4FiEEWbvPY6vABZMrsdmlnUNs\\nXqCsJP0FAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQnUNsXqCs\\nJP24HAQAsLeaTSFRYEUz79J+W6MEqC9DsDUNkHlfscAvyczjE1M9t704tP1ndO6v\\naBjzlJ1CpS2/8w8YrC45SwRO+Lx/dS+aItR6VHnQdC5n1bThyEo2t1MMFTyhrPT6\\nq/YwiK4b1CJEuM5W2CNogUl2DV2oNgztC5dJtsQDYpRhYBRr6wk=\\n=RT3l\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-14T18:31:12.626589Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/remove_star\", + \n \"replies_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/replies\", + \n \"submissions_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions\", + \n \"url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"uuid\": \"b7cd5c45-c790-46f2-8a24-2660c088daad\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/d72c720d-e80d-4ffe-af85-8c11f43ce6d2/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"ninety-five moonlight\", \n \"key\": + {\n \"fingerprint\": \"520A1D9A186C82F3420BFC5DDFA8A14CA5D8AB22\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAL1rw9HOVvlzsRY0LtcZhVTWGgnudShQ1S5qi+uoJFIBRoFevr5N\\nL/M7QpP8XO4QK0BXNyJ+iXHmU8g48tJwws6gaxOYIcVFsvsp7k06RSnHyXBHTgRP\\nZ5wA6bxiFGHMy/U71mvguU1WoGfj4Sha/74xNtFV9XcypHi6mzdrN/4xABEBAAG0\\ndVNvdXJjZSBLZXkgPEZWTEdUM1VRWEdETFM0WklFRzNaSEZIRjRVSE9aQlI2TDRJ\\nWlUzVzJOUTY0SENLSjNLWkFHUkRYVDNLWU9YTlhHSEtORDRNQlVGNUpFRVhUNlVZ\\nRUZIV0NJUlRUWU5FQU5XVklVWUk9PojOBBMBCgA4FiEEUgodmhhsgvNCC/xd36ih\\nTKXYqyIFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ36ihTKXY\\nqyJ8JgP/XC+MjAcseVejJnUzRLSjKf5rcZCGSATv8K9h9p7ypc5qPclcOrLyZH16\\niamvZ7VchsrSA8IaY5cQ/Vux39DJrdu22DBBblWjYBYRv7b5IUbt0WV6FFbJ8bZf\\n+D9iso8Z7dSZ6HdMM6PvxzXR+aRlxe4SWYBnD+cHzxB1ct3vfy4=\\n=rcqH\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-14T18:31:13.422932Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/d72c720d-e80d-4ffe-af85-8c11f43ce6d2/remove_star\", + \n \"replies_url\": \"/api/v1/sources/d72c720d-e80d-4ffe-af85-8c11f43ce6d2/replies\", + \n \"submissions_url\": \"/api/v1/sources/d72c720d-e80d-4ffe-af85-8c11f43ce6d2/submissions\", + \n \"url\": \"/api/v1/sources/d72c720d-e80d-4ffe-af85-8c11f43ce6d2\", + \n \"uuid\": \"d72c720d-e80d-4ffe-af85-8c11f43ce6d2\"\n }, \n {\n + \ \"add_star_url\": \"/api/v1/sources/73edf52d-92b5-4cc8-9dea-a002aeb87ac8/add_star\", + \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": + false, \n \"journalist_designation\": \"graven armada\", \n \"key\": + {\n \"fingerprint\": \"0835F4207BA7D157D8BD49A01971F630FC46C20A\", + \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmI0EUZF+gAEEAN50bcT6I5zCdc1OWyvICkTspTZMhg6Hk5jU4E9uINB2jJarBM/B\\nrwWRtVB1HA++zCv57guSIEJXyFCzN6eBdlpwcOSs9Oa8TnB8ZVa1/QB89SN/+lXr\\niPLnqRVKq+GI9RGn0Q43PmhqTTOKGPCUIHi4KskRyZykyb4/2DResCjfABEBAAG0\\ndVNvdXJjZSBLZXkgPE1KWURTRk9GTkpDVzVMWkxJWFFUTFFVVEhKTVZOVlVSUUFY\\nSlJOTVdKU0dRSVhLQVVZQlVPQlpNM0VVWDdUV0REUTJEWlY2TzJXQlZPSlYzQjRN\\nSVZUTkZDNVpLN0NPV0xVTU9LWkE9PojOBBMBCgA4FiEECDX0IHun0VfYvUmgGXH2\\nMPxGwgoFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQGXH2MPxG\\nwgqmAAP8DPMSjywKPVjR5kaqm77D2qNQl7oiLvEEbz3m1JDVwbtte4sty5dG7m/I\\nZdk0E0yPjupBrg5yphUEwFoPIoD0QuHx6nsay7xJ8U95Bl2RM88wL1IXlekQYtAl\\nizPiudmwHkdWTK+oQfnRl2beFzfaTSB9mpvNdnfmb8lxm8Il+p0=\\n=PBfq\\n-----END + PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": + \"2021-06-14T18:31:14.238397Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": + 2, \n \"remove_star_url\": \"/api/v1/sources/73edf52d-92b5-4cc8-9dea-a002aeb87ac8/remove_star\", + \n \"replies_url\": \"/api/v1/sources/73edf52d-92b5-4cc8-9dea-a002aeb87ac8/replies\", + \n \"submissions_url\": \"/api/v1/sources/73edf52d-92b5-4cc8-9dea-a002aeb87ac8/submissions\", + \n \"url\": \"/api/v1/sources/73edf52d-92b5-4cc8-9dea-a002aeb87ac8\", + \n \"uuid\": \"73edf52d-92b5-4cc8-9dea-a002aeb87ac8\"\n }\n ]\n}\n" + headers: + Content-Length: + - '4902' + Content-Type: + - application/json + Date: + - Mon, 14 Jun 2021 18:45:09 GMT + Server: + - Werkzeug/0.16.0 Python/3.8.5 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzY5NjMwOCwiZXhwIjoxNjIzNzI1MTA4fQ.eyJpZCI6MX0.nxhSbGPxX_UAFmfWQoKpZjMa274B6Oxld8t2T504ElU + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions + response: + body: + string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/36d29a84-b799-4e7e-875a-9ab6918bf7bc/download\", + \n \"filename\": \"1-local_deletion-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [\n \"de80fcd8-fde8-4bdd-a7bf-e32ccb06dc0c\"\n ], \n \"size\": + 623, \n \"source_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"submission_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/36d29a84-b799-4e7e-875a-9ab6918bf7bc\", + \n \"uuid\": \"36d29a84-b799-4e7e-875a-9ab6918bf7bc\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/83ee8a60-368a-4c86-b74d-0dc301d44180/download\", + \n \"filename\": \"2-local_deletion-msg.gpg\", \n \"is_file\": false, + \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": + [], \n \"size\": 691, \n \"source_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"submission_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/83ee8a60-368a-4c86-b74d-0dc301d44180\", + \n \"uuid\": \"83ee8a60-368a-4c86-b74d-0dc301d44180\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/d5aa9638-20e7-46ed-b106-c9eb9b042c5d/download\", + \n \"filename\": \"3-local_deletion-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"de80fcd8-fde8-4bdd-a7bf-e32ccb06dc0c\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"submission_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/d5aa9638-20e7-46ed-b106-c9eb9b042c5d\", + \n \"uuid\": \"d5aa9638-20e7-46ed-b106-c9eb9b042c5d\"\n }, \n {\n + \ \"download_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/d96989bb-c82f-4809-93e8-7a3cd1e1f64d/download\", + \n \"filename\": \"4-local_deletion-doc.gz.gpg\", \n \"is_file\": + true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": + [\n \"25d57e95-c33e-43c2-9bda-d23b64721b75\"\n ], \n \"size\": + 661, \n \"source_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"submission_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions/d96989bb-c82f-4809-93e8-7a3cd1e1f64d\", + \n \"uuid\": \"d96989bb-c82f-4809-93e8-7a3cd1e1f64d\"\n }\n ]\n}\n" + headers: + Content-Length: + - '2497' + Content-Type: + - application/json + Date: + - Mon, 14 Jun 2021 18:45:09 GMT + Server: + - Werkzeug/0.16.0 Python/3.8.5 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzY5NjMwOCwiZXhwIjoxNjIzNzI1MTA4fQ.eyJpZCI6MX0.nxhSbGPxX_UAFmfWQoKpZjMa274B6Oxld8t2T504ElU + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/replies + response: + body: + string: "{\n \"replies\": [\n {\n \"filename\": \"5-local_deletion-reply.gpg\", + \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": + null, \n \"journalist_last_name\": null, \n \"journalist_username\": + \"dellsberg\", \n \"journalist_uuid\": \"25d57e95-c33e-43c2-9bda-d23b64721b75\", + \n \"reply_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/replies/a92e9033-3b38-4a68-905a-9421b82ed8ea\", + \n \"seen_by\": [\n \"25d57e95-c33e-43c2-9bda-d23b64721b75\"\n + \ ], \n \"size\": 765, \n \"source_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"uuid\": \"a92e9033-3b38-4a68-905a-9421b82ed8ea\"\n }, \n {\n + \ \"filename\": \"6-local_deletion-reply.gpg\", \n \"is_deleted_by_source\": + false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": + null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": + \"25d57e95-c33e-43c2-9bda-d23b64721b75\", \n \"reply_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/replies/1309c317-186b-4e06-b9f8-7d631d181f5e\", + \n \"seen_by\": [\n \"25d57e95-c33e-43c2-9bda-d23b64721b75\"\n + \ ], \n \"size\": 833, \n \"source_url\": \"/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad\", + \n \"uuid\": \"1309c317-186b-4e06-b9f8-7d631d181f5e\"\n }\n ]\n}\n" + headers: + Content-Length: + - '1285' + Content-Type: + - application/json + Date: + - Mon, 14 Jun 2021 18:45:09 GMT + Server: + - Werkzeug/0.16.0 Python/3.8.5 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzY5NjMwOCwiZXhwIjoxNjIzNzI1MTA4fQ.eyJpZCI6MX0.nxhSbGPxX_UAFmfWQoKpZjMa274B6Oxld8t2T504ElU + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: DELETE + uri: http://127.0.0.1:8081/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/conversation + response: + body: + string: "{\n \"message\": \"Source data deleted\"\n}\n" + headers: + Content-Length: + - '39' + Content-Type: + - application/json + Date: + - Mon, 14 Jun 2021 18:45:09 GMT + Server: + - Werkzeug/0.16.0 Python/3.8.5 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzY5NjMwOCwiZXhwIjoxNjIzNzI1MTA4fQ.eyJpZCI6MX0.nxhSbGPxX_UAFmfWQoKpZjMa274B6Oxld8t2T504ElU + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/submissions + response: + body: + string: "{\n \"submissions\": []\n}\n" + headers: + Content-Length: + - '24' + Content-Type: + - application/json + Date: + - Mon, 14 Jun 2021 18:45:09 GMT + Server: + - Werkzeug/0.16.0 Python/3.8.5 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyMzY5NjMwOCwiZXhwIjoxNjIzNzI1MTA4fQ.eyJpZCI6MX0.nxhSbGPxX_UAFmfWQoKpZjMa274B6Oxld8t2T504ElU + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.22.0 + method: GET + uri: http://127.0.0.1:8081/api/v1/sources/b7cd5c45-c790-46f2-8a24-2660c088daad/replies + response: + body: + string: "{\n \"replies\": []\n}\n" + headers: + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Mon, 14 Jun 2021 18:45:09 GMT + Server: + - Werkzeug/0.16.0 Python/3.8.5 + status: + code: 200 + message: OK +version: 1 diff --git a/data/test_delete_conversation.json b/data/test_delete_conversation.json new file mode 100644 index 000000000..da46c53f2 --- /dev/null +++ b/data/test_delete_conversation.json @@ -0,0 +1 @@ +{"{\"body\": \"{\\\"passphrase\\\": \\\"correct horse battery staple profanity oil chewy\\\", \\\"username\\\": \\\"journalist\\\"}\", \"method\": \"POST\", \"path_query\": \"api/v1/token\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"expiration\\\": \\\"2021-06-23T02:13:14.701751Z\\\", \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_uuid\\\": \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"token\\\": \\\"eyJhbGciOiJIUzI1NiIsImlhdCI6MTYyNDM4NTU5NCwiZXhwIjoxNjI0NDE0Mzk0fQ.eyJpZCI6MX0.zVdF6YxqqtFU5ntkZeDSAwlHPJslRRPazSsbu1Sq0xY\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"317\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:14 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources\", \"timeout\": 20}+1": "{\"status\": 200, \"body\": \"{\\n \\\"sources\\\": [\\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"uric parole\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"1A370F8E6C5542BB11C90DAFE2DE26C55C62D7F7\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAMAbkyUgBdtrOAg3pKJRYiuUMGeIbCyFt2HJoIni/5rYB9YVc9KV\\\\nPq9PMLnZO+noeaePc3g3RWMzgKut6S0WOwv9R7nmmWZ3TFBMZMkKqbSwx6LJqlZS\\\\neAWlcLaOpZs1yJXKxjOtDVqdy5+jFuNp0blIlzQUEeAxkDU9JDIwGl77ABEBAAG0\\\\ndVNvdXJjZSBLZXkgPDZZN05FVVZBR0tSSVZDT1g0WTVDWElVVlI0RjdUVEdYSEhI\\\\nSFRTMzVZSUxGTVFZSUNWSUpKU0pOVUdHSEY2UDQ1SUxNRVVFSUxNTTdLNVIyT0xJ\\\\nM1dDN0JMTEhLUUIyWFlRQkg0Ulk9PojOBBMBCgA4FiEEGjcPjmxVQrsRyQ2v4t4m\\\\nxVxi1/cFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4t4mxVxi\\\\n1/c9pgQAol+dzDTdsQEMgWMQj6uFVGeU1LUFQ6aBPhIJG8KJ6zMS1Xj32pOBDIWN\\\\ndnfEyW2tkY1Mg2nQD7AIMjXk4AYpIOmTk9Q3Okid6PqIzd1xlperg7yzvthMZhWU\\\\nLI0Mw4bzUAPi3WeRqqooywaodHVH7G3uaUFJzt8zjfyGYCBtrwg=\\\\n=0AFB\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:20.228379Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 0, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"ciliate vigil\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B20CCD95C100E9D2E70C21B0D718E538E53FD348\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEALwy0QkWgrlXG7VR++2M/5Os3iWKkgg7KS9flNJQZySTqOx914SN\\\\nHJDe+UBwPT5YZoI8ORiiJ5YLkPuK7JJ7ZMNzJDLLloTjzpIDRdZ889tbRXit6NSS\\\\ne4gudJWFUxs/6HbluJrZ27Wq4iAHXjNzkgKck+3Izqaoa9mPFefRDCIBABEBAAG0\\\\ndVNvdXJjZSBLZXkgPEFKTTU0WldOVURPQU1SSFhVVk5EMkE2VkdCT0RXNjVZTERD\\\\nNDRMNTdEVEFXQUZPTDJLVFhYRE1IV0VYSEhNU0xYVEhWUUg3M09TS1NQV0VRR1NJ\\\\nTzRRSkxGSFFGQ0JYTVBKVFpZRUk9PojOBBMBCgA4FiEEsgzNlcEA6dLnDCGw1xjl\\\\nOOU/00gFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1xjlOOU/\\\\n00g8ZQP6AoGLLPmo7X5kR7Jzqs5W5I6JaRim6e+u81qotDMuW8DISWtzc6jxiK7r\\\\nqBXit8APuiaxP12vlmaGxCzvnQukBxzyHk/NBnbJpxsLEgqsqMIYMg8Eic7MHlIS\\\\nWqYyKjRKh6AiXRCFwKNADcL/W1YMptapsniiXlDu/aGXCaB98V0=\\\\n=RKk/\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:21.418624Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\", \\n \\\"uuid\\\": \\\"dfe3201f-f733-4b9e-a7c7-d4dd46562dc3\\\"\\n }, \\n {\\n \\\"add_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/add_star\\\", \\n \\\"interaction_count\\\": 6, \\n \\\"is_flagged\\\": false, \\n \\\"is_starred\\\": false, \\n \\\"journalist_designation\\\": \\\"opinionated afghan\\\", \\n \\\"key\\\": {\\n \\\"fingerprint\\\": \\\"B7008215F19F4B79D93149FCE416A170659F61A0\\\", \\n \\\"public\\\": \\\"-----BEGIN PGP PUBLIC KEY BLOCK-----\\\\n\\\\nmI0EUZF+gAEEAL/sK0+yyjSI1CwHGo/3iyj0tceISx7RsyYmzEZODVAK0PL3vYQp\\\\nJGMEmGhFmuYMlokQDHPr/bGE0U25BgvVlQmYufwrDvl3Yn4Vsv4mg5FvqTBdmkye\\\\nf7uNc6iWpVGap7Y+AJXPOVFy2DO6tZqh5NlwLreuF2pbqig4pvpMjglTABEBAAG0\\\\ndVNvdXJjZSBLZXkgPFZRM0EyRkZWRk9WUzZYUTMzWVdQTU5YNklUUVhRVjZUMkZC\\\\nSUlYM0FLTjNWMzUzUk03VzVORkpRWTNURFA1TTNSMlVUNjc0U0E3TUw3TzVXNlBY\\\\nNVAzT0RFUVUyWTJTVkJHTkQzSkE9PojOBBMBCgA4FiEEtwCCFfGfS3nZMUn85Bah\\\\ncGWfYaAFAlGRfoACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ5BahcGWf\\\\nYaBwbgP/VnhlbNb9TRwiDQkSjIW/AAY/yLsPH7a0xiVIoNrmJmaeUkca/6zzzM1y\\\\nEQeMB/3CbNqP8fQqgMrFJgb2niqNeq2YjGH0iy1+a9BJqmNqdoO9oRgx8T+PJESH\\\\n2u599VeGcG1G3GrBhu4621jPKJoM4KBVGQVhGaUlYbusOvAYyjE=\\\\n=Jufk\\\\n-----END PGP PUBLIC KEY BLOCK-----\\\\n\\\", \\n \\\"type\\\": \\\"PGP\\\"\\n }, \\n \\\"last_updated\\\": \\\"2021-06-22T17:59:22.221573Z\\\", \\n \\\"number_of_documents\\\": 2, \\n \\\"number_of_messages\\\": 2, \\n \\\"remove_star_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/remove_star\\\", \\n \\\"replies_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/replies\\\", \\n \\\"submissions_url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02/submissions\\\", \\n \\\"url\\\": \\\"/api/v1/sources/b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\", \\n \\\"uuid\\\": \\\"b1d6cc70-6d62-429a-a31a-28e2e7bdff02\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"4896\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:15 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\", \"timeout\": 20}+2": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": [\\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939/download\\\", \\n \\\"filename\\\": \\\"3-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/e6b07385-d2fc-4169-8be7-9f78e303a939\\\", \\n \\\"uuid\\\": \\\"e6b07385-d2fc-4169-8be7-9f78e303a939\\\"\\n }, \\n {\\n \\\"download_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076/download\\\", \\n \\\"filename\\\": \\\"4-uric_parole-doc.gz.gpg\\\", \\n \\\"is_file\\\": true, \\n \\\"is_message\\\": false, \\n \\\"is_read\\\": true, \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\"\\n ], \\n \\\"size\\\": 661, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"submission_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions/f60ba431-d36f-4fc9-9a25-c7457def5076\\\", \\n \\\"uuid\\\": \\\"f60ba431-d36f-4fc9-9a25-c7457def5076\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"1334\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:16 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\", \"timeout\": 20}+3": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": [\\n {\\n \\\"filename\\\": \\\"6-uric_parole-reply.gpg\\\", \\n \\\"is_deleted_by_source\\\": false, \\n \\\"journalist_first_name\\\": null, \\n \\\"journalist_last_name\\\": null, \\n \\\"journalist_username\\\": \\\"dellsberg\\\", \\n \\\"journalist_uuid\\\": \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\", \\n \\\"reply_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies/5f215a16-3681-4279-b69f-1e18d2e7fb04\\\", \\n \\\"seen_by\\\": [\\n \\\"5b57a2a6-be45-4ffb-879b-1986d0ac209b\\\", \\n \\\"bdd20ca1-e840-4b35-8813-3d95ca514f42\\\"\\n ], \\n \\\"size\\\": 737, \\n \\\"source_url\\\": \\\"/api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a\\\", \\n \\\"uuid\\\": \\\"5f215a16-3681-4279-b69f-1e18d2e7fb04\\\"\\n }\\n ]\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"699\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:17 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"DELETE\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/conversation\", \"timeout\": 20}+4": "{\"status\": 200, \"body\": \"{\\n \\\"message\\\": \\\"Source data deleted\\\"\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"39\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:17 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/submissions\", \"timeout\": 20}+5": "{\"status\": 200, \"body\": \"{\\n \\\"submissions\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"24\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:18 GMT\"}, \"version\": \"0.3.1\\n\"}", "{\"headers\": \"{\\\"Accept\\\": \\\"application/json\\\", \\\"Content-Type\\\": \\\"application/json\\\"}\", \"method\": \"GET\", \"path_query\": \"api/v1/sources/5bf38a0b-9ed2-4d88-8ea2-f48ae8f7fd4a/replies\", \"timeout\": 20}+6": "{\"status\": 200, \"body\": \"{\\n \\\"replies\\\": []\\n}\\n\", \"headers\": {\"Content-Type\": \"application/json\", \"Content-Length\": \"20\", \"Server\": \"Werkzeug/0.16.0 Python/3.8.5\", \"Date\": \"Tue, 22 Jun 2021 18:13:19 GMT\"}, \"version\": \"0.3.1\\n\"}"} \ No newline at end of file diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index d9449c544..7f1b9e001 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -340,6 +340,31 @@ def delete_source(self, source: Source) -> bool: # We should never reach here return False + def delete_conversation(self, uuid: str) -> bool: + """ + This method will delete the source's conversation. + + If the UUID is not found in the server, it will raise WrongUUIDError. + + :param uuid: Source UUID as string. + :returns: True if the operation is successful. + """ + + path_query = "api/v1/sources/{}/conversation".format(uuid) + method = "DELETE" + + data, status_code, headers = self._send_json_request( + method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + ) + + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(uuid)) + + if "message" in data and data["message"] == "Source data deleted": + return True + + return False + def delete_source_from_string(self, uuid: str) -> bool: """ This method will delete the source and collection. If the UUID diff --git a/tests/test_api.py b/tests/test_api.py index 0ff27b03e..e27ba3142 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -215,6 +215,10 @@ def test_reply_source(self): def test_reply_source_with_uuid(self): super().reply_source_with_uuid() + @vcr.use_cassette("data/test-delete-conversation.yml") + def test_delete_conversation(self): + super().delete_conversation() + @vcr.use_cassette("data/test-delete-source.yml") def test_delete_source(self): super().delete_source() diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 97c03e1a0..7ca7f947b 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -167,6 +167,10 @@ def test_reply_source(self): def test_reply_source_with_uuid(self): super().reply_source_with_uuid() + @qrexec_datasaver + def test_delete_conversation(self): + super().delete_conversation() + @qrexec_datasaver def test_delete_source(self): super().delete_source() diff --git a/tests/test_shared.py b/tests/test_shared.py index dfe6f0eee..71a58d904 100644 --- a/tests/test_shared.py +++ b/tests/test_shared.py @@ -26,6 +26,23 @@ def api_auth(self): # ---------------- SOURCES ---------------- + def delete_conversation(self): + s = self.api.get_sources()[0] + + submissions = self.api.get_submissions(s) + assert 0 < len(submissions) + + replies = self.api.get_replies_from_source(s) + assert 0 < len(replies) + + self.api.delete_conversation(s.uuid) + + submissions = self.api.get_submissions(s) + assert 0 == len(submissions) + + replies = self.api.get_replies_from_source(s) + assert 0 == len(replies) + def delete_source(self, from_string=False): number_of_sources_before = len(self.api.get_sources()) From de8741b35b02ea21f48b2006d828d47c478f4f8c Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 27 Jul 2021 15:24:40 -0700 Subject: [PATCH 451/751] update changelog 0.3.0 Signed-off-by: Allie Crevier --- CHANGELOG.md | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 729986c3e..70c57536f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.3.0 +----- + +* Support "delete_conversation " endpoint (#158) + 0.2.0 ----- diff --git a/setup.py b/setup.py index e879a19a5..b1bcc6891 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.2.0", + version="0.3.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From a055103e04530389fe1d13ff02ba0e789bcf6ae9 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 13:54:21 -0700 Subject: [PATCH 452/751] fix `require-hashes mode` error --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index de9899e48..d1287bbe4 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,11 @@ DEFAULT_GOAL: help OPEN=$(word 1, $(wildcard /usr/bin/xdg-open /usr/bin/open)) .PHONY: venv -venv: ## Provision a Python 3 virtualenv for development. +venv: ## Provision a Python 3 virtualenv for **development** python3 -m venv .venv + ## Good idea to upgrade pip and wheel when you create a new dev virtual environment. + ## Or you could use the virtualenv command instead. + .venv/bin/pip install --upgrade pip wheel .venv/bin/pip install --require-hashes -r dev-requirements.txt .PHONY: black From 616d120b866e4da7df069d1dbaf8cc8697036733 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 14:07:12 -0700 Subject: [PATCH 453/751] update readme for quicker quick start instructions --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 82fae73f2..87869dc76 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,8 @@ The SDK is currently used by the [SecureDrop Client](https://github.com/freedomo # Quick Start ```bash -virtualenv --python=python3 .venv +make venv source .venv/bin/activate -pip install --require-hashes -r dev-requirements.txt make test ``` From 461c52f18d49298db29ae77765730a565d79f677 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 13:55:18 -0700 Subject: [PATCH 454/751] use latest pip-tools Signed-off-by: Allie Crevier --- dev-requirements.in | 2 +- dev-requirements.txt | 49 +++++++++++++++++++++++++++++--------------- requirements.txt | 16 ++++++++------- 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/dev-requirements.in b/dev-requirements.in index 5534f0d56..b4e62d2c4 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -10,4 +10,4 @@ pytest-cov vcrpy pyyaml>=5.4.1,<6 pytest-mock -pip-tools>=5.0.0 +pip-tools diff --git a/dev-requirements.txt b/dev-requirements.txt index 07a7d81f2..93637b479 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.7 # To update, run: # # pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in @@ -85,6 +85,7 @@ importlib-metadata==1.5.0 \ --hash=sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302 \ --hash=sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b # via + # pep517 # pluggy # pytest isort==4.3.21 \ @@ -118,10 +119,6 @@ multidict==4.7.4 \ --hash=sha256:dcfed56aa085b89d644af17442cdc2debaa73388feba4b8026446d168ca8dad7 \ --hash=sha256:f29b885e4903bd57a7789f09fe9d60b6475a6c1a4c0eca874d8558f00f9d4b51 # via yarl -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 - # via mypy mypy==0.761 \ --hash=sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a \ --hash=sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7 \ @@ -138,6 +135,10 @@ mypy==0.761 \ --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 # via -r dev-requirements.in +mypy-extensions==0.4.3 \ + --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 + # via mypy packaging==20.1 \ --hash=sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73 \ --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 @@ -146,9 +147,13 @@ pathspec==0.8.0 \ --hash=sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0 \ --hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 # via black -pip-tools==5.3.1 \ - --hash=sha256:5672c2b6ca0f1fd803f3b45568c2cf7fadf135b4971e7d665232b2075544c0ef \ - --hash=sha256:73787e23269bf8a9230f376c351297b9037ed0d32ab0f9bef4a187d976acc054 +pep517==0.11.0 \ + --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ + --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 + # via pip-tools +pip-tools==6.2.0 \ + --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ + --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r dev-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ @@ -176,6 +181,13 @@ pyparsing==2.4.6 \ --hash=sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f \ --hash=sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec # via packaging +pytest==5.3.5 \ + --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ + --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 + # via + # -r dev-requirements.in + # pytest-cov + # pytest-mock pytest-cov==2.8.1 \ --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 @@ -184,13 +196,6 @@ pytest-mock==2.0.0 \ --hash=sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f \ --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 # via -r dev-requirements.in -pytest==5.3.5 \ - --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ - --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 - # via - # -r dev-requirements.in - # pytest-cov - # pytest-mock pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -248,12 +253,15 @@ six==1.14.0 \ --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c # via # packaging - # pip-tools # vcrpy toml==0.10.1 \ --hash=sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f \ --hash=sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88 # via black +tomli==1.2.0 \ + --hash=sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a \ + --hash=sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2 + # via pep517 typed-ast==1.4.1 \ --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ @@ -298,6 +306,10 @@ wcwidth==0.1.8 \ --hash=sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603 \ --hash=sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8 # via pytest +wheel==0.36.2 \ + --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ + --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e + # via pip-tools wrapt==1.11.2 \ --hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 # via vcrpy @@ -323,8 +335,11 @@ yarl==1.4.2 \ zipp==2.2.0 \ --hash=sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50 \ --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e - # via importlib-metadata + # via + # importlib-metadata + # pep517 # WARNING: The following packages were not pinned, but pip requires them to be # pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. # pip +# setuptools diff --git a/requirements.txt b/requirements.txt index f4afd448e..37d38f84a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,26 +1,28 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.7 # To update, run: # # pip-compile --generate-hashes --output-file=requirements.txt requirements.in # certifi==2019.11.28 \ --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ - --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f \ + --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f # via requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ + --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 # via requests idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ - --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ + --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c # via requests requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \ + --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in urllib3==1.25.10 \ --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 \ - # via -r requirements.in, requests + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 + # via + # -r requirements.in + # requests From 83d87a96a34b83bc949a90db58a805e94e1f9f29 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 17:05:29 -0700 Subject: [PATCH 455/751] use latest pip-tools --- README.md | 6 +- dev-requirements.txt | 202 +++++++++++++++++++++++-------------------- requirements.txt | 2 +- 3 files changed, 112 insertions(+), 98 deletions(-) diff --git a/README.md b/README.md index de9b10490..6d80117f1 100644 --- a/README.md +++ b/README.md @@ -27,15 +27,15 @@ server's response to STDOUT. For discussion about the shape of the request and response objects, see https://github.com/freedomofpress/securedrop-workstation/issues/107. -#### Installation Requirements +#### Quick Start To try the proxy script, create a virtual environment and install the requirements. In the root of the project directory, run ``` -virtualenv .venv +make venv source .venv/bin/activate -pip install --require-hashes -r dev-requirements.txt +make test ``` #### Update Dependencies diff --git a/dev-requirements.txt b/dev-requirements.txt index b14a54c05..df6ec18dc 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.7 # To update, run: # # pip-compile --allow-unsafe --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in @@ -8,9 +8,9 @@ appdirs==1.4.4 \ --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 # via black -black==21.5b1 \ - --hash=sha256:23695358dbcb3deafe7f0a3ad89feee5999a46be5fec21f4f1d108be0bcdb3b1 \ - --hash=sha256:8a60071a0043876a4ae96e6c69bd3a127dad2c1ca7c8083573eb82f92705d008 +black==21.7b0 \ + --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ + --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 # via -r dev-requirements.in certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ @@ -24,9 +24,9 @@ chardet==3.0.4 \ # via # -r requirements.in # requests -click==8.0.0 \ - --hash=sha256:7d8c289ee437bcb0316820ccee14aefcb056e58d31830ecab8e47eda6540e136 \ - --hash=sha256:e90e62ced43dc8105fb9a26d62f0d9340b5c8db053a814e25d95c19873ae87db +click==8.0.1 \ + --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ + --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 # via # black # pip-tools @@ -99,15 +99,16 @@ idna==2.7 \ # -r requirements.in # requests # yarl -importlib-metadata==4.0.1 \ - --hash=sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581 \ - --hash=sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d +importlib-metadata==4.6.1 \ + --hash=sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac \ + --hash=sha256:9f55f560e116f8643ecf2922d9cd3e1c7e8d52e683178fecd9d08f6aa357e11e # via + # click # flake8 # pep517 -isort==5.8.0 \ - --hash=sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6 \ - --hash=sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d +isort==5.9.3 \ + --hash=sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899 \ + --hash=sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2 # via -r dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ @@ -156,6 +157,31 @@ multidict==5.1.0 \ # via # -r dev-requirements.in # yarl +mypy==0.910 \ + --hash=sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9 \ + --hash=sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a \ + --hash=sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9 \ + --hash=sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e \ + --hash=sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2 \ + --hash=sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212 \ + --hash=sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b \ + --hash=sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885 \ + --hash=sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150 \ + --hash=sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703 \ + --hash=sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072 \ + --hash=sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457 \ + --hash=sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e \ + --hash=sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0 \ + --hash=sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb \ + --hash=sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97 \ + --hash=sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8 \ + --hash=sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811 \ + --hash=sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6 \ + --hash=sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de \ + --hash=sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504 \ + --hash=sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921 \ + --hash=sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d + # via -r dev-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 @@ -163,47 +189,23 @@ mypy-extensions==0.4.3 \ # -r dev-requirements.in # black # mypy -mypy==0.812 \ - --hash=sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e \ - --hash=sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064 \ - --hash=sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c \ - --hash=sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4 \ - --hash=sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97 \ - --hash=sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df \ - --hash=sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8 \ - --hash=sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a \ - --hash=sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56 \ - --hash=sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7 \ - --hash=sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6 \ - --hash=sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5 \ - --hash=sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a \ - --hash=sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521 \ - --hash=sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564 \ - --hash=sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49 \ - --hash=sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66 \ - --hash=sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a \ - --hash=sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119 \ - --hash=sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506 \ - --hash=sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c \ - --hash=sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb - # via -r dev-requirements.in orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 # via # -r requirements.in # furl -pathspec==0.8.1 \ - --hash=sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd \ - --hash=sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d +pathspec==0.9.0 \ + --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ + --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1 # via black -pep517==0.10.0 \ - --hash=sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b \ - --hash=sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249 +pep517==0.11.0 \ + --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ + --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 # via pip-tools -pip-tools==6.1.0 \ - --hash=sha256:197e3f8839095ccec3ad1ef410e0804c07d9f17dff1c340fb417ca2b63feacc9 \ - --hash=sha256:400bf77e29cca48c31abc210042932bb52dcc138ef4ea4d52c5db429aa8ae6ee +pip-tools==6.2.0 \ + --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ + --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r dev-requirements.in pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ @@ -250,48 +252,48 @@ pyyaml==5.4.1 \ # via # -r requirements.in # vcrpy -regex==2021.4.4 \ - --hash=sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5 \ - --hash=sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79 \ - --hash=sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31 \ - --hash=sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500 \ - --hash=sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11 \ - --hash=sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14 \ - --hash=sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3 \ - --hash=sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439 \ - --hash=sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c \ - --hash=sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82 \ - --hash=sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711 \ - --hash=sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093 \ - --hash=sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a \ - --hash=sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb \ - --hash=sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8 \ - --hash=sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17 \ - --hash=sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000 \ - --hash=sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d \ - --hash=sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480 \ - --hash=sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc \ - --hash=sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0 \ - --hash=sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9 \ - --hash=sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765 \ - --hash=sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e \ - --hash=sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a \ - --hash=sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07 \ - --hash=sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f \ - --hash=sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac \ - --hash=sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7 \ - --hash=sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed \ - --hash=sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968 \ - --hash=sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7 \ - --hash=sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2 \ - --hash=sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4 \ - --hash=sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87 \ - --hash=sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8 \ - --hash=sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10 \ - --hash=sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29 \ - --hash=sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605 \ - --hash=sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6 \ - --hash=sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042 +regex==2021.7.6 \ + --hash=sha256:0eb2c6e0fcec5e0f1d3bcc1133556563222a2ffd2211945d7b1480c1b1a42a6f \ + --hash=sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad \ + --hash=sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a \ + --hash=sha256:1c78780bf46d620ff4fff40728f98b8afd8b8e35c3efd638c7df67be2d5cddbf \ + --hash=sha256:2366fe0479ca0e9afa534174faa2beae87847d208d457d200183f28c74eaea59 \ + --hash=sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d \ + --hash=sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895 \ + --hash=sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4 \ + --hash=sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3 \ + --hash=sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222 \ + --hash=sha256:422dec1e7cbb2efbbe50e3f1de36b82906def93ed48da12d1714cabcd993d7f0 \ + --hash=sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c \ + --hash=sha256:4f64fc59fd5b10557f6cd0937e1597af022ad9b27d454e182485f1db3008f417 \ + --hash=sha256:564a4c8a29435d1f2256ba247a0315325ea63335508ad8ed938a4f14c4116a5d \ + --hash=sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d \ + --hash=sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761 \ + --hash=sha256:59c00bb8dd8775473cbfb967925ad2c3ecc8886b3b2d0c90a8e2707e06c743f0 \ + --hash=sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026 \ + --hash=sha256:6afe6a627888c9a6cfbb603d1d017ce204cebd589d66e0703309b8048c3b0854 \ + --hash=sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb \ + --hash=sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d \ + --hash=sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068 \ + --hash=sha256:89e5528803566af4df368df2d6f503c84fbfb8249e6631c7b025fe23e6bd0cde \ + --hash=sha256:99d8ab206a5270c1002bfcf25c51bf329ca951e5a169f3b43214fdda1f0b5f0d \ + --hash=sha256:9a854b916806c7e3b40e6616ac9e85d3cdb7649d9e6590653deb5b341a736cec \ + --hash=sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa \ + --hash=sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd \ + --hash=sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b \ + --hash=sha256:cbe23b323988a04c3e5b0c387fe3f8f363bf06c0680daf775875d979e376bd26 \ + --hash=sha256:ccb3d2190476d00414aab36cca453e4596e8f70a206e2aa8db3d495a109153d2 \ + --hash=sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f \ + --hash=sha256:db2b7df831c3187a37f3bb80ec095f249fa276dbe09abd3d35297fc250385694 \ + --hash=sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0 \ + --hash=sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407 \ + --hash=sha256:e6a1e5ca97d411a461041d057348e578dc344ecd2add3555aedba3b408c9f874 \ + --hash=sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035 \ + --hash=sha256:ed693137a9187052fc46eedfafdcb74e09917166362af4cc4fddc3b31560e93d \ + --hash=sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c \ + --hash=sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5 \ + --hash=sha256:f9392a4555f3e4cb45310a65b403d86b589adc773898c25a39184b1ba4db8985 \ + --hash=sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58 # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ @@ -309,6 +311,10 @@ six==1.11.0 \ toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + # via mypy +tomli==1.2.0 \ + --hash=sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a \ + --hash=sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2 # via # black # pep517 @@ -369,6 +375,10 @@ werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 # via -r requirements.in +wheel==0.36.2 \ + --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ + --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e + # via pip-tools wrapt==1.12.1 \ --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 # via @@ -415,15 +425,19 @@ yarl==1.6.3 \ # via # -r dev-requirements.in # vcrpy -zipp==3.4.1 \ - --hash=sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76 \ - --hash=sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098 +zipp==3.5.0 \ + --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ + --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 # via # importlib-metadata # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==21.1.1 \ - --hash=sha256:11d095ed5c15265fc5c15cc40a45188675c239fb0f9913b673a33e54ff7d45f0 \ - --hash=sha256:51ad01ddcd8de923533b01a870e7b987c2eb4d83b50b89e1bf102723ff9fed8b +pip==21.2.1 \ + --hash=sha256:303a82aaa24cdc01f7ebbd1afc7d1b871a4aa0a88bb5bedef1fa86a3ee44ca0a \ + --hash=sha256:da0ac9d9032d1d7bac69e9e301778f77b8b6626b85203f99edd2b545434d90a7 + # via pip-tools +setuptools==57.4.0 \ + --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ + --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 # via pip-tools diff --git a/requirements.txt b/requirements.txt index 70515d60d..9afbecd00 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.7 # To update, run: # # pip-compile --generate-hashes --output-file=requirements.txt requirements.in From 79f552cf33b188ab93b000a49c11f24852338ae3 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 17:06:03 -0700 Subject: [PATCH 456/751] update ci to use `make venv` --- .circleci/config.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7b2d242fb..344b993be 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,17 +1,11 @@ --- common-steps: - - &removevirtualenv - run: - name: Removes the upstream virtualenv from the original container image - command: sudo pip uninstall virtualenv -y - - &run_tests run: name: Install requirements and run tests command: | - virtualenv .venv + make venv source .venv/bin/activate - pip install --require-hashes -r dev-requirements.txt make check - &install_packaging_dependencies @@ -58,7 +52,6 @@ jobs: - image: circleci/python:3.7-buster steps: - checkout - - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball From d556d671c2f2b4377b00451d7dd71a57b1589ff7 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 17:26:16 -0700 Subject: [PATCH 457/751] fix incompatible type error --- securedrop_proxy/proxy.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 4e6170233..97f168c3e 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -6,8 +6,7 @@ import sys import tempfile import uuid -from tempfile import _TemporaryFileWrapper # type: ignore -from typing import Dict, Optional +from typing import IO, Dict, Optional import furl # type: ignore import requests @@ -126,7 +125,7 @@ def read_conf(self, conf_path: str) -> None: # # In any case, this callback mutates the given result object (in # `res`) to include the name of the new file, or to indicate errors. - def on_save(self, fh: _TemporaryFileWrapper, res: Response) -> None: + def on_save(self, fh: IO[bytes], res: Response) -> None: fn = str(uuid.uuid4()) try: From 38e0443376c7c634f1f992fd47501a030a48f272 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 17:38:30 -0700 Subject: [PATCH 458/751] add third-party Library Stubs for newer version of mypy --- dev-requirements.in | 2 ++ dev-requirements.txt | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/dev-requirements.in b/dev-requirements.in index 238652e24..2fb106860 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -9,6 +9,8 @@ mypy-extensions pip-tools pycodestyle pyflakes +types-PyYAML +types-requests six vcrpy wrapt diff --git a/dev-requirements.txt b/dev-requirements.txt index df6ec18dc..3e2cf90a0 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -352,6 +352,14 @@ typed-ast==1.4.3 \ # via # black # mypy +types-pyyaml==5.4.3 \ + --hash=sha256:2e7b81b2b7af751634425107b986086c6ba7cb61270a43a5c290c58be8cdbc3a \ + --hash=sha256:bca83cbfc0be48600a8abf1e3d87fb762a91e6d35d724029a3321dd2dce2ceb1 + # via -r dev-requirements.in +types-requests==2.25.1 \ + --hash=sha256:2d514ee172088a8fc0d554537d6424bd261c18e63195cfe47c410df0de0ed96f \ + --hash=sha256:6e9534281fe5d06ba8116807a8de930b90b6f92dff179f8cbfa2dfdd3bd2c465 + # via -r dev-requirements.in typing-extensions==3.10.0.0 \ --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ From e6dc5fc2f3cb8d27a63e884361f7492ba076f39a Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 30 Jul 2021 17:47:24 -0700 Subject: [PATCH 459/751] add back *removevirtualenv step --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 344b993be..f1821abf3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,10 @@ --- common-steps: + - &removevirtualenv + run: + name: Removes the upstream virtualenv from the original container image + command: sudo pip uninstall virtualenv -y + - &run_tests run: name: Install requirements and run tests @@ -52,6 +57,7 @@ jobs: - image: circleci/python:3.7-buster steps: - checkout + - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball From 488248b9173d4a2ac51300f5046aa47cade970f7 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 2 Aug 2021 13:48:37 -0700 Subject: [PATCH 460/751] pin requests to same version as used in the client --- requirements.in | 2 +- requirements.txt | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/requirements.in b/requirements.in index 90039c034..8e8eb87c6 100644 --- a/requirements.in +++ b/requirements.in @@ -1,2 +1,2 @@ -requests +requests==2.22.0 urllib3>=1.25.9 diff --git a/requirements.txt b/requirements.txt index 37d38f84a..bdd59cb37 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,9 +4,9 @@ # # pip-compile --generate-hashes --output-file=requirements.txt requirements.in # -certifi==2019.11.28 \ - --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ - --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f +certifi==2021.5.30 \ + --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ + --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ @@ -20,9 +20,9 @@ requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 +urllib3==1.25.11 \ + --hash=sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2 \ + --hash=sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e # via # -r requirements.in # requests From 8299bd8c017d3da9715ed034bde66aa008552a3d Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 2 Aug 2021 13:58:48 -0700 Subject: [PATCH 461/751] update dev dependencies and fix linter errors Signed-off-by: Allie Crevier --- dev-requirements.in | 1 + dev-requirements.txt | 540 ++++++++++++++++++++++++---------------- sdclientapi/__init__.py | 98 ++++++-- tests/test_api.py | 2 +- tests/test_apiproxy.py | 4 +- 5 files changed, 404 insertions(+), 241 deletions(-) diff --git a/dev-requirements.in b/dev-requirements.in index b4e62d2c4..a320b555b 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -11,3 +11,4 @@ vcrpy pyyaml>=5.4.1,<6 pytest-mock pip-tools +types-requests \ No newline at end of file diff --git a/dev-requirements.txt b/dev-requirements.txt index 93637b479..747976a34 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -8,72 +8,87 @@ appdirs==1.4.4 \ --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 # via black -attrs==19.3.0 \ - --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ - --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 - # via - # black - # pytest -black==19.10b0 \ - --hash=sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b \ - --hash=sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539 +attrs==21.2.0 \ + --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ + --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb + # via pytest +black==21.7b0 \ + --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ + --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 # via -r dev-requirements.in -certifi==2019.11.28 \ - --hash=sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3 \ - --hash=sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f +certifi==2021.5.30 \ + --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ + --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 # via requests -click==7.0 \ - --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ - --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 +click==8.0.1 \ + --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ + --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 # via # black # pip-tools -coverage==5.0.3 \ - --hash=sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3 \ - --hash=sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c \ - --hash=sha256:1e44a022500d944d42f94df76727ba3fc0a5c0b672c358b61067abb88caee7a0 \ - --hash=sha256:25dbf1110d70bab68a74b4b9d74f30e99b177cde3388e07cc7272f2168bd1477 \ - --hash=sha256:3230d1003eec018ad4a472d254991e34241e0bbd513e97a29727c7c2f637bd2a \ - --hash=sha256:3dbb72eaeea5763676a1a1efd9b427a048c97c39ed92e13336e726117d0b72bf \ - --hash=sha256:5012d3b8d5a500834783689a5d2292fe06ec75dc86ee1ccdad04b6f5bf231691 \ - --hash=sha256:51bc7710b13a2ae0c726f69756cf7ffd4362f4ac36546e243136187cfcc8aa73 \ - --hash=sha256:527b4f316e6bf7755082a783726da20671a0cc388b786a64417780b90565b987 \ - --hash=sha256:722e4557c8039aad9592c6a4213db75da08c2cd9945320220634f637251c3894 \ - --hash=sha256:76e2057e8ffba5472fd28a3a010431fd9e928885ff480cb278877c6e9943cc2e \ - --hash=sha256:77afca04240c40450c331fa796b3eab6f1e15c5ecf8bf2b8bee9706cd5452fef \ - --hash=sha256:7afad9835e7a651d3551eab18cbc0fdb888f0a6136169fbef0662d9cdc9987cf \ - --hash=sha256:9bea19ac2f08672636350f203db89382121c9c2ade85d945953ef3c8cf9d2a68 \ - --hash=sha256:a8b8ac7876bc3598e43e2603f772d2353d9931709345ad6c1149009fd1bc81b8 \ - --hash=sha256:b0840b45187699affd4c6588286d429cd79a99d509fe3de0f209594669bb0954 \ - --hash=sha256:b26aaf69713e5674efbde4d728fb7124e429c9466aeaf5f4a7e9e699b12c9fe2 \ - --hash=sha256:b63dd43f455ba878e5e9f80ba4f748c0a2156dde6e0e6e690310e24d6e8caf40 \ - --hash=sha256:be18f4ae5a9e46edae3f329de2191747966a34a3d93046dbdf897319923923bc \ - --hash=sha256:c312e57847db2526bc92b9bfa78266bfbaabac3fdcd751df4d062cd4c23e46dc \ - --hash=sha256:c60097190fe9dc2b329a0eb03393e2e0829156a589bd732e70794c0dd804258e \ - --hash=sha256:c62a2143e1313944bf4a5ab34fd3b4be15367a02e9478b0ce800cb510e3bbb9d \ - --hash=sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f \ - --hash=sha256:cd60f507c125ac0ad83f05803063bed27e50fa903b9c2cfee3f8a6867ca600fc \ - --hash=sha256:d513cc3db248e566e07a0da99c230aca3556d9b09ed02f420664e2da97eac301 \ - --hash=sha256:d649dc0bcace6fcdb446ae02b98798a856593b19b637c1b9af8edadf2b150bea \ - --hash=sha256:d7008a6796095a79544f4da1ee49418901961c97ca9e9d44904205ff7d6aa8cb \ - --hash=sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af \ - --hash=sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52 \ - --hash=sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37 \ - --hash=sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0 +coverage==5.5 \ + --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \ + --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \ + --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \ + --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \ + --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \ + --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \ + --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \ + --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \ + --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \ + --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \ + --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \ + --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \ + --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \ + --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \ + --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \ + --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \ + --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \ + --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \ + --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \ + --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \ + --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \ + --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \ + --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \ + --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \ + --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \ + --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \ + --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \ + --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \ + --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \ + --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \ + --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \ + --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \ + --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \ + --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \ + --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \ + --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \ + --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \ + --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \ + --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \ + --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \ + --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \ + --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \ + --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \ + --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \ + --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \ + --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \ + --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \ + --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \ + --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \ + --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ + --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ + --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 # via # -r dev-requirements.in # pytest-cov -entrypoints==0.3 \ - --hash=sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19 \ - --hash=sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 - # via flake8 -flake8==3.7.9 \ - --hash=sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb \ - --hash=sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca +flake8==3.9.2 \ + --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ + --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 # via -r dev-requirements.in idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ @@ -81,71 +96,104 @@ idna==2.8 \ # via # requests # yarl -importlib-metadata==1.5.0 \ - --hash=sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302 \ - --hash=sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b +importlib-metadata==4.6.3 \ + --hash=sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9 \ + --hash=sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b # via + # click + # flake8 # pep517 # pluggy # pytest -isort==4.3.21 \ - --hash=sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1 \ - --hash=sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd +iniconfig==1.1.1 \ + --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ + --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 + # via pytest +isort==5.9.3 \ + --hash=sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899 \ + --hash=sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2 # via -r dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 -more-itertools==8.2.0 \ - --hash=sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c \ - --hash=sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507 - # via pytest -multidict==4.7.4 \ - --hash=sha256:13f3ebdb5693944f52faa7b2065b751cb7e578b8dd0a5bb8e4ab05ad0188b85e \ - --hash=sha256:26502cefa86d79b86752e96639352c7247846515c864d7c2eb85d036752b643c \ - --hash=sha256:4fba5204d32d5c52439f88437d33ad14b5f228e25072a192453f658bddfe45a7 \ - --hash=sha256:527124ef435f39a37b279653ad0238ff606b58328ca7989a6df372fd75d7fe26 \ - --hash=sha256:5414f388ffd78c57e77bd253cf829373721f450613de53dc85a08e34d806e8eb \ - --hash=sha256:5eee66f882ab35674944dfa0d28b57fa51e160b4dce0ce19e47f495fdae70703 \ - --hash=sha256:63810343ea07f5cd86ba66ab66706243a6f5af075eea50c01e39b4ad6bc3c57a \ - --hash=sha256:6bd10adf9f0d6a98ccc792ab6f83d18674775986ba9bacd376b643fe35633357 \ - --hash=sha256:83c6ddf0add57c6b8a7de0bc7e2d656be3eefeff7c922af9a9aae7e49f225625 \ - --hash=sha256:93166e0f5379cf6cd29746989f8a594fa7204dcae2e9335ddba39c870a287e1c \ - --hash=sha256:9a7b115ee0b9b92d10ebc246811d8f55d0c57e82dbb6a26b23c9a9a6ad40ce0c \ - --hash=sha256:a38baa3046cce174a07a59952c9f876ae8875ef3559709639c17fdf21f7b30dd \ - --hash=sha256:a6d219f49821f4b2c85c6d426346a5d84dab6daa6f85ca3da6c00ed05b54022d \ - --hash=sha256:a8ed33e8f9b67e3b592c56567135bb42e7e0e97417a4b6a771e60898dfd5182b \ - --hash=sha256:d7d428488c67b09b26928950a395e41cc72bb9c3d5abfe9f0521940ee4f796d4 \ - --hash=sha256:dcfed56aa085b89d644af17442cdc2debaa73388feba4b8026446d168ca8dad7 \ - --hash=sha256:f29b885e4903bd57a7789f09fe9d60b6475a6c1a4c0eca874d8558f00f9d4b51 +multidict==5.1.0 \ + --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ + --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \ + --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \ + --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \ + --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \ + --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \ + --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \ + --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \ + --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \ + --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \ + --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \ + --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \ + --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \ + --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \ + --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \ + --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \ + --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \ + --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \ + --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \ + --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \ + --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \ + --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \ + --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \ + --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \ + --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \ + --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \ + --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \ + --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \ + --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \ + --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \ + --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \ + --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \ + --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \ + --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \ + --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \ + --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ + --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 # via yarl -mypy==0.761 \ - --hash=sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a \ - --hash=sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7 \ - --hash=sha256:4b9365ade157794cef9685791032521233729cb00ce76b0ddc78749abea463d2 \ - --hash=sha256:53ea810ae3f83f9c9b452582261ea859828a9ed666f2e1ca840300b69322c474 \ - --hash=sha256:634aef60b4ff0f650d3e59d4374626ca6153fcaff96ec075b215b568e6ee3cb0 \ - --hash=sha256:7e396ce53cacd5596ff6d191b47ab0ea18f8e0ec04e15d69728d530e86d4c217 \ - --hash=sha256:7eadc91af8270455e0d73565b8964da1642fe226665dd5c9560067cd64d56749 \ - --hash=sha256:7f672d02fffcbace4db2b05369142e0506cdcde20cea0e07c7c2171c4fd11dd6 \ - --hash=sha256:85baab8d74ec601e86134afe2bcccd87820f79d2f8d5798c889507d1088287bf \ - --hash=sha256:87c556fb85d709dacd4b4cb6167eecc5bbb4f0a9864b69136a0d4640fdc76a36 \ - --hash=sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b \ - --hash=sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72 \ - --hash=sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1 \ - --hash=sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1 +mypy==0.910 \ + --hash=sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9 \ + --hash=sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a \ + --hash=sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9 \ + --hash=sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e \ + --hash=sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2 \ + --hash=sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212 \ + --hash=sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b \ + --hash=sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885 \ + --hash=sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150 \ + --hash=sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703 \ + --hash=sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072 \ + --hash=sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457 \ + --hash=sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e \ + --hash=sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0 \ + --hash=sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb \ + --hash=sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97 \ + --hash=sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8 \ + --hash=sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811 \ + --hash=sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6 \ + --hash=sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de \ + --hash=sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504 \ + --hash=sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921 \ + --hash=sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d # via -r dev-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 - # via mypy -packaging==20.1 \ - --hash=sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73 \ - --hash=sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334 + # via + # black + # mypy +packaging==21.0 \ + --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \ + --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14 # via pytest -pathspec==0.8.0 \ - --hash=sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0 \ - --hash=sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061 +pathspec==0.9.0 \ + --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ + --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1 # via black pep517==0.11.0 \ --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ @@ -165,36 +213,36 @@ py==1.10.0 \ # via # -r dev-requirements.in # pytest -pycodestyle==2.5.0 \ - --hash=sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56 \ - --hash=sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c +pycodestyle==2.7.0 \ + --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ + --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef # via flake8 -pyflakes==2.1.1 \ - --hash=sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0 \ - --hash=sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2 +pyflakes==2.3.1 \ + --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ + --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db # via flake8 -pyotp==2.3.0 \ - --hash=sha256:c88f37fd47541a580b744b42136f387cdad481b560ef410c0d85c957eb2a2bc0 \ - --hash=sha256:fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1 +pyotp==2.6.0 \ + --hash=sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28 \ + --hash=sha256:d28ddfd40e0c1b6a6b9da961c7d47a10261fb58f378cb00f05ce88b26df9c432 # via -r dev-requirements.in -pyparsing==2.4.6 \ - --hash=sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f \ - --hash=sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec +pyparsing==2.4.7 \ + --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ + --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b # via packaging -pytest==5.3.5 \ - --hash=sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d \ - --hash=sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6 +pytest==6.2.4 \ + --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \ + --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890 # via # -r dev-requirements.in # pytest-cov # pytest-mock -pytest-cov==2.8.1 \ - --hash=sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b \ - --hash=sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626 +pytest-cov==2.12.1 \ + --hash=sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a \ + --hash=sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7 # via -r dev-requirements.in -pytest-mock==2.0.0 \ - --hash=sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f \ - --hash=sha256:cb67402d87d5f53c579263d37971a164743dc33c159dfb4fb4a86f37c5552307 +pytest-mock==3.6.1 \ + --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ + --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 # via -r dev-requirements.in pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ @@ -209,132 +257,188 @@ pyyaml==5.4.1 \ --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ + --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ + --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ + --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 # via # -r dev-requirements.in # vcrpy -regex==2020.5.14 \ - --hash=sha256:1386e75c9d1574f6aa2e4eb5355374c8e55f9aac97e224a8a5a6abded0f9c927 \ - --hash=sha256:27ff7325b297fb6e5ebb70d10437592433601c423f5acf86e5bc1ee2919b9561 \ - --hash=sha256:329ba35d711e3428db6b45a53b1b13a0a8ba07cbbcf10bbed291a7da45f106c3 \ - --hash=sha256:3a9394197664e35566242686d84dfd264c07b20f93514e2e09d3c2b3ffdf78fe \ - --hash=sha256:51f17abbe973c7673a61863516bdc9c0ef467407a940f39501e786a07406699c \ - --hash=sha256:579ea215c81d18da550b62ff97ee187b99f1b135fd894a13451e00986a080cad \ - --hash=sha256:70c14743320a68c5dac7fc5a0f685be63bc2024b062fe2aaccc4acc3d01b14a1 \ - --hash=sha256:7e61be8a2900897803c293247ef87366d5df86bf701083b6c43119c7c6c99108 \ - --hash=sha256:8044d1c085d49673aadb3d7dc20ef5cb5b030c7a4fa253a593dda2eab3059929 \ - --hash=sha256:89d76ce33d3266173f5be80bd4efcbd5196cafc34100fdab814f9b228dee0fa4 \ - --hash=sha256:99568f00f7bf820c620f01721485cad230f3fb28f57d8fbf4a7967ec2e446994 \ - --hash=sha256:a7c37f048ec3920783abab99f8f4036561a174f1314302ccfa4e9ad31cb00eb4 \ - --hash=sha256:c2062c7d470751b648f1cacc3f54460aebfc261285f14bc6da49c6943bd48bdd \ - --hash=sha256:c9bce6e006fbe771a02bda468ec40ffccbf954803b470a0345ad39c603402577 \ - --hash=sha256:ce367d21f33e23a84fb83a641b3834dd7dd8e9318ad8ff677fbfae5915a239f7 \ - --hash=sha256:ce450ffbfec93821ab1fea94779a8440e10cf63819be6e176eb1973a6017aff5 \ - --hash=sha256:ce5cc53aa9fbbf6712e92c7cf268274eaff30f6bd12a0754e8133d85a8fb0f5f \ - --hash=sha256:d466967ac8e45244b9dfe302bbe5e3337f8dc4dec8d7d10f5e950d83b140d33a \ - --hash=sha256:d881c2e657c51d89f02ae4c21d9adbef76b8325fe4d5cf0e9ad62f850f3a98fd \ - --hash=sha256:e565569fc28e3ba3e475ec344d87ed3cd8ba2d575335359749298a0899fe122e \ - --hash=sha256:ea55b80eb0d1c3f1d8d784264a6764f931e172480a2f1868f2536444c5f01e01 +regex==2021.8.3 \ + --hash=sha256:026beb631097a4a3def7299aa5825e05e057de3c6d72b139c37813bfa351274b \ + --hash=sha256:14caacd1853e40103f59571f169704367e79fb78fac3d6d09ac84d9197cadd16 \ + --hash=sha256:16d9eaa8c7e91537516c20da37db975f09ac2e7772a0694b245076c6d68f85da \ + --hash=sha256:18fdc51458abc0a974822333bd3a932d4e06ba2a3243e9a1da305668bd62ec6d \ + --hash=sha256:28e8af338240b6f39713a34e337c3813047896ace09d51593d6907c66c0708ba \ + --hash=sha256:3835de96524a7b6869a6c710b26c90e94558c31006e96ca3cf6af6751b27dca1 \ + --hash=sha256:3905c86cc4ab6d71635d6419a6f8d972cab7c634539bba6053c47354fd04452c \ + --hash=sha256:3c09d88a07483231119f5017904db8f60ad67906efac3f1baa31b9b7f7cca281 \ + --hash=sha256:4551728b767f35f86b8e5ec19a363df87450c7376d7419c3cac5b9ceb4bce576 \ + --hash=sha256:459bbe342c5b2dec5c5223e7c363f291558bc27982ef39ffd6569e8c082bdc83 \ + --hash=sha256:4f421e3cdd3a273bace013751c345f4ebeef08f05e8c10757533ada360b51a39 \ + --hash=sha256:577737ec3d4c195c4aef01b757905779a9e9aee608fa1cf0aec16b5576c893d3 \ + --hash=sha256:57fece29f7cc55d882fe282d9de52f2f522bb85290555b49394102f3621751ee \ + --hash=sha256:7976d410e42be9ae7458c1816a416218364e06e162b82e42f7060737e711d9ce \ + --hash=sha256:85f568892422a0e96235eb8ea6c5a41c8ccbf55576a2260c0160800dbd7c4f20 \ + --hash=sha256:8764a78c5464ac6bde91a8c87dd718c27c1cabb7ed2b4beaf36d3e8e390567f9 \ + --hash=sha256:8935937dad2c9b369c3d932b0edbc52a62647c2afb2fafc0c280f14a8bf56a6a \ + --hash=sha256:8fe58d9f6e3d1abf690174fd75800fda9bdc23d2a287e77758dc0e8567e38ce6 \ + --hash=sha256:937b20955806381e08e54bd9d71f83276d1f883264808521b70b33d98e4dec5d \ + --hash=sha256:9569da9e78f0947b249370cb8fadf1015a193c359e7e442ac9ecc585d937f08d \ + --hash=sha256:a3b73390511edd2db2d34ff09aa0b2c08be974c71b4c0505b4a048d5dc128c2b \ + --hash=sha256:a4eddbe2a715b2dd3849afbdeacf1cc283160b24e09baf64fa5675f51940419d \ + --hash=sha256:a5c6dbe09aff091adfa8c7cfc1a0e83fdb8021ddb2c183512775a14f1435fe16 \ + --hash=sha256:b63e3571b24a7959017573b6455e05b675050bbbea69408f35f3cb984ec54363 \ + --hash=sha256:bb350eb1060591d8e89d6bac4713d41006cd4d479f5e11db334a48ff8999512f \ + --hash=sha256:bf6d987edd4a44dd2fa2723fca2790f9442ae4de2c8438e53fcb1befdf5d823a \ + --hash=sha256:bfa6a679410b394600eafd16336b2ce8de43e9b13f7fb9247d84ef5ad2b45e91 \ + --hash=sha256:c856ec9b42e5af4fe2d8e75970fcc3a2c15925cbcc6e7a9bcb44583b10b95e80 \ + --hash=sha256:cea56288eeda8b7511d507bbe7790d89ae7049daa5f51ae31a35ae3c05408531 \ + --hash=sha256:ea212df6e5d3f60341aef46401d32fcfded85593af1d82b8b4a7a68cd67fdd6b \ + --hash=sha256:f35567470ee6dbfb946f069ed5f5615b40edcbb5f1e6e1d3d2b114468d505fc6 \ + --hash=sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c \ + --hash=sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6 # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in -six==1.14.0 \ - --hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a \ - --hash=sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via vcrpy +toml==0.10.2 \ + --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ + --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via - # packaging - # vcrpy -toml==0.10.1 \ - --hash=sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f \ - --hash=sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88 - # via black + # mypy + # pytest + # pytest-cov tomli==1.2.0 \ --hash=sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a \ --hash=sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2 - # via pep517 -typed-ast==1.4.1 \ - --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ - --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ - --hash=sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa \ - --hash=sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652 \ - --hash=sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75 \ - --hash=sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01 \ - --hash=sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d \ - --hash=sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1 \ - --hash=sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907 \ - --hash=sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c \ - --hash=sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3 \ - --hash=sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b \ - --hash=sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614 \ - --hash=sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb \ - --hash=sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b \ - --hash=sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41 \ - --hash=sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6 \ - --hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \ - --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ - --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ - --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 + # via + # black + # pep517 +typed-ast==1.4.3 \ + --hash=sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace \ + --hash=sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff \ + --hash=sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266 \ + --hash=sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528 \ + --hash=sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6 \ + --hash=sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808 \ + --hash=sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4 \ + --hash=sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363 \ + --hash=sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341 \ + --hash=sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04 \ + --hash=sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41 \ + --hash=sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e \ + --hash=sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3 \ + --hash=sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899 \ + --hash=sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805 \ + --hash=sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c \ + --hash=sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c \ + --hash=sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39 \ + --hash=sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a \ + --hash=sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3 \ + --hash=sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7 \ + --hash=sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f \ + --hash=sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075 \ + --hash=sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0 \ + --hash=sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40 \ + --hash=sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428 \ + --hash=sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927 \ + --hash=sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3 \ + --hash=sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f \ + --hash=sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65 # via # black # mypy -typing-extensions==3.7.4.1 \ - --hash=sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2 \ - --hash=sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d \ - --hash=sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575 - # via mypy -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 +types-requests==2.25.2 \ + --hash=sha256:03122b582f5300ec35ac6692f2634207c467e602dc9ba46b5811a9f6ce0b0bc2 \ + --hash=sha256:a4c03c654527957a70002079ca48669b53d82eac4811abf140ea93847b65529b + # via -r dev-requirements.in +typing-extensions==3.10.0.0 \ + --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ + --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ + --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 + # via + # black + # importlib-metadata + # mypy + # yarl +urllib3==1.25.11 \ + --hash=sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2 \ + --hash=sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e # via # -r requirements.in # requests -vcrpy==4.0.2 \ - --hash=sha256:9740c5b1b63626ec55cefb415259a2c77ce00751e97b0f7f214037baaf13c7bf \ - --hash=sha256:c4ddf1b92c8a431901c56a1738a2c797d965165a96348a26f4b2bbc5fa6d36d9 +vcrpy==4.1.1 \ + --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ + --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 # via -r dev-requirements.in -wcwidth==0.1.8 \ - --hash=sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603 \ - --hash=sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8 - # via pytest wheel==0.36.2 \ --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e # via pip-tools -wrapt==1.11.2 \ - --hash=sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 +wrapt==1.12.1 \ + --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 # via vcrpy -yarl==1.4.2 \ - --hash=sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce \ - --hash=sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6 \ - --hash=sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce \ - --hash=sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae \ - --hash=sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d \ - --hash=sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f \ - --hash=sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b \ - --hash=sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b \ - --hash=sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb \ - --hash=sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462 \ - --hash=sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea \ - --hash=sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70 \ - --hash=sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1 \ - --hash=sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a \ - --hash=sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b \ - --hash=sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080 \ - --hash=sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2 +yarl==1.6.3 \ + --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ + --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \ + --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \ + --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \ + --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \ + --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \ + --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \ + --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \ + --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \ + --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \ + --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \ + --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \ + --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \ + --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \ + --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \ + --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \ + --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \ + --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \ + --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \ + --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \ + --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \ + --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \ + --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \ + --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \ + --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \ + --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \ + --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \ + --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \ + --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \ + --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \ + --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \ + --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \ + --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \ + --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \ + --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \ + --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ + --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 # via vcrpy -zipp==2.2.0 \ - --hash=sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50 \ - --hash=sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e +zipp==3.5.0 \ + --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ + --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 # via # importlib-metadata # pep517 diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 7f1b9e001..7bd0c19fe 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -55,7 +55,8 @@ def json_query(proxy_vm_name: str, data: str, timeout: Optional[int] = None) -> stdout=PIPE, stderr=PIPE, ) - p.stdin.write(data.encode("utf-8")) + if p.stdin is not None: + p.stdin.write(data.encode("utf-8")) try: stdout, _ = p.communicate(timeout=timeout) # type: (bytes, bytes) @@ -274,7 +275,10 @@ def get_sources(self) -> List[Source]: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) sources = data["sources"] @@ -297,7 +301,10 @@ def get_source(self, source: Source) -> Source: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -328,7 +335,10 @@ def delete_source(self, source: Source) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -354,7 +364,10 @@ def delete_conversation(self, uuid: str) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -388,7 +401,10 @@ def add_star(self, source: Source) -> bool: method = "POST" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -408,7 +424,10 @@ def remove_star(self, source: Source) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: raise WrongUUIDError("Missing source {}".format(source.uuid)) @@ -429,7 +448,10 @@ def get_submissions(self, source: Source) -> List[Submission]: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -457,7 +479,10 @@ def get_submission(self, submission: Submission) -> Submission: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -487,7 +512,10 @@ def get_all_submissions(self) -> List[Submission]: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) result = [] # type: List[Submission] @@ -515,7 +543,10 @@ def delete_submission(self, submission: Submission) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -599,7 +630,10 @@ def flag_source(self, source: Source) -> bool: method = "POST" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -623,7 +657,10 @@ def get_current_user(self) -> Any: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) return data @@ -639,7 +676,10 @@ def get_users(self) -> List[User]: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) users = data["users"] @@ -691,7 +731,10 @@ def get_replies_from_source(self, source: Source) -> List[Reply]: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -716,7 +759,10 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -736,7 +782,10 @@ def get_all_replies(self) -> List[Reply]: method = "GET" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) result = [] @@ -766,7 +815,10 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: raise BaseError("Please provide a valid directory to save.") data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -805,7 +857,10 @@ def delete_reply(self, reply: Reply) -> bool: method = "DELETE" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if status_code == 404: @@ -824,7 +879,10 @@ def logout(self) -> bool: method = "POST" data, status_code, headers = self._send_json_request( - method, path_query, headers=self.req_headers, timeout=self.default_request_timeout, + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, ) if "message" in data and data["message"] == "Your token has been revoked.": diff --git a/tests/test_api.py b/tests/test_api.py index e27ba3142..730daeb1a 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -7,10 +7,10 @@ import pytest import vcr from requests.exceptions import ConnectTimeout, ReadTimeout +from test_shared import TestShared from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import AuthError, Reply, Submission -from test_shared import TestShared NUM_REPLIES_PER_SOURCE = 2 diff --git a/tests/test_apiproxy.py b/tests/test_apiproxy.py index 7ca7f947b..55f793d56 100644 --- a/tests/test_apiproxy.py +++ b/tests/test_apiproxy.py @@ -6,11 +6,11 @@ import pyotp import pytest +from test_shared import TestShared +from utils import qrexec_datasaver from sdclientapi import API, RequestTimeoutError from sdclientapi.sdlocalobjects import AuthError, BaseError, Reply, Submission -from test_shared import TestShared -from utils import qrexec_datasaver class TestAPIProxy(TestShared): From 372eb54e41e7305bba15bd64bbe9d4b8c6775ac0 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 3 Aug 2021 14:20:38 -0700 Subject: [PATCH 462/751] use venv target in CI --- .circleci/config.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d2563a6d9..fc090c202 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,9 +13,8 @@ jobs: - run: name: Install dependencies command: | - virtualenv --python=python3 .venv + make venv source .venv/bin/activate - pip install --require-hashes -r dev-requirements.txt - save_cache: key: deps9-{{ .Branch }}-{{ checksum "dev-requirements.txt" }} paths: @@ -41,9 +40,8 @@ jobs: name: Install dependencies command: | pyenv global 3.7.0 - virtualenv --python=python3 .venv + make venv source .venv/bin/activate - pip install --require-hashes -r dev-requirements.txt - run: name: Download SecureDrop server code command: git clone https://github.com/freedomofpress/securedrop.git From 710b270bd6872240563f72ed9f7717dafb14f59e Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 3 Aug 2021 14:30:53 -0700 Subject: [PATCH 463/751] pin urllib3 to same version used in the client --- dev-requirements.txt | 6 +++--- requirements.in | 2 +- requirements.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 747976a34..6be7e5c14 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -380,9 +380,9 @@ typing-extensions==3.10.0.0 \ # importlib-metadata # mypy # yarl -urllib3==1.25.11 \ - --hash=sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2 \ - --hash=sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 # via # -r requirements.in # requests diff --git a/requirements.in b/requirements.in index 8e8eb87c6..3ae4b02c6 100644 --- a/requirements.in +++ b/requirements.in @@ -1,2 +1,2 @@ requests==2.22.0 -urllib3>=1.25.9 +urllib3==1.25.10 diff --git a/requirements.txt b/requirements.txt index bdd59cb37..09e4e2085 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,9 +20,9 @@ requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # via -r requirements.in -urllib3==1.25.11 \ - --hash=sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2 \ - --hash=sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 # via # -r requirements.in # requests From 0743561c069e574d557339b2af892ab3ffa824f1 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 10 Aug 2021 13:54:22 -0700 Subject: [PATCH 464/751] remove some deps and regenerate test-requirements.txt Signed-off-by: Allie Crevier --- Makefile | 7 +- requirements/test-requirements.in | 5 +- requirements/test-requirements.txt | 249 ++++++++++++++++------------- 3 files changed, 143 insertions(+), 118 deletions(-) diff --git a/Makefile b/Makefile index 91be0943e..fd00bb395 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,8 @@ +.PHONY: venv +venv: ## Provision a Python 3 virtualenv for development. + python3 -m venv .venv + .venv/bin/pip install --require-hashes -r "requirements/test-requirements.txt" + .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities pip install --upgrade safety && \ @@ -10,7 +15,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities .PHONY: update-pip-requirements update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --generate-hashes --output-file requirements/test-requirements.txt requirements/test-requirements.in + pip-compile --allow-unsafe --generate-hashes --output-file requirements/test-requirements.txt requirements/test-requirements.in .PHONY: check check: lint semgrep test ## Run linter and tests diff --git a/requirements/test-requirements.in b/requirements/test-requirements.in index 008c85a3d..96e3b86e9 100644 --- a/requirements/test-requirements.in +++ b/requirements/test-requirements.in @@ -1,11 +1,8 @@ flake8 -importlib-metadata # otherwise introduced unpinned via flake8 pathlib2 # required by pytest for python 3.5 pip-tools py>=1.9.0 pytest pytest-cov pytest-mock -semgrep==0.49.0 -typing-extensions # otherwise introduced unpinned via importlib-metadata -zipp # otherwise introduced unpinned via pep517 (via pip-tools) \ No newline at end of file +semgrep==0.49.0 \ No newline at end of file diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 86f75e2a7..8350b3468 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -1,27 +1,27 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.7 # To update, run: # -# pip-compile --generate-hashes --output-file=requirements/test-requirements.txt requirements/test-requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/test-requirements.txt requirements/test-requirements.in # -attrs==20.3.0 \ - --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ - --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 +attrs==21.2.0 \ + --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ + --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb # via # jsonschema # pytest # semgrep -certifi==2020.12.5 \ - --hash=sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c \ - --hash=sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830 +certifi==2021.5.30 \ + --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ + --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via requests -chardet==4.0.0 \ - --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \ - --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 +charset-normalizer==2.0.4 \ + --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ + --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 # via requests -click==7.1.2 \ - --hash=sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a \ - --hash=sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc +click==8.0.1 \ + --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ + --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 # via pip-tools colorama==0.4.4 \ --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ @@ -81,19 +81,19 @@ coverage==5.5 \ --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 # via pytest-cov -flake8==3.9.1 \ - --hash=sha256:1aa8990be1e689d96c745c5682b687ea49f2e05a443aff1f8251092b0014e378 \ - --hash=sha256:3b9f848952dddccf635be78098ca75010f073bfe14d2c6bda867154bea728d2a +flake8==3.9.2 \ + --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ + --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 # via -r requirements/test-requirements.in -idna==2.10 \ - --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ - --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 +idna==3.2 \ + --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ + --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via requests -importlib-metadata==4.0.1 \ - --hash=sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581 \ - --hash=sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d +importlib-metadata==4.6.3 \ + --hash=sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9 \ + --hash=sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b # via - # -r requirements/test-requirements.in + # click # flake8 # jsonschema # pep517 @@ -111,23 +111,23 @@ mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 -packaging==20.9 \ - --hash=sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5 \ - --hash=sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a +packaging==21.0 \ + --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \ + --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14 # via # pytest # semgrep -pathlib2==2.3.5 \ - --hash=sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db \ - --hash=sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868 +pathlib2==2.3.6 \ + --hash=sha256:3a130b266b3a36134dcc79c17b3c7ac9634f083825ca6ea9d8f557ee6195c9c8 \ + --hash=sha256:7d8bcb5555003cdf4a8d2872c538faa3a0f5d20630cb360e518ca3b981795e5f # via -r requirements/test-requirements.in -pep517==0.10.0 \ - --hash=sha256:ac59f3f6b9726a49e15a649474539442cf76e0697e39df4869d25e68e880931b \ - --hash=sha256:eba39d201ef937584ad3343df3581069085bacc95454c80188291d5b3ac7a249 +pep517==0.11.0 \ + --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ + --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 # via pip-tools -pip-tools==6.1.0 \ - --hash=sha256:197e3f8839095ccec3ad1ef410e0804c07d9f17dff1c340fb417ca2b63feacc9 \ - --hash=sha256:400bf77e29cca48c31abc210042932bb52dcc138ef4ea4d52c5db429aa8ae6ee +pip-tools==6.2.0 \ + --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ + --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r requirements/test-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ @@ -151,73 +151,83 @@ pyparsing==2.4.7 \ --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b # via packaging -pyrsistent==0.17.3 \ - --hash=sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e +pyrsistent==0.18.0 \ + --hash=sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2 \ + --hash=sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7 \ + --hash=sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea \ + --hash=sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426 \ + --hash=sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710 \ + --hash=sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1 \ + --hash=sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396 \ + --hash=sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2 \ + --hash=sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680 \ + --hash=sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35 \ + --hash=sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427 \ + --hash=sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b \ + --hash=sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b \ + --hash=sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f \ + --hash=sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef \ + --hash=sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c \ + --hash=sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4 \ + --hash=sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d \ + --hash=sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78 \ + --hash=sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b \ + --hash=sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72 # via jsonschema -pytest-cov==2.11.1 \ - --hash=sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7 \ - --hash=sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da - # via -r requirements/test-requirements.in -pytest-mock==3.6.0 \ - --hash=sha256:952139a535b5b48ac0bb2f90b5dd36b67c7e1ba92601f3a8012678c4bd7f0bcc \ - --hash=sha256:f7c3d42d6287f4e45846c8231c31902b6fa2bea98735af413a43da4cf5b727f1 - # via -r requirements/test-requirements.in -pytest==6.2.3 \ - --hash=sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634 \ - --hash=sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc +pytest==6.2.4 \ + --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \ + --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890 # via # -r requirements/test-requirements.in # pytest-cov # pytest-mock -requests==2.25.1 \ - --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ - --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e +pytest-cov==2.12.1 \ + --hash=sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a \ + --hash=sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7 + # via -r requirements/test-requirements.in +pytest-mock==3.6.1 \ + --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ + --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 + # via -r requirements/test-requirements.in +requests==2.26.0 \ + --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ + --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via semgrep -ruamel.yaml.clib==0.2.2 \ - --hash=sha256:058a1cc3df2a8aecc12f983a48bda99315cebf55a3b3a5463e37bb599b05727b \ - --hash=sha256:1236df55e0f73cd138c0eca074ee086136c3f16a97c2ac719032c050f7e0622f \ - --hash=sha256:1f8c0a4577c0e6c99d208de5c4d3fd8aceed9574bb154d7a2b21c16bb924154c \ - --hash=sha256:2602e91bd5c1b874d6f93d3086f9830f3e907c543c7672cf293a97c3fabdcd91 \ - --hash=sha256:28116f204103cb3a108dfd37668f20abe6e3cafd0d3fd40dba126c732457b3cc \ - --hash=sha256:2d24bd98af676f4990c4d715bcdc2a60b19c56a3fb3a763164d2d8ca0e806ba7 \ - --hash=sha256:2fd336a5c6415c82e2deb40d08c222087febe0aebe520f4d21910629018ab0f3 \ - --hash=sha256:30dca9bbcbb1cc858717438218d11eafb78666759e5094dd767468c0d577a7e7 \ - --hash=sha256:44c7b0498c39f27795224438f1a6be6c5352f82cb887bc33d962c3a3acc00df6 \ - --hash=sha256:464e66a04e740d754170be5e740657a3b3b6d2bcc567f0c3437879a6e6087ff6 \ - --hash=sha256:46d6d20815064e8bb023ea8628cfb7402c0f0e83de2c2227a88097e239a7dffd \ - --hash=sha256:4df5019e7783d14b79217ad9c56edf1ba7485d614ad5a385d1b3c768635c81c0 \ - --hash=sha256:4e52c96ca66de04be42ea2278012a2342d89f5e82b4512fb6fb7134e377e2e62 \ - --hash=sha256:5254af7d8bdf4d5484c089f929cb7f5bafa59b4f01d4f48adda4be41e6d29f99 \ - --hash=sha256:52ae5739e4b5d6317b52f5b040b1b6639e8af68a5b8fd606a8b08658fbd0cab5 \ - --hash=sha256:53b9dd1abd70e257a6e32f934ebc482dac5edb8c93e23deb663eac724c30b026 \ - --hash=sha256:6c0a5dc52fc74eb87c67374a4e554d4761fd42a4d01390b7e868b30d21f4b8bb \ - --hash=sha256:73b3d43e04cc4b228fa6fa5d796409ece6fcb53a6c270eb2048109cbcbc3b9c2 \ - --hash=sha256:74161d827407f4db9072011adcfb825b5258a5ccb3d2cd518dd6c9edea9e30f1 \ - --hash=sha256:75f0ee6839532e52a3a53f80ce64925ed4aed697dd3fa890c4c918f3304bd4f4 \ - --hash=sha256:839dd72545ef7ba78fd2aa1a5dd07b33696adf3e68fae7f31327161c1093001b \ - --hash=sha256:8be05be57dc5c7b4a0b24edcaa2f7275866d9c907725226cdde46da09367d923 \ - --hash=sha256:8e8fd0a22c9d92af3a34f91e8a2594eeb35cba90ab643c5e0e643567dc8be43e \ - --hash=sha256:a873e4d4954f865dcb60bdc4914af7eaae48fb56b60ed6daa1d6251c72f5337c \ - --hash=sha256:ab845f1f51f7eb750a78937be9f79baea4a42c7960f5a94dde34e69f3cce1988 \ - --hash=sha256:b1e981fe1aff1fd11627f531524826a4dcc1f26c726235a52fcb62ded27d150f \ - --hash=sha256:b4b0d31f2052b3f9f9b5327024dc629a253a83d8649d4734ca7f35b60ec3e9e5 \ - --hash=sha256:c6ac7e45367b1317e56f1461719c853fd6825226f45b835df7436bb04031fd8a \ - --hash=sha256:daf21aa33ee9b351f66deed30a3d450ab55c14242cfdfcd377798e2c0d25c9f1 \ - --hash=sha256:e9f7d1d8c26a6a12c23421061f9022bb62704e38211fe375c645485f38df34a2 \ - --hash=sha256:f6061a31880c1ed6b6ce341215336e2f3d0c1deccd84957b6fa8ca474b41e89f - # via ruamel.yaml -ruamel.yaml==0.17.4 \ - --hash=sha256:44bc6b54fddd45e4bc0619059196679f9e8b79c027f4131bb072e6a22f4d5e28 \ - --hash=sha256:ac79fb25f5476e8e9ed1c53b8a2286d2c3f5dde49eb37dbcee5c7eb6a8415a22 +ruamel.yaml==0.17.10 \ + --hash=sha256:106bc8d6dc6a0ff7c9196a47570432036f41d556b779c6b4e618085f57e39e67 \ + --hash=sha256:ffb9b703853e9e8b7861606dfdab1026cf02505bade0653d1880f4b2db47f815 # via semgrep +ruamel.yaml.clib==0.2.6 \ + --hash=sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd \ + --hash=sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0 \ + --hash=sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277 \ + --hash=sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104 \ + --hash=sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd \ + --hash=sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78 \ + --hash=sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99 \ + --hash=sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527 \ + --hash=sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84 \ + --hash=sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7 \ + --hash=sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468 \ + --hash=sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b \ + --hash=sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94 \ + --hash=sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233 \ + --hash=sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb \ + --hash=sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5 \ + --hash=sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe \ + --hash=sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751 \ + --hash=sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502 \ + --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ + --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c + # via ruamel.yaml semgrep==0.49.0 \ --hash=sha256:99b2bae87afc824a232063c91524fda2039699733f34ba28fc963f2b76228f1a \ --hash=sha256:cca38e34824bdf17aeae6e7a8fc3ce0ac441fec51b207783a469fff9994eb08b \ --hash=sha256:e49c84f452809af7895a09f06ce48bd86fdbb7b09482fef99f528da2afb71b46 # via -r requirements/test-requirements.in -six==1.15.0 \ - --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ - --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via # jsonschema # pathlib2 @@ -225,32 +235,45 @@ toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via - # pep517 # pytest -tqdm==4.60.0 \ - --hash=sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3 \ - --hash=sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae + # pytest-cov +tomli==1.2.1 \ + --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ + --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 + # via pep517 +tqdm==4.62.0 \ + --hash=sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6 \ + --hash=sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340 # via semgrep -typing-extensions==3.7.4.3 \ - --hash=sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918 \ - --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ - --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f - # via - # -r requirements/test-requirements.in - # importlib-metadata -urllib3==1.26.4 \ - --hash=sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df \ - --hash=sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937 +typing-extensions==3.10.0.0 \ + --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ + --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ + --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 + # via importlib-metadata +urllib3==1.26.6 \ + --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ + --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via requests -zipp==3.4.1 \ - --hash=sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76 \ - --hash=sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098 +wheel==0.37.0 \ + --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ + --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad + # via pip-tools +zipp==3.5.0 \ + --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ + --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 # via - # -r requirements/test-requirements.in # importlib-metadata # pep517 -# WARNING: The following packages were not pinned, but pip requires them to be -# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. -# pip -# setuptools +# The following packages are considered to be unsafe in a requirements file: +pip==21.2.3 \ + --hash=sha256:895df6014c2f02f9d278a8ad6e31cdfd312952b4a93c3068d0556964f4490057 \ + --hash=sha256:91e66f2a2702e7d2dcc092ed8c5ebe923e69b9997ea28ba25823943bcd3bf820 + # via pip-tools +setuptools==57.4.0 \ + --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ + --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 + # via + # jsonschema + # pip-tools + # semgrep From 2dcc6de0ce9aadc93e85dab54d2be95cc63357e1 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 10 Aug 2021 14:05:19 -0700 Subject: [PATCH 465/751] use latest semgrep --- requirements/test-requirements.in | 2 +- requirements/test-requirements.txt | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/requirements/test-requirements.in b/requirements/test-requirements.in index 96e3b86e9..ed04d7cb9 100644 --- a/requirements/test-requirements.in +++ b/requirements/test-requirements.in @@ -5,4 +5,4 @@ py>=1.9.0 pytest pytest-cov pytest-mock -semgrep==0.49.0 \ No newline at end of file +semgrep \ No newline at end of file diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 8350b3468..0318a2ab1 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -11,6 +11,10 @@ attrs==21.2.0 \ # jsonschema # pytest # semgrep +bracex==2.1.1 \ + --hash=sha256:01f715cd0ed7a622ec8b32322e715813f7574de531f09b70f6f3b2c10f682425 \ + --hash=sha256:64e2a6d14de9c8e022cf40539ac8468ba7c4b99550a2b05fc87fd20e392e568f + # via wcmatch certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 @@ -121,6 +125,9 @@ pathlib2==2.3.6 \ --hash=sha256:3a130b266b3a36134dcc79c17b3c7ac9634f083825ca6ea9d8f557ee6195c9c8 \ --hash=sha256:7d8bcb5555003cdf4a8d2872c538faa3a0f5d20630cb360e518ca3b981795e5f # via -r requirements/test-requirements.in +peewee==3.14.4 \ + --hash=sha256:9e356b327c2eaec6dd42ecea6f4ddded025793dba906a3d065a0452e726c51a2 + # via semgrep pep517==0.11.0 \ --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 @@ -220,10 +227,10 @@ ruamel.yaml.clib==0.2.6 \ --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c # via ruamel.yaml -semgrep==0.49.0 \ - --hash=sha256:99b2bae87afc824a232063c91524fda2039699733f34ba28fc963f2b76228f1a \ - --hash=sha256:cca38e34824bdf17aeae6e7a8fc3ce0ac441fec51b207783a469fff9994eb08b \ - --hash=sha256:e49c84f452809af7895a09f06ce48bd86fdbb7b09482fef99f528da2afb71b46 +semgrep==0.61.0 \ + --hash=sha256:04256932d2b234a034948d39bd04349cdc878e2868b91d2039038dd5451248ba \ + --hash=sha256:7dc56bf0ecfd66c86e1e130103d3088b82ff2b5a6c30a204314a7a1760790420 \ + --hash=sha256:caa74cce5f61fd18049ac8ac7a4ec2a5e604beb9232d7e26a171b7a2aeeb9d5c # via -r requirements/test-requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -254,6 +261,10 @@ urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via requests +wcmatch==8.2 \ + --hash=sha256:4d54ddb506c90b5a5bba3a96a1cfb0bb07127909e19046a71d689ddfb18c3617 \ + --hash=sha256:9146b1ab9354e0797ef6ef69bc89cb32cb9f46d1b9eeef69c559aeec8f3bffb6 + # via semgrep wheel==0.37.0 \ --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad From caebb466b764c1ca1eab12296831493e92ea64bf Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 10 Aug 2021 15:47:58 -0700 Subject: [PATCH 466/751] remove pathlib2 from in file Signed-off-by: Allie Crevier --- requirements/test-requirements.in | 1 - requirements/test-requirements.txt | 8 +------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/requirements/test-requirements.in b/requirements/test-requirements.in index ed04d7cb9..e0bfaf54a 100644 --- a/requirements/test-requirements.in +++ b/requirements/test-requirements.in @@ -1,5 +1,4 @@ flake8 -pathlib2 # required by pytest for python 3.5 pip-tools py>=1.9.0 pytest diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 0318a2ab1..9ff54c558 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -121,10 +121,6 @@ packaging==21.0 \ # via # pytest # semgrep -pathlib2==2.3.6 \ - --hash=sha256:3a130b266b3a36134dcc79c17b3c7ac9634f083825ca6ea9d8f557ee6195c9c8 \ - --hash=sha256:7d8bcb5555003cdf4a8d2872c538faa3a0f5d20630cb360e518ca3b981795e5f - # via -r requirements/test-requirements.in peewee==3.14.4 \ --hash=sha256:9e356b327c2eaec6dd42ecea6f4ddded025793dba906a3d065a0452e726c51a2 # via semgrep @@ -235,9 +231,7 @@ semgrep==0.61.0 \ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via - # jsonschema - # pathlib2 + # via jsonschema toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f From 89f191f2813daa8cc8adedc3aef55822ba626c67 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 13 Aug 2021 11:13:54 +0530 Subject: [PATCH 467/751] Adds upgrade-pip makefile target One can upgrade a dependency via: `PACKAGE=packagename make upgrade-pip` --- Makefile | 3 +++ README.md | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/Makefile b/Makefile index 0a669f0db..185bffb50 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,9 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities update-pip-requirements: ## Updates all Python requirements files via pip-compile. pip-compile --generate-hashes --output-file requirements.txt requirements.in +.PHONY: upgrade-pip +upgrade-pip: ## Upgrade one single package via pip-compile + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements.txt requirements.in # Explaination of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## diff --git a/README.md b/README.md index 888f606c4..9bce5f6ba 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,14 @@ This is a Python module and qrexec service for logging in Qubes for [SecureDrop](https://securedrop.org). +## How to upgrade the dependencies? + +To upgrade one single Python dependency, say `redis`, run the following: + +```bash +PACKAGE=redis make upgrade-pip +``` + ## How to use/try this? In our example, we will use a vm named *logging* for storing logs, and we will use From 4bd57fe5d325ab59c4f59efa1de3946cbd960f5f Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Fri, 13 Aug 2021 10:55:40 +0530 Subject: [PATCH 468/751] Adds upgrade-pip makefile target One can now upgrade one particular dependency via `PACKAGE=pacakgename make upgrade-pip` command. --- Makefile | 6 ++++++ README.md | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/Makefile b/Makefile index d1287bbe4..4d4f3d17d 100644 --- a/Makefile +++ b/Makefile @@ -56,6 +56,12 @@ update-pip-requirements: ## Updates all Python requirements files via pip-compil pip-compile --generate-hashes --output-file dev-requirements.txt requirements.in dev-requirements.in pip-compile --generate-hashes --output-file requirements.txt requirements.in + +.PHONY: upgrade-pip +upgrade-pip: ## Upgrade one single package via pip-compile + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file dev-requirements.txt requirements.in dev-requirements.in + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements.txt requirements.in + .PHONY: open-coverage-report open-coverage-report: ## Open the coverage report in your browser @$(OPEN) htmlcov/index.html diff --git a/README.md b/README.md index 87869dc76..39698a85e 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,16 @@ pip uninstall securedrop-sdk pip install git+https://github.com/freedomofpress/securedrop-sdk@my_branch#egg=securedrop-sdk ``` +# Upgrading one single dependency + +To upgrade one single Python dependency, say `requests`, run the following: + +```bash +PACKAGE=requests make upgrade-pip +``` + +This will upgrade both `dev-requirements` and primary `requirements`. + # Running tests To run all tests and checks, run: From fcbd963381a27197ec9515e4eca1e710cc780f01 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 12:16:54 -0700 Subject: [PATCH 469/751] add more helper functions for updating reqs Signed-off-by: Allie Crevier --- Makefile | 32 +++++++++-- requirements.txt | 9 --- requirements/dev-requirements.in | 1 + requirements/dev-requirements.txt | 57 +++++++++++++++++++ .../requirements.in | 0 requirements/requirements.txt | 10 ++++ 6 files changed, 94 insertions(+), 15 deletions(-) delete mode 100644 requirements.txt create mode 100644 requirements/dev-requirements.in create mode 100644 requirements/dev-requirements.txt rename requirements.in => requirements/requirements.in (100%) create mode 100644 requirements/requirements.txt diff --git a/Makefile b/Makefile index 185bffb50..3b8e95fcb 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,12 @@ DEFAULT_GOAL: help SHELL := /bin/bash +.PHONY: venv +venv: ## Provision a Python 3 virtualenv for **development** + python3 -m venv .venv + .venv/bin/pip install --upgrade pip wheel + .venv/bin/pip install --require-hashes -r requirements/dev-requirements.txt + # Bandit is a static code analysis tool to detect security vulnerabilities in Python applications # https://wiki.openstack.org/wiki/Security/Projects/Bandit .PHONY: bandit @@ -19,13 +25,27 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities || exit 1; \ done -.PHONY: update-pip-requirements -update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --generate-hashes --output-file requirements.txt requirements.in +.PHONY: sync-requirements +sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies + rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt + pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in + +.PHONY: requirements +requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in + pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements + +.PHONY: update-dependency +update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements -.PHONY: upgrade-pip -upgrade-pip: ## Upgrade one single package via pip-compile - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements.txt requirements.in +.PHONY: update-dev-only-dependencies +update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in + $(MAKE) sync-requirements + @while read line; do \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ + done < 'requirements/dev-requirements.in' # Explaination of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 3c896d549..000000000 --- a/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -# -# This file is autogenerated by pip-compile -# To update, run: -# -# pip-compile --generate-hashes --output-file=requirements.txt requirements.in -# -redis==3.3.11 \ - --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ - --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in new file mode 100644 index 000000000..2c2a9f384 --- /dev/null +++ b/requirements/dev-requirements.in @@ -0,0 +1 @@ +pip-tools diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt new file mode 100644 index 000000000..51774d6bc --- /dev/null +++ b/requirements/dev-requirements.txt @@ -0,0 +1,57 @@ +# +# This file is autogenerated by pip-compile with python 3.7 +# To update, run: +# +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in +# +click==8.0.1 \ + --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ + --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 + # via pip-tools +importlib-metadata==4.6.4 \ + --hash=sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f \ + --hash=sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5 + # via + # click + # pep517 +pep517==0.11.0 \ + --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ + --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 + # via pip-tools +pip-tools==6.2.0 \ + --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ + --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 + # via -r requirements/dev-requirements.in +redis==3.3.11 \ + --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ + --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 + # via -r requirements/requirements.in +tomli==1.2.1 \ + --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ + --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 + # via pep517 +typing-extensions==3.10.0.0 \ + --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ + --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ + --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 + # via importlib-metadata +wheel==0.37.0 \ + --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ + --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad + # via pip-tools +zipp==3.5.0 \ + --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ + --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 + # via + # importlib-metadata + # pep517 + +# The following packages are considered to be unsafe in a requirements file: +pip==21.2.4 \ + --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ + --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 + # via pip-tools +setuptools==57.4.0 \ + --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ + --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 + # via pip-tools diff --git a/requirements.in b/requirements/requirements.in similarity index 100% rename from requirements.in rename to requirements/requirements.in diff --git a/requirements/requirements.txt b/requirements/requirements.txt new file mode 100644 index 000000000..5bf812bb7 --- /dev/null +++ b/requirements/requirements.txt @@ -0,0 +1,10 @@ +# +# This file is autogenerated by pip-compile with python 3.7 +# To update, run: +# +# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in +# +redis==3.3.11 \ + --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ + --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 + # via -r requirements/requirements.in From febef708bbb34b86aa21e7b7c1ab021b47cdf6f8 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 15:40:00 -0700 Subject: [PATCH 470/751] also move build-requirements.txt to requirements directory --- build-requirements.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 build-requirements.txt diff --git a/build-requirements.txt b/build-requirements.txt deleted file mode 100644 index b9813f49e..000000000 --- a/build-requirements.txt +++ /dev/null @@ -1 +0,0 @@ -redis==3.3.11 --hash=sha256:974926675d246ade47a101e305596a0f50282a405a03b7173a70d99c79e6370c From c9ad57aea1c06f0f3d73248c61ce361cfa63cba7 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 15:40:15 -0700 Subject: [PATCH 471/751] also move build-requirements.txt to requirements directory --- requirements/build-requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirements/build-requirements.txt diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt new file mode 100644 index 000000000..b9813f49e --- /dev/null +++ b/requirements/build-requirements.txt @@ -0,0 +1 @@ +redis==3.3.11 --hash=sha256:974926675d246ade47a101e305596a0f50282a405a03b7173a70d99c79e6370c From 8798ca41672191dde7c7e21eaf69b526f5ba0069 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 15:42:18 -0700 Subject: [PATCH 472/751] add helpers to update dev-only deps and sync with prod Signed-off-by: Allie Crevier --- Makefile | 29 ++++++++++++++----- .../build-requirements.txt | 0 .../dev-requirements.in | 0 .../dev-requirements.txt | 0 .../requirements.in | 0 .../requirements.txt | 22 +++++++------- 6 files changed, 33 insertions(+), 18 deletions(-) rename build-requirements.txt => requirements/build-requirements.txt (100%) rename dev-requirements.in => requirements/dev-requirements.in (100%) rename dev-requirements.txt => requirements/dev-requirements.txt (100%) rename requirements.in => requirements/requirements.in (100%) rename requirements.txt => requirements/requirements.txt (87%) diff --git a/Makefile b/Makefile index 688163fcf..20f7e3fb5 100644 --- a/Makefile +++ b/Makefile @@ -5,9 +5,7 @@ all: help .PHONY: venv venv: - python3 -m venv .venv - ## Good idea to upgrade pip and wheel when you create a new virtual environment. - ## Or you could use the virtualenv command instead. + python3 -m venv .venv ## Provision a Python 3 virtualenv for **development** .venv/bin/pip install --upgrade pip wheel .venv/bin/pip install --require-hashes -r "dev-requirements.txt" @@ -51,10 +49,27 @@ isort: ## Run isort for file formatting isort-check: ## Check isort for file formatting @isort --check-only --diff securedrop_proxy/*.py tests/*.py -.PHONY: update-pip-requirements -update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --generate-hashes --allow-unsafe --upgrade --output-file dev-requirements.txt dev-requirements.in requirements.in - pip-compile --generate-hashes --output-file requirements.txt requirements.in +.PHONY: sync-requirements +sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies + rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt + pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in + +.PHONY: requirements +requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in + pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements + +.PHONY: update-dependency +update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements + +.PHONY: update-dev-only-dependencies +update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in + $(MAKE) sync-requirements + @while read line; do \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ + done < 'requirements/dev-requirements.in' .PHONY: test test: clean .coverage ## Runs tests with coverage diff --git a/build-requirements.txt b/requirements/build-requirements.txt similarity index 100% rename from build-requirements.txt rename to requirements/build-requirements.txt diff --git a/dev-requirements.in b/requirements/dev-requirements.in similarity index 100% rename from dev-requirements.in rename to requirements/dev-requirements.in diff --git a/dev-requirements.txt b/requirements/dev-requirements.txt similarity index 100% rename from dev-requirements.txt rename to requirements/dev-requirements.txt diff --git a/requirements.in b/requirements/requirements.in similarity index 100% rename from requirements.in rename to requirements/requirements.in diff --git a/requirements.txt b/requirements/requirements.txt similarity index 87% rename from requirements.txt rename to requirements/requirements.txt index 9afbecd00..9e391e742 100644 --- a/requirements.txt +++ b/requirements/requirements.txt @@ -2,35 +2,35 @@ # This file is autogenerated by pip-compile with python 3.7 # To update, run: # -# pip-compile --generate-hashes --output-file=requirements.txt requirements.in +# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a # via - # -r requirements.in + # -r requirements/requirements.in # requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 # via - # -r requirements.in + # -r requirements/requirements.in # requests furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec - # via -r requirements.in + # via -r requirements/requirements.in idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 # via - # -r requirements.in + # -r requirements/requirements.in # requests orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 # via - # -r requirements.in + # -r requirements/requirements.in # furl pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ @@ -54,25 +54,25 @@ pyyaml==5.4.1 \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc - # via -r requirements.in + # via -r requirements/requirements.in requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 - # via -r requirements.in + # via -r requirements/requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb # via - # -r requirements.in + # -r requirements/requirements.in # furl # orderedmultidict urllib3==1.25.10 \ --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 # via - # -r requirements.in + # -r requirements/requirements.in # requests werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 - # via -r requirements.in + # via -r requirements/requirements.in From 352024c75ec6a570bb473ee2766cf28a95b929a1 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 15:47:31 -0700 Subject: [PATCH 473/751] update dev-only dependencies and sync with prod --- requirements/dev-requirements.txt | 192 ++++++++++++++---------------- 1 file changed, 92 insertions(+), 100 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 3e2cf90a0..dc6989228 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.7 # To update, run: # -# pip-compile --allow-unsafe --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # appdirs==1.4.4 \ --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ @@ -11,18 +11,18 @@ appdirs==1.4.4 \ black==21.7b0 \ --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in certifi==2018.10.15 \ --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a # via - # -r requirements.in + # -r requirements/requirements.in # requests chardet==3.0.4 \ --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 # via - # -r requirements.in + # -r requirements/requirements.in # requests click==8.0.1 \ --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ @@ -83,25 +83,25 @@ coverage==5.5 \ --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in flake8==3.9.2 \ --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec - # via -r requirements.in + # via -r requirements/requirements.in idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 # via - # -r requirements.in + # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.6.1 \ - --hash=sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac \ - --hash=sha256:9f55f560e116f8643ecf2922d9cd3e1c7e8d52e683178fecd9d08f6aa357e11e +importlib-metadata==4.6.4 \ + --hash=sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f \ + --hash=sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5 # via # click # flake8 @@ -109,12 +109,12 @@ importlib-metadata==4.6.1 \ isort==5.9.3 \ --hash=sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899 \ --hash=sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # flake8 multidict==5.1.0 \ --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ @@ -155,7 +155,7 @@ multidict==5.1.0 \ --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # yarl mypy==0.910 \ --hash=sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9 \ @@ -181,19 +181,19 @@ mypy==0.910 \ --hash=sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504 \ --hash=sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921 \ --hash=sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # black # mypy orderedmultidict==1.0 \ --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 # via - # -r requirements.in + # -r requirements/requirements.in # furl pathspec==0.9.0 \ --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ @@ -206,18 +206,18 @@ pep517==0.11.0 \ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # flake8 pyflakes==2.3.1 \ --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # flake8 pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ @@ -232,79 +232,71 @@ pyyaml==5.4.1 \ --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ - --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ - --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ - --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ - --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ - --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ - --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ - --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc # via - # -r requirements.in + # -r requirements/requirements.in # vcrpy -regex==2021.7.6 \ - --hash=sha256:0eb2c6e0fcec5e0f1d3bcc1133556563222a2ffd2211945d7b1480c1b1a42a6f \ - --hash=sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad \ - --hash=sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a \ - --hash=sha256:1c78780bf46d620ff4fff40728f98b8afd8b8e35c3efd638c7df67be2d5cddbf \ - --hash=sha256:2366fe0479ca0e9afa534174faa2beae87847d208d457d200183f28c74eaea59 \ - --hash=sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d \ - --hash=sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895 \ - --hash=sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4 \ - --hash=sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3 \ - --hash=sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222 \ - --hash=sha256:422dec1e7cbb2efbbe50e3f1de36b82906def93ed48da12d1714cabcd993d7f0 \ - --hash=sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c \ - --hash=sha256:4f64fc59fd5b10557f6cd0937e1597af022ad9b27d454e182485f1db3008f417 \ - --hash=sha256:564a4c8a29435d1f2256ba247a0315325ea63335508ad8ed938a4f14c4116a5d \ - --hash=sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d \ - --hash=sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761 \ - --hash=sha256:59c00bb8dd8775473cbfb967925ad2c3ecc8886b3b2d0c90a8e2707e06c743f0 \ - --hash=sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026 \ - --hash=sha256:6afe6a627888c9a6cfbb603d1d017ce204cebd589d66e0703309b8048c3b0854 \ - --hash=sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb \ - --hash=sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d \ - --hash=sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068 \ - --hash=sha256:89e5528803566af4df368df2d6f503c84fbfb8249e6631c7b025fe23e6bd0cde \ - --hash=sha256:99d8ab206a5270c1002bfcf25c51bf329ca951e5a169f3b43214fdda1f0b5f0d \ - --hash=sha256:9a854b916806c7e3b40e6616ac9e85d3cdb7649d9e6590653deb5b341a736cec \ - --hash=sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa \ - --hash=sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd \ - --hash=sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b \ - --hash=sha256:cbe23b323988a04c3e5b0c387fe3f8f363bf06c0680daf775875d979e376bd26 \ - --hash=sha256:ccb3d2190476d00414aab36cca453e4596e8f70a206e2aa8db3d495a109153d2 \ - --hash=sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f \ - --hash=sha256:db2b7df831c3187a37f3bb80ec095f249fa276dbe09abd3d35297fc250385694 \ - --hash=sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0 \ - --hash=sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407 \ - --hash=sha256:e6a1e5ca97d411a461041d057348e578dc344ecd2add3555aedba3b408c9f874 \ - --hash=sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035 \ - --hash=sha256:ed693137a9187052fc46eedfafdcb74e09917166362af4cc4fddc3b31560e93d \ - --hash=sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c \ - --hash=sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5 \ - --hash=sha256:f9392a4555f3e4cb45310a65b403d86b589adc773898c25a39184b1ba4db8985 \ - --hash=sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58 +regex==2021.8.21 \ + --hash=sha256:03840a07a402576b8e3a6261f17eb88abd653ad4e18ec46ef10c9a63f8c99ebd \ + --hash=sha256:06ba444bbf7ede3890a912bd4904bb65bf0da8f0d8808b90545481362c978642 \ + --hash=sha256:1f9974826aeeda32a76648fc677e3125ade379869a84aa964b683984a2dea9f1 \ + --hash=sha256:330836ad89ff0be756b58758878409f591d4737b6a8cef26a162e2a4961c3321 \ + --hash=sha256:38600fd58c2996829480de7d034fb2d3a0307110e44dae80b6b4f9b3d2eea529 \ + --hash=sha256:3a195e26df1fbb40ebee75865f9b64ba692a5824ecb91c078cc665b01f7a9a36 \ + --hash=sha256:41acdd6d64cd56f857e271009966c2ffcbd07ec9149ca91f71088574eaa4278a \ + --hash=sha256:45f97ade892ace20252e5ccecdd7515c7df5feeb42c3d2a8b8c55920c3551c30 \ + --hash=sha256:4b0c211c55d4aac4309c3209833c803fada3fc21cdf7b74abedda42a0c9dc3ce \ + --hash=sha256:5d5209c3ba25864b1a57461526ebde31483db295fc6195fdfc4f8355e10f7376 \ + --hash=sha256:615fb5a524cffc91ab4490b69e10ae76c1ccbfa3383ea2fad72e54a85c7d47dd \ + --hash=sha256:61e734c2bcb3742c3f454dfa930ea60ea08f56fd1a0eb52d8cb189a2f6be9586 \ + --hash=sha256:640ccca4d0a6fcc6590f005ecd7b16c3d8f5d52174e4854f96b16f34c39d6cb7 \ + --hash=sha256:6dbd51c3db300ce9d3171f4106da18fe49e7045232630fe3d4c6e37cb2b39ab9 \ + --hash=sha256:71a904da8c9c02aee581f4452a5a988c3003207cb8033db426f29e5b2c0b7aea \ + --hash=sha256:8021dee64899f993f4b5cca323aae65aabc01a546ed44356a0965e29d7893c94 \ + --hash=sha256:8b8d551f1bd60b3e1c59ff55b9e8d74607a5308f66e2916948cafd13480b44a3 \ + --hash=sha256:93f9f720081d97acee38a411e861d4ce84cbc8ea5319bc1f8e38c972c47af49f \ + --hash=sha256:96f0c79a70642dfdf7e6a018ebcbea7ea5205e27d8e019cad442d2acfc9af267 \ + --hash=sha256:9966337353e436e6ba652814b0a957a517feb492a98b8f9d3b6ba76d22301dcc \ + --hash=sha256:a34ba9e39f8269fd66ab4f7a802794ffea6d6ac500568ec05b327a862c21ce23 \ + --hash=sha256:a49f85f0a099a5755d0a2cc6fc337e3cb945ad6390ec892332c691ab0a045882 \ + --hash=sha256:a795829dc522227265d72b25d6ee6f6d41eb2105c15912c230097c8f5bfdbcdc \ + --hash=sha256:a89ca4105f8099de349d139d1090bad387fe2b208b717b288699ca26f179acbe \ + --hash=sha256:ac95101736239260189f426b1e361dc1b704513963357dc474beb0f39f5b7759 \ + --hash=sha256:ae87ab669431f611c56e581679db33b9a467f87d7bf197ac384e71e4956b4456 \ + --hash=sha256:b091dcfee169ad8de21b61eb2c3a75f9f0f859f851f64fdaf9320759a3244239 \ + --hash=sha256:b511c6009d50d5c0dd0bab85ed25bc8ad6b6f5611de3a63a59786207e82824bb \ + --hash=sha256:b79dc2b2e313565416c1e62807c7c25c67a6ff0a0f8d83a318df464555b65948 \ + --hash=sha256:bca14dfcfd9aae06d7d8d7e105539bd77d39d06caaae57a1ce945670bae744e0 \ + --hash=sha256:c835c30f3af5c63a80917b72115e1defb83de99c73bc727bddd979a3b449e183 \ + --hash=sha256:ccd721f1d4fc42b541b633d6e339018a08dd0290dc67269df79552843a06ca92 \ + --hash=sha256:d6c2b1d78ceceb6741d703508cd0e9197b34f6bf6864dab30f940f8886e04ade \ + --hash=sha256:d6ec4ae13760ceda023b2e5ef1f9bc0b21e4b0830458db143794a117fdbdc044 \ + --hash=sha256:d8b623fc429a38a881ab2d9a56ef30e8ea20c72a891c193f5ebbddc016e083ee \ + --hash=sha256:ea9753d64cba6f226947c318a923dadaf1e21cd8db02f71652405263daa1f033 \ + --hash=sha256:ebbceefbffae118ab954d3cd6bf718f5790db66152f95202ebc231d58ad4e2c2 \ + --hash=sha256:ecb6e7c45f9cd199c10ec35262b53b2247fb9a408803ed00ee5bb2b54aa626f5 \ + --hash=sha256:ef9326c64349e2d718373415814e754183057ebc092261387a2c2f732d9172b2 \ + --hash=sha256:f93a9d8804f4cec9da6c26c8cfae2c777028b4fdd9f49de0302e26e00bb86504 \ + --hash=sha256:faf08b0341828f6a29b8f7dd94d5cf8cc7c39bfc3e67b78514c54b494b66915a # via black requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 - # via -r requirements.in + # via -r requirements/requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb # via - # -r dev-requirements.in - # -r requirements.in + # -r requirements/dev-requirements.in + # -r requirements/requirements.in # furl # orderedmultidict # vcrpy @@ -312,9 +304,9 @@ toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via mypy -tomli==1.2.0 \ - --hash=sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a \ - --hash=sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2 +tomli==1.2.1 \ + --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ + --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 # via # black # pep517 @@ -352,14 +344,14 @@ typed-ast==1.4.3 \ # via # black # mypy -types-pyyaml==5.4.3 \ - --hash=sha256:2e7b81b2b7af751634425107b986086c6ba7cb61270a43a5c290c58be8cdbc3a \ - --hash=sha256:bca83cbfc0be48600a8abf1e3d87fb762a91e6d35d724029a3321dd2dce2ceb1 - # via -r dev-requirements.in -types-requests==2.25.1 \ - --hash=sha256:2d514ee172088a8fc0d554537d6424bd261c18e63195cfe47c410df0de0ed96f \ - --hash=sha256:6e9534281fe5d06ba8116807a8de930b90b6f92dff179f8cbfa2dfdd3bd2c465 - # via -r dev-requirements.in +types-pyyaml==5.4.6 \ + --hash=sha256:745dcb4b1522423026bcc83abb9925fba747f1e8602d902f71a4058f9e7fb662 \ + --hash=sha256:96f8d3d96aa1a18a465e8f6a220e02cff2f52632314845a364ecbacb0aea6e30 + # via -r requirements/dev-requirements.in +types-requests==2.25.6 \ + --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ + --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee + # via -r requirements/dev-requirements.in typing-extensions==3.10.0.0 \ --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ @@ -369,28 +361,28 @@ typing-extensions==3.10.0.0 \ # importlib-metadata # mypy # yarl -urllib3==1.25.11 \ - --hash=sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2 \ - --hash=sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e +urllib3==1.25.10 \ + --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ + --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 # via - # -r requirements.in + # -r requirements/requirements.in # requests vcrpy==4.1.1 \ --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in werkzeug==0.16.0 \ --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 - # via -r requirements.in -wheel==0.36.2 \ - --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ - --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e + # via -r requirements/requirements.in +wheel==0.37.0 \ + --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ + --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad # via pip-tools wrapt==1.12.1 \ --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # vcrpy yarl==1.6.3 \ --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ @@ -431,7 +423,7 @@ yarl==1.6.3 \ --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # vcrpy zipp==3.5.0 \ --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ @@ -441,9 +433,9 @@ zipp==3.5.0 \ # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==21.2.1 \ - --hash=sha256:303a82aaa24cdc01f7ebbd1afc7d1b871a4aa0a88bb5bedef1fa86a3ee44ca0a \ - --hash=sha256:da0ac9d9032d1d7bac69e9e301778f77b8b6626b85203f99edd2b545434d90a7 +pip==21.2.4 \ + --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ + --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 # via pip-tools setuptools==57.4.0 \ --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ From 8c32be2798afde7b2c75689c5e814dacefd16dd2 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 15:57:02 -0700 Subject: [PATCH 474/751] update manifest to include requirements dir --- MANIFEST.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 9596bbc0a..17086b81b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,8 +1,8 @@ include LICENSE include README.md include changelog.md -include build-requirements.txt -include requirements.txt +include requirements/build-requirements.txt +include requirements/requirements.txt include securedrop-log* include securedrop-redis-log include securedrop.Log From f3c876cc4b38104a3c8a36eb4e5e88207d252d5f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 15:58:18 -0700 Subject: [PATCH 475/751] include requirements dir Signed-off-by: Allie Crevier --- MANIFEST.in | 4 ++-- Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index b024c622c..1c69ebe30 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,7 +4,7 @@ include securedrop_proxy/VERSION include changelog.md include config-example.yaml include qubes/securedrop.Proxy -include build-requirements.txt -include requirements.txt +include requirements/build-requirements.txt +include requirements/requirements.txt include securedrop_proxy/*.py include setup.py diff --git a/Makefile b/Makefile index 20f7e3fb5..7b5bcd5de 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ all: help venv: python3 -m venv .venv ## Provision a Python 3 virtualenv for **development** .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r "dev-requirements.txt" + .venv/bin/pip install --require-hashes -r "requirements/dev-requirements.txt" .PHONY: bandit bandit: ## Run bandit with medium level excluding test-related folders From 0b3b6624187ed5526c45d0a1e41be9e50d22f37f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 25 Aug 2021 16:31:11 -0700 Subject: [PATCH 476/751] update requests and urllib3 --- dev-requirements.txt | 18 +++++++++--------- requirements.in | 4 ++-- requirements.txt | 18 +++++++++--------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 6be7e5c14..8f5a92508 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -20,9 +20,9 @@ certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via requests -chardet==3.0.4 \ - --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +charset-normalizer==2.0.4 \ + --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ + --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 # via requests click==8.0.1 \ --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ @@ -312,9 +312,9 @@ regex==2021.8.3 \ --hash=sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c \ --hash=sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6 # via black -requests==2.22.0 \ - --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 +requests==2.26.0 \ + --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ + --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via -r requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -380,9 +380,9 @@ typing-extensions==3.10.0.0 \ # importlib-metadata # mypy # yarl -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 +urllib3==1.26.6 \ + --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ + --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via # -r requirements.in # requests diff --git a/requirements.in b/requirements.in index 3ae4b02c6..bfa0149ed 100644 --- a/requirements.in +++ b/requirements.in @@ -1,2 +1,2 @@ -requests==2.22.0 -urllib3==1.25.10 +requests>=2.26.0 +urllib3>=1.26.5 diff --git a/requirements.txt b/requirements.txt index 09e4e2085..c418809d7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,21 +8,21 @@ certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via requests -chardet==3.0.4 \ - --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +charset-normalizer==2.0.4 \ + --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ + --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 # via requests idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c # via requests -requests==2.22.0 \ - --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 +requests==2.26.0 \ + --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ + --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via -r requirements.in -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 +urllib3==1.26.6 \ + --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ + --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via # -r requirements.in # requests From 867974d5062f9a05076fa4d634504fd75414967f Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 27 Aug 2021 11:58:43 -0700 Subject: [PATCH 477/751] update dev-only dependencies and sync with prod Signed-off-by: Allie Crevier --- Makefile | 31 ++++++++++++------- .../dev-requirements.in | 0 .../dev-requirements.txt | 0 .../requirements.in | 0 .../requirements.txt | 6 ++-- 5 files changed, 23 insertions(+), 14 deletions(-) rename dev-requirements.in => requirements/dev-requirements.in (100%) rename dev-requirements.txt => requirements/dev-requirements.txt (100%) rename requirements.in => requirements/requirements.in (100%) rename requirements.txt => requirements/requirements.txt (85%) diff --git a/Makefile b/Makefile index 4d4f3d17d..322bd6151 100644 --- a/Makefile +++ b/Makefile @@ -4,10 +4,8 @@ OPEN=$(word 1, $(wildcard /usr/bin/xdg-open /usr/bin/open)) .PHONY: venv venv: ## Provision a Python 3 virtualenv for **development** python3 -m venv .venv - ## Good idea to upgrade pip and wheel when you create a new dev virtual environment. - ## Or you could use the virtualenv command instead. .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r dev-requirements.txt + .venv/bin/pip install --require-hashes -r requirements/dev-requirements.txt .PHONY: black black: ## Format Python source code with black @@ -51,16 +49,27 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities || exit 1; \ done -.PHONY: update-pip-requirements -update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --generate-hashes --output-file dev-requirements.txt requirements.in dev-requirements.in - pip-compile --generate-hashes --output-file requirements.txt requirements.in +.PHONY: sync-requirements +sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies + rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt + pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in +.PHONY: requirements +requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in + pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements -.PHONY: upgrade-pip -upgrade-pip: ## Upgrade one single package via pip-compile - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file dev-requirements.txt requirements.in dev-requirements.in - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements.txt requirements.in +.PHONY: update-dependency +update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements + +.PHONY: update-dev-only-dependencies +update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in + $(MAKE) sync-requirements + @while read line; do \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ + done < 'requirements/dev-requirements.in' .PHONY: open-coverage-report open-coverage-report: ## Open the coverage report in your browser diff --git a/dev-requirements.in b/requirements/dev-requirements.in similarity index 100% rename from dev-requirements.in rename to requirements/dev-requirements.in diff --git a/dev-requirements.txt b/requirements/dev-requirements.txt similarity index 100% rename from dev-requirements.txt rename to requirements/dev-requirements.txt diff --git a/requirements.in b/requirements/requirements.in similarity index 100% rename from requirements.in rename to requirements/requirements.in diff --git a/requirements.txt b/requirements/requirements.txt similarity index 85% rename from requirements.txt rename to requirements/requirements.txt index c418809d7..32b1c8bc1 100644 --- a/requirements.txt +++ b/requirements/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.7 # To update, run: # -# pip-compile --generate-hashes --output-file=requirements.txt requirements.in +# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ @@ -19,10 +19,10 @@ idna==2.8 \ requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 - # via -r requirements.in + # via -r requirements/requirements.in urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via - # -r requirements.in + # -r requirements/requirements.in # requests From 4a6a4cbdf83f33979a757e1e629a495621264185 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 27 Aug 2021 12:26:52 -0700 Subject: [PATCH 478/751] add options to update dev-only dependencies and sync with prod Signed-off-by: Allie Crevier --- .circleci/config.yml | 4 +- Makefile | 34 ++++++++++--- ...st-requirements.in => dev-requirements.in} | 0 ...-requirements.txt => dev-requirements.txt} | 48 +++++++++---------- requirements/requirements.in | 0 requirements/requirements.txt | 6 +++ 6 files changed, 60 insertions(+), 32 deletions(-) rename requirements/{test-requirements.in => dev-requirements.in} (100%) rename requirements/{test-requirements.txt => dev-requirements.txt} (91%) create mode 100644 requirements/requirements.in diff --git a/.circleci/config.yml b/.circleci/config.yml index 1d00acdbb..49f04010e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,7 +17,7 @@ common-steps: command: | virtualenv .venv source .venv/bin/activate - pip install --require-hashes -r requirements/test-requirements.txt + pip install --require-hashes -r requirements/dev-requirements.txt make test - &install_packaging_dependencies @@ -69,7 +69,7 @@ jobs: command: | virtualenv .venv source .venv/bin/activate - pip install --require-hashes -r requirements/test-requirements.txt + pip install --require-hashes -r requirements/dev-requirements.txt make lint - run: name: Check Python dependencies for CVEs diff --git a/Makefile b/Makefile index fd00bb395..62f1b7101 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ +.PHONY: all +all: help + .PHONY: venv -venv: ## Provision a Python 3 virtualenv for development. +venv: ## Provision a Python 3 virtualenv for **development** python3 -m venv .venv - .venv/bin/pip install --require-hashes -r "requirements/test-requirements.txt" + .venv/bin/pip install --upgrade pip wheel + .venv/bin/pip install --require-hashes -r requirements/dev-requirements.txt .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities @@ -13,9 +17,27 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities || exit 1; \ done -.PHONY: update-pip-requirements -update-pip-requirements: ## Updates all Python requirements files via pip-compile. - pip-compile --allow-unsafe --generate-hashes --output-file requirements/test-requirements.txt requirements/test-requirements.in +.PHONY: sync-requirements +sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies + rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt + pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in + +.PHONY: requirements +requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in + pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements + +.PHONY: update-dependency +update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in + pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in + $(MAKE) sync-requirements + +.PHONY: update-dev-only-dependencies +update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in + $(MAKE) sync-requirements + @while read line; do \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ + done < 'requirements/dev-requirements.in' .PHONY: check check: lint semgrep test ## Run linter and tests @@ -54,7 +76,7 @@ semgrep-local: .PHONY: help help: ## Print this message and exit. @printf "Makefile for developing and testing the SecureDrop export code.\n" - @printf "Subcommands:\n\n" + @printf "Subcommands:\n" @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ | sort \ | column -s ':' -t diff --git a/requirements/test-requirements.in b/requirements/dev-requirements.in similarity index 100% rename from requirements/test-requirements.in rename to requirements/dev-requirements.in diff --git a/requirements/test-requirements.txt b/requirements/dev-requirements.txt similarity index 91% rename from requirements/test-requirements.txt rename to requirements/dev-requirements.txt index 9ff54c558..6ecd42395 100644 --- a/requirements/test-requirements.txt +++ b/requirements/dev-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.7 # To update, run: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/test-requirements.txt requirements/test-requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # attrs==21.2.0 \ --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ @@ -88,14 +88,14 @@ coverage==5.5 \ flake8==3.9.2 \ --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 - # via -r requirements/test-requirements.in + # via -r requirements/dev-requirements.in idna==3.2 \ --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via requests -importlib-metadata==4.6.3 \ - --hash=sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9 \ - --hash=sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b +importlib-metadata==4.7.1 \ + --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \ + --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b # via # click # flake8 @@ -131,7 +131,7 @@ pep517==0.11.0 \ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 - # via -r requirements/test-requirements.in + # via -r requirements/dev-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d @@ -140,7 +140,7 @@ py==1.10.0 \ --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a # via - # -r requirements/test-requirements.in + # -r requirements/dev-requirements.in # pytest pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ @@ -181,24 +181,24 @@ pytest==6.2.4 \ --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \ --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890 # via - # -r requirements/test-requirements.in + # -r requirements/dev-requirements.in # pytest-cov # pytest-mock pytest-cov==2.12.1 \ --hash=sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a \ --hash=sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7 - # via -r requirements/test-requirements.in + # via -r requirements/dev-requirements.in pytest-mock==3.6.1 \ --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 - # via -r requirements/test-requirements.in + # via -r requirements/dev-requirements.in requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via semgrep -ruamel.yaml==0.17.10 \ - --hash=sha256:106bc8d6dc6a0ff7c9196a47570432036f41d556b779c6b4e618085f57e39e67 \ - --hash=sha256:ffb9b703853e9e8b7861606dfdab1026cf02505bade0653d1880f4b2db47f815 +ruamel.yaml==0.17.14 \ + --hash=sha256:4185fcfa9e037fea9ffd0bb6172354a03ec98c21e462355d72e068c74e493512 \ + --hash=sha256:b59c548ba6a2a99a97a842db2321c5adf28470d1decb04bdd82ce9535936a2fa # via semgrep ruamel.yaml.clib==0.2.6 \ --hash=sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd \ @@ -223,11 +223,11 @@ ruamel.yaml.clib==0.2.6 \ --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c # via ruamel.yaml -semgrep==0.61.0 \ - --hash=sha256:04256932d2b234a034948d39bd04349cdc878e2868b91d2039038dd5451248ba \ - --hash=sha256:7dc56bf0ecfd66c86e1e130103d3088b82ff2b5a6c30a204314a7a1760790420 \ - --hash=sha256:caa74cce5f61fd18049ac8ac7a4ec2a5e604beb9232d7e26a171b7a2aeeb9d5c - # via -r requirements/test-requirements.in +semgrep==0.63.0 \ + --hash=sha256:777322ce3bbe07a43cc5e8d9ad23691441d3af9785e942134ceb5bdad1eb4902 \ + --hash=sha256:96ca4e2f4439f29f84199aae8a3094480bb624b2466998aa06bd556deff849db \ + --hash=sha256:9fc462d70210a4edfce03d8de3f9bf9f046c58bbbe9a12db6155f756404ef6f5 + # via -r requirements/dev-requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -242,9 +242,9 @@ tomli==1.2.1 \ --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 # via pep517 -tqdm==4.62.0 \ - --hash=sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6 \ - --hash=sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340 +tqdm==4.62.2 \ + --hash=sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588 \ + --hash=sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5 # via semgrep typing-extensions==3.10.0.0 \ --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ @@ -271,9 +271,9 @@ zipp==3.5.0 \ # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==21.2.3 \ - --hash=sha256:895df6014c2f02f9d278a8ad6e31cdfd312952b4a93c3068d0556964f4490057 \ - --hash=sha256:91e66f2a2702e7d2dcc092ed8c5ebe923e69b9997ea28ba25823943bcd3bf820 +pip==21.2.4 \ + --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ + --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 # via pip-tools setuptools==57.4.0 \ --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ diff --git a/requirements/requirements.in b/requirements/requirements.in new file mode 100644 index 000000000..e69de29bb diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e69de29bb..b78349c53 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -0,0 +1,6 @@ +# +# This file is autogenerated by pip-compile with python 3.7 +# To update, run: +# +# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in +# From 51b0d24c20800e03aabd457c562a7ec2e354f7d5 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 27 Aug 2021 12:56:41 -0700 Subject: [PATCH 479/751] update to latest localwheel dependencies Signed-off-by: Allie Crevier --- requirements/build-requirements.txt | 10 +- requirements/dev-requirements.txt | 136 +++++++++++++++------------- requirements/requirements.in | 10 +- requirements/requirements.txt | 40 ++++---- 4 files changed, 106 insertions(+), 90 deletions(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 824f7b9bf..7b00d5770 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -1,10 +1,10 @@ -certifi==2018.10.15 --hash=sha256:2d5538b9d89b3a9cb423b8f08417c657856cab733d560067e864157f71b1c5aa -chardet==3.0.4 --hash=sha256:e5cf39014befb85add77118fdc946f0a3387df7840235ba5d20fd6e3a672410a +certifi==2021.5.30 --hash=sha256:2dee87f82eab7a047280038bacb5bdbc4ee308ae39522ccd9da2ceefe7b6f84e +charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc -idna==2.7 --hash=sha256:69bbcd9c42b0add994610a68202532e9b327992b61344cd76e743ee592725f50 +idna==2.8 --hash=sha256:2ac4f96345f5f4fc6ebe59f6254d7bfdb943251ccd3ee7e40fe53739b7c6ef92 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 -requests==2.22.0 --hash=sha256:83ddbb326afd5524e7fbca582fd9673103652ea3b0c6601ac5ba1a4501f077c9 +requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 -urllib3==1.25.10 --hash=sha256:c78fdeffd1a01640ea99d35851539a4bc91e46a672989c4d96663e3808121389 +urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 werkzeug==0.16.0 --hash=sha256:bd05301a84a9bc3b33f178e53446181879744b74f098ed35850ba21125379be1 diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index dc6989228..701f3d1db 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -12,15 +12,15 @@ black==21.7b0 \ --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 # via -r requirements/dev-requirements.in -certifi==2018.10.15 \ - --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ - --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a +certifi==2021.5.30 \ + --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ + --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via # -r requirements/requirements.in # requests -chardet==3.0.4 \ - --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +charset-normalizer==2.0.4 \ + --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ + --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 # via # -r requirements/requirements.in # requests @@ -92,16 +92,16 @@ furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec # via -r requirements/requirements.in -idna==2.7 \ - --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ - --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 +idna==2.8 \ + --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ + --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c # via # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.6.4 \ - --hash=sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f \ - --hash=sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5 +importlib-metadata==4.7.1 \ + --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \ + --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b # via # click # flake8 @@ -232,64 +232,72 @@ pyyaml==5.4.1 \ --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ + --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ + --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ + --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 # via # -r requirements/requirements.in # vcrpy -regex==2021.8.21 \ - --hash=sha256:03840a07a402576b8e3a6261f17eb88abd653ad4e18ec46ef10c9a63f8c99ebd \ - --hash=sha256:06ba444bbf7ede3890a912bd4904bb65bf0da8f0d8808b90545481362c978642 \ - --hash=sha256:1f9974826aeeda32a76648fc677e3125ade379869a84aa964b683984a2dea9f1 \ - --hash=sha256:330836ad89ff0be756b58758878409f591d4737b6a8cef26a162e2a4961c3321 \ - --hash=sha256:38600fd58c2996829480de7d034fb2d3a0307110e44dae80b6b4f9b3d2eea529 \ - --hash=sha256:3a195e26df1fbb40ebee75865f9b64ba692a5824ecb91c078cc665b01f7a9a36 \ - --hash=sha256:41acdd6d64cd56f857e271009966c2ffcbd07ec9149ca91f71088574eaa4278a \ - --hash=sha256:45f97ade892ace20252e5ccecdd7515c7df5feeb42c3d2a8b8c55920c3551c30 \ - --hash=sha256:4b0c211c55d4aac4309c3209833c803fada3fc21cdf7b74abedda42a0c9dc3ce \ - --hash=sha256:5d5209c3ba25864b1a57461526ebde31483db295fc6195fdfc4f8355e10f7376 \ - --hash=sha256:615fb5a524cffc91ab4490b69e10ae76c1ccbfa3383ea2fad72e54a85c7d47dd \ - --hash=sha256:61e734c2bcb3742c3f454dfa930ea60ea08f56fd1a0eb52d8cb189a2f6be9586 \ - --hash=sha256:640ccca4d0a6fcc6590f005ecd7b16c3d8f5d52174e4854f96b16f34c39d6cb7 \ - --hash=sha256:6dbd51c3db300ce9d3171f4106da18fe49e7045232630fe3d4c6e37cb2b39ab9 \ - --hash=sha256:71a904da8c9c02aee581f4452a5a988c3003207cb8033db426f29e5b2c0b7aea \ - --hash=sha256:8021dee64899f993f4b5cca323aae65aabc01a546ed44356a0965e29d7893c94 \ - --hash=sha256:8b8d551f1bd60b3e1c59ff55b9e8d74607a5308f66e2916948cafd13480b44a3 \ - --hash=sha256:93f9f720081d97acee38a411e861d4ce84cbc8ea5319bc1f8e38c972c47af49f \ - --hash=sha256:96f0c79a70642dfdf7e6a018ebcbea7ea5205e27d8e019cad442d2acfc9af267 \ - --hash=sha256:9966337353e436e6ba652814b0a957a517feb492a98b8f9d3b6ba76d22301dcc \ - --hash=sha256:a34ba9e39f8269fd66ab4f7a802794ffea6d6ac500568ec05b327a862c21ce23 \ - --hash=sha256:a49f85f0a099a5755d0a2cc6fc337e3cb945ad6390ec892332c691ab0a045882 \ - --hash=sha256:a795829dc522227265d72b25d6ee6f6d41eb2105c15912c230097c8f5bfdbcdc \ - --hash=sha256:a89ca4105f8099de349d139d1090bad387fe2b208b717b288699ca26f179acbe \ - --hash=sha256:ac95101736239260189f426b1e361dc1b704513963357dc474beb0f39f5b7759 \ - --hash=sha256:ae87ab669431f611c56e581679db33b9a467f87d7bf197ac384e71e4956b4456 \ - --hash=sha256:b091dcfee169ad8de21b61eb2c3a75f9f0f859f851f64fdaf9320759a3244239 \ - --hash=sha256:b511c6009d50d5c0dd0bab85ed25bc8ad6b6f5611de3a63a59786207e82824bb \ - --hash=sha256:b79dc2b2e313565416c1e62807c7c25c67a6ff0a0f8d83a318df464555b65948 \ - --hash=sha256:bca14dfcfd9aae06d7d8d7e105539bd77d39d06caaae57a1ce945670bae744e0 \ - --hash=sha256:c835c30f3af5c63a80917b72115e1defb83de99c73bc727bddd979a3b449e183 \ - --hash=sha256:ccd721f1d4fc42b541b633d6e339018a08dd0290dc67269df79552843a06ca92 \ - --hash=sha256:d6c2b1d78ceceb6741d703508cd0e9197b34f6bf6864dab30f940f8886e04ade \ - --hash=sha256:d6ec4ae13760ceda023b2e5ef1f9bc0b21e4b0830458db143794a117fdbdc044 \ - --hash=sha256:d8b623fc429a38a881ab2d9a56ef30e8ea20c72a891c193f5ebbddc016e083ee \ - --hash=sha256:ea9753d64cba6f226947c318a923dadaf1e21cd8db02f71652405263daa1f033 \ - --hash=sha256:ebbceefbffae118ab954d3cd6bf718f5790db66152f95202ebc231d58ad4e2c2 \ - --hash=sha256:ecb6e7c45f9cd199c10ec35262b53b2247fb9a408803ed00ee5bb2b54aa626f5 \ - --hash=sha256:ef9326c64349e2d718373415814e754183057ebc092261387a2c2f732d9172b2 \ - --hash=sha256:f93a9d8804f4cec9da6c26c8cfae2c777028b4fdd9f49de0302e26e00bb86504 \ - --hash=sha256:faf08b0341828f6a29b8f7dd94d5cf8cc7c39bfc3e67b78514c54b494b66915a +regex==2021.8.28 \ + --hash=sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468 \ + --hash=sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354 \ + --hash=sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308 \ + --hash=sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d \ + --hash=sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc \ + --hash=sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8 \ + --hash=sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797 \ + --hash=sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2 \ + --hash=sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13 \ + --hash=sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d \ + --hash=sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a \ + --hash=sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0 \ + --hash=sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73 \ + --hash=sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1 \ + --hash=sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed \ + --hash=sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a \ + --hash=sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b \ + --hash=sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f \ + --hash=sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256 \ + --hash=sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb \ + --hash=sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2 \ + --hash=sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983 \ + --hash=sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb \ + --hash=sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645 \ + --hash=sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8 \ + --hash=sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a \ + --hash=sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906 \ + --hash=sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f \ + --hash=sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c \ + --hash=sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892 \ + --hash=sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0 \ + --hash=sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e \ + --hash=sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e \ + --hash=sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed \ + --hash=sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c \ + --hash=sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374 \ + --hash=sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd \ + --hash=sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791 \ + --hash=sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a \ + --hash=sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1 \ + --hash=sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759 # via black -requests==2.22.0 \ - --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 +requests==2.26.0 \ + --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ + --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via -r requirements/requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ @@ -344,9 +352,9 @@ typed-ast==1.4.3 \ # via # black # mypy -types-pyyaml==5.4.6 \ - --hash=sha256:745dcb4b1522423026bcc83abb9925fba747f1e8602d902f71a4058f9e7fb662 \ - --hash=sha256:96f8d3d96aa1a18a465e8f6a220e02cff2f52632314845a364ecbacb0aea6e30 +types-pyyaml==5.4.8 \ + --hash=sha256:e084cfc878c8c8b1d4e89011ae5d65ea962fc5745c3d08b931df2aaaa665de96 \ + --hash=sha256:f00ad122a78a7d41b0ad4e3fa481751c2b9bc3f34b8f71ea35232211057dd50f # via -r requirements/dev-requirements.in types-requests==2.25.6 \ --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ @@ -361,9 +369,9 @@ typing-extensions==3.10.0.0 \ # importlib-metadata # mypy # yarl -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 +urllib3==1.26.6 \ + --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ + --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via # -r requirements/requirements.in # requests diff --git a/requirements/requirements.in b/requirements/requirements.in index 8aa528ea4..bf59b9850 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,10 +1,10 @@ -certifi==2018.10.15 -chardet==3.0.4 +certifi>=2021.5.30 +charset-normalizer>=2.0.4 furl==2.0.0 -idna==2.7 +idna>=2.7 orderedmultidict==1.0 PyYAML==5.4.1 six==1.11.0 -requests==2.22.0 -urllib3>=1.25.10 +requests>=2.26.0 +urllib3>=1.26.5 Werkzeug==0.16.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 9e391e742..5f52ef94d 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,15 +4,15 @@ # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # -certifi==2018.10.15 \ - --hash=sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c \ - --hash=sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a +certifi==2021.5.30 \ + --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ + --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 # via # -r requirements/requirements.in # requests -chardet==3.0.4 \ - --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ - --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 +charset-normalizer==2.0.4 \ + --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ + --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 # via # -r requirements/requirements.in # requests @@ -20,9 +20,9 @@ furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec # via -r requirements/requirements.in -idna==2.7 \ - --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ - --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 +idna==2.8 \ + --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ + --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c # via # -r requirements/requirements.in # requests @@ -45,19 +45,27 @@ pyyaml==5.4.1 \ --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ + --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ + --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ + --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 # via -r requirements/requirements.in -requests==2.22.0 \ - --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ - --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 +requests==2.26.0 \ + --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ + --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via -r requirements/requirements.in six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ @@ -66,9 +74,9 @@ six==1.11.0 \ # -r requirements/requirements.in # furl # orderedmultidict -urllib3==1.25.10 \ - --hash=sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a \ - --hash=sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461 +urllib3==1.26.6 \ + --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ + --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via # -r requirements/requirements.in # requests From 94f3e175fbae915a084f5d9008440858bf472300 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 27 Aug 2021 12:00:57 -0700 Subject: [PATCH 480/751] Update dev requirements and prod .in file to match client spec Signed-off-by: Allie Crevier --- requirements/dev-requirements.txt | 156 +++++++++++++++++------------- requirements/requirements.in | 5 + requirements/requirements.txt | 12 ++- 3 files changed, 101 insertions(+), 72 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 8f5a92508..a4ee4aa38 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.7 # To update, run: # -# pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # appdirs==1.4.4 \ --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ @@ -15,15 +15,19 @@ attrs==21.2.0 \ black==21.7b0 \ --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 - # via requests + # via + # -r requirements/requirements.in + # requests charset-normalizer==2.0.4 \ --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via requests + # via + # -r requirements/requirements.in + # requests click==8.0.1 \ --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 @@ -84,21 +88,22 @@ coverage==5.5 \ --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # pytest-cov flake8==3.9.2 \ --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c # via + # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.6.3 \ - --hash=sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9 \ - --hash=sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b +importlib-metadata==4.7.1 \ + --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \ + --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b # via # click # flake8 @@ -112,7 +117,7 @@ iniconfig==1.1.1 \ isort==5.9.3 \ --hash=sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899 \ --hash=sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f @@ -180,7 +185,7 @@ mypy==0.910 \ --hash=sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504 \ --hash=sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921 \ --hash=sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 @@ -202,7 +207,7 @@ pep517==0.11.0 \ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in pluggy==0.13.1 \ --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d @@ -211,7 +216,7 @@ py==1.10.0 \ --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # pytest pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ @@ -224,7 +229,7 @@ pyflakes==2.3.1 \ pyotp==2.6.0 \ --hash=sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28 \ --hash=sha256:d28ddfd40e0c1b6a6b9da961c7d47a10261fb58f378cb00f05ce88b26df9c432 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in pyparsing==2.4.7 \ --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b @@ -233,17 +238,17 @@ pytest==6.2.4 \ --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \ --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # pytest-cov # pytest-mock pytest-cov==2.12.1 \ --hash=sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a \ --hash=sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in pytest-mock==3.6.1 \ --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 - # via -r dev-requirements.in + # via -r requirements/dev-requirements.in pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -275,47 +280,55 @@ pyyaml==5.4.1 \ --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 # via - # -r dev-requirements.in + # -r requirements/dev-requirements.in # vcrpy -regex==2021.8.3 \ - --hash=sha256:026beb631097a4a3def7299aa5825e05e057de3c6d72b139c37813bfa351274b \ - --hash=sha256:14caacd1853e40103f59571f169704367e79fb78fac3d6d09ac84d9197cadd16 \ - --hash=sha256:16d9eaa8c7e91537516c20da37db975f09ac2e7772a0694b245076c6d68f85da \ - --hash=sha256:18fdc51458abc0a974822333bd3a932d4e06ba2a3243e9a1da305668bd62ec6d \ - --hash=sha256:28e8af338240b6f39713a34e337c3813047896ace09d51593d6907c66c0708ba \ - --hash=sha256:3835de96524a7b6869a6c710b26c90e94558c31006e96ca3cf6af6751b27dca1 \ - --hash=sha256:3905c86cc4ab6d71635d6419a6f8d972cab7c634539bba6053c47354fd04452c \ - --hash=sha256:3c09d88a07483231119f5017904db8f60ad67906efac3f1baa31b9b7f7cca281 \ - --hash=sha256:4551728b767f35f86b8e5ec19a363df87450c7376d7419c3cac5b9ceb4bce576 \ - --hash=sha256:459bbe342c5b2dec5c5223e7c363f291558bc27982ef39ffd6569e8c082bdc83 \ - --hash=sha256:4f421e3cdd3a273bace013751c345f4ebeef08f05e8c10757533ada360b51a39 \ - --hash=sha256:577737ec3d4c195c4aef01b757905779a9e9aee608fa1cf0aec16b5576c893d3 \ - --hash=sha256:57fece29f7cc55d882fe282d9de52f2f522bb85290555b49394102f3621751ee \ - --hash=sha256:7976d410e42be9ae7458c1816a416218364e06e162b82e42f7060737e711d9ce \ - --hash=sha256:85f568892422a0e96235eb8ea6c5a41c8ccbf55576a2260c0160800dbd7c4f20 \ - --hash=sha256:8764a78c5464ac6bde91a8c87dd718c27c1cabb7ed2b4beaf36d3e8e390567f9 \ - --hash=sha256:8935937dad2c9b369c3d932b0edbc52a62647c2afb2fafc0c280f14a8bf56a6a \ - --hash=sha256:8fe58d9f6e3d1abf690174fd75800fda9bdc23d2a287e77758dc0e8567e38ce6 \ - --hash=sha256:937b20955806381e08e54bd9d71f83276d1f883264808521b70b33d98e4dec5d \ - --hash=sha256:9569da9e78f0947b249370cb8fadf1015a193c359e7e442ac9ecc585d937f08d \ - --hash=sha256:a3b73390511edd2db2d34ff09aa0b2c08be974c71b4c0505b4a048d5dc128c2b \ - --hash=sha256:a4eddbe2a715b2dd3849afbdeacf1cc283160b24e09baf64fa5675f51940419d \ - --hash=sha256:a5c6dbe09aff091adfa8c7cfc1a0e83fdb8021ddb2c183512775a14f1435fe16 \ - --hash=sha256:b63e3571b24a7959017573b6455e05b675050bbbea69408f35f3cb984ec54363 \ - --hash=sha256:bb350eb1060591d8e89d6bac4713d41006cd4d479f5e11db334a48ff8999512f \ - --hash=sha256:bf6d987edd4a44dd2fa2723fca2790f9442ae4de2c8438e53fcb1befdf5d823a \ - --hash=sha256:bfa6a679410b394600eafd16336b2ce8de43e9b13f7fb9247d84ef5ad2b45e91 \ - --hash=sha256:c856ec9b42e5af4fe2d8e75970fcc3a2c15925cbcc6e7a9bcb44583b10b95e80 \ - --hash=sha256:cea56288eeda8b7511d507bbe7790d89ae7049daa5f51ae31a35ae3c05408531 \ - --hash=sha256:ea212df6e5d3f60341aef46401d32fcfded85593af1d82b8b4a7a68cd67fdd6b \ - --hash=sha256:f35567470ee6dbfb946f069ed5f5615b40edcbb5f1e6e1d3d2b114468d505fc6 \ - --hash=sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c \ - --hash=sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6 +regex==2021.8.28 \ + --hash=sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468 \ + --hash=sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354 \ + --hash=sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308 \ + --hash=sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d \ + --hash=sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc \ + --hash=sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8 \ + --hash=sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797 \ + --hash=sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2 \ + --hash=sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13 \ + --hash=sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d \ + --hash=sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a \ + --hash=sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0 \ + --hash=sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73 \ + --hash=sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1 \ + --hash=sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed \ + --hash=sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a \ + --hash=sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b \ + --hash=sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f \ + --hash=sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256 \ + --hash=sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb \ + --hash=sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2 \ + --hash=sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983 \ + --hash=sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb \ + --hash=sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645 \ + --hash=sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8 \ + --hash=sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a \ + --hash=sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906 \ + --hash=sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f \ + --hash=sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c \ + --hash=sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892 \ + --hash=sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0 \ + --hash=sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e \ + --hash=sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e \ + --hash=sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed \ + --hash=sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c \ + --hash=sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374 \ + --hash=sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd \ + --hash=sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791 \ + --hash=sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a \ + --hash=sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1 \ + --hash=sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759 # via black requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 - # via -r requirements.in + # via -r requirements/requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -327,9 +340,9 @@ toml==0.10.2 \ # mypy # pytest # pytest-cov -tomli==1.2.0 \ - --hash=sha256:056f0376bf5a6b182c513f9582c1e5b0487265eb6c48842b69aa9ca1cd5f640a \ - --hash=sha256:d60e681734099207a6add7a10326bc2ddd1fdc36c1b0f547d00ef73ac63739c2 +tomli==1.2.1 \ + --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ + --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 # via # black # pep517 @@ -367,10 +380,10 @@ typed-ast==1.4.3 \ # via # black # mypy -types-requests==2.25.2 \ - --hash=sha256:03122b582f5300ec35ac6692f2634207c467e602dc9ba46b5811a9f6ce0b0bc2 \ - --hash=sha256:a4c03c654527957a70002079ca48669b53d82eac4811abf140ea93847b65529b - # via -r dev-requirements.in +types-requests==2.25.6 \ + --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ + --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee + # via -r requirements/dev-requirements.in typing-extensions==3.10.0.0 \ --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ @@ -384,15 +397,15 @@ urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via - # -r requirements.in + # -r requirements/requirements.in # requests vcrpy==4.1.1 \ --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 - # via -r dev-requirements.in -wheel==0.36.2 \ - --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ - --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e + # via -r requirements/dev-requirements.in +wheel==0.37.0 \ + --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ + --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad # via pip-tools wrapt==1.12.1 \ --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 @@ -443,7 +456,12 @@ zipp==3.5.0 \ # importlib-metadata # pep517 -# WARNING: The following packages were not pinned, but pip requires them to be -# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. -# pip -# setuptools +# The following packages are considered to be unsafe in a requirements file: +pip==21.2.4 \ + --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ + --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 + # via pip-tools +setuptools==57.4.0 \ + --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ + --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 + # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in index bfa0149ed..2a5c8b1ed 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,2 +1,7 @@ +# Ensure these match client production dependencies + +certifi>=2021.5.30 +charset-normalizer>=2.0.4 +idna>=2.7 requests>=2.26.0 urllib3>=1.26.5 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 32b1c8bc1..1109e79d8 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -7,15 +7,21 @@ certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 - # via requests + # via + # -r requirements/requirements.in + # requests charset-normalizer==2.0.4 \ --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via requests + # via + # -r requirements/requirements.in + # requests idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c - # via requests + # via + # -r requirements/requirements.in + # requests requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 From 4958b3f8e08e9610e6a62d5627b2864c4178fb68 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 30 Aug 2021 09:54:57 -0700 Subject: [PATCH 481/751] Release securedrop-sdk 0.3.1 --- CHANGELOG.md | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70c57536f..130a2ed19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +0.3.1 +----- + +* Update urllib3 to 1.26.6 to address CVE-2021-33503 (#166) +* Update certifi to 2021.5.30, idna to 2.8, requests to 2.26.0 (#167) + 0.3.0 ----- diff --git a/setup.py b/setup.py index b1bcc6891..006c5c226 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.3.0", + version="0.3.1", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 947857ad5a21b858f66f4179b5225796f39f675d Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 10 Sep 2021 15:31:15 -0700 Subject: [PATCH 482/751] update to idna 3.2 Signed-off-by: Allie Crevier --- requirements/build-requirements.txt | 2 +- requirements/dev-requirements.txt | 46 ++++++++++++++--------------- requirements/requirements.in | 6 ++-- requirements/requirements.txt | 6 ++-- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 7b00d5770..2479943ae 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -1,7 +1,7 @@ certifi==2021.5.30 --hash=sha256:2dee87f82eab7a047280038bacb5bdbc4ee308ae39522ccd9da2ceefe7b6f84e charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc -idna==2.8 --hash=sha256:2ac4f96345f5f4fc6ebe59f6254d7bfdb943251ccd3ee7e40fe53739b7c6ef92 +idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 701f3d1db..558ba47ae 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -4,13 +4,9 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -appdirs==1.4.4 \ - --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ - --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 - # via black -black==21.7b0 \ - --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ - --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 +black==21.8b0 \ + --hash=sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7 \ + --hash=sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2 # via -r requirements/dev-requirements.in certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ @@ -92,16 +88,16 @@ furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec # via -r requirements/requirements.in -idna==2.8 \ - --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ - --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c +idna==3.2 \ + --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ + --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.7.1 \ - --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \ - --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b +importlib-metadata==4.8.1 \ + --hash=sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15 \ + --hash=sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 # via # click # flake8 @@ -207,6 +203,10 @@ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r requirements/dev-requirements.in +platformdirs==2.3.0 \ + --hash=sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f \ + --hash=sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648 + # via black pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef @@ -352,18 +352,18 @@ typed-ast==1.4.3 \ # via # black # mypy -types-pyyaml==5.4.8 \ - --hash=sha256:e084cfc878c8c8b1d4e89011ae5d65ea962fc5745c3d08b931df2aaaa665de96 \ - --hash=sha256:f00ad122a78a7d41b0ad4e3fa481751c2b9bc3f34b8f71ea35232211057dd50f +types-pyyaml==5.4.10 \ + --hash=sha256:1d9e431e9f1f78a65ea957c558535a3b15ad67ea4912bce48a6c1b613dcf81ad \ + --hash=sha256:f1d1357168988e45fa20c65aecb3911462246a84809015dd889ebf8b1db74124 # via -r requirements/dev-requirements.in types-requests==2.25.6 \ --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee # via -r requirements/dev-requirements.in -typing-extensions==3.10.0.0 \ - --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ - --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ - --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 +typing-extensions==3.10.0.2 \ + --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ + --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ + --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 # via # black # importlib-metadata @@ -445,7 +445,7 @@ pip==21.2.4 \ --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 # via pip-tools -setuptools==57.4.0 \ - --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ - --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 +setuptools==58.0.4 \ + --hash=sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770 \ + --hash=sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in index bf59b9850..cede6d809 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -3,8 +3,8 @@ charset-normalizer>=2.0.4 furl==2.0.0 idna>=2.7 orderedmultidict==1.0 -PyYAML==5.4.1 -six==1.11.0 +pyyaml==5.4.1 requests>=2.26.0 +six==1.11.0 urllib3>=1.26.5 -Werkzeug==0.16.0 +werkzeug==0.16.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 5f52ef94d..e24267cbe 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -20,9 +20,9 @@ furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec # via -r requirements/requirements.in -idna==2.8 \ - --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ - --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c +idna==3.2 \ + --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ + --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via # -r requirements/requirements.in # requests From 46f86dd71c74d2c592cb1a9e5b286a3739d696a5 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 10 Sep 2021 15:36:55 -0700 Subject: [PATCH 483/751] update to idna 3.2 and dev deps Signed-off-by: Allie Crevier --- requirements/dev-requirements.txt | 52 +++++++++++++++---------------- requirements/requirements.txt | 6 ++-- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index a4ee4aa38..2a8537a8a 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -4,17 +4,13 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -appdirs==1.4.4 \ - --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ - --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 - # via black attrs==21.2.0 \ --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb # via pytest -black==21.7b0 \ - --hash=sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116 \ - --hash=sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219 +black==21.8b0 \ + --hash=sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7 \ + --hash=sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2 # via -r requirements/dev-requirements.in certifi==2021.5.30 \ --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ @@ -94,16 +90,16 @@ flake8==3.9.2 \ --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 # via -r requirements/dev-requirements.in -idna==2.8 \ - --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ - --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c +idna==3.2 \ + --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ + --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.7.1 \ - --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \ - --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b +importlib-metadata==4.8.1 \ + --hash=sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15 \ + --hash=sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 # via # click # flake8 @@ -208,9 +204,13 @@ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r requirements/dev-requirements.in -pluggy==0.13.1 \ - --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ - --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d +platformdirs==2.3.0 \ + --hash=sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f \ + --hash=sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648 + # via black +pluggy==1.0.0 \ + --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ + --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest py==1.10.0 \ --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ @@ -234,9 +234,9 @@ pyparsing==2.4.7 \ --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b # via packaging -pytest==6.2.4 \ - --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \ - --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890 +pytest==6.2.5 \ + --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \ + --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134 # via # -r requirements/dev-requirements.in # pytest-cov @@ -384,10 +384,10 @@ types-requests==2.25.6 \ --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee # via -r requirements/dev-requirements.in -typing-extensions==3.10.0.0 \ - --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ - --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ - --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 +typing-extensions==3.10.0.2 \ + --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ + --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ + --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 # via # black # importlib-metadata @@ -461,7 +461,7 @@ pip==21.2.4 \ --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 # via pip-tools -setuptools==57.4.0 \ - --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ - --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 +setuptools==58.0.4 \ + --hash=sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770 \ + --hash=sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b # via pip-tools diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 1109e79d8..ecfb3a207 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -16,9 +16,9 @@ charset-normalizer==2.0.4 \ # via # -r requirements/requirements.in # requests -idna==2.8 \ - --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ - --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c +idna==3.2 \ + --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ + --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via # -r requirements/requirements.in # requests From c84c4fdc087733c738c5833fce684d9796431c84 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Fri, 10 Sep 2021 16:21:23 -0700 Subject: [PATCH 484/751] update all dev-only dependencies --- requirements/dev-requirements.in | 1 - requirements/dev-requirements.txt | 50 +++++++++++++++---------------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index e0bfaf54a..e7a7d9159 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -1,6 +1,5 @@ flake8 pip-tools -py>=1.9.0 pytest pytest-cov pytest-mock diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6ecd42395..573060ac3 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -93,9 +93,9 @@ idna==3.2 \ --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via requests -importlib-metadata==4.7.1 \ - --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \ - --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b +importlib-metadata==4.8.1 \ + --hash=sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15 \ + --hash=sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 # via # click # flake8 @@ -132,16 +132,14 @@ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r requirements/dev-requirements.in -pluggy==0.13.1 \ - --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \ - --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d +pluggy==1.0.0 \ + --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ + --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest py==1.10.0 \ --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a - # via - # -r requirements/dev-requirements.in - # pytest + # via pytest pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef @@ -177,9 +175,9 @@ pyrsistent==0.18.0 \ --hash=sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b \ --hash=sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72 # via jsonschema -pytest==6.2.4 \ - --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \ - --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890 +pytest==6.2.5 \ + --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \ + --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134 # via # -r requirements/dev-requirements.in # pytest-cov @@ -196,9 +194,9 @@ requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via semgrep -ruamel.yaml==0.17.14 \ - --hash=sha256:4185fcfa9e037fea9ffd0bb6172354a03ec98c21e462355d72e068c74e493512 \ - --hash=sha256:b59c548ba6a2a99a97a842db2321c5adf28470d1decb04bdd82ce9535936a2fa +ruamel.yaml==0.17.16 \ + --hash=sha256:1a771fc92d3823682b7f0893ad56cb5a5c87c48e62b5399d6f42c8759a583b33 \ + --hash=sha256:ea21da1198c4b41b8e7a259301cc9710d3b972bf8ba52f06218478e6802dd1f1 # via semgrep ruamel.yaml.clib==0.2.6 \ --hash=sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd \ @@ -223,10 +221,10 @@ ruamel.yaml.clib==0.2.6 \ --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c # via ruamel.yaml -semgrep==0.63.0 \ - --hash=sha256:777322ce3bbe07a43cc5e8d9ad23691441d3af9785e942134ceb5bdad1eb4902 \ - --hash=sha256:96ca4e2f4439f29f84199aae8a3094480bb624b2466998aa06bd556deff849db \ - --hash=sha256:9fc462d70210a4edfce03d8de3f9bf9f046c58bbbe9a12db6155f756404ef6f5 +semgrep==0.64.0 \ + --hash=sha256:06b5e9db524b3e5d185b2eb04531936909a803726367634041f617f426e8d30e \ + --hash=sha256:439538d8de173b1489b68625a1f9627db7215307acd37dbe35602dc43a143372 \ + --hash=sha256:7b7b16bb7fc9f92054231984b975da1bbb5e469ad51ec5d3b3db32c421569d43 # via -r requirements/dev-requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -246,10 +244,10 @@ tqdm==4.62.2 \ --hash=sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588 \ --hash=sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5 # via semgrep -typing-extensions==3.10.0.0 \ - --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ - --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ - --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 +typing-extensions==3.10.0.2 \ + --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ + --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ + --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 # via importlib-metadata urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ @@ -275,9 +273,9 @@ pip==21.2.4 \ --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 # via pip-tools -setuptools==57.4.0 \ - --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ - --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 +setuptools==58.0.4 \ + --hash=sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770 \ + --hash=sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b # via # jsonschema # pip-tools From 563d635787ef6f108fe676bf6c71c01f983ced68 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Mon, 13 Sep 2021 14:58:49 -0700 Subject: [PATCH 485/751] release securedrop-sdk 0.3.2 --- CHANGELOG.md | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 130a2ed19..11542ac76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.3.2 +----- + +* Update idna to 3.2 (#169) + 0.3.1 ----- diff --git a/setup.py b/setup.py index 006c5c226..07932a241 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.3.1", + version="0.3.2", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From bdbf0d484ee95c1351ea5f30bb9856a1fc95cba8 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Wed, 27 Oct 2021 12:58:59 -0700 Subject: [PATCH 486/751] update to werkzeug 2.0.2 to improve security of debugger cookies Signed-off-by: Allie Crevier --- requirements/build-requirements.txt | 2 +- requirements/dev-requirements.txt | 6 +++--- requirements/requirements.in | 2 +- requirements/requirements.txt | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 2479943ae..be41d42ce 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -7,4 +7,4 @@ pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf94000 requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 -werkzeug==0.16.0 --hash=sha256:bd05301a84a9bc3b33f178e53446181879744b74f098ed35850ba21125379be1 +werkzeug==2.0.2 --hash=sha256:55e8ebd03bf69dc51cd986ba7bf3e25f549bb27a22de9d6bdd15c855ba8f1f99 diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 558ba47ae..b1aeb1a56 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -379,9 +379,9 @@ vcrpy==4.1.1 \ --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 # via -r requirements/dev-requirements.in -werkzeug==0.16.0 \ - --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ - --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 +werkzeug==2.0.2 \ + --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ + --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a # via -r requirements/requirements.in wheel==0.37.0 \ --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ diff --git a/requirements/requirements.in b/requirements/requirements.in index cede6d809..9354373d7 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -7,4 +7,4 @@ pyyaml==5.4.1 requests>=2.26.0 six==1.11.0 urllib3>=1.26.5 -werkzeug==0.16.0 +werkzeug>=0.16.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e24267cbe..cd33d0ed7 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -80,7 +80,7 @@ urllib3==1.26.6 \ # via # -r requirements/requirements.in # requests -werkzeug==0.16.0 \ - --hash=sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7 \ - --hash=sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4 +werkzeug==2.0.2 \ + --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ + --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a # via -r requirements/requirements.in From e17c9d5aa5e968c727a9ae5d10d3d0bd0db1a1ec Mon Sep 17 00:00:00 2001 From: ro Date: Wed, 19 Jan 2022 16:14:46 -0500 Subject: [PATCH 487/751] Update dev requirements --- requirements/dev-requirements.txt | 359 +++++++++++++++--------------- 1 file changed, 183 insertions(+), 176 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 573060ac3..ea7d8455f 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -4,98 +4,100 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -attrs==21.2.0 \ - --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ - --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb +attrs==21.4.0 \ + --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ + --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd # via # jsonschema # pytest # semgrep -bracex==2.1.1 \ - --hash=sha256:01f715cd0ed7a622ec8b32322e715813f7574de531f09b70f6f3b2c10f682425 \ - --hash=sha256:64e2a6d14de9c8e022cf40539ac8468ba7c4b99550a2b05fc87fd20e392e568f +bracex==2.2.1 \ + --hash=sha256:096c4b788bf492f7af4e90ef8b5bcbfb99759ae3415ea1b83c9d29a5ed8f9a94 \ + --hash=sha256:1c8d1296e00ad9a91030ccb4c291f9e4dc7c054f12c707ba3c5ff3e9a81bcd21 # via wcmatch -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +certifi==2021.10.8 \ + --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ + --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 # via requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 +charset-normalizer==2.0.10 \ + --hash=sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd \ + --hash=sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455 # via requests -click==8.0.1 \ - --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ - --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 - # via pip-tools +click==8.0.3 \ + --hash=sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3 \ + --hash=sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b + # via + # click-option-group + # pip-tools + # semgrep +click-option-group==0.5.3 \ + --hash=sha256:9653a2297357335d7325a1827e71ac1245d91c97d959346a7decabd4a52d5354 \ + --hash=sha256:a6e924f3c46b657feb5b72679f7e930f8e5b224b766ab35c91ae4019b4e0615e + # via semgrep colorama==0.4.4 \ --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 # via semgrep -coverage==5.5 \ - --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \ - --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \ - --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \ - --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \ - --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \ - --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \ - --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \ - --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \ - --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \ - --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \ - --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \ - --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \ - --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \ - --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \ - --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \ - --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \ - --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \ - --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \ - --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \ - --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \ - --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \ - --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \ - --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \ - --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \ - --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \ - --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \ - --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \ - --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \ - --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \ - --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \ - --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \ - --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \ - --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \ - --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \ - --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \ - --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \ - --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \ - --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \ - --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \ - --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \ - --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \ - --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \ - --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \ - --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \ - --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \ - --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \ - --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \ - --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \ - --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \ - --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ - --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ - --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 +coverage[toml]==6.2 \ + --hash=sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0 \ + --hash=sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd \ + --hash=sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884 \ + --hash=sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48 \ + --hash=sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76 \ + --hash=sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0 \ + --hash=sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64 \ + --hash=sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685 \ + --hash=sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47 \ + --hash=sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d \ + --hash=sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840 \ + --hash=sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f \ + --hash=sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971 \ + --hash=sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c \ + --hash=sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a \ + --hash=sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de \ + --hash=sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17 \ + --hash=sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4 \ + --hash=sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521 \ + --hash=sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57 \ + --hash=sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b \ + --hash=sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282 \ + --hash=sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644 \ + --hash=sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475 \ + --hash=sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d \ + --hash=sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da \ + --hash=sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953 \ + --hash=sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2 \ + --hash=sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e \ + --hash=sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c \ + --hash=sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc \ + --hash=sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64 \ + --hash=sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74 \ + --hash=sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617 \ + --hash=sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3 \ + --hash=sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d \ + --hash=sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa \ + --hash=sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739 \ + --hash=sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8 \ + --hash=sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8 \ + --hash=sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781 \ + --hash=sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58 \ + --hash=sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9 \ + --hash=sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c \ + --hash=sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd \ + --hash=sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e \ + --hash=sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49 # via pytest-cov -flake8==3.9.2 \ - --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ - --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 +flake8==4.0.1 \ + --hash=sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d \ + --hash=sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d # via -r requirements/dev-requirements.in -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 +idna==3.3 \ + --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ + --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -importlib-metadata==4.8.1 \ - --hash=sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15 \ - --hash=sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 +importlib-metadata==4.2.0 \ + --hash=sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b \ + --hash=sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31 # via # click # flake8 @@ -103,77 +105,81 @@ importlib-metadata==4.8.1 \ # pep517 # pluggy # pytest +importlib-resources==5.4.0 \ + --hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \ + --hash=sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b + # via jsonschema iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -jsonschema==3.2.0 \ - --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ - --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a +jsonschema==4.4.0 \ + --hash=sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83 \ + --hash=sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823 # via semgrep mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 -packaging==21.0 \ - --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \ - --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via # pytest # semgrep -peewee==3.14.4 \ - --hash=sha256:9e356b327c2eaec6dd42ecea6f4ddded025793dba906a3d065a0452e726c51a2 +peewee==3.14.8 \ + --hash=sha256:01bd7f734defb08d7a3346a0c0ca7011bc8d0d685934ec0e001b3371d522ec53 # via semgrep -pep517==0.11.0 \ - --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ - --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 +pep517==0.12.0 \ + --hash=sha256:931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \ + --hash=sha256:dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161 # via pip-tools -pip-tools==6.2.0 \ - --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ - --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 +pip-tools==6.4.0 \ + --hash=sha256:65553a15b1ba34be5e43889345062e38fb9b219ffa23b084ca0d4c4039b6f53b \ + --hash=sha256:bb2c3272bc229b4a6d25230ebe255823aba1aa466a0d698c48ab7eb5ab7efdc9 # via -r requirements/dev-requirements.in pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -py==1.10.0 \ - --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ - --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a +py==1.11.0 \ + --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ + --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 # via pytest -pycodestyle==2.7.0 \ - --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ - --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef +pycodestyle==2.8.0 \ + --hash=sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20 \ + --hash=sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f # via flake8 -pyflakes==2.3.1 \ - --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ - --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db +pyflakes==2.4.0 \ + --hash=sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c \ + --hash=sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e # via flake8 -pyparsing==2.4.7 \ - --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ - --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b +pyparsing==3.0.6 \ + --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \ + --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81 # via packaging -pyrsistent==0.18.0 \ - --hash=sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2 \ - --hash=sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7 \ - --hash=sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea \ - --hash=sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426 \ - --hash=sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710 \ - --hash=sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1 \ - --hash=sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396 \ - --hash=sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2 \ - --hash=sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680 \ - --hash=sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35 \ - --hash=sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427 \ - --hash=sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b \ - --hash=sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b \ - --hash=sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f \ - --hash=sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef \ - --hash=sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c \ - --hash=sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4 \ - --hash=sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d \ - --hash=sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78 \ - --hash=sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b \ - --hash=sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72 +pyrsistent==0.18.1 \ + --hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \ + --hash=sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc \ + --hash=sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e \ + --hash=sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26 \ + --hash=sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec \ + --hash=sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286 \ + --hash=sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045 \ + --hash=sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec \ + --hash=sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8 \ + --hash=sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c \ + --hash=sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca \ + --hash=sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22 \ + --hash=sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a \ + --hash=sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96 \ + --hash=sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc \ + --hash=sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1 \ + --hash=sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07 \ + --hash=sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6 \ + --hash=sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b \ + --hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \ + --hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6 # via jsonschema pytest==6.2.5 \ --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \ @@ -182,29 +188,33 @@ pytest==6.2.5 \ # -r requirements/dev-requirements.in # pytest-cov # pytest-mock -pytest-cov==2.12.1 \ - --hash=sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a \ - --hash=sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7 +pytest-cov==3.0.0 \ + --hash=sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6 \ + --hash=sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470 # via -r requirements/dev-requirements.in pytest-mock==3.6.1 \ --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 # via -r requirements/dev-requirements.in -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.27.1 \ + --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ + --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d # via semgrep -ruamel.yaml==0.17.16 \ - --hash=sha256:1a771fc92d3823682b7f0893ad56cb5a5c87c48e62b5399d6f42c8759a583b33 \ - --hash=sha256:ea21da1198c4b41b8e7a259301cc9710d3b972bf8ba52f06218478e6802dd1f1 +ruamel.yaml==0.17.20 \ + --hash=sha256:4b8a33c1efb2b443a93fcaafcfa4d2e445f8e8c29c528d9f5cdafb7cc9e4004c \ + --hash=sha256:810eef9c46523a3f77479c66267a4708255ebe806a2d540078408c2227f011af # via semgrep ruamel.yaml.clib==0.2.6 \ --hash=sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd \ + --hash=sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee \ --hash=sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0 \ + --hash=sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7 \ --hash=sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277 \ --hash=sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104 \ --hash=sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd \ + --hash=sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0 \ --hash=sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78 \ + --hash=sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de \ --hash=sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99 \ --hash=sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527 \ --hash=sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84 \ @@ -221,62 +231,59 @@ ruamel.yaml.clib==0.2.6 \ --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c # via ruamel.yaml -semgrep==0.64.0 \ - --hash=sha256:06b5e9db524b3e5d185b2eb04531936909a803726367634041f617f426e8d30e \ - --hash=sha256:439538d8de173b1489b68625a1f9627db7215307acd37dbe35602dc43a143372 \ - --hash=sha256:7b7b16bb7fc9f92054231984b975da1bbb5e469ad51ec5d3b3db32c421569d43 +semgrep==0.78.0 \ + --hash=sha256:0ae8f6fb9b9d5e9920d25662dd92dd0c20d32752b8cd154c1bb0ceca37b8e380 \ + --hash=sha256:5abb5ecc7a536614a6ee95b2dee762fe50f0cf63a41cc23ef21798c7b94fe1af \ + --hash=sha256:7f58e7a795f8d6d419f6ae13d44565c5075ab08e07054c24832752dd4f20d860 # via -r requirements/dev-requirements.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via jsonschema toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + # via pytest +tomli==2.0.0 \ + --hash=sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224 \ + --hash=sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1 # via - # pytest - # pytest-cov -tomli==1.2.1 \ - --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ - --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 - # via pep517 -tqdm==4.62.2 \ - --hash=sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588 \ - --hash=sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5 + # coverage + # pep517 +tqdm==4.62.3 \ + --hash=sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c \ + --hash=sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d # via semgrep -typing-extensions==3.10.0.2 \ - --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ - --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ - --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 - # via importlib-metadata -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f +typing-extensions==4.0.1 \ + --hash=sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e \ + --hash=sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b + # via + # importlib-metadata + # jsonschema +urllib3==1.26.8 \ + --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \ + --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c # via requests -wcmatch==8.2 \ - --hash=sha256:4d54ddb506c90b5a5bba3a96a1cfb0bb07127909e19046a71d689ddfb18c3617 \ - --hash=sha256:9146b1ab9354e0797ef6ef69bc89cb32cb9f46d1b9eeef69c559aeec8f3bffb6 +wcmatch==8.3 \ + --hash=sha256:371072912398af61d1e4e78609e18801c6faecd3cb36c54c82556a60abc965db \ + --hash=sha256:7141d2c85314253f16b38cb3d6cc0fb612918d407e1df3ccc2be7c86cc259c22 # via semgrep -wheel==0.37.0 \ - --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ - --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad +wheel==0.37.1 \ + --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ + --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 # via pip-tools -zipp==3.5.0 \ - --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ - --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 +zipp==3.7.0 \ + --hash=sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d \ + --hash=sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375 # via # importlib-metadata + # importlib-resources # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==21.2.4 \ - --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ - --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 +pip==21.3.1 \ + --hash=sha256:deaf32dcd9ab821e359cd8330786bcd077604b5c5730c0b096eda46f95c24a2d \ + --hash=sha256:fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a # via pip-tools -setuptools==58.0.4 \ - --hash=sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770 \ - --hash=sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b +setuptools==60.5.0 \ + --hash=sha256:2404879cda71495fc4d5cbc445ed52fdaddf352b36e40be8dcc63147cb4edabe \ + --hash=sha256:68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90 # via - # jsonschema # pip-tools # semgrep From 2ad05528b3abca95140bc3bee73e49ad0e3e0592 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 28 Jan 2022 14:07:04 -0800 Subject: [PATCH 488/751] Fix unofficial_status test on Python 3.9+ HTTP 418 was added to http.HTTPStatus in Python 3.9, so it no longer fails with "unspecified server error". Use status code 499 as something that should never really be added in the near future. --- fixtures/proxy_unofficial_status.yaml | 2 +- tests/test_proxy.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fixtures/proxy_unofficial_status.yaml b/fixtures/proxy_unofficial_status.yaml index fa62ef962..e0b7a193d 100644 --- a/fixtures/proxy_unofficial_status.yaml +++ b/fixtures/proxy_unofficial_status.yaml @@ -15,6 +15,6 @@ interactions: Server: - BaseHTTP/0.6 Python/3.7.3 status: - code: 418 + code: 499 message: '' version: 1 diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 7a035cfd3..e09509859 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -227,7 +227,7 @@ def test_unofficial_status(self): p = proxy.Proxy(self.conf_path, req) p.proxy() - self.assertEqual(p.res.status, 418) + self.assertEqual(p.res.status, 499) self.assertIn("application/json", p.res.headers["Content-Type"]) body = json.loads(p.res.body) self.assertEqual(body["error"], "unspecified server error") From 3f703d4274fa4c6d25442826f4bb45534a6ecb0d Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 28 Jan 2022 14:23:44 -0800 Subject: [PATCH 489/751] Reject JSON with duplicate keys Informational finding TOB-SDW-014 from the 2020 SecureDrop Workstation audit recommended explicitly checking for and rejecting duplicate JSON keys to prevent against JSON injection attacks. The new "json" module is a drop-in replacement for the current usage of the standard library's JSON module, except using `loads()` will throw an exception on duplicate keys. Callers should now catch any ValueErrors, which also covers JSONDecodeError. Fixes #84. --- securedrop_proxy/entrypoint.py | 3 +-- securedrop_proxy/json.py | 24 ++++++++++++++++++++++++ securedrop_proxy/main.py | 5 ++--- securedrop_proxy/proxy.py | 2 +- tests/test_json.py | 21 +++++++++++++++++++++ 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 securedrop_proxy/json.py create mode 100644 tests/test_json.py diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index b2f535554..9e881969f 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -7,14 +7,13 @@ # the README for configuration options. import http -import json import logging import os import platform import sys from logging.handlers import SysLogHandler, TimedRotatingFileHandler -from securedrop_proxy import main, proxy +from securedrop_proxy import json, main, proxy from securedrop_proxy.version import version DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_proxy") diff --git a/securedrop_proxy/json.py b/securedrop_proxy/json.py new file mode 100644 index 000000000..aa8f1c411 --- /dev/null +++ b/securedrop_proxy/json.py @@ -0,0 +1,24 @@ +""" +Wrapper around Python's json to catch duplicate keys (potential JSON injection) + +This was informational finding TOB-SDW-014 in the 2020 audit. +""" +import json + +dumps = json.dumps + + +def _check(seq): + d = {} + for key, value in seq: + if key in d: + raise ValueError(f"Key '{key}' found twice in JSON object") + d[key] = value + return d + + +def loads(text: str) -> dict: + """ + Turn a string into a JSON object, but reject duplicate keys + """ + return json.loads(text, object_pairs_hook=_check) diff --git a/securedrop_proxy/main.py b/securedrop_proxy/main.py index 1fd76cf88..040813f1a 100644 --- a/securedrop_proxy/main.py +++ b/securedrop_proxy/main.py @@ -1,8 +1,7 @@ -import json import logging from typing import Any, Dict -from securedrop_proxy import proxy +from securedrop_proxy import json, proxy from securedrop_proxy.proxy import Proxy logger = logging.getLogger(__name__) @@ -17,7 +16,7 @@ def __main__(incoming: str, p: Proxy) -> None: client_req: Dict[str, Any] = {} try: client_req = json.loads(incoming) - except json.decoder.JSONDecodeError as e: + except ValueError as e: logging.error(e) p.simple_error(400, "Invalid JSON in request") p.on_done() diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 97f168c3e..36854bb05 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -1,5 +1,4 @@ import http -import json import logging import os import subprocess @@ -14,6 +13,7 @@ import yaml import securedrop_proxy.version as version +from securedrop_proxy import json logger = logging.getLogger(__name__) diff --git a/tests/test_json.py b/tests/test_json.py new file mode 100644 index 000000000..d268e34ac --- /dev/null +++ b/tests/test_json.py @@ -0,0 +1,21 @@ +import unittest + +from securedrop_proxy import json + + +class JsonTest(unittest.TestCase): + def test_dumps(self): + """Simple check since this is a passthrough to stdlib json""" + self.assertEqual( + json.dumps({"foo": "bar", "baz": ["one"]}), '{"foo": "bar", "baz": ["one"]}' + ) + + def test_loads(self): + # Verify basic loading works + self.assertEqual( + json.loads('{"foo": "bar", "baz": ["one"]}'), {"foo": "bar", "baz": ["one"]} + ) + # But duplicate keys are rejected + with self.assertRaises(ValueError) as exc: + json.loads('{"foo": "bar", "foo": "baz"}') + self.assertEqual(str(exc.exception), "Key 'foo' found twice in JSON object") From 4a157dfdc35976c44efcc83645aa041af393741b Mon Sep 17 00:00:00 2001 From: Gonzalo Bulnes Guilpain Date: Wed, 9 Feb 2022 18:58:02 +1100 Subject: [PATCH 490/751] Ensure support for common date string formats - ISO8061 and RFC3339 (using the +00:00 UTC offset style) - ISO8061 and RFC3339 (using the Z UTC offset style) - one invalid format that the server used for some time --- sdclientapi/__init__.py | 9 ++++++++- sdclientapi/timestamps.py | 24 ++++++++++++++++++++++++ tests/test_timestamps.py | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sdclientapi/timestamps.py create mode 100644 tests/test_timestamps.py diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 7bd0c19fe..5c59809fb 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright © 2018–2022 The Freedom of the Press Foundation. import configparser import http import json @@ -20,6 +22,7 @@ User, WrongUUIDError, ) +from .timestamps import parse as parse_datetime DEFAULT_PROXY_VM_NAME = "sd-proxy" DEFAULT_REQUEST_TIMEOUT = 20 # 20 seconds @@ -247,8 +250,12 @@ def authenticate(self, totp: Optional[str] = None) -> bool: if "expiration" not in token_data: raise AuthError("Authentication error") + token_expiration = parse_datetime(token_data["expiration"]) + if token_expiration is None: + raise BaseError("Error in parsing token expiration time") + self.token = token_data["token"] - self.token_expiration = datetime.strptime(token_data["expiration"], "%Y-%m-%dT%H:%M:%S.%fZ") + self.token_expiration = token_expiration self.token_journalist_uuid = token_data["journalist_uuid"] self.first_name = token_data["journalist_first_name"] self.last_name = token_data["journalist_last_name"] diff --git a/sdclientapi/timestamps.py b/sdclientapi/timestamps.py new file mode 100644 index 000000000..88353fdf6 --- /dev/null +++ b/sdclientapi/timestamps.py @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright © 2022 The Freedom of the Press Foundation. +from datetime import datetime +from typing import Optional + + +def parse(date_string: str) -> Optional[datetime]: + """Parse date strings in a few historical formats.""" + try: + # ISO8061 and RFC3339 + # '2022-02-09T07:45:26.082728+00:00' + return datetime.fromisoformat(date_string) # type: ignore + except ValueError: + try: + # '2022-02-09T07:45:26.082728Z' + # DEPRECATED: Please remove this once all servers were updated. + return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S.%f%z") + except ValueError: + try: + # '2022-02-09T07:45:26.082728+00:00Z' invalid format, but we support it. + # DEPRECATED: Please remove this once all servers were updated. + return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S.%f%zZ") + except ValueError: + return None diff --git a/tests/test_timestamps.py b/tests/test_timestamps.py new file mode 100644 index 000000000..c76bd4151 --- /dev/null +++ b/tests/test_timestamps.py @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright © 2022 The Freedom of the Press Foundation. +import unittest +from datetime import timedelta, timezone + +from sdclientapi.timestamps import parse as parse_datetime + + +class TestTimestamps(unittest.TestCase): + def test_parse_invalid_date_string_returns_none(self): + date_string = "" + assert parse_datetime(date_string) is None + + def test_parse_iso8061_returns_appropriate_time_zone_info(self): + date_string = "2022-02-09T07:45:26.082728+00:00" + assert parse_datetime(date_string) is not None + + date_string = "2022-02-09T07:45:26.082728+00:00" + dt = parse_datetime(date_string) + assert dt.tzinfo is timezone.utc + + date_string = "2022-02-09T07:45:26.082728+02:00" + dt = parse_datetime(date_string) + assert dt.tzinfo == timezone(timedelta(seconds=7200)) + + def test_parse_iso8061_Z_returns_appropriate_time_zone_info(self): + date_string = "2022-02-09T07:45:26.082728" + assert parse_datetime(date_string) is not None + + date_string = "2022-02-09T07:45:26.082728Z" + dt = parse_datetime(date_string) + assert dt.tzinfo is timezone.utc + + def test_parse_known_invalid_format_suceeds(self): + date_string = "2022-02-09T07:45:26.082728+00:00Z" + assert parse_datetime(date_string) is not None + + dt = parse_datetime(date_string) + assert dt.tzinfo is timezone.utc From a4206180fae2937a8e1a69fdb20c2791f9abdf9f Mon Sep 17 00:00:00 2001 From: Gonzalo Bulnes Guilpain Date: Mon, 21 Feb 2022 15:57:03 +1100 Subject: [PATCH 491/751] Remove copyright and license notice... ...until a decision is made on the format we want to use. --- sdclientapi/__init__.py | 2 -- sdclientapi/timestamps.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 5c59809fb..bb8e0a651 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -1,5 +1,3 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -# Copyright © 2018–2022 The Freedom of the Press Foundation. import configparser import http import json diff --git a/sdclientapi/timestamps.py b/sdclientapi/timestamps.py index 88353fdf6..c171597bc 100644 --- a/sdclientapi/timestamps.py +++ b/sdclientapi/timestamps.py @@ -1,5 +1,3 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -# Copyright © 2022 The Freedom of the Press Foundation. from datetime import datetime from typing import Optional From 7f0f820240a0ace9fa4ff4a3b663edf83d61e7a3 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 5 Apr 2022 20:46:46 -0700 Subject: [PATCH 492/751] update version and changelog for 0.4.0 --- CHANGELOG.md | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11542ac76..9a7801c7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Changelog ========= +0.4.0 +----- + +* Ensure support for common date string formats (#172) + 0.3.2 ----- diff --git a/setup.py b/setup.py index 07932a241..e1ce72a32 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="securedrop-sdk", - version="0.3.2", + version="0.4.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="Python client API to access SecureDrop Journalist REST API", From 3e68158b67cc145caffe4135d998a39ac63e10c3 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 20 Apr 2022 18:40:05 -0400 Subject: [PATCH 493/751] Explicitly set packages in setup.py This is generally a good practice instead of relying on autodiscovery, plus it's what the other securedrop- packages do. Also it fixes a weird bug with reprotest, in which it can't determine the correct package. Fixes https://github.com/freedomofpress/securedrop-debian-packaging/issues/298. --- setup.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/setup.py b/setup.py index efbe8f282..0d3ccec97 100644 --- a/setup.py +++ b/setup.py @@ -19,6 +19,10 @@ license="GPLv3+", install_requires=[], python_requires=">=3.5", + packages=setuptools.find_packages(exclude=["docs", "tests"]), + package_data={ + 'securedrop_log': ['VERSION'], + }, url="https://github.com/freedomofpress/securedrop-log", classifiers=[ "Development Status :: 3 - Alpha", From 2ccc82b15df3e16556ed56e10424ba42f85ba1e9 Mon Sep 17 00:00:00 2001 From: nahara7 Date: Tue, 26 Apr 2022 00:09:20 -0400 Subject: [PATCH 494/751] Update reply and submission retrieval. --- sdclientapi/__init__.py | 50 ++++++++++++++++++++--------------- sdclientapi/sdlocalobjects.py | 10 +++++++ 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index bb8e0a651..5978c47f4 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -478,17 +478,19 @@ def get_submission(self, submission: Submission) -> Submission: :param submission: Submission object we want to update. :returns: Updated submission object from the server. """ - path_query = "api/v1/sources/{}/submissions/{}".format( - submission.source_uuid, submission.uuid - ) - method = "GET" + if submission.source_uuid and submission.uuid is not None: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) + path_query = "api/v1/sources/{}/submissions/{}".format( + submission.source_uuid, submission.uuid + ) + method = "GET" + + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) if status_code == 404: raise WrongUUIDError("Missing submission {}".format(submission.uuid)) @@ -760,20 +762,22 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: :param reply_uuid: UUID of the reply. :returns: A reply object """ - path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) - method = "GET" + if source.uuid and reply_uuid is not None: - data, status_code, headers = self._send_json_request( - method, - path_query, - headers=self.req_headers, - timeout=self.default_request_timeout, - ) + path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) + method = "GET" - if status_code == 404: - raise WrongUUIDError("Missing source {}".format(source.uuid)) + data, status_code, headers = self._send_json_request( + method, + path_query, + headers=self.req_headers, + timeout=self.default_request_timeout, + ) - reply = Reply(**data) + if status_code == 404: + raise WrongUUIDError("Missing source {}".format(source.uuid)) + + reply = Reply(**data) return reply @@ -834,7 +838,9 @@ def download_reply(self, reply: Reply, path: str = "") -> Tuple[str, str]: if not self.proxy: # This is where we will save our downloaded file - filepath = os.path.join(path, reply.filename) + filepath = os.path.join( + path, headers["Content-Disposition"].split("attachment; filename=")[1] + ) with open(filepath, "wb") as fobj: for chunk in data.iter_content(chunk_size=1024): # Getting 1024 in each chunk if chunk: diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index c8453ca41..aefd5d847 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -75,6 +75,11 @@ def __init__(self, **kwargs) -> None: # type: ignore self.uuid = kwargs["uuid"] self.filename = kwargs["filename"] return + # Fetch an object only by uuid and soure_uuid. + elif {"uuid", "source_uuid"} == set(kwargs.keys()): + self.uuid = kwargs["uuid"] + self.source_uuid = kwargs["source_uuid"] + return for key in [ "filename", @@ -118,6 +123,11 @@ def __init__(self, **kwargs) -> None: # type: ignore self.uuid = kwargs["uuid"] return + elif ["uuid", "source_uuid"] == list(kwargs.keys()): + self.uuid = kwargs["uuid"] + self.source_uuid = kwargs["source_uuid"] + return + for key in [ "download_url", "filename", From 20be47fc0317f797ddd7d9ffd1137b7f38e4f917 Mon Sep 17 00:00:00 2001 From: nahara7 Date: Tue, 26 Apr 2022 01:30:41 -0400 Subject: [PATCH 495/751] Update comment --- sdclientapi/sdlocalobjects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdclientapi/sdlocalobjects.py b/sdclientapi/sdlocalobjects.py index aefd5d847..c2f17be93 100644 --- a/sdclientapi/sdlocalobjects.py +++ b/sdclientapi/sdlocalobjects.py @@ -75,7 +75,7 @@ def __init__(self, **kwargs) -> None: # type: ignore self.uuid = kwargs["uuid"] self.filename = kwargs["filename"] return - # Fetch an object only by uuid and soure_uuid. + # Fetch an object only by uuid and soure_uuid. elif {"uuid", "source_uuid"} == set(kwargs.keys()): self.uuid = kwargs["uuid"] self.source_uuid = kwargs["source_uuid"] From b13d327f9fa7c07e1db4b2e4fd9dc47db09498e6 Mon Sep 17 00:00:00 2001 From: Michael Z Date: Tue, 10 May 2022 12:21:32 -0400 Subject: [PATCH 496/751] Add executable bit to `securedrop.Log` for logging support on 4.1 --- securedrop.Log | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 securedrop.Log diff --git a/securedrop.Log b/securedrop.Log old mode 100644 new mode 100755 From fc09f5ce648d7d7b67b8a8c2eda46601da99bc40 Mon Sep 17 00:00:00 2001 From: Michael Z Date: Mon, 23 May 2022 13:51:32 -0400 Subject: [PATCH 497/751] Treat ppdc warnings as non-fatal Users have reported printers not working because of `ppdc` warning messages reported in the client (asking them to contact an administrator). These warnings do not result in non-zero return codes and are seemingly really just warnings, so no need to get users involved. Fixes #51 --- securedrop_export/export.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 1f8274037..ee7f2c520 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -128,7 +128,13 @@ def safe_check_call(self, command, error_message): try: subprocess.check_call(command) except subprocess.CalledProcessError as ex: - self.exit_gracefully(msg=error_message, e=ex.output) + # ppdc emits warnings which should not be treated as user facing errors + if ex.returncode == 0 and \ + ex.stderr is not None and \ + ex.stderr.startswith("ppdc: Warning"): + logger.info('Encountered warning: {}'.format(ex.output)) + else: + self.exit_gracefully(msg=error_message, e=ex.output) class ExportAction(abc.ABC): From cf9c25a85e35ade653581b0baee92ff13b89e704 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 24 May 2022 13:18:06 -0700 Subject: [PATCH 498/751] add black and bump other dev dependencies --- requirements/dev-requirements.in | 1 + requirements/dev-requirements.txt | 310 +++++++++++++++++++----------- 2 files changed, 195 insertions(+), 116 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index e7a7d9159..5200c5299 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -1,3 +1,4 @@ +black flake8 pip-tools pytest diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index ea7d8455f..9cc7487ba 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -8,25 +8,59 @@ attrs==21.4.0 \ --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd # via + # glom # jsonschema # pytest # semgrep -bracex==2.2.1 \ - --hash=sha256:096c4b788bf492f7af4e90ef8b5bcbfb99759ae3415ea1b83c9d29a5ed8f9a94 \ - --hash=sha256:1c8d1296e00ad9a91030ccb4c291f9e4dc7c054f12c707ba3c5ff3e9a81bcd21 +black==22.3.0 \ + --hash=sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b \ + --hash=sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176 \ + --hash=sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09 \ + --hash=sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a \ + --hash=sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015 \ + --hash=sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79 \ + --hash=sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb \ + --hash=sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20 \ + --hash=sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464 \ + --hash=sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968 \ + --hash=sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82 \ + --hash=sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21 \ + --hash=sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0 \ + --hash=sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265 \ + --hash=sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b \ + --hash=sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a \ + --hash=sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72 \ + --hash=sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce \ + --hash=sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0 \ + --hash=sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a \ + --hash=sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163 \ + --hash=sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad \ + --hash=sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d + # via -r requirements/dev-requirements.in +boltons==21.0.0 \ + --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ + --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b + # via + # face + # glom + # semgrep +bracex==2.3 \ + --hash=sha256:6789a715744bcb3359b53c4012dd94be5ab7669c638affe89f670595a3c73cc0 \ + --hash=sha256:a3ce1d8a9fb7acc887e2e60ac5aa269f243d960c34c3d8a541fb672bdb9aa957 # via wcmatch -certifi==2021.10.8 \ - --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ - --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a # via requests -charset-normalizer==2.0.10 \ - --hash=sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd \ - --hash=sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455 +charset-normalizer==2.0.12 \ + --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ + --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df # via requests -click==8.0.3 \ - --hash=sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3 \ - --hash=sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 # via + # black # click-option-group # pip-tools # semgrep @@ -38,59 +72,65 @@ colorama==0.4.4 \ --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 # via semgrep -coverage[toml]==6.2 \ - --hash=sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0 \ - --hash=sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd \ - --hash=sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884 \ - --hash=sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48 \ - --hash=sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76 \ - --hash=sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0 \ - --hash=sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64 \ - --hash=sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685 \ - --hash=sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47 \ - --hash=sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d \ - --hash=sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840 \ - --hash=sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f \ - --hash=sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971 \ - --hash=sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c \ - --hash=sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a \ - --hash=sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de \ - --hash=sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17 \ - --hash=sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4 \ - --hash=sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521 \ - --hash=sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57 \ - --hash=sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b \ - --hash=sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282 \ - --hash=sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644 \ - --hash=sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475 \ - --hash=sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d \ - --hash=sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da \ - --hash=sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953 \ - --hash=sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2 \ - --hash=sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e \ - --hash=sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c \ - --hash=sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc \ - --hash=sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64 \ - --hash=sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74 \ - --hash=sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617 \ - --hash=sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3 \ - --hash=sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d \ - --hash=sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa \ - --hash=sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739 \ - --hash=sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8 \ - --hash=sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8 \ - --hash=sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781 \ - --hash=sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58 \ - --hash=sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9 \ - --hash=sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c \ - --hash=sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd \ - --hash=sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e \ - --hash=sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49 +coverage[toml]==6.4 \ + --hash=sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a \ + --hash=sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6 \ + --hash=sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383 \ + --hash=sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f \ + --hash=sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f \ + --hash=sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f \ + --hash=sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c \ + --hash=sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018 \ + --hash=sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720 \ + --hash=sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3 \ + --hash=sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf \ + --hash=sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211 \ + --hash=sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39 \ + --hash=sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95 \ + --hash=sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41 \ + --hash=sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c \ + --hash=sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166 \ + --hash=sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49 \ + --hash=sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce \ + --hash=sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088 \ + --hash=sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6 \ + --hash=sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426 \ + --hash=sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df \ + --hash=sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632 \ + --hash=sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3 \ + --hash=sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08 \ + --hash=sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65 \ + --hash=sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea \ + --hash=sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701 \ + --hash=sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5 \ + --hash=sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311 \ + --hash=sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7 \ + --hash=sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d \ + --hash=sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61 \ + --hash=sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c \ + --hash=sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a \ + --hash=sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055 \ + --hash=sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740 \ + --hash=sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45 \ + --hash=sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052 \ + --hash=sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f # via pytest-cov +defusedxml==0.7.1 \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + # via semgrep +face==20.1.1 \ + --hash=sha256:3790311a7329e4b0d90baee346eecad54b337629576edf3a246683a5f0d24446 \ + --hash=sha256:7d59ca5ba341316e58cf72c6aff85cca2541cf5056c4af45cb63af9a814bed3e + # via glom flake8==4.0.1 \ --hash=sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d \ --hash=sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d # via -r requirements/dev-requirements.in +glom==22.1.0 \ + --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ + --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 + # via semgrep idna==3.3 \ --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d @@ -105,39 +145,47 @@ importlib-metadata==4.2.0 \ # pep517 # pluggy # pytest -importlib-resources==5.4.0 \ - --hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \ - --hash=sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b - # via jsonschema iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -jsonschema==4.4.0 \ - --hash=sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83 \ - --hash=sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823 +jsonschema==3.2.0 \ + --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ + --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a # via semgrep mccabe==0.6.1 \ --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f # via flake8 +mypy-extensions==0.4.3 \ + --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 + # via black packaging==21.3 \ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via # pytest # semgrep -peewee==3.14.8 \ - --hash=sha256:01bd7f734defb08d7a3346a0c0ca7011bc8d0d685934ec0e001b3371d522ec53 +pathspec==0.9.0 \ + --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ + --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1 + # via black +peewee==3.14.10 \ + --hash=sha256:23271422b332c82d30c92597dee905ee831b56c6d99c33e05901e6891c75fe15 # via semgrep pep517==0.12.0 \ --hash=sha256:931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \ --hash=sha256:dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161 # via pip-tools -pip-tools==6.4.0 \ - --hash=sha256:65553a15b1ba34be5e43889345062e38fb9b219ffa23b084ca0d4c4039b6f53b \ - --hash=sha256:bb2c3272bc229b4a6d25230ebe255823aba1aa466a0d698c48ab7eb5ab7efdc9 +pip-tools==6.6.2 \ + --hash=sha256:6b486548e5a139e30e4c4a225b3b7c2d46942a9f6d1a91143c21b1de4d02fd9b \ + --hash=sha256:f638503a9f77d98d9a7d72584b1508d3f82ed019b8fab24f4e5ad078c1b8c95e # via -r requirements/dev-requirements.in +platformdirs==2.5.2 \ + --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ + --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 + # via black pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 @@ -154,9 +202,9 @@ pyflakes==2.4.0 \ --hash=sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c \ --hash=sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e # via flake8 -pyparsing==3.0.6 \ - --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \ - --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81 +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via packaging pyrsistent==0.18.1 \ --hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \ @@ -181,9 +229,9 @@ pyrsistent==0.18.1 \ --hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \ --hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6 # via jsonschema -pytest==6.2.5 \ - --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \ - --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134 +pytest==7.1.2 \ + --hash=sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c \ + --hash=sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45 # via # -r requirements/dev-requirements.in # pytest-cov @@ -192,17 +240,17 @@ pytest-cov==3.0.0 \ --hash=sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6 \ --hash=sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470 # via -r requirements/dev-requirements.in -pytest-mock==3.6.1 \ - --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ - --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 +pytest-mock==3.7.0 \ + --hash=sha256:5112bd92cc9f186ee96e1a92efc84969ea494939c3aead39c50f421c4cc69534 \ + --hash=sha256:6cff27cec936bf81dc5ee87f07132b807bcda51106b5ec4b90a04331cba76231 # via -r requirements/dev-requirements.in requests==2.27.1 \ --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d # via semgrep -ruamel.yaml==0.17.20 \ - --hash=sha256:4b8a33c1efb2b443a93fcaafcfa4d2e445f8e8c29c528d9f5cdafb7cc9e4004c \ - --hash=sha256:810eef9c46523a3f77479c66267a4708255ebe806a2d540078408c2227f011af +ruamel.yaml==0.17.21 \ + --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ + --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af # via semgrep ruamel.yaml.clib==0.2.6 \ --hash=sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd \ @@ -231,35 +279,65 @@ ruamel.yaml.clib==0.2.6 \ --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c # via ruamel.yaml -semgrep==0.78.0 \ - --hash=sha256:0ae8f6fb9b9d5e9920d25662dd92dd0c20d32752b8cd154c1bb0ceca37b8e380 \ - --hash=sha256:5abb5ecc7a536614a6ee95b2dee762fe50f0cf63a41cc23ef21798c7b94fe1af \ - --hash=sha256:7f58e7a795f8d6d419f6ae13d44565c5075ab08e07054c24832752dd4f20d860 +semgrep==0.93.0 \ + --hash=sha256:02fce22e81e68ded60f67f8cb2979a8014ac5bb7bceb93c2553d8ccc03211259 \ + --hash=sha256:1aa9788e507286694271234cd97f2bb19d741e5ae614f0fbb545715a7d0e872d \ + --hash=sha256:3de9c36cbafef772d453f77da9b6f3c2239975b0a29e0674773bf04a0756b1ec # via -r requirements/dev-requirements.in -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f - # via pytest -tomli==2.0.0 \ - --hash=sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224 \ - --hash=sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1 +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via jsonschema +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via + # black # coverage # pep517 -tqdm==4.62.3 \ - --hash=sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c \ - --hash=sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d + # pytest +tqdm==4.64.0 \ + --hash=sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d \ + --hash=sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6 # via semgrep -typing-extensions==4.0.1 \ - --hash=sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e \ - --hash=sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b +typed-ast==1.5.4 \ + --hash=sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2 \ + --hash=sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1 \ + --hash=sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6 \ + --hash=sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62 \ + --hash=sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac \ + --hash=sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d \ + --hash=sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc \ + --hash=sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2 \ + --hash=sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97 \ + --hash=sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35 \ + --hash=sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6 \ + --hash=sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1 \ + --hash=sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4 \ + --hash=sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c \ + --hash=sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e \ + --hash=sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec \ + --hash=sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f \ + --hash=sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72 \ + --hash=sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47 \ + --hash=sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72 \ + --hash=sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe \ + --hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \ + --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ + --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 + # via black +typing-extensions==4.2.0 \ + --hash=sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708 \ + --hash=sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376 # via + # black # importlib-metadata - # jsonschema -urllib3==1.26.8 \ - --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \ - --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c - # via requests +urllib3==1.26.9 \ + --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ + --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e + # via + # requests + # semgrep wcmatch==8.3 \ --hash=sha256:371072912398af61d1e4e78609e18801c6faecd3cb36c54c82556a60abc965db \ --hash=sha256:7141d2c85314253f16b38cb3d6cc0fb612918d407e1df3ccc2be7c86cc259c22 @@ -268,22 +346,22 @@ wheel==0.37.1 \ --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 # via pip-tools -zipp==3.7.0 \ - --hash=sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d \ - --hash=sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375 +zipp==3.8.0 \ + --hash=sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad \ + --hash=sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099 # via # importlib-metadata - # importlib-resources # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==21.3.1 \ - --hash=sha256:deaf32dcd9ab821e359cd8330786bcd077604b5c5730c0b096eda46f95c24a2d \ - --hash=sha256:fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a +pip==22.1.1 \ + --hash=sha256:8dfb15d8a1c3d3085a4cbe11f29e19527dfaf2ba99354326fd62cec013eaee81 \ + --hash=sha256:e7bcf0b2cbdec2af84cc1b7b79b25fdbd7228fbdb61a4dca0b82810d0ba9d18b # via pip-tools -setuptools==60.5.0 \ - --hash=sha256:2404879cda71495fc4d5cbc445ed52fdaddf352b36e40be8dcc63147cb4edabe \ - --hash=sha256:68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90 +setuptools==62.3.2 \ + --hash=sha256:68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36 \ + --hash=sha256:a43bdedf853c670e5fed28e5623403bad2f73cf02f9a2774e91def6bda8265a7 # via + # jsonschema # pip-tools # semgrep From 2d7829aae172bbe1a06bae9c945069d43a1ddf40 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 24 May 2022 13:20:34 -0700 Subject: [PATCH 499/751] add black makefile target and apply changes --- Makefile | 10 ++- securedrop_export/__init__.py | 2 +- securedrop_export/disk/actions.py | 121 +++++++++++++++++------------ securedrop_export/entrypoint.py | 9 ++- securedrop_export/exceptions.py | 42 +++++----- securedrop_export/export.py | 20 +++-- securedrop_export/main.py | 15 +++- securedrop_export/print/actions.py | 83 ++++++++++++-------- securedrop_export/utils.py | 4 +- setup.py | 6 +- tests/disk/test_actions.py | 33 +++++--- tests/print/test_actions.py | 71 ++++++++++------- tests/test_export.py | 117 ++++++++++++++++++++-------- tests/test_main.py | 1 + 14 files changed, 335 insertions(+), 199 deletions(-) diff --git a/Makefile b/Makefile index 62f1b7101..ea83824cc 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,11 @@ update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the late done < 'requirements/dev-requirements.in' .PHONY: check -check: lint semgrep test ## Run linter and tests +check: lint semgrep test check-black ## Run linter and tests + +.PHONY: check-black +check-black: ## Check Python source code formatting with black + @black --check --diff ./ TESTS ?= tests .PHONY: test @@ -51,6 +55,10 @@ test: ## Run tests lint: ## Run linter flake8 securedrop_export/ tests/ +.PHONY: black +black: ## Format Python source code with black + @black ./ + SEMGREP_FLAGS := --exclude "tests/" --error --strict --verbose .PHONY: semgrep diff --git a/securedrop_export/__init__.py b/securedrop_export/__init__.py index 44b18069b..01ef12070 100644 --- a/securedrop_export/__init__.py +++ b/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = '0.2.6' +__version__ = "0.2.6" diff --git a/securedrop_export/disk/actions.py b/securedrop_export/disk/actions.py index 072cb93fc..9619aba03 100644 --- a/securedrop_export/disk/actions.py +++ b/securedrop_export/disk/actions.py @@ -29,30 +29,37 @@ def check_usb_connected(self, exit=False) -> None: usb_devices = self._get_connected_usbs() if len(usb_devices) == 0: - logger.info('0 USB devices connected') + logger.info("0 USB devices connected") self.submission.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) elif len(usb_devices) == 1: - logger.info('1 USB device connected') + logger.info("1 USB device connected") self.device = usb_devices[0] if exit: self.submission.exit_gracefully(ExportStatus.USB_CONNECTED.value) elif len(usb_devices) > 1: - logger.info('>1 USB devices connected') + logger.info(">1 USB devices connected") # Return generic error until freedomofpress/securedrop-export/issues/25 self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) def _get_connected_usbs(self) -> List[str]: - logger.info('Performing usb preflight') + logger.info("Performing usb preflight") # List all block devices attached to VM that are disks and not partitions. try: - lsblk = subprocess.Popen(["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - grep = subprocess.Popen(["grep", "disk"], stdin=lsblk.stdout, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + lsblk = subprocess.Popen( + ["lsblk", "-o", "NAME,TYPE"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + grep = subprocess.Popen( + ["grep", "disk"], + stdin=lsblk.stdout, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) command_output = grep.stdout.readlines() # The first word in each element of the command_output list is the device name - attached_devices = [x.decode('utf8').split()[0] for x in command_output] + attached_devices = [x.decode("utf8").split()[0] for x in command_output] except subprocess.CalledProcessError: self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) @@ -62,8 +69,9 @@ def _get_connected_usbs(self) -> List[str]: try: removable = subprocess.check_output( ["cat", "/sys/class/block/{}/removable".format(device)], - stderr=subprocess.PIPE) - is_removable = int(removable.decode('utf8').strip()) + stderr=subprocess.PIPE, + ) + is_removable = int(removable.decode("utf8").strip()) except subprocess.CalledProcessError: is_removable = False @@ -75,28 +83,36 @@ def _get_connected_usbs(self) -> List[str]: def set_extracted_device_name(self): try: device_and_partitions = subprocess.check_output( - ["lsblk", "-o", "TYPE", "--noheadings", self.device], stderr=subprocess.PIPE) + ["lsblk", "-o", "TYPE", "--noheadings", self.device], + stderr=subprocess.PIPE, + ) # we don't support multiple partitions - partition_count = device_and_partitions.decode('utf-8').split('\n').count('part') + partition_count = ( + device_and_partitions.decode("utf-8").split("\n").count("part") + ) if partition_count > 1: logger.debug("multiple partitions not supported") - self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) + self.submission.exit_gracefully( + ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + ) # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted - self.device = self.device if partition_count == 0 else self.device + '1' + self.device = self.device if partition_count == 0 else self.device + "1" except subprocess.CalledProcessError: - self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value) + self.submission.exit_gracefully( + ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + ) def check_luks_volume(self): # cryptsetup isLuks returns 0 if the device is a luks volume # subprocess with throw if the device is not luks (rc !=0) - logger.info('Checking if volume is luks-encrypted') + logger.info("Checking if volume is luks-encrypted") self.set_extracted_device_name() logger.debug("checking if {} is luks encrypted".format(self.device)) self.submission.safe_check_call( command=["sudo", "cryptsetup", "isLuks", self.device], - error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value, ) self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) @@ -104,30 +120,32 @@ def unlock_luks_volume(self, encryption_key): try: # get the encrypted device name self.set_extracted_device_name() - luks_header = subprocess.check_output(["sudo", "cryptsetup", "luksDump", self.device]) - luks_header_list = luks_header.decode('utf-8').split('\n') + luks_header = subprocess.check_output( + ["sudo", "cryptsetup", "luksDump", self.device] + ) + luks_header_list = luks_header.decode("utf-8").split("\n") for line in luks_header_list: - items = line.split('\t') - if 'UUID' in items[0]: - self.encrypted_device = 'luks-' + items[1] + items = line.split("\t") + if "UUID" in items[0]: + self.encrypted_device = "luks-" + items[1] # the luks device is already unlocked - if os.path.exists(os.path.join('/dev/mapper/', self.encrypted_device)): - logger.debug('Device already unlocked') + if os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): + logger.debug("Device already unlocked") return - logger.debug('Unlocking luks volume {}'.format(self.encrypted_device)) + logger.debug("Unlocking luks volume {}".format(self.encrypted_device)) p = subprocess.Popen( ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE + stderr=subprocess.PIPE, ) - logger.debug('Passing key') + logger.debug("Passing key") p.communicate(input=str.encode(encryption_key, "utf-8")) rc = p.returncode if rc != 0: - logger.error('Bad phassphrase for {}'.format(self.encrypted_device)) + logger.error("Bad phassphrase for {}".format(self.encrypted_device)) self.submission.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) except subprocess.CalledProcessError: self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) @@ -135,10 +153,11 @@ def unlock_luks_volume(self, encryption_key): def mount_volume(self): # If the drive is already mounted then we don't need to mount it again output = subprocess.check_output( - ["lsblk", "-o", "MOUNTPOINT", "--noheadings", self.device]) - mountpoint = output.decode('utf-8').strip() + ["lsblk", "-o", "MOUNTPOINT", "--noheadings", self.device] + ) + mountpoint = output.decode("utf-8").strip() if mountpoint: - logger.debug('The device is already mounted') + logger.debug("The device is already mounted") self.mountpoint = mountpoint return @@ -146,18 +165,18 @@ def mount_volume(self): if not os.path.exists(self.mountpoint): self.submission.safe_check_call( command=["sudo", "mkdir", self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT + error_message=ExportStatus.ERROR_USB_MOUNT, ) mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) - logger.info('Mounting {}'.format(mapped_device_path)) + logger.info("Mounting {}".format(mapped_device_path)) self.submission.safe_check_call( command=["sudo", "mount", mapped_device_path, self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT.value + error_message=ExportStatus.ERROR_USB_MOUNT.value, ) self.submission.safe_check_call( command=["sudo", "chown", "-R", "user:user", self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT.value + error_message=ExportStatus.ERROR_USB_MOUNT.value, ) def copy_submission(self): @@ -168,26 +187,30 @@ def copy_submission(self): target_path = os.path.join(self.mountpoint, self.submission.target_dirname) subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(self.submission.tmpdir, "export_data/") - logger.info('Copying file to {}'.format(self.submission.target_dirname)) + logger.info("Copying file to {}".format(self.submission.target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) - logger.info('File copied successfully to {}'.format(self.submission.target_dirname)) + logger.info( + "File copied successfully to {}".format(self.submission.target_dirname) + ) except (subprocess.CalledProcessError, OSError): self.submission.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) finally: - logger.info('Syncing filesystems') + logger.info("Syncing filesystems") subprocess.check_call(["sync"]) if os.path.exists(self.mountpoint): - logger.info('Unmounting drive from {}'.format(self.mountpoint)) + logger.info("Unmounting drive from {}".format(self.mountpoint)) subprocess.check_call(["sudo", "umount", self.mountpoint]) - if os.path.exists(os.path.join('/dev/mapper', self.encrypted_device)): - logger.info('Locking luks volume {}'.format(self.encrypted_device)) + if os.path.exists(os.path.join("/dev/mapper", self.encrypted_device)): + logger.info("Locking luks volume {}".format(self.encrypted_device)) subprocess.check_call( ["sudo", "cryptsetup", "luksClose", self.encrypted_device] ) - logger.info('Deleting temporary directory {}'.format(self.submission.tmpdir)) + logger.info( + "Deleting temporary directory {}".format(self.submission.tmpdir) + ) subprocess.check_call(["rm", "-rf", self.submission.tmpdir]) sys.exit(0) @@ -197,7 +220,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - logger.info('Export archive is usb-test') + logger.info("Export archive is usb-test") self.check_usb_connected(exit=True) @@ -206,7 +229,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - logger.info('Export archive is disk-test') + logger.info("Export archive is disk-test") # check_usb_connected looks for the drive, sets the drive to use self.check_usb_connected() self.check_luks_volume() @@ -217,13 +240,13 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - logger.info('Export archive is disk') + logger.info("Export archive is disk") # check_usb_connected looks for the drive, sets the drive to use self.check_usb_connected() - logger.info('Unlocking volume') + logger.info("Unlocking volume") # exports all documents in the archive to luks-encrypted volume self.unlock_luks_volume(self.submission.archive_metadata.encryption_key) - logger.info('Mounting volume') + logger.info("Mounting volume") self.mount_volume() - logger.info('Copying submission to drive') + logger.info("Copying submission to drive") self.copy_submission() diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index b82e8e3bc..3bb86baad 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -28,8 +28,9 @@ def configure_logging(): log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) # set logging format - log_fmt = ('%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) ' - '%(levelname)s: %(message)s') + log_fmt = ( + "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" + ) formatter = logging.Formatter(log_fmt) handler = TimedRotatingFileHandler(log_file) @@ -60,13 +61,13 @@ def start(): msg = "ERROR_LOGGING" export.SDExport.exit_gracefully(msg) - logger.info('Starting SecureDrop Export {}'.format(__version__)) + logger.info("Starting SecureDrop Export {}".format(__version__)) my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) try: # Halt immediately if target file is absent if not os.path.exists(my_sub.archive): - logger.info('Archive is not found {}.'.format(my_sub.archive)) + logger.info("Archive is not found {}.".format(my_sub.archive)) msg = "ERROR_FILE_NOT_FOUND" my_sub.exit_gracefully(msg) main.__main__(my_sub) diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index e144a1684..11855c0ff 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -4,37 +4,37 @@ class ExportStatus(Enum): # General errors - ERROR_FILE_NOT_FOUND = 'ERROR_FILE_NOT_FOUND' - ERROR_EXTRACTION = 'ERROR_EXTRACTION' - ERROR_METADATA_PARSING = 'ERROR_METADATA_PARSING' - ERROR_ARCHIVE_METADATA = 'ERROR_ARCHIVE_METADATA' - ERROR_USB_CONFIGURATION = 'ERROR_USB_CONFIGURATION' - ERROR_GENERIC = 'ERROR_GENERIC' + ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" + ERROR_EXTRACTION = "ERROR_EXTRACTION" + ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" + ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" + ERROR_USB_CONFIGURATION = "ERROR_USB_CONFIGURATION" + ERROR_GENERIC = "ERROR_GENERIC" # USB preflight related errors - USB_CONNECTED = 'USB_CONNECTED' - USB_NOT_CONNECTED = 'USB_NOT_CONNECTED' - ERROR_USB_CHECK = 'ERROR_USB_CHECK' + USB_CONNECTED = "USB_CONNECTED" + USB_NOT_CONNECTED = "USB_NOT_CONNECTED" + ERROR_USB_CHECK = "ERROR_USB_CHECK" # USB Disk preflight related errors - USB_ENCRYPTED = 'USB_ENCRYPTED' - USB_ENCRYPTION_NOT_SUPPORTED = 'USB_ENCRYPTION_NOT_SUPPORTED' - USB_DISK_ERROR = 'USB_DISK_ERROR' + USB_ENCRYPTED = "USB_ENCRYPTED" + USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" + USB_DISK_ERROR = "USB_DISK_ERROR" # Printer preflight related errors - ERROR_MULTIPLE_PRINTERS_FOUND = 'ERROR_MULTIPLE_PRINTERS_FOUND' - ERROR_PRINTER_NOT_FOUND = 'ERROR_PRINTER_NOT_FOUND' - ERROR_PRINTER_NOT_SUPPORTED = 'ERROR_PRINTER_NOT_SUPPORTED' - ERROR_PRINTER_DRIVER_UNAVAILABLE = 'ERROR_PRINTER_DRIVER_UNAVAILABLE' - ERROR_PRINTER_INSTALL = 'ERROR_PRINTER_INSTALL' + ERROR_MULTIPLE_PRINTERS_FOUND = "ERROR_MULTIPLE_PRINTERS_FOUND" + ERROR_PRINTER_NOT_FOUND = "ERROR_PRINTER_NOT_FOUND" + ERROR_PRINTER_NOT_SUPPORTED = "ERROR_PRINTER_NOT_SUPPORTED" + ERROR_PRINTER_DRIVER_UNAVAILABLE = "ERROR_PRINTER_DRIVER_UNAVAILABLE" + ERROR_PRINTER_INSTALL = "ERROR_PRINTER_INSTALL" # Disk export errors - USB_BAD_PASSPHRASE = 'USB_BAD_PASSPHRASE' - ERROR_USB_MOUNT = 'ERROR_USB_MOUNT' - ERROR_USB_WRITE = 'ERROR_USB_WRITE' + USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" + ERROR_USB_MOUNT = "ERROR_USB_MOUNT" + ERROR_USB_WRITE = "ERROR_USB_WRITE" # Printer export errors - ERROR_PRINT = 'ERROR_PRINT' + ERROR_PRINT = "ERROR_PRINT" class TimeoutException(Exception): diff --git a/securedrop_export/export.py b/securedrop_export/export.py index ee7f2c520..81a13d2ee 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -29,7 +29,7 @@ class Metadata(object): "disk-test", # disk preflight test "printer", "printer-test", # print test page - "printer-preflight" + "printer-preflight", ] SUPPORTED_ENCRYPTION_METHODS = ["luks"] @@ -38,28 +38,26 @@ def __init__(self, archive_path): try: with open(self.metadata_path) as f: - logger.info('Parsing archive metadata') + logger.info("Parsing archive metadata") json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) self.encryption_method = json_config.get("encryption_method", None) - self.encryption_key = json_config.get( - "encryption_key", None - ) + self.encryption_key = json_config.get("encryption_key", None) logger.info( - 'Exporting to device {} with encryption_method {}'.format( + "Exporting to device {} with encryption_method {}".format( self.export_method, self.encryption_method ) ) except Exception: - logger.error('Metadata parsing failure') + logger.error("Metadata parsing failure") raise def is_valid(self): - logger.info('Validating metadata contents') + logger.info("Validating metadata contents") if self.export_method not in self.SUPPORTED_EXPORT_METHODS: logger.error( - 'Archive metadata: Export method {} is not supported'.format( + "Archive metadata: Export method {} is not supported".format( self.export_method ) ) @@ -68,7 +66,7 @@ def is_valid(self): if self.export_method == "disk": if self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS: logger.error( - 'Archive metadata: Encryption method {} is not supported'.format( + "Archive metadata: Encryption method {} is not supported".format( self.encryption_method ) ) @@ -103,7 +101,7 @@ def exit_gracefully(self, msg, e=False): since non-zero exit values will cause system to try alternative solutions for mimetype handling, which we want to avoid. """ - logger.info('Exiting with message: {}'.format(msg)) + logger.info("Exiting with message: {}".format(msg)) if not e: sys.stderr.write(msg) sys.stderr.write("\n") diff --git a/securedrop_export/main.py b/securedrop_export/main.py index bbdb25f68..042c0cd9b 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -2,9 +2,16 @@ from securedrop_export import export from securedrop_export.exceptions import ExportStatus -from securedrop_export.print.actions import PrintExportAction, PrintTestPageAction, \ - PrintPreflightAction -from securedrop_export.disk.actions import DiskTestAction, DiskExportAction, USBTestAction +from securedrop_export.print.actions import ( + PrintExportAction, + PrintTestPageAction, + PrintPreflightAction, +) +from securedrop_export.disk.actions import ( + DiskTestAction, + DiskExportAction, + USBTestAction, +) logger = logging.getLogger(__name__) @@ -21,7 +28,7 @@ def __main__(submission): submission.exit_gracefully(ExportStatus.ERROR_ARCHIVE_METADATA.value) if submission.archive_metadata.export_method == "start-vm": - submission.exit_gracefully('') + submission.exit_gracefully("") if submission.archive_metadata.export_method == "usb-test": action = USBTestAction(submission) diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index f0bc5adf3..1235bccec 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -36,38 +36,47 @@ def wait_for_print(self): printer_idle_string = "printer {} is idle".format(self.printer_name) while True: try: - logger.info('Running lpstat waiting for printer {}'.format(self.printer_name)) + logger.info( + "Running lpstat waiting for printer {}".format(self.printer_name) + ) output = subprocess.check_output(["lpstat", "-p", self.printer_name]) if printer_idle_string in output.decode("utf-8"): - logger.info('Print completed') + logger.info("Print completed") return True else: time.sleep(5) except subprocess.CalledProcessError: self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) except TimeoutException: - logger.error('Timeout waiting for printer {}'.format(self.printer_name)) + logger.error("Timeout waiting for printer {}".format(self.printer_name)) self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) return True def check_printer_setup(self) -> None: try: - logger.info('Searching for printer') + logger.info("Searching for printer") output = subprocess.check_output(["sudo", "lpinfo", "-v"]) - printers = [x for x in output.decode('utf-8').split() if "usb://" in x] + printers = [x for x in output.decode("utf-8").split() if "usb://" in x] if not printers: - logger.info('No usb printers connected') - self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) - - supported_printers = \ - [p for p in printers if any(sub in p for sub in ("Brother", "LaserJet"))] + logger.info("No usb printers connected") + self.submission.exit_gracefully( + ExportStatus.ERROR_PRINTER_NOT_FOUND.value + ) + + supported_printers = [ + p for p in printers if any(sub in p for sub in ("Brother", "LaserJet")) + ] if not supported_printers: - logger.info('{} are unsupported printers'.format(printers)) - self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + logger.info("{} are unsupported printers".format(printers)) + self.submission.exit_gracefully( + ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value + ) if len(supported_printers) > 1: - logger.info('Too many usb printers connected') - self.submission.exit_gracefully(ExportStatus.ERROR_MULTIPLE_PRINTERS_FOUND.value) + logger.info("Too many usb printers connected") + self.submission.exit_gracefully( + ExportStatus.ERROR_MULTIPLE_PRINTERS_FOUND.value + ) printer_uri = printers[0] printer_ppd = self.install_printer_ppd(printer_uri) @@ -88,25 +97,31 @@ def get_printer_uri(self): for line in output.split(): if "usb://" in line.decode("utf-8"): printer_uri = line.decode("utf-8") - logger.info('lpinfo usb printer: {}'.format(printer_uri)) + logger.info("lpinfo usb printer: {}".format(printer_uri)) # verify that the printer is supported, else exit if printer_uri == "": # No usb printer is connected - logger.info('No usb printers connected') + logger.info("No usb printers connected") self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) elif not any(x in printer_uri for x in ("Brother", "LaserJet")): # printer url is a make that is unsupported - logger.info('Printer {} is unsupported'.format(printer_uri)) - self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + logger.info("Printer {} is unsupported".format(printer_uri)) + self.submission.exit_gracefully( + ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value + ) - logger.info('Printer {} is supported'.format(printer_uri)) + logger.info("Printer {} is supported".format(printer_uri)) return printer_uri def install_printer_ppd(self, uri): if not any(x in uri for x in ("Brother", "LaserJet")): - logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) - self.submission.exit_gracefully(msg=ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value) + logger.error( + "Cannot install printer ppd for unsupported printer: {}".format(uri) + ) + self.submission.exit_gracefully( + msg=ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value + ) return if "Brother" in uri: @@ -118,7 +133,7 @@ def install_printer_ppd(self, uri): # Compile and install drivers that are not already installed if not os.path.exists(printer_ppd): - logger.info('Installing printer drivers') + logger.info("Installing printer drivers") self.submission.safe_check_call( command=[ "sudo", @@ -127,14 +142,14 @@ def install_printer_ppd(self, uri): "-d", "/usr/share/cups/model/", ], - error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value + error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value, ) return printer_ppd def setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin - logger.info('Setting up printer {}'.format(self.printer_name)) + logger.info("Setting up printer {}".format(self.printer_name)) self.submission.safe_check_call( command=[ "sudo", @@ -147,13 +162,13 @@ def setup_printer(self, printer_uri, printer_ppd): "-P", printer_ppd, "-u", - "allow:user" + "allow:user", ], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value + error_message=ExportStatus.ERROR_PRINTER_INSTALL.value, ) def print_test_page(self): - logger.info('Printing test page') + logger.info("Printing test page") self.print_file("/usr/share/cups/data/testprint") def print_all_files(self): @@ -187,20 +202,20 @@ def print_file(self, file_to_print): # If the file to print is an (open)office document, we need to call unoconf to # convert the file to pdf as printer drivers do not support this format if self.is_open_office_file(file_to_print): - logger.info('Converting Office document to pdf') + logger.info("Converting Office document to pdf") folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) self.submission.safe_check_call( command=["unoconv", "-o", converted_path, file_to_print], - error_message=ExportStatus.ERROR_PRINT.value + error_message=ExportStatus.ERROR_PRINT.value, ) file_to_print = converted_path - logger.info('Sending file to printer {}'.format(self.printer_name)) + logger.info("Sending file to printer {}".format(self.printer_name)) self.submission.safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], - error_message=ExportStatus.ERROR_PRINT.value + error_message=ExportStatus.ERROR_PRINT.value, ) @@ -209,7 +224,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - logger.info('Export archive is printer') + logger.info("Export archive is printer") self.check_printer_setup() # prints all documents in the archive self.print_all_files() @@ -220,7 +235,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - logger.info('Export archive is printer-test') + logger.info("Export archive is printer-test") self.check_printer_setup() # Prints a test page to ensure the printer is functional self.print_test_page() @@ -231,5 +246,5 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - logger.info('Export archive is printer-preflight') + logger.info("Export archive is printer-preflight") self.check_printer_setup() diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py index 219d0e963..f5e1229ce 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/utils.py @@ -101,7 +101,9 @@ def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: if filename_or_filepath.is_absolute(): base_path = filename_or_filepath else: - base_path = Path.cwd() # use cwd so we can next ensure relative path does not traverse up + base_path = ( + Path.cwd() + ) # use cwd so we can next ensure relative path does not traverse up try: relative_path = relative_filepath(filename_or_filepath, base_path) diff --git a/setup.py b/setup.py index c13b851e9..d21514991 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ url="https://github.com/freedomofpress/securedrop-export", packages=setuptools.find_packages(exclude=["docs", "tests"]), package_data={ - 'securedrop_export': ['VERSION'], + "securedrop_export": ["VERSION"], }, classifiers=( "Development Status :: 3 - Alpha", @@ -31,5 +31,7 @@ "Intended Audience :: Developers", "Operating System :: OS Independent", ), - entry_points={"console_scripts": ["send-to-usb = securedrop_export.entrypoint:start"]}, + entry_points={ + "console_scripts": ["send-to-usb = securedrop_export.entrypoint:start"] + }, ) diff --git a/tests/disk/test_actions.py b/tests/disk/test_actions.py index c34998598..d82da2791 100644 --- a/tests/disk/test_actions.py +++ b/tests/disk/test_actions.py @@ -26,16 +26,19 @@ def test_usb_precheck_disconnected(capsys, mocker): # Popen call returns lsblk output command_output = mock.MagicMock() command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=[b"sda disk\n", b"sdb disk\n"]) + command_output.stdout.readlines = mock.MagicMock( + return_value=[b"sda disk\n", b"sdb disk\n"] + ) mocker.patch("subprocess.Popen", return_value=command_output) # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=[b'0\n', b'0\n']) + mocker.patch("subprocess.check_output", return_value=[b"0\n", b"0\n"]) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_output", - side_effect=CalledProcessError(1, 'check_output')) + mocker.patch( + "subprocess.check_output", side_effect=CalledProcessError(1, "check_output") + ) action.check_usb_connected(exit=True) @@ -75,7 +78,9 @@ def test_usb_precheck_multiple_devices_connected(capsys, mocker): # Popen call returns lsblk output command_output = mock.MagicMock() command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n", b"sdc disk\n"]) + command_output.stdout.readlines = mock.MagicMock( + return_value=[b"sdb disk\n", b"sdc disk\n"] + ) mocker.patch("subprocess.Popen", return_value=command_output) # check_output returns removable status @@ -166,8 +171,9 @@ def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): # Here we need to mock the exit_gracefully method with a side effect otherwise # program execution will continue after exit_gracefully and exit_gracefully # may be called a second time. - mocked_exit = mocker.patch.object(submission, "exit_gracefully", - side_effect=lambda x: sys.exit(0)) + mocked_exit = mocker.patch.object( + submission, "exit_gracefully", side_effect=lambda x: sys.exit(0) + ) # Output of `lsblk -o TYPE --noheadings DEVICE_NAME` when a drive has multiple # partitions @@ -189,15 +195,18 @@ def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", - side_effect=lambda msg, e: sys.exit(0)) + mocked_exit = mocker.patch.object( + submission, "exit_gracefully", side_effect=lambda msg, e: sys.exit(0) + ) single_partition_lsblk_output = b"disk\npart\n" mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + mocker.patch( + "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + ) with pytest.raises(SystemExit): action.check_luks_volume() - assert mocked_exit.mock_calls[0][2]['msg'] == expected_message - assert mocked_exit.mock_calls[0][2]['e'] is None + assert mocked_exit.mock_calls[0][2]["msg"] == expected_message + assert mocked_exit.mock_calls[0][2]["e"] is None diff --git a/tests/print/test_actions.py b/tests/print/test_actions.py index c500e8f01..176871d1a 100644 --- a/tests/print/test_actions.py +++ b/tests/print/test_actions.py @@ -40,8 +40,9 @@ def test_get_bad_printer_uri(mocked_call, capsys, mocker): action = PrintExportAction(submission) expected_message = "ERROR_PRINTER_NOT_FOUND" assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", - side_effect=lambda x: sys.exit(0)) + mocked_exit = mocker.patch.object( + submission, "exit_gracefully", side_effect=lambda x: sys.exit(0) + ) with pytest.raises(SystemExit): action.get_printer_uri() @@ -49,24 +50,30 @@ def test_get_bad_printer_uri(mocked_call, capsys, mocker): mocked_exit.assert_called_once_with(expected_message) -@pytest.mark.parametrize('open_office_paths', [ - "/tmp/whatver/thisisadoc.doc" - "/home/user/Downloads/thisisadoc.xlsx" - "/home/user/Downloads/file.odt" - "/tmp/tmpJf83j9/secret.pptx" -]) +@pytest.mark.parametrize( + "open_office_paths", + [ + "/tmp/whatver/thisisadoc.doc" + "/home/user/Downloads/thisisadoc.xlsx" + "/home/user/Downloads/file.odt" + "/tmp/tmpJf83j9/secret.pptx" + ], +) def test_is_open_office_file(capsys, open_office_paths): submission = export.SDExport("", TEST_CONFIG) action = PrintExportAction(submission) assert action.is_open_office_file(open_office_paths) -@pytest.mark.parametrize('open_office_paths', [ - "/tmp/whatver/thisisadoc.doccc" - "/home/user/Downloads/thisisa.xlsx.zip" - "/home/user/Downloads/file.odz" - "/tmp/tmpJf83j9/secret.gpg" -]) +@pytest.mark.parametrize( + "open_office_paths", + [ + "/tmp/whatver/thisisadoc.doccc" + "/home/user/Downloads/thisisa.xlsx.zip" + "/home/user/Downloads/file.odz" + "/tmp/tmpJf83j9/secret.gpg" + ], +) def test_is_not_open_office_file(capsys, open_office_paths): submission = export.SDExport("", TEST_CONFIG) action = PrintExportAction(submission) @@ -77,7 +84,9 @@ def test_is_not_open_office_file(capsys, open_office_paths): def test_install_printer_ppd_laserjet(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) - ppd = action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") + ppd = action.install_printer_ppd( + "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000" + ) assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" @@ -85,7 +94,9 @@ def test_install_printer_ppd_laserjet(mocker): def test_install_printer_ppd_brother(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) - ppd = action.install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") + ppd = action.install_printer_ppd( + "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + ) assert ppd == "/usr/share/cups/model/br7030.ppd" @@ -93,35 +104,43 @@ def test_install_printer_ppd_error_no_driver(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + mocker.patch( + "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + ) - action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") + action.install_printer_ppd( + "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + ) - assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" - assert mocked_exit.mock_calls[0][2]['e'] is None + assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" + assert mocked_exit.mock_calls[0][2]["e"] is None def test_install_printer_ppd_error_not_supported(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + mocker.patch( + "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + ) action.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") - assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_NOT_SUPPORTED" + assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_NOT_SUPPORTED" def test_setup_printer_error(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.check_call", side_effect=CalledProcessError(1, 'check_call')) + mocker.patch( + "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + ) action.setup_printer( "usb://Brother/HL-L2320D%20series?serial=A00000A000000", - "/usr/share/cups/model/br7030.ppd" + "/usr/share/cups/model/br7030.ppd", ) - assert mocked_exit.mock_calls[0][2]['msg'] == "ERROR_PRINTER_INSTALL" - assert mocked_exit.mock_calls[0][2]['e'] is None + assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_INSTALL" + assert mocked_exit.mock_calls[0][2]["e"] is None diff --git a/tests/test_export.py b/tests/test_export.py index b3caf17be..dfaab8667 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -11,7 +11,9 @@ TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") -ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") +ANOTHER_BAD_TEST_CONFIG = os.path.join( + os.path.dirname(__file__), "sd-export-config-bad-2.json" +) def test_extract_tarball(): @@ -21,7 +23,11 @@ def test_extract_tarball(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -45,15 +51,22 @@ def test_extract_tarball(): submission.extract_tarball() - extracted_file_path = os.path.join(submission.tmpdir, "some", "dirs", "file.txt") + extracted_file_path = os.path.join( + submission.tmpdir, "some", "dirs", "file.txt" + ) assert os.path.exists(extracted_file_path) assert oct(os.stat(extracted_file_path).st_mode) == "0o100600" # Subdirectories that are added as members are extracted with 700 permissions - assert oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" + assert ( + oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" + ) # Subdirectories that are not added as members are extracted with 700 permissions # because os.umask(0o077) is set in the SDExport constructor. - assert oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) == "0o40700" + assert ( + oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) + == "0o40700" + ) def test_extract_tarball_with_symlink(): @@ -63,7 +76,11 @@ def test_extract_tarball_with_symlink(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -94,14 +111,20 @@ def test_extract_tarball_raises_if_doing_path_traversal(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") metadata_file_info.size = len(metadata_str) archive.addfile(metadata_file_info, metadata_bytes) content = b"test" - traversed_file_info = tarfile.TarInfo("../../../../../../../../../tmp/traversed") + traversed_file_info = tarfile.TarInfo( + "../../../../../../../../../tmp/traversed" + ) traversed_file_info.size = len(content) archive.addfile(traversed_file_info, BytesIO(content)) archive.close() @@ -111,7 +134,7 @@ def test_extract_tarball_raises_if_doing_path_traversal(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/traversed') + assert not os.path.exists("/tmp/traversed") def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): @@ -127,7 +150,11 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -144,7 +171,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/traversed') + assert not os.path.exists("/tmp/traversed") def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): @@ -160,7 +187,11 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -179,7 +210,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/traversed') + assert not os.path.exists("/tmp/traversed") def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): @@ -195,7 +226,11 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -214,7 +249,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/traversed') + assert not os.path.exists("/tmp/traversed") def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): @@ -228,7 +263,11 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -246,7 +285,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/unsafe') + assert not os.path.exists("/tmp/unsafe") def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): @@ -262,10 +301,16 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): archive_path = os.path.join(temp_dir, "archive.sd-export") symlink_path = os.path.join(temp_dir, "symlink") - os.system(f"ln -s {tmp}/unsafe {symlink_path}") # create symlink to "/tmp/unsafe" + os.system( + f"ln -s {tmp}/unsafe {symlink_path}" + ) # create symlink to "/tmp/unsafe" with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -279,7 +324,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/unsafe') + assert not os.path.exists("/tmp/unsafe") def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to_dir(): @@ -305,7 +350,11 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to os.system(f"ln -s {tmp} {symlink_path}") # create symlink to "/tmp" with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -320,7 +369,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/unsafe') + assert not os.path.exists("/tmp/unsafe") def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): @@ -334,7 +383,11 @@ def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): with tempfile.TemporaryDirectory() as temp_dir: archive_path = os.path.join(temp_dir, "archive.sd-export") with tarfile.open(archive_path, "w:gz") as archive: - metadata = {"device": "disk", "encryption_method": "luks", "encryption_key": "test"} + metadata = { + "device": "disk", + "encryption_method": "luks", + "encryption_key": "test", + } metadata_str = json.dumps(metadata) metadata_bytes = BytesIO(metadata_str.encode("utf-8")) metadata_file_info = tarfile.TarInfo("metadata.json") @@ -353,12 +406,12 @@ def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): with pytest.raises(SystemExit): submission.extract_tarball() - assert not os.path.exists('/tmp/unsafe') + assert not os.path.exists("/tmp/unsafe") def test_exit_gracefully_no_exception(capsys): submission = export.SDExport("testfile", TEST_CONFIG) - test_msg = 'test' + test_msg = "test" with pytest.raises(SystemExit) as sysexit: submission.exit_gracefully(test_msg) @@ -373,12 +426,10 @@ def test_exit_gracefully_no_exception(capsys): def test_exit_gracefully_exception(capsys): submission = export.SDExport("testfile", TEST_CONFIG) - test_msg = 'test' + test_msg = "test" with pytest.raises(SystemExit) as sysexit: - submission.exit_gracefully( - test_msg, e=Exception('BANG!') - ) + submission.exit_gracefully(test_msg, e=Exception("BANG!")) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 @@ -463,11 +514,11 @@ def test_valid_encryption_config(capsys): def test_safe_check_call(capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) - submission.safe_check_call(['ls'], "this will work") + submission.safe_check_call(["ls"], "this will work") mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = "uh oh!!!!" - submission.safe_check_call(['ls', 'kjdsfhkdjfh'], expected_message) + submission.safe_check_call(["ls", "kjdsfhkdjfh"], expected_message) - assert mocked_exit.mock_calls[0][2]['msg'] == expected_message - assert mocked_exit.mock_calls[0][2]['e'] is None + assert mocked_exit.mock_calls[0][2]["msg"] == expected_message + assert mocked_exit.mock_calls[0][2]["e"] is None diff --git a/tests/test_main.py b/tests/test_main.py index d1e43d251..efa2a6e18 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,3 +1,4 @@ from securedrop_export.main import __main__ # noqa: F401 + # This import ensures at least the imports in main.__main__ # are executed during a test run From 2d39314f374f93486578a06ad854782e92f8811a Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 24 May 2022 19:22:30 -0700 Subject: [PATCH 500/751] have CI run linters --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 49f04010e..85645d619 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -18,7 +18,7 @@ common-steps: virtualenv .venv source .venv/bin/activate pip install --require-hashes -r requirements/dev-requirements.txt - make test + make check --keep-going - &install_packaging_dependencies run: From 252511e484a6142f015dfc9f8b2efad341a74986 Mon Sep 17 00:00:00 2001 From: Allie Crevier Date: Tue, 24 May 2022 19:33:31 -0700 Subject: [PATCH 501/751] rebase onto main and run black against new code --- securedrop_export/export.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index 81a13d2ee..fee15371d 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -127,10 +127,12 @@ def safe_check_call(self, command, error_message): subprocess.check_call(command) except subprocess.CalledProcessError as ex: # ppdc emits warnings which should not be treated as user facing errors - if ex.returncode == 0 and \ - ex.stderr is not None and \ - ex.stderr.startswith("ppdc: Warning"): - logger.info('Encountered warning: {}'.format(ex.output)) + if ( + ex.returncode == 0 + and ex.stderr is not None + and ex.stderr.startswith("ppdc: Warning") + ): + logger.info("Encountered warning: {}".format(ex.output)) else: self.exit_gracefully(msg=error_message, e=ex.output) From d82cbe6588d346ad760ded84e3e3e3c0dbe17959 Mon Sep 17 00:00:00 2001 From: ro Date: Wed, 25 May 2022 17:35:11 -0400 Subject: [PATCH 502/751] Use debian:buster CI image --- .circleci/config.yml | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 85645d619..fd43d11c4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,21 +1,23 @@ --- common-steps: - - &removevirtualenv + - &install_deps run: - name: Removes the upstream virtualenv from the original container image - command: sudo pip uninstall virtualenv -y - + name: Install base dependencies for Debian python + command: | + set -e + pip uninstall virtualenv -y || true + apt-get update && apt-get install -y sudo make git gnupg python3 python3-venv - &install_packages run: name: Install packages command: | - sudo apt install libnotify-bin + sudo apt install -y libnotify-bin - &run_tests run: name: Install test requirements and run tests command: | - virtualenv .venv + python3 -m venv .venv source .venv/bin/activate pip install --require-hashes -r requirements/dev-requirements.txt make check --keep-going @@ -25,7 +27,8 @@ common-steps: name: Install Debian packaging dependencies and download wheels command: | mkdir ~/packaging && cd ~/packaging - git config --global --unset url.ssh://git@github.com.insteadof + # local builds may not have an SSH url + git config --global --unset url.ssh://git@github.com.insteadof || true git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging make install-deps @@ -54,20 +57,21 @@ common-steps: command: | cd ~/packaging/securedrop-debian-packaging export PKG_VERSION=1000.0 - export PKG_PATH=/home/circleci/project/dist/securedrop-export-$PKG_VERSION.tar.gz + export PKG_PATH=~/project/dist/securedrop-export-$PKG_VERSION.tar.gz make securedrop-export version: 2 jobs: lint: docker: - - image: circleci/python:3.7 + - image: debian:buster steps: + - *install_deps - checkout - run: name: Install test requirements and run lint command: | - virtualenv .venv + python3 -m venv .venv source .venv/bin/activate pip install --require-hashes -r requirements/dev-requirements.txt make lint @@ -80,18 +84,19 @@ jobs: test-buster: docker: - - image: circleci/python:3.7-buster + - image: debian:buster steps: + - *install_deps - checkout - *install_packages - *run_tests build-buster: docker: - - image: circleci/python:3.7-buster + - image: debian:buster steps: + - *install_deps - checkout - - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball From a5727222a169a6e8b67d17f2261c6fcae891d8f1 Mon Sep 17 00:00:00 2001 From: Gonzalo Bulnes Guilpain Date: Thu, 26 May 2022 15:07:03 +1000 Subject: [PATCH 503/751] Build Debian package from repository instead of tarball This works around a difference of behaviour of the building tools that causes tarball builds to rely on outdated tooling. --- .circleci/config.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4d7b27ebb..c5667f693 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,21 +25,13 @@ common-steps: # previous run step), else return 0. git diff --quiet - - &make_source_tarball - run: - name: Tag and make source tarball - command: | - cd ~/project - ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here - python3 setup.py sdist - - &build_debian_package run: name: Build debian package command: | cd ~/packaging/securedrop-debian-packaging export PKG_VERSION=1000.0 - export PKG_PATH=/home/circleci/project/dist/securedrop-log-$PKG_VERSION.tar.gz + export PKG_PATH=~/project/ make securedrop-log version: 2 @@ -61,7 +53,6 @@ jobs: - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - - *make_source_tarball - *build_debian_package workflows: From 78fe3b7c1767e2d7c084f430a9fa79beebc40f10 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 18 May 2022 12:22:24 -0400 Subject: [PATCH 504/751] Have CI test and build on bullseye too And switch to the standard debian images while we're at it. --- .circleci/config.yml | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c5667f693..0540c1050 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,16 +1,18 @@ --- common-steps: - - &removevirtualenv + - &run_tests run: - name: Removes the upstream virtualenv from the original container image - command: sudo pip uninstall virtualenv -y + name: Run tests + command: | + apt-get update && apt-get install -y python3 + python3 -m unittest - &install_packaging_dependencies run: name: Install Debian packaging dependencies and download wheels command: | + apt-get update && apt-get install -y git git-lfs make sudo mkdir ~/packaging && cd ~/packaging - git config --global --unset url.ssh://git@github.com.insteadof git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging make install-deps @@ -38,19 +40,31 @@ version: 2 jobs: test: docker: - - image: circleci/python:3.7-buster + - image: debian:buster + steps: + - checkout + - *run_tests + test-bullseye: + docker: + - image: debian:bullseye steps: - checkout - - run: - name: Run tests - command: python3 -m unittest + - *run_tests build-buster: docker: - - image: circleci/python:3.7-buster + - image: debian:buster + steps: + - checkout + - *install_packaging_dependencies + - *verify_requirements + - *build_debian_package + + build-bullseye: + docker: + - image: debian:bullseye steps: - checkout - - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *build_debian_package @@ -60,4 +74,6 @@ workflows: per_pr: jobs: - test + - test-bullseye - build-buster + - build-bullseye From 357464d76be65761dca5f04dea4651b6f6d45b2a Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 3 Jun 2022 15:35:20 -0400 Subject: [PATCH 505/751] Add hash for 3.9 pyyaml wheel for bullseye support --- requirements/build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index be41d42ce..37d0982dc 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -3,7 +3,7 @@ charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f -pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 +pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 --hash=sha256:645773490bf785cd110b4a5e47635990c46219b7c4f01b424f0409cf01d12f2b requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 From 6d105b529b63ca0e19dbd4c879b2281d6a8b5992 Mon Sep 17 00:00:00 2001 From: Michael Z Date: Thu, 30 Jun 2022 16:35:22 -0400 Subject: [PATCH 506/751] Always communicate error messages to clients Previously, exit_gracefully did not share the type of error message with the client if the subprocess exception that called the method captured output. This is counter to what we would expect. Co-authored-by: Allie Crevier --- securedrop_export/export.py | 21 +++++++++++---------- tests/test_export.py | 10 +++++++--- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index fee15371d..4ce348536 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -102,18 +102,19 @@ def exit_gracefully(self, msg, e=False): solutions for mimetype handling, which we want to avoid. """ logger.info("Exiting with message: {}".format(msg)) - if not e: + if e: + logger.error("Captured exception output: {}".format(e.output)) + try: + # If the file archive was extracted, delete before returning + if os.path.isdir(self.tmpdir): + shutil.rmtree(self.tmpdir) + # Do this after deletion to avoid giving the client two error messages in case of the + # block above failing sys.stderr.write(msg) sys.stderr.write("\n") - else: - try: - # If the file archive was extracted, delete before returning - if os.path.isdir(self.tmpdir): - shutil.rmtree(self.tmpdir) - logger.error("{}:{}".format(msg, e.output)) - except Exception as ex: - logger.error("Unhandled exception: {}".format(ex)) - sys.stderr.write(ExportStatus.ERROR_GENERIC.value) + except Exception as ex: + logger.error("Unhandled exception: {}".format(ex)) + sys.stderr.write(ExportStatus.ERROR_GENERIC.value) # exit with 0 return code otherwise the os will attempt to open # the file with another application sys.exit(0) diff --git a/tests/test_export.py b/tests/test_export.py index dfaab8667..4c0b81bc3 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -2,6 +2,8 @@ import subprocess # noqa: F401 import tempfile +from unittest import mock + import json import pytest import tarfile @@ -426,16 +428,18 @@ def test_exit_gracefully_no_exception(capsys): def test_exit_gracefully_exception(capsys): submission = export.SDExport("testfile", TEST_CONFIG) - test_msg = "test" + test_msg = "ERROR_GENERIC" with pytest.raises(SystemExit) as sysexit: - submission.exit_gracefully(test_msg, e=Exception("BANG!")) + exception = mock.MagicMock() + exception.output = "BANG!" + submission.exit_gracefully(test_msg, e=exception) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 captured = capsys.readouterr() - assert captured.err == export.ExportStatus.ERROR_GENERIC.value + assert captured.err.rstrip() == export.ExportStatus.ERROR_GENERIC.value assert captured.out == "" From 6fce35b2efa313b3b44d7afd2ee7d253928a8f1e Mon Sep 17 00:00:00 2001 From: Michael Z Date: Thu, 30 Jun 2022 14:21:23 -0400 Subject: [PATCH 507/751] Handle subprocess stderr output in Python 3.9 subprocess.check_call does not raise an exception anymore if there's just output on stderr - hence, we move on to its newer API that allows us to capture stderr and analyze it even if the returncode is 0. It also safely ignores lpadmin driver warnings to allow us to continue to use printer drivers with CUPS. --- securedrop_export/export.py | 23 +++++++++++----------- securedrop_export/print/actions.py | 2 ++ tests/disk/test_actions.py | 13 +++++++++---- tests/print/test_actions.py | 10 +++++----- tests/test_export.py | 31 ++++++++++++++++++++++++++---- 5 files changed, 55 insertions(+), 24 deletions(-) diff --git a/securedrop_export/export.py b/securedrop_export/export.py index fee15371d..348380929 100755 --- a/securedrop_export/export.py +++ b/securedrop_export/export.py @@ -118,23 +118,24 @@ def exit_gracefully(self, msg, e=False): # the file with another application sys.exit(0) - def safe_check_call(self, command, error_message): + def safe_check_call(self, command, error_message, ignore_stderr_startswith=None): """ Safely wrap subprocess.check_output to ensure we always return 0 and log the error messages """ try: - subprocess.check_call(command) - except subprocess.CalledProcessError as ex: - # ppdc emits warnings which should not be treated as user facing errors - if ( - ex.returncode == 0 - and ex.stderr is not None - and ex.stderr.startswith("ppdc: Warning") - ): - logger.info("Encountered warning: {}".format(ex.output)) + err = subprocess.run(command, check=True, capture_output=True).stderr + # ppdc and lpadmin may emit warnings we are aware of which should not be treated as + # user facing errors + if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): + logger.info("Encountered warning: {}".format(err.decode("utf-8"))) + elif err == b"": + # Nothing on stderr and returncode is 0, we're good + pass else: - self.exit_gracefully(msg=error_message, e=ex.output) + self.exit_gracefully(msg=error_message, e=err) + except subprocess.CalledProcessError as ex: + self.exit_gracefully(msg=error_message, e=ex.output) class ExportAction(abc.ABC): diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index 1235bccec..01ffad515 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -143,6 +143,7 @@ def install_printer_ppd(self, uri): "/usr/share/cups/model/", ], error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value, + ignore_stderr_startswith=b"ppdc: Warning", ) return printer_ppd @@ -165,6 +166,7 @@ def setup_printer(self, printer_uri, printer_ppd): "allow:user", ], error_message=ExportStatus.ERROR_PRINTER_INSTALL.value, + ignore_stderr_startswith=b"lpadmin: Printer drivers", ) def print_test_page(self): diff --git a/tests/disk/test_actions.py b/tests/disk/test_actions.py index d82da2791..9c553a205 100644 --- a/tests/disk/test_actions.py +++ b/tests/disk/test_actions.py @@ -134,11 +134,14 @@ def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) -@mock.patch("subprocess.check_call", return_value=0) def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = DiskExportAction(submission) + command_output = mock.MagicMock() + command_output.stderr = b"" + mocker.patch("subprocess.run", return_value=command_output) + expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) @@ -148,7 +151,6 @@ def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -@mock.patch("subprocess.check_call", return_value=0) def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = DiskExportAction(submission) @@ -156,6 +158,10 @@ def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): expected_message = export.ExportStatus.USB_ENCRYPTED.value mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + command_output = mock.MagicMock() + command_output.stderr = b"" + mocker.patch("subprocess.run", return_value=command_output) + action.check_luks_volume() mocked_exit.assert_called_once_with(expected_message) @@ -178,7 +184,6 @@ def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): # Output of `lsblk -o TYPE --noheadings DEVICE_NAME` when a drive has multiple # partitions multi_partition_lsblk_output = b"disk\npart\npart\n" - mocker.patch("subprocess.check_call", return_value=0) mocker.patch("subprocess.check_output", return_value=multi_partition_lsblk_output) with pytest.raises(SystemExit): @@ -202,7 +207,7 @@ def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): single_partition_lsblk_output = b"disk\npart\n" mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) mocker.patch( - "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + "subprocess.run", side_effect=CalledProcessError(1, "run") ) with pytest.raises(SystemExit): diff --git a/tests/print/test_actions.py b/tests/print/test_actions.py index 176871d1a..caeeb8f90 100644 --- a/tests/print/test_actions.py +++ b/tests/print/test_actions.py @@ -80,7 +80,7 @@ def test_is_not_open_office_file(capsys, open_office_paths): assert not action.is_open_office_file(open_office_paths) -@mock.patch("subprocess.check_call") +@mock.patch("subprocess.run") def test_install_printer_ppd_laserjet(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) @@ -90,7 +90,7 @@ def test_install_printer_ppd_laserjet(mocker): assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" -@mock.patch("subprocess.check_call") +@mock.patch("subprocess.run") def test_install_printer_ppd_brother(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) @@ -105,7 +105,7 @@ def test_install_printer_ppd_error_no_driver(mocker): action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) mocker.patch( - "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + "subprocess.run", side_effect=CalledProcessError(1, "run") ) action.install_printer_ppd( @@ -121,7 +121,7 @@ def test_install_printer_ppd_error_not_supported(mocker): action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) mocker.patch( - "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + "subprocess.run", side_effect=CalledProcessError(1, "run") ) action.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") @@ -134,7 +134,7 @@ def test_setup_printer_error(mocker): action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) mocker.patch( - "subprocess.check_call", side_effect=CalledProcessError(1, "check_call") + "subprocess.run", side_effect=CalledProcessError(1, "run") ) action.setup_printer( diff --git a/tests/test_export.py b/tests/test_export.py index dfaab8667..602a550fc 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -515,10 +515,33 @@ def test_valid_encryption_config(capsys): def test_safe_check_call(capsys, mocker): submission = export.SDExport("testfile", TEST_CONFIG) submission.safe_check_call(["ls"], "this will work") - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) expected_message = "uh oh!!!!" - submission.safe_check_call(["ls", "kjdsfhkdjfh"], expected_message) + with pytest.raises(SystemExit) as sysexit: + submission.safe_check_call(["ls", "kjdsfhkdjfh"], expected_message) + + assert sysexit.value.code == 0 + + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + assert captured.out == "" + + # This should work too + submission.safe_check_call( + ["python3", "-c", "import sys;sys.stderr.write('hello')"], + expected_message, + ignore_stderr_startswith=b'hello', + ) - assert mocked_exit.mock_calls[0][2]["msg"] == expected_message - assert mocked_exit.mock_calls[0][2]["e"] is None + with pytest.raises(SystemExit) as sysexit: + submission.safe_check_call( + ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], + expected_message, + ignore_stderr_startswith=b'world', + ) + + assert sysexit.value.code == 0 + + captured = capsys.readouterr() + assert captured.err == "{}\n".format(expected_message) + assert captured.out == "" From 66a292857f47f853132ed81c56cdbcf45699d127 Mon Sep 17 00:00:00 2001 From: ro Date: Mon, 4 Jul 2022 15:59:17 -0400 Subject: [PATCH 508/751] Update changelog and version --- VERSION | 2 +- changelog.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index d917d3e26..0ea3a944b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.2 +0.2.0 diff --git a/changelog.md b/changelog.md index 8a5d98b3b..9848e301f 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.0 + + * Supports logging in QubesOS 4.1. + ## 0.1.2 * Uses Qubes domain name instead of system hostname. From 5abf04712bb0635871befd33a0e5d1c06920142a Mon Sep 17 00:00:00 2001 From: ro Date: Mon, 4 Jul 2022 17:31:06 -0400 Subject: [PATCH 509/751] Bump version to 0.4.0 and update changelog --- changelog.md | 7 +++++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 7b6a457e4..2453b0d66 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 0.4.0 + + * Reject JSON with duplicate keys (TOB-SDW-014) (#98) + * Support Debian Bullseye (#100, #97) + * Use reproducible wheels (#81, #85) + * Dependency updates (#82, #88, #91, #93, #95, #96) + ## 0.3.1 * Moved proxy configuration to private volume (#79) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 9e11b32fc..1d0ba9ea1 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.3.1 +0.4.0 From 06043e6f7ed51f3c0a9d53b7272d1b3c3eb3b48b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 3 Jun 2022 16:57:37 -0400 Subject: [PATCH 510/751] Remove optional steps that were only needed for Circle CI images --- .circleci/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fd43d11c4..ecf9ca534 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,6 @@ common-steps: name: Install base dependencies for Debian python command: | set -e - pip uninstall virtualenv -y || true apt-get update && apt-get install -y sudo make git gnupg python3 python3-venv - &install_packages run: From e5d88a61c664b5b5f3f5e8e5eb030797ef9b2db7 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 3 Jun 2022 16:57:56 -0400 Subject: [PATCH 511/751] Add bullseye to CI, drop make_source_tarball step --- .circleci/config.yml | 79 ++++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ecf9ca534..20b50b767 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ common-steps: name: Install base dependencies for Debian python command: | set -e - apt-get update && apt-get install -y sudo make git gnupg python3 python3-venv + apt-get update && apt-get install -y sudo make git git-lfs gnupg python3 python3-venv - &install_packages run: name: Install packages @@ -42,23 +42,34 @@ common-steps: # previous run step), else return 0. git diff --quiet - - &make_source_tarball - run: - name: Tag and make source tarball - command: | - cd ~/project - ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here - python3 setup.py sdist - - &build_debian_package run: name: Build debian package command: | cd ~/packaging/securedrop-debian-packaging export PKG_VERSION=1000.0 - export PKG_PATH=~/project/dist/securedrop-export-$PKG_VERSION.tar.gz + export PKG_PATH=~/project/ make securedrop-export + - &run_lint + run: + name: Install test requirements and run lint + command: | + python3 -m venv .venv + source .venv/bin/activate + pip install --require-hashes -r requirements/dev-requirements.txt + make lint + + - &run_safety + run: + name: Check Python dependencies for CVEs + command: | + set -e + source .venv/bin/activate + make safety + + + version: 2 jobs: lint: @@ -67,19 +78,17 @@ jobs: steps: - *install_deps - checkout - - run: - name: Install test requirements and run lint - command: | - python3 -m venv .venv - source .venv/bin/activate - pip install --require-hashes -r requirements/dev-requirements.txt - make lint - - run: - name: Check Python dependencies for CVEs - command: | - set -e - source .venv/bin/activate - make safety + - *run_lint + - *run_safety + + lint-bullseye: + docker: + - image: debian:buster + steps: + - *install_deps + - checkout + - *run_lint + - *run_safety test-buster: docker: @@ -90,6 +99,15 @@ jobs: - *install_packages - *run_tests + test-bullseye: + docker: + - image: debian:bullseye + steps: + - *install_deps + - checkout + - *install_packages + - *run_tests + build-buster: docker: - image: debian:buster @@ -98,13 +116,26 @@ jobs: - checkout - *install_packaging_dependencies - *verify_requirements - - *make_source_tarball - *build_debian_package + build-bullseye: + docker: + - image: debian:bullseye + steps: + - *install_deps + - checkout + - *install_packaging_dependencies + - *verify_requirements + - *build_debian_package + + workflows: version: 2 securedrop_export_ci: jobs: - lint + - lint-bullseye - test-buster + - test-bullseye - build-buster + - build-bullseye From cc451074a41e2f7c20766e998c969b255592b9f1 Mon Sep 17 00:00:00 2001 From: ro Date: Tue, 5 Jul 2022 16:53:27 -0400 Subject: [PATCH 512/751] fix test format --- tests/disk/test_actions.py | 4 +--- tests/print/test_actions.py | 12 +++--------- tests/test_export.py | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/tests/disk/test_actions.py b/tests/disk/test_actions.py index 9c553a205..7d5d24d2a 100644 --- a/tests/disk/test_actions.py +++ b/tests/disk/test_actions.py @@ -206,9 +206,7 @@ def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): single_partition_lsblk_output = b"disk\npart\n" mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) - mocker.patch( - "subprocess.run", side_effect=CalledProcessError(1, "run") - ) + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) with pytest.raises(SystemExit): action.check_luks_volume() diff --git a/tests/print/test_actions.py b/tests/print/test_actions.py index caeeb8f90..37b2ea9c4 100644 --- a/tests/print/test_actions.py +++ b/tests/print/test_actions.py @@ -104,9 +104,7 @@ def test_install_printer_ppd_error_no_driver(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch( - "subprocess.run", side_effect=CalledProcessError(1, "run") - ) + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) action.install_printer_ppd( "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" @@ -120,9 +118,7 @@ def test_install_printer_ppd_error_not_supported(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch( - "subprocess.run", side_effect=CalledProcessError(1, "run") - ) + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) action.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") @@ -133,9 +129,7 @@ def test_setup_printer_error(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch( - "subprocess.run", side_effect=CalledProcessError(1, "run") - ) + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) action.setup_printer( "usb://Brother/HL-L2320D%20series?serial=A00000A000000", diff --git a/tests/test_export.py b/tests/test_export.py index 41a51659a..fb6f5868d 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -534,14 +534,14 @@ def test_safe_check_call(capsys, mocker): submission.safe_check_call( ["python3", "-c", "import sys;sys.stderr.write('hello')"], expected_message, - ignore_stderr_startswith=b'hello', + ignore_stderr_startswith=b"hello", ) with pytest.raises(SystemExit) as sysexit: submission.safe_check_call( ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], expected_message, - ignore_stderr_startswith=b'world', + ignore_stderr_startswith=b"world", ) assert sysexit.value.code == 0 From 2bed056b2a026f81bb296f0f79341dbb32ab3831 Mon Sep 17 00:00:00 2001 From: ro Date: Tue, 5 Jul 2022 16:46:51 -0400 Subject: [PATCH 513/751] Bump version number and add changelog entry for 0.3.0 --- changelog.md | 7 +++++++ securedrop_export/VERSION | 2 +- securedrop_export/__init__.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 5653795a1..fa42d2297 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 0.3.0 + + * Support Debian Bullseye + * Improve error-handling + * Update dependencies + * Refactor path-traversal check for improved readability + ## 0.2.6 * Further validate target paths diff --git a/securedrop_export/VERSION b/securedrop_export/VERSION index 53a75d673..0d91a54c7 100644 --- a/securedrop_export/VERSION +++ b/securedrop_export/VERSION @@ -1 +1 @@ -0.2.6 +0.3.0 diff --git a/securedrop_export/__init__.py b/securedrop_export/__init__.py index 01ef12070..493f7415d 100644 --- a/securedrop_export/__init__.py +++ b/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.2.6" +__version__ = "0.3.0" From bbe2e9e56b9924e93095bee83df5913db38e9b31 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 1 Sep 2022 18:40:29 -0400 Subject: [PATCH 514/751] Add sha256sum of rebuilt PyYAML wheel on Python 3.10 (bookworm) The wheel is added in . --- requirements/build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 37d0982dc..f69c6fe8d 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -3,7 +3,7 @@ charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f -pyyaml==5.4.1 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 --hash=sha256:645773490bf785cd110b4a5e47635990c46219b7c4f01b424f0409cf01d12f2b +pyyaml==5.4.1 --hash=sha256:24ba69a7c05ba63fef9732bf26cc5d328b2089e525ee87fc9ec572c92f88dd46 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 --hash=sha256:645773490bf785cd110b4a5e47635990c46219b7c4f01b424f0409cf01d12f2b requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 From f1698a91d49c0168abb697f9882c3730cbb84935 Mon Sep 17 00:00:00 2001 From: Michael Z Date: Thu, 20 Oct 2022 12:00:23 -0400 Subject: [PATCH 515/751] Add RTF printing support Merely adds .rtf to the file name extensions that are to be converted by LibreOffice. Fixes #108 --- securedrop_export/print/actions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/actions.py index 01ffad515..78a5e3aa3 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/actions.py @@ -194,6 +194,7 @@ def is_open_office_file(self, filename): ".odt", ".ods", ".odp", + ".rtf", ] for extension in OPEN_OFFICE_FORMATS: if os.path.basename(filename).endswith(extension): From 968c5084b4d6e5d766e3e073b3a523220f5d3546 Mon Sep 17 00:00:00 2001 From: Gonzalo Bulnes Guilpain Date: Wed, 23 Nov 2022 15:14:56 +1100 Subject: [PATCH 516/751] Minor ignore additional virtual env directories Re-generating the dev requirement files can be done by using two vitual environments with Python 3.9 and 3.10 respectively. Using distinctly named directories makes things a little bit quicker. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 894a44cc0..5c46f9c06 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,8 @@ venv/ ENV/ env.bak/ venv.bak/ +.venv39 +.venv310 # Spyder project settings .spyderproject From 4b2bb80a6c7949caa624739d53a5561b7057d184 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 1 Sep 2022 20:01:06 -0400 Subject: [PATCH 517/751] Update CI configuration, add bullseye and bookworm jobs This is copy-pasted from securedrop-client, with steps that don't apply here removed. Some of them, like isort and mypy, really should be added to this repository. --- .circleci/config.yml | 208 ++++++++++++++++++++++++++----------------- 1 file changed, 124 insertions(+), 84 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 20b50b767..7bdae7873 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,46 +1,87 @@ --- common-steps: - - &install_deps + - &install_testing_dependencies run: - name: Install base dependencies for Debian python + name: Install testing dependencies command: | set -e - apt-get update && apt-get install -y sudo make git git-lfs gnupg python3 python3-venv - - &install_packages + apt update && apt install -y git gnupg make python3-dev gnupg python3-venv libnotify-bin + + - &install_build_dependencies run: - name: Install packages + name: Install build dependencies command: | - sudo apt install -y libnotify-bin + set -e + apt update && apt install -y git make sudo - - &run_tests + - &run_unit_tests run: - name: Install test requirements and run tests + name: Install requirements and run unit tests command: | - python3 -m venv .venv + set -e + make venv source .venv/bin/activate - pip install --require-hashes -r requirements/dev-requirements.txt - make check --keep-going + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test + + - &run_lint + run: + name: Run lint, type checking, code formatting + command: | + set -e + make venv + source .venv/bin/activate + make check-black lint + + - &check_security + run: + name: Run static analysis on source code to find security issues + command: | + set -e + make venv + source .venv/bin/activate + make semgrep + + - &check_python_dependencies_for_vulnerabilities + run: + name: Check Python dependencies for known vulnerabilities + command: | + set -e + make venv + source .venv/bin/activate + make safety - &install_packaging_dependencies run: - name: Install Debian packaging dependencies and download wheels + name: Install Debian packaging dependencies and download Python wheels command: | + set -x mkdir ~/packaging && cd ~/packaging - # local builds may not have an SSH url + # local builds may not have an ssh url, so || true git config --global --unset url.ssh://git@github.com.insteadof || true git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging + apt-get update && apt-get install -y sudo make make install-deps PKG_DIR=~/project make requirements - - &verify_requirements + - &check_packaging_requirements run: - name: Ensure that build-requirements.txt and requirements.txt are in sync. + name: Ensure that the same Python requirements are used for packaging and production. command: | cd ~/project - # Return 1 if unstaged changes exist (after `make requirements` in the - # previous run step), else return 0. - git diff --quiet + # Fail if unstaged changes exist (after `make requirements` in the previous run step). + git diff --ignore-matching-lines=# --exit-code + + - &check_testing_requirements + run: + name: Ensure that the same Python requirements are used for development/testing and production. + command: | + set -e + make venv + source .venv/bin/activate + make requirements + git diff --ignore-matching-lines=# --exit-code - &build_debian_package run: @@ -51,91 +92,90 @@ common-steps: export PKG_PATH=~/project/ make securedrop-export - - &run_lint - run: - name: Install test requirements and run lint - command: | - python3 -m venv .venv - source .venv/bin/activate - pip install --require-hashes -r requirements/dev-requirements.txt - make lint - - - &run_safety - run: - name: Check Python dependencies for CVEs - command: | - set -e - source .venv/bin/activate - make safety - - +version: 2.1 -version: 2 jobs: - lint: - docker: - - image: debian:buster + build: + parameters: ¶meters + image: + type: string + docker: &docker + - image: debian:<< parameters.image >> steps: - - *install_deps + - *install_build_dependencies - checkout - - *run_lint - - *run_safety + - *install_packaging_dependencies + - *check_packaging_requirements + - *build_debian_package - lint-bullseye: - docker: - - image: debian:buster + unit-test: + parameters: *parameters + docker: *docker steps: - - *install_deps + - *install_testing_dependencies - checkout - - *run_lint - - *run_safety + - *run_unit_tests + - store_test_results: + path: test-results - test-buster: - docker: - - image: debian:buster + lint: + parameters: *parameters + docker: *docker steps: - - *install_deps + - *install_testing_dependencies - checkout - - *install_packages - - *run_tests + - *run_lint - test-bullseye: - docker: - - image: debian:bullseye + check-security: + parameters: *parameters + docker: *docker steps: - - *install_deps + - *install_testing_dependencies - checkout - - *install_packages - - *run_tests + - *check_security - build-buster: - docker: - - image: debian:buster + check-python-security: + parameters: *parameters + docker: *docker steps: - - *install_deps + - *install_testing_dependencies - checkout - - *install_packaging_dependencies - - *verify_requirements - - *build_debian_package + - *check_python_dependencies_for_vulnerabilities - build-bullseye: - docker: - - image: debian:bullseye + check-testing-requirements: + parameters: *parameters + docker: *docker steps: - - *install_deps + - *install_testing_dependencies - checkout - - *install_packaging_dependencies - - *verify_requirements - - *build_debian_package - + - *check_testing_requirements workflows: - version: 2 securedrop_export_ci: - jobs: - - lint - - lint-bullseye - - test-buster - - test-bullseye - - build-buster - - build-bullseye + jobs: &jobs + - unit-test: + matrix: &matrix + parameters: + image: + - bullseye + - bookworm + - lint: + matrix: *matrix + - check-testing-requirements: + matrix: *matrix + - check-security: + matrix: *matrix + - check-python-security: + matrix: *matrix + - build: + matrix: *matrix + + nightly: + triggers: + - schedule: + cron: "0 6 * * *" + filters: + branches: + only: + - main + jobs: *jobs From 5424a2f8b4602ee51c4956785fa5f3afaa151fcd Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 22 Nov 2022 15:19:51 -0800 Subject: [PATCH 518/751] Update dev-only dependencies and sync requirements. --- requirements/dev-requirements.txt | 566 ++++++++++++++++-------------- requirements/requirements.txt | 2 +- 2 files changed, 307 insertions(+), 261 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 9cc7487ba..49ef8edae 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in @@ -12,30 +12,28 @@ attrs==21.4.0 \ # jsonschema # pytest # semgrep -black==22.3.0 \ - --hash=sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b \ - --hash=sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176 \ - --hash=sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09 \ - --hash=sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a \ - --hash=sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015 \ - --hash=sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79 \ - --hash=sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb \ - --hash=sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20 \ - --hash=sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464 \ - --hash=sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968 \ - --hash=sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82 \ - --hash=sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21 \ - --hash=sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0 \ - --hash=sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265 \ - --hash=sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b \ - --hash=sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a \ - --hash=sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72 \ - --hash=sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce \ - --hash=sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0 \ - --hash=sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a \ - --hash=sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163 \ - --hash=sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad \ - --hash=sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d +black==22.10.0 \ + --hash=sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7 \ + --hash=sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6 \ + --hash=sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650 \ + --hash=sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb \ + --hash=sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d \ + --hash=sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d \ + --hash=sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de \ + --hash=sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395 \ + --hash=sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae \ + --hash=sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa \ + --hash=sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef \ + --hash=sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383 \ + --hash=sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66 \ + --hash=sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87 \ + --hash=sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d \ + --hash=sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0 \ + --hash=sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b \ + --hash=sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458 \ + --hash=sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4 \ + --hash=sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1 \ + --hash=sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff # via -r requirements/dev-requirements.in boltons==21.0.0 \ --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ @@ -44,17 +42,21 @@ boltons==21.0.0 \ # face # glom # semgrep -bracex==2.3 \ - --hash=sha256:6789a715744bcb3359b53c4012dd94be5ab7669c638affe89f670595a3c73cc0 \ - --hash=sha256:a3ce1d8a9fb7acc887e2e60ac5aa269f243d960c34c3d8a541fb672bdb9aa957 +bracex==2.3.post1 \ + --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ + --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 # via wcmatch -certifi==2022.5.18.1 \ - --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ - --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a +build==0.9.0 \ + --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ + --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 + # via pip-tools +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 # via requests -charset-normalizer==2.0.12 \ - --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ - --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests click==8.1.3 \ --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ @@ -64,98 +66,101 @@ click==8.1.3 \ # click-option-group # pip-tools # semgrep -click-option-group==0.5.3 \ - --hash=sha256:9653a2297357335d7325a1827e71ac1245d91c97d959346a7decabd4a52d5354 \ - --hash=sha256:a6e924f3c46b657feb5b72679f7e930f8e5b224b766ab35c91ae4019b4e0615e +click-option-group==0.5.5 \ + --hash=sha256:0f8ca79bc9b1d6fcaafdbe194b17ba1a2dde44ddf19087235c3efed2ad288143 \ + --hash=sha256:78ee474f07a0ca0ef6c0317bb3ebe79387aafb0c4a1e03b1d8b2b0be1e42fc78 # via semgrep -colorama==0.4.4 \ - --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ - --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via semgrep -coverage[toml]==6.4 \ - --hash=sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a \ - --hash=sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6 \ - --hash=sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383 \ - --hash=sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f \ - --hash=sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f \ - --hash=sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f \ - --hash=sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c \ - --hash=sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018 \ - --hash=sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720 \ - --hash=sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3 \ - --hash=sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf \ - --hash=sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211 \ - --hash=sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39 \ - --hash=sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95 \ - --hash=sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41 \ - --hash=sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c \ - --hash=sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166 \ - --hash=sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49 \ - --hash=sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce \ - --hash=sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088 \ - --hash=sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6 \ - --hash=sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426 \ - --hash=sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df \ - --hash=sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632 \ - --hash=sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3 \ - --hash=sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08 \ - --hash=sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65 \ - --hash=sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea \ - --hash=sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701 \ - --hash=sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5 \ - --hash=sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311 \ - --hash=sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7 \ - --hash=sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d \ - --hash=sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61 \ - --hash=sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c \ - --hash=sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a \ - --hash=sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055 \ - --hash=sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740 \ - --hash=sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45 \ - --hash=sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052 \ - --hash=sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f +coverage[toml]==6.5.0 \ + --hash=sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79 \ + --hash=sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a \ + --hash=sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f \ + --hash=sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a \ + --hash=sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa \ + --hash=sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398 \ + --hash=sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba \ + --hash=sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d \ + --hash=sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf \ + --hash=sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b \ + --hash=sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518 \ + --hash=sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d \ + --hash=sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795 \ + --hash=sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2 \ + --hash=sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e \ + --hash=sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32 \ + --hash=sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745 \ + --hash=sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b \ + --hash=sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e \ + --hash=sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d \ + --hash=sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f \ + --hash=sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660 \ + --hash=sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62 \ + --hash=sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6 \ + --hash=sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04 \ + --hash=sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c \ + --hash=sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5 \ + --hash=sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef \ + --hash=sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc \ + --hash=sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae \ + --hash=sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578 \ + --hash=sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466 \ + --hash=sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4 \ + --hash=sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91 \ + --hash=sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0 \ + --hash=sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4 \ + --hash=sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b \ + --hash=sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe \ + --hash=sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b \ + --hash=sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75 \ + --hash=sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b \ + --hash=sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c \ + --hash=sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72 \ + --hash=sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b \ + --hash=sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f \ + --hash=sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e \ + --hash=sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53 \ + --hash=sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3 \ + --hash=sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84 \ + --hash=sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987 # via pytest-cov defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via semgrep -face==20.1.1 \ - --hash=sha256:3790311a7329e4b0d90baee346eecad54b337629576edf3a246683a5f0d24446 \ - --hash=sha256:7d59ca5ba341316e58cf72c6aff85cca2541cf5056c4af45cb63af9a814bed3e +exceptiongroup==1.0.4 \ + --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ + --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec + # via pytest +face==22.0.0 \ + --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ + --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d # via glom -flake8==4.0.1 \ - --hash=sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d \ - --hash=sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d +flake8==5.0.4 \ + --hash=sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db \ + --hash=sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248 # via -r requirements/dev-requirements.in glom==22.1.0 \ --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 # via semgrep -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==4.2.0 \ - --hash=sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b \ - --hash=sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31 - # via - # click - # flake8 - # jsonschema - # pep517 - # pluggy - # pytest iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -jsonschema==3.2.0 \ - --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ - --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a +jsonschema==4.17.0 \ + --hash=sha256:5bfcf2bca16a087ade17e02b282d34af7ccd749ef76241e7f9bd7c0cb8a9424d \ + --hash=sha256:f660066c3966db7d6daeaea8a75e0b68237a48e51cf49882087757bb59916248 # via semgrep -mccabe==0.6.1 \ - --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ @@ -165,203 +170,244 @@ packaging==21.3 \ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via + # build # pytest # semgrep -pathspec==0.9.0 \ - --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ - --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1 +pathspec==0.10.2 \ + --hash=sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5 \ + --hash=sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0 # via black -peewee==3.14.10 \ - --hash=sha256:23271422b332c82d30c92597dee905ee831b56c6d99c33e05901e6891c75fe15 +peewee==3.15.4 \ + --hash=sha256:2581520c8dfbacd9d580c2719ae259f0637a9e46eda47dfc0ce01864c6366205 # via semgrep -pep517==0.12.0 \ - --hash=sha256:931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \ - --hash=sha256:dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161 - # via pip-tools -pip-tools==6.6.2 \ - --hash=sha256:6b486548e5a139e30e4c4a225b3b7c2d46942a9f6d1a91143c21b1de4d02fd9b \ - --hash=sha256:f638503a9f77d98d9a7d72584b1508d3f82ed019b8fab24f4e5ad078c1b8c95e +pep517==0.13.0 \ + --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ + --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 + # via build +pip-tools==6.10.0 \ + --hash=sha256:57ac98392548f5ca96c2831927deec3035efe81ff476e3c744bd474ca9c6a1f2 \ + --hash=sha256:7f9f7356052db6942b5aaabc8eba29983591ca0ad75affbf2f0a25d9361be624 # via -r requirements/dev-requirements.in -platformdirs==2.5.2 \ - --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ - --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 +platformdirs==2.5.4 \ + --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ + --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 # via black pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -py==1.11.0 \ - --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ - --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - # via pytest -pycodestyle==2.8.0 \ - --hash=sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20 \ - --hash=sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f +pycodestyle==2.9.1 \ + --hash=sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785 \ + --hash=sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b # via flake8 -pyflakes==2.4.0 \ - --hash=sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c \ - --hash=sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e +pyflakes==2.5.0 \ + --hash=sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2 \ + --hash=sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3 # via flake8 pyparsing==3.0.9 \ --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via packaging -pyrsistent==0.18.1 \ - --hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \ - --hash=sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc \ - --hash=sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e \ - --hash=sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26 \ - --hash=sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec \ - --hash=sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286 \ - --hash=sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045 \ - --hash=sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec \ - --hash=sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8 \ - --hash=sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c \ - --hash=sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca \ - --hash=sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22 \ - --hash=sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a \ - --hash=sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96 \ - --hash=sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc \ - --hash=sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1 \ - --hash=sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07 \ - --hash=sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6 \ - --hash=sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b \ - --hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \ - --hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6 +pyrsistent==0.19.2 \ + --hash=sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed \ + --hash=sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb \ + --hash=sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a \ + --hash=sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95 \ + --hash=sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712 \ + --hash=sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73 \ + --hash=sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41 \ + --hash=sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b \ + --hash=sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78 \ + --hash=sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab \ + --hash=sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308 \ + --hash=sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425 \ + --hash=sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2 \ + --hash=sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e \ + --hash=sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6 \ + --hash=sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2 \ + --hash=sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a \ + --hash=sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291 \ + --hash=sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584 \ + --hash=sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a \ + --hash=sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0 \ + --hash=sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770 # via jsonschema -pytest==7.1.2 \ - --hash=sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c \ - --hash=sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45 +pytest==7.2.0 \ + --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ + --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 # via # -r requirements/dev-requirements.in # pytest-cov # pytest-mock -pytest-cov==3.0.0 \ - --hash=sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6 \ - --hash=sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470 +pytest-cov==4.0.0 \ + --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ + --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 # via -r requirements/dev-requirements.in -pytest-mock==3.7.0 \ - --hash=sha256:5112bd92cc9f186ee96e1a92efc84969ea494939c3aead39c50f421c4cc69534 \ - --hash=sha256:6cff27cec936bf81dc5ee87f07132b807bcda51106b5ec4b90a04331cba76231 +pytest-mock==3.10.0 \ + --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ + --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f # via -r requirements/dev-requirements.in -requests==2.27.1 \ - --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ - --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d +python-lsp-jsonrpc==1.0.0 \ + --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ + --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd # via semgrep -ruamel.yaml==0.17.21 \ +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 + # via semgrep +ruamel-yaml==0.17.21 \ --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af # via semgrep -ruamel.yaml.clib==0.2.6 \ - --hash=sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd \ - --hash=sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee \ - --hash=sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0 \ - --hash=sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7 \ - --hash=sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277 \ - --hash=sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104 \ - --hash=sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd \ - --hash=sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0 \ - --hash=sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78 \ - --hash=sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de \ - --hash=sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99 \ - --hash=sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527 \ - --hash=sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84 \ - --hash=sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7 \ - --hash=sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468 \ - --hash=sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b \ - --hash=sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94 \ - --hash=sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233 \ - --hash=sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb \ - --hash=sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5 \ - --hash=sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe \ - --hash=sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751 \ - --hash=sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502 \ - --hash=sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed \ - --hash=sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c - # via ruamel.yaml -semgrep==0.93.0 \ - --hash=sha256:02fce22e81e68ded60f67f8cb2979a8014ac5bb7bceb93c2553d8ccc03211259 \ - --hash=sha256:1aa9788e507286694271234cd97f2bb19d741e5ae614f0fbb545715a7d0e872d \ - --hash=sha256:3de9c36cbafef772d453f77da9b6f3c2239975b0a29e0674773bf04a0756b1ec +ruamel-yaml-clib==0.2.7 \ + --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ + --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ + --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ + --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ + --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ + --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ + --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ + --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ + --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ + --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ + --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ + --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ + --hash=sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5 \ + --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ + --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ + --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ + --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ + --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ + --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ + --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ + --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ + --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ + --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ + --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ + --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ + --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ + --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ + --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ + --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ + --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ + --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ + --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ + --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 + # via ruamel-yaml +semgrep==0.122.0 \ + --hash=sha256:6116391b0c8c87581d9d72113702b6f8c2938d799cdae7d71a845ec89249566c \ + --hash=sha256:a4c7400eb8bec9fe8df25520d1ffcb5d78b87c73dc654f1c2aec1195789bc611 \ + --hash=sha256:c7002b9aba97deb6677f4cabfa5dcc8faef2808ce6a6f28ecdd70cd8e90b01b5 \ + --hash=sha256:e3fb9956e2bb926cfeff52deafe4cec24d5f1e91fe6d3fc4f81e86ec452b2ad5 # via -r requirements/dev-requirements.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via jsonschema tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via # black + # build # coverage # pep517 # pytest -tqdm==4.64.0 \ - --hash=sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d \ - --hash=sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6 + # semgrep +tqdm==4.64.1 \ + --hash=sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4 \ + --hash=sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1 # via semgrep -typed-ast==1.5.4 \ - --hash=sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2 \ - --hash=sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1 \ - --hash=sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6 \ - --hash=sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62 \ - --hash=sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac \ - --hash=sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d \ - --hash=sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc \ - --hash=sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2 \ - --hash=sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97 \ - --hash=sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35 \ - --hash=sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6 \ - --hash=sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1 \ - --hash=sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4 \ - --hash=sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c \ - --hash=sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e \ - --hash=sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec \ - --hash=sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f \ - --hash=sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72 \ - --hash=sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47 \ - --hash=sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72 \ - --hash=sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe \ - --hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \ - --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ - --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 - # via black -typing-extensions==4.2.0 \ - --hash=sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708 \ - --hash=sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376 +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via # black - # importlib-metadata -urllib3==1.26.9 \ - --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ - --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e + # semgrep +ujson==5.5.0 \ + --hash=sha256:0762a4fdf86e01f3f8d8b6b7158d01fdd870799ff3f402b676e358fcd879e7eb \ + --hash=sha256:10095160dbe6bba8059ad6677a01da251431f4c68041bf796dcac0956b34f8f7 \ + --hash=sha256:1a485117f97312bef45f5d79d2ff97eff4da503b8a04f3691f59d31141686459 \ + --hash=sha256:1cef44ea4973344baed3d50a5da4a8843de3a6af7dea7fadf0a594e53ce5892f \ + --hash=sha256:1dc2f46c31ef22b0aaa28cd71be897bea271e700636658d573df9c43c49ebbd0 \ + --hash=sha256:21678d7e068707e4d54bdfeb8c250ebc548b51e499aed778b22112ca31a79669 \ + --hash=sha256:278aa9d7cb56435c96d19f5d702e026bcf69f824e24b41e9b52706abd3565837 \ + --hash=sha256:2ab011e3556a9a1d9461bd686870c527327765ed02fe53550531d6609a8a33ff \ + --hash=sha256:2d90414e3b4b44b39825049185959488e084ea7fcaf6124afd5c00893938b09d \ + --hash=sha256:2e506ecf89b6b9d304362ccef770831ec242a52c89dab1b4aabf1ab0eb1d5ed6 \ + --hash=sha256:33cd9084fefc74cbacf88c92fd260b61211e00bcde38d640c369e5dc34a2b4e1 \ + --hash=sha256:3b74467564814fbce322427a5664e6bcc7dae6dbc8acbef76300fe43ca4072ab \ + --hash=sha256:3f3f4240d99d55eb97cb012e9adf401f5ed9cd827af0341ac44603832202b0d2 \ + --hash=sha256:3fe1aea596f9539fc20cd9e52f098c842afc090168824fd4ca9744fe13151a03 \ + --hash=sha256:4a8cb3c8637006c5bd8237ebb5992a76ba06e39988ad5cff2096227443e8fd6a \ + --hash=sha256:4ef4ab8352861b99bd7fedb1fc6df3ea7f7d5216c789ba6d859e4ea06f1a4c45 \ + --hash=sha256:5035bb997d163f346c22abcec75190e7e756a5349e7c708bd3d5fd7066a9a854 \ + --hash=sha256:593a0f6fb0e186c5ba65465ed6f6215a30d1efa898c25e74de1c8577a1bff6d0 \ + --hash=sha256:59cdcd934385f36e8bd76aedc234371cc75c848d95bdce804ac8aa8744cfeffa \ + --hash=sha256:5a9b1320d8363a42d857fae8065a2174d38217cdd58cd8dc4f48d54e0591271e \ + --hash=sha256:5f9681ec4c60d0da590552427d770636d9079038c30b265f507ccde23caa7823 \ + --hash=sha256:5fd797a4837ba10671954e7c09010cec7aca67e09d193f4920a16beea5f66f65 \ + --hash=sha256:6019e3480d933d3698f2ecb4b46d64bfadd64e718f04fac36e681f3254b49a93 \ + --hash=sha256:603607f56a0ee84d9cd2c7e9b1d29b18a70684b94ee34f07b9ffe8dc9c8a9f81 \ + --hash=sha256:60a4b481978ea2aad8fe8af1ecc271624d01b3cf4b09e9b643dd2fe19c07634c \ + --hash=sha256:6b9812638d7aa8ecda2e8e1513fb4da999249603bffab7439a5f8f0bb362b0db \ + --hash=sha256:6c7ae6e0778ab9610f5e80e0595957d101ab8de18c32a8c053a19943ef4831d0 \ + --hash=sha256:6f83be8257b2f2dd6dea5ee62cd28db90584da7a7af1fba77a2102fc7943638a \ + --hash=sha256:701e81e047f5c0cffd4ac828efca68b0bd270c616654966a051e9a5f836b385e \ + --hash=sha256:703fd69d9cb21d6ec2086789df9be2cf8140a76ff127050c24007ea8940dcd3b \ + --hash=sha256:7471d4486f23518cff343f1eec6c68d1b977ed74c3e6cc3e1ac896b9b7d68645 \ + --hash=sha256:765d46f3d5e7a1d48075035e2d1a9164f683e3fccde834ca04602e6c588835bc \ + --hash=sha256:7a09d203983104918c62f2eef9406f24c355511f9217967df23e70fa7f5b54ff \ + --hash=sha256:7c20cc83b0df47129ec6ed8a47fa7dcfc309c5bad029464004162738502568bb \ + --hash=sha256:7d7cfac2547c93389fa303fc0c0eb6698825564e8389c41c9b60009c746207b6 \ + --hash=sha256:7d87c817b292efb748f1974f37e8bb8a8772ef92f05f84e507159360814bcc3f \ + --hash=sha256:8141f654432cf75144d6103bfac2286b8adf23467201590b173a74535d6be22d \ + --hash=sha256:849f2ff40264152f25589cb48ddb4a43d14db811f841ec73989bfc0c8c4853fa \ + --hash=sha256:880c84ce59f49776cf120f77e7ca04877c97c6887917078dbc369eb47004d7cf \ + --hash=sha256:94874584b733a18b310b0e954d53168e62cd4a0fd9db85b1903f0902a7eb33e8 \ + --hash=sha256:95603eff711b8f3b9596e1c961dbeb745a792ba1904141612f194e07edd71e5f \ + --hash=sha256:9585892091ae86045135d6a6129a644142d6a51b23e1428bb5de6d10bc0ce0c7 \ + --hash=sha256:977bf5be704a88d46bf5b228df8b44521b1f3119d741062191608b3a6a38f224 \ + --hash=sha256:9cdc46859024501c20ab74ad542cdf2f08b94b5ce384f2f569483fa3ed926d04 \ + --hash=sha256:a34a5f034b339f69ef7f6a134c22d04b92e07b6ddc1dd65382e7e4ec65d6437d \ + --hash=sha256:a655f7b755cfc5c07f2116b6dcf0ba148c89adef9a6d40c1b0f1fada878c4345 \ + --hash=sha256:a7d12f2d2df195c8c4e49d2cdbad640353a856c62ca2c624d8b47aa33b65a2a2 \ + --hash=sha256:abfe83e082c9208891e2158c1b5044a650ecec408b823bf6bf16cd7f8085cafa \ + --hash=sha256:b25077a971c7da47bd6846a912a747f6963776d90720c88603b1b55d81790780 \ + --hash=sha256:bf416a93e1331820c77e3429df26946dbd4fe105e9b487cd2d1b7298b75784a8 \ + --hash=sha256:c04ae27e076d81a3839047d8eed57c1e17e361640616fd520d752375e3ba8f0c \ + --hash=sha256:d5bea13c73f36c4346808df3fa806596163a7962b6d28001ca2a391cab856089 \ + --hash=sha256:d75bef34e69e7effb7b4849e3f830e3174d2cc6ec7273503fdde111c222dc9b3 \ + --hash=sha256:d93940664a5ccfd79f72dcb939b0c31a3479889f14f0eb95ec52976f8c0cae7d \ + --hash=sha256:d9c89c521dc90c7564358e525f849b93ad1d710553c1491f66b8cce8113bc901 \ + --hash=sha256:e0b36257dc90194784531c3b922d8d31fb2b4d8e5adfd27aff4eee7174176365 \ + --hash=sha256:e1135264bcd40965cd35b0869e36952f54825024befdc7a923df9a7d83cfd800 \ + --hash=sha256:e510d288e613d6927796dfb728e13e4530fc83b9ccac5888a21f7860486eab21 \ + --hash=sha256:ee9a2c9a4b2421e77f8fe33ed0621dea03c66c710707553020b1e32f3afb6240 \ + --hash=sha256:f19f11055ba2961eb39bdb1ff15763a53fca4fa0b5b624da3c7a528e83cdd09c \ + --hash=sha256:f26544bc10c83a2ff9aa2e093500c1b473f327faae31fb468d591e5823333376 \ + --hash=sha256:f4875cafc9a6482c04c7df52a725d1c41beb74913c0ff4ec8f189f1954a2afe9 \ + --hash=sha256:f5179088ef6487c475604b7898731a6ddeeada7702cfb2162155b016703a8475 \ + --hash=sha256:f63d1ae1ca17bb2c847e298c7bcf084a73d56d434b4c50509fb93a4b4300b0b2 \ + --hash=sha256:ff4928dc1e9704b567171c16787238201fdbf023665573c12c02146fe1e02eec + # via python-lsp-jsonrpc +urllib3==1.26.12 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 # via # requests # semgrep -wcmatch==8.3 \ - --hash=sha256:371072912398af61d1e4e78609e18801c6faecd3cb36c54c82556a60abc965db \ - --hash=sha256:7141d2c85314253f16b38cb3d6cc0fb612918d407e1df3ccc2be7c86cc259c22 +wcmatch==8.4.1 \ + --hash=sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7 \ + --hash=sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943 # via semgrep -wheel==0.37.1 \ - --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ - --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -zipp==3.8.0 \ - --hash=sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad \ - --hash=sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099 - # via - # importlib-metadata - # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==22.1.1 \ - --hash=sha256:8dfb15d8a1c3d3085a4cbe11f29e19527dfaf2ba99354326fd62cec013eaee81 \ - --hash=sha256:e7bcf0b2cbdec2af84cc1b7b79b25fdbd7228fbdb61a4dca0b82810d0ba9d18b +pip==22.3.1 \ + --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ + --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 + # via pip-tools +setuptools==65.6.0 \ + --hash=sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840 \ + --hash=sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d # via pip-tools -setuptools==62.3.2 \ - --hash=sha256:68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36 \ - --hash=sha256:a43bdedf853c670e5fed28e5623403bad2f73cf02f9a2774e91def6bda8265a7 - # via - # jsonschema - # pip-tools - # semgrep diff --git a/requirements/requirements.txt b/requirements/requirements.txt index b78349c53..b7f4b2d8b 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in From 68723028b012b3ad455d468faecba22e3569de84 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 22 Nov 2022 17:26:18 -0800 Subject: [PATCH 519/751] Ensure Makefile includes version-specific requirements files Use VERSION_CODENAME script --- .circleci/config.yml | 5 +++++ Makefile | 14 +++++++++++--- scripts/codename | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100755 scripts/codename diff --git a/.circleci/config.yml b/.circleci/config.yml index 7bdae7873..0aa6fb8a4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -19,6 +19,7 @@ common-steps: name: Install requirements and run unit tests command: | set -e + export VERSION_CODENAME=$(~/project/scripts/codename) make venv source .venv/bin/activate export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata @@ -29,6 +30,7 @@ common-steps: name: Run lint, type checking, code formatting command: | set -e + export VERSION_CODENAME=$(~/project/scripts/codename) make venv source .venv/bin/activate make check-black lint @@ -38,6 +40,7 @@ common-steps: name: Run static analysis on source code to find security issues command: | set -e + export VERSION_CODENAME=$(~/project/scripts/codename) make venv source .venv/bin/activate make semgrep @@ -47,6 +50,7 @@ common-steps: name: Check Python dependencies for known vulnerabilities command: | set -e + export VERSION_CODENAME=$(~/project/scripts/codename) make venv source .venv/bin/activate make safety @@ -78,6 +82,7 @@ common-steps: name: Ensure that the same Python requirements are used for development/testing and production. command: | set -e + export VERSION_CODENAME=$(~/project/scripts/codename) make venv source .venv/bin/activate make requirements diff --git a/Makefile b/Makefile index ea83824cc..d56b2ee7b 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,13 @@ .PHONY: all all: help +VERSION_CODENAME ?= bullseye + .PHONY: venv venv: ## Provision a Python 3 virtualenv for **development** python3 -m venv .venv .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r requirements/dev-requirements.txt + .venv/bin/pip install --require-hashes -r requirements/dev-${VERSION_CODENAME}-requirements.txt .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities @@ -19,8 +21,14 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities .PHONY: sync-requirements sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies - rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in + if test -f "requirements/dev-bullseye-requirements.txt"; then rm -r requirements/dev-bullseye-requirements.txt; fi + if test -f "requirements/dev-bookworm-requirements.txt"; then rm -r requirements/dev-bookworm-requirements.txt; fi + $(MAKE) dev-requirements + +.PHONY: dev-requirements +dev-requirements: ## Update dev-*requirements.txt files if pinned versions do not comply with the dependency specifications in dev-*requirements.in + pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in + pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in .PHONY: requirements requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in diff --git a/scripts/codename b/scripts/codename new file mode 100755 index 000000000..261793bc5 --- /dev/null +++ b/scripts/codename @@ -0,0 +1,15 @@ +#!/bin/bash +# Returns the Debian version's codename (e.g. "bullseye") in a way that should +# work across both released versions and unreleased ones. +# See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008735 + +source /etc/os-release + +if [[ "$VERSION_CODENAME" != "" ]]; then + echo $VERSION_CODENAME +else + # PRETTY_NAME="Debian GNU/Linux bookworm/sid" + # Use awk to split on spaces and / + echo $PRETTY_NAME | awk '{split($0, a, "[ /]"); print a[4]}' +fi + From 56456941faf4a7fb177b147cb69ba92a0d6de3d2 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 22 Nov 2022 17:39:44 -0800 Subject: [PATCH 520/751] Separate requirements files for Bullseye and Bookworm Update rMmakefile venv and requirements targets to be version-aware --- Makefile | 7 +- ...ements.in => dev-bookworm-requirements.in} | 0 requirements/dev-bookworm-requirements.txt | 411 ++++++++++++++++++ requirements/dev-bullseye-requirements.in | 7 + ...ents.txt => dev-bullseye-requirements.txt} | 22 +- 5 files changed, 434 insertions(+), 13 deletions(-) rename requirements/{dev-requirements.in => dev-bookworm-requirements.in} (100%) create mode 100644 requirements/dev-bookworm-requirements.txt create mode 100644 requirements/dev-bullseye-requirements.in rename requirements/{dev-requirements.txt => dev-bullseye-requirements.txt} (97%) diff --git a/Makefile b/Makefile index d56b2ee7b..f535a9292 100644 --- a/Makefile +++ b/Makefile @@ -44,8 +44,11 @@ update-dependency: ## Add or upgrade a package to the latest version that compl update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in $(MAKE) sync-requirements @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ - done < 'requirements/dev-requirements.in' + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-${VERSION_CODENAME}-requirements.txt requirements/requirements.in requirements/dev-bookworm-requirements.in; \ + done < 'requirements/dev-bullseye-requirements.in' + @while read line; do \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-${VERSION_CODENAME}-requirements.txt requirements/requirements.in requirements/dev-bookworm-requirements.in; \ + done < 'requirements/dev-bookworm-requirements.in' .PHONY: check check: lint semgrep test check-black ## Run linter and tests diff --git a/requirements/dev-requirements.in b/requirements/dev-bookworm-requirements.in similarity index 100% rename from requirements/dev-requirements.in rename to requirements/dev-bookworm-requirements.in diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt new file mode 100644 index 000000000..fd153a461 --- /dev/null +++ b/requirements/dev-bookworm-requirements.txt @@ -0,0 +1,411 @@ +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in +# +attrs==21.4.0 \ + --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ + --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd + # via + # glom + # jsonschema + # pytest + # semgrep +black==22.10.0 \ + --hash=sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7 \ + --hash=sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6 \ + --hash=sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650 \ + --hash=sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb \ + --hash=sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d \ + --hash=sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d \ + --hash=sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de \ + --hash=sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395 \ + --hash=sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae \ + --hash=sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa \ + --hash=sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef \ + --hash=sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383 \ + --hash=sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66 \ + --hash=sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87 \ + --hash=sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d \ + --hash=sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0 \ + --hash=sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b \ + --hash=sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458 \ + --hash=sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4 \ + --hash=sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1 \ + --hash=sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff + # via -r requirements/dev-bookworm-requirements.in +boltons==21.0.0 \ + --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ + --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b + # via + # face + # glom + # semgrep +bracex==2.3.post1 \ + --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ + --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 + # via wcmatch +build==0.9.0 \ + --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ + --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 + # via pip-tools +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 + # via requests +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f + # via requests +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 + # via + # black + # click-option-group + # pip-tools + # semgrep +click-option-group==0.5.5 \ + --hash=sha256:0f8ca79bc9b1d6fcaafdbe194b17ba1a2dde44ddf19087235c3efed2ad288143 \ + --hash=sha256:78ee474f07a0ca0ef6c0317bb3ebe79387aafb0c4a1e03b1d8b2b0be1e42fc78 + # via semgrep +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via semgrep +coverage[toml]==6.5.0 \ + --hash=sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79 \ + --hash=sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a \ + --hash=sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f \ + --hash=sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a \ + --hash=sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa \ + --hash=sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398 \ + --hash=sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba \ + --hash=sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d \ + --hash=sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf \ + --hash=sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b \ + --hash=sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518 \ + --hash=sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d \ + --hash=sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795 \ + --hash=sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2 \ + --hash=sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e \ + --hash=sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32 \ + --hash=sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745 \ + --hash=sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b \ + --hash=sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e \ + --hash=sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d \ + --hash=sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f \ + --hash=sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660 \ + --hash=sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62 \ + --hash=sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6 \ + --hash=sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04 \ + --hash=sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c \ + --hash=sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5 \ + --hash=sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef \ + --hash=sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc \ + --hash=sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae \ + --hash=sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578 \ + --hash=sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466 \ + --hash=sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4 \ + --hash=sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91 \ + --hash=sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0 \ + --hash=sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4 \ + --hash=sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b \ + --hash=sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe \ + --hash=sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b \ + --hash=sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75 \ + --hash=sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b \ + --hash=sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c \ + --hash=sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72 \ + --hash=sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b \ + --hash=sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f \ + --hash=sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e \ + --hash=sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53 \ + --hash=sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3 \ + --hash=sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84 \ + --hash=sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987 + # via pytest-cov +defusedxml==0.7.1 \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + # via semgrep +exceptiongroup==1.0.4 \ + --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ + --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec + # via pytest +face==22.0.0 \ + --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ + --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d + # via glom +flake8==5.0.4 \ + --hash=sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db \ + --hash=sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248 + # via -r requirements/dev-bookworm-requirements.in +glom==22.1.0 \ + --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ + --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 + # via semgrep +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + # via requests +iniconfig==1.1.1 \ + --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ + --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 + # via pytest +jsonschema==4.17.1 \ + --hash=sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3 \ + --hash=sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7 + # via semgrep +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + # via flake8 +mypy-extensions==0.4.3 \ + --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 + # via black +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 + # via + # build + # pytest + # semgrep +pathspec==0.10.2 \ + --hash=sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5 \ + --hash=sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0 + # via black +peewee==3.15.4 \ + --hash=sha256:2581520c8dfbacd9d580c2719ae259f0637a9e46eda47dfc0ce01864c6366205 + # via semgrep +pep517==0.13.0 \ + --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ + --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 + # via build +pip-tools==6.10.0 \ + --hash=sha256:57ac98392548f5ca96c2831927deec3035efe81ff476e3c744bd474ca9c6a1f2 \ + --hash=sha256:7f9f7356052db6942b5aaabc8eba29983591ca0ad75affbf2f0a25d9361be624 + # via -r requirements/dev-bookworm-requirements.in +platformdirs==2.5.4 \ + --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ + --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 + # via black +pluggy==1.0.0 \ + --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ + --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 + # via pytest +pycodestyle==2.9.1 \ + --hash=sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785 \ + --hash=sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b + # via flake8 +pyflakes==2.5.0 \ + --hash=sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2 \ + --hash=sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3 + # via flake8 +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc + # via packaging +pyrsistent==0.19.2 \ + --hash=sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed \ + --hash=sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb \ + --hash=sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a \ + --hash=sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95 \ + --hash=sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712 \ + --hash=sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73 \ + --hash=sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41 \ + --hash=sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b \ + --hash=sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78 \ + --hash=sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab \ + --hash=sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308 \ + --hash=sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425 \ + --hash=sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2 \ + --hash=sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e \ + --hash=sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6 \ + --hash=sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2 \ + --hash=sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a \ + --hash=sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291 \ + --hash=sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584 \ + --hash=sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a \ + --hash=sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0 \ + --hash=sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770 + # via jsonschema +pytest==7.2.0 \ + --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ + --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 + # via + # -r requirements/dev-bookworm-requirements.in + # pytest-cov + # pytest-mock +pytest-cov==4.0.0 \ + --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ + --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 + # via -r requirements/dev-bookworm-requirements.in +pytest-mock==3.10.0 \ + --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ + --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f + # via -r requirements/dev-bookworm-requirements.in +python-lsp-jsonrpc==1.0.0 \ + --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ + --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd + # via semgrep +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 + # via semgrep +ruamel-yaml==0.17.21 \ + --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ + --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af + # via semgrep +ruamel-yaml-clib==0.2.7 \ + --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ + --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ + --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ + --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ + --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ + --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ + --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ + --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ + --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ + --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ + --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ + --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ + --hash=sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5 \ + --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ + --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ + --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ + --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ + --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ + --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ + --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ + --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ + --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ + --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ + --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ + --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ + --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ + --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ + --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ + --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ + --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ + --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ + --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ + --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 + # via ruamel-yaml +semgrep==0.122.0 \ + --hash=sha256:6116391b0c8c87581d9d72113702b6f8c2938d799cdae7d71a845ec89249566c \ + --hash=sha256:a4c7400eb8bec9fe8df25520d1ffcb5d78b87c73dc654f1c2aec1195789bc611 \ + --hash=sha256:c7002b9aba97deb6677f4cabfa5dcc8faef2808ce6a6f28ecdd70cd8e90b01b5 \ + --hash=sha256:e3fb9956e2bb926cfeff52deafe4cec24d5f1e91fe6d3fc4f81e86ec452b2ad5 + # via -r requirements/dev-bookworm-requirements.in +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via + # black + # build + # coverage + # pep517 + # pytest + # semgrep +tqdm==4.64.1 \ + --hash=sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4 \ + --hash=sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1 + # via semgrep +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e + # via semgrep +ujson==5.5.0 \ + --hash=sha256:0762a4fdf86e01f3f8d8b6b7158d01fdd870799ff3f402b676e358fcd879e7eb \ + --hash=sha256:10095160dbe6bba8059ad6677a01da251431f4c68041bf796dcac0956b34f8f7 \ + --hash=sha256:1a485117f97312bef45f5d79d2ff97eff4da503b8a04f3691f59d31141686459 \ + --hash=sha256:1cef44ea4973344baed3d50a5da4a8843de3a6af7dea7fadf0a594e53ce5892f \ + --hash=sha256:1dc2f46c31ef22b0aaa28cd71be897bea271e700636658d573df9c43c49ebbd0 \ + --hash=sha256:21678d7e068707e4d54bdfeb8c250ebc548b51e499aed778b22112ca31a79669 \ + --hash=sha256:278aa9d7cb56435c96d19f5d702e026bcf69f824e24b41e9b52706abd3565837 \ + --hash=sha256:2ab011e3556a9a1d9461bd686870c527327765ed02fe53550531d6609a8a33ff \ + --hash=sha256:2d90414e3b4b44b39825049185959488e084ea7fcaf6124afd5c00893938b09d \ + --hash=sha256:2e506ecf89b6b9d304362ccef770831ec242a52c89dab1b4aabf1ab0eb1d5ed6 \ + --hash=sha256:33cd9084fefc74cbacf88c92fd260b61211e00bcde38d640c369e5dc34a2b4e1 \ + --hash=sha256:3b74467564814fbce322427a5664e6bcc7dae6dbc8acbef76300fe43ca4072ab \ + --hash=sha256:3f3f4240d99d55eb97cb012e9adf401f5ed9cd827af0341ac44603832202b0d2 \ + --hash=sha256:3fe1aea596f9539fc20cd9e52f098c842afc090168824fd4ca9744fe13151a03 \ + --hash=sha256:4a8cb3c8637006c5bd8237ebb5992a76ba06e39988ad5cff2096227443e8fd6a \ + --hash=sha256:4ef4ab8352861b99bd7fedb1fc6df3ea7f7d5216c789ba6d859e4ea06f1a4c45 \ + --hash=sha256:5035bb997d163f346c22abcec75190e7e756a5349e7c708bd3d5fd7066a9a854 \ + --hash=sha256:593a0f6fb0e186c5ba65465ed6f6215a30d1efa898c25e74de1c8577a1bff6d0 \ + --hash=sha256:59cdcd934385f36e8bd76aedc234371cc75c848d95bdce804ac8aa8744cfeffa \ + --hash=sha256:5a9b1320d8363a42d857fae8065a2174d38217cdd58cd8dc4f48d54e0591271e \ + --hash=sha256:5f9681ec4c60d0da590552427d770636d9079038c30b265f507ccde23caa7823 \ + --hash=sha256:5fd797a4837ba10671954e7c09010cec7aca67e09d193f4920a16beea5f66f65 \ + --hash=sha256:6019e3480d933d3698f2ecb4b46d64bfadd64e718f04fac36e681f3254b49a93 \ + --hash=sha256:603607f56a0ee84d9cd2c7e9b1d29b18a70684b94ee34f07b9ffe8dc9c8a9f81 \ + --hash=sha256:60a4b481978ea2aad8fe8af1ecc271624d01b3cf4b09e9b643dd2fe19c07634c \ + --hash=sha256:6b9812638d7aa8ecda2e8e1513fb4da999249603bffab7439a5f8f0bb362b0db \ + --hash=sha256:6c7ae6e0778ab9610f5e80e0595957d101ab8de18c32a8c053a19943ef4831d0 \ + --hash=sha256:6f83be8257b2f2dd6dea5ee62cd28db90584da7a7af1fba77a2102fc7943638a \ + --hash=sha256:701e81e047f5c0cffd4ac828efca68b0bd270c616654966a051e9a5f836b385e \ + --hash=sha256:703fd69d9cb21d6ec2086789df9be2cf8140a76ff127050c24007ea8940dcd3b \ + --hash=sha256:7471d4486f23518cff343f1eec6c68d1b977ed74c3e6cc3e1ac896b9b7d68645 \ + --hash=sha256:765d46f3d5e7a1d48075035e2d1a9164f683e3fccde834ca04602e6c588835bc \ + --hash=sha256:7a09d203983104918c62f2eef9406f24c355511f9217967df23e70fa7f5b54ff \ + --hash=sha256:7c20cc83b0df47129ec6ed8a47fa7dcfc309c5bad029464004162738502568bb \ + --hash=sha256:7d7cfac2547c93389fa303fc0c0eb6698825564e8389c41c9b60009c746207b6 \ + --hash=sha256:7d87c817b292efb748f1974f37e8bb8a8772ef92f05f84e507159360814bcc3f \ + --hash=sha256:8141f654432cf75144d6103bfac2286b8adf23467201590b173a74535d6be22d \ + --hash=sha256:849f2ff40264152f25589cb48ddb4a43d14db811f841ec73989bfc0c8c4853fa \ + --hash=sha256:880c84ce59f49776cf120f77e7ca04877c97c6887917078dbc369eb47004d7cf \ + --hash=sha256:94874584b733a18b310b0e954d53168e62cd4a0fd9db85b1903f0902a7eb33e8 \ + --hash=sha256:95603eff711b8f3b9596e1c961dbeb745a792ba1904141612f194e07edd71e5f \ + --hash=sha256:9585892091ae86045135d6a6129a644142d6a51b23e1428bb5de6d10bc0ce0c7 \ + --hash=sha256:977bf5be704a88d46bf5b228df8b44521b1f3119d741062191608b3a6a38f224 \ + --hash=sha256:9cdc46859024501c20ab74ad542cdf2f08b94b5ce384f2f569483fa3ed926d04 \ + --hash=sha256:a34a5f034b339f69ef7f6a134c22d04b92e07b6ddc1dd65382e7e4ec65d6437d \ + --hash=sha256:a655f7b755cfc5c07f2116b6dcf0ba148c89adef9a6d40c1b0f1fada878c4345 \ + --hash=sha256:a7d12f2d2df195c8c4e49d2cdbad640353a856c62ca2c624d8b47aa33b65a2a2 \ + --hash=sha256:abfe83e082c9208891e2158c1b5044a650ecec408b823bf6bf16cd7f8085cafa \ + --hash=sha256:b25077a971c7da47bd6846a912a747f6963776d90720c88603b1b55d81790780 \ + --hash=sha256:bf416a93e1331820c77e3429df26946dbd4fe105e9b487cd2d1b7298b75784a8 \ + --hash=sha256:c04ae27e076d81a3839047d8eed57c1e17e361640616fd520d752375e3ba8f0c \ + --hash=sha256:d5bea13c73f36c4346808df3fa806596163a7962b6d28001ca2a391cab856089 \ + --hash=sha256:d75bef34e69e7effb7b4849e3f830e3174d2cc6ec7273503fdde111c222dc9b3 \ + --hash=sha256:d93940664a5ccfd79f72dcb939b0c31a3479889f14f0eb95ec52976f8c0cae7d \ + --hash=sha256:d9c89c521dc90c7564358e525f849b93ad1d710553c1491f66b8cce8113bc901 \ + --hash=sha256:e0b36257dc90194784531c3b922d8d31fb2b4d8e5adfd27aff4eee7174176365 \ + --hash=sha256:e1135264bcd40965cd35b0869e36952f54825024befdc7a923df9a7d83cfd800 \ + --hash=sha256:e510d288e613d6927796dfb728e13e4530fc83b9ccac5888a21f7860486eab21 \ + --hash=sha256:ee9a2c9a4b2421e77f8fe33ed0621dea03c66c710707553020b1e32f3afb6240 \ + --hash=sha256:f19f11055ba2961eb39bdb1ff15763a53fca4fa0b5b624da3c7a528e83cdd09c \ + --hash=sha256:f26544bc10c83a2ff9aa2e093500c1b473f327faae31fb468d591e5823333376 \ + --hash=sha256:f4875cafc9a6482c04c7df52a725d1c41beb74913c0ff4ec8f189f1954a2afe9 \ + --hash=sha256:f5179088ef6487c475604b7898731a6ddeeada7702cfb2162155b016703a8475 \ + --hash=sha256:f63d1ae1ca17bb2c847e298c7bcf084a73d56d434b4c50509fb93a4b4300b0b2 \ + --hash=sha256:ff4928dc1e9704b567171c16787238201fdbf023665573c12c02146fe1e02eec + # via python-lsp-jsonrpc +urllib3==1.26.12 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 + # via + # requests + # semgrep +wcmatch==8.4.1 \ + --hash=sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7 \ + --hash=sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943 + # via semgrep +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 + # via pip-tools + +# The following packages are considered to be unsafe in a requirements file: +pip==22.3.1 \ + --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ + --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 + # via pip-tools +setuptools==65.6.0 \ + --hash=sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840 \ + --hash=sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d + # via pip-tools diff --git a/requirements/dev-bullseye-requirements.in b/requirements/dev-bullseye-requirements.in new file mode 100644 index 000000000..5200c5299 --- /dev/null +++ b/requirements/dev-bullseye-requirements.in @@ -0,0 +1,7 @@ +black +flake8 +pip-tools +pytest +pytest-cov +pytest-mock +semgrep \ No newline at end of file diff --git a/requirements/dev-requirements.txt b/requirements/dev-bullseye-requirements.txt similarity index 97% rename from requirements/dev-requirements.txt rename to requirements/dev-bullseye-requirements.txt index 49ef8edae..3271ab69c 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-bullseye-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.9 # To update, run: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in # attrs==21.4.0 \ --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ @@ -34,7 +34,7 @@ black==22.10.0 \ --hash=sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4 \ --hash=sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1 \ --hash=sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff - # via -r requirements/dev-requirements.in + # via -r requirements/dev-bullseye-requirements.in boltons==21.0.0 \ --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b @@ -141,7 +141,7 @@ face==22.0.0 \ flake8==5.0.4 \ --hash=sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db \ --hash=sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248 - # via -r requirements/dev-requirements.in + # via -r requirements/dev-bullseye-requirements.in glom==22.1.0 \ --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 @@ -154,9 +154,9 @@ iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -jsonschema==4.17.0 \ - --hash=sha256:5bfcf2bca16a087ade17e02b282d34af7ccd749ef76241e7f9bd7c0cb8a9424d \ - --hash=sha256:f660066c3966db7d6daeaea8a75e0b68237a48e51cf49882087757bb59916248 +jsonschema==4.17.1 \ + --hash=sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3 \ + --hash=sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7 # via semgrep mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ @@ -187,7 +187,7 @@ pep517==0.13.0 \ pip-tools==6.10.0 \ --hash=sha256:57ac98392548f5ca96c2831927deec3035efe81ff476e3c744bd474ca9c6a1f2 \ --hash=sha256:7f9f7356052db6942b5aaabc8eba29983591ca0ad75affbf2f0a25d9361be624 - # via -r requirements/dev-requirements.in + # via -r requirements/dev-bullseye-requirements.in platformdirs==2.5.4 \ --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 @@ -236,17 +236,17 @@ pytest==7.2.0 \ --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 # via - # -r requirements/dev-requirements.in + # -r requirements/dev-bullseye-requirements.in # pytest-cov # pytest-mock pytest-cov==4.0.0 \ --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 - # via -r requirements/dev-requirements.in + # via -r requirements/dev-bullseye-requirements.in pytest-mock==3.10.0 \ --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f - # via -r requirements/dev-requirements.in + # via -r requirements/dev-bullseye-requirements.in python-lsp-jsonrpc==1.0.0 \ --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd @@ -299,7 +299,7 @@ semgrep==0.122.0 \ --hash=sha256:a4c7400eb8bec9fe8df25520d1ffcb5d78b87c73dc654f1c2aec1195789bc611 \ --hash=sha256:c7002b9aba97deb6677f4cabfa5dcc8faef2808ce6a6f28ecdd70cd8e90b01b5 \ --hash=sha256:e3fb9956e2bb926cfeff52deafe4cec24d5f1e91fe6d3fc4f81e86ec452b2ad5 - # via -r requirements/dev-requirements.in + # via -r requirements/dev-bullseye-requirements.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f From 502c95868d1bed3daa08909f7d0cadb0d3632471 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 29 Nov 2022 10:57:00 -0800 Subject: [PATCH 521/751] Ensure correct OS version builds requirements file. Fix requirements Makefile target. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f535a9292..aaa0624b8 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ dev-requirements: ## Update dev-*requirements.txt files if pinned versions do n .PHONY: requirements requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements + $(MAKE) dev-requirements .PHONY: update-dependency update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in @@ -44,10 +44,10 @@ update-dependency: ## Add or upgrade a package to the latest version that compl update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in $(MAKE) sync-requirements @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-${VERSION_CODENAME}-requirements.txt requirements/requirements.in requirements/dev-bookworm-requirements.in; \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bullseye-requirements.txt requirements/requirements.in requirements/dev-bullseye-requirements.in; \ done < 'requirements/dev-bullseye-requirements.in' @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-${VERSION_CODENAME}-requirements.txt requirements/requirements.in requirements/dev-bookworm-requirements.in; \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bookworm-requirements.txt requirements/requirements.in requirements/dev-bookworm-requirements.in; \ done < 'requirements/dev-bookworm-requirements.in' .PHONY: check From d4140a4c6dead195477b4ac32bf4500fcf533627 Mon Sep 17 00:00:00 2001 From: Ro Date: Fri, 16 Dec 2022 11:26:27 -0800 Subject: [PATCH 522/751] Update dependencies --- requirements/dev-requirements.txt | 696 ++++++++++++++++-------------- requirements/requirements.in | 2 +- requirements/requirements.txt | 8 +- 3 files changed, 387 insertions(+), 319 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index b1aeb1a56..6dc72691a 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,16 +1,30 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -black==21.8b0 \ - --hash=sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7 \ - --hash=sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2 +black==22.12.0 \ + --hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \ + --hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \ + --hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \ + --hash=sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f \ + --hash=sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf \ + --hash=sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148 \ + --hash=sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4 \ + --hash=sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d \ + --hash=sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc \ + --hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \ + --hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \ + --hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f # via -r requirements/dev-requirements.in -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +build==0.9.0 \ + --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ + --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 + # via pip-tools +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via # -r requirements/requirements.in # requests @@ -20,69 +34,67 @@ charset-normalizer==2.0.4 \ # via # -r requirements/requirements.in # requests -click==8.0.1 \ - --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ - --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 # via # black # pip-tools -coverage==5.5 \ - --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \ - --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \ - --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \ - --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \ - --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \ - --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \ - --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \ - --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \ - --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \ - --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \ - --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \ - --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \ - --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \ - --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \ - --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \ - --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \ - --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \ - --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \ - --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \ - --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \ - --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \ - --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \ - --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \ - --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \ - --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \ - --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \ - --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \ - --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \ - --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \ - --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \ - --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \ - --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \ - --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \ - --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \ - --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \ - --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \ - --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \ - --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \ - --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \ - --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \ - --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \ - --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \ - --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \ - --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \ - --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \ - --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \ - --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \ - --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \ - --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \ - --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ - --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ - --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 +coverage==6.5.0 \ + --hash=sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79 \ + --hash=sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a \ + --hash=sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f \ + --hash=sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a \ + --hash=sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa \ + --hash=sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398 \ + --hash=sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba \ + --hash=sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d \ + --hash=sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf \ + --hash=sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b \ + --hash=sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518 \ + --hash=sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d \ + --hash=sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795 \ + --hash=sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2 \ + --hash=sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e \ + --hash=sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32 \ + --hash=sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745 \ + --hash=sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b \ + --hash=sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e \ + --hash=sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d \ + --hash=sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f \ + --hash=sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660 \ + --hash=sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62 \ + --hash=sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6 \ + --hash=sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04 \ + --hash=sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c \ + --hash=sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5 \ + --hash=sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef \ + --hash=sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc \ + --hash=sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae \ + --hash=sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578 \ + --hash=sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466 \ + --hash=sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4 \ + --hash=sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91 \ + --hash=sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0 \ + --hash=sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4 \ + --hash=sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b \ + --hash=sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe \ + --hash=sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b \ + --hash=sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75 \ + --hash=sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b \ + --hash=sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c \ + --hash=sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72 \ + --hash=sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b \ + --hash=sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f \ + --hash=sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e \ + --hash=sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53 \ + --hash=sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3 \ + --hash=sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84 \ + --hash=sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987 # via -r requirements/dev-requirements.in -flake8==3.9.2 \ - --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ - --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 +flake8==6.0.0 \ + --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ + --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 # via -r requirements/dev-requirements.in furl==2.0.0 \ --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ @@ -95,88 +107,125 @@ idna==3.2 \ # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.8.1 \ - --hash=sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15 \ - --hash=sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 - # via - # click - # flake8 - # pep517 -isort==5.9.3 \ - --hash=sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899 \ - --hash=sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2 +isort==5.11.2 \ + --hash=sha256:dd8bbc5c0990f2a095d754e50360915f73b4c26fc82733eb5bfc6b48396af4d2 \ + --hash=sha256:e486966fba83f25b8045f8dd7455b0a0d1e4de481e1d7ce4669902d9fb85e622 # via -r requirements/dev-requirements.in -mccabe==0.6.1 \ - --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via # -r requirements/dev-requirements.in # flake8 -multidict==5.1.0 \ - --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ - --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \ - --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \ - --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \ - --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \ - --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \ - --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \ - --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \ - --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \ - --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \ - --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \ - --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \ - --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \ - --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \ - --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \ - --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \ - --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \ - --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \ - --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \ - --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \ - --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \ - --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \ - --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \ - --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \ - --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \ - --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \ - --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \ - --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \ - --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \ - --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \ - --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \ - --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \ - --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \ - --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \ - --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \ - --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ - --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 +multidict==6.0.3 \ + --hash=sha256:018c8e3be7f161a12b3e41741b6721f9baeb2210f4ab25a6359b7d76c1017dce \ + --hash=sha256:01b456046a05ff7cceefb0e1d2a9d32f05efcb1c7e0d152446304e11557639ce \ + --hash=sha256:114a4ab3e5cfbc56c4b6697686ecb92376c7e8c56893ef20547921552f8bdf57 \ + --hash=sha256:12e0d396faa6dc55ff5379eee54d1df3b508243ff15bfc8295a6ec7a4483a335 \ + --hash=sha256:190626ced82d4cc567a09e7346340d380154a493bac6905e0095d8158cdf1e38 \ + --hash=sha256:1f5d5129a937af4e3c4a1d6c139f4051b7d17d43276cefdd8d442a7031f7eef2 \ + --hash=sha256:21e1ce0b187c4e93112304dcde2aa18922fdbe8fb4f13d8aa72a5657bce0563a \ + --hash=sha256:24e8d513bfcaadc1f8b0ebece3ff50961951c54b07d5a775008a882966102418 \ + --hash=sha256:2523a29006c034687eccd3ee70093a697129a3ffe8732535d3b2df6a4ecc279d \ + --hash=sha256:26fbbe17f8a7211b623502d2bf41022a51da3025142401417c765bf9a56fed4c \ + --hash=sha256:2b66d61966b12e6bba500e5cbb2c721a35e119c30ee02495c5629bd0e91eea30 \ + --hash=sha256:2cf5d19e12eff855aa198259c0b02fd3f5d07e1291fbd20279c37b3b0e6c9852 \ + --hash=sha256:2cfda34b7cb99eacada2072e0f69c0ad3285cb6f8e480b11f2b6d6c1c6f92718 \ + --hash=sha256:3541882266247c7cd3dba78d6ef28dbe704774df60c9e4231edaa4493522e614 \ + --hash=sha256:36df958b15639e40472adaa4f0c2c7828fe680f894a6b48c4ce229f59a6a798b \ + --hash=sha256:38d394814b39be1c36ac709006d39d50d72a884f9551acd9c8cc1ffae3fc8c4e \ + --hash=sha256:4159fc1ec9ede8ab93382e0d6ba9b1b3d23c72da39a834db7a116986605c7ab4 \ + --hash=sha256:445c0851a1cbc1f2ec3b40bc22f9c4a235edb3c9a0906122a9df6ea8d51f886c \ + --hash=sha256:47defc0218682281a52fb1f6346ebb8b68b17538163a89ea24dfe4da37a8a9a3 \ + --hash=sha256:4cc5c8cd205a9810d16a5cd428cd81bac554ad1477cb87f4ad722b10992e794d \ + --hash=sha256:4ccf55f28066b4f08666764a957c2b7c241c7547b0921d69c7ceab5f74fe1a45 \ + --hash=sha256:4fb3fe591956d8841882c463f934c9f7485cfd5f763a08c0d467b513dc18ef89 \ + --hash=sha256:526f8397fc124674b8f39748680a0ff673bd6a715fecb4866716d36e380f015f \ + --hash=sha256:578bfcb16f4b8675ef71b960c00f174b0426e0eeb796bab6737389d8288eb827 \ + --hash=sha256:5b51969503709415a35754954c2763f536a70b8bf7360322b2edb0c0a44391f6 \ + --hash=sha256:5e58ec0375803526d395f6f7e730ecc45d06e15f68f7b9cdbf644a2918324e51 \ + --hash=sha256:62db44727d0befea68e8ad2881bb87a9cfb6b87d45dd78609009627167f37b69 \ + --hash=sha256:67090b17a0a5be5704fd109f231ee73cefb1b3802d41288d6378b5df46ae89ba \ + --hash=sha256:6cd14e61f0da2a2cfb9fe05bfced2a1ed7063ce46a7a8cd473be4973de9a7f91 \ + --hash=sha256:70740c2bc9ab1c99f7cdcb104f27d16c63860c56d51c5bf0ef82fc1d892a2131 \ + --hash=sha256:73009ea04205966d47e16d98686ac5c438af23a1bb30b48a2c5da3423ec9ce37 \ + --hash=sha256:791458a1f7d1b4ab3bd9e93e0dcd1d59ef7ee9aa051dcd1ea030e62e49b923fd \ + --hash=sha256:7f9511e48bde6b995825e8d35e434fc96296cf07a25f4aae24ff9162be7eaa46 \ + --hash=sha256:81c3d597591b0940e04949e4e4f79359b2d2e542a686ba0da5e25de33fec13e0 \ + --hash=sha256:8230a39bae6c2e8a09e4da6bace5064693b00590a4a213e38f9a9366da10e7dd \ + --hash=sha256:8b92a9f3ab904397a33b193000dc4de7318ea175c4c460a1e154c415f9008e3d \ + --hash=sha256:94cbe5535ef150546b8321aebea22862a3284da51e7b55f6f95b7d73e96d90ee \ + --hash=sha256:960ce1b790952916e682093788696ef7e33ac6a97482f9b983abdc293091b531 \ + --hash=sha256:99341ca1f1db9e7f47914cb2461305665a662383765ced6f843712564766956d \ + --hash=sha256:9aac6881454a750554ed4b280a839dcf9e2133a9d12ab4d417d673fb102289b7 \ + --hash=sha256:9d359b0a962e052b713647ac1f13eabf2263167b149ed1e27d5c579f5c8c7d2c \ + --hash=sha256:9dbab2a7e9c073bc9538824a01f5ed689194db7f55f2b8102766873e906a6c1a \ + --hash=sha256:a27b029caa3b555a4f3da54bc1e718eb55fcf1a11fda8bf0132147b476cf4c08 \ + --hash=sha256:a8b817d4ed68fd568ec5e45dd75ddf30cc72a47a6b41b74d5bb211374c296f5e \ + --hash=sha256:ad7d66422b9cc51125509229693d27e18c08f2dea3ac9de408d821932b1b3759 \ + --hash=sha256:b46e79a9f4db53897d17bc64a39d1c7c2be3e3d4f8dba6d6730a2b13ddf0f986 \ + --hash=sha256:baa96a3418e27d723064854143b2f414a422c84cc87285a71558722049bebc5a \ + --hash=sha256:beeca903e4270b4afcd114f371a9602240dc143f9e944edfea00f8d4ad56c40d \ + --hash=sha256:c2a1168e5aa7c72499fb03c850e0f03f624fa4a5c8d2e215c518d0a73872eb64 \ + --hash=sha256:c5790cc603456b6dcf8a9a4765f666895a6afddc88b3d3ba7b53dea2b6e23116 \ + --hash=sha256:cb4a08f0aaaa869f189ffea0e17b86ad0237b51116d494da15ef7991ee6ad2d7 \ + --hash=sha256:cd5771e8ea325f85cbb361ddbdeb9ae424a68e5dfb6eea786afdcd22e68a7d5d \ + --hash=sha256:ce8e51774eb03844588d3c279adb94efcd0edeccd2f97516623292445bcc01f9 \ + --hash=sha256:d09daf5c6ce7fc6ed444c9339bbde5ea84e2534d1ca1cd37b60f365c77f00dea \ + --hash=sha256:d0e798b072cf2aab9daceb43d97c9c527a0c7593e67a7846ad4cc6051de1e303 \ + --hash=sha256:d325d61cac602976a5d47b19eaa7d04e3daf4efce2164c630219885087234102 \ + --hash=sha256:d408172519049e36fb6d29672f060dc8461fc7174eba9883c7026041ef9bfb38 \ + --hash=sha256:d52442e7c951e4c9ee591d6047706e66923d248d83958bbf99b8b19515fffaef \ + --hash=sha256:dc4cfef5d899f5f1a15f3d2ac49f71107a01a5a2745b4dd53fa0cede1419385a \ + --hash=sha256:df7b4cee3ff31b3335aba602f8d70dbc641e5b7164b1e9565570c9d3c536a438 \ + --hash=sha256:e068dfeadbce63072b2d8096486713d04db4946aad0a0f849bd4fc300799d0d3 \ + --hash=sha256:e07c24018986fb00d6e7eafca8fcd6e05095649e17fcf0e33a592caaa62a78b9 \ + --hash=sha256:e0bce9f7c30e7e3a9e683f670314c0144e8d34be6b7019e40604763bd278d84f \ + --hash=sha256:e1925f78a543b94c3d46274c66a366fee8a263747060220ed0188e5f3eeea1c0 \ + --hash=sha256:e322c94596054352f5a02771eec71563c018b15699b961aba14d6dd943367022 \ + --hash=sha256:e4a095e18847c12ec20e55326ab8782d9c2d599400a3a2f174fab4796875d0e2 \ + --hash=sha256:e5a811aab1b4aea0b4be669363c19847a8c547510f0e18fb632956369fdbdf67 \ + --hash=sha256:eddf604a3de2ace3d9a4e4d491be7562a1ac095a0a1c95a9ec5781ef0273ef11 \ + --hash=sha256:ee9b1cae9a6c5d023e5a150f6f6b9dbb3c3bbc7887d6ee07d4c0ecb49a473734 \ + --hash=sha256:f1650ea41c408755da5eed52ac6ccbc8938ccc3e698d81e6f6a1be02ff2a0945 \ + --hash=sha256:f2c0957b3e8c66c10d27272709a5299ab3670a0f187c9428f3b90d267119aedb \ + --hash=sha256:f76109387e1ec8d8e2137c94c437b89fe002f29e0881aae8ae45529bdff92000 \ + --hash=sha256:f8a728511c977df6f3d8af388fcb157e49f11db4a6637dd60131b8b6e40b0253 \ + --hash=sha256:fb6c3dc3d65014d2c782f5acf0b3ba14e639c6c33d3ed8932ead76b9080b3544 # via # -r requirements/dev-requirements.in # yarl -mypy==0.910 \ - --hash=sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9 \ - --hash=sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a \ - --hash=sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9 \ - --hash=sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e \ - --hash=sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2 \ - --hash=sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212 \ - --hash=sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b \ - --hash=sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885 \ - --hash=sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150 \ - --hash=sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703 \ - --hash=sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072 \ - --hash=sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457 \ - --hash=sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e \ - --hash=sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0 \ - --hash=sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb \ - --hash=sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97 \ - --hash=sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8 \ - --hash=sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811 \ - --hash=sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6 \ - --hash=sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de \ - --hash=sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504 \ - --hash=sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921 \ - --hash=sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d +mypy==0.991 \ + --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ + --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ + --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ + --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ + --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ + --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ + --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ + --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ + --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ + --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ + --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ + --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ + --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ + --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ + --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ + --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ + --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ + --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ + --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ + --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ + --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ + --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ + --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ + --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ + --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ + --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ + --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ + --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ + --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ + --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef # via -r requirements/dev-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ @@ -191,31 +240,35 @@ orderedmultidict==1.0 \ # via # -r requirements/requirements.in # furl -pathspec==0.9.0 \ - --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ - --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1 +packaging==22.0 \ + --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ + --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 + # via build +pathspec==0.10.3 \ + --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ + --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 # via black -pep517==0.11.0 \ - --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ - --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 - # via pip-tools -pip-tools==6.2.0 \ - --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ - --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 +pep517==0.13.0 \ + --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ + --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 + # via build +pip-tools==6.12.0 \ + --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ + --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e # via -r requirements/dev-requirements.in -platformdirs==2.3.0 \ - --hash=sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f \ - --hash=sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648 +platformdirs==2.6.0 \ + --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ + --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e # via black -pycodestyle==2.7.0 \ - --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ - --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef +pycodestyle==2.10.0 \ + --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ + --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 # via # -r requirements/dev-requirements.in # flake8 -pyflakes==2.3.1 \ - --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ - --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db +pyflakes==3.0.1 \ + --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ + --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via # -r requirements/dev-requirements.in # flake8 @@ -252,49 +305,6 @@ pyyaml==5.4.1 \ # via # -r requirements/requirements.in # vcrpy -regex==2021.8.28 \ - --hash=sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468 \ - --hash=sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354 \ - --hash=sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308 \ - --hash=sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d \ - --hash=sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc \ - --hash=sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8 \ - --hash=sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797 \ - --hash=sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2 \ - --hash=sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13 \ - --hash=sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d \ - --hash=sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a \ - --hash=sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0 \ - --hash=sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73 \ - --hash=sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1 \ - --hash=sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed \ - --hash=sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a \ - --hash=sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b \ - --hash=sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f \ - --hash=sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256 \ - --hash=sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb \ - --hash=sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2 \ - --hash=sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983 \ - --hash=sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb \ - --hash=sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645 \ - --hash=sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8 \ - --hash=sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a \ - --hash=sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906 \ - --hash=sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f \ - --hash=sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c \ - --hash=sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892 \ - --hash=sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0 \ - --hash=sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e \ - --hash=sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e \ - --hash=sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed \ - --hash=sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c \ - --hash=sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374 \ - --hash=sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd \ - --hash=sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791 \ - --hash=sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a \ - --hash=sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1 \ - --hash=sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759 - # via black requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 @@ -308,144 +318,202 @@ six==1.11.0 \ # furl # orderedmultidict # vcrpy -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f - # via mypy -tomli==1.2.1 \ - --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ - --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 - # via - # black - # pep517 -typed-ast==1.4.3 \ - --hash=sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace \ - --hash=sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff \ - --hash=sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266 \ - --hash=sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528 \ - --hash=sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6 \ - --hash=sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808 \ - --hash=sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4 \ - --hash=sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363 \ - --hash=sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341 \ - --hash=sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04 \ - --hash=sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41 \ - --hash=sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e \ - --hash=sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3 \ - --hash=sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899 \ - --hash=sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805 \ - --hash=sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c \ - --hash=sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c \ - --hash=sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39 \ - --hash=sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a \ - --hash=sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3 \ - --hash=sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7 \ - --hash=sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f \ - --hash=sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075 \ - --hash=sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0 \ - --hash=sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40 \ - --hash=sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428 \ - --hash=sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927 \ - --hash=sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3 \ - --hash=sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f \ - --hash=sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via # black + # build # mypy -types-pyyaml==5.4.10 \ - --hash=sha256:1d9e431e9f1f78a65ea957c558535a3b15ad67ea4912bce48a6c1b613dcf81ad \ - --hash=sha256:f1d1357168988e45fa20c65aecb3911462246a84809015dd889ebf8b1db74124 +types-pyyaml==6.0.12.2 \ + --hash=sha256:1e94e80aafee07a7e798addb2a320e32956a373f376655128ae20637adb2655b \ + --hash=sha256:6840819871c92deebe6a2067fb800c11b8a063632eb4e3e755914e7ab3604e83 # via -r requirements/dev-requirements.in -types-requests==2.25.6 \ - --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ - --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee +types-requests==2.28.11.5 \ + --hash=sha256:091d4a5a33c1b4f20d8b1b952aa8fa27a6e767c44c3cf65e56580df0b05fd8a9 \ + --hash=sha256:a7df37cc6fb6187a84097da951f8e21d335448aa2501a6b0a39cbd1d7ca9ee2a # via -r requirements/dev-requirements.in -typing-extensions==3.10.0.2 \ - --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ - --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ - --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 +types-urllib3==1.26.25.4 \ + --hash=sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49 \ + --hash=sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee + # via types-requests +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via # black - # importlib-metadata # mypy - # yarl urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f # via # -r requirements/requirements.in # requests -vcrpy==4.1.1 \ - --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ - --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 +vcrpy==4.2.1 \ + --hash=sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013 \ + --hash=sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09 # via -r requirements/dev-requirements.in werkzeug==2.0.2 \ --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a # via -r requirements/requirements.in -wheel==0.37.0 \ - --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ - --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -wrapt==1.12.1 \ - --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 +wrapt==1.14.1 \ + --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ + --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ + --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ + --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ + --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ + --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ + --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ + --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ + --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ + --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ + --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ + --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ + --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ + --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ + --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ + --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ + --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ + --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ + --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ + --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ + --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ + --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ + --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ + --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ + --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ + --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ + --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ + --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ + --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ + --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ + --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ + --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ + --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ + --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ + --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ + --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ + --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ + --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ + --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ + --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ + --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ + --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ + --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ + --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ + --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ + --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ + --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ + --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ + --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ + --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ + --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ + --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ + --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ + --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ + --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ + --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ + --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ + --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ + --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ + --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ + --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ + --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ + --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ + --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via # -r requirements/dev-requirements.in # vcrpy -yarl==1.6.3 \ - --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ - --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \ - --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \ - --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \ - --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \ - --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \ - --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \ - --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \ - --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \ - --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \ - --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \ - --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \ - --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \ - --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \ - --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \ - --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \ - --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \ - --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \ - --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \ - --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \ - --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \ - --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \ - --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \ - --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \ - --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \ - --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \ - --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \ - --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \ - --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \ - --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \ - --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \ - --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \ - --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \ - --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \ - --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \ - --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ - --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 +yarl==1.8.2 \ + --hash=sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87 \ + --hash=sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89 \ + --hash=sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a \ + --hash=sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08 \ + --hash=sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996 \ + --hash=sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077 \ + --hash=sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901 \ + --hash=sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e \ + --hash=sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee \ + --hash=sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574 \ + --hash=sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165 \ + --hash=sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634 \ + --hash=sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229 \ + --hash=sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b \ + --hash=sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f \ + --hash=sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7 \ + --hash=sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf \ + --hash=sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89 \ + --hash=sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0 \ + --hash=sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1 \ + --hash=sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe \ + --hash=sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf \ + --hash=sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76 \ + --hash=sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951 \ + --hash=sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863 \ + --hash=sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06 \ + --hash=sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562 \ + --hash=sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6 \ + --hash=sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c \ + --hash=sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e \ + --hash=sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1 \ + --hash=sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3 \ + --hash=sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3 \ + --hash=sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778 \ + --hash=sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8 \ + --hash=sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2 \ + --hash=sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b \ + --hash=sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d \ + --hash=sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f \ + --hash=sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c \ + --hash=sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581 \ + --hash=sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918 \ + --hash=sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c \ + --hash=sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e \ + --hash=sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220 \ + --hash=sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37 \ + --hash=sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739 \ + --hash=sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77 \ + --hash=sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6 \ + --hash=sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42 \ + --hash=sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946 \ + --hash=sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5 \ + --hash=sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d \ + --hash=sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146 \ + --hash=sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a \ + --hash=sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83 \ + --hash=sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef \ + --hash=sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80 \ + --hash=sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588 \ + --hash=sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5 \ + --hash=sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2 \ + --hash=sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef \ + --hash=sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826 \ + --hash=sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05 \ + --hash=sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516 \ + --hash=sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0 \ + --hash=sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4 \ + --hash=sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2 \ + --hash=sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0 \ + --hash=sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd \ + --hash=sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8 \ + --hash=sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b \ + --hash=sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1 \ + --hash=sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c # via # -r requirements/dev-requirements.in # vcrpy -zipp==3.5.0 \ - --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ - --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 - # via - # importlib-metadata - # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==21.2.4 \ - --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ - --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 +pip==22.3.1 \ + --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ + --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 # via pip-tools -setuptools==58.0.4 \ - --hash=sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770 \ - --hash=sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b +setuptools==65.6.3 \ + --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ + --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in index 9354373d7..66c290ef2 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,4 +1,4 @@ -certifi>=2021.5.30 +certifi>=2022.12.07 charset-normalizer>=2.0.4 furl==2.0.0 idna>=2.7 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index cd33d0ed7..94b944bd8 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,12 +1,12 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via # -r requirements/requirements.in # requests From 337421c36299d17e60c1bd97955e93ed0e71bd38 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 16 Dec 2022 16:07:50 -0500 Subject: [PATCH 523/751] Bump certifi to 2022.12.7 Matches . --- requirements/dev-requirements.txt | 8 ++++---- requirements/requirements.txt | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 2a8537a8a..8fda6326c 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in @@ -12,9 +12,9 @@ black==21.8b0 \ --hash=sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7 \ --hash=sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2 # via -r requirements/dev-requirements.in -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via # -r requirements/requirements.in # requests diff --git a/requirements/requirements.txt b/requirements/requirements.txt index ecfb3a207..e66cc836f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,12 +1,12 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via # -r requirements/requirements.in # requests From d027bc5cc2f812dced82ebcd7ef7aea6a274b754 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 16 Dec 2022 16:12:42 -0500 Subject: [PATCH 524/751] Bump wheel to 0.38.4 For another security issue. --- requirements/dev-requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 8fda6326c..3aa32820f 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -403,9 +403,9 @@ vcrpy==4.1.1 \ --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 # via -r requirements/dev-requirements.in -wheel==0.37.0 \ - --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ - --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools wrapt==1.12.1 \ --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 From 9484a1ff1a079241b8f4089baf087ce8166fbf57 Mon Sep 17 00:00:00 2001 From: Ro Date: Fri, 16 Dec 2022 12:02:14 -0800 Subject: [PATCH 525/751] Update developer requirements --- requirements/dev-bookworm-requirements.txt | 256 ++++++++++----------- requirements/dev-bullseye-requirements.txt | 256 ++++++++++----------- 2 files changed, 246 insertions(+), 266 deletions(-) diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt index fd153a461..46cccac92 100644 --- a/requirements/dev-bookworm-requirements.txt +++ b/requirements/dev-bookworm-requirements.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in requirements/requirements.in # attrs==21.4.0 \ --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ @@ -12,28 +12,19 @@ attrs==21.4.0 \ # jsonschema # pytest # semgrep -black==22.10.0 \ - --hash=sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7 \ - --hash=sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6 \ - --hash=sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650 \ - --hash=sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb \ - --hash=sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d \ - --hash=sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d \ - --hash=sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de \ - --hash=sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395 \ - --hash=sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae \ - --hash=sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa \ - --hash=sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef \ - --hash=sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383 \ - --hash=sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66 \ - --hash=sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87 \ - --hash=sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d \ - --hash=sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0 \ - --hash=sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b \ - --hash=sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458 \ - --hash=sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4 \ - --hash=sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1 \ - --hash=sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff +black==22.12.0 \ + --hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \ + --hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \ + --hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \ + --hash=sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f \ + --hash=sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf \ + --hash=sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148 \ + --hash=sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4 \ + --hash=sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d \ + --hash=sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc \ + --hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \ + --hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \ + --hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f # via -r requirements/dev-bookworm-requirements.in boltons==21.0.0 \ --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ @@ -50,9 +41,9 @@ build==0.9.0 \ --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 # via pip-tools -certifi==2022.9.24 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -138,9 +129,9 @@ face==22.0.0 \ --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d # via glom -flake8==5.0.4 \ - --hash=sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db \ - --hash=sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248 +flake8==6.0.0 \ + --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ + --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 # via -r requirements/dev-bookworm-requirements.in glom==22.1.0 \ --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ @@ -154,9 +145,9 @@ iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -jsonschema==4.17.1 \ - --hash=sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3 \ - --hash=sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7 +jsonschema==4.17.3 \ + --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ + --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 # via semgrep mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ @@ -173,9 +164,9 @@ packaging==21.3 \ # build # pytest # semgrep -pathspec==0.10.2 \ - --hash=sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5 \ - --hash=sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0 +pathspec==0.10.3 \ + --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ + --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 # via black peewee==3.15.4 \ --hash=sha256:2581520c8dfbacd9d580c2719ae259f0637a9e46eda47dfc0ce01864c6366205 @@ -184,25 +175,29 @@ pep517==0.13.0 \ --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 # via build -pip-tools==6.10.0 \ - --hash=sha256:57ac98392548f5ca96c2831927deec3035efe81ff476e3c744bd474ca9c6a1f2 \ - --hash=sha256:7f9f7356052db6942b5aaabc8eba29983591ca0ad75affbf2f0a25d9361be624 +pip==22.3.1 \ + --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ + --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 + # via pip-tools +pip-tools==6.12.0 \ + --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ + --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e # via -r requirements/dev-bookworm-requirements.in -platformdirs==2.5.4 \ - --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ - --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 +platformdirs==2.6.0 \ + --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ + --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e # via black pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -pycodestyle==2.9.1 \ - --hash=sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785 \ - --hash=sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b +pycodestyle==2.10.0 \ + --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ + --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 # via flake8 -pyflakes==2.5.0 \ - --hash=sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2 \ - --hash=sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3 +pyflakes==3.0.1 \ + --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ + --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 pyparsing==3.0.9 \ --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ @@ -269,6 +264,7 @@ ruamel-yaml-clib==0.2.7 \ --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ + --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ @@ -294,12 +290,16 @@ ruamel-yaml-clib==0.2.7 \ --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 # via ruamel-yaml -semgrep==0.122.0 \ - --hash=sha256:6116391b0c8c87581d9d72113702b6f8c2938d799cdae7d71a845ec89249566c \ - --hash=sha256:a4c7400eb8bec9fe8df25520d1ffcb5d78b87c73dc654f1c2aec1195789bc611 \ - --hash=sha256:c7002b9aba97deb6677f4cabfa5dcc8faef2808ce6a6f28ecdd70cd8e90b01b5 \ - --hash=sha256:e3fb9956e2bb926cfeff52deafe4cec24d5f1e91fe6d3fc4f81e86ec452b2ad5 +semgrep==1.2.0 \ + --hash=sha256:31f5f764ff114e2e56b3a93b09829f738cb9e287af7479e2c4714c77b10dc5c0 \ + --hash=sha256:cba38f882c9fedd00462247474a991715d5c8faf169e38cfbf299c7c89ccad55 \ + --hash=sha256:d7b9ccffab1cbecb7870e6792dc274f6a63133910150f33b6ba07d28f5cf00d5 \ + --hash=sha256:e04dbc4a95ddfc9b07550b09b88f61c5c7d81817fac1c86683d8c2534514ac6c # via -r requirements/dev-bookworm-requirements.in +setuptools==65.6.3 \ + --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ + --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 + # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -318,76 +318,76 @@ typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via semgrep -ujson==5.5.0 \ - --hash=sha256:0762a4fdf86e01f3f8d8b6b7158d01fdd870799ff3f402b676e358fcd879e7eb \ - --hash=sha256:10095160dbe6bba8059ad6677a01da251431f4c68041bf796dcac0956b34f8f7 \ - --hash=sha256:1a485117f97312bef45f5d79d2ff97eff4da503b8a04f3691f59d31141686459 \ - --hash=sha256:1cef44ea4973344baed3d50a5da4a8843de3a6af7dea7fadf0a594e53ce5892f \ - --hash=sha256:1dc2f46c31ef22b0aaa28cd71be897bea271e700636658d573df9c43c49ebbd0 \ - --hash=sha256:21678d7e068707e4d54bdfeb8c250ebc548b51e499aed778b22112ca31a79669 \ - --hash=sha256:278aa9d7cb56435c96d19f5d702e026bcf69f824e24b41e9b52706abd3565837 \ - --hash=sha256:2ab011e3556a9a1d9461bd686870c527327765ed02fe53550531d6609a8a33ff \ - --hash=sha256:2d90414e3b4b44b39825049185959488e084ea7fcaf6124afd5c00893938b09d \ - --hash=sha256:2e506ecf89b6b9d304362ccef770831ec242a52c89dab1b4aabf1ab0eb1d5ed6 \ - --hash=sha256:33cd9084fefc74cbacf88c92fd260b61211e00bcde38d640c369e5dc34a2b4e1 \ - --hash=sha256:3b74467564814fbce322427a5664e6bcc7dae6dbc8acbef76300fe43ca4072ab \ - --hash=sha256:3f3f4240d99d55eb97cb012e9adf401f5ed9cd827af0341ac44603832202b0d2 \ - --hash=sha256:3fe1aea596f9539fc20cd9e52f098c842afc090168824fd4ca9744fe13151a03 \ - --hash=sha256:4a8cb3c8637006c5bd8237ebb5992a76ba06e39988ad5cff2096227443e8fd6a \ - --hash=sha256:4ef4ab8352861b99bd7fedb1fc6df3ea7f7d5216c789ba6d859e4ea06f1a4c45 \ - --hash=sha256:5035bb997d163f346c22abcec75190e7e756a5349e7c708bd3d5fd7066a9a854 \ - --hash=sha256:593a0f6fb0e186c5ba65465ed6f6215a30d1efa898c25e74de1c8577a1bff6d0 \ - --hash=sha256:59cdcd934385f36e8bd76aedc234371cc75c848d95bdce804ac8aa8744cfeffa \ - --hash=sha256:5a9b1320d8363a42d857fae8065a2174d38217cdd58cd8dc4f48d54e0591271e \ - --hash=sha256:5f9681ec4c60d0da590552427d770636d9079038c30b265f507ccde23caa7823 \ - --hash=sha256:5fd797a4837ba10671954e7c09010cec7aca67e09d193f4920a16beea5f66f65 \ - --hash=sha256:6019e3480d933d3698f2ecb4b46d64bfadd64e718f04fac36e681f3254b49a93 \ - --hash=sha256:603607f56a0ee84d9cd2c7e9b1d29b18a70684b94ee34f07b9ffe8dc9c8a9f81 \ - --hash=sha256:60a4b481978ea2aad8fe8af1ecc271624d01b3cf4b09e9b643dd2fe19c07634c \ - --hash=sha256:6b9812638d7aa8ecda2e8e1513fb4da999249603bffab7439a5f8f0bb362b0db \ - --hash=sha256:6c7ae6e0778ab9610f5e80e0595957d101ab8de18c32a8c053a19943ef4831d0 \ - --hash=sha256:6f83be8257b2f2dd6dea5ee62cd28db90584da7a7af1fba77a2102fc7943638a \ - --hash=sha256:701e81e047f5c0cffd4ac828efca68b0bd270c616654966a051e9a5f836b385e \ - --hash=sha256:703fd69d9cb21d6ec2086789df9be2cf8140a76ff127050c24007ea8940dcd3b \ - --hash=sha256:7471d4486f23518cff343f1eec6c68d1b977ed74c3e6cc3e1ac896b9b7d68645 \ - --hash=sha256:765d46f3d5e7a1d48075035e2d1a9164f683e3fccde834ca04602e6c588835bc \ - --hash=sha256:7a09d203983104918c62f2eef9406f24c355511f9217967df23e70fa7f5b54ff \ - --hash=sha256:7c20cc83b0df47129ec6ed8a47fa7dcfc309c5bad029464004162738502568bb \ - --hash=sha256:7d7cfac2547c93389fa303fc0c0eb6698825564e8389c41c9b60009c746207b6 \ - --hash=sha256:7d87c817b292efb748f1974f37e8bb8a8772ef92f05f84e507159360814bcc3f \ - --hash=sha256:8141f654432cf75144d6103bfac2286b8adf23467201590b173a74535d6be22d \ - --hash=sha256:849f2ff40264152f25589cb48ddb4a43d14db811f841ec73989bfc0c8c4853fa \ - --hash=sha256:880c84ce59f49776cf120f77e7ca04877c97c6887917078dbc369eb47004d7cf \ - --hash=sha256:94874584b733a18b310b0e954d53168e62cd4a0fd9db85b1903f0902a7eb33e8 \ - --hash=sha256:95603eff711b8f3b9596e1c961dbeb745a792ba1904141612f194e07edd71e5f \ - --hash=sha256:9585892091ae86045135d6a6129a644142d6a51b23e1428bb5de6d10bc0ce0c7 \ - --hash=sha256:977bf5be704a88d46bf5b228df8b44521b1f3119d741062191608b3a6a38f224 \ - --hash=sha256:9cdc46859024501c20ab74ad542cdf2f08b94b5ce384f2f569483fa3ed926d04 \ - --hash=sha256:a34a5f034b339f69ef7f6a134c22d04b92e07b6ddc1dd65382e7e4ec65d6437d \ - --hash=sha256:a655f7b755cfc5c07f2116b6dcf0ba148c89adef9a6d40c1b0f1fada878c4345 \ - --hash=sha256:a7d12f2d2df195c8c4e49d2cdbad640353a856c62ca2c624d8b47aa33b65a2a2 \ - --hash=sha256:abfe83e082c9208891e2158c1b5044a650ecec408b823bf6bf16cd7f8085cafa \ - --hash=sha256:b25077a971c7da47bd6846a912a747f6963776d90720c88603b1b55d81790780 \ - --hash=sha256:bf416a93e1331820c77e3429df26946dbd4fe105e9b487cd2d1b7298b75784a8 \ - --hash=sha256:c04ae27e076d81a3839047d8eed57c1e17e361640616fd520d752375e3ba8f0c \ - --hash=sha256:d5bea13c73f36c4346808df3fa806596163a7962b6d28001ca2a391cab856089 \ - --hash=sha256:d75bef34e69e7effb7b4849e3f830e3174d2cc6ec7273503fdde111c222dc9b3 \ - --hash=sha256:d93940664a5ccfd79f72dcb939b0c31a3479889f14f0eb95ec52976f8c0cae7d \ - --hash=sha256:d9c89c521dc90c7564358e525f849b93ad1d710553c1491f66b8cce8113bc901 \ - --hash=sha256:e0b36257dc90194784531c3b922d8d31fb2b4d8e5adfd27aff4eee7174176365 \ - --hash=sha256:e1135264bcd40965cd35b0869e36952f54825024befdc7a923df9a7d83cfd800 \ - --hash=sha256:e510d288e613d6927796dfb728e13e4530fc83b9ccac5888a21f7860486eab21 \ - --hash=sha256:ee9a2c9a4b2421e77f8fe33ed0621dea03c66c710707553020b1e32f3afb6240 \ - --hash=sha256:f19f11055ba2961eb39bdb1ff15763a53fca4fa0b5b624da3c7a528e83cdd09c \ - --hash=sha256:f26544bc10c83a2ff9aa2e093500c1b473f327faae31fb468d591e5823333376 \ - --hash=sha256:f4875cafc9a6482c04c7df52a725d1c41beb74913c0ff4ec8f189f1954a2afe9 \ - --hash=sha256:f5179088ef6487c475604b7898731a6ddeeada7702cfb2162155b016703a8475 \ - --hash=sha256:f63d1ae1ca17bb2c847e298c7bcf084a73d56d434b4c50509fb93a4b4300b0b2 \ - --hash=sha256:ff4928dc1e9704b567171c16787238201fdbf023665573c12c02146fe1e02eec +ujson==5.6.0 \ + --hash=sha256:0f0f21157d1a84ad5fb54388f31767cde9c1a48fb29de7ef91d8887fdc2ca92b \ + --hash=sha256:1217326ba80eab1ff3f644f9eee065bd4fcc4e0c068a2f86f851cafd05737169 \ + --hash=sha256:169b3fbd1188647c6ce00cb690915526aff86997c89a94c1b50432010ad7ae0f \ + --hash=sha256:1a7e4023c79d9a053c0c6b7c6ec50ea0af78381539ab27412e6af8d9410ae555 \ + --hash=sha256:20d929a27822cb79e034cc5e0bb62daa0257ab197247cb6f35d5149f2f438983 \ + --hash=sha256:213e41dc501b4a6d029873039da3e45ba7766b9f9eba97ecc4287c371f5403cc \ + --hash=sha256:23051f062bb257a87f3e55ea5a055ea98d56f08185fd415b34313268fa4d814e \ + --hash=sha256:24d40e01accbf4f0ba5181c4db1bac83749fdc1a5413466da582529f2a096085 \ + --hash=sha256:2a24b9a96364f943a4754fa00b47855d0a01b84ac4b8b11ebf058c8fb68c1f77 \ + --hash=sha256:2cb7a4bd91de97b4c8e57fb5289d1e5f3f019723b59d01d79e2df83783dce5a6 \ + --hash=sha256:31288f85db6295ec63e128daff7285bb0bc220935e1b5107bd2d67e2dc687b7e \ + --hash=sha256:35423460954d0c61602da734697724e8dd5326a8aa7900123e584b935116203e \ + --hash=sha256:355ef5311854936b9edc7f1ce638f8257cb45fb6b9873f6b2d16a715eafc9570 \ + --hash=sha256:3a68a204386648ec92ae9b526c1ffca528f38221eca70f98b4709390c3204275 \ + --hash=sha256:3ad74eb53ee07e76c82f9ef8e7256c33873b81bd1f97a274fdb65ed87c2801f6 \ + --hash=sha256:3b49a1014d396b962cb1d6c5f867f88b2c9aa9224c3860ee6ff63b2837a2965b \ + --hash=sha256:3f00dff3bf26bbb96791ceaf51ca95a3f34e2a21985748da855a650c38633b99 \ + --hash=sha256:3f8b9e8c0420ce3dcc193ab6dd5628840ba79ad1b76e1816ac7ca6752c6bf035 \ + --hash=sha256:52f536712d16a1f4e0f9d084982c28e11b7e70c397a1059069e4d28d53b3f522 \ + --hash=sha256:551408a5c4306839b4a4f91503c96069204dbef2c7ed91a9dab08874ac1ed679 \ + --hash=sha256:57904e5b49ffe93189349229dcd83f73862ef9bb8517e8f1e62d0ff73f313847 \ + --hash=sha256:5e5715b0e2767b1987ceed0066980fc0a53421dd2f197b4f88460d474d6aef4c \ + --hash=sha256:61fdf24f7bddc402ce06b25e4bed7bf5ee4f03e23028a0a09116835c21d54888 \ + --hash=sha256:6d0a60c5f065737a81249c819475d001a86da9a41900d888287e34619c9b4851 \ + --hash=sha256:6ea9024749a41864bffb12da15aace4a3193c03ea97e77b069557aefa342811f \ + --hash=sha256:7174e81c137d480abe2f8036e9fb69157e509f2db0bfdee4488eb61dc3f0ff6b \ + --hash=sha256:72fa6e850831280a46704032721c75155fd41b839ddadabb6068ab218c56a37a \ + --hash=sha256:74671d1bde8c03daeb92abdbd972960978347b1a1d432c4c1b3c9284ce4094cf \ + --hash=sha256:798116b88158f13ed687417526100ef353ba4692e0aef8afbc622bd4bf7e9057 \ + --hash=sha256:7a66c5a75b46545361271b4cf55560d9ad8bad794dd054a14b3fbb031407948e \ + --hash=sha256:7bde16cb18b95a8f68cc48715e4652b394b4fee68cb3f9fee0fd7d26b29a53b6 \ + --hash=sha256:82bf24ea72a73c7d77402a7adc954931243e7ec4241d5738ae74894b53944458 \ + --hash=sha256:87578ccfc35461c77e73660fb7d89bc577732f671364f442bda9e2c58b571765 \ + --hash=sha256:91000612a2c30f50c6a009e6459a677e5c1972e51b59ecefd6063543dc47a4e9 \ + --hash=sha256:9cf04fcc958bb52a6b6c301b780cb9afab3ec68713b17ca5aa423e1f99c2c1cf \ + --hash=sha256:9f4efcac06f45183b6ed8e2321554739a964a02d8aa3089ec343253d86bf2804 \ + --hash=sha256:a51cbe614acb5ea8e2006e4fd80b4e8ea7c51ae51e42c75290012f4925a9d6ab \ + --hash=sha256:a8795de7ceadf84bcef88f947f91900d647eda234a2c6cc89912c25048cc0490 \ + --hash=sha256:ae723b8308ac17a591bb8be9478b58c2c26fada23fd2211fc323796801ad7ff5 \ + --hash=sha256:aff708a1b9e2d4979f74375ade0bff978be72c8bd90422a756d24d8a46d78059 \ + --hash=sha256:b2aece7a92dffc9c78787f5f36e47e24b95495812270c27abc2fa430435a931d \ + --hash=sha256:b4420bfff18ca6aa39cfb22fe35d8aba3811fa1190c4f4e1ad816b0aad72f7e3 \ + --hash=sha256:b64d2ac99503a9a5846157631addacc9f74e23f64d5a886fe910e9662660fa10 \ + --hash=sha256:b72d4d948749e9c6afcd3d7af9ecc780fccde84e26d275c97273dd83c68a488b \ + --hash=sha256:b74396a655ac8a5299dcb765b4a17ba706e45c0df95818bcc6c13c4645a1c38e \ + --hash=sha256:b9e9d26600020cf635a4e58763959f5a59f8c70f75d72ebf26ceae94c2efac74 \ + --hash=sha256:bca074d08f0677f05df8170b25ce6e61db3bcdfda78062444972fa6508dc825f \ + --hash=sha256:bca3c06c3f10ce03fa80b1301dce53765815c2578a24bd141ce4e5769bb7b709 \ + --hash=sha256:bfb1fdf61763fafc0f8a20becf9cc4287c14fc41c0e14111d28c0d0dfda9ba56 \ + --hash=sha256:c169e12642f0edf1dde607fb264721b88787b55a6da5fb3824302a9cac6f9405 \ + --hash=sha256:c4277f6b1d24be30b7f87ec5346a87693cbc1e55bbc5877f573381b2250c4dd6 \ + --hash=sha256:ceee5aef3e234c7e998fdb52e5236c41e50cdedc116360f7f1874a04829f6490 \ + --hash=sha256:d1b5e233e42f53bbbc6961caeb492986e9f3aeacd30be811467583203873bad2 \ + --hash=sha256:d6f4be832d97836d62ac0c148026ec021f9f36481f38e455b51538fcd949ed2a \ + --hash=sha256:dd5ccc036b0f4721b98e1c03ccc604e7f3e1db53866ccc92b2add40ace1782f7 \ + --hash=sha256:dde59d2f06297fc4e70b2bae6e4a6b3ce89ca89697ab2c41e641abae3be96b0c \ + --hash=sha256:e4be7d865cb5161824e12db71cee83290ab72b3523566371a30d6ba1bd63402a \ + --hash=sha256:e97af10b6f13a498de197fb852e9242064217c25dfca79ebe7ad0cf2b0dd0cb7 \ + --hash=sha256:f2d70b7f0b485f85141bbc518d0581ae96b912d9f8b070eaf68a9beef8eb1e60 \ + --hash=sha256:f3e651f04b7510fae7d4706a4600cd43457f015df08702ece82a71339fc15c3d \ + --hash=sha256:f63535d51e039a984b2fb67ff87057ffe4216d4757c3cedf2fc846af88253cb7 \ + --hash=sha256:f881e2d8a022e9285aa2eab6ba8674358dbcb2b57fa68618d88d62937ac3ff04 \ + --hash=sha256:fadebaddd3eb71a5c986f0bdc7bb28b072bfc585c141eef37474fc66d1830b0a \ + --hash=sha256:fb1632b27e12c0b0df62f924c362206daf246a42c0080e959dd465810dc3482e \ + --hash=sha256:fecf83b2ef3cbce4f5cc573df6f6ded565e5e27c1af84038bae5ade306686d82 # via python-lsp-jsonrpc -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.13 \ + --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ + --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 # via # requests # semgrep @@ -399,13 +399,3 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools - -# The following packages are considered to be unsafe in a requirements file: -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 - # via pip-tools -setuptools==65.6.0 \ - --hash=sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840 \ - --hash=sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d - # via pip-tools diff --git a/requirements/dev-bullseye-requirements.txt b/requirements/dev-bullseye-requirements.txt index 3271ab69c..36465c3fb 100644 --- a/requirements/dev-bullseye-requirements.txt +++ b/requirements/dev-bullseye-requirements.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in requirements/requirements.in # attrs==21.4.0 \ --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ @@ -12,28 +12,19 @@ attrs==21.4.0 \ # jsonschema # pytest # semgrep -black==22.10.0 \ - --hash=sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7 \ - --hash=sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6 \ - --hash=sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650 \ - --hash=sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb \ - --hash=sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d \ - --hash=sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d \ - --hash=sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de \ - --hash=sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395 \ - --hash=sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae \ - --hash=sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa \ - --hash=sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef \ - --hash=sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383 \ - --hash=sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66 \ - --hash=sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87 \ - --hash=sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d \ - --hash=sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0 \ - --hash=sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b \ - --hash=sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458 \ - --hash=sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4 \ - --hash=sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1 \ - --hash=sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff +black==22.12.0 \ + --hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \ + --hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \ + --hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \ + --hash=sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f \ + --hash=sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf \ + --hash=sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148 \ + --hash=sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4 \ + --hash=sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d \ + --hash=sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc \ + --hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \ + --hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \ + --hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f # via -r requirements/dev-bullseye-requirements.in boltons==21.0.0 \ --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ @@ -50,9 +41,9 @@ build==0.9.0 \ --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 # via pip-tools -certifi==2022.9.24 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -138,9 +129,9 @@ face==22.0.0 \ --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d # via glom -flake8==5.0.4 \ - --hash=sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db \ - --hash=sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248 +flake8==6.0.0 \ + --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ + --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 # via -r requirements/dev-bullseye-requirements.in glom==22.1.0 \ --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ @@ -154,9 +145,9 @@ iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -jsonschema==4.17.1 \ - --hash=sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3 \ - --hash=sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7 +jsonschema==4.17.3 \ + --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ + --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 # via semgrep mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ @@ -173,9 +164,9 @@ packaging==21.3 \ # build # pytest # semgrep -pathspec==0.10.2 \ - --hash=sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5 \ - --hash=sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0 +pathspec==0.10.3 \ + --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ + --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 # via black peewee==3.15.4 \ --hash=sha256:2581520c8dfbacd9d580c2719ae259f0637a9e46eda47dfc0ce01864c6366205 @@ -184,25 +175,29 @@ pep517==0.13.0 \ --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 # via build -pip-tools==6.10.0 \ - --hash=sha256:57ac98392548f5ca96c2831927deec3035efe81ff476e3c744bd474ca9c6a1f2 \ - --hash=sha256:7f9f7356052db6942b5aaabc8eba29983591ca0ad75affbf2f0a25d9361be624 +pip==22.3.1 \ + --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ + --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 + # via pip-tools +pip-tools==6.12.0 \ + --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ + --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e # via -r requirements/dev-bullseye-requirements.in -platformdirs==2.5.4 \ - --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ - --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 +platformdirs==2.6.0 \ + --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ + --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e # via black pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -pycodestyle==2.9.1 \ - --hash=sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785 \ - --hash=sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b +pycodestyle==2.10.0 \ + --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ + --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 # via flake8 -pyflakes==2.5.0 \ - --hash=sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2 \ - --hash=sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3 +pyflakes==3.0.1 \ + --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ + --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 pyparsing==3.0.9 \ --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ @@ -269,6 +264,7 @@ ruamel-yaml-clib==0.2.7 \ --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ + --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ @@ -294,12 +290,16 @@ ruamel-yaml-clib==0.2.7 \ --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 # via ruamel-yaml -semgrep==0.122.0 \ - --hash=sha256:6116391b0c8c87581d9d72113702b6f8c2938d799cdae7d71a845ec89249566c \ - --hash=sha256:a4c7400eb8bec9fe8df25520d1ffcb5d78b87c73dc654f1c2aec1195789bc611 \ - --hash=sha256:c7002b9aba97deb6677f4cabfa5dcc8faef2808ce6a6f28ecdd70cd8e90b01b5 \ - --hash=sha256:e3fb9956e2bb926cfeff52deafe4cec24d5f1e91fe6d3fc4f81e86ec452b2ad5 +semgrep==1.2.0 \ + --hash=sha256:31f5f764ff114e2e56b3a93b09829f738cb9e287af7479e2c4714c77b10dc5c0 \ + --hash=sha256:cba38f882c9fedd00462247474a991715d5c8faf169e38cfbf299c7c89ccad55 \ + --hash=sha256:d7b9ccffab1cbecb7870e6792dc274f6a63133910150f33b6ba07d28f5cf00d5 \ + --hash=sha256:e04dbc4a95ddfc9b07550b09b88f61c5c7d81817fac1c86683d8c2534514ac6c # via -r requirements/dev-bullseye-requirements.in +setuptools==65.6.3 \ + --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ + --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 + # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -320,76 +320,76 @@ typing-extensions==4.4.0 \ # via # black # semgrep -ujson==5.5.0 \ - --hash=sha256:0762a4fdf86e01f3f8d8b6b7158d01fdd870799ff3f402b676e358fcd879e7eb \ - --hash=sha256:10095160dbe6bba8059ad6677a01da251431f4c68041bf796dcac0956b34f8f7 \ - --hash=sha256:1a485117f97312bef45f5d79d2ff97eff4da503b8a04f3691f59d31141686459 \ - --hash=sha256:1cef44ea4973344baed3d50a5da4a8843de3a6af7dea7fadf0a594e53ce5892f \ - --hash=sha256:1dc2f46c31ef22b0aaa28cd71be897bea271e700636658d573df9c43c49ebbd0 \ - --hash=sha256:21678d7e068707e4d54bdfeb8c250ebc548b51e499aed778b22112ca31a79669 \ - --hash=sha256:278aa9d7cb56435c96d19f5d702e026bcf69f824e24b41e9b52706abd3565837 \ - --hash=sha256:2ab011e3556a9a1d9461bd686870c527327765ed02fe53550531d6609a8a33ff \ - --hash=sha256:2d90414e3b4b44b39825049185959488e084ea7fcaf6124afd5c00893938b09d \ - --hash=sha256:2e506ecf89b6b9d304362ccef770831ec242a52c89dab1b4aabf1ab0eb1d5ed6 \ - --hash=sha256:33cd9084fefc74cbacf88c92fd260b61211e00bcde38d640c369e5dc34a2b4e1 \ - --hash=sha256:3b74467564814fbce322427a5664e6bcc7dae6dbc8acbef76300fe43ca4072ab \ - --hash=sha256:3f3f4240d99d55eb97cb012e9adf401f5ed9cd827af0341ac44603832202b0d2 \ - --hash=sha256:3fe1aea596f9539fc20cd9e52f098c842afc090168824fd4ca9744fe13151a03 \ - --hash=sha256:4a8cb3c8637006c5bd8237ebb5992a76ba06e39988ad5cff2096227443e8fd6a \ - --hash=sha256:4ef4ab8352861b99bd7fedb1fc6df3ea7f7d5216c789ba6d859e4ea06f1a4c45 \ - --hash=sha256:5035bb997d163f346c22abcec75190e7e756a5349e7c708bd3d5fd7066a9a854 \ - --hash=sha256:593a0f6fb0e186c5ba65465ed6f6215a30d1efa898c25e74de1c8577a1bff6d0 \ - --hash=sha256:59cdcd934385f36e8bd76aedc234371cc75c848d95bdce804ac8aa8744cfeffa \ - --hash=sha256:5a9b1320d8363a42d857fae8065a2174d38217cdd58cd8dc4f48d54e0591271e \ - --hash=sha256:5f9681ec4c60d0da590552427d770636d9079038c30b265f507ccde23caa7823 \ - --hash=sha256:5fd797a4837ba10671954e7c09010cec7aca67e09d193f4920a16beea5f66f65 \ - --hash=sha256:6019e3480d933d3698f2ecb4b46d64bfadd64e718f04fac36e681f3254b49a93 \ - --hash=sha256:603607f56a0ee84d9cd2c7e9b1d29b18a70684b94ee34f07b9ffe8dc9c8a9f81 \ - --hash=sha256:60a4b481978ea2aad8fe8af1ecc271624d01b3cf4b09e9b643dd2fe19c07634c \ - --hash=sha256:6b9812638d7aa8ecda2e8e1513fb4da999249603bffab7439a5f8f0bb362b0db \ - --hash=sha256:6c7ae6e0778ab9610f5e80e0595957d101ab8de18c32a8c053a19943ef4831d0 \ - --hash=sha256:6f83be8257b2f2dd6dea5ee62cd28db90584da7a7af1fba77a2102fc7943638a \ - --hash=sha256:701e81e047f5c0cffd4ac828efca68b0bd270c616654966a051e9a5f836b385e \ - --hash=sha256:703fd69d9cb21d6ec2086789df9be2cf8140a76ff127050c24007ea8940dcd3b \ - --hash=sha256:7471d4486f23518cff343f1eec6c68d1b977ed74c3e6cc3e1ac896b9b7d68645 \ - --hash=sha256:765d46f3d5e7a1d48075035e2d1a9164f683e3fccde834ca04602e6c588835bc \ - --hash=sha256:7a09d203983104918c62f2eef9406f24c355511f9217967df23e70fa7f5b54ff \ - --hash=sha256:7c20cc83b0df47129ec6ed8a47fa7dcfc309c5bad029464004162738502568bb \ - --hash=sha256:7d7cfac2547c93389fa303fc0c0eb6698825564e8389c41c9b60009c746207b6 \ - --hash=sha256:7d87c817b292efb748f1974f37e8bb8a8772ef92f05f84e507159360814bcc3f \ - --hash=sha256:8141f654432cf75144d6103bfac2286b8adf23467201590b173a74535d6be22d \ - --hash=sha256:849f2ff40264152f25589cb48ddb4a43d14db811f841ec73989bfc0c8c4853fa \ - --hash=sha256:880c84ce59f49776cf120f77e7ca04877c97c6887917078dbc369eb47004d7cf \ - --hash=sha256:94874584b733a18b310b0e954d53168e62cd4a0fd9db85b1903f0902a7eb33e8 \ - --hash=sha256:95603eff711b8f3b9596e1c961dbeb745a792ba1904141612f194e07edd71e5f \ - --hash=sha256:9585892091ae86045135d6a6129a644142d6a51b23e1428bb5de6d10bc0ce0c7 \ - --hash=sha256:977bf5be704a88d46bf5b228df8b44521b1f3119d741062191608b3a6a38f224 \ - --hash=sha256:9cdc46859024501c20ab74ad542cdf2f08b94b5ce384f2f569483fa3ed926d04 \ - --hash=sha256:a34a5f034b339f69ef7f6a134c22d04b92e07b6ddc1dd65382e7e4ec65d6437d \ - --hash=sha256:a655f7b755cfc5c07f2116b6dcf0ba148c89adef9a6d40c1b0f1fada878c4345 \ - --hash=sha256:a7d12f2d2df195c8c4e49d2cdbad640353a856c62ca2c624d8b47aa33b65a2a2 \ - --hash=sha256:abfe83e082c9208891e2158c1b5044a650ecec408b823bf6bf16cd7f8085cafa \ - --hash=sha256:b25077a971c7da47bd6846a912a747f6963776d90720c88603b1b55d81790780 \ - --hash=sha256:bf416a93e1331820c77e3429df26946dbd4fe105e9b487cd2d1b7298b75784a8 \ - --hash=sha256:c04ae27e076d81a3839047d8eed57c1e17e361640616fd520d752375e3ba8f0c \ - --hash=sha256:d5bea13c73f36c4346808df3fa806596163a7962b6d28001ca2a391cab856089 \ - --hash=sha256:d75bef34e69e7effb7b4849e3f830e3174d2cc6ec7273503fdde111c222dc9b3 \ - --hash=sha256:d93940664a5ccfd79f72dcb939b0c31a3479889f14f0eb95ec52976f8c0cae7d \ - --hash=sha256:d9c89c521dc90c7564358e525f849b93ad1d710553c1491f66b8cce8113bc901 \ - --hash=sha256:e0b36257dc90194784531c3b922d8d31fb2b4d8e5adfd27aff4eee7174176365 \ - --hash=sha256:e1135264bcd40965cd35b0869e36952f54825024befdc7a923df9a7d83cfd800 \ - --hash=sha256:e510d288e613d6927796dfb728e13e4530fc83b9ccac5888a21f7860486eab21 \ - --hash=sha256:ee9a2c9a4b2421e77f8fe33ed0621dea03c66c710707553020b1e32f3afb6240 \ - --hash=sha256:f19f11055ba2961eb39bdb1ff15763a53fca4fa0b5b624da3c7a528e83cdd09c \ - --hash=sha256:f26544bc10c83a2ff9aa2e093500c1b473f327faae31fb468d591e5823333376 \ - --hash=sha256:f4875cafc9a6482c04c7df52a725d1c41beb74913c0ff4ec8f189f1954a2afe9 \ - --hash=sha256:f5179088ef6487c475604b7898731a6ddeeada7702cfb2162155b016703a8475 \ - --hash=sha256:f63d1ae1ca17bb2c847e298c7bcf084a73d56d434b4c50509fb93a4b4300b0b2 \ - --hash=sha256:ff4928dc1e9704b567171c16787238201fdbf023665573c12c02146fe1e02eec +ujson==5.6.0 \ + --hash=sha256:0f0f21157d1a84ad5fb54388f31767cde9c1a48fb29de7ef91d8887fdc2ca92b \ + --hash=sha256:1217326ba80eab1ff3f644f9eee065bd4fcc4e0c068a2f86f851cafd05737169 \ + --hash=sha256:169b3fbd1188647c6ce00cb690915526aff86997c89a94c1b50432010ad7ae0f \ + --hash=sha256:1a7e4023c79d9a053c0c6b7c6ec50ea0af78381539ab27412e6af8d9410ae555 \ + --hash=sha256:20d929a27822cb79e034cc5e0bb62daa0257ab197247cb6f35d5149f2f438983 \ + --hash=sha256:213e41dc501b4a6d029873039da3e45ba7766b9f9eba97ecc4287c371f5403cc \ + --hash=sha256:23051f062bb257a87f3e55ea5a055ea98d56f08185fd415b34313268fa4d814e \ + --hash=sha256:24d40e01accbf4f0ba5181c4db1bac83749fdc1a5413466da582529f2a096085 \ + --hash=sha256:2a24b9a96364f943a4754fa00b47855d0a01b84ac4b8b11ebf058c8fb68c1f77 \ + --hash=sha256:2cb7a4bd91de97b4c8e57fb5289d1e5f3f019723b59d01d79e2df83783dce5a6 \ + --hash=sha256:31288f85db6295ec63e128daff7285bb0bc220935e1b5107bd2d67e2dc687b7e \ + --hash=sha256:35423460954d0c61602da734697724e8dd5326a8aa7900123e584b935116203e \ + --hash=sha256:355ef5311854936b9edc7f1ce638f8257cb45fb6b9873f6b2d16a715eafc9570 \ + --hash=sha256:3a68a204386648ec92ae9b526c1ffca528f38221eca70f98b4709390c3204275 \ + --hash=sha256:3ad74eb53ee07e76c82f9ef8e7256c33873b81bd1f97a274fdb65ed87c2801f6 \ + --hash=sha256:3b49a1014d396b962cb1d6c5f867f88b2c9aa9224c3860ee6ff63b2837a2965b \ + --hash=sha256:3f00dff3bf26bbb96791ceaf51ca95a3f34e2a21985748da855a650c38633b99 \ + --hash=sha256:3f8b9e8c0420ce3dcc193ab6dd5628840ba79ad1b76e1816ac7ca6752c6bf035 \ + --hash=sha256:52f536712d16a1f4e0f9d084982c28e11b7e70c397a1059069e4d28d53b3f522 \ + --hash=sha256:551408a5c4306839b4a4f91503c96069204dbef2c7ed91a9dab08874ac1ed679 \ + --hash=sha256:57904e5b49ffe93189349229dcd83f73862ef9bb8517e8f1e62d0ff73f313847 \ + --hash=sha256:5e5715b0e2767b1987ceed0066980fc0a53421dd2f197b4f88460d474d6aef4c \ + --hash=sha256:61fdf24f7bddc402ce06b25e4bed7bf5ee4f03e23028a0a09116835c21d54888 \ + --hash=sha256:6d0a60c5f065737a81249c819475d001a86da9a41900d888287e34619c9b4851 \ + --hash=sha256:6ea9024749a41864bffb12da15aace4a3193c03ea97e77b069557aefa342811f \ + --hash=sha256:7174e81c137d480abe2f8036e9fb69157e509f2db0bfdee4488eb61dc3f0ff6b \ + --hash=sha256:72fa6e850831280a46704032721c75155fd41b839ddadabb6068ab218c56a37a \ + --hash=sha256:74671d1bde8c03daeb92abdbd972960978347b1a1d432c4c1b3c9284ce4094cf \ + --hash=sha256:798116b88158f13ed687417526100ef353ba4692e0aef8afbc622bd4bf7e9057 \ + --hash=sha256:7a66c5a75b46545361271b4cf55560d9ad8bad794dd054a14b3fbb031407948e \ + --hash=sha256:7bde16cb18b95a8f68cc48715e4652b394b4fee68cb3f9fee0fd7d26b29a53b6 \ + --hash=sha256:82bf24ea72a73c7d77402a7adc954931243e7ec4241d5738ae74894b53944458 \ + --hash=sha256:87578ccfc35461c77e73660fb7d89bc577732f671364f442bda9e2c58b571765 \ + --hash=sha256:91000612a2c30f50c6a009e6459a677e5c1972e51b59ecefd6063543dc47a4e9 \ + --hash=sha256:9cf04fcc958bb52a6b6c301b780cb9afab3ec68713b17ca5aa423e1f99c2c1cf \ + --hash=sha256:9f4efcac06f45183b6ed8e2321554739a964a02d8aa3089ec343253d86bf2804 \ + --hash=sha256:a51cbe614acb5ea8e2006e4fd80b4e8ea7c51ae51e42c75290012f4925a9d6ab \ + --hash=sha256:a8795de7ceadf84bcef88f947f91900d647eda234a2c6cc89912c25048cc0490 \ + --hash=sha256:ae723b8308ac17a591bb8be9478b58c2c26fada23fd2211fc323796801ad7ff5 \ + --hash=sha256:aff708a1b9e2d4979f74375ade0bff978be72c8bd90422a756d24d8a46d78059 \ + --hash=sha256:b2aece7a92dffc9c78787f5f36e47e24b95495812270c27abc2fa430435a931d \ + --hash=sha256:b4420bfff18ca6aa39cfb22fe35d8aba3811fa1190c4f4e1ad816b0aad72f7e3 \ + --hash=sha256:b64d2ac99503a9a5846157631addacc9f74e23f64d5a886fe910e9662660fa10 \ + --hash=sha256:b72d4d948749e9c6afcd3d7af9ecc780fccde84e26d275c97273dd83c68a488b \ + --hash=sha256:b74396a655ac8a5299dcb765b4a17ba706e45c0df95818bcc6c13c4645a1c38e \ + --hash=sha256:b9e9d26600020cf635a4e58763959f5a59f8c70f75d72ebf26ceae94c2efac74 \ + --hash=sha256:bca074d08f0677f05df8170b25ce6e61db3bcdfda78062444972fa6508dc825f \ + --hash=sha256:bca3c06c3f10ce03fa80b1301dce53765815c2578a24bd141ce4e5769bb7b709 \ + --hash=sha256:bfb1fdf61763fafc0f8a20becf9cc4287c14fc41c0e14111d28c0d0dfda9ba56 \ + --hash=sha256:c169e12642f0edf1dde607fb264721b88787b55a6da5fb3824302a9cac6f9405 \ + --hash=sha256:c4277f6b1d24be30b7f87ec5346a87693cbc1e55bbc5877f573381b2250c4dd6 \ + --hash=sha256:ceee5aef3e234c7e998fdb52e5236c41e50cdedc116360f7f1874a04829f6490 \ + --hash=sha256:d1b5e233e42f53bbbc6961caeb492986e9f3aeacd30be811467583203873bad2 \ + --hash=sha256:d6f4be832d97836d62ac0c148026ec021f9f36481f38e455b51538fcd949ed2a \ + --hash=sha256:dd5ccc036b0f4721b98e1c03ccc604e7f3e1db53866ccc92b2add40ace1782f7 \ + --hash=sha256:dde59d2f06297fc4e70b2bae6e4a6b3ce89ca89697ab2c41e641abae3be96b0c \ + --hash=sha256:e4be7d865cb5161824e12db71cee83290ab72b3523566371a30d6ba1bd63402a \ + --hash=sha256:e97af10b6f13a498de197fb852e9242064217c25dfca79ebe7ad0cf2b0dd0cb7 \ + --hash=sha256:f2d70b7f0b485f85141bbc518d0581ae96b912d9f8b070eaf68a9beef8eb1e60 \ + --hash=sha256:f3e651f04b7510fae7d4706a4600cd43457f015df08702ece82a71339fc15c3d \ + --hash=sha256:f63535d51e039a984b2fb67ff87057ffe4216d4757c3cedf2fc846af88253cb7 \ + --hash=sha256:f881e2d8a022e9285aa2eab6ba8674358dbcb2b57fa68618d88d62937ac3ff04 \ + --hash=sha256:fadebaddd3eb71a5c986f0bdc7bb28b072bfc585c141eef37474fc66d1830b0a \ + --hash=sha256:fb1632b27e12c0b0df62f924c362206daf246a42c0080e959dd465810dc3482e \ + --hash=sha256:fecf83b2ef3cbce4f5cc573df6f6ded565e5e27c1af84038bae5ade306686d82 # via python-lsp-jsonrpc -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.13 \ + --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ + --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 # via # requests # semgrep @@ -401,13 +401,3 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools - -# The following packages are considered to be unsafe in a requirements file: -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 - # via pip-tools -setuptools==65.6.0 \ - --hash=sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840 \ - --hash=sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d - # via pip-tools From 50d365b806b4735ca8b25b968e151a6785535996 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 19 Dec 2022 14:16:33 -0500 Subject: [PATCH 526/751] Update pytest to 7.2.0, drop unnecessary dependencies This drops the vulnerable and unused version of "py". The removed dependencies are no longer needed on Python 3.9. --- requirements/dev-requirements.in | 5 +-- requirements/dev-requirements.txt | 69 ++++--------------------------- 2 files changed, 10 insertions(+), 64 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index a320b555b..ce7e52590 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -3,12 +3,11 @@ coverage flake8 isort mypy -py>=1.10.0 pyotp -pytest +pytest>=7.2.0 pytest-cov vcrpy pyyaml>=5.4.1,<6 pytest-mock pip-tools -types-requests \ No newline at end of file +types-requests diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 3aa32820f..7990c53c5 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -86,6 +86,10 @@ coverage==5.5 \ # via # -r requirements/dev-requirements.in # pytest-cov +exceptiongroup==1.0.4 \ + --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ + --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec + # via pytest flake8==3.9.2 \ --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 @@ -97,15 +101,6 @@ idna==3.2 \ # -r requirements/requirements.in # requests # yarl -importlib-metadata==4.8.1 \ - --hash=sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15 \ - --hash=sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1 - # via - # click - # flake8 - # pep517 - # pluggy - # pytest iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 @@ -212,12 +207,6 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -py==1.10.0 \ - --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \ - --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a - # via - # -r requirements/dev-requirements.in - # pytest pycodestyle==2.7.0 \ --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef @@ -234,9 +223,9 @@ pyparsing==2.4.7 \ --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b # via packaging -pytest==6.2.5 \ - --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \ - --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134 +pytest==7.2.0 \ + --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ + --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 # via # -r requirements/dev-requirements.in # pytest-cov @@ -338,7 +327,6 @@ toml==0.10.2 \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via # mypy - # pytest # pytest-cov tomli==1.2.1 \ --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ @@ -346,40 +334,7 @@ tomli==1.2.1 \ # via # black # pep517 -typed-ast==1.4.3 \ - --hash=sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace \ - --hash=sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff \ - --hash=sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266 \ - --hash=sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528 \ - --hash=sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6 \ - --hash=sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808 \ - --hash=sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4 \ - --hash=sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363 \ - --hash=sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341 \ - --hash=sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04 \ - --hash=sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41 \ - --hash=sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e \ - --hash=sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3 \ - --hash=sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899 \ - --hash=sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805 \ - --hash=sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c \ - --hash=sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c \ - --hash=sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39 \ - --hash=sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a \ - --hash=sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3 \ - --hash=sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7 \ - --hash=sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f \ - --hash=sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075 \ - --hash=sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0 \ - --hash=sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40 \ - --hash=sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428 \ - --hash=sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927 \ - --hash=sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3 \ - --hash=sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f \ - --hash=sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65 - # via - # black - # mypy + # pytest types-requests==2.25.6 \ --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee @@ -390,9 +345,7 @@ typing-extensions==3.10.0.2 \ --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 # via # black - # importlib-metadata # mypy - # yarl urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f @@ -449,12 +402,6 @@ yarl==1.6.3 \ --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 # via vcrpy -zipp==3.5.0 \ - --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ - --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 - # via - # importlib-metadata - # pep517 # The following packages are considered to be unsafe in a requirements file: pip==21.2.4 \ From cf63e567e9905359d7ca5ec3e95b9b8f7f49314f Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 19 Dec 2022 13:58:47 -0500 Subject: [PATCH 527/751] Update CI for Python 3.9/bullseye Drop the non-standard caching as well, probably will be fast enough to download it fresh each time. --- .circleci/config.yml | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fc090c202..601b98320 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,24 +3,15 @@ jobs: test-run: working_directory: ~/sdclientapi docker: - - image: circleci/python:3.7 + - image: debian:bullseye steps: - checkout - - run: sudo chown -R circleci:circleci /usr/local/bin - - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages - - restore_cache: - key: deps9-{{ .Branch }}-{{ checksum "dev-requirements.txt" }} - run: name: Install dependencies command: | + apt-get update && apt-get install python3 python3-venv make -y make venv source .venv/bin/activate - - save_cache: - key: deps9-{{ .Branch }}-{{ checksum "dev-requirements.txt" }} - paths: - - ".venv" - - "/usr/local/bin" - - "/usr/local/lib/python3.7/site-packages" - run: name: Run linter, tests, check for known CVEs command: | @@ -31,7 +22,8 @@ jobs: working_directory: ~/project machine: enabled: true - image: ubuntu-1604:201903-01 + # TODO: why is this using Ubuntu instead of Debian? + image: ubuntu-2004:202010-01 environment: DOCKER_API_VERSION: 1.23 steps: @@ -39,7 +31,9 @@ jobs: - run: name: Install dependencies command: | - pyenv global 3.7.0 + (cd $(pyenv root); git pull) + pyenv install 3.9 + pyenv global 3.9 make venv source .venv/bin/activate - run: @@ -49,7 +43,7 @@ jobs: name: Start spinning up the SecureDrop server container command: | cd securedrop - NUM_SOURCES=5 make -C securedrop dev + NUM_SOURCES=5 make dev background: true - run: # As suggested in https://discuss.circleci.com/t/prevent-race-conditions-by-waiting-for-services-with-dockerize/11215 name: Install dockerize From a5afefe3180cdf907345ba5e719374810996b19a Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Wed, 21 Dec 2022 11:13:33 -0500 Subject: [PATCH 528/751] update CI build env to 3.9-bullseye --- .circleci/config.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f1821abf3..a771f86f1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,9 +52,9 @@ common-steps: version: 2 jobs: - build-buster: + build-bullseye: docker: - - image: circleci/python:3.7-buster + - image: circleci/python:3.9-bullseye steps: - checkout - *removevirtualenv @@ -63,9 +63,9 @@ jobs: - *make_source_tarball - *build_debian_package - test-buster: + test-bullseye: docker: - - image: circleci/python:3.7-buster + - image: circleci/python:3.9-bullseye steps: - checkout - *run_tests @@ -74,8 +74,8 @@ workflows: version: 2 securedrop_proxy_ci: jobs: - - test-buster - - build-buster + - test-bullseye + - build-bullseye nightly: triggers: @@ -86,5 +86,5 @@ workflows: only: - main jobs: - - test-buster - - build-buster + - test-bullseye + - build-bullseye From e8d617b0f303923abf32cec11d2bae2043e4c6f5 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Wed, 21 Dec 2022 11:19:27 -0500 Subject: [PATCH 529/751] Used Python 3-style type syntax to clear flake8 errors. --- securedrop_proxy/proxy.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 36854bb05..e5a7c2da7 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -31,14 +31,14 @@ def __init__(self) -> None: self.method = "" self.path_query = "" self.body = "" - self.headers = {} # type: Dict[str, str] + self.headers: Dict[str, str] = {} class Response: def __init__(self, status: int) -> None: self.status = status self.body = "" - self.headers = {} # type: Dict[str, str] + self.headers: Dict[str, str] = {} self.version = version.version @@ -47,10 +47,10 @@ def __init__(self, conf_path: str, req: Req = Req(), timeout: float = 10.0) -> N self.read_conf(conf_path) self.req = req - self.res = None # type: Optional[Response] + self.res: Optional[Response] = None self.timeout = float(timeout) - self._prepared_request = None # type: Optional[requests.PreparedRequest] + self._prepared_request: Optional[requests.PreparedRequest] = None def on_done(self) -> None: print(json.dumps(self.res.__dict__)) From 51828f02e664dcdaaeec40d0a7f1b1e19f85a1a9 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Wed, 21 Dec 2022 15:33:11 -0500 Subject: [PATCH 530/751] Updated certifi in build-requirements.txt --- requirements/build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index f69c6fe8d..af35aa35d 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -1,4 +1,4 @@ -certifi==2021.5.30 --hash=sha256:2dee87f82eab7a047280038bacb5bdbc4ee308ae39522ccd9da2ceefe7b6f84e +certifi==2022.12.7 --hash=sha256:7f205a1a4f02f4970fb5d0e16457964bb30d6b678a766515278bc56e6eeb645f charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 From be061b381664fa51a38cd5dad55e5af866a5ce53 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 10 Jan 2023 16:28:19 -0500 Subject: [PATCH 531/751] Use relative import for unittest.mock.patch() It's already imported, we just weren't using it. --- tests/test_entrypoint.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py index d12e661fb..58102ca47 100644 --- a/tests/test_entrypoint.py +++ b/tests/test_entrypoint.py @@ -5,7 +5,7 @@ import os import platform import tempfile -import unittest.mock +import unittest from unittest.mock import patch import vcr @@ -33,9 +33,9 @@ def test_missing_config(self): self.assertFalse(os.path.exists(config_path)) output = None - with unittest.mock.patch( + with patch( "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv, unittest.mock.patch( # noqa: F841 + ) as mock_argv, patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO ) as mock_stdout: with self.assertRaises(SystemExit), sdhome(): @@ -72,7 +72,7 @@ def test_unwritable_log_folder(self): output = None with sdhome() as home: os.chmod(home, 0o0444) - with unittest.mock.patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: + with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: with self.assertRaises(SystemExit): entrypoint.start() output = mock_stdout.getvalue() @@ -85,9 +85,9 @@ def test_unwritable_log_folder(self): def test_wrong_number_of_arguments(self): with sdhome() as home: # noqa: F841 - with unittest.mock.patch( + with patch( "sys.argv", new_callable=lambda: ["sd-proxy"] - ) as mock_argv, unittest.mock.patch( # noqa: F841 + ) as mock_argv, patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO ) as mock_stdout: with self.assertRaises(SystemExit): @@ -106,11 +106,11 @@ def test_empty_input(self): self.assertTrue(os.path.exists(config_path)) with sdhome() as home: # noqa: F841 - with unittest.mock.patch( + with patch( "sys.stdin", new_callable=lambda: io.StringIO("") - ) as mock_stdin, unittest.mock.patch( # noqa: F841 + ) as mock_stdin, patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO - ) as mock_stdout, unittest.mock.patch( + ) as mock_stdout, patch( "sys.argv", new_callable=lambda: ["sd-proxy", config_path] ) as mock_argv: # noqa: F841 entrypoint.start() @@ -132,11 +132,11 @@ def test_json_response(self): } output = None - with sdhome() as home, unittest.mock.patch( # noqa: F841 + with sdhome() as home, patch( # noqa: F841 "sys.stdin", new_callable=lambda: io.StringIO(json.dumps(test_input)) - ) as mock_stding, unittest.mock.patch( # noqa: F841 + ) as mock_stding, patch( # noqa: F841 "sys.stdout", new_callable=io.StringIO - ) as mock_stdout, unittest.mock.patch( + ) as mock_stdout, patch( "sys.argv", new_callable=lambda: ["sd-proxy", config_path] ) as mock_argv: # noqa: F841 entrypoint.start() From 7ae672fae32f073123d1ffa804ac74d0e707152e Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 10 Jan 2023 16:24:33 -0500 Subject: [PATCH 532/751] Refactor test_unwritable_log_folder to use mocking Manually manipulating the permissions doesn't work when tests are being run as root, as we'd like to switch CI to. Instead we can simply mock the PermissionsError being thrown to test the error handling behavior regardless of the actual filesystem and permissions state. --- tests/test_entrypoint.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py index 58102ca47..0e5af9b92 100644 --- a/tests/test_entrypoint.py +++ b/tests/test_entrypoint.py @@ -69,14 +69,14 @@ def test_unwritable_log_folder(self): """ Tests a permission problem in `configure_logging`. """ - output = None - with sdhome() as home: - os.chmod(home, 0o0444) - with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: - with self.assertRaises(SystemExit): - entrypoint.start() - output = mock_stdout.getvalue() - os.chmod(home, 0o0700) + with sdhome(): + with patch( + "os.makedirs", side_effect=PermissionError("[Errno 13] Permission denied: '/foo'") + ): + with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout: + with self.assertRaises(SystemExit): + entrypoint.start() + output = mock_stdout.getvalue() response = json.loads(output) self.assertEqual(response["status"], http.HTTPStatus.INTERNAL_SERVER_ERROR) From 70dda4f64da5d17c26fea344362da245df257a28 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 9 Jan 2023 11:58:17 -0500 Subject: [PATCH 533/751] Use plain Debian containers for CI --- .circleci/config.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a771f86f1..abb89ba3e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,14 +1,10 @@ --- common-steps: - - &removevirtualenv - run: - name: Removes the upstream virtualenv from the original container image - command: sudo pip uninstall virtualenv -y - - &run_tests run: name: Install requirements and run tests command: | + apt-get update && apt-get install -y make python3-venv make venv source .venv/bin/activate make check @@ -17,8 +13,8 @@ common-steps: run: name: Install Debian packaging dependencies and download wheels command: | + apt-get update && apt-get install -y git git-lfs make sudo mkdir ~/packaging && cd ~/packaging - git config --global --unset url.ssh://git@github.com.insteadof git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging make install-deps @@ -47,17 +43,16 @@ common-steps: command: | cd ~/packaging/securedrop-debian-packaging export PKG_VERSION=1000.0 - export PKG_PATH=/home/circleci/project/dist/securedrop-proxy-$PKG_VERSION.tar.gz + export PKG_PATH=~/project make securedrop-proxy version: 2 jobs: build-bullseye: docker: - - image: circleci/python:3.9-bullseye + - image: debian:bullseye steps: - checkout - - *removevirtualenv - *install_packaging_dependencies - *verify_requirements - *make_source_tarball @@ -65,7 +60,7 @@ jobs: test-bullseye: docker: - - image: circleci/python:3.9-bullseye + - image: debian:bullseye steps: - checkout - *run_tests From 0b503c7797907e89b1b0c632cd61cb033e44f7d4 Mon Sep 17 00:00:00 2001 From: ro Date: Tue, 17 May 2022 17:01:56 -0400 Subject: [PATCH 534/751] Separate CLI wrapper into its own module. Add specific Export Exceptions. Reorganize Print actions into methods in service class. Use commands to separate different types of export and print actions. Rename SDExport to Archive. Use methods instead of classes for each export routine. Move ExportException to common directory and add Command enum for supported export commands. --- securedrop_export/archive.py | 84 ++++ securedrop_export/disk/actions.py | 252 ------------ securedrop_export/disk/cli.py | 380 ++++++++++++++++++ securedrop_export/disk/service.py | 94 +++++ securedrop_export/disk/status.py | 22 + securedrop_export/disk/volume.py | 57 +++ securedrop_export/entrypoint.py | 4 +- securedrop_export/enums.py | 40 ++ securedrop_export/exceptions.py | 52 +-- securedrop_export/export.py | 151 ------- securedrop_export/main.py | 99 +++-- .../print/{actions.py => service.py} | 187 +++++---- securedrop_export/print/status.py | 13 + securedrop_export/utils.py | 13 +- setup.py | 4 +- tests/disk/test_actions.py | 272 +++++-------- tests/disk/test_cli.py | 376 +++++++++++++++++ tests/disk/test_status.py | 0 tests/disk/test_volume.py | 47 +++ tests/print/test_actions.py | 12 +- tests/test_export.py | 33 +- 21 files changed, 1427 insertions(+), 765 deletions(-) create mode 100755 securedrop_export/archive.py delete mode 100644 securedrop_export/disk/actions.py create mode 100644 securedrop_export/disk/cli.py create mode 100644 securedrop_export/disk/service.py create mode 100644 securedrop_export/disk/status.py create mode 100644 securedrop_export/disk/volume.py create mode 100644 securedrop_export/enums.py delete mode 100755 securedrop_export/export.py rename securedrop_export/print/{actions.py => service.py} (58%) create mode 100644 securedrop_export/print/status.py create mode 100644 tests/disk/test_cli.py create mode 100644 tests/disk/test_status.py create mode 100644 tests/disk/test_volume.py diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py new file mode 100755 index 000000000..76e18f61c --- /dev/null +++ b/securedrop_export/archive.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 + +import abc +import datetime +import json +import logging +import os +import shutil +import subprocess +import sys +import tempfile + +from securedrop_export.enums import Command +from securedrop_export.exceptions import ExportStatus +from securedrop_export.utils import safe_extractall + +logger = logging.getLogger(__name__) + + +class Metadata(object): + """ + Object to parse, validate and store json metadata from the sd-export archive. + """ + + METADATA_FILE = "metadata.json" + + SUPPORTED_ENCRYPTION_METHODS = ["luks"] + + def __init__(self, archive_path): + # Calling create_and_validate() is the preferred way to initialize + self.metadata_path = os.path.join(archive_path, self.METADATA_FILE) + + @staticmethod + def create_and_validate(cls, archive_path) -> 'Metadata': + """ + Create and validate metadata object. Raise ExportException for invalid metadata. + """ + md = cls(archive_path) + + try: + with open(md.metadata_path) as f: + logger.info("Parsing archive metadata") + json_config = json.loads(f.read()) + md.export_method = json_config.get("device", None) + md.encryption_method = json_config.get("encryption_method", None) + md.encryption_key = json_config.get("encryption_key", None) + logger.info( + "Exporting to device {} with encryption_method {}".format( + md.export_method, md.encryption_method + ) + ) + + # Validate metadata - this will fail if command is not in list of supported commands + md.command = Commmand.value_of(md.export_method) + if md.command is Commmand.EXPORT and not md.encryption_method in md.SUPPORTED_ENCRYPTION_METHODS: + logger.error("Unsuported encryption method") + raise ExportException(ExportStatus.ERROR_ARCHIVE_METADATA) + + except Exception as ex: + logger.error("Metadata parsing failure") + raise ExportException(ExportStatus.ERROR_METADATA_PARSING) from ex + + return md + + +class Archive(object): + def __init__(self, archive, config_path): + os.umask(0o077) + self.archive = archive + self.submission_dirname = os.path.basename(self.archive).split(".")[0] + self.target_dirname = "sd-export-{}".format( + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + ) + self.tmpdir = tempfile.mkdtemp() + + def extract_tarball(self): + try: + logger.info("Extracting tarball {} into {}".format(self.archive, self.tmpdir)) + safe_extractall(self.archive, self.tmpdir) + except Exception as ex: + logger.error("Unable to extract tarball: {}".format(ex)) + raise ExportException(ExportStatus.ERROR_EXTRACTION) from ex + + \ No newline at end of file diff --git a/securedrop_export/disk/actions.py b/securedrop_export/disk/actions.py deleted file mode 100644 index 9619aba03..000000000 --- a/securedrop_export/disk/actions.py +++ /dev/null @@ -1,252 +0,0 @@ -import logging -import os -import subprocess -import sys - -from typing import List - -from securedrop_export.export import ExportAction -from securedrop_export.exceptions import ExportStatus - -MOUNTPOINT = "/media/usb" -ENCRYPTED_DEVICE = "encrypted_volume" - -logger = logging.getLogger(__name__) - - -class DiskAction(ExportAction): - def __init__(self, submission): - self.submission = submission - self.device = None # Optional[str] - self.mountpoint = MOUNTPOINT - self.encrypted_device = ENCRYPTED_DEVICE - - def run(self) -> None: - """Run logic""" - raise NotImplementedError - - def check_usb_connected(self, exit=False) -> None: - usb_devices = self._get_connected_usbs() - - if len(usb_devices) == 0: - logger.info("0 USB devices connected") - self.submission.exit_gracefully(ExportStatus.USB_NOT_CONNECTED.value) - elif len(usb_devices) == 1: - logger.info("1 USB device connected") - self.device = usb_devices[0] - if exit: - self.submission.exit_gracefully(ExportStatus.USB_CONNECTED.value) - elif len(usb_devices) > 1: - logger.info(">1 USB devices connected") - # Return generic error until freedomofpress/securedrop-export/issues/25 - self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) - - def _get_connected_usbs(self) -> List[str]: - logger.info("Performing usb preflight") - # List all block devices attached to VM that are disks and not partitions. - try: - lsblk = subprocess.Popen( - ["lsblk", "-o", "NAME,TYPE"], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - grep = subprocess.Popen( - ["grep", "disk"], - stdin=lsblk.stdout, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - command_output = grep.stdout.readlines() - - # The first word in each element of the command_output list is the device name - attached_devices = [x.decode("utf8").split()[0] for x in command_output] - except subprocess.CalledProcessError: - self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) - - # Determine which are USBs by selecting those block devices that are removable disks. - usb_devices = [] - for device in attached_devices: - try: - removable = subprocess.check_output( - ["cat", "/sys/class/block/{}/removable".format(device)], - stderr=subprocess.PIPE, - ) - is_removable = int(removable.decode("utf8").strip()) - except subprocess.CalledProcessError: - is_removable = False - - if is_removable: - usb_devices.append("/dev/{}".format(device)) - - return usb_devices - - def set_extracted_device_name(self): - try: - device_and_partitions = subprocess.check_output( - ["lsblk", "-o", "TYPE", "--noheadings", self.device], - stderr=subprocess.PIPE, - ) - - # we don't support multiple partitions - partition_count = ( - device_and_partitions.decode("utf-8").split("\n").count("part") - ) - if partition_count > 1: - logger.debug("multiple partitions not supported") - self.submission.exit_gracefully( - ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - ) - - # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted - self.device = self.device if partition_count == 0 else self.device + "1" - except subprocess.CalledProcessError: - self.submission.exit_gracefully( - ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value - ) - - def check_luks_volume(self): - # cryptsetup isLuks returns 0 if the device is a luks volume - # subprocess with throw if the device is not luks (rc !=0) - logger.info("Checking if volume is luks-encrypted") - self.set_extracted_device_name() - logger.debug("checking if {} is luks encrypted".format(self.device)) - self.submission.safe_check_call( - command=["sudo", "cryptsetup", "isLuks", self.device], - error_message=ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value, - ) - self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTED.value) - - def unlock_luks_volume(self, encryption_key): - try: - # get the encrypted device name - self.set_extracted_device_name() - luks_header = subprocess.check_output( - ["sudo", "cryptsetup", "luksDump", self.device] - ) - luks_header_list = luks_header.decode("utf-8").split("\n") - for line in luks_header_list: - items = line.split("\t") - if "UUID" in items[0]: - self.encrypted_device = "luks-" + items[1] - - # the luks device is already unlocked - if os.path.exists(os.path.join("/dev/mapper/", self.encrypted_device)): - logger.debug("Device already unlocked") - return - - logger.debug("Unlocking luks volume {}".format(self.encrypted_device)) - p = subprocess.Popen( - ["sudo", "cryptsetup", "luksOpen", self.device, self.encrypted_device], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - logger.debug("Passing key") - p.communicate(input=str.encode(encryption_key, "utf-8")) - rc = p.returncode - if rc != 0: - logger.error("Bad phassphrase for {}".format(self.encrypted_device)) - self.submission.exit_gracefully(ExportStatus.USB_BAD_PASSPHRASE.value) - except subprocess.CalledProcessError: - self.submission.exit_gracefully(ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED) - - def mount_volume(self): - # If the drive is already mounted then we don't need to mount it again - output = subprocess.check_output( - ["lsblk", "-o", "MOUNTPOINT", "--noheadings", self.device] - ) - mountpoint = output.decode("utf-8").strip() - if mountpoint: - logger.debug("The device is already mounted") - self.mountpoint = mountpoint - return - - # mount target not created, create folder - if not os.path.exists(self.mountpoint): - self.submission.safe_check_call( - command=["sudo", "mkdir", self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT, - ) - - mapped_device_path = os.path.join("/dev/mapper/", self.encrypted_device) - logger.info("Mounting {}".format(mapped_device_path)) - self.submission.safe_check_call( - command=["sudo", "mount", mapped_device_path, self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT.value, - ) - self.submission.safe_check_call( - command=["sudo", "chown", "-R", "user:user", self.mountpoint], - error_message=ExportStatus.ERROR_USB_MOUNT.value, - ) - - def copy_submission(self): - # move files to drive (overwrites files with same filename) and unmount drive - # we don't use safe_check_call here because we must lock and - # unmount the drive as part of the finally block - try: - target_path = os.path.join(self.mountpoint, self.submission.target_dirname) - subprocess.check_call(["mkdir", target_path]) - export_data = os.path.join(self.submission.tmpdir, "export_data/") - logger.info("Copying file to {}".format(self.submission.target_dirname)) - subprocess.check_call(["cp", "-r", export_data, target_path]) - logger.info( - "File copied successfully to {}".format(self.submission.target_dirname) - ) - except (subprocess.CalledProcessError, OSError): - self.submission.exit_gracefully(ExportStatus.ERROR_USB_WRITE.value) - finally: - logger.info("Syncing filesystems") - subprocess.check_call(["sync"]) - - if os.path.exists(self.mountpoint): - logger.info("Unmounting drive from {}".format(self.mountpoint)) - subprocess.check_call(["sudo", "umount", self.mountpoint]) - - if os.path.exists(os.path.join("/dev/mapper", self.encrypted_device)): - logger.info("Locking luks volume {}".format(self.encrypted_device)) - subprocess.check_call( - ["sudo", "cryptsetup", "luksClose", self.encrypted_device] - ) - - logger.info( - "Deleting temporary directory {}".format(self.submission.tmpdir) - ) - subprocess.check_call(["rm", "-rf", self.submission.tmpdir]) - sys.exit(0) - - -class USBTestAction(DiskAction): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def run(self): - logger.info("Export archive is usb-test") - self.check_usb_connected(exit=True) - - -class DiskTestAction(DiskAction): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def run(self): - logger.info("Export archive is disk-test") - # check_usb_connected looks for the drive, sets the drive to use - self.check_usb_connected() - self.check_luks_volume() - - -class DiskExportAction(DiskAction): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def run(self): - logger.info("Export archive is disk") - # check_usb_connected looks for the drive, sets the drive to use - self.check_usb_connected() - logger.info("Unlocking volume") - # exports all documents in the archive to luks-encrypted volume - self.unlock_luks_volume(self.submission.archive_metadata.encryption_key) - logger.info("Mounting volume") - self.mount_volume() - logger.info("Copying submission to drive") - self.copy_submission() diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py new file mode 100644 index 000000000..792abe8f7 --- /dev/null +++ b/securedrop_export/disk/cli.py @@ -0,0 +1,380 @@ +import datetime +import json +import logging +import os +import shutil +import subprocess +import tempfile +import sys + +from typing import List, Optional + +from .volume import EncryptionScheme, Volume +from .exceptions import ExportException +from .status import Status + +logger = logging.getLogger(__name__) + + +class CLI: + """ + A Python wrapper for various shell commands required to detect, map, and + mount Export devices. + """ + + # Default mountpoint (unless drive is already mounted manually by the user) + _DEFAULT_MOUNTPOINT = "/media/usb" + + def get_connected_devices(self) -> List[str]: + """ + List all block devices attached to VM that are disks and not partitions. + Return list of all removable connected block devices. + + Raise ExportException if any commands fail. + """ + try: + lsblk = subprocess.Popen( + ["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + grep = subprocess.Popen( + ["grep", "disk"], stdin=lsblk.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + command_output = grep.stdout.readlines() + + # The first word in each element of the command_output list is the device name + attached_devices = [x.decode("utf8").split()[0] for x in command_output] + + except subprocess.CalledProcessError as ex: + raise ExportException(status=Status.DEVICE_ERROR) from ex + + # Determine which are USBs by selecting those block devices that are removable disks. + usb_devices = [] + for device in attached_devices: + is_removable = False + try: + removable = subprocess.check_output( + ["cat", f"/sys/class/block/{device}/removable"], stderr=subprocess.PIPE + ) + + # 0 for non-removable device, 1 for removable + is_removable = int(removable.decode("utf8").strip()) + + except subprocess.CalledProcessError: + # Not a removable device + continue + + if is_removable: + usb_devices.append(f"/dev/{device}") + + return usb_devices + + def get_partitioned_device(self, blkid: str) -> str: + """ + Given a string representing a block device, return string that includes correct partition + (such as "/dev/sda" or "/dev/sda1"). + + Raise ExportException if partition check fails or device has unsupported partition scheme + (currently, multiple partitions are unsupported). + """ + try: + + device_and_partitions = subprocess.check_output( + ["lsblk", "-o", "TYPE", "--noheadings", blkid], stderr=subprocess.PIPE + ) + + if device_and_partitions: + partition_count = device_and_partitions.decode("utf-8").split("\n").count("part") + if partition_count > 1: + # We don't currently support devices with multiple partitions + logger.error( + f"Multiple partitions not supported (found {partition_count} partitions on {blkid}" + ) + raise ExportException(status=Status.INVALID_DEVICE_DETECTED) + + # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted + if partition_count == 1: + blkid += "1" + + return blkid + + else: + # lsblk did not return output we could process + raise ExportException(status=Status.DEVICE_ERROR) + + except subprocess.CalledProcessError as ex: + logger.error(f"Error checking block deivce {blkid}") + raise ExportException(status=Status.DEVICE_ERROR) from ex + + def is_luks_volume(self, device: str) -> bool: + """ + Given a string representing a volume (/dev/sdX or /dev/sdX1), return True if volume is + LUKS-encrypted, otherwise False. + """ + isLuks = False + + try: + logger.debug(f"Checking if {device} is luks encrypted") + + # cryptsetup isLuks returns 0 if the device is a luks volume + # subprocess will throw if the device is not luks (rc !=0) + subprocess.check_call(["sudo", "cryptsetup", "isLuks", device]) + + # Status.LEGACY_USB_ENCRYPTED + isLuks = True + + except subprocess.CalledProcessError as ex: + # Not necessarily an error state, just means the volume is not LUKS encrypted + logger.debug(f"{device} is not LUKS-encrypted") + + return isLuks + + def _get_luks_name_from_headers(self, device: str) -> str: + """ + Dump LUKS header and determine name of volume. + + Raise ExportException if errors encounterd during attempt to parse LUKS headers. + """ + try: + luks_header = subprocess.check_output(["sudo", "cryptsetup", "luksDump", device]) + if luks_header: + luks_header_list = luks_header.decode("utf-8").split("\n") + for line in luks_header_list: + items = line.split("\t") + if "UUID" in items[0]: + return "luks-" + items[1] + else: + logger.error( + f"Failed to dump LUKS headers; {device} may not be correctly formatted" + ) + raise ExportException(status=Status.INVALID_DEVICE_DETECTED) + except subprocess.CalledProcessError as ex: + raise ExportException(Status=Status.DEVICE_ERROR) from ex + + def get_luks_volume(self, device: str) -> Volume: + """ + Given a string corresponding to a LUKS-partitioned volume, return a corresponding Volume + object. + + If LUKS volume is already mounted, existing mountpoint will be preserved. + If LUKS volume is unlocked but not mounted, volume will be mounted at _DEFAULT_MOUNTPOINT. + + If device is still locked, mountpoint will not be set. Once the decrpytion passphrase is + available, call unlock_luks_volume(), passing the Volume object and passphrase, to + unlock the volume. + + Raise ExportException if errors are encountered. + """ + try: + mapped_name = self._get_luks_name_from_headers(device) + + # Setting the mapped_name does not mean the device has already been unlocked. + luks_volume = Volume( + device_name=device, mapped_name=mapped_name, encryption=EncryptionScheme.LUKS + ) + + # If the device has been unlocked, we can see if it's mounted and + # use the existing mountpoint, or mount it ourselves. + if os.path.exists(os.path.join("/dev/mapper/", mapped_name)): + return self.mount_volume(luks_volume) + + # It's still locked + else: + return luks_volume + + except ExportException: + logger.error("Failed to return luks volume") + raise + + def unlock_luks_volume(self, volume: Volume, decryption_key: str) -> Volume: + """ + Unlock a LUKS-encrypted volume. + + Raise ExportException if errors are encountered during device unlocking. + """ + if not volume.encryption is EncryptionScheme.LUKS: + logger.error("Must call unlock_luks_volume() on LUKS-encrypted device") + raise ExportException(Status.DEVICE_ERROR) + + try: + logger.debug("Unlocking luks volume {}".format(volume.device_name)) + p = subprocess.Popen( + ["sudo", "cryptsetup", "luksOpen", volume.device_name, volume.mapped_name], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + logger.debug("Passing key") + p.communicate(input=str.encode(decryption_key, "utf-8")) + rc = p.returncode + + if rc == 0: + return Volume( + device_name=volume.device_name, mapped_name=volume.mapped_name, encryption=EncryptionScheme.LUKS + ) + else: + logger.error("Bad volume passphrase") + raise ExportException(Status.ERROR_UNLOCK_LUKS) + + except subprocess.CalledProcessError as ex: + raise ExportException(Status.DEVICE_ERROR) from ex + + def _get_mountpoint(self, volume: Volume) -> Optional[str]: + """ + Check for existing mountpoint. + Raise ExportException if errors encountered during command. + """ + try: + output = subprocess.check_output( + ["lsblk", "-o", "MOUNTPOINT", "--noheadings", volume.device_name] + ) + return output.decode("utf-8").strip() + + except subprocess.CalledProcessError as ex: + logger.error(ex) + raise ExportException(Status.ERROR_MOUNT) from ex + + def mount_volume(self, volume: Volume) -> Volume: + """ + Given an unlocked LUKS volume, return a mounted LUKS volume. + + If volume is already mounted, mountpoint is not changed. Otherwise, + volume is mounted at _DEFAULT_MOUNTPOINT. + + Raises ExportException if errors are encountered during mounting. + """ + if not volume.unlocked: + raise ExportException("Unlock volume before mounting") + + mountpoint = self._get_mountpoint(volume) + + if mountpoint: + logger.debug("The device is already mounted") + if volume.mountpoint is not mountpoint: + # This should not happen, but if a user edits their veracrypt drive mountpoint on the fly. + logger.warning(f"Mountpoint was inaccurate, updating") + + volume.mountpoint = mountpoint + + else: + if not os.path.exists(_DEFAULT_MOUNTPOINT): + try: + subprocess.check_call(["sudo", "mkdir", _DEFAULT_MOUNTPOINT]) + except subprocess.CalledProcessError as ex: + logger.error(ex) + raise ExportException(Status.ERROR_MOUNT) from ex + + # Mount device /dev/mapper/{mapped_name} at /media/usb/ + mapped_device_path = os.path.join(device.MAPPED_VOLUME_PREFIX, device.mapped_name) + + try: + logger.debug(f"Mounting volume {volume.device_name} at {_DEFAULT_MOUNTPOINT}") + subprocess.check_call(["sudo", "mount", mapped_device_path, _DEFAULT_MOUNTPOINT]) + subprocess.check_call(["sudo", "chown", "-R", "user:user", _DEFAULT_MOUNTPOINT]) + + volume.mountpoint = _DEFAULT_MOUNTPOINT + + except subprocess.CalledProcessError as ex: + logger.error(ex) + raise ExportException(Status.ERROR_MOUNT) from ex + + return volume + + def write_data_to_device( + self, submission_tmpdir: str, submission_target_dirname: str, device: Volume + ): + """ + Move files to drive (overwrites files with same filename) and unmount drive. + Drive is unmounted and files are cleaned up as part of the `finally` block to ensure + that cleanup happens even if export fails or only partially succeeds. + + The calling method *must* handle ExportException and exit with sys.exit(0) so that + another program does not attempt to open the submission. + """ + + try: + target_path = os.path.join(device.mountpoint, submission_target_dirname) + subprocess.check_call(["mkdir", target_path]) + + export_data = os.path.join(submission_tmpdir, "export_data/") + logger.info("Copying file to {}".format(submission_target_dirname)) + + subprocess.check_call(["cp", "-r", export_data, target_path]) + logger.info("File copied successfully to {}".format(submission_target_dirname)) + + except (subprocess.CalledProcessError, OSError) as ex: + raise ExportException(status=Status.ERROR_EXPORT) from ex + + finally: + self.cleanup_drive_and_tmpdir(device, submission_tmpdir) + + def cleanup_drive_and_tmpdir(self, volume: Volume, submission_tmpdir: str): + """ + Post-export cleanup method. Unmount and lock drive and remove temporary + directory. Currently called at end of `write_data_to_device()` to ensure + device is always locked after export. + + Raise ExportException if errors during cleanup are encoutered. + """ + logger.info("Syncing filesystems") + try: + subprocess.check_call(["sync"]) + umounted = self._unmount_volume(volume) + if umounted: + self._close_luks_volume(umounted) + self._remove_temp_directory(submission_tmpdir) + + except subprocess.CalledProcessError as ex: + logger.error("Error syncing filesystem") + raise ExportException(Status.ERROR_EXPORT_CLEANUP) from ex + + def _unmount_volume(self, volume: Volume) -> Volume: + """ + Helper. Unmount volume + """ + if os.path.exists(volume.mountpoint): + logger.debug(f"Unmounting drive from {volume.mountpoint}") + try: + subprocess.check_call(["sudo", "umount", volume.mountpoint]) + volume.mountpoint = None + + except subprocess.CalledProcessError as ex: + logger.error("Error unmounting device") + raise ExportException(Status.ERROR_MOUNT) from ex + else: + logger.info("Mountpoint does not exist; volume was already unmounted") + + def _close_luks_volume(self, unlocked_device: Volume) -> None: + """ + Helper. Close LUKS volume + """ + if os.path.exists(os.path.join("/dev/mapper", unlocked_device.mapped_name)): + logger.debug("Locking luks volume {}".format(unlocked_device)) + try: + subprocess.check_call( + ["sudo", "cryptsetup", "luksClose", unlocked_device.mapped_name] + ) + + except subprocess.CalledProcessError as ex: + logger.error("Error closing device") + raise ExportException(Status.DEVICE_ERROR) from ex + + def _remove_temp_directory(self, tmpdir: str): + """ + Helper. Remove temporary directory used during archive export. + """ + logger.debug(f"Deleting temporary directory {tmpdir}") + try: + subprocess.check_call(["rm", "-rf", tmpdir]) + except subprocess.CalledProcessError as ex: + logger.error("Error removing temporary directory") + raise ExportException(Status.DEVICE_ERROR) from ex + + def write_status(self, status: Status): + """ + Write string to stdout. + """ + if status: + sys.stdout.write(status.value) + sys.stdout.write("\n") + else: + logger.warning("No status value supplied") diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py new file mode 100644 index 000000000..23fb10145 --- /dev/null +++ b/securedrop_export/disk/service.py @@ -0,0 +1,94 @@ +import logging +import os +import subprocess +import sys + +from typing import List + +from securedrop_export.export import Archive +from securedrop_export.exceptions import ExportException + +from .cli import CLI +from .status import Status + +logger = logging.getLogger(__name__) + + +class Service(): + + def __init__(self, submission): + self.submission = submission + self.cli = CLI() + + def usb_test(self): + """ + Check if single USB is inserted. + """ + logger.info("Export archive is usb-test") + status = Status.LEGACY_ERROR_GENERIC + + try: + all_devices = self.cli.get_connected_devices() + num_devices = len(all_devices) + + if num_devices == 0: + raise ExportException(Status.LEGACY_USB_NOT_CONNECTED) + elif num_devices == 1: + status = Status.LEGACY_USB_CONNECTED + elif num_devices > 1: + raise ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + + except ExportException: + raise + + + def disk_format_test(self): + """ + Check if volume is correctly formatted for export. + """ + try: + all_devices = self.cli.get_connected_devices() + + if len(all_devices) == 1: + device = self.cli.get_partitioned_device(all_devices) + if self.cli.is_luks_volume(device): + status = Status.LEGACY_USB_ENCRYPTED + else: + raise ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + + except ExportException: + raise + + + def export(self): + """ + Export all files to target device. + """ + logger.info("Export archive is disk") + + try: + all_devices = self.cli.get_connected_devices() + + if len(all_devices) == 1: + device = self.cli.get_partitioned_device(all_devices[0]) + + # Decide what kind of volume it is + if self.cli.is_luks_volume(device): + volume = self.cli.get_luks_volume(device) + if not volume.writable: + unlocked = self.cli.unlock_luks_volume( + volume, self.submission.archive_metadata.encryption_key + ) + mounted = self.cli.mount_volume(unlocked) + + logger.debug(f"Export submission to {mounted.mountpoint}") + self.cli.write_data_to_device(self.submission.tmpdir, self.submission.target_dirname, mounted) + + else: + # Another kind of drive: VeraCrypt/TC, or unsupported + logger.error(f"Export failed because {device} is not supported") + raise ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + + except ExportException as ex: + raise + diff --git a/securedrop_export/disk/status.py b/securedrop_export/disk/status.py new file mode 100644 index 000000000..d8472642b --- /dev/null +++ b/securedrop_export/disk/status.py @@ -0,0 +1,22 @@ +from securedrop_export.exceptions import ExportEnum + +class Status(ExportEnum): + + LEGACY_ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" + LEGACY_ERROR_EXTRACTION = "ERROR_EXTRACTION" + LEGACY_ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" + LEGACY_ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" + LEGACY_ERROR_GENERIC = "ERROR_GENERIC" + + # Legacy USB preflight related + LEGACY_USB_CONNECTED = "USB_CONNECTED" + LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" + + # Legacy USB Disk preflight related errors + LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" + LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" + + # Legacy Disk export errors + LEGACY_USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" + LEGACY_ERROR_USB_MOUNT = "ERROR_USB_MOUNT" + LEGACY_ERROR_USB_WRITE = "ERROR_USB_WRITE" diff --git a/securedrop_export/disk/volume.py b/securedrop_export/disk/volume.py new file mode 100644 index 000000000..a3049e16e --- /dev/null +++ b/securedrop_export/disk/volume.py @@ -0,0 +1,57 @@ +from enum import Enum +import os + + +class EncryptionScheme(Enum): + """ + Supported encryption schemes. + """ + + UNKNOWN = 0 + LUKS = 1 + + +class Volume: + + MAPPED_VOLUME_PREFIX = "/dev/mapper/" + + """ + A volume on a removable device. + Volumes have a device name ("/dev/sdX"), a mapped name ("/dev/mapper/xxx"), an encryption scheme, + and a mountpoint if they are mounted. + """ + + def __init__( + self, + device_name: str, + mapped_name: str, + encryption: EncryptionScheme, + mountpoint: str = None, + ): + self.device_name = device_name + self.mapped_name = mapped_name + self.mountpoint = mountpoint + self.encryption = encryption + + @property + def encryption(self): + return self._encryption + + @encryption.setter + def encryption(self, scheme: EncryptionScheme): + if scheme: + self._encryption = scheme + else: + self._encryption = EncryptionScheme.UNKNOWN + + @property + def writable(self) -> bool: + return self.unlocked and self.mountpoint is not None + + @property + def unlocked(self) -> bool: + return ( + self.mapped_name is not None + and self.encryption is not EncryptionScheme.UNKNOWN + and os.path.exists(os.path.join(self.MAPPED_VOLUME_PREFIX, self.mapped_name)) + ) diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index 3bb86baad..5ed1dd7f4 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -28,9 +28,7 @@ def configure_logging(): log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) # set logging format - log_fmt = ( - "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" - ) + log_fmt = "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" formatter = logging.Formatter(log_fmt) handler = TimedRotatingFileHandler(log_file) diff --git a/securedrop_export/enums.py b/securedrop_export/enums.py new file mode 100644 index 000000000..7396b3adf --- /dev/null +++ b/securedrop_export/enums.py @@ -0,0 +1,40 @@ +from enum import Enum +from typing import TypeVar, Type + +T = TypeVar('T', bound=ExportEnum) + +class ExportEnum(Enum): + """ + Parent class for export and print statuses. + """ + @classmethod + def value_of(cls: Type[T], target: str) -> T: + for key, value in cls.__members__.items(): + if key == target: + return value + # Don't print the value since we don't know what it is + raise ValueError("No valid entry found for provided value") + + +class Command(ExportEnum): + """ + All supported commands. + + Values are as supplied by the calling VM (sd-app), and a change in any values require + corresponding changes in the calling VM. + """ + PRINTER_PREFLIGHT = "printer-preflight" + PRINTER_TEST = "printer-test" + PRINT = "printer" + CHECK_USBS = "usb-test" + CHECK_VOLUME = "disk-test" + EXPORT = "disk" + START_VM = "" + + @classmethod + def printer_actions(cls): + return (cls.PRINTER_PREFLIGHT, cls.PRINTER_TEST, cls.PRINT) + + @classmethod + def export_actions(cls): + return (cls.EXPORT, cls.CHECK_USBS, cls.CHECK_VOLUME) diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index 11855c0ff..282844b31 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -1,43 +1,33 @@ -from enum import Enum +import logging +from typing import Optional -class ExportStatus(Enum): +from .enums import ExportEnum - # General errors - ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" - ERROR_EXTRACTION = "ERROR_EXTRACTION" - ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" - ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" - ERROR_USB_CONFIGURATION = "ERROR_USB_CONFIGURATION" - ERROR_GENERIC = "ERROR_GENERIC" +logger = logging.getLogger(__name__) - # USB preflight related errors - USB_CONNECTED = "USB_CONNECTED" - USB_NOT_CONNECTED = "USB_NOT_CONNECTED" - ERROR_USB_CHECK = "ERROR_USB_CHECK" - # USB Disk preflight related errors - USB_ENCRYPTED = "USB_ENCRYPTED" - USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" - USB_DISK_ERROR = "USB_DISK_ERROR" - - # Printer preflight related errors - ERROR_MULTIPLE_PRINTERS_FOUND = "ERROR_MULTIPLE_PRINTERS_FOUND" - ERROR_PRINTER_NOT_FOUND = "ERROR_PRINTER_NOT_FOUND" - ERROR_PRINTER_NOT_SUPPORTED = "ERROR_PRINTER_NOT_SUPPORTED" - ERROR_PRINTER_DRIVER_UNAVAILABLE = "ERROR_PRINTER_DRIVER_UNAVAILABLE" - ERROR_PRINTER_INSTALL = "ERROR_PRINTER_INSTALL" +class ExportException(Exception): + """ + Base class for exceptions encountered during export. + """ - # Disk export errors - USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" - ERROR_USB_MOUNT = "ERROR_USB_MOUNT" - ERROR_USB_WRITE = "ERROR_USB_WRITE" + def __init__(self, *args, **kwargs): + super().__init__(*args) + self._status = kwargs.get("status") - # Printer export errors - ERROR_PRINT = "ERROR_PRINT" + @property + def status(self) -> Optional[ExportEnum]: + try: + return ExportEnum.value_of(self._status) + except ValueError: + logger.error( + "Unexpected value passed to ExportException (ExportEnum is required)." + ) + pass # Don't return a status -class TimeoutException(Exception): +class TimeoutException(ExportException): pass diff --git a/securedrop_export/export.py b/securedrop_export/export.py deleted file mode 100755 index 02d12c642..000000000 --- a/securedrop_export/export.py +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env python3 - -import abc -import datetime -import json -import logging -import os -import shutil -import subprocess -import sys -import tempfile - -from securedrop_export.exceptions import ExportStatus -from securedrop_export.utils import safe_extractall - -logger = logging.getLogger(__name__) - - -class Metadata(object): - """ - Object to parse, validate and store json metadata from the sd-export archive. - """ - - METADATA_FILE = "metadata.json" - SUPPORTED_EXPORT_METHODS = [ - "start-vm", - "usb-test", # general preflight check - "disk", - "disk-test", # disk preflight test - "printer", - "printer-test", # print test page - "printer-preflight", - ] - SUPPORTED_ENCRYPTION_METHODS = ["luks"] - - def __init__(self, archive_path): - self.metadata_path = os.path.join(archive_path, self.METADATA_FILE) - - try: - with open(self.metadata_path) as f: - logger.info("Parsing archive metadata") - json_config = json.loads(f.read()) - self.export_method = json_config.get("device", None) - self.encryption_method = json_config.get("encryption_method", None) - self.encryption_key = json_config.get("encryption_key", None) - logger.info( - "Exporting to device {} with encryption_method {}".format( - self.export_method, self.encryption_method - ) - ) - - except Exception: - logger.error("Metadata parsing failure") - raise - - def is_valid(self): - logger.info("Validating metadata contents") - if self.export_method not in self.SUPPORTED_EXPORT_METHODS: - logger.error( - "Archive metadata: Export method {} is not supported".format( - self.export_method - ) - ) - return False - - if self.export_method == "disk": - if self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS: - logger.error( - "Archive metadata: Encryption method {} is not supported".format( - self.encryption_method - ) - ) - return False - return True - - -class SDExport(object): - def __init__(self, archive, config_path): - os.umask(0o077) - self.archive = archive - self.submission_dirname = os.path.basename(self.archive).split(".")[0] - self.target_dirname = "sd-export-{}".format( - datetime.datetime.now().strftime("%Y%m%d-%H%M%S") - ) - self.tmpdir = tempfile.mkdtemp() - - def extract_tarball(self): - try: - logger.info( - "Extracting tarball {} into {}".format(self.archive, self.tmpdir) - ) - safe_extractall(self.archive, self.tmpdir) - except Exception as ex: - logger.error("Unable to extract tarball: {}".format(ex)) - self.exit_gracefully(ExportStatus.ERROR_EXTRACTION.value) - - def exit_gracefully(self, msg, e=False): - """ - Utility to print error messages, mostly used during debugging, - then exits successfully despite the error. Always exits 0, - since non-zero exit values will cause system to try alternative - solutions for mimetype handling, which we want to avoid. - """ - logger.info("Exiting with message: {}".format(msg)) - if e: - logger.error("Captured exception output: {}".format(e.output)) - try: - # If the file archive was extracted, delete before returning - if os.path.isdir(self.tmpdir): - shutil.rmtree(self.tmpdir) - # Do this after deletion to avoid giving the client two error messages in case of the - # block above failing - sys.stderr.write(msg) - sys.stderr.write("\n") - except Exception as ex: - logger.error("Unhandled exception: {}".format(ex)) - sys.stderr.write(ExportStatus.ERROR_GENERIC.value) - # exit with 0 return code otherwise the os will attempt to open - # the file with another application - sys.exit(0) - - def safe_check_call(self, command, error_message, ignore_stderr_startswith=None): - """ - Safely wrap subprocess.check_output to ensure we always return 0 and - log the error messages - """ - try: - err = subprocess.run(command, check=True, capture_output=True).stderr - # ppdc and lpadmin may emit warnings we are aware of which should not be treated as - # user facing errors - if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): - logger.info("Encountered warning: {}".format(err.decode("utf-8"))) - elif err == b"": - # Nothing on stderr and returncode is 0, we're good - pass - else: - self.exit_gracefully(msg=error_message, e=err) - except subprocess.CalledProcessError as ex: - self.exit_gracefully(msg=error_message, e=ex.output) - - -class ExportAction(abc.ABC): - """ - This export interface defines the method that export - methods should implement. - """ - - @abc.abstractmethod - def run(self) -> None: - """Run logic""" - pass diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 042c0cd9b..27600f87d 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,18 +1,18 @@ import logging +import sys from securedrop_export import export -from securedrop_export.exceptions import ExportStatus -from securedrop_export.print.actions import ( - PrintExportAction, - PrintTestPageAction, - PrintPreflightAction, -) +from securedrop_export.exceptions import Command, ExportStatus, PrintStatus + from securedrop_export.disk.actions import ( DiskTestAction, DiskExportAction, USBTestAction, ) +from securedrop_export.disk.service import Service as ExportService +from securedrop_export.print.service import Service as PrintService + logger = logging.getLogger(__name__) @@ -22,25 +22,72 @@ def __main__(submission): try: submission.archive_metadata = export.Metadata(submission.tmpdir) except Exception: - submission.exit_gracefully(ExportStatus.ERROR_METADATA_PARSING.value) + exit_gracefully(submission, ExportStatus.ERROR_METADATA_PARSING) if not submission.archive_metadata.is_valid(): - submission.exit_gracefully(ExportStatus.ERROR_ARCHIVE_METADATA.value) - - if submission.archive_metadata.export_method == "start-vm": - submission.exit_gracefully("") - - if submission.archive_metadata.export_method == "usb-test": - action = USBTestAction(submission) - elif submission.archive_metadata.export_method == "disk": - action = DiskExportAction(submission) - elif submission.archive_metadata.export_method == "disk-test": - action = DiskTestAction(submission) - elif submission.archive_metadata.export_method == "printer-preflight": - action = PrintPreflightAction(submission) - elif submission.archive_metadata.export_method == "printer": - action = PrintExportAction(submission) - elif submission.archive_metadata.export_method == "printer-test": - action = PrintTestPageAction(submission) - - action.run() + exit_gracefully(submission, ExportStatus.ERROR_ARCHIVE_METADATA) + + try: + command = Command.value_of(submission.archive_metadata.export_method) + + if command is Command.START_VM: + # No further operations + exit_gracefully(submission, command) + else: + status = None + try: + if command in Command.printer_actions(): + service = ExportService(submission) + status = service.run(command) + + elif command in Command.export_actions(): + service = PrintService(submission) + status = service.run(command) + + except ExportException as ex: + if ex.status: + status = ex.status + + finally: + exit_gracefully(submission, status) + + except ValueError: + # An unsupported command was sent from the calling VM + logger.error("Unsuported command, exiting") + exit_gracefully(submission) + + +def exit_gracefully(submission: SDExport, status: Status=None, e=None): + """ + Utility to print error messages, mostly used during debugging, + then exits successfully despite the error. Always exits 0, + since non-zero exit values will cause system to try alternative + solutions for mimetype handling, which we want to avoid. + """ + logger.info("Exiting with message: {}".format(msg)) + if e: + logger.error("Captured exception output: {}".format(e.output)) + try: + # If the file archive was extracted, delete before returning + if os.path.isdir(submission.tmpdir): + shutil.rmtree(submission.tmpdir) + # Do this after deletion to avoid giving the client two error messages in case of the + # block above failing + write_status(status) + except Exception as ex: + logger.error("Unhandled exception: {}".format(ex)) + write_status(ExportStatus.LEGACY_ERROR_GENERIC) + # exit with 0 return code otherwise the os will attempt to open + # the file with another application + sys.exit(0) + + +def _write_status(self, status: Status): + """ + Write string to stderr. + """ + if status: + sys.stderr.write(status.value) + sys.stderr.write("\n") + else: + logger.info("No status value supplied") diff --git a/securedrop_export/print/actions.py b/securedrop_export/print/service.py similarity index 58% rename from securedrop_export/print/actions.py rename to securedrop_export/print/service.py index 78a5e3aa3..98af6a0b1 100644 --- a/securedrop_export/print/actions.py +++ b/securedrop_export/print/service.py @@ -3,10 +3,10 @@ import signal import subprocess import time +from enum import Enum -from securedrop_export.exceptions import ExportStatus, handler, TimeoutException -from securedrop_export.export import ExportAction - +from .exceptions import ExportStatus, handler, TimeoutException +from .status import Status PRINTER_NAME = "sdw-printer" PRINTER_WAIT_TIMEOUT = 60 @@ -18,27 +18,55 @@ logger = logging.getLogger(__name__) -class PrintAction(ExportAction): +class Service(): + """ + Printer service + """ + def __init__(self, submission): self.submission = submission self.printer_name = PRINTER_NAME self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT - def run(self) -> None: - """Run logic""" - raise NotImplementedError - - def wait_for_print(self): - # use lpstat to ensure the job was fully transfered to the printer - # returns True if print was successful, otherwise will throw exceptions + def print(self): + """ + Routine to print all files. + Throws ExportException if an error is encountered. + """ + logger.info("Printing all files from archive") + self._check_printer_setup() + self._print_all_files() + + def printer_preflight(self): + """ + Routine to perform preflight printer testing. + + Throws ExportException if an error is encoutered. + """ + logger.info("Running printer preflight") + self._check_printer_setup() + + def printer_test(self): + """ + Routine to print a test page. + + Throws ExportException if an error is encountered. + """ + logger.info("Printing test page") + self._check_printer_setup() + self._print_test_page() + + def _wait_for_print(self): + """ + Use lpstat to ensure the job was fully transfered to the printer + Return True if print was successful, otherwise throw ExportException. + """ signal.signal(signal.SIGALRM, handler) signal.alarm(self.printer_wait_timeout) printer_idle_string = "printer {} is idle".format(self.printer_name) while True: try: - logger.info( - "Running lpstat waiting for printer {}".format(self.printer_name) - ) + logger.info("Running lpstat waiting for printer {}".format(self.printer_name)) output = subprocess.check_output(["lpstat", "-p", self.printer_name]) if printer_idle_string in output.decode("utf-8"): logger.info("Print completed") @@ -46,52 +74,54 @@ def wait_for_print(self): else: time.sleep(5) except subprocess.CalledProcessError: - self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) + raise ExportException(Status.ERROR_PRINT) except TimeoutException: logger.error("Timeout waiting for printer {}".format(self.printer_name)) - self.submission.exit_gracefully(ExportStatus.ERROR_PRINT.value) + raise ExportException(Status.ERROR_PRINT) return True - def check_printer_setup(self) -> None: + def _check_printer_setup(self) -> None: + """ + Check printer setup. + Raise ExportException if supported setup is not found. + """ try: logger.info("Searching for printer") output = subprocess.check_output(["sudo", "lpinfo", "-v"]) printers = [x for x in output.decode("utf-8").split() if "usb://" in x] if not printers: logger.info("No usb printers connected") - self.submission.exit_gracefully( - ExportStatus.ERROR_PRINTER_NOT_FOUND.value - ) + raise ExportException(Status.ERROR_PRINTER_NOT_FOUND) supported_printers = [ p for p in printers if any(sub in p for sub in ("Brother", "LaserJet")) ] if not supported_printers: logger.info("{} are unsupported printers".format(printers)) - self.submission.exit_gracefully( - ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value - ) + raise ExportException(Status.ERROR_PRINTER_NOT_SUPPORTED) if len(supported_printers) > 1: logger.info("Too many usb printers connected") - self.submission.exit_gracefully( - ExportStatus.ERROR_MULTIPLE_PRINTERS_FOUND.value - ) + raise ExportException(Status.ERROR_MULTIPLE_PRINTERS_FOUND) printer_uri = printers[0] - printer_ppd = self.install_printer_ppd(printer_uri) + printer_ppd = self._install_printer_ppd(printer_uri) self.setup_printer(printer_uri, printer_ppd) except subprocess.CalledProcessError as e: logger.error(e) - self.submission.exit_gracefully(ExportStatus.ERROR_GENERIC.value) + raise ExportException(Status.ERROR_GENERIC) + + def _get_printer_uri(self) -> str: + """ + Get the URI via lpinfo. Only accept URIs of supported printers. - def get_printer_uri(self): - # Get the URI via lpinfo and only accept URIs of supported printers + Raise ExportException if supported setup is not found. + """ printer_uri = "" try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError: - self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_URI.value) + raise ExportException(Status.ERROR_PRINTER_URI) # fetch the usb printer uri for line in output.split(): @@ -99,29 +129,23 @@ def get_printer_uri(self): printer_uri = line.decode("utf-8") logger.info("lpinfo usb printer: {}".format(printer_uri)) - # verify that the printer is supported, else exit + # verify that the printer is supported, else throw if printer_uri == "": # No usb printer is connected logger.info("No usb printers connected") - self.submission.exit_gracefully(ExportStatus.ERROR_PRINTER_NOT_FOUND.value) + raise ExportException(Status.ERROR_PRINTER_NOT_FOUND) elif not any(x in printer_uri for x in ("Brother", "LaserJet")): # printer url is a make that is unsupported logger.info("Printer {} is unsupported".format(printer_uri)) - self.submission.exit_gracefully( - ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value - ) + raise ExportException(Status.ERROR_PRINTER_NOT_SUPPORTED) logger.info("Printer {} is supported".format(printer_uri)) return printer_uri def install_printer_ppd(self, uri): if not any(x in uri for x in ("Brother", "LaserJet")): - logger.error( - "Cannot install printer ppd for unsupported printer: {}".format(uri) - ) - self.submission.exit_gracefully( - msg=ExportStatus.ERROR_PRINTER_NOT_SUPPORTED.value - ) + logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) + raise ExportException(Status.ERROR_PRINTER_NOT_SUPPORTED) return if "Brother" in uri: @@ -134,7 +158,7 @@ def install_printer_ppd(self, uri): # Compile and install drivers that are not already installed if not os.path.exists(printer_ppd): logger.info("Installing printer drivers") - self.submission.safe_check_call( + self._safe_check_call( command=[ "sudo", "ppdc", @@ -142,16 +166,16 @@ def install_printer_ppd(self, uri): "-d", "/usr/share/cups/model/", ], - error_message=ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE.value, + error_message=Status.ERROR_PRINTER_DRIVER_UNAVAILABLE.value, ignore_stderr_startswith=b"ppdc: Warning", ) return printer_ppd - def setup_printer(self, printer_uri, printer_ppd): + def _setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin logger.info("Setting up printer {}".format(self.printer_name)) - self.submission.safe_check_call( + self._safe_check_call( command=[ "sudo", "lpadmin", @@ -165,25 +189,25 @@ def setup_printer(self, printer_uri, printer_ppd): "-u", "allow:user", ], - error_message=ExportStatus.ERROR_PRINTER_INSTALL.value, + error_message=Status.ERROR_PRINTER_INSTALL.value, ignore_stderr_startswith=b"lpadmin: Printer drivers", ) - def print_test_page(self): + def _print_test_page(self): logger.info("Printing test page") - self.print_file("/usr/share/cups/data/testprint") + self._print_file("/usr/share/cups/data/testprint") - def print_all_files(self): + def _print_all_files(self): files_path = os.path.join(self.submission.tmpdir, "export_data/") files = os.listdir(files_path) print_count = 0 for f in files: file_path = os.path.join(files_path, f) - self.print_file(file_path) + self._print_file(file_path) print_count += 1 logger.info("Printing document {} of {}".format(print_count, len(files))) - def is_open_office_file(self, filename): + def _is_open_office_file(self, filename): OPEN_OFFICE_FORMATS = [ ".doc", ".docx", @@ -201,7 +225,7 @@ def is_open_office_file(self, filename): return True return False - def print_file(self, file_to_print): + def _print_file(self, file_to_print): # If the file to print is an (open)office document, we need to call unoconf to # convert the file to pdf as printer drivers do not support this format if self.is_open_office_file(file_to_print): @@ -209,45 +233,36 @@ def print_file(self, file_to_print): folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) - self.submission.safe_check_call( + self.safe_check_call( command=["unoconv", "-o", converted_path, file_to_print], - error_message=ExportStatus.ERROR_PRINT.value, + error_message=Status.ERROR_PRINT.value, ) file_to_print = converted_path logger.info("Sending file to printer {}".format(self.printer_name)) - self.submission.safe_check_call( + + # todo + self._safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], - error_message=ExportStatus.ERROR_PRINT.value, + error_message=Status.ERROR_PRINT.value, ) -class PrintExportAction(PrintAction): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def run(self): - logger.info("Export archive is printer") - self.check_printer_setup() - # prints all documents in the archive - self.print_all_files() - - -class PrintTestPageAction(PrintAction): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def run(self): - logger.info("Export archive is printer-test") - self.check_printer_setup() - # Prints a test page to ensure the printer is functional - self.print_test_page() - - -class PrintPreflightAction(PrintAction): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def run(self): - logger.info("Export archive is printer-preflight") - self.check_printer_setup() + def _safe_check_call(self, command: str, status: Status, ignore_stderr_startswith=None): + """ + Safely wrap subprocess.check_output to ensure we always return 0 and + log the error messages + """ + try: + err = subprocess.run(command, check=True, capture_output=True).stderr + # ppdc and lpadmin may emit warnings we are aware of which should not be treated as + # user facing errors + if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): + logger.info("Encountered warning: {}".format(err.decode("utf-8"))) + elif err == b"": + # Nothing on stderr and returncode is 0, we're good + pass + else: + raise ExportException(status=status, e=err) + except subprocess.CalledProcessError as ex: + raise ExportException(status=status, e=ex.output) diff --git a/securedrop_export/print/status.py b/securedrop_export/print/status.py new file mode 100644 index 000000000..86e3bf7ff --- /dev/null +++ b/securedrop_export/print/status.py @@ -0,0 +1,13 @@ +from securedrop_export.exceptions import ExportEnum + +class Status(ExportEnum): + + # Printer preflight related errors + ERROR_MULTIPLE_PRINTERS_FOUND = "ERROR_MULTIPLE_PRINTERS_FOUND" + ERROR_PRINTER_NOT_FOUND = "ERROR_PRINTER_NOT_FOUND" + ERROR_PRINTER_NOT_SUPPORTED = "ERROR_PRINTER_NOT_SUPPORTED" + ERROR_PRINTER_DRIVER_UNAVAILABLE = "ERROR_PRINTER_DRIVER_UNAVAILABLE" + ERROR_PRINTER_INSTALL = "ERROR_PRINTER_INSTALL" + + # Printer export errors + ERROR_PRINT = "ERROR_PRINT" diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py index f5e1229ce..a60eca09f 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/utils.py @@ -101,9 +101,7 @@ def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: if filename_or_filepath.is_absolute(): base_path = filename_or_filepath else: - base_path = ( - Path.cwd() - ) # use cwd so we can next ensure relative path does not traverse up + base_path = Path.cwd() # use cwd so we can next ensure relative path does not traverse up try: relative_path = relative_filepath(filename_or_filepath, base_path) @@ -112,10 +110,7 @@ def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: # base, but can still have harmful side effects to the application. If this kind of # traversal is needed, then call relative_filepath instead in order to check that the # desired traversal does not go past a safe base directory. - if ( - relative_path != filename_or_filepath - and not filename_or_filepath.is_absolute() - ): + if relative_path != filename_or_filepath and not filename_or_filepath.is_absolute(): raise ValueError except ValueError: raise ValueError(f"Unsafe file or directory name: '{filename_or_filepath}'") @@ -148,6 +143,4 @@ def check_dir_permissions(dir_path: Union[str, Path]) -> None: stat_res = os.stat(dir_path).st_mode masked = stat_res & 0o777 if masked & 0o077: - raise RuntimeError( - "Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path) - ) + raise RuntimeError("Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path)) diff --git a/setup.py b/setup.py index d21514991..e64b673fa 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,5 @@ "Intended Audience :: Developers", "Operating System :: OS Independent", ), - entry_points={ - "console_scripts": ["send-to-usb = securedrop_export.entrypoint:start"] - }, + entry_points={"console_scripts": ["send-to-usb = securedrop_export.entrypoint:start"]}, ) diff --git a/tests/disk/test_actions.py b/tests/disk/test_actions.py index 7d5d24d2a..099836773 100644 --- a/tests/disk/test_actions.py +++ b/tests/disk/test_actions.py @@ -1,215 +1,149 @@ +import pytest from unittest import mock import os import pytest import sys +import tempfile +import subprocess from subprocess import CalledProcessError +from securedrop_export.disk.exceptions import ExportException +from securedrop_export.disk.status import Status + from securedrop_export import export -from securedrop_export.disk.actions import DiskExportAction, DiskTestAction +from securedrop_export.disk.actions import DiskExportAction, DiskTestAction, USBTestAction TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") -SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa -SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa -SAMPLE_OUTPUT_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa +SAMPLE_OUTPUT_LSBLK_NO_PART = b"disk\ncrypt" # noqa +SAMPLE_OUTPUT_LSBLK_ONE_PART = b"disk\npart\ncrypt" # noqa +SAMPLE_OUTPUT_LSBLK_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa -def test_usb_precheck_disconnected(capsys, mocker): - """Tests the scenario where there are disks connected, but none of them are USB""" - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskTestAction(submission) - expected_message = "USB_NOT_CONNECTED" - assert export.ExportStatus.USB_NOT_CONNECTED.value == expected_message - - # Popen call returns lsblk output - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock( - return_value=[b"sda disk\n", b"sdb disk\n"] - ) - mocker.patch("subprocess.Popen", return_value=command_output) - - # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=[b"0\n", b"0\n"]) - - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - mocker.patch( - "subprocess.check_output", side_effect=CalledProcessError(1, "check_output") - ) - - action.check_usb_connected(exit=True) - - mocked_exit.assert_called_once_with(expected_message) - assert action.device is None - - -def test_usb_precheck_connected(capsys, mocker): - """Tests the scenario where there is one USB connected""" - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskTestAction(submission) - - # Popen call returns lsblk output - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=[b"sdb disk\n"]) - mocker.patch("subprocess.Popen", return_value=command_output) - - # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=b"1\n") - - expected_message = "USB_CONNECTED" - assert export.ExportStatus.USB_CONNECTED.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - action.check_usb_connected(exit=True) - - mocked_exit.assert_called_once_with(expected_message) - assert action.device == "/dev/sdb" - - -def test_usb_precheck_multiple_devices_connected(capsys, mocker): - """Tests the scenario where there are multiple USB drives connected""" - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskTestAction(submission) - - # Popen call returns lsblk output - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock( - return_value=[b"sdb disk\n", b"sdc disk\n"] - ) - mocker.patch("subprocess.Popen", return_value=command_output) - - # check_output returns removable status - mocker.patch("subprocess.check_output", return_value=b"1\n") - - expected_message = "ERROR_GENERIC" - assert export.ExportStatus.ERROR_GENERIC.value == expected_message - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - action.check_usb_connected(exit=True) - - mocked_exit.assert_called_once_with(expected_message) - assert action.device is None - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) -def test_extract_device_name_no_part(mocked_call, capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) - - action.device = "/dev/sda" - - action.set_extracted_device_name() - - assert action.device == "/dev/sda" +class TestExportAction: + def _setup_submission(self) -> export.SDExport: + """ + Helper method to set up stub export object + """ + submission = export.SDExport("testfile", TEST_CONFIG) + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') + submission.archive_metadata = export.Metadata(temp_folder) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_extract_device_name_single_part(mocked_call, capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) + return submission - action.device = "/dev/sda" + @mock.patch("sys.exit") + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_usbtestaction(self, mock_cli, mock_sys,): - action.set_extracted_device_name() + mock_cli.write_status = mock.MagicMock() + usb = USBTestAction(self._setup_submission()) - assert action.device == "/dev/sda1" + usb.run() + mock_cli.write_status.assert_called_once_with(Status.LEGACY_USB_CONNECTED) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_extract_device_name_multiple_part(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) - action.device = "/dev/sda" - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_usbtestaction_error(self, mock_cli, capsys): + mock_cli.get_connected_devices.side_effect = ExportException(Status.LEGACY_ERROR_USB_CHECK) + usb = USBTestAction(self._setup_submission()) - action.set_extracted_device_name() + mock_cli.write_status = mock.MagicMock() + + usb.run() + mock_cli.write_status.assert_called_once_with(Status.LEGACY_ERROR_USB_CHECK) - mocked_exit.assert_called_once_with(expected_message) + @mock.patch("sys.exit") + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_disktestaction(self, mock_sys, mock_cli): + mock_cli.is_luks_volume.return_value=True + mock_cli.write_status = mock.MagicMock() -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PART) -def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) + test_export = DiskTestAction(self._setup_submission()) + test_export.run() - command_output = mock.MagicMock() - command_output.stderr = b"" - mocker.patch("subprocess.run", return_value=command_output) + mock_cli.write_status.assert_called_once_with(Status.SUCCESS_EXPORT) - expected_message = export.ExportStatus.USB_ENCRYPTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LSBLK_NO_PART) + @mock.patch("subprocess.check_call", return_value=0) + def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = DiskExportAction(submission) - action.check_luks_volume() + command_output = mock.MagicMock() + command_output.stderr = b"" + mocker.patch("subprocess.run", return_value=command_output) - mocked_exit.assert_called_once_with(expected_message) + expected_message = Status.LEGACY_USB_ENCRYPTED.value + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + @mock.patch("sys.exit") + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_disktestaction_error(self, mock_cli, mocker): + mock_cli.patch("get_partitioned_device", side_effect=ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED)) -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_luks_precheck_encrypted_single_part(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) - action.device = "/dev/sda" - expected_message = export.ExportStatus.USB_ENCRYPTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) + status_mock = mock_cli.patch("write_status") + test_export = DiskTestAction(self._setup_submission()) + test_export.run() + status_mock.assert_called_once_with(Status.LEGACY_ERROR_USB_WRITE) - command_output = mock.MagicMock() - command_output.stderr = b"" - mocker.patch("subprocess.run", return_value=command_output) + @mock.patch("sys.exit") + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LSBLK_ONE_PART) + @mock.patch("subprocess.check_call", return_value=0) + def test_luks_precheck_encrypted_single_part(mocked_call, mock_output, capsys, mocker): + submission = export.SDExport("testfile", TEST_CONFIG) + action = DiskTestAction(submission) + action.device = "/dev/sda" + expected_message = Status.LEGACY_USB_ENCRYPTED.value + mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - action.check_luks_volume() + command_output = mock.MagicMock() + command_output.stderr = b"" + mocker.patch("subprocess.run", return_value=command_output) - mocked_exit.assert_called_once_with(expected_message) + action.run() + @mock.patch("sys.exit") + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_diskexportaction(self, mock_cli, mock_sys): -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_MULTI_PART) -def test_luks_precheck_encrypted_multi_part(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) - action.device = "/dev/sda" - expected_message = export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + mock_cli.patch("is_luks_volume", return_value=True) + status_mock = mock_cli.patch("write_status") - # Here we need to mock the exit_gracefully method with a side effect otherwise - # program execution will continue after exit_gracefully and exit_gracefully - # may be called a second time. - mocked_exit = mocker.patch.object( - submission, "exit_gracefully", side_effect=lambda x: sys.exit(0) - ) + test_export = DiskExportAction(self._setup_submission()) + test_export.run() - # Output of `lsblk -o TYPE --noheadings DEVICE_NAME` when a drive has multiple - # partitions - multi_partition_lsblk_output = b"disk\npart\npart\n" - mocker.patch("subprocess.check_output", return_value=multi_partition_lsblk_output) + status_mock.assert_called_once_with(Status.SUCCESS_EXPORT) - with pytest.raises(SystemExit): - action.check_luks_volume() + @mock.patch("sys.exit") + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_diskexportaction_disk_not_supported(self, mock_cli, mock_sys): - mocked_exit.assert_called_once_with(expected_message) + mock_cli.patch("get_partitioned_device") + mock_cli.patch("is_luks_volume", return_value=False) + status_mock = mock_cli.patch("write_status") + test_export = DiskExportAction(self._setup_submission()) + test_export.run() -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_ONE_PART) -def test_luks_precheck_encrypted_luks_error(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) - action.device = "/dev/sda" - expected_message = "USB_ENCRYPTION_NOT_SUPPORTED" - assert expected_message == export.ExportStatus.USB_ENCRYPTION_NOT_SUPPORTED.value + status_mock.assert_called_once_with(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - mocked_exit = mocker.patch.object( - submission, "exit_gracefully", side_effect=lambda msg, e: sys.exit(0) - ) + @mock.patch("sys.exit") + @mock.patch("securedrop_export.disk.actions.CLI") + def test_run_diskexportaction_not_supported(self, mock_sys, mock_cli): - single_partition_lsblk_output = b"disk\npart\n" - mocker.patch("subprocess.check_output", return_value=single_partition_lsblk_output) - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) + status_mock = mock_cli.patch("write_status") + mock_cli.patch("get_partitioned_device") + mock_cli.is_luks_volume.return_value=True + mock_cli.write_data_to_device.side_effect = Status.LEGACY_ERROR_USB_WRITE - with pytest.raises(SystemExit): - action.check_luks_volume() + test_export = DiskExportAction(self._setup_submission()) + test_export.run() - assert mocked_exit.mock_calls[0][2]["msg"] == expected_message - assert mocked_exit.mock_calls[0][2]["e"] is None + status_mock.assert_called_once_with(Status.LEGACY_ERROR_USB_WRITE) diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py new file mode 100644 index 000000000..7560630f7 --- /dev/null +++ b/tests/disk/test_cli.py @@ -0,0 +1,376 @@ +import pytest +from unittest import mock + +import os +import pytest +import sys + +import subprocess + +from securedrop_export.disk.cli import CLI +from securedrop_export.disk.volume import EncryptionScheme, Volume +from securedrop_export.disk.exceptions import ExportException +from securedrop_export.disk.status import Status + +from securedrop_export import export + +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") + +_DEFAULT_USB_DEVICE = "/dev/sda" +_DEFAULT_USB_DEVICE_ONE_PART = "/dev/sda1" + +_PRETEND_LUKS_ID = "luks-id-123456" + +# Sample stdout from shell commands +_SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa +_SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa +_SAMPLE_OUTPUT_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa +_SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa + +_SAMPLE_LUKS_HEADER = b"\n\nUUID:\t123456-DEADBEEF" # noqa + + +class TestCli: + """ + Test the CLI wrapper that handless identification and locking/unlocking of + USB volumes. + """ + + def _setup_usb_devices(self, mocker, disks, is_removable): + """ + Helper function to set up mocked shell calls representing + the search for attached USB devices. + The original calls are `lsblk | grep disk` and + `cat /sys/class/block/{disk}/removable` + + Parameters: + disks (byte array): Array of disk names separated by newline. + is_removable (byte array): Array of removable status results (1 for removable) separated by newline + """ + + # Patch commandline calls to `lsblk | grep disk` + command_output = mock.MagicMock() + command_output.stdout = mock.MagicMock() + command_output.stdout.readlines = mock.MagicMock(return_value=disks) + mocker.patch("subprocess.Popen", return_value=command_output) + + # Pactch commandline call to 'cat /sys/class/block/{device}/removable' + + # Using side_effect with an iterable allows for different return value each time, + # which matches what would happen if iterating through list of devices + mocker.patch("subprocess.check_output", side_effect=is_removable) + + def test_get_connected_devices(self, mocker): + disks = [b"sda disk\n", b"sdb disk\n"] + removable = [b"1\n", b"1\n"] + + self._setup_usb_devices(mocker, disks, removable) + cli = CLI() + result = cli.get_connected_devices() + + assert result[0] == "/dev/sda" and result[1] == "/dev/sdb" + + @mock.patch("subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen")) + def test_get_connected_devices_error(self, mocked_subprocess): + cli = CLI() + + with pytest.raises(ExportException): + cli.get_connected_devices() + + @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_NO_PART) + def test_get_partitioned_device_no_partition(self, mocked_call): + cli = CLI() + + result = cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + assert result == _DEFAULT_USB_DEVICE + + @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_ONE_PART) + def test_get_partitioned_device_one_partition(self, mocked_call): + cli = CLI() + + result = cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + assert result == _DEFAULT_USB_DEVICE+"1" + + @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_MULTI_PART) + def test_get_partitioned_device_multi_partition(self, mocked_call): + cli = CLI() + + with pytest.raises(ExportException): + result = cli.get_partitioned_device(_SAMPLE_OUTPUT_MULTI_PART) + + @mock.patch( + "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output") + ) + def test_get_partitioned_device_multi_partition_error(self, mocked_call): + cli = CLI() + + # Make sure we wrap CalledProcessError and throw our own exception + with pytest.raises(ExportException): + cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + + @mock.patch("subprocess.check_call", return_value=0) + def test_is_luks_volume_true(self, mocked_call): + cli = CLI() + + # `sudo cryptsetup isLuks` returns 0 if true + assert cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) + + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test_is_luks_volume_false(self, mocked_subprocess): + cli = CLI() + + # `sudo cryptsetup isLuks` returns 1 if false; CalledProcessError is thrown + assert not cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) + + @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) + def test__get_luks_name_from_headers(self, mocked_subprocess): + cli = CLI() + + result = cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + + assert result is not None and result.split("-")[1] in _SAMPLE_LUKS_HEADER.decode("utf8") + + @mock.patch("subprocess.check_output", return_value=b"corrupted-or-invalid-header\n") + def test__get_luks_name_from_headers_error(self, mocked_subprocess): + cli = CLI() + + with pytest.raises(ExportException): + result = cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + + @mock.patch( + "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output") + ) + def test__get_luks_name_from_headers_error(self, mocked_subprocess): + cli = CLI() + + with pytest.raises(ExportException): + result = cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + + @mock.patch("os.path.exists", return_value=True) + @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) + def test_get_luks_volume_already_unlocked(self, mocked_subprocess, mocked_os_call): + cli = CLI() + result = cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + + assert result.encryption is EncryptionScheme.LUKS + assert result.unlocked + + @mock.patch("os.path.exists", return_value=True) + def test__unlock_luks_volume_success(self, mocker): + cli = CLI() + + mock_popen = mocker.MagicMock() + mock_popen_communicate = mocker.MagicMock() + mock_popen.returncode = 0 + + mocker.patch("subprocess.Popen", return_value=mock_popen) + mocker.patch("subprocess.Popen.communicate", return_value=mock_popen_communicate) + + mapped_name = "luks-id-123456" + vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=mapped_name, encryption=EncryptionScheme.LUKS) + key = "A key!&8*%_ A KEY" + result = cli.unlock_luks_volume(vol, key) + assert vol.unlocked + + def test_unlock_luks_volume_not_luks(self, mocker): + cli = CLI() + + mock_popen = mocker.MagicMock() + mock_popen.communicate = mocker.MagicMock() + mock_popen.communicate.returncode = 1 # An error unlocking + + mocker.patch("subprocess.Popen", mock_popen) + + vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.UNKNOWN) + key = "a key!" + mapped_name = "luks-id-123456" + + with pytest.raises(ExportException): + cli.unlock_luks_volume(vol, key) + + def test_unlock_luks_volume_passphrase_failure(self, mocker): + cli = CLI() + + mock_popen = mocker.MagicMock() + mock_popen.communicate = mocker.MagicMock() + mock_popen.communicate.returncode = 1 # An error unlocking + + mocker.patch("subprocess.Popen", mock_popen) + + vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS) + key = "a key!" + mapped_name = "luks-id-123456" + + with pytest.raises(ExportException): + cli.unlock_luks_volume(vol, key) + + @mock.patch("subprocess.Popen", side_effect=subprocess.CalledProcessError("1", "Popen")) + def test_unlock_luks_volume_luksOpen_exception(self, mocked_subprocess): + cli = CLI() + pd = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS) + key = "a key!" + mapped_name = "luks-id-123456" + + with pytest.raises(ExportException): + cli.unlock_luks_volume(pd, key) + + @mock.patch("subprocess.check_output", return_value=b"\n") + @mock.patch("subprocess.check_call", return_value=0) + def test_mount_volume(self, mocked_output, mocked_call): + cli = CLI() + vol = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + result = cli.mount_volume(vol) + + @mock.patch("subprocess.check_output", return_value=b"/dev/pretend/luks-id-123456\n") + @mock.patch("subprocess.check_call", return_value=0) + def test_mount_volume_already_mounted(self, mocked_output, mocked_call): + cli = CLI() + md = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + result = cli.mount_volume(md) + + @mock.patch("subprocess.check_output", return_value=b"\n") + @mock.patch("subprocess.check_call", return_value=0) + def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess): + cli = CLI() + md = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + result = cli.mount_volume(md) + + assert result.mapped_name == _PRETEND_LUKS_ID + + @mock.patch("subprocess.check_output", return_value=b"\n") + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test_mount_volume_error(self, mocked_subprocess, mocked_output): + cli = CLI() + + md = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + + with pytest.raises(ExportException): + cli.mount_volume(md) + + @mock.patch("os.path.exists", return_value=True) + @mock.patch("subprocess.check_call", return_value=0) + def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): + cli = CLI() + + mounted = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + mountpoint=cli._DEFAULT_MOUNTPOINT, + encryption=EncryptionScheme.LUKS, + ) + + result = cli._unmount_volume(mounted) + + + @mock.patch("os.path.exists", return_value=True) + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test__unmount_volume_error(self, mocked_subprocess, mocked_mountpath): + cli = CLI() + + mounted = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + mountpoint=cli._DEFAULT_MOUNTPOINT, + encryption=EncryptionScheme.LUKS, + ) + + with pytest.raises(ExportException): + result = cli._unmount_volume(mounted) + + @mock.patch("os.path.exists", return_value=True) + @mock.patch("subprocess.check_call", return_value=0) + def test__close_luks_volume(self, mocked_subprocess, mocked_os_call): + cli = CLI() + + mapped = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + + # If call completes without error, drive was successfully closed with luksClose + cli._close_luks_volume(mapped) + + @mock.patch("os.path.exists", return_value=True) + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test__close_luks_volume_error(self, mocked_subprocess, mocked_os_call): + cli = CLI() + + mapped = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + + with pytest.raises(ExportException): + cli._close_luks_volume(mapped) + + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test__remove_temp_directory_error(self, mocked_subprocess): + cli = CLI() + + with pytest.raises(ExportException): + cli._remove_temp_directory("tmp") + + @mock.patch("subprocess.check_call", return_value=0) + def test_write_to_disk(self, mock_check_call): + cli = CLI() + + vol = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + mountpoint=cli._DEFAULT_MOUNTPOINT, + encryption=EncryptionScheme.LUKS, + ) + + submission = export.SDExport("testfile", TEST_CONFIG) + + cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) + + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test_write_to_disk_error_still_does_cleanup(self, mock_call, mocker): + cli = CLI() + cli.cleanup_drive_and_tmpdir = mocker.MagicMock() + + vol = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + mountpoint=cli._DEFAULT_MOUNTPOINT, + encryption=EncryptionScheme.LUKS, + ) + submission = export.SDExport("testfile", TEST_CONFIG) + + with pytest.raises(ExportException): + cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) + cleanup_mock.assert_called_once() + + @pytest.mark.parametrize("status", [s for s in Status]) + def test_write_status(self, status, capsys): + cli = CLI() + + cli.write_status(status) + captured = capsys.readouterr() + assert captured.out == status.value + "\n" + + @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0"]) + def test_write_status_error(self, invalid_status, capsys): + cli = CLI() + + with pytest.raises(ValueError): + cli.write_status(Status.value_of(invalid_status)) diff --git a/tests/disk/test_status.py b/tests/disk/test_status.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/disk/test_volume.py b/tests/disk/test_volume.py new file mode 100644 index 000000000..8651bdbef --- /dev/null +++ b/tests/disk/test_volume.py @@ -0,0 +1,47 @@ +import pytest +from unittest import mock + +from securedrop_export.disk.volume import Volume, EncryptionScheme + + +class TestVolume: + def test_overwrite_valid_encryption_scheme(self): + volume = Volume(device_name="/dev/sda", mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS) + assert volume.encryption is EncryptionScheme.LUKS + volume.encryption = None + assert volume.encryption is EncryptionScheme.UNKNOWN + + @mock.patch("os.path.exists", return_value=True) + def test_is_unlocked_true(self, mock_os_path): + volume = Volume( + device_name="/dev/sda1", mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS + ) + + assert volume.unlocked + + @mock.patch("os.path.exists", return_value=False) + def test_is_unlocked_false_no_path(self, mock_os_path): + volume = Volume( + device_name="/dev/sda1", mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS + ) + + assert not volume.unlocked + + @mock.patch("os.path.exists", return_value=True) + def test_writable_false(self, mock_os_path): + vol = Volume( + device_name="dev/sda1", mapped_name="pretend-luks-id", encryption=EncryptionScheme.LUKS + ) + + assert not vol.writable + + @mock.patch("os.path.exists", return_value=True) + def test_writable_false(self, mock_os_path): + vol = Volume( + device_name="dev/sda1", + mapped_name="pretend-luks-id", + encryption=EncryptionScheme.LUKS, + mountpoint="/media/usb", + ) + + assert vol.writable diff --git a/tests/print/test_actions.py b/tests/print/test_actions.py index 37b2ea9c4..17c3397fb 100644 --- a/tests/print/test_actions.py +++ b/tests/print/test_actions.py @@ -84,9 +84,7 @@ def test_is_not_open_office_file(capsys, open_office_paths): def test_install_printer_ppd_laserjet(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) - ppd = action.install_printer_ppd( - "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000" - ) + ppd = action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" @@ -94,9 +92,7 @@ def test_install_printer_ppd_laserjet(mocker): def test_install_printer_ppd_brother(mocker): submission = export.SDExport("testfile", TEST_CONFIG) action = PrintExportAction(submission) - ppd = action.install_printer_ppd( - "usb://Brother/HL-L2320D%20series?serial=A00000A000000" - ) + ppd = action.install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") assert ppd == "/usr/share/cups/model/br7030.ppd" @@ -106,9 +102,7 @@ def test_install_printer_ppd_error_no_driver(mocker): mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - action.install_printer_ppd( - "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" - ) + action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" assert mocked_exit.mock_calls[0][2]["e"] is None diff --git a/tests/test_export.py b/tests/test_export.py index fb6f5868d..4b596c9a7 100644 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -13,9 +13,7 @@ TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") -ANOTHER_BAD_TEST_CONFIG = os.path.join( - os.path.dirname(__file__), "sd-export-config-bad-2.json" -) +ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") def test_extract_tarball(): @@ -53,22 +51,15 @@ def test_extract_tarball(): submission.extract_tarball() - extracted_file_path = os.path.join( - submission.tmpdir, "some", "dirs", "file.txt" - ) + extracted_file_path = os.path.join(submission.tmpdir, "some", "dirs", "file.txt") assert os.path.exists(extracted_file_path) assert oct(os.stat(extracted_file_path).st_mode) == "0o100600" # Subdirectories that are added as members are extracted with 700 permissions - assert ( - oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" - ) + assert oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" # Subdirectories that are not added as members are extracted with 700 permissions # because os.umask(0o077) is set in the SDExport constructor. - assert ( - oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) - == "0o40700" - ) + assert oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) == "0o40700" def test_extract_tarball_with_symlink(): @@ -124,9 +115,7 @@ def test_extract_tarball_raises_if_doing_path_traversal(): metadata_file_info.size = len(metadata_str) archive.addfile(metadata_file_info, metadata_bytes) content = b"test" - traversed_file_info = tarfile.TarInfo( - "../../../../../../../../../tmp/traversed" - ) + traversed_file_info = tarfile.TarInfo("../../../../../../../../../tmp/traversed") traversed_file_info.size = len(content) archive.addfile(traversed_file_info, BytesIO(content)) archive.close() @@ -303,9 +292,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): archive_path = os.path.join(temp_dir, "archive.sd-export") symlink_path = os.path.join(temp_dir, "symlink") - os.system( - f"ln -s {tmp}/unsafe {symlink_path}" - ) # create symlink to "/tmp/unsafe" + os.system(f"ln -s {tmp}/unsafe {symlink_path}") # create symlink to "/tmp/unsafe" with tarfile.open(archive_path, "w:gz") as archive: metadata = { @@ -489,9 +476,7 @@ def test_invalid_encryption_config(capsys): temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write( - '{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}' - ) + f.write('{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}') config = export.Metadata(temp_folder) @@ -505,9 +490,7 @@ def test_valid_encryption_config(capsys): temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write( - '{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}' - ) + f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') config = export.Metadata(temp_folder) From f7442aea66f5d2a8bbf6cdb983ddc8828d21e916 Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 28 Sep 2022 16:52:57 -0700 Subject: [PATCH 535/751] Use Commands to start export Services. Refactor test suite to match new export and print services and CLI wrapper. --- securedrop_export/archive.py | 65 +++++--- securedrop_export/disk/cli.py | 55 +++---- securedrop_export/disk/new_service.py | 127 +++++++++++++++ securedrop_export/disk/new_status.py | 20 +++ securedrop_export/disk/service.py | 78 +++++++--- securedrop_export/disk/status.py | 13 +- securedrop_export/entrypoint.py | 10 +- securedrop_export/enums.py | 11 -- securedrop_export/exceptions.py | 17 +- securedrop_export/main.py | 181 ++++++++++++++++------ securedrop_export/print/service.py | 77 ++++----- securedrop_export/print/status.py | 7 +- securedrop_export/utils.py | 51 ++++-- tests/disk/test_actions.py | 149 ------------------ tests/disk/test_cli.py | 32 ++-- tests/disk/test_service.py | 137 ++++++++++++++++ tests/print/test_actions.py | 134 ---------------- tests/print/test_service.py | 130 ++++++++++++++++ tests/{test_export.py => test_archive.py} | 159 ++++++------------- tests/test_main.py | 64 +++++++- tests/test_util.py | 39 +++++ 21 files changed, 935 insertions(+), 621 deletions(-) create mode 100644 securedrop_export/disk/new_service.py create mode 100644 securedrop_export/disk/new_status.py delete mode 100644 tests/disk/test_actions.py create mode 100644 tests/disk/test_service.py delete mode 100644 tests/print/test_actions.py create mode 100644 tests/print/test_service.py rename tests/{test_export.py => test_archive.py} (78%) create mode 100644 tests/test_util.py diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py index 76e18f61c..f5a780b23 100755 --- a/securedrop_export/archive.py +++ b/securedrop_export/archive.py @@ -10,57 +10,80 @@ import sys import tempfile -from securedrop_export.enums import Command -from securedrop_export.exceptions import ExportStatus +from securedrop_export.exceptions import ExportException +from securedrop_export.enums import Command, ExportEnum from securedrop_export.utils import safe_extractall logger = logging.getLogger(__name__) +class Status(ExportEnum): + ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" + ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" + ERROR_EXTRACTION = "ERROR_EXTRACTION" + class Metadata(object): """ Object to parse, validate and store json metadata from the sd-export archive. + + Create a Metadata object by using the `create_and_validate()` method to + ensure well-formed and valid metadata. """ METADATA_FILE = "metadata.json" - SUPPORTED_ENCRYPTION_METHODS = ["luks"] - def __init__(self, archive_path): - # Calling create_and_validate() is the preferred way to initialize + # Slightly underhanded way of ensuring that a Metadata object is not instantiated + # directly; instead, the create_and_validate() method is used + __key = object() + + + def __init__(self, key, archive_path): + if not key == Metadata.__key: + raise ValueError("Must use create_and_validate() to create Metadata object") + + # Initialize self.metadata_path = os.path.join(archive_path, self.METADATA_FILE) - @staticmethod + + @classmethod def create_and_validate(cls, archive_path) -> 'Metadata': """ Create and validate metadata object. Raise ExportException for invalid metadata. """ - md = cls(archive_path) + md = Metadata(cls.__key, archive_path) + md.validate() + return md + + + def validate(self): + """ + Validate Metadata. + Throw ExportException if invalid state is found. + """ try: - with open(md.metadata_path) as f: + with open(self.metadata_path) as f: logger.info("Parsing archive metadata") json_config = json.loads(f.read()) - md.export_method = json_config.get("device", None) - md.encryption_method = json_config.get("encryption_method", None) - md.encryption_key = json_config.get("encryption_key", None) + self.export_method = json_config.get("device", None) + self.encryption_method = json_config.get("encryption_method", None) + self.encryption_key = json_config.get("encryption_key", None) logger.info( "Exporting to device {} with encryption_method {}".format( - md.export_method, md.encryption_method + self.export_method, self.encryption_method ) ) - # Validate metadata - this will fail if command is not in list of supported commands - md.command = Commmand.value_of(md.export_method) - if md.command is Commmand.EXPORT and not md.encryption_method in md.SUPPORTED_ENCRYPTION_METHODS: - logger.error("Unsuported encryption method") - raise ExportException(ExportStatus.ERROR_ARCHIVE_METADATA) + # Validate metadata - this will fail if command is not in list of supported commands + self.command = Command(self.export_method) + if self.command is Command.EXPORT and not self.encryption_method in self.SUPPORTED_ENCRYPTION_METHODS: + logger.error("Unsuported encryption method") + raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) except Exception as ex: logger.error("Metadata parsing failure") - raise ExportException(ExportStatus.ERROR_METADATA_PARSING) from ex - - return md + raise ExportException(sdstatus=Status.ERROR_METADATA_PARSING) from ex class Archive(object): @@ -79,6 +102,6 @@ def extract_tarball(self): safe_extractall(self.archive, self.tmpdir) except Exception as ex: logger.error("Unable to extract tarball: {}".format(ex)) - raise ExportException(ExportStatus.ERROR_EXTRACTION) from ex + raise ExportException(sdstatus=Status.ERROR_EXTRACTION) from ex \ No newline at end of file diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index 792abe8f7..579a102e5 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -9,9 +9,10 @@ from typing import List, Optional +from securedrop_export.exceptions import ExportException + from .volume import EncryptionScheme, Volume -from .exceptions import ExportException -from .status import Status +from .new_status import Status logger = logging.getLogger(__name__) @@ -45,7 +46,7 @@ def get_connected_devices(self) -> List[str]: attached_devices = [x.decode("utf8").split()[0] for x in command_output] except subprocess.CalledProcessError as ex: - raise ExportException(status=Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex # Determine which are USBs by selecting those block devices that are removable disks. usb_devices = [] @@ -89,7 +90,7 @@ def get_partitioned_device(self, blkid: str) -> str: logger.error( f"Multiple partitions not supported (found {partition_count} partitions on {blkid}" ) - raise ExportException(status=Status.INVALID_DEVICE_DETECTED) + raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted if partition_count == 1: @@ -99,11 +100,11 @@ def get_partitioned_device(self, blkid: str) -> str: else: # lsblk did not return output we could process - raise ExportException(status=Status.DEVICE_ERROR) + raise ExportException(sdstatus=Status.DEVICE_ERROR) except subprocess.CalledProcessError as ex: logger.error(f"Error checking block deivce {blkid}") - raise ExportException(status=Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def is_luks_volume(self, device: str) -> bool: """ @@ -146,9 +147,9 @@ def _get_luks_name_from_headers(self, device: str) -> str: logger.error( f"Failed to dump LUKS headers; {device} may not be correctly formatted" ) - raise ExportException(status=Status.INVALID_DEVICE_DETECTED) + raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) except subprocess.CalledProcessError as ex: - raise ExportException(Status=Status.DEVICE_ERROR) from ex + raise ExportException(sdtatus=Status.DEVICE_ERROR) from ex def get_luks_volume(self, device: str) -> Volume: """ @@ -193,7 +194,7 @@ def unlock_luks_volume(self, volume: Volume, decryption_key: str) -> Volume: """ if not volume.encryption is EncryptionScheme.LUKS: logger.error("Must call unlock_luks_volume() on LUKS-encrypted device") - raise ExportException(Status.DEVICE_ERROR) + raise ExportException(sdstatus=Status.DEVICE_ERROR) try: logger.debug("Unlocking luks volume {}".format(volume.device_name)) @@ -213,10 +214,10 @@ def unlock_luks_volume(self, volume: Volume, decryption_key: str) -> Volume: ) else: logger.error("Bad volume passphrase") - raise ExportException(Status.ERROR_UNLOCK_LUKS) + raise ExportException(sdstatus=Status.ERROR_UNLOCK_LUKS) except subprocess.CalledProcessError as ex: - raise ExportException(Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def _get_mountpoint(self, volume: Volume) -> Optional[str]: """ @@ -231,7 +232,7 @@ def _get_mountpoint(self, volume: Volume) -> Optional[str]: except subprocess.CalledProcessError as ex: logger.error(ex) - raise ExportException(Status.ERROR_MOUNT) from ex + raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex def mount_volume(self, volume: Volume) -> Volume: """ @@ -243,7 +244,7 @@ def mount_volume(self, volume: Volume) -> Volume: Raises ExportException if errors are encountered during mounting. """ if not volume.unlocked: - raise ExportException("Unlock volume before mounting") + raise ExportException(sdstatus=Status.ERROR_MOUNT) mountpoint = self._get_mountpoint(volume) @@ -256,26 +257,26 @@ def mount_volume(self, volume: Volume) -> Volume: volume.mountpoint = mountpoint else: - if not os.path.exists(_DEFAULT_MOUNTPOINT): + if not os.path.exists(self._DEFAULT_MOUNTPOINT): try: - subprocess.check_call(["sudo", "mkdir", _DEFAULT_MOUNTPOINT]) + subprocess.check_call(["sudo", "mkdir", self._DEFAULT_MOUNTPOINT]) except subprocess.CalledProcessError as ex: logger.error(ex) - raise ExportException(Status.ERROR_MOUNT) from ex + raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex # Mount device /dev/mapper/{mapped_name} at /media/usb/ - mapped_device_path = os.path.join(device.MAPPED_VOLUME_PREFIX, device.mapped_name) + mapped_device_path = os.path.join(volume.MAPPED_VOLUME_PREFIX, volume.mapped_name) try: - logger.debug(f"Mounting volume {volume.device_name} at {_DEFAULT_MOUNTPOINT}") - subprocess.check_call(["sudo", "mount", mapped_device_path, _DEFAULT_MOUNTPOINT]) - subprocess.check_call(["sudo", "chown", "-R", "user:user", _DEFAULT_MOUNTPOINT]) + logger.debug(f"Mounting volume {volume.device_name} at {self._DEFAULT_MOUNTPOINT}") + subprocess.check_call(["sudo", "mount", mapped_device_path, self._DEFAULT_MOUNTPOINT]) + subprocess.check_call(["sudo", "chown", "-R", "user:user", self._DEFAULT_MOUNTPOINT]) - volume.mountpoint = _DEFAULT_MOUNTPOINT + volume.mountpoint = self._DEFAULT_MOUNTPOINT except subprocess.CalledProcessError as ex: logger.error(ex) - raise ExportException(Status.ERROR_MOUNT) from ex + raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex return volume @@ -302,7 +303,7 @@ def write_data_to_device( logger.info("File copied successfully to {}".format(submission_target_dirname)) except (subprocess.CalledProcessError, OSError) as ex: - raise ExportException(status=Status.ERROR_EXPORT) from ex + raise ExportException(sdstatus=Status.ERROR_EXPORT) from ex finally: self.cleanup_drive_and_tmpdir(device, submission_tmpdir) @@ -325,7 +326,7 @@ def cleanup_drive_and_tmpdir(self, volume: Volume, submission_tmpdir: str): except subprocess.CalledProcessError as ex: logger.error("Error syncing filesystem") - raise ExportException(Status.ERROR_EXPORT_CLEANUP) from ex + raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex def _unmount_volume(self, volume: Volume) -> Volume: """ @@ -339,7 +340,7 @@ def _unmount_volume(self, volume: Volume) -> Volume: except subprocess.CalledProcessError as ex: logger.error("Error unmounting device") - raise ExportException(Status.ERROR_MOUNT) from ex + raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex else: logger.info("Mountpoint does not exist; volume was already unmounted") @@ -356,7 +357,7 @@ def _close_luks_volume(self, unlocked_device: Volume) -> None: except subprocess.CalledProcessError as ex: logger.error("Error closing device") - raise ExportException(Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def _remove_temp_directory(self, tmpdir: str): """ @@ -367,7 +368,7 @@ def _remove_temp_directory(self, tmpdir: str): subprocess.check_call(["rm", "-rf", tmpdir]) except subprocess.CalledProcessError as ex: logger.error("Error removing temporary directory") - raise ExportException(Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def write_status(self, status: Status): """ diff --git a/securedrop_export/disk/new_service.py b/securedrop_export/disk/new_service.py new file mode 100644 index 000000000..1084f751a --- /dev/null +++ b/securedrop_export/disk/new_service.py @@ -0,0 +1,127 @@ +import logging +import os +import subprocess +import sys + +from enum import Enum + +from typing import List + +from securedrop_export.archive import Archive + +from .cli import CLI +from .status import Status +from .volume import EncryptionScheme, Volume +from securedrop_export.exceptions import ExportException + + +logger = logging.getLogger(__name__) + + +class Service: + """ + Checks that can be performed against the device(s). + This is the "API" portion of the export workflow. + """ + + def __init__(self, cli: CLI): + self.cli = cli + + def run(self, arg: str) -> Status: + """ + Run export actions. + """ + + def scan_all_devices(self) -> Status: + """ + Check all connected devices and return current device + status. + """ + try: + all_devices = self.cli.get_connected_devices() + number_devices = len(all_devices) + + if number_devices == 0: + return Status.NO_DEVICE_DETECTED + elif number_devices > 1: + return Status.MULTI_DEVICE_DETECTED + else: + return scan_single_device(all_devices[0]) + + except ExportException: + logger.error(ex) + return Status.DEVICE_ERROR # Could not assess devices + + def scan_single_device(self, str: blkid) -> Status: + """ + Given a string representing a single block device, see if it + is a suitable export target and return information about its state. + """ + try: + target = self.cli.get_partitioned_device(blkid) + + # See if it's a LUKS drive + if self.cli.is_luks_volume(target): + + # Returns Volume or throws ExportException + self.volume = self.cli.get_luks_volume(target) + + # See if it's unlocked and mounted + if self.volume.writable: + logger.debug("LUKS device is already mounted") + return Status.DEVICE_WRITABLE + else: + # Prompt for passphrase + return Status.DEVICE_LOCKED + else: + # Might be VeraCrypt, might be madness + logger.info("LUKS drive not found") + + # Currently we don't support anything other than LUKS. + # In future, we will support TC/VC volumes as well + return Status.INVALID_DEVICE_DETECTED + + except ExportException as ex: + logger.error(ex) + if ex.sdstatus: + return ex.sdstatus + else: + return Status.DEVICE_ERROR + + def unlock_device(self, passphrase: str, volume: Volume) -> Status: + """ + Given provided passphrase, unlock target volume. Currently, + LUKS volumes are supported. + """ + if volume: + try: + self.volume = self.cli.unlock_luks_volume(volume, passphrase) + + if volume.writable: + return Status.DEVICE_WRITABLE + else: + return Status.ERROR_UNLOCK_LUKS + + except ExportException as ex: + logger.error(ex) + return Status.ERROR_UNLOCK_LUKS + else: + # Trying to unlock devices before having an active device + logger.warning("Tried to unlock_device but no current volume detected.") + return Status.NO_DEVICE_DETECTED + + def write_to_device(self, volume: Volume, data: Archive) -> Status: + """ + Export data to volume. CLI unmounts and locks volume on completion, even + if export was unsuccessful. + """ + try: + self.cli.write_data_to_device(data.tmpdir, data.target_dirname, volume) + return Status.SUCCESS_EXPORT + + except ExportException as ex: + logger.error(ex) + if ex.sdstatus: + return ex.sdstatus + else: + return Status.ERROR_EXPORT diff --git a/securedrop_export/disk/new_status.py b/securedrop_export/disk/new_status.py new file mode 100644 index 000000000..d6f8dadda --- /dev/null +++ b/securedrop_export/disk/new_status.py @@ -0,0 +1,20 @@ +from securedrop_export.enums import ExportEnum + +class Status(ExportEnum): + + NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" + INVALID_DEVICE_DETECTED = "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc + MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported + + DEVICE_LOCKED = "DEVICE_LOCKED" # One device detected, and it's locked + DEVICE_WRITABLE = "DEVICE_WRITABLE" # One device detected, and it's unlocked (and mounted) + + ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" + ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" + ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted + + SUCCESS_EXPORT = "SUCCESS_EXPORT" + ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk + ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" # If export succeeds but drives were not properly unmounted + + DEVICE_ERROR = "DEVICE_ERROR" # Something went wrong while trying to check the device diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index 23fb10145..56531aa13 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -5,22 +5,23 @@ from typing import List -from securedrop_export.export import Archive +from securedrop_export.archive import Archive from securedrop_export.exceptions import ExportException from .cli import CLI from .status import Status +from .new_status import Status as NewStatus logger = logging.getLogger(__name__) -class Service(): +class Service: - def __init__(self, submission): + def __init__(self, submission, cli=None): self.submission = submission - self.cli = CLI() + self.cli = cli or CLI() - def usb_test(self): + def check_connected_devices(self) -> Status: """ Check if single USB is inserted. """ @@ -32,17 +33,18 @@ def usb_test(self): num_devices = len(all_devices) if num_devices == 0: - raise ExportException(Status.LEGACY_USB_NOT_CONNECTED) + raise ExportException(sdstatus=Status.LEGACY_USB_NOT_CONNECTED) elif num_devices == 1: - status = Status.LEGACY_USB_CONNECTED + return Status.LEGACY_USB_CONNECTED elif num_devices > 1: - raise ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - except ExportException: - raise + except ExportException as ex: + # Use legacy status instead of new status values + raise ExportException(sdstatus=Status.LEGACY_ERROR_GENERIC) from ex - def disk_format_test(self): + def check_disk_format(self) -> Status: """ Check if volume is correctly formatted for export. """ @@ -51,16 +53,25 @@ def disk_format_test(self): if len(all_devices) == 1: device = self.cli.get_partitioned_device(all_devices) - if self.cli.is_luks_volume(device): - status = Status.LEGACY_USB_ENCRYPTED - else: - raise ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + if not self.cli.is_luks_volume(device): + raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + # We can support checking if a drive is already unlocked, but for + # backwards compatibility, this is the only expected status + # at this stage + return Status.LEGACY_USB_ENCRYPTED - except ExportException: - raise + except ExportException as ex: + # Return legacy status values for now for ongoing client compatibility + if ex.sdstatus in [s for s in NewStatus]: + status = self._legacy_status(ex.sdstatus) + raise ExportException(sdstatus=status) + elif ex.sdstatus: + raise + else: + raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - def export(self): + def export(self) -> Status: """ Export all files to target device. """ @@ -83,12 +94,37 @@ def export(self): logger.debug(f"Export submission to {mounted.mountpoint}") self.cli.write_data_to_device(self.submission.tmpdir, self.submission.target_dirname, mounted) + return Status.SUCCESS_EXPORT else: - # Another kind of drive: VeraCrypt/TC, or unsupported + # Another kind of drive: VeraCrypt/TC, or unsupported. + # For now this is an error--in future there will be support + # for additional encryption formats logger.error(f"Export failed because {device} is not supported") - raise ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) except ExportException as ex: - raise + # Return legacy status values for now for ongoing client compatibility + if ex.sdstatus in [s for s in NewStatus]: + status = self._legacy_status(ex.sdstatus) + raise ExportException(sdstatus=status) + elif ex.sdstatus: + raise + else: + raise ExportException(sdstatus=Status.LEGACY_ERROR_GENERIC) + + def _legacy_status(self, status: NewStatus): + """ + Backwards-compatibility - status values that client (@0.7.0) is expecting. + """ + if status is NewStatus.ERROR_MOUNT: + return Status.LEGACY_ERROR_USB_MOUNT + elif status in [NewStatus.ERROR_EXPORT, NewStatus.ERROR_EXPORT_CLEANUP]: + return Status.LEGACY_ERROR_USB_WRITE + elif status in [NewStatus.ERROR_UNLOCK_LUKS, NewStatus.ERROR_UNLOCK_GENERIC]: + return Status.LEGACY_USB_BAD_PASSPHRASE + elif status in [NewStatus.INVALID_DEVICE_DETECTED, NewStatus.MULTI_DEVICE_DETECTED]: + return Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + else: + return Status.LEGACY_ERROR_GENERIC diff --git a/securedrop_export/disk/status.py b/securedrop_export/disk/status.py index d8472642b..e4be49d36 100644 --- a/securedrop_export/disk/status.py +++ b/securedrop_export/disk/status.py @@ -1,22 +1,21 @@ -from securedrop_export.exceptions import ExportEnum +from securedrop_export.enums import ExportEnum class Status(ExportEnum): - LEGACY_ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" - LEGACY_ERROR_EXTRACTION = "ERROR_EXTRACTION" - LEGACY_ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" - LEGACY_ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" LEGACY_ERROR_GENERIC = "ERROR_GENERIC" # Legacy USB preflight related - LEGACY_USB_CONNECTED = "USB_CONNECTED" + LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" # Legacy USB Disk preflight related errors - LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" + LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" # Legacy Disk export errors LEGACY_USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" LEGACY_ERROR_USB_MOUNT = "ERROR_USB_MOUNT" LEGACY_ERROR_USB_WRITE = "ERROR_USB_WRITE" + + # New + SUCCESS_EXPORT = "SUCCESS_EXPORT" \ No newline at end of file diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py index 5ed1dd7f4..4ae235d1f 100755 --- a/securedrop_export/entrypoint.py +++ b/securedrop_export/entrypoint.py @@ -6,7 +6,7 @@ from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_export import __version__ -from securedrop_export import export +from securedrop_export.archive import Archive from securedrop_export import main from securedrop_export.utils import safe_mkdir @@ -57,17 +57,17 @@ def start(): configure_logging() except Exception: msg = "ERROR_LOGGING" - export.SDExport.exit_gracefully(msg) + main._exit_gracefully(None, msg) logger.info("Starting SecureDrop Export {}".format(__version__)) - my_sub = export.SDExport(sys.argv[1], CONFIG_PATH) + my_sub = Archive(sys.argv[1], CONFIG_PATH) try: # Halt immediately if target file is absent if not os.path.exists(my_sub.archive): logger.info("Archive is not found {}.".format(my_sub.archive)) msg = "ERROR_FILE_NOT_FOUND" - my_sub.exit_gracefully(msg) + main._exit_gracefully(my_sub, msg) main.__main__(my_sub) # Delete extracted achive from tempfile shutil.rmtree(my_sub.tmpdir) @@ -76,4 +76,4 @@ def start(): # the file with another application logger.error(e) msg = "ERROR_GENERIC" - my_sub.exit_gracefully(msg) + main._exit_gracefully(my_sub, msg) diff --git a/securedrop_export/enums.py b/securedrop_export/enums.py index 7396b3adf..26d7a9cb1 100644 --- a/securedrop_export/enums.py +++ b/securedrop_export/enums.py @@ -1,20 +1,9 @@ from enum import Enum -from typing import TypeVar, Type - -T = TypeVar('T', bound=ExportEnum) class ExportEnum(Enum): """ Parent class for export and print statuses. """ - @classmethod - def value_of(cls: Type[T], target: str) -> T: - for key, value in cls.__members__.items(): - if key == target: - return value - # Don't print the value since we don't know what it is - raise ValueError("No valid entry found for provided value") - class Command(ExportEnum): """ diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index 282844b31..b13e79d36 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -1,5 +1,4 @@ import logging - from typing import Optional from .enums import ExportEnum @@ -10,22 +9,14 @@ class ExportException(Exception): """ Base class for exceptions encountered during export. + In order to make use of additional attributes `sdstatus` and `sderror`, + pass them as keyword arguments when raising ExportException. """ def __init__(self, *args, **kwargs): super().__init__(*args) - self._status = kwargs.get("status") - - @property - def status(self) -> Optional[ExportEnum]: - try: - return ExportEnum.value_of(self._status) - except ValueError: - logger.error( - "Unexpected value passed to ExportException (ExportEnum is required)." - ) - pass # Don't return a status - + self.sdstatus = kwargs.get("sdstatus") + self.sderror = kwargs.get("sderror") class TimeoutException(ExportException): pass diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 27600f87d..3b198187f 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -1,88 +1,180 @@ +import os +import shutil +import platform import logging import sys +import subprocess -from securedrop_export import export -from securedrop_export.exceptions import Command, ExportStatus, PrintStatus - -from securedrop_export.disk.actions import ( - DiskTestAction, - DiskExportAction, - USBTestAction, -) +from securedrop_export.archive import Archive, Metadata +from securedrop_export.enums import Command, ExportEnum from securedrop_export.disk.service import Service as ExportService from securedrop_export.print.service import Service as PrintService +from logging.handlers import TimedRotatingFileHandler, SysLogHandler +from securedrop_export import __version__ +from securedrop_export.utils import safe_mkdir + +CONFIG_PATH = "/etc/sd-export-config.json" +DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") +LOG_DIR_NAME = "logs" +EXPORT_LOG_FILENAME = "export.log" + logger = logging.getLogger(__name__) +class Status(ExportEnum): + """ + Errors initializing export + """ + ERROR_LOGGING = "ERROR_LOGGING" + ERROR_GENERIC = "ERROR_GENERIC" + ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" -def __main__(submission): - submission.extract_tarball() +def start(): try: - submission.archive_metadata = export.Metadata(submission.tmpdir) + configure_logging() except Exception: - exit_gracefully(submission, ExportStatus.ERROR_METADATA_PARSING) + _exit_gracefully(submission=None, status=Status.ERROR_LOGGING) - if not submission.archive_metadata.is_valid(): - exit_gracefully(submission, ExportStatus.ERROR_ARCHIVE_METADATA) + logger.info("Starting SecureDrop Export {}".format(__version__)) + data = Archive(sys.argv[1], CONFIG_PATH) try: - command = Command.value_of(submission.archive_metadata.export_method) + # Halt immediately if target file is absent + if not os.path.exists(data.archive): + logger.info("Archive is not found {}.".format(data.archive)) + _exit_gracefully(data, Status.ERROR_FILE_NOT_FOUND) + + # The main event. Extract archive and either print or export to disk. + # Includes cleanup logic, which removes any temporary directories associated with + # the archive. + _extract_and_run(data) + + except Exception as e: + _exit_gracefully(data, Status.ERROR_GENERIC, e.output) + + +def _configure_logging(): + """ + All logging related settings are set up by this function. + """ + safe_mkdir(DEFAULT_HOME) + safe_mkdir(DEFAULT_HOME, LOG_DIR_NAME) + + log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) + + # set logging format + log_fmt = "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" + formatter = logging.Formatter(log_fmt) + + handler = TimedRotatingFileHandler(log_file) + handler.setFormatter(formatter) + + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" - if command is Command.START_VM: - # No further operations - exit_gracefully(submission, command) + sysloghandler = SysLogHandler(address=syslog_file) + sysloghandler.setFormatter(formatter) + handler.setLevel(logging.DEBUG) + + # set up primary log + log = logging.getLogger() + log.setLevel(logging.DEBUG) + log.addHandler(handler) + # add the second logger + log.addHandler(sysloghandler) + + +def _extract_and_run(submission: Archive): + """ + Extract tarball and metadata and run appropriate command + based on metadata instruction. + """ + status = Status.ERROR_GENERIC + stacktrace = None + + try: + submission.extract_tarball() + + # Validates metadata and ensures requested action is supported + submission.archive_metadata = Metadata.create_and_validate(submission.tmpdir) + + # If we just wanted to start the VM, our work here is done + if submission.archive_metadata.command is Command.START_VM: + _exit_gracefully(submission) else: - status = None - try: - if command in Command.printer_actions(): - service = ExportService(submission) - status = service.run(command) + status = _start_service(submission, command) + + except ExportException as ex: + status = ex.sdstatus + stacktrace = ex.output - elif command in Command.export_actions(): - service = PrintService(submission) - status = service.run(command) + except Exception as exc: + # All exceptions are wrapped in ExportException, but we are being cautious + logger.error("Encountered exception during export, exiting") + status = Status.ERROR_GENERIC + stacktrace = exc.output + + finally: + _exit_gracefully(submission, status, stacktrace) - except ExportException as ex: - if ex.status: - status = ex.status - finally: - exit_gracefully(submission, status) +def _start_service(submission: Archive, cmd: Command) -> Status: + """ + Start print or export routine. + """ + if cmd in Command.printer_actions(): + service = PrintService(submission) - except ValueError: - # An unsupported command was sent from the calling VM - logger.error("Unsuported command, exiting") - exit_gracefully(submission) + if cmd is Commmand.PRINTER: + return service.print() + elif cmd is Commmand.PRINTER_TEST: + return service.printer_preflight() + elif cmd is Commmand.PRINTER_TEST: + return service.printer_test() + elif cmd in Command.export_actions(): + service = ExportService(submission) -def exit_gracefully(submission: SDExport, status: Status=None, e=None): + if cmd is Commmand.EXPORT: + return service.export() + elif cmd is Commmand.CHECK_USBS: + return service.check_connected_devices() + elif cmd is Commmand.CHECK_VOLUME: + return service.checK_disk_format() + + +def _exit_gracefully(submission: Archive, status: Status=None, e=None): """ Utility to print error messages, mostly used during debugging, then exits successfully despite the error. Always exits 0, since non-zero exit values will cause system to try alternative solutions for mimetype handling, which we want to avoid. """ - logger.info("Exiting with message: {}".format(msg)) + logger.info(f"Exiting with status: {status.value}") if e: logger.error("Captured exception output: {}".format(e.output)) try: # If the file archive was extracted, delete before returning - if os.path.isdir(submission.tmpdir): + if submission and os.path.isdir(submission.tmpdir): shutil.rmtree(submission.tmpdir) # Do this after deletion to avoid giving the client two error messages in case of the # block above failing - write_status(status) + _write_status(status) except Exception as ex: logger.error("Unhandled exception: {}".format(ex)) - write_status(ExportStatus.LEGACY_ERROR_GENERIC) - # exit with 0 return code otherwise the os will attempt to open - # the file with another application - sys.exit(0) + _write_status(Status.ERROR_GENERIC) + finally: + # exit with 0 return code otherwise the os will attempt to open + # the file with another application + sys.exit(0) -def _write_status(self, status: Status): +def _write_status(status: Status): """ Write string to stderr. """ @@ -91,3 +183,4 @@ def _write_status(self, status: Status): sys.stderr.write("\n") else: logger.info("No status value supplied") + diff --git a/securedrop_export/print/service.py b/securedrop_export/print/service.py index 98af6a0b1..f36045c1d 100644 --- a/securedrop_export/print/service.py +++ b/securedrop_export/print/service.py @@ -3,9 +3,9 @@ import signal import subprocess import time -from enum import Enum -from .exceptions import ExportStatus, handler, TimeoutException +from securedrop_export.exceptions import handler, TimeoutException, ExportException +from securedrop_export.utils import safe_check_call from .status import Status PRINTER_NAME = "sdw-printer" @@ -18,7 +18,7 @@ logger = logging.getLogger(__name__) -class Service(): +class Service: """ Printer service """ @@ -28,7 +28,7 @@ def __init__(self, submission): self.printer_name = PRINTER_NAME self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT - def print(self): + def print(self) -> Status: """ Routine to print all files. Throws ExportException if an error is encountered. @@ -36,8 +36,9 @@ def print(self): logger.info("Printing all files from archive") self._check_printer_setup() self._print_all_files() + return Status.PRINT_SUCCESS - def printer_preflight(self): + def printer_preflight(self) -> Status: """ Routine to perform preflight printer testing. @@ -45,8 +46,9 @@ def printer_preflight(self): """ logger.info("Running printer preflight") self._check_printer_setup() + return Status.PREFLIGHT_SUCCESS - def printer_test(self): + def printer_test(self) -> Status: """ Routine to print a test page. @@ -55,6 +57,7 @@ def printer_test(self): logger.info("Printing test page") self._check_printer_setup() self._print_test_page() + return Status.PRINT_SUCCESS def _wait_for_print(self): """ @@ -74,10 +77,10 @@ def _wait_for_print(self): else: time.sleep(5) except subprocess.CalledProcessError: - raise ExportException(Status.ERROR_PRINT) + raise ExportException(sdstatus=Status.ERROR_PRINT) except TimeoutException: logger.error("Timeout waiting for printer {}".format(self.printer_name)) - raise ExportException(Status.ERROR_PRINT) + raise ExportException(sdstatus=Status.ERROR_PRINT) return True def _check_printer_setup(self) -> None: @@ -91,25 +94,25 @@ def _check_printer_setup(self) -> None: printers = [x for x in output.decode("utf-8").split() if "usb://" in x] if not printers: logger.info("No usb printers connected") - raise ExportException(Status.ERROR_PRINTER_NOT_FOUND) + raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_FOUND) supported_printers = [ p for p in printers if any(sub in p for sub in ("Brother", "LaserJet")) ] if not supported_printers: logger.info("{} are unsupported printers".format(printers)) - raise ExportException(Status.ERROR_PRINTER_NOT_SUPPORTED) + raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) if len(supported_printers) > 1: logger.info("Too many usb printers connected") - raise ExportException(Status.ERROR_MULTIPLE_PRINTERS_FOUND) + raise ExportException(sdstatus=Status.ERROR_MULTIPLE_PRINTERS_FOUND) printer_uri = printers[0] printer_ppd = self._install_printer_ppd(printer_uri) self.setup_printer(printer_uri, printer_ppd) except subprocess.CalledProcessError as e: logger.error(e) - raise ExportException(Status.ERROR_GENERIC) + raise ExportException(sdstatus=Status.ERROR_GENERIC) def _get_printer_uri(self) -> str: """ @@ -121,7 +124,7 @@ def _get_printer_uri(self) -> str: try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError: - raise ExportException(Status.ERROR_PRINTER_URI) + raise ExportException(sdstatus=Status.ERROR_PRINTER_URI) # fetch the usb printer uri for line in output.split(): @@ -133,19 +136,19 @@ def _get_printer_uri(self) -> str: if printer_uri == "": # No usb printer is connected logger.info("No usb printers connected") - raise ExportException(Status.ERROR_PRINTER_NOT_FOUND) + raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_FOUND) elif not any(x in printer_uri for x in ("Brother", "LaserJet")): # printer url is a make that is unsupported logger.info("Printer {} is unsupported".format(printer_uri)) - raise ExportException(Status.ERROR_PRINTER_NOT_SUPPORTED) + raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) logger.info("Printer {} is supported".format(printer_uri)) return printer_uri - def install_printer_ppd(self, uri): + def _install_printer_ppd(self, uri): if not any(x in uri for x in ("Brother", "LaserJet")): logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) - raise ExportException(Status.ERROR_PRINTER_NOT_SUPPORTED) + raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) return if "Brother" in uri: @@ -158,7 +161,7 @@ def install_printer_ppd(self, uri): # Compile and install drivers that are not already installed if not os.path.exists(printer_ppd): logger.info("Installing printer drivers") - self._safe_check_call( + safe_check_call( command=[ "sudo", "ppdc", @@ -166,7 +169,7 @@ def install_printer_ppd(self, uri): "-d", "/usr/share/cups/model/", ], - error_message=Status.ERROR_PRINTER_DRIVER_UNAVAILABLE.value, + error_status=Status.ERROR_PRINTER_DRIVER_UNAVAILABLE, ignore_stderr_startswith=b"ppdc: Warning", ) @@ -175,7 +178,7 @@ def install_printer_ppd(self, uri): def _setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin logger.info("Setting up printer {}".format(self.printer_name)) - self._safe_check_call( + safe_check_call( command=[ "sudo", "lpadmin", @@ -189,7 +192,7 @@ def _setup_printer(self, printer_uri, printer_ppd): "-u", "allow:user", ], - error_message=Status.ERROR_PRINTER_INSTALL.value, + error_status=Status.ERROR_PRINTER_INSTALL, ignore_stderr_startswith=b"lpadmin: Printer drivers", ) @@ -228,41 +231,21 @@ def _is_open_office_file(self, filename): def _print_file(self, file_to_print): # If the file to print is an (open)office document, we need to call unoconf to # convert the file to pdf as printer drivers do not support this format - if self.is_open_office_file(file_to_print): + if self._is_open_office_file(file_to_print): logger.info("Converting Office document to pdf") folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) - self.safe_check_call( + safe_check_call( command=["unoconv", "-o", converted_path, file_to_print], - error_message=Status.ERROR_PRINT.value, + error_status=Status.ERROR_PRINT, ) file_to_print = converted_path logger.info("Sending file to printer {}".format(self.printer_name)) - - # todo - self._safe_check_call( + + safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], - error_message=Status.ERROR_PRINT.value, + error_status=Status.ERROR_PRINT, ) - - def _safe_check_call(self, command: str, status: Status, ignore_stderr_startswith=None): - """ - Safely wrap subprocess.check_output to ensure we always return 0 and - log the error messages - """ - try: - err = subprocess.run(command, check=True, capture_output=True).stderr - # ppdc and lpadmin may emit warnings we are aware of which should not be treated as - # user facing errors - if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): - logger.info("Encountered warning: {}".format(err.decode("utf-8"))) - elif err == b"": - # Nothing on stderr and returncode is 0, we're good - pass - else: - raise ExportException(status=status, e=err) - except subprocess.CalledProcessError as ex: - raise ExportException(status=status, e=ex.output) diff --git a/securedrop_export/print/status.py b/securedrop_export/print/status.py index 86e3bf7ff..a8c5221de 100644 --- a/securedrop_export/print/status.py +++ b/securedrop_export/print/status.py @@ -1,4 +1,4 @@ -from securedrop_export.exceptions import ExportEnum +from securedrop_export.enums import ExportEnum class Status(ExportEnum): @@ -11,3 +11,8 @@ class Status(ExportEnum): # Printer export errors ERROR_PRINT = "ERROR_PRINT" + + # New + PREFLIGHT_SUCCESS = "PRINTER_PREFLIGHT_SUCCESS" + TEST_SUCCESS = "PRINTER_TEST_SUCCESS" + PRINT_SUCCESS = "PRINTER_SUCCESS" diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py index a60eca09f..9de1cf979 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/utils.py @@ -2,6 +2,14 @@ import tarfile from pathlib import Path from typing import Optional, Union +import subprocess +import logging + +from securedrop_export.enums import ExportEnum as Status +from securedrop_export.exceptions import ExportException + + +logger = logging.getLogger(__name__) def safe_mkdir( @@ -23,10 +31,10 @@ def safe_mkdir( if not base_path.is_absolute(): raise ValueError(f"Base directory '{base_path}' must be an absolute path") - check_path_traversal(base_path) + _check_path_traversal(base_path) if relative_path: - check_path_traversal(relative_path) + _check_path_traversal(relative_path) full_path = base_path.joinpath(relative_path) else: full_path = base_path @@ -35,7 +43,7 @@ def safe_mkdir( # # Note: We do not use parents=True because the parent directories will not be created with the # specified mode. Parents are created using system default permissions, which we modify to be - # 700 via os.umask in the SDExport contructor. Creating directories one-by-one with mode=0o0700 + # 700 via os.umask in the Archive contructor. Creating directories one-by-one with mode=0o0700 # is not necessary but adds defense in depth. relative_path = relative_filepath(full_path, base_path) for parent in reversed(relative_path.parents): @@ -45,7 +53,7 @@ def safe_mkdir( full_path.mkdir(mode=0o0700, exist_ok=True) # Check permissions after creating the directories - check_all_permissions(relative_path, base_path) + _check_all_permissions(relative_path, base_path) def safe_extractall(archive_file_path: str, dest_path: str) -> None: @@ -65,14 +73,14 @@ def safe_extractall(archive_file_path: str, dest_path: str) -> None: for file_info in tar.getmembers(): file_info.mode = 0o700 if file_info.isdir() else 0o600 - check_path_traversal(file_info.name) + _check_path_traversal(file_info.name) # If the path is relative then we don't need to check that it resolves to dest_path if Path(file_info.name).is_absolute(): relative_filepath(file_info.name, dest_path) if file_info.islnk() or file_info.issym(): - check_path_traversal(file_info.linkname) + _check_path_traversal(file_info.linkname) # If the path is relative then we don't need to check that it resolves to dest_path if Path(file_info.linkname).is_absolute(): relative_filepath(file_info.linkname, dest_path) @@ -92,7 +100,7 @@ def relative_filepath(filepath: Union[str, Path], base_dir: Union[str, Path]) -> return Path(filepath).resolve().relative_to(base_dir) -def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: +def _check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: """ Raise ValueError if filename_or_filepath does any path traversal. This works on filenames, relative paths, and absolute paths. @@ -116,7 +124,7 @@ def check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: raise ValueError(f"Unsafe file or directory name: '{filename_or_filepath}'") -def check_all_permissions(path: Union[str, Path], base_path: Union[str, Path]) -> None: +def _check_all_permissions(path: Union[str, Path], base_path: Union[str, Path]) -> None: """ Check that the permissions of each directory between base_path and path are set to 700. """ @@ -126,16 +134,16 @@ def check_all_permissions(path: Union[str, Path], base_path: Union[str, Path]) - return Path(full_path).chmod(0o700) - check_dir_permissions(full_path) + _check_dir_permissions(full_path) relative_path = relative_filepath(full_path, base_path) for parent in relative_path.parents: full_path = base_path.joinpath(parent) Path(full_path).chmod(0o700) - check_dir_permissions(str(full_path)) + _check_dir_permissions(str(full_path)) -def check_dir_permissions(dir_path: Union[str, Path]) -> None: +def _check_dir_permissions(dir_path: Union[str, Path]) -> None: """ Check that a directory has ``700`` as the final 3 bytes. Raises a ``RuntimeError`` otherwise. """ @@ -144,3 +152,24 @@ def check_dir_permissions(dir_path: Union[str, Path]) -> None: masked = stat_res & 0o777 if masked & 0o077: raise RuntimeError("Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path)) + + + +def safe_check_call(command: str, error_status: Status, ignore_stderr_startswith=None): + """ + Wrap subprocess.check_output to ensure we wrap CalledProcessError and return + our own exception, and log the error messages. + """ + try: + err = subprocess.run(command, check=True, capture_output=True).stderr + # ppdc and lpadmin may emit warnings we are aware of which should not be treated as + # user facing errors + if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): + logger.info("Encountered warning: {}".format(err.decode("utf-8"))) + elif err == b"": + # Nothing on stderr and returncode is 0, we're good + pass + else: + raise ExportException(sdstatus=error_status, sderror=err) + except subprocess.CalledProcessError as ex: + raise ExportException(sdstatus=error_status, sderror=ex.output) \ No newline at end of file diff --git a/tests/disk/test_actions.py b/tests/disk/test_actions.py deleted file mode 100644 index 099836773..000000000 --- a/tests/disk/test_actions.py +++ /dev/null @@ -1,149 +0,0 @@ -import pytest -from unittest import mock - -import os -import pytest -import sys -import tempfile - -import subprocess -from subprocess import CalledProcessError - -from securedrop_export.disk.exceptions import ExportException -from securedrop_export.disk.status import Status - -from securedrop_export import export -from securedrop_export.disk.actions import DiskExportAction, DiskTestAction, USBTestAction - -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") -SAMPLE_OUTPUT_LSBLK_NO_PART = b"disk\ncrypt" # noqa -SAMPLE_OUTPUT_LSBLK_ONE_PART = b"disk\npart\ncrypt" # noqa -SAMPLE_OUTPUT_LSBLK_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa -SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa - - -class TestExportAction: - def _setup_submission(self) -> export.SDExport: - """ - Helper method to set up stub export object - """ - submission = export.SDExport("testfile", TEST_CONFIG) - temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) - with open(metadata, "w") as f: - f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') - - submission.archive_metadata = export.Metadata(temp_folder) - - return submission - - @mock.patch("sys.exit") - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_usbtestaction(self, mock_cli, mock_sys,): - - mock_cli.write_status = mock.MagicMock() - usb = USBTestAction(self._setup_submission()) - - usb.run() - mock_cli.write_status.assert_called_once_with(Status.LEGACY_USB_CONNECTED) - - - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_usbtestaction_error(self, mock_cli, capsys): - mock_cli.get_connected_devices.side_effect = ExportException(Status.LEGACY_ERROR_USB_CHECK) - usb = USBTestAction(self._setup_submission()) - - mock_cli.write_status = mock.MagicMock() - - usb.run() - mock_cli.write_status.assert_called_once_with(Status.LEGACY_ERROR_USB_CHECK) - - @mock.patch("sys.exit") - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_disktestaction(self, mock_sys, mock_cli): - - mock_cli.is_luks_volume.return_value=True - mock_cli.write_status = mock.MagicMock() - - test_export = DiskTestAction(self._setup_submission()) - test_export.run() - - mock_cli.write_status.assert_called_once_with(Status.SUCCESS_EXPORT) - - @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LSBLK_NO_PART) - @mock.patch("subprocess.check_call", return_value=0) - def test_luks_precheck_encrypted_fde(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskExportAction(submission) - - command_output = mock.MagicMock() - command_output.stderr = b"" - mocker.patch("subprocess.run", return_value=command_output) - - expected_message = Status.LEGACY_USB_ENCRYPTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - @mock.patch("sys.exit") - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_disktestaction_error(self, mock_cli, mocker): - mock_cli.patch("get_partitioned_device", side_effect=ExportException(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED)) - - status_mock = mock_cli.patch("write_status") - test_export = DiskTestAction(self._setup_submission()) - test_export.run() - status_mock.assert_called_once_with(Status.LEGACY_ERROR_USB_WRITE) - - @mock.patch("sys.exit") - @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LSBLK_ONE_PART) - @mock.patch("subprocess.check_call", return_value=0) - def test_luks_precheck_encrypted_single_part(mocked_call, mock_output, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = DiskTestAction(submission) - action.device = "/dev/sda" - expected_message = Status.LEGACY_USB_ENCRYPTED.value - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - - command_output = mock.MagicMock() - command_output.stderr = b"" - mocker.patch("subprocess.run", return_value=command_output) - - action.run() - - @mock.patch("sys.exit") - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_diskexportaction(self, mock_cli, mock_sys): - - mock_cli.patch("is_luks_volume", return_value=True) - status_mock = mock_cli.patch("write_status") - - test_export = DiskExportAction(self._setup_submission()) - test_export.run() - - status_mock.assert_called_once_with(Status.SUCCESS_EXPORT) - - @mock.patch("sys.exit") - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_diskexportaction_disk_not_supported(self, mock_cli, mock_sys): - - mock_cli.patch("get_partitioned_device") - mock_cli.patch("is_luks_volume", return_value=False) - status_mock = mock_cli.patch("write_status") - - test_export = DiskExportAction(self._setup_submission()) - test_export.run() - - status_mock.assert_called_once_with(Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - - @mock.patch("sys.exit") - @mock.patch("securedrop_export.disk.actions.CLI") - def test_run_diskexportaction_not_supported(self, mock_sys, mock_cli): - - status_mock = mock_cli.patch("write_status") - mock_cli.patch("get_partitioned_device") - mock_cli.is_luks_volume.return_value=True - mock_cli.write_data_to_device.side_effect = Status.LEGACY_ERROR_USB_WRITE - - test_export = DiskExportAction(self._setup_submission()) - test_export.run() - - status_mock.assert_called_once_with(Status.LEGACY_ERROR_USB_WRITE) diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index 7560630f7..a26bb70f4 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -7,12 +7,13 @@ import subprocess +from securedrop_export.enums import ExportEnum from securedrop_export.disk.cli import CLI from securedrop_export.disk.volume import EncryptionScheme, Volume -from securedrop_export.disk.exceptions import ExportException +from securedrop_export.exceptions import ExportException from securedrop_export.disk.status import Status -from securedrop_export import export +from securedrop_export.archive import Archive TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") @@ -214,9 +215,10 @@ def test_unlock_luks_volume_luksOpen_exception(self, mocked_subprocess): with pytest.raises(ExportException): cli.unlock_luks_volume(pd, key) + @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"\n") @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume(self, mocked_output, mocked_call): + def test_mount_volume(self, mocked_output, mocked_call, mocked_path): cli = CLI() vol = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -225,9 +227,10 @@ def test_mount_volume(self, mocked_output, mocked_call): ) result = cli.mount_volume(vol) + @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"/dev/pretend/luks-id-123456\n") @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume_already_mounted(self, mocked_output, mocked_call): + def test_mount_volume_already_mounted(self, mocked_output, mocked_call, mocked_path): cli = CLI() md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -236,9 +239,10 @@ def test_mount_volume_already_mounted(self, mocked_output, mocked_call): ) result = cli.mount_volume(md) + @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"\n") @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess): + def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess, mocked_path): cli = CLI() md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -339,7 +343,7 @@ def test_write_to_disk(self, mock_check_call): encryption=EncryptionScheme.LUKS, ) - submission = export.SDExport("testfile", TEST_CONFIG) + submission = Archive("testfile", TEST_CONFIG) cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) @@ -354,23 +358,9 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call, mocker): mountpoint=cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) - submission = export.SDExport("testfile", TEST_CONFIG) + submission = Archive("testfile", TEST_CONFIG) with pytest.raises(ExportException): cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) cleanup_mock.assert_called_once() - @pytest.mark.parametrize("status", [s for s in Status]) - def test_write_status(self, status, capsys): - cli = CLI() - - cli.write_status(status) - captured = capsys.readouterr() - assert captured.out == status.value + "\n" - - @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0"]) - def test_write_status_error(self, invalid_status, capsys): - cli = CLI() - - with pytest.raises(ValueError): - cli.write_status(Status.value_of(invalid_status)) diff --git a/tests/disk/test_service.py b/tests/disk/test_service.py new file mode 100644 index 000000000..9a418593b --- /dev/null +++ b/tests/disk/test_service.py @@ -0,0 +1,137 @@ +import pytest +from unittest import mock + +import os +import pytest +import sys +import tempfile + +import subprocess +from subprocess import CalledProcessError + +from securedrop_export.enums import ExportEnum +from securedrop_export.exceptions import ExportException +from securedrop_export.disk.status import Status +from securedrop_export.disk.new_status import Status as NewStatus +from securedrop_export.disk.volume import Volume, EncryptionScheme + +from securedrop_export.archive import Archive, Metadata +from securedrop_export.disk.service import Service +from securedrop_export.disk.cli import CLI + +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") +SAMPLE_OUTPUT_LSBLK_NO_PART = b"disk\ncrypt" # noqa +SAMPLE_OUTPUT_USB = "/dev/sda" # noqa +SAMPLE_OUTPUT_USB_PARTITIONED = "/dev/sda1" + +class TestExportService: + + @classmethod + def setup_class(cls): + cls.mock_cli = mock.MagicMock(CLI) + cls.mock_submission = cls._setup_submission() + + cls.mock_luks_volume_unmounted = Volume(device_name=SAMPLE_OUTPUT_USB, mapped_name="fake-luks-id-123456", encryption=EncryptionScheme.LUKS) + cls.mock_luks_volume_mounted = Volume(device_name=SAMPLE_OUTPUT_USB, mapped_name="fake-luks-id-123456", mountpoint="/media/usb", encryption=EncryptionScheme.LUKS) + + cls.service = Service(cls.mock_submission, cls.mock_cli) + + @classmethod + def teardown_class(cls): + cls.mock_cli = None + cls.mock_submission = None + cls.service = None + + @classmethod + def _setup_submission(cls) -> Archive: + """ + Helper method to set up sample archive + """ + submission = Archive("testfile", TEST_CONFIG) + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') + + submission.archive_metadata = Metadata.create_and_validate(temp_folder) + + return submission + + def setup_method(self, method): + """ + By default, mock CLI will return the "happy path" of a correctly-formatted LUKS drive. + Override this behaviour in the target method as required, for example to simulate CLI + errors. `teardown_method()` will reset the side effects so they do not affect subsequent + test methods. + """ + self.mock_cli.get_connected_devices.return_value = [SAMPLE_OUTPUT_USB] + self.mock_cli.get_partitioned_device.return_value = SAMPLE_OUTPUT_USB_PARTITIONED + self.mock_cli.get_luks_volume.return_value = self.mock_luks_volume_unmounted + self.mock_cli.mount_volume.return_value = self.mock_luks_volume_mounted + + def teardown_method(self, method): + self.mock_cli.reset_mock(return_value=True, side_effect=True) + + def test_check_usb(self): + status = self.service.check_connected_devices() + + assert status is Status.LEGACY_USB_CONNECTED + + def test_check_usb_error_no_devices(self): + self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=NewStatus.NO_DEVICE_DETECTED) + + with pytest.raises(ExportException) as ex: + self.service.check_connected_devices() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + + def test_check_usb_error_multiple_devices(self): + self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=NewStatus.MULTI_DEVICE_DETECTED) + + with pytest.raises(ExportException) as ex: + self.service.check_connected_devices() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + + def test_check_usb_error_while_checking(self): + self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=Status.LEGACY_ERROR_USB_CHECK) + + with pytest.raises(ExportException) as ex: + self.service.check_connected_devices() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + + def test_check_disk_format(self): + status = self.service.check_disk_format() + + assert status is Status.LEGACY_USB_ENCRYPTED + + def test_check_disk_format_error(self): + self.mock_cli.get_partitioned_device.side_effect=ExportException(sdstatus=NewStatus.INVALID_DEVICE_DETECTED) + + with pytest.raises(ExportException) as ex: + self.service.check_disk_format() + + # We still return the legacy status for now + assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + + def test_export(self): + status = self.service.export() + assert status is Status.SUCCESS_EXPORT + + def test_export_disk_not_supported(self): + self.mock_cli.is_luks_volume.return_value = False + + with pytest.raises(ExportException) as ex: + self.service.export() + + assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + + def test_export_write_error(self): + self.mock_cli.is_luks_volume.return_value=True + self.mock_cli.write_data_to_device.side_effect = ExportException(sdstatus=Status.LEGACY_ERROR_USB_WRITE) + + with pytest.raises(ExportException) as ex: + self.service.export() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_WRITE diff --git a/tests/print/test_actions.py b/tests/print/test_actions.py deleted file mode 100644 index 17c3397fb..000000000 --- a/tests/print/test_actions.py +++ /dev/null @@ -1,134 +0,0 @@ -from unittest import mock - -import os -import pytest -from subprocess import CalledProcessError -import sys - -from securedrop_export import export -from securedrop_export.print.actions import PrintExportAction - - -SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa -SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa -SAMPLE_OUTPUT_LASERJET_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000\nnetwork lpd" # noqa -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) -def test_get_good_printer_uri_laserjet(mocked_call): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - - result = action.get_printer_uri() - - assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) -def test_get_good_printer_uri_brother(mocked_call): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - - result = action.get_printer_uri() - assert result == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" - - -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) -def test_get_bad_printer_uri(mocked_call, capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - expected_message = "ERROR_PRINTER_NOT_FOUND" - assert export.ExportStatus.ERROR_PRINTER_NOT_FOUND.value == expected_message - mocked_exit = mocker.patch.object( - submission, "exit_gracefully", side_effect=lambda x: sys.exit(0) - ) - - with pytest.raises(SystemExit): - action.get_printer_uri() - - mocked_exit.assert_called_once_with(expected_message) - - -@pytest.mark.parametrize( - "open_office_paths", - [ - "/tmp/whatver/thisisadoc.doc" - "/home/user/Downloads/thisisadoc.xlsx" - "/home/user/Downloads/file.odt" - "/tmp/tmpJf83j9/secret.pptx" - ], -) -def test_is_open_office_file(capsys, open_office_paths): - submission = export.SDExport("", TEST_CONFIG) - action = PrintExportAction(submission) - assert action.is_open_office_file(open_office_paths) - - -@pytest.mark.parametrize( - "open_office_paths", - [ - "/tmp/whatver/thisisadoc.doccc" - "/home/user/Downloads/thisisa.xlsx.zip" - "/home/user/Downloads/file.odz" - "/tmp/tmpJf83j9/secret.gpg" - ], -) -def test_is_not_open_office_file(capsys, open_office_paths): - submission = export.SDExport("", TEST_CONFIG) - action = PrintExportAction(submission) - assert not action.is_open_office_file(open_office_paths) - - -@mock.patch("subprocess.run") -def test_install_printer_ppd_laserjet(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - ppd = action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") - assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" - - -@mock.patch("subprocess.run") -def test_install_printer_ppd_brother(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - ppd = action.install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") - assert ppd == "/usr/share/cups/model/br7030.ppd" - - -def test_install_printer_ppd_error_no_driver(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - - action.install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") - - assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_DRIVER_UNAVAILABLE" - assert mocked_exit.mock_calls[0][2]["e"] is None - - -def test_install_printer_ppd_error_not_supported(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - - action.install_printer_ppd("usb://Not/Supported?serial=A00000A000000") - - assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_NOT_SUPPORTED" - - -def test_setup_printer_error(mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - action = PrintExportAction(submission) - mocked_exit = mocker.patch.object(submission, "exit_gracefully", return_value=0) - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - - action.setup_printer( - "usb://Brother/HL-L2320D%20series?serial=A00000A000000", - "/usr/share/cups/model/br7030.ppd", - ) - - assert mocked_exit.mock_calls[0][2]["msg"] == "ERROR_PRINTER_INSTALL" - assert mocked_exit.mock_calls[0][2]["e"] is None diff --git a/tests/print/test_service.py b/tests/print/test_service.py new file mode 100644 index 000000000..569ecdd2c --- /dev/null +++ b/tests/print/test_service.py @@ -0,0 +1,130 @@ +from unittest import mock + +import os +import pytest +from subprocess import CalledProcessError +import sys + +from securedrop_export.exceptions import ExportException +from securedrop_export.archive import Archive +from securedrop_export.print.service import Service +from securedrop_export.print.service import Status + + +SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa +SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa +SAMPLE_OUTPUT_LASERJET_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000\nnetwork lpd" # noqa +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) +def test_get_good_printer_uri_laserjet(mocked_call): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + + result = service._get_printer_uri() + + assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) +def test_get_good_printer_uri_brother(mocked_call): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + + result = service._get_printer_uri() + assert result == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + + +@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) +def test_get_bad_printer_uri(mocked_call, capsys, mocker): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + expected_status = Status.ERROR_PRINTER_NOT_FOUND # todo + + with pytest.raises(ExportException): + service._get_printer_uri() + + +@pytest.mark.parametrize( + "open_office_paths", + [ + "/tmp/whatver/thisisadoc.doc" + "/home/user/Downloads/thisisadoc.xlsx" + "/home/user/Downloads/file.odt" + "/tmp/tmpJf83j9/secret.pptx" + ], +) +def test_is_open_office_file(capsys, open_office_paths): + submission = Archive("", TEST_CONFIG) + service = Service(submission) + assert service._is_open_office_file(open_office_paths) + + +@pytest.mark.parametrize( + "open_office_paths", + [ + "/tmp/whatver/thisisadoc.doccc" + "/home/user/Downloads/thisisa.xlsx.zip" + "/home/user/Downloads/file.odz" + "/tmp/tmpJf83j9/secret.gpg" + ], +) +def test_is_not_open_office_file(capsys, open_office_paths): + submission = Archive("", TEST_CONFIG) + service = Service(submission) + assert not service._is_open_office_file(open_office_paths) + + +@mock.patch("subprocess.run") +def test_install_printer_ppd_laserjet(mocker): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + ppd = service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") + assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" + + +@mock.patch("subprocess.run") +def test_install_printer_ppd_brother(mocker): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + ppd = service._install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") + assert ppd == "/usr/share/cups/model/br7030.ppd" + + +def test_install_printer_ppd_error_no_driver(mocker): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) + + with pytest.raises(ExportException) as ex: + service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") + + assert ex.value.sdstatus is Status.ERROR_PRINTER_DRIVER_UNAVAILABLE + + +def test_install_printer_ppd_error_not_supported(mocker): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) + + with pytest.raises(ExportException) as ex: + service._install_printer_ppd("usb://Not/Supported?serial=A00000A000000") + + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED + + +def test_setup_printer_error(mocker): + submission = Archive("testfile", TEST_CONFIG) + service = Service(submission) + + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) + + with pytest.raises(ExportException) as ex: + service._setup_printer( + "usb://Brother/HL-L2320D%20series?serial=A00000A000000", + "/usr/share/cups/model/br7030.ppd", + ) + + assert ex.value.sdstatus is Status.ERROR_PRINTER_INSTALL \ No newline at end of file diff --git a/tests/test_export.py b/tests/test_archive.py similarity index 78% rename from tests/test_export.py rename to tests/test_archive.py index 4b596c9a7..0437e94ff 100644 --- a/tests/test_export.py +++ b/tests/test_archive.py @@ -9,7 +9,8 @@ import tarfile from io import BytesIO -from securedrop_export import export +from securedrop_export.exceptions import ExportException +from securedrop_export.archive import Archive, Metadata, Status TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") @@ -46,7 +47,7 @@ def test_extract_tarball(): archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" submission.extract_tarball() @@ -58,7 +59,7 @@ def test_extract_tarball(): # Subdirectories that are added as members are extracted with 700 permissions assert oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" # Subdirectories that are not added as members are extracted with 700 permissions - # because os.umask(0o077) is set in the SDExport constructor. + # because os.umask(0o077) is set in the Archive constructor. assert oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) == "0o40700" @@ -85,7 +86,7 @@ def test_extract_tarball_with_symlink(): archive.addfile(symlink_info) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" submission.extract_tarball() @@ -120,9 +121,9 @@ def test_extract_tarball_raises_if_doing_path_traversal(): archive.addfile(traversed_file_info, BytesIO(content)) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): # prev: SystemExit submission.extract_tarball() assert not os.path.exists("/tmp/traversed") @@ -157,9 +158,9 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): archive.addfile(dir_info) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): # prev: SystemExit submission.extract_tarball() assert not os.path.exists("/tmp/traversed") @@ -196,9 +197,9 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): archive.addfile(symlink_info, BytesIO(content)) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/traversed") @@ -235,9 +236,9 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): archive.addfile(symlink_info, BytesIO(content)) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/traversed") @@ -271,9 +272,9 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): archive.addfile(file_info, BytesIO(content)) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/unsafe") @@ -308,9 +309,9 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): archive.add(symlink_path, "symlink") archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/unsafe") @@ -353,9 +354,9 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to archive.add(file_path, "symlink/unsafe") archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/unsafe") @@ -390,145 +391,87 @@ def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): archive.addfile(symlink_info, BytesIO(content)) archive.close() - submission = export.SDExport(archive_path, TEST_CONFIG) + submission = Archive(archive_path, TEST_CONFIG) - with pytest.raises(SystemExit): + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/unsafe") -def test_exit_gracefully_no_exception(capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - test_msg = "test" - - with pytest.raises(SystemExit) as sysexit: - submission.exit_gracefully(test_msg) - - # A graceful exit means a return code of 0 - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err == "{}\n".format(test_msg) - assert captured.out == "" - - -def test_exit_gracefully_exception(capsys): - submission = export.SDExport("testfile", TEST_CONFIG) - test_msg = "ERROR_GENERIC" - - with pytest.raises(SystemExit) as sysexit: - exception = mock.MagicMock() - exception.output = "BANG!" - submission.exit_gracefully(test_msg, e=exception) - - # A graceful exit means a return code of 0 - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err.rstrip() == export.ExportStatus.ERROR_GENERIC.value - assert captured.out == "" - - def test_empty_config(capsys): - export.SDExport("testfile", TEST_CONFIG) + Archive("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write("{}") - config = export.Metadata(temp_folder) - - assert not config.is_valid() + with pytest.raises(ExportException) as ex: + config = Metadata.create_and_validate(temp_folder) def test_valid_printer_test_config(capsys): - export.SDExport("testfile", TEST_CONFIG) + Archive("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write('{"device": "printer-test"}') - config = export.Metadata(temp_folder) + config = Metadata.create_and_validate(temp_folder) - assert config.is_valid() assert config.encryption_key is None assert config.encryption_method is None def test_valid_printer_config(capsys): - export.SDExport("", TEST_CONFIG) + Archive("", TEST_CONFIG) temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write('{"device": "printer"}') - config = export.Metadata(temp_folder) + config = Metadata.create_and_validate(temp_folder) - assert config.is_valid() assert config.encryption_key is None assert config.encryption_method is None def test_invalid_encryption_config(capsys): - export.SDExport("testfile", TEST_CONFIG) + Archive("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write('{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}') - config = export.Metadata(temp_folder) + with pytest.raises(ExportException) as ex: + config = Metadata.create_and_validate(temp_folder) - assert config.encryption_key == "hunter1" - assert config.encryption_method == "base64" - assert not config.is_valid() + assert ex.value.sdstatus is Status.ERROR_ARCHIVE_METADATA +def test_malforned_config(capsys): + Archive("testfile", TEST_CONFIG) + + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "asdf", "encryption_method": "OHNO"}') + + with pytest.raises(ExportException) as ex: + config = Metadata.create_and_validate(temp_folder) + + assert ex.value.sdstatus is Status.ERROR_METADATA_PARSING def test_valid_encryption_config(capsys): - export.SDExport("testfile", TEST_CONFIG) + Archive("testfile", TEST_CONFIG) temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, export.Metadata.METADATA_FILE) + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') - config = export.Metadata(temp_folder) + config = Metadata.create_and_validate(temp_folder) assert config.encryption_key == "hunter1" assert config.encryption_method == "luks" - assert config.is_valid() - - -def test_safe_check_call(capsys, mocker): - submission = export.SDExport("testfile", TEST_CONFIG) - submission.safe_check_call(["ls"], "this will work") - expected_message = "uh oh!!!!" - - with pytest.raises(SystemExit) as sysexit: - submission.safe_check_call(["ls", "kjdsfhkdjfh"], expected_message) - - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) - assert captured.out == "" - - # This should work too - submission.safe_check_call( - ["python3", "-c", "import sys;sys.stderr.write('hello')"], - expected_message, - ignore_stderr_startswith=b"hello", - ) - - with pytest.raises(SystemExit) as sysexit: - submission.safe_check_call( - ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], - expected_message, - ignore_stderr_startswith=b"world", - ) - assert sysexit.value.code == 0 - captured = capsys.readouterr() - assert captured.err == "{}\n".format(expected_message) - assert captured.out == "" diff --git a/tests/test_main.py b/tests/test_main.py index efa2a6e18..aa020acc6 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,4 +1,66 @@ -from securedrop_export.main import __main__ # noqa: F401 +import pytest +from unittest import mock +import os +#from securedrop_export.main import __main__, _exit_gracefully # noqa: F401 +from securedrop_export.main import Status, _extract_and_run, _exit_gracefully, _write_status # noqa: F401 +from securedrop_export.archive import Archive # This import ensures at least the imports in main.__main__ # are executed during a test run + +TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") +BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") +ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") + + +class TestMain(): + + def test_exit_gracefully_no_exception(self, capsys): + submission = Archive("testfile", TEST_CONFIG) + + with pytest.raises(SystemExit) as sysexit: + _exit_gracefully(submission, Status.ERROR_GENERIC) + + # A graceful exit means a return code of 0 + assert sysexit.value.code == 0 + + captured = capsys.readouterr() + assert captured.err == "{}\n".format(Status.ERROR_GENERIC.value) + assert captured.out == "" + + + def test_exit_gracefully_exception(self, capsys): + submission = Archive("testfile", TEST_CONFIG) + + with pytest.raises(SystemExit) as sysexit: + exception = mock.MagicMock() + exception.output = "BANG!" + _exit_gracefully(submission, Status.ERROR_GENERIC, e=exception) + + # A graceful exit means a return code of 0 + assert sysexit.value.code == 0 + + captured = capsys.readouterr() + assert captured.err.rstrip() == Status.ERROR_GENERIC.value + assert captured.out == "" + + + @pytest.mark.parametrize("status", [s for s in Status]) + def test_write_status(self, status, capsys): + _write_status(status) + captured = capsys.readouterr() + assert captured.err == status.value + "\n" + + @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0"]) + def test_write_status_error(self, invalid_status, capsys): + + with pytest.raises(ValueError): + _write_status(Status(invalid_status)) + + + def test__extract_and_run(self): + pass + + + def test__extract_and_run_failure(self): + pass diff --git a/tests/test_util.py b/tests/test_util.py new file mode 100644 index 000000000..297f08b93 --- /dev/null +++ b/tests/test_util.py @@ -0,0 +1,39 @@ +import pytest + +from securedrop_export import utils +from securedrop_export.enums import ExportEnum +from securedrop_export.exceptions import ExportException + +class FakeStatus(ExportEnum): + OH_NO = "Oh No!" + NO_PROBLEM = "No Problem!" + +class TestUtil: + + def test_safe_check_call(self): + # This works, since `ls` is a valid comand + utils.safe_check_call(["ls"], FakeStatus.NO_PROBLEM) + + def test_safe_check_call_invalid_call(self): + with pytest.raises(ExportException) as ex: + utils.safe_check_call(["ls", "kjdsfhkdjfh"], FakeStatus.OH_NO) + + assert ex.value.sdstatus is FakeStatus.OH_NO + + def test_safe_check_call_write_to_stderr_and_ignore_error(self): + utils.safe_check_call( + ["python3", "-c", "import sys;sys.stderr.write('hello')"], + FakeStatus.NO_PROBLEM, + ignore_stderr_startswith=b"hello", + ) + + def test_safe_check_call_write_to_stderr_wrong_ignore_param(self): + # This one writes to stderr and ignores the wrong string, so we expect an exception + with pytest.raises(ExportException) as ex: + utils.safe_check_call( + ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], + FakeStatus.OH_NO, + ignore_stderr_startswith=b"world", + ) + + assert ex.value.sdstatus is FakeStatus.OH_NO \ No newline at end of file From 4141484b9a8dea1e50e6d5110772d90a8568de09 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 3 Oct 2022 20:12:55 -0700 Subject: [PATCH 536/751] Remove entrypoint.py. Update setup.py to launch script from main.py --- securedrop_export/entrypoint.py | 79 --------------------------------- securedrop_export/main.py | 25 ++++++----- setup.py | 2 +- 3 files changed, 16 insertions(+), 90 deletions(-) delete mode 100755 securedrop_export/entrypoint.py diff --git a/securedrop_export/entrypoint.py b/securedrop_export/entrypoint.py deleted file mode 100755 index 4ae235d1f..000000000 --- a/securedrop_export/entrypoint.py +++ /dev/null @@ -1,79 +0,0 @@ -import logging -import os -import shutil -import sys -import platform - -from logging.handlers import TimedRotatingFileHandler, SysLogHandler -from securedrop_export import __version__ -from securedrop_export.archive import Archive -from securedrop_export import main -from securedrop_export.utils import safe_mkdir - -CONFIG_PATH = "/etc/sd-export-config.json" -DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") -LOG_DIR_NAME = "logs" -EXPORT_LOG_FILENAME = "export.log" - -logger = logging.getLogger(__name__) - - -def configure_logging(): - """ - All logging related settings are set up by this function. - """ - safe_mkdir(DEFAULT_HOME) - safe_mkdir(DEFAULT_HOME, LOG_DIR_NAME) - - log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) - - # set logging format - log_fmt = "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" - formatter = logging.Formatter(log_fmt) - - handler = TimedRotatingFileHandler(log_file) - handler.setFormatter(formatter) - - # For rsyslog handler - if platform.system() != "Linux": # pragma: no cover - syslog_file = "/var/run/syslog" - else: - syslog_file = "/dev/log" - - sysloghandler = SysLogHandler(address=syslog_file) - sysloghandler.setFormatter(formatter) - handler.setLevel(logging.DEBUG) - - # set up primary log - log = logging.getLogger() - log.setLevel(logging.DEBUG) - log.addHandler(handler) - # add the second logger - log.addHandler(sysloghandler) - - -def start(): - try: - configure_logging() - except Exception: - msg = "ERROR_LOGGING" - main._exit_gracefully(None, msg) - - logger.info("Starting SecureDrop Export {}".format(__version__)) - my_sub = Archive(sys.argv[1], CONFIG_PATH) - - try: - # Halt immediately if target file is absent - if not os.path.exists(my_sub.archive): - logger.info("Archive is not found {}.".format(my_sub.archive)) - msg = "ERROR_FILE_NOT_FOUND" - main._exit_gracefully(my_sub, msg) - main.__main__(my_sub) - # Delete extracted achive from tempfile - shutil.rmtree(my_sub.tmpdir) - except Exception as e: - # exit with 0 return code otherwise the os will attempt to open - # the file with another application - logger.error(e) - msg = "ERROR_GENERIC" - main._exit_gracefully(my_sub, msg) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 3b198187f..6f74f5f4b 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -24,16 +24,21 @@ class Status(ExportEnum): """ - Errors initializing export + Status values that can occur during initialization. """ ERROR_LOGGING = "ERROR_LOGGING" ERROR_GENERIC = "ERROR_GENERIC" ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" -def start(): +def entrypoint(): + """ + Entrypoint for setuptools. + Configure logging, extract tarball, and run desired export service, + exiting with return code 0. + """ try: - configure_logging() + _configure_logging() except Exception: _exit_gracefully(submission=None, status=Status.ERROR_LOGGING) @@ -46,7 +51,7 @@ def start(): logger.info("Archive is not found {}.".format(data.archive)) _exit_gracefully(data, Status.ERROR_FILE_NOT_FOUND) - # The main event. Extract archive and either print or export to disk. + # Extract archive and either print or export to disk. # Includes cleanup logic, which removes any temporary directories associated with # the archive. _extract_and_run(data) @@ -91,10 +96,11 @@ def _configure_logging(): def _extract_and_run(submission: Archive): """ - Extract tarball and metadata and run appropriate command - based on metadata instruction. + Extract tarball and metadata and run appropriate command based on metadata instruction. + Always exits by writing status, if applicable, to stdout. + """ - status = Status.ERROR_GENERIC + status = None stacktrace = None try: @@ -110,7 +116,7 @@ def _extract_and_run(submission: Archive): status = _start_service(submission, command) except ExportException as ex: - status = ex.sdstatus + status = ex.value.sdstatus stacktrace = ex.output except Exception as exc: @@ -145,7 +151,7 @@ def _start_service(submission: Archive, cmd: Command) -> Status: elif cmd is Commmand.CHECK_USBS: return service.check_connected_devices() elif cmd is Commmand.CHECK_VOLUME: - return service.checK_disk_format() + return service.check_disk_format() def _exit_gracefully(submission: Archive, status: Status=None, e=None): @@ -183,4 +189,3 @@ def _write_status(status: Status): sys.stderr.write("\n") else: logger.info("No status value supplied") - diff --git a/setup.py b/setup.py index e64b673fa..485a88084 100644 --- a/setup.py +++ b/setup.py @@ -31,5 +31,5 @@ "Intended Audience :: Developers", "Operating System :: OS Independent", ), - entry_points={"console_scripts": ["send-to-usb = securedrop_export.entrypoint:start"]}, + entry_points={"console_scripts": ["send-to-usb = securedrop_export.main:entrypoint"]}, ) From b1e12bff9b740d29a60233055987c6c2051372ca Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 4 Oct 2022 09:57:13 -0700 Subject: [PATCH 537/751] Fix metadata validation method. Add Archive and Metadata test coverage, improve CLI test coverage. --- securedrop_export/archive.py | 24 +- securedrop_export/{enums.py => command.py} | 15 +- securedrop_export/disk/cli.py | 84 +++--- securedrop_export/disk/new_status.py | 4 +- securedrop_export/disk/service.py | 24 +- securedrop_export/disk/status.py | 8 +- securedrop_export/exceptions.py | 2 - securedrop_export/main.py | 50 ++-- securedrop_export/print/service.py | 25 +- securedrop_export/print/status.py | 4 +- securedrop_export/status.py | 10 + securedrop_export/utils.py | 21 -- tests/disk/test_cli.py | 320 +++++++++++++++------ tests/disk/test_service.py | 63 +++- tests/print/test_service.py | 176 ++++++------ tests/test_archive.py | 17 ++ tests/test_exceptions.py | 20 ++ tests/test_main.py | 13 +- tests/test_util.py | 33 +-- 19 files changed, 548 insertions(+), 365 deletions(-) rename securedrop_export/{enums.py => command.py} (53%) create mode 100644 securedrop_export/status.py create mode 100644 tests/test_exceptions.py diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py index f5a780b23..c2b192e83 100755 --- a/securedrop_export/archive.py +++ b/securedrop_export/archive.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 -import abc import datetime import json import logging @@ -11,13 +10,13 @@ import tempfile from securedrop_export.exceptions import ExportException -from securedrop_export.enums import Command, ExportEnum +from securedrop_export.status import BaseStatus +from securedrop_export.command import Command from securedrop_export.utils import safe_extractall logger = logging.getLogger(__name__) - -class Status(ExportEnum): +class Status(BaseStatus): ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" ERROR_EXTRACTION = "ERROR_EXTRACTION" @@ -38,7 +37,7 @@ class Metadata(object): __key = object() - def __init__(self, key, archive_path): + def __init__(self, key: object, archive_path: str): if not key == Metadata.__key: raise ValueError("Must use create_and_validate() to create Metadata object") @@ -75,16 +74,19 @@ def validate(self): ) ) - # Validate metadata - this will fail if command is not in list of supported commands - self.command = Command(self.export_method) - if self.command is Command.EXPORT and not self.encryption_method in self.SUPPORTED_ENCRYPTION_METHODS: - logger.error("Unsuported encryption method") - raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) - except Exception as ex: logger.error("Metadata parsing failure") raise ExportException(sdstatus=Status.ERROR_METADATA_PARSING) from ex + # Validate metadata - this will fail if command is not in list of supported commands + try: + self.command = Command(self.export_method) + if self.command is Command.EXPORT and not self.encryption_method in self.SUPPORTED_ENCRYPTION_METHODS: + logger.error("Unsupported encryption method") + raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) + except ValueError as v: + raise ExportException(sdstatus=Status.ERROR_METADATA_PARSING) from v + class Archive(object): def __init__(self, archive, config_path): diff --git a/securedrop_export/enums.py b/securedrop_export/command.py similarity index 53% rename from securedrop_export/enums.py rename to securedrop_export/command.py index 26d7a9cb1..382b4feff 100644 --- a/securedrop_export/enums.py +++ b/securedrop_export/command.py @@ -1,11 +1,6 @@ from enum import Enum -class ExportEnum(Enum): - """ - Parent class for export and print statuses. - """ - -class Command(ExportEnum): +class Command(Enum): """ All supported commands. @@ -19,11 +14,3 @@ class Command(ExportEnum): CHECK_VOLUME = "disk-test" EXPORT = "disk" START_VM = "" - - @classmethod - def printer_actions(cls): - return (cls.PRINTER_PREFLIGHT, cls.PRINTER_TEST, cls.PRINT) - - @classmethod - def export_actions(cls): - return (cls.EXPORT, cls.CHECK_USBS, cls.CHECK_VOLUME) diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index 579a102e5..8f9dc6d43 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -21,6 +21,9 @@ class CLI: """ A Python wrapper for various shell commands required to detect, map, and mount Export devices. + + CLI callers must handle ExportException and all exceptions and exit with + sys.exit(0) so that another program does not attempt to open the submission. """ # Default mountpoint (unless drive is already mounted manually by the user) @@ -48,7 +51,12 @@ def get_connected_devices(self) -> List[str]: except subprocess.CalledProcessError as ex: raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex - # Determine which are USBs by selecting those block devices that are removable disks. + return self._get_removable_devices(attached_devices) + + def _get_removable_devices(self, attached_devices: List[str]) -> List[str]: + """ + Determine which block devices are USBs by selecting those that are removable. + """ usb_devices = [] for device in attached_devices: is_removable = False @@ -120,7 +128,6 @@ def is_luks_volume(self, device: str) -> bool: # subprocess will throw if the device is not luks (rc !=0) subprocess.check_call(["sudo", "cryptsetup", "isLuks", device]) - # Status.LEGACY_USB_ENCRYPTED isLuks = True except subprocess.CalledProcessError as ex: @@ -143,13 +150,13 @@ def _get_luks_name_from_headers(self, device: str) -> str: items = line.split("\t") if "UUID" in items[0]: return "luks-" + items[1] - else: - logger.error( - f"Failed to dump LUKS headers; {device} may not be correctly formatted" - ) - raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) + + # If no header or no UUID field, we can't use this drive + logger.error(f"Failed to get UUID from LUKS header; {device} may not be correctly formatted") + raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) except subprocess.CalledProcessError as ex: - raise ExportException(sdtatus=Status.DEVICE_ERROR) from ex + logger.error(f"Failed to dump LUKS header") + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def get_luks_volume(self, device: str) -> Volume: """ @@ -241,7 +248,7 @@ def mount_volume(self, volume: Volume) -> Volume: If volume is already mounted, mountpoint is not changed. Otherwise, volume is mounted at _DEFAULT_MOUNTPOINT. - Raises ExportException if errors are encountered during mounting. + Raise ExportException if errors are encountered during mounting. """ if not volume.unlocked: raise ExportException(sdstatus=Status.ERROR_MOUNT) @@ -251,33 +258,44 @@ def mount_volume(self, volume: Volume) -> Volume: if mountpoint: logger.debug("The device is already mounted") if volume.mountpoint is not mountpoint: - # This should not happen, but if a user edits their veracrypt drive mountpoint on the fly. logger.warning(f"Mountpoint was inaccurate, updating") volume.mountpoint = mountpoint + return volume else: - if not os.path.exists(self._DEFAULT_MOUNTPOINT): - try: - subprocess.check_call(["sudo", "mkdir", self._DEFAULT_MOUNTPOINT]) - except subprocess.CalledProcessError as ex: - logger.error(ex) - raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + return self._mount_at_mountpoint(volume, self._DEFAULT_MOUNTPOINT) - # Mount device /dev/mapper/{mapped_name} at /media/usb/ - mapped_device_path = os.path.join(volume.MAPPED_VOLUME_PREFIX, volume.mapped_name) - try: - logger.debug(f"Mounting volume {volume.device_name} at {self._DEFAULT_MOUNTPOINT}") - subprocess.check_call(["sudo", "mount", mapped_device_path, self._DEFAULT_MOUNTPOINT]) - subprocess.check_call(["sudo", "chown", "-R", "user:user", self._DEFAULT_MOUNTPOINT]) - - volume.mountpoint = self._DEFAULT_MOUNTPOINT + def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> Volume: + """ + Mount a volume at the supplied mountpoint, creating the mountpoint directory and + adjusting permissions (user:user) if need be. `mountpoint` must be a full path. + Return Volume object. + Raise ExportException if unable to mount volume at target mountpoint. + """ + if not os.path.exists(mountpoint): + try: + subprocess.check_call(["sudo", "mkdir", mountpoint]) except subprocess.CalledProcessError as ex: logger.error(ex) raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + # Mount device /dev/mapper/{mapped_name} at /media/usb/ + mapped_device_path = os.path.join(volume.MAPPED_VOLUME_PREFIX, volume.mapped_name) + + try: + logger.debug(f"Mounting volume {volume.device_name} at {mountpoint}") + subprocess.check_call(["sudo", "mount", mapped_device_path, mountpoint]) + subprocess.check_call(["sudo", "chown", "-R", "user:user", mountpoint]) + + volume.mountpoint = mountpoint + + except subprocess.CalledProcessError as ex: + logger.error(ex) + raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + return volume def write_data_to_device( @@ -287,11 +305,7 @@ def write_data_to_device( Move files to drive (overwrites files with same filename) and unmount drive. Drive is unmounted and files are cleaned up as part of the `finally` block to ensure that cleanup happens even if export fails or only partially succeeds. - - The calling method *must* handle ExportException and exit with sys.exit(0) so that - another program does not attempt to open the submission. """ - try: target_path = os.path.join(device.mountpoint, submission_target_dirname) subprocess.check_call(["mkdir", target_path]) @@ -340,10 +354,12 @@ def _unmount_volume(self, volume: Volume) -> Volume: except subprocess.CalledProcessError as ex: logger.error("Error unmounting device") - raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex else: logger.info("Mountpoint does not exist; volume was already unmounted") + return volume + def _close_luks_volume(self, unlocked_device: Volume) -> None: """ Helper. Close LUKS volume @@ -369,13 +385,3 @@ def _remove_temp_directory(self, tmpdir: str): except subprocess.CalledProcessError as ex: logger.error("Error removing temporary directory") raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex - - def write_status(self, status: Status): - """ - Write string to stdout. - """ - if status: - sys.stdout.write(status.value) - sys.stdout.write("\n") - else: - logger.warning("No status value supplied") diff --git a/securedrop_export/disk/new_status.py b/securedrop_export/disk/new_status.py index d6f8dadda..2bb0c242a 100644 --- a/securedrop_export/disk/new_status.py +++ b/securedrop_export/disk/new_status.py @@ -1,6 +1,6 @@ -from securedrop_export.enums import ExportEnum +from securedrop_export.status import BaseStatus -class Status(ExportEnum): +class Status(BaseStatus): NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" INVALID_DEVICE_DETECTED = "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index 56531aa13..adabf4e4e 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -26,22 +26,21 @@ def check_connected_devices(self) -> Status: Check if single USB is inserted. """ logger.info("Export archive is usb-test") - status = Status.LEGACY_ERROR_GENERIC try: all_devices = self.cli.get_connected_devices() num_devices = len(all_devices) - if num_devices == 0: - raise ExportException(sdstatus=Status.LEGACY_USB_NOT_CONNECTED) - elif num_devices == 1: - return Status.LEGACY_USB_CONNECTED - elif num_devices > 1: - raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - except ExportException as ex: # Use legacy status instead of new status values - raise ExportException(sdstatus=Status.LEGACY_ERROR_GENERIC) from ex + raise ExportException(sdstatus=Status.LEGACY_ERROR_USB_CHECK) from ex + + if num_devices == 0: + raise ExportException(sdstatus=Status.LEGACY_USB_NOT_CONNECTED) + elif num_devices == 1: + return Status.LEGACY_USB_CONNECTED + elif num_devices > 1: + raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) def check_disk_format(self) -> Status: @@ -104,6 +103,7 @@ def export(self) -> Status: raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) except ExportException as ex: + print(ex) # Return legacy status values for now for ongoing client compatibility if ex.sdstatus in [s for s in NewStatus]: status = self._legacy_status(ex.sdstatus) @@ -114,7 +114,7 @@ def export(self) -> Status: raise ExportException(sdstatus=Status.LEGACY_ERROR_GENERIC) - def _legacy_status(self, status: NewStatus): + def _legacy_status(self, status: NewStatus) -> Status: """ Backwards-compatibility - status values that client (@0.7.0) is expecting. """ @@ -126,5 +126,7 @@ def _legacy_status(self, status: NewStatus): return Status.LEGACY_USB_BAD_PASSPHRASE elif status in [NewStatus.INVALID_DEVICE_DETECTED, NewStatus.MULTI_DEVICE_DETECTED]: return Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + # The other status values, such as Status.NO_DEVICE_DETECTED, are not returned by the + # CLI, so we don't need to check for them here else: - return Status.LEGACY_ERROR_GENERIC + return Status.LEGACY_ERROR_GENERIC \ No newline at end of file diff --git a/securedrop_export/disk/status.py b/securedrop_export/disk/status.py index e4be49d36..4a3aa8881 100644 --- a/securedrop_export/disk/status.py +++ b/securedrop_export/disk/status.py @@ -1,17 +1,21 @@ -from securedrop_export.enums import ExportEnum +from securedrop_export.status import BaseStatus -class Status(ExportEnum): +class Status(BaseStatus): LEGACY_ERROR_GENERIC = "ERROR_GENERIC" # Legacy USB preflight related LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success + LEGACY_USB_NOT_CONNECTED = "USB_NOT_CONNECTED" LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" # Legacy USB Disk preflight related errors LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" + #@todo - this can be raised during disk format check + LEGACY_USB_DISK_ERROR = "USB_DISK_ERROR" + # Legacy Disk export errors LEGACY_USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" LEGACY_ERROR_USB_MOUNT = "ERROR_USB_MOUNT" diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index b13e79d36..d740fc36b 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -1,8 +1,6 @@ import logging from typing import Optional -from .enums import ExportEnum - logger = logging.getLogger(__name__) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 6f74f5f4b..9860bbe12 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -6,7 +6,8 @@ import subprocess from securedrop_export.archive import Archive, Metadata -from securedrop_export.enums import Command, ExportEnum +from securedrop_export.command import Command +from securedrop_export.status import BaseStatus from securedrop_export.disk.service import Service as ExportService from securedrop_export.print.service import Service as PrintService @@ -22,7 +23,7 @@ logger = logging.getLogger(__name__) -class Status(ExportEnum): +class Status(BaseStatus): """ Status values that can occur during initialization. """ @@ -30,10 +31,9 @@ class Status(ExportEnum): ERROR_GENERIC = "ERROR_GENERIC" ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" - def entrypoint(): """ - Entrypoint for setuptools. + Entrypoint method (Note: a method is required for setuptools). Configure logging, extract tarball, and run desired export service, exiting with return code 0. """ @@ -97,8 +97,7 @@ def _configure_logging(): def _extract_and_run(submission: Archive): """ Extract tarball and metadata and run appropriate command based on metadata instruction. - Always exits by writing status, if applicable, to stdout. - + Always exits with return code 0 and writes exit status, if applicable, to stderr. """ status = None stacktrace = None @@ -131,28 +130,23 @@ def _extract_and_run(submission: Archive): def _start_service(submission: Archive, cmd: Command) -> Status: """ - Start print or export routine. + Start print or export service. """ - if cmd in Command.printer_actions(): - service = PrintService(submission) - - if cmd is Commmand.PRINTER: - return service.print() - elif cmd is Commmand.PRINTER_TEST: - return service.printer_preflight() - elif cmd is Commmand.PRINTER_TEST: - return service.printer_test() - - elif cmd in Command.export_actions(): - service = ExportService(submission) - - if cmd is Commmand.EXPORT: - return service.export() - elif cmd is Commmand.CHECK_USBS: - return service.check_connected_devices() - elif cmd is Commmand.CHECK_VOLUME: - return service.check_disk_format() - + # Print Routines + if cmd is Commmand.PRINTER: + return PrintService(submission).print() + elif cmd is Commmand.PRINTER_TEST: + return PrintService(submission).printer_preflight() + elif cmd is Commmand.PRINTER_TEST: + return PrintService(submission).printer_test() + + # Export routines + elif cmd is Commmand.EXPORT: + return ExportService(submission).export() + elif cmd is Commmand.CHECK_USBS: + return ExportService(submission).check_connected_devices() + elif cmd is Commmand.CHECK_VOLUME: + return ExportService(submission).check_disk_format() def _exit_gracefully(submission: Archive, status: Status=None, e=None): """ @@ -180,7 +174,7 @@ def _exit_gracefully(submission: Archive, status: Status=None, e=None): sys.exit(0) -def _write_status(status: Status): +def _write_status(status: BaseStatus): """ Write string to stderr. """ diff --git a/securedrop_export/print/service.py b/securedrop_export/print/service.py index f36045c1d..a8e22d24c 100644 --- a/securedrop_export/print/service.py +++ b/securedrop_export/print/service.py @@ -5,7 +5,6 @@ import time from securedrop_export.exceptions import handler, TimeoutException, ExportException -from securedrop_export.utils import safe_check_call from .status import Status PRINTER_NAME = "sdw-printer" @@ -161,7 +160,7 @@ def _install_printer_ppd(self, uri): # Compile and install drivers that are not already installed if not os.path.exists(printer_ppd): logger.info("Installing printer drivers") - safe_check_call( + self.safe_check_call( command=[ "sudo", "ppdc", @@ -244,8 +243,28 @@ def _print_file(self, file_to_print): logger.info("Sending file to printer {}".format(self.printer_name)) - safe_check_call( + self.safe_check_call( command=["xpp", "-P", self.printer_name, file_to_print], error_status=Status.ERROR_PRINT, ) + + def safe_check_call(command: str, error_status: Status, ignore_stderr_startswith=None): + """ + Wrap subprocess.check_output to ensure we wrap CalledProcessError and return + our own exception, and log the error messages. + """ + try: + err = subprocess.run(command, check=True, capture_output=True).stderr + # ppdc and lpadmin may emit warnings we are aware of which should not be treated as + # user facing errors + if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): + logger.info("Encountered warning: {}".format(err.decode("utf-8"))) + elif err == b"": + # Nothing on stderr and returncode is 0, we're good + pass + else: + raise ExportException(sdstatus=error_status, sderror=err) + except subprocess.CalledProcessError as ex: + raise ExportException(sdstatus=error_status, sderror=ex.output) + diff --git a/securedrop_export/print/status.py b/securedrop_export/print/status.py index a8c5221de..fef0dbdf1 100644 --- a/securedrop_export/print/status.py +++ b/securedrop_export/print/status.py @@ -1,6 +1,6 @@ -from securedrop_export.enums import ExportEnum +from securedrop_export.status import BaseStatus -class Status(ExportEnum): +class Status(BaseStatus): # Printer preflight related errors ERROR_MULTIPLE_PRINTERS_FOUND = "ERROR_MULTIPLE_PRINTERS_FOUND" diff --git a/securedrop_export/status.py b/securedrop_export/status.py new file mode 100644 index 000000000..29b304574 --- /dev/null +++ b/securedrop_export/status.py @@ -0,0 +1,10 @@ +from enum import Enum + +class BaseStatus(Enum): + """ + Base class for export and print statuses. A Status represents a string that can be returned + to the calling VM via stderr to provide diagnostic information about the success of a call. + Status values are defined in subclasses in their respective packages. A full list is available + in the project's README. + """ + pass diff --git a/securedrop_export/utils.py b/securedrop_export/utils.py index 9de1cf979..c7f9557d4 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/utils.py @@ -5,7 +5,6 @@ import subprocess import logging -from securedrop_export.enums import ExportEnum as Status from securedrop_export.exceptions import ExportException @@ -153,23 +152,3 @@ def _check_dir_permissions(dir_path: Union[str, Path]) -> None: if masked & 0o077: raise RuntimeError("Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path)) - - -def safe_check_call(command: str, error_status: Status, ignore_stderr_startswith=None): - """ - Wrap subprocess.check_output to ensure we wrap CalledProcessError and return - our own exception, and log the error messages. - """ - try: - err = subprocess.run(command, check=True, capture_output=True).stderr - # ppdc and lpadmin may emit warnings we are aware of which should not be treated as - # user facing errors - if ignore_stderr_startswith and err.startswith(ignore_stderr_startswith): - logger.info("Encountered warning: {}".format(err.decode("utf-8"))) - elif err == b"": - # Nothing on stderr and returncode is 0, we're good - pass - else: - raise ExportException(sdstatus=error_status, sderror=err) - except subprocess.CalledProcessError as ex: - raise ExportException(sdstatus=error_status, sderror=ex.output) \ No newline at end of file diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index a26bb70f4..bd92e4abd 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -3,15 +3,13 @@ import os import pytest -import sys - import subprocess +import sys -from securedrop_export.enums import ExportEnum from securedrop_export.disk.cli import CLI from securedrop_export.disk.volume import EncryptionScheme, Volume from securedrop_export.exceptions import ExportException -from securedrop_export.disk.status import Status +from securedrop_export.disk.new_status import Status from securedrop_export.archive import Archive @@ -36,6 +34,13 @@ class TestCli: Test the CLI wrapper that handless identification and locking/unlocking of USB volumes. """ + @classmethod + def setup_class(cls): + cls.cli = CLI() + + @classmethod + def teardown_class(cls): + cls.cli = None def _setup_usb_devices(self, mocker, disks, is_removable): """ @@ -66,100 +71,134 @@ def test_get_connected_devices(self, mocker): removable = [b"1\n", b"1\n"] self._setup_usb_devices(mocker, disks, removable) - cli = CLI() - result = cli.get_connected_devices() + result = self.cli.get_connected_devices() assert result[0] == "/dev/sda" and result[1] == "/dev/sdb" + @mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output")) + def test_get_removable_devices_none_removable(self, mocker): + disks = [b"sda disk\n", b"sdb disk\n"] + removable = [b"0\n", b"0\n"] + + self._setup_usb_devices(mocker, disks, removable) + + result = self.cli._get_removable_devices(disks) + assert len(result) == 0 + @mock.patch("subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen")) def test_get_connected_devices_error(self, mocked_subprocess): - cli = CLI() with pytest.raises(ExportException): - cli.get_connected_devices() + self.cli.get_connected_devices() @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_NO_PART) def test_get_partitioned_device_no_partition(self, mocked_call): - cli = CLI() - - result = cli.get_partitioned_device(_DEFAULT_USB_DEVICE) - assert result == _DEFAULT_USB_DEVICE + assert self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) == _DEFAULT_USB_DEVICE @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_ONE_PART) def test_get_partitioned_device_one_partition(self, mocked_call): - cli = CLI() - - result = cli.get_partitioned_device(_DEFAULT_USB_DEVICE) - assert result == _DEFAULT_USB_DEVICE+"1" + assert self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) == _DEFAULT_USB_DEVICE+"1" @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_MULTI_PART) def test_get_partitioned_device_multi_partition(self, mocked_call): - cli = CLI() + + with pytest.raises(ExportException) as ex: + self.cli.get_partitioned_device(_SAMPLE_OUTPUT_MULTI_PART) - with pytest.raises(ExportException): - result = cli.get_partitioned_device(_SAMPLE_OUTPUT_MULTI_PART) + assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + + @mock.patch("subprocess.check_output", return_value=None) + def test_get_partitioned_device_lsblk_error(self, mocked_subprocess): + with pytest.raises(ExportException) as ex: + self.cli.get_partitioned_device(_SAMPLE_OUTPUT_ONE_PART) + + assert ex.value.sdstatus is Status.DEVICE_ERROR @mock.patch( "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output") ) def test_get_partitioned_device_multi_partition_error(self, mocked_call): - cli = CLI() - + # Make sure we wrap CalledProcessError and throw our own exception - with pytest.raises(ExportException): - cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + with pytest.raises(ExportException) as ex: + self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + + assert ex.value.sdstatus is Status.DEVICE_ERROR @mock.patch("subprocess.check_call", return_value=0) def test_is_luks_volume_true(self, mocked_call): - cli = CLI() - + # `sudo cryptsetup isLuks` returns 0 if true - assert cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) + assert self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) def test_is_luks_volume_false(self, mocked_subprocess): - cli = CLI() # `sudo cryptsetup isLuks` returns 1 if false; CalledProcessError is thrown - assert not cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) + assert not self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) def test__get_luks_name_from_headers(self, mocked_subprocess): - cli = CLI() - - result = cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + result = self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) assert result is not None and result.split("-")[1] in _SAMPLE_LUKS_HEADER.decode("utf8") @mock.patch("subprocess.check_output", return_value=b"corrupted-or-invalid-header\n") def test__get_luks_name_from_headers_error(self, mocked_subprocess): - cli = CLI() - with pytest.raises(ExportException): - result = cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + with pytest.raises(ExportException) as ex: + self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + + assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + + @mock.patch("subprocess.check_output", return_value=b"\n") + def test__get_luks_name_from_headers_error_no_header(self, mocked_subprocess): + + with pytest.raises(ExportException) as ex: + self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + + assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + + @mock.patch("subprocess.check_output", return_value=None) + def test__get_luks_name_from_headers_error_nothing_returned(self, mocked_subprocess): + + with pytest.raises(ExportException) as ex: + self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + + assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED @mock.patch( "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output") ) def test__get_luks_name_from_headers_error(self, mocked_subprocess): - cli = CLI() - with pytest.raises(ExportException): - result = cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) def test_get_luks_volume_already_unlocked(self, mocked_subprocess, mocked_os_call): - cli = CLI() - result = cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + result = self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) assert result.encryption is EncryptionScheme.LUKS assert result.unlocked - @mock.patch("os.path.exists", return_value=True) - def test__unlock_luks_volume_success(self, mocker): - cli = CLI() + @mock.patch("os.path.exists", return_value=False) + @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) + def test_get_luks_volume_still_locked(self, mocked_subprocess, mocked_os_call): + result = self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + assert result.encryption is EncryptionScheme.LUKS + assert not result.unlocked + + @mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError("check_output", 1)) + def test_get_luks_volume_error(self, mocked_subprocess): + with pytest.raises(ExportException) as ex: + self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + + assert ex.value.sdstatus is Status.DEVICE_ERROR + + @mock.patch("os.path.exists", return_value=True) + def test_unlock_luks_volume_success(self, mock_path, mocker): mock_popen = mocker.MagicMock() mock_popen_communicate = mocker.MagicMock() mock_popen.returncode = 0 @@ -169,13 +208,12 @@ def test__unlock_luks_volume_success(self, mocker): mapped_name = "luks-id-123456" vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=mapped_name, encryption=EncryptionScheme.LUKS) - key = "A key!&8*%_ A KEY" - result = cli.unlock_luks_volume(vol, key) + key = "a_key&_!" + result = self.cli.unlock_luks_volume(vol, key) assert vol.unlocked + @mock.patch("os.path.exists", return_value=True) def test_unlock_luks_volume_not_luks(self, mocker): - cli = CLI() - mock_popen = mocker.MagicMock() mock_popen.communicate = mocker.MagicMock() mock_popen.communicate.returncode = 1 # An error unlocking @@ -186,12 +224,12 @@ def test_unlock_luks_volume_not_luks(self, mocker): key = "a key!" mapped_name = "luks-id-123456" - with pytest.raises(ExportException): - cli.unlock_luks_volume(vol, key) + with pytest.raises(ExportException) as ex: + self.cli.unlock_luks_volume(vol, key) - def test_unlock_luks_volume_passphrase_failure(self, mocker): - cli = CLI() + assert ex.value.sdstatus is Status.DEVICE_ERROR + def test_unlock_luks_volume_passphrase_failure(self, mocker): mock_popen = mocker.MagicMock() mock_popen.communicate = mocker.MagicMock() mock_popen.communicate.returncode = 1 # An error unlocking @@ -203,105 +241,129 @@ def test_unlock_luks_volume_passphrase_failure(self, mocker): mapped_name = "luks-id-123456" with pytest.raises(ExportException): - cli.unlock_luks_volume(vol, key) + self.cli.unlock_luks_volume(vol, key) @mock.patch("subprocess.Popen", side_effect=subprocess.CalledProcessError("1", "Popen")) def test_unlock_luks_volume_luksOpen_exception(self, mocked_subprocess): - cli = CLI() pd = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS) key = "a key!" mapped_name = "luks-id-123456" - with pytest.raises(ExportException): - cli.unlock_luks_volume(pd, key) + with pytest.raises(ExportException) as ex: + self.cli.unlock_luks_volume(pd, key) + + assert ex.value.sdstatus is Status.DEVICE_ERROR @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"\n") @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume(self, mocked_output, mocked_call, mocked_path): - cli = CLI() + def test_mount_volume(self, mocked_call, mocked_output, mocked_path): vol = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - result = cli.mount_volume(vol) + result = self.cli.mount_volume(vol) + assert vol.mountpoint is self.cli._DEFAULT_MOUNTPOINT @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"/dev/pretend/luks-id-123456\n") @mock.patch("subprocess.check_call", return_value=0) def test_mount_volume_already_mounted(self, mocked_output, mocked_call, mocked_path): - cli = CLI() md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - result = cli.mount_volume(md) + result = self.cli.mount_volume(md) + assert result.mountpoint == "/dev/pretend/luks-id-123456" @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"\n") @mock.patch("subprocess.check_call", return_value=0) def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess, mocked_path): - cli = CLI() md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - result = cli.mount_volume(md) - - assert result.mapped_name == _PRETEND_LUKS_ID + assert self.cli.mount_volume(md).mapped_name == _PRETEND_LUKS_ID @mock.patch("subprocess.check_output", return_value=b"\n") @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) def test_mount_volume_error(self, mocked_subprocess, mocked_output): - cli = CLI() + md = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + with pytest.raises(ExportException) as ex: + self.cli.mount_volume(md) + + assert ex.value.sdstatus is Status.ERROR_MOUNT + + @mock.patch("os.path.exists", return_value=False) + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test_mount_at_mountpoint_mkdir_error(self, mocked_subprocess, mocked_path): md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - with pytest.raises(ExportException): - cli.mount_volume(md) + with pytest.raises(ExportException) as ex: + volume = self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) + assert not volume.writable + + assert ex.value.sdstatus is Status.ERROR_MOUNT + + @mock.patch("os.path.exists", return_value=True) + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test_mount_at_mountpoint_mounting_error(self, mocked_subprocess, mocked_path): + md = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + + with pytest.raises(ExportException) as ex: + volume = self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) + assert not volume.writable + + assert ex.value.sdstatus is Status.ERROR_MOUNT @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_call", return_value=0) def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): - cli = CLI() - mounted = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, - mountpoint=cli._DEFAULT_MOUNTPOINT, + mountpoint=self.cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) - result = cli._unmount_volume(mounted) - + result = self.cli._unmount_volume(mounted) + assert result.mountpoint is None @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) def test__unmount_volume_error(self, mocked_subprocess, mocked_mountpath): - cli = CLI() - mounted = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, - mountpoint=cli._DEFAULT_MOUNTPOINT, + mountpoint=self.cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) - with pytest.raises(ExportException): - result = cli._unmount_volume(mounted) + with pytest.raises(ExportException) as ex: + self.cli._unmount_volume(mounted) + + assert ex.value.sdstatus is Status.DEVICE_ERROR @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_call", return_value=0) def test__close_luks_volume(self, mocked_subprocess, mocked_os_call): - cli = CLI() - mapped = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, @@ -309,58 +371,126 @@ def test__close_luks_volume(self, mocked_subprocess, mocked_os_call): ) # If call completes without error, drive was successfully closed with luksClose - cli._close_luks_volume(mapped) + self.cli._close_luks_volume(mapped) @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) def test__close_luks_volume_error(self, mocked_subprocess, mocked_os_call): - cli = CLI() - mapped = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - with pytest.raises(ExportException): - cli._close_luks_volume(mapped) + with pytest.raises(ExportException) as ex: + self.cli._close_luks_volume(mapped) + + assert ex.value.sdstatus is Status.DEVICE_ERROR @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) def test__remove_temp_directory_error(self, mocked_subprocess): - cli = CLI() - with pytest.raises(ExportException): - cli._remove_temp_directory("tmp") + self.cli._remove_temp_directory("tmp") @mock.patch("subprocess.check_call", return_value=0) def test_write_to_disk(self, mock_check_call): - cli = CLI() + # Temporarily patch a method, to later assert it is called + patch = mock.patch.object(self.cli, "cleanup_drive_and_tmpdir") + patch.return_value = mock.MagicMock() + patch.start() vol = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, - mountpoint=cli._DEFAULT_MOUNTPOINT, + mountpoint=self.cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) submission = Archive("testfile", TEST_CONFIG) - cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) + self.cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) + self.cli.cleanup_drive_and_tmpdir.assert_called_once() + + # Don't want to patch it indefinitely though, that will mess with the other tests + patch.stop() @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) - def test_write_to_disk_error_still_does_cleanup(self, mock_call, mocker): - cli = CLI() - cli.cleanup_drive_and_tmpdir = mocker.MagicMock() + def test_write_to_disk_error_still_does_cleanup(self, mock_call): + # see above - patch internal method only for this test + patch = mock.patch.object(self.cli, "cleanup_drive_and_tmpdir") + patch.return_value = mock.MagicMock() + patch.start() vol = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, - mountpoint=cli._DEFAULT_MOUNTPOINT, + mountpoint=self.cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) submission = Archive("testfile", TEST_CONFIG) with pytest.raises(ExportException): - cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) - cleanup_mock.assert_called_once() + self.cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) + self.cli.cleanup_drive_and_tmpdir.assert_called_once() + + patch.stop() + + @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + def test_cleanup_drive_and_tmpdir_error(self, mocked_subprocess): + submission = Archive("testfile", TEST_CONFIG) + mock_volume = mock.MagicMock(Volume) + + with pytest.raises(ExportException) as ex: + self.cli.cleanup_drive_and_tmpdir(mock_volume, submission.tmpdir) + assert ex.value.sdstatus is Status.ERROR_EXPORT_CLEANUP + + @mock.patch("os.path.exists", return_value=False) + @mock.patch("subprocess.check_call", return_value=0) + def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): + submission = Archive("testfile", TEST_CONFIG) + vol = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + mountpoint=self.cli._DEFAULT_MOUNTPOINT, + encryption=EncryptionScheme.LUKS, + ) + + close_patch = mock.patch.object(self.cli, "_close_luks_volume") + remove_tmpdir_patch = mock.patch.object(self.cli, "_remove_temp_directory") + + close_mock = close_patch.start() + rm_tpdir_mock = remove_tmpdir_patch.start() + + # That was all setup. Here's our test + self.cli.cleanup_drive_and_tmpdir(vol, submission.tmpdir) + + close_mock.assert_called_once_with(vol) + rm_tpdir_mock.assert_called_once_with(submission.tmpdir) + + # Undo patch changes + close_patch.stop() + remove_tmpdir_patch.stop() + + @mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output")) + def test_mountpoint_error(self, mock_subprocess): + with pytest.raises(ExportException) as ex: + self.cli._get_mountpoint(Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS)) + + assert ex.value.sdstatus is Status.ERROR_MOUNT + + @mock.patch("os.path.exists", return_value=False) + def test_mount_mkdir_fails(self, mocked_path): + mock_mountpoint = mock.patch.object(self.cli, "_get_mountpoint") + mock_mountpoint.return_value = None + # mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output")) + + mock_volume = mock.MagicMock() + mock_volume.device_name = _DEFAULT_USB_DEVICE_ONE_PART + mock_volume.mapped_name = _PRETEND_LUKS_ID + mock_volume.EncryptionScheme = EncryptionScheme.LUKS + mock_volume.unlocked = True + + with pytest.raises(ExportException) as ex: + self.cli.mount_volume(mock_volume) + assert ex.value.sdstatus is Status.ERROR_MOUNT \ No newline at end of file diff --git a/tests/disk/test_service.py b/tests/disk/test_service.py index 9a418593b..1454cbf0c 100644 --- a/tests/disk/test_service.py +++ b/tests/disk/test_service.py @@ -9,7 +9,6 @@ import subprocess from subprocess import CalledProcessError -from securedrop_export.enums import ExportEnum from securedrop_export.exceptions import ExportException from securedrop_export.disk.status import Status from securedrop_export.disk.new_status import Status as NewStatus @@ -77,29 +76,37 @@ def test_check_usb(self): assert status is Status.LEGACY_USB_CONNECTED - def test_check_usb_error_no_devices(self): - self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=NewStatus.NO_DEVICE_DETECTED) + def test_no_devices_connected(self): + self.mock_cli.get_connected_devices.return_value = [] + with pytest.raises(ExportException) as ex: + self.service.check_connected_devices() + assert ex.value.sdstatus is Status.LEGACY_USB_NOT_CONNECTED + + def test_too_many_devices_connected(self): + self.mock_cli.get_connected_devices.return_value = [SAMPLE_OUTPUT_USB, "/dev/sdb"] with pytest.raises(ExportException) as ex: self.service.check_connected_devices() - assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - def test_check_usb_error_multiple_devices(self): - self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=NewStatus.MULTI_DEVICE_DETECTED) + def test_device_is_not_luks(self): + self.mock_cli.is_luks_volume.return_value = False + # When VeraCrypt is supported, this will no longer be an exception + # and the return status will change with pytest.raises(ExportException) as ex: - self.service.check_connected_devices() + self.service.check_disk_format() - assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - def test_check_usb_error_while_checking(self): + def test_check_usb_error(self): self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=Status.LEGACY_ERROR_USB_CHECK) with pytest.raises(ExportException) as ex: self.service.check_connected_devices() - assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_CHECK def test_check_disk_format(self): status = self.service.check_disk_format() @@ -135,3 +142,39 @@ def test_export_write_error(self): self.service.export() assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_WRITE + + def test_export_throws_new_exception_return_legacy_status(self): + self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=NewStatus.ERROR_MOUNT) + + with pytest.raises(ExportException) as ex: + self.service.export() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_MOUNT + + @mock.patch("os.path.exists", return_value=True) + def test_write_error_returns_legacy_status(self, mock_path): + self.mock_cli.is_luks_volume.return_value=True + self.mock_cli.write_data_to_device.side_effect = ExportException(sdstatus=NewStatus.ERROR_EXPORT) + + with pytest.raises(ExportException) as ex: + self.service.export() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_WRITE + + @mock.patch("os.path.exists", return_value=True) + def test_unlock_error_returns_legacy_status(self, mock_path): + self.mock_cli.unlock_luks_volume.side_effect = ExportException(sdstatus=NewStatus.ERROR_UNLOCK_LUKS) + + with pytest.raises(ExportException) as ex: + self.service.export() + + assert ex.value.sdstatus is Status.LEGACY_USB_BAD_PASSPHRASE + + @mock.patch("os.path.exists", return_value=True) + def test_unexpected_error_returns_legacy_status_generic(self, mock_path): + self.mock_cli.unlock_luks_volume.side_effect = ExportException(sdstatus=NewStatus.DEVICE_ERROR) + + with pytest.raises(ExportException) as ex: + self.service.export() + + assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC \ No newline at end of file diff --git a/tests/print/test_service.py b/tests/print/test_service.py index 569ecdd2c..317cc992d 100644 --- a/tests/print/test_service.py +++ b/tests/print/test_service.py @@ -8,8 +8,7 @@ from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive from securedrop_export.print.service import Service -from securedrop_export.print.service import Status - +from securedrop_export.print.status import Status SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa @@ -17,114 +16,121 @@ TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) -def test_get_good_printer_uri_laserjet(mocked_call): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) - - result = service._get_printer_uri() +class PrinterTest: - assert result == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + @classmethod + def setup_class(cls): + cls.submission = Archive("testfile", TEST_CONFIG) + cls.service = Service(submission) + @classmethod + def teardown_class(cls): + cls.service = None + cls.submission = None -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) -def test_get_good_printer_uri_brother(mocked_call): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) + def test_get_good_printer_uri_laserjet(mocked_call): + assert self.service._get_printer_uri() == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" - result = service._get_printer_uri() - assert result == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) + def test_get_good_printer_uri_brother(mocked_call): + assert self.service._get_printer_uri() == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" -@mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) -def test_get_bad_printer_uri(mocked_call, capsys, mocker): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) - expected_status = Status.ERROR_PRINTER_NOT_FOUND # todo + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) + def test_get_bad_printer_uri(mocked_call, capsys, mocker): + with pytest.raises(ExportException) as ex: + self.service._get_printer_uri() - with pytest.raises(ExportException): - service._get_printer_uri() + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_FOUND + @pytest.mark.parametrize( + "open_office_paths", + [ + "/tmp/whatver/thisisadoc.doc" + "/home/user/Downloads/thisisadoc.xlsx" + "/home/user/Downloads/file.odt" + "/tmp/tmpJf83j9/secret.pptx" + ], + ) + def test_is_open_office_file(capsys, open_office_paths): + assert self.service._is_open_office_file(open_office_paths) -@pytest.mark.parametrize( - "open_office_paths", - [ - "/tmp/whatver/thisisadoc.doc" - "/home/user/Downloads/thisisadoc.xlsx" - "/home/user/Downloads/file.odt" - "/tmp/tmpJf83j9/secret.pptx" - ], -) -def test_is_open_office_file(capsys, open_office_paths): - submission = Archive("", TEST_CONFIG) - service = Service(submission) - assert service._is_open_office_file(open_office_paths) + @pytest.mark.parametrize( + "open_office_paths", + [ + "/tmp/whatver/thisisadoc.doccc" + "/home/user/Downloads/thisisa.xlsx.zip" + "/home/user/Downloads/file.odz" + "/tmp/tmpJf83j9/secret.gpg" + ], + ) + def test_is_not_open_office_file(capsys, open_office_paths): + assert not self.service._is_open_office_file(open_office_paths) + @mock.patch("subprocess.run") + def test_install_printer_ppd_laserjet(mocker): + ppd = self.service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") + assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" -@pytest.mark.parametrize( - "open_office_paths", - [ - "/tmp/whatver/thisisadoc.doccc" - "/home/user/Downloads/thisisa.xlsx.zip" - "/home/user/Downloads/file.odz" - "/tmp/tmpJf83j9/secret.gpg" - ], -) -def test_is_not_open_office_file(capsys, open_office_paths): - submission = Archive("", TEST_CONFIG) - service = Service(submission) - assert not service._is_open_office_file(open_office_paths) + @mock.patch("subprocess.run") + def test_install_printer_ppd_brother(mocker): + ppd = self.service._install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") + assert ppd == "/usr/share/cups/model/br7030.ppd" -@mock.patch("subprocess.run") -def test_install_printer_ppd_laserjet(mocker): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) - ppd = service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") - assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" + def test_install_printer_ppd_error_no_driver(mocker): + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) + with pytest.raises(ExportException) as ex: + self.service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") -@mock.patch("subprocess.run") -def test_install_printer_ppd_brother(mocker): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) - ppd = service._install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") - assert ppd == "/usr/share/cups/model/br7030.ppd" + assert ex.value.sdstatus is Status.ERROR_PRINTER_DRIVER_UNAVAILABLE + def test_install_printer_ppd_error_not_supported(mocker): + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) -def test_install_printer_ppd_error_no_driver(mocker): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) + with pytest.raises(ExportException) as ex: + self.service._install_printer_ppd("usb://Not/Supported?serial=A00000A000000") - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED - with pytest.raises(ExportException) as ex: - service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") + def test_setup_printer_error(mocker): + mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - assert ex.value.sdstatus is Status.ERROR_PRINTER_DRIVER_UNAVAILABLE + with pytest.raises(ExportException) as ex: + self.service._setup_printer( + "usb://Brother/HL-L2320D%20series?serial=A00000A000000", + "/usr/share/cups/model/br7030.ppd", + ) + assert ex.value.sdstatus is Status.ERROR_PRINTER_INSTALL -def test_install_printer_ppd_error_not_supported(mocker): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - with pytest.raises(ExportException) as ex: - service._install_printer_ppd("usb://Not/Supported?serial=A00000A000000") + def test_safe_check_call(self): + # This works, since `ls` is a valid comand + self.service.safe_check_call(["ls"], Status.TEST_SUCCESS) - assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED + def test_safe_check_call_invalid_call(self): + with pytest.raises(ExportException) as ex: + self.service.safe_check_call(["ls", "kjdsfhkdjfh"], Status.ERROR_PRINT) + assert ex.value.sdstatus is FakeStatus.ERROR_PRINT -def test_setup_printer_error(mocker): - submission = Archive("testfile", TEST_CONFIG) - service = Service(submission) - - mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) - - with pytest.raises(ExportException) as ex: - service._setup_printer( - "usb://Brother/HL-L2320D%20series?serial=A00000A000000", - "/usr/share/cups/model/br7030.ppd", + def test_safe_check_call_write_to_stderr_and_ignore_error(self): + self.service.safe_check_call( + ["python3", "-c", "import sys;sys.stderr.write('hello')"], + Status.TEST_SUCCESS, + ignore_stderr_startswith=b"hello", ) - assert ex.value.sdstatus is Status.ERROR_PRINTER_INSTALL \ No newline at end of file + def test_safe_check_call_write_to_stderr_wrong_ignore_param(self): + # This one writes to stderr and ignores the wrong string, so we expect an exception + with pytest.raises(ExportException) as ex: + self.service.safe_check_call( + ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], + Status.ERROR_PRINT, + ignore_stderr_startswith=b"world", + ) + + assert ex.value.sdstatus is Status.ERROR_PRINT \ No newline at end of file diff --git a/tests/test_archive.py b/tests/test_archive.py index 0437e94ff..eb45b5dd3 100644 --- a/tests/test_archive.py +++ b/tests/test_archive.py @@ -475,3 +475,20 @@ def test_valid_encryption_config(capsys): assert config.encryption_method == "luks" +def test_cannot_use_metadata_constructor(): + """ + Require the `create_and_validate()` method for returning a Metadata object + """ + with pytest.raises(ValueError): + Metadata(object(), tempfile.mkdtemp()) + + +@mock.patch("json.loads", side_effect=json.decoder.JSONDecodeError("ugh", "badjson", 0)) +def test_metadata_parsing_error(mock_json): + """ + Handle exception caused when loading metadata JSON + """ + with pytest.raises(ExportException) as ex: + Metadata.create_and_validate(tempfile.mkdtemp()) + + assert ex.value.sdstatus is Status.ERROR_METADATA_PARSING \ No newline at end of file diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py new file mode 100644 index 000000000..577fae13a --- /dev/null +++ b/tests/test_exceptions.py @@ -0,0 +1,20 @@ +import pytest +import signal + +from securedrop_export.exceptions import handler, TimeoutException + +def test_handler(): + signal.signal(signal.SIGALRM, handler) + signal.setitimer(signal.ITIMER_REAL, 0.001) + + with pytest.raises(TimeoutException) as ex: + _run_handler_routine() + +def _run_handler_routine(): + try: + while True: + continue + except TimeoutException: + raise + + \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index aa020acc6..2254d158f 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -2,16 +2,10 @@ from unittest import mock import os -#from securedrop_export.main import __main__, _exit_gracefully # noqa: F401 -from securedrop_export.main import Status, _extract_and_run, _exit_gracefully, _write_status # noqa: F401 +from securedrop_export.main import Status, entrypoint, _extract_and_run, _exit_gracefully, _write_status # noqa: F401 from securedrop_export.archive import Archive -# This import ensures at least the imports in main.__main__ -# are executed during a test run TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") -BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") -ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") - class TestMain(): @@ -51,7 +45,7 @@ def test_write_status(self, status, capsys): captured = capsys.readouterr() assert captured.err == status.value + "\n" - @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0"]) + @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0", None]) def test_write_status_error(self, invalid_status, capsys): with pytest.raises(ValueError): @@ -64,3 +58,6 @@ def test__extract_and_run(self): def test__extract_and_run_failure(self): pass + + def test_entrypoint(self): + pass diff --git a/tests/test_util.py b/tests/test_util.py index 297f08b93..5a1f56aa9 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,39 +1,8 @@ import pytest from securedrop_export import utils -from securedrop_export.enums import ExportEnum from securedrop_export.exceptions import ExportException -class FakeStatus(ExportEnum): - OH_NO = "Oh No!" - NO_PROBLEM = "No Problem!" - class TestUtil: - def test_safe_check_call(self): - # This works, since `ls` is a valid comand - utils.safe_check_call(["ls"], FakeStatus.NO_PROBLEM) - - def test_safe_check_call_invalid_call(self): - with pytest.raises(ExportException) as ex: - utils.safe_check_call(["ls", "kjdsfhkdjfh"], FakeStatus.OH_NO) - - assert ex.value.sdstatus is FakeStatus.OH_NO - - def test_safe_check_call_write_to_stderr_and_ignore_error(self): - utils.safe_check_call( - ["python3", "-c", "import sys;sys.stderr.write('hello')"], - FakeStatus.NO_PROBLEM, - ignore_stderr_startswith=b"hello", - ) - - def test_safe_check_call_write_to_stderr_wrong_ignore_param(self): - # This one writes to stderr and ignores the wrong string, so we expect an exception - with pytest.raises(ExportException) as ex: - utils.safe_check_call( - ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], - FakeStatus.OH_NO, - ignore_stderr_startswith=b"world", - ) - - assert ex.value.sdstatus is FakeStatus.OH_NO \ No newline at end of file + pass #todo \ No newline at end of file From b52e68b665606dc7e59816f69b4c907045ebd4c2 Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 6 Oct 2022 17:42:50 -0700 Subject: [PATCH 538/751] Rename utils.py to directory_util, add test coverage, show new name in semgrep rules. i#add directory_util.py test coverage, show new name in semgrep rules --- .semgrep/custom-rules.yaml | 4 +- securedrop_export/archive.py | 2 +- .../{utils.py => directory_util.py} | 3 - securedrop_export/main.py | 2 +- tests/test_directory_util.py | 65 +++++++++++++++++++ tests/test_util.py | 8 --- 6 files changed, 69 insertions(+), 15 deletions(-) rename securedrop_export/{utils.py => directory_util.py} (99%) create mode 100644 tests/test_directory_util.py delete mode 100644 tests/test_util.py diff --git a/.semgrep/custom-rules.yaml b/.semgrep/custom-rules.yaml index 6793bb298..38f60f003 100644 --- a/.semgrep/custom-rules.yaml +++ b/.semgrep/custom-rules.yaml @@ -47,7 +47,7 @@ rules: languages: - python severity: ERROR - message: Possible path traversal or insecure directory and file permissions through os.mkdir(). Use securedrop_export.utils.safe_mkdir instead. + message: Possible path traversal or insecure directory and file permissions through os.mkdir(). Use securedrop_export.directory_util.safe_mkdir instead. patterns: - pattern: "....mkdir(...)" - pattern-not-inside: | @@ -58,7 +58,7 @@ rules: languages: - python severity: ERROR - message: Possible path traversal or insecure directory and file permissions through os.makedirs(). Use securedrop_export.utils.safe_mkdir instead. + message: Possible path traversal or insecure directory and file permissions through os.makedirs(). Use securedrop_export.directory_util.safe_mkdir instead. patterns: - pattern: "....makedirs(...)" - pattern-not-inside: | diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py index c2b192e83..10c62bb95 100755 --- a/securedrop_export/archive.py +++ b/securedrop_export/archive.py @@ -12,7 +12,7 @@ from securedrop_export.exceptions import ExportException from securedrop_export.status import BaseStatus from securedrop_export.command import Command -from securedrop_export.utils import safe_extractall +from securedrop_export.directory_util import safe_extractall logger = logging.getLogger(__name__) diff --git a/securedrop_export/utils.py b/securedrop_export/directory_util.py similarity index 99% rename from securedrop_export/utils.py rename to securedrop_export/directory_util.py index c7f9557d4..b4608851c 100644 --- a/securedrop_export/utils.py +++ b/securedrop_export/directory_util.py @@ -5,9 +5,6 @@ import subprocess import logging -from securedrop_export.exceptions import ExportException - - logger = logging.getLogger(__name__) diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 9860bbe12..13b46e15d 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -8,13 +8,13 @@ from securedrop_export.archive import Archive, Metadata from securedrop_export.command import Command from securedrop_export.status import BaseStatus +from securedrop_export.directory_util import safe_mkdir from securedrop_export.disk.service import Service as ExportService from securedrop_export.print.service import Service as PrintService from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_export import __version__ -from securedrop_export.utils import safe_mkdir CONFIG_PATH = "/etc/sd-export-config.json" DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") diff --git a/tests/test_directory_util.py b/tests/test_directory_util.py new file mode 100644 index 000000000..18eb6dd2a --- /dev/null +++ b/tests/test_directory_util.py @@ -0,0 +1,65 @@ +import pytest +import os + +from pathlib import Path +from securedrop_export import directory_util +from securedrop_export.exceptions import ExportException + +class TestUtil: + + _TMPDIR_PATH = "/tmp/pretendium/" + _REL_TRAVERSAL = "../../../whee" + _SAFE_RELPATH = "./hi" + _SAFE_RELPATH2 = "yay/a/path" + _UNSAFE_RELPATH = "lgtm/../ohwait" + + def setup_method(self, method): + pass + + def teadown_method(self, method): + if (os.path.exists(self._TMPDIR_PATH)): + os.remove(self._TMPDIR_PATH) + + def test_safe_mkdir_error_base_relpath(self): + with pytest.raises(ValueError): + directory_util.safe_mkdir(base_path=Path(".")) + + def test_safe_mkdir_error_basepath_path_traversal(self): + with pytest.raises(ValueError): + directory_util.safe_mkdir(f"{self._TMPDIR_PATH}{self._REL_TRAVERSAL}") + + def test_safe_mkdir_error_relpath_path_traversal(self): + with pytest.raises(ValueError): + directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._REL_TRAVERSAL}") + + def test_safe_mkdir_success(self): + directory_util.safe_mkdir(f"{self._TMPDIR_PATH}") + + def test_safe_mkdir_success_with_relpath(self): + directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._SAFE_RELPATH}") + + assert (os.path.exists(f"{self._TMPDIR_PATH}{self._SAFE_RELPATH}")) + + def test_safe_mkdir_success_another_relpath(self): + directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._SAFE_RELPATH2}") + + assert (os.path.exists(f"{self._TMPDIR_PATH}{self._SAFE_RELPATH2}")) + + def test_safe_mkdir_weird_path(self): + with pytest.raises(ValueError): + directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._UNSAFE_RELPATH}") + + def test__check_all_permissions_path_missing(self): + with pytest.raises(ValueError): + directory_util._check_all_permissions(f"{self._TMPDIR_PATH}", f"{self._SAFE_RELPATH}") + + def test_check_dir_perms_unsafe(self): + path = Path(f"{self._TMPDIR_PATH}{self._SAFE_RELPATH}") + + directory_util.safe_mkdir(path) + + # Not what we want, ever + path.chmod(0o666) + + with pytest.raises(RuntimeError): + directory_util._check_dir_permissions(path) diff --git a/tests/test_util.py b/tests/test_util.py deleted file mode 100644 index 5a1f56aa9..000000000 --- a/tests/test_util.py +++ /dev/null @@ -1,8 +0,0 @@ -import pytest - -from securedrop_export import utils -from securedrop_export.exceptions import ExportException - -class TestUtil: - - pass #todo \ No newline at end of file From 5e398ad61fafa45589f55355718ac5f4d90fb0cc Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 6 Oct 2022 17:43:04 -0700 Subject: [PATCH 539/751] Remove unused config file param from Archive and clean up test_archive.py --- securedrop_export/archive.py | 2 +- securedrop_export/main.py | 3 +-- tests/disk/test_cli.py | 10 +++----- tests/disk/test_service.py | 3 +-- tests/sd-export-config-bad-2.json | 3 --- tests/sd-export-config-bad.json | 3 --- tests/sd-export-config.json | 3 --- tests/test_archive.py | 41 ++++++++++++++----------------- tests/test_main.py | 6 ++--- 9 files changed, 27 insertions(+), 47 deletions(-) delete mode 100644 tests/sd-export-config-bad-2.json delete mode 100644 tests/sd-export-config-bad.json delete mode 100644 tests/sd-export-config.json diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py index 10c62bb95..0cbb98273 100755 --- a/securedrop_export/archive.py +++ b/securedrop_export/archive.py @@ -89,7 +89,7 @@ def validate(self): class Archive(object): - def __init__(self, archive, config_path): + def __init__(self, archive): os.umask(0o077) self.archive = archive self.submission_dirname = os.path.basename(self.archive).split(".")[0] diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 13b46e15d..408173649 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -16,7 +16,6 @@ from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_export import __version__ -CONFIG_PATH = "/etc/sd-export-config.json" DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") LOG_DIR_NAME = "logs" EXPORT_LOG_FILENAME = "export.log" @@ -43,7 +42,7 @@ def entrypoint(): _exit_gracefully(submission=None, status=Status.ERROR_LOGGING) logger.info("Starting SecureDrop Export {}".format(__version__)) - data = Archive(sys.argv[1], CONFIG_PATH) + data = Archive(sys.argv[1]) try: # Halt immediately if target file is absent diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index bd92e4abd..55d79a40e 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -13,8 +13,6 @@ from securedrop_export.archive import Archive -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") - _DEFAULT_USB_DEVICE = "/dev/sda" _DEFAULT_USB_DEVICE_ONE_PART = "/dev/sda1" @@ -406,7 +404,7 @@ def test_write_to_disk(self, mock_check_call): encryption=EncryptionScheme.LUKS, ) - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") self.cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) self.cli.cleanup_drive_and_tmpdir.assert_called_once() @@ -427,7 +425,7 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call): mountpoint=self.cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") with pytest.raises(ExportException): self.cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) @@ -437,7 +435,7 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call): @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) def test_cleanup_drive_and_tmpdir_error(self, mocked_subprocess): - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") mock_volume = mock.MagicMock(Volume) with pytest.raises(ExportException) as ex: @@ -447,7 +445,7 @@ def test_cleanup_drive_and_tmpdir_error(self, mocked_subprocess): @mock.patch("os.path.exists", return_value=False) @mock.patch("subprocess.check_call", return_value=0) def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") vol = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, diff --git a/tests/disk/test_service.py b/tests/disk/test_service.py index 1454cbf0c..6cda02716 100644 --- a/tests/disk/test_service.py +++ b/tests/disk/test_service.py @@ -18,7 +18,6 @@ from securedrop_export.disk.service import Service from securedrop_export.disk.cli import CLI -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") SAMPLE_OUTPUT_LSBLK_NO_PART = b"disk\ncrypt" # noqa SAMPLE_OUTPUT_USB = "/dev/sda" # noqa SAMPLE_OUTPUT_USB_PARTITIONED = "/dev/sda1" @@ -46,7 +45,7 @@ def _setup_submission(cls) -> Archive: """ Helper method to set up sample archive """ - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: diff --git a/tests/sd-export-config-bad-2.json b/tests/sd-export-config-bad-2.json deleted file mode 100644 index f69e25b7a..000000000 --- a/tests/sd-export-config-bad-2.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "no_pci_bus_id": "nope" -} diff --git a/tests/sd-export-config-bad.json b/tests/sd-export-config-bad.json deleted file mode 100644 index f7cbf8d7a..000000000 --- a/tests/sd-export-config-bad.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "pciishf. i3u 2 -} diff --git a/tests/sd-export-config.json b/tests/sd-export-config.json deleted file mode 100644 index d1167cf5a..000000000 --- a/tests/sd-export-config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "pci_bus_id": "2" -} diff --git a/tests/test_archive.py b/tests/test_archive.py index eb45b5dd3..4e840abf3 100644 --- a/tests/test_archive.py +++ b/tests/test_archive.py @@ -12,11 +12,6 @@ from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive, Metadata, Status -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") -BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad.json") -ANOTHER_BAD_TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config-bad-2.json") - - def test_extract_tarball(): """ Check that we can successfully extract a valid tarball. @@ -47,7 +42,7 @@ def test_extract_tarball(): archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" submission.extract_tarball() @@ -86,7 +81,7 @@ def test_extract_tarball_with_symlink(): archive.addfile(symlink_info) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" submission.extract_tarball() @@ -121,9 +116,9 @@ def test_extract_tarball_raises_if_doing_path_traversal(): archive.addfile(traversed_file_info, BytesIO(content)) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) - with pytest.raises(ExportException): # prev: SystemExit + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/traversed") @@ -158,9 +153,9 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): archive.addfile(dir_info) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) - with pytest.raises(ExportException): # prev: SystemExit + with pytest.raises(ExportException): submission.extract_tarball() assert not os.path.exists("/tmp/traversed") @@ -197,7 +192,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): archive.addfile(symlink_info, BytesIO(content)) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) with pytest.raises(ExportException): submission.extract_tarball() @@ -236,7 +231,7 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): archive.addfile(symlink_info, BytesIO(content)) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) with pytest.raises(ExportException): submission.extract_tarball() @@ -272,7 +267,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): archive.addfile(file_info, BytesIO(content)) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) with pytest.raises(ExportException): submission.extract_tarball() @@ -309,7 +304,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): archive.add(symlink_path, "symlink") archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) with pytest.raises(ExportException): submission.extract_tarball() @@ -354,7 +349,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to archive.add(file_path, "symlink/unsafe") archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) with pytest.raises(ExportException): submission.extract_tarball() @@ -391,7 +386,7 @@ def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): archive.addfile(symlink_info, BytesIO(content)) archive.close() - submission = Archive(archive_path, TEST_CONFIG) + submission = Archive(archive_path) with pytest.raises(ExportException): submission.extract_tarball() @@ -400,7 +395,7 @@ def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): def test_empty_config(capsys): - Archive("testfile", TEST_CONFIG) + Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -411,7 +406,7 @@ def test_empty_config(capsys): def test_valid_printer_test_config(capsys): - Archive("testfile", TEST_CONFIG) + Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -424,7 +419,7 @@ def test_valid_printer_test_config(capsys): def test_valid_printer_config(capsys): - Archive("", TEST_CONFIG) + Archive("") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: @@ -437,7 +432,7 @@ def test_valid_printer_config(capsys): def test_invalid_encryption_config(capsys): - Archive("testfile", TEST_CONFIG) + Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) @@ -450,7 +445,7 @@ def test_invalid_encryption_config(capsys): assert ex.value.sdstatus is Status.ERROR_ARCHIVE_METADATA def test_malforned_config(capsys): - Archive("testfile", TEST_CONFIG) + Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) @@ -463,7 +458,7 @@ def test_malforned_config(capsys): assert ex.value.sdstatus is Status.ERROR_METADATA_PARSING def test_valid_encryption_config(capsys): - Archive("testfile", TEST_CONFIG) + Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: diff --git a/tests/test_main.py b/tests/test_main.py index 2254d158f..e309ec305 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -5,12 +5,10 @@ from securedrop_export.main import Status, entrypoint, _extract_and_run, _exit_gracefully, _write_status # noqa: F401 from securedrop_export.archive import Archive -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") - class TestMain(): def test_exit_gracefully_no_exception(self, capsys): - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") with pytest.raises(SystemExit) as sysexit: _exit_gracefully(submission, Status.ERROR_GENERIC) @@ -24,7 +22,7 @@ def test_exit_gracefully_no_exception(self, capsys): def test_exit_gracefully_exception(self, capsys): - submission = Archive("testfile", TEST_CONFIG) + submission = Archive("testfile") with pytest.raises(SystemExit) as sysexit: exception = mock.MagicMock() From 65920dcd0a48d38f12bb340fe7d4930227857206 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 11 Oct 2022 15:52:21 -0700 Subject: [PATCH 540/751] Apply black and linter. Improve test coverage. TimeoutException no longer inherits from ExportException. Small fix to export metadata and get_partitioned_devices. --- securedrop_export/archive.py | 80 +++---- securedrop_export/command.py | 4 +- securedrop_export/directory_util.py | 15 +- securedrop_export/disk/cli.py | 126 ++++++---- securedrop_export/disk/new_service.py | 17 +- securedrop_export/disk/new_status.py | 25 +- securedrop_export/disk/service.py | 62 +++-- securedrop_export/disk/status.py | 9 +- securedrop_export/disk/volume.py | 8 +- securedrop_export/exceptions.py | 4 +- securedrop_export/main.py | 162 +++++++------ securedrop_export/print/service.py | 73 +++--- securedrop_export/print/status.py | 6 +- securedrop_export/status.py | 2 + setup.py | 4 +- tests/disk/test_cli.py | 185 ++++++++++----- tests/disk/test_service.py | 82 ++++--- tests/disk/test_volume.py | 21 +- tests/print/test_service.py | 317 +++++++++++++++++++++++--- tests/test_archive.py | 79 ++++--- tests/test_directory_util.py | 55 +++-- tests/test_exceptions.py | 6 +- tests/test_main.py | 166 ++++++++++++-- 23 files changed, 1058 insertions(+), 450 deletions(-) diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py index 0cbb98273..2ec50b5c8 100755 --- a/securedrop_export/archive.py +++ b/securedrop_export/archive.py @@ -4,9 +4,6 @@ import json import logging import os -import shutil -import subprocess -import sys import tempfile from securedrop_export.exceptions import ExportException @@ -16,51 +13,26 @@ logger = logging.getLogger(__name__) + class Status(BaseStatus): ERROR_ARCHIVE_METADATA = "ERROR_ARCHIVE_METADATA" ERROR_METADATA_PARSING = "ERROR_METADATA_PARSING" ERROR_EXTRACTION = "ERROR_EXTRACTION" + class Metadata(object): """ Object to parse, validate and store json metadata from the sd-export archive. - - Create a Metadata object by using the `create_and_validate()` method to - ensure well-formed and valid metadata. """ METADATA_FILE = "metadata.json" SUPPORTED_ENCRYPTION_METHODS = ["luks"] - # Slightly underhanded way of ensuring that a Metadata object is not instantiated - # directly; instead, the create_and_validate() method is used - __key = object() - - - def __init__(self, key: object, archive_path: str): - if not key == Metadata.__key: - raise ValueError("Must use create_and_validate() to create Metadata object") - - # Initialize + def __init__(self, archive_path: str): self.metadata_path = os.path.join(archive_path, self.METADATA_FILE) - - @classmethod - def create_and_validate(cls, archive_path) -> 'Metadata': - """ - Create and validate metadata object. Raise ExportException for invalid metadata. - """ - md = Metadata(cls.__key, archive_path) - md.validate() - - return md - - - def validate(self): - """ - Validate Metadata. - Throw ExportException if invalid state is found. - """ + def validate(self) -> "Metadata": + # Read metadata json and set relevant attributes try: with open(self.metadata_path) as f: logger.info("Parsing archive metadata") @@ -69,7 +41,7 @@ def validate(self): self.encryption_method = json_config.get("encryption_method", None) self.encryption_key = json_config.get("encryption_key", None) logger.info( - "Exporting to device {} with encryption_method {}".format( + "Target: {}, encryption_method {}".format( self.export_method, self.encryption_method ) ) @@ -78,32 +50,52 @@ def validate(self): logger.error("Metadata parsing failure") raise ExportException(sdstatus=Status.ERROR_METADATA_PARSING) from ex - # Validate metadata - this will fail if command is not in list of supported commands - try: + # Validate action - fails if command is not in list of supported commands + try: + logger.debug("Validate export action") self.command = Command(self.export_method) - if self.command is Command.EXPORT and not self.encryption_method in self.SUPPORTED_ENCRYPTION_METHODS: + if ( + self.command is Command.EXPORT + and self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS + ): logger.error("Unsupported encryption method") raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) except ValueError as v: - raise ExportException(sdstatus=Status.ERROR_METADATA_PARSING) from v + raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) from v + + return self class Archive(object): - def __init__(self, archive): + def __init__(self, archive_path: str): os.umask(0o077) - self.archive = archive - self.submission_dirname = os.path.basename(self.archive).split(".")[0] + self.archive = archive_path self.target_dirname = "sd-export-{}".format( datetime.datetime.now().strftime("%Y%m%d-%H%M%S") ) self.tmpdir = tempfile.mkdtemp() - def extract_tarball(self): + def extract_tarball(self) -> "Archive": + """ + Extract tarball, checking for path traversal, and return Archive object. + """ try: - logger.info("Extracting tarball {} into {}".format(self.archive, self.tmpdir)) + logger.info( + "Extracting tarball {} into {}".format(self.archive, self.tmpdir) + ) safe_extractall(self.archive, self.tmpdir) + return self except Exception as ex: logger.error("Unable to extract tarball: {}".format(ex)) raise ExportException(sdstatus=Status.ERROR_EXTRACTION) from ex - \ No newline at end of file + def set_metadata(self, metadata: Metadata) -> "Archive": + """ + Set relevant metadata attributes for a given archive. + """ + self.command = metadata.command + if self.command is Command.EXPORT: + # When we support multiple encryption types, we will also want to add the + # encryption_method here + self.encryption_key = metadata.encryption_key + return self diff --git a/securedrop_export/command.py b/securedrop_export/command.py index 382b4feff..06a31677d 100644 --- a/securedrop_export/command.py +++ b/securedrop_export/command.py @@ -1,12 +1,14 @@ from enum import Enum + class Command(Enum): """ All supported commands. - Values are as supplied by the calling VM (sd-app), and a change in any values require + Values are as supplied by the calling VM (sd-app), and a change in any values requires corresponding changes in the calling VM. """ + PRINTER_PREFLIGHT = "printer-preflight" PRINTER_TEST = "printer-test" PRINT = "printer" diff --git a/securedrop_export/directory_util.py b/securedrop_export/directory_util.py index b4608851c..a2a866c7e 100644 --- a/securedrop_export/directory_util.py +++ b/securedrop_export/directory_util.py @@ -2,7 +2,6 @@ import tarfile from pathlib import Path from typing import Optional, Union -import subprocess import logging logger = logging.getLogger(__name__) @@ -105,7 +104,9 @@ def _check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: if filename_or_filepath.is_absolute(): base_path = filename_or_filepath else: - base_path = Path.cwd() # use cwd so we can next ensure relative path does not traverse up + base_path = ( + Path.cwd() + ) # use cwd so we can next ensure relative path does not traverse up try: relative_path = relative_filepath(filename_or_filepath, base_path) @@ -114,7 +115,10 @@ def _check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: # base, but can still have harmful side effects to the application. If this kind of # traversal is needed, then call relative_filepath instead in order to check that the # desired traversal does not go past a safe base directory. - if relative_path != filename_or_filepath and not filename_or_filepath.is_absolute(): + if ( + relative_path != filename_or_filepath + and not filename_or_filepath.is_absolute() + ): raise ValueError except ValueError: raise ValueError(f"Unsafe file or directory name: '{filename_or_filepath}'") @@ -147,5 +151,6 @@ def _check_dir_permissions(dir_path: Union[str, Path]) -> None: stat_res = os.stat(dir_path).st_mode masked = stat_res & 0o777 if masked & 0o077: - raise RuntimeError("Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path)) - + raise RuntimeError( + "Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path) + ) diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index 8f9dc6d43..7abb33b02 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -1,11 +1,6 @@ -import datetime -import json import logging import os -import shutil import subprocess -import tempfile -import sys from typing import List, Optional @@ -36,12 +31,18 @@ def get_connected_devices(self) -> List[str]: Raise ExportException if any commands fail. """ + logger.info("Checking connected volumes") try: lsblk = subprocess.Popen( - ["lsblk", "-o", "NAME,TYPE"], stdout=subprocess.PIPE, stderr=subprocess.PIPE + ["lsblk", "-o", "NAME,TYPE"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, ) grep = subprocess.Popen( - ["grep", "disk"], stdin=lsblk.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ["grep", "disk"], + stdin=lsblk.stdout, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, ) command_output = grep.stdout.readlines() @@ -57,12 +58,14 @@ def _get_removable_devices(self, attached_devices: List[str]) -> List[str]: """ Determine which block devices are USBs by selecting those that are removable. """ + logger.info("Checking removable devices") usb_devices = [] for device in attached_devices: is_removable = False try: removable = subprocess.check_output( - ["cat", f"/sys/class/block/{device}/removable"], stderr=subprocess.PIPE + ["cat", f"/sys/class/block/{device}/removable"], + stderr=subprocess.PIPE, ) # 0 for non-removable device, 1 for removable @@ -75,6 +78,7 @@ def _get_removable_devices(self, attached_devices: List[str]) -> List[str]: if is_removable: usb_devices.append(f"/dev/{device}") + logger.info(f"{len(usb_devices)} connected") return usb_devices def get_partitioned_device(self, blkid: str) -> str: @@ -85,30 +89,40 @@ def get_partitioned_device(self, blkid: str) -> str: Raise ExportException if partition check fails or device has unsupported partition scheme (currently, multiple partitions are unsupported). """ - try: + device_and_partitions = self._check_partitions(blkid) - device_and_partitions = subprocess.check_output( - ["lsblk", "-o", "TYPE", "--noheadings", blkid], stderr=subprocess.PIPE + if device_and_partitions: + partition_count = ( + device_and_partitions.decode("utf-8").split("\n").count("part") ) + logger.debug(f"Counted {partition_count} partitions") + if partition_count > 1: + # We don't currently support devices with multiple partitions + logger.error( + f"Multiple partitions not supported ({partition_count} partitions" + f" on {blkid})" + ) + raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) - if device_and_partitions: - partition_count = device_and_partitions.decode("utf-8").split("\n").count("part") - if partition_count > 1: - # We don't currently support devices with multiple partitions - logger.error( - f"Multiple partitions not supported (found {partition_count} partitions on {blkid}" - ) - raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) + # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted + if partition_count == 1: + logger.debug("One partition found") + blkid += "1" - # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted - if partition_count == 1: - blkid += "1" + return blkid - return blkid + else: + # lsblk did not return output we could process + logger.error("Error checking device partitions") + raise ExportException(sdstatus=Status.DEVICE_ERROR) - else: - # lsblk did not return output we could process - raise ExportException(sdstatus=Status.DEVICE_ERROR) + def _check_partitions(self, blkid: str) -> str: + try: + logger.debug(f"Checking device partitions on {blkid}") + device_and_partitions = subprocess.check_output( + ["lsblk", "-o", "TYPE", "--noheadings", blkid], stderr=subprocess.PIPE + ) + return device_and_partitions except subprocess.CalledProcessError as ex: logger.error(f"Error checking block deivce {blkid}") @@ -122,7 +136,7 @@ def is_luks_volume(self, device: str) -> bool: isLuks = False try: - logger.debug(f"Checking if {device} is luks encrypted") + logger.debug("Checking if target device is luks encrypted") # cryptsetup isLuks returns 0 if the device is a luks volume # subprocess will throw if the device is not luks (rc !=0) @@ -130,9 +144,9 @@ def is_luks_volume(self, device: str) -> bool: isLuks = True - except subprocess.CalledProcessError as ex: + except subprocess.CalledProcessError: # Not necessarily an error state, just means the volume is not LUKS encrypted - logger.debug(f"{device} is not LUKS-encrypted") + logger.info("Target device is not LUKS-encrypted") return isLuks @@ -142,8 +156,11 @@ def _get_luks_name_from_headers(self, device: str) -> str: Raise ExportException if errors encounterd during attempt to parse LUKS headers. """ + logger.debug("Get LUKS name from headers") try: - luks_header = subprocess.check_output(["sudo", "cryptsetup", "luksDump", device]) + luks_header = subprocess.check_output( + ["sudo", "cryptsetup", "luksDump", device] + ) if luks_header: luks_header_list = luks_header.decode("utf-8").split("\n") for line in luks_header_list: @@ -151,11 +168,13 @@ def _get_luks_name_from_headers(self, device: str) -> str: if "UUID" in items[0]: return "luks-" + items[1] - # If no header or no UUID field, we can't use this drive - logger.error(f"Failed to get UUID from LUKS header; {device} may not be correctly formatted") + # If no header or no UUID field, we can't use this drive + logger.error( + f"Failed to get UUID from LUKS header; {device} may not be correctly formatted" + ) raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) except subprocess.CalledProcessError as ex: - logger.error(f"Failed to dump LUKS header") + logger.error("Failed to dump LUKS header") raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def get_luks_volume(self, device: str) -> Volume: @@ -174,10 +193,13 @@ def get_luks_volume(self, device: str) -> Volume: """ try: mapped_name = self._get_luks_name_from_headers(device) + logger.debug(f"Mapped name is {mapped_name}") # Setting the mapped_name does not mean the device has already been unlocked. luks_volume = Volume( - device_name=device, mapped_name=mapped_name, encryption=EncryptionScheme.LUKS + device_name=device, + mapped_name=mapped_name, + encryption=EncryptionScheme.LUKS, ) # If the device has been unlocked, we can see if it's mounted and @@ -199,14 +221,20 @@ def unlock_luks_volume(self, volume: Volume, decryption_key: str) -> Volume: Raise ExportException if errors are encountered during device unlocking. """ - if not volume.encryption is EncryptionScheme.LUKS: + if volume.encryption is not EncryptionScheme.LUKS: logger.error("Must call unlock_luks_volume() on LUKS-encrypted device") raise ExportException(sdstatus=Status.DEVICE_ERROR) try: logger.debug("Unlocking luks volume {}".format(volume.device_name)) p = subprocess.Popen( - ["sudo", "cryptsetup", "luksOpen", volume.device_name, volume.mapped_name], + [ + "sudo", + "cryptsetup", + "luksOpen", + volume.device_name, + volume.mapped_name, + ], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, @@ -217,7 +245,9 @@ def unlock_luks_volume(self, volume: Volume, decryption_key: str) -> Volume: if rc == 0: return Volume( - device_name=volume.device_name, mapped_name=volume.mapped_name, encryption=EncryptionScheme.LUKS + device_name=volume.device_name, + mapped_name=volume.mapped_name, + encryption=EncryptionScheme.LUKS, ) else: logger.error("Bad volume passphrase") @@ -231,6 +261,7 @@ def _get_mountpoint(self, volume: Volume) -> Optional[str]: Check for existing mountpoint. Raise ExportException if errors encountered during command. """ + logger.debug("Checking mountpoint") try: output = subprocess.check_output( ["lsblk", "-o", "MOUNTPOINT", "--noheadings", volume.device_name] @@ -251,22 +282,23 @@ def mount_volume(self, volume: Volume) -> Volume: Raise ExportException if errors are encountered during mounting. """ if not volume.unlocked: + logger.error("Volume is not unlocked.") raise ExportException(sdstatus=Status.ERROR_MOUNT) mountpoint = self._get_mountpoint(volume) if mountpoint: - logger.debug("The device is already mounted") + logger.info("The device is already mounted") if volume.mountpoint is not mountpoint: - logger.warning(f"Mountpoint was inaccurate, updating") + logger.warning("Mountpoint was inaccurate, updating") volume.mountpoint = mountpoint return volume else: + logger.info("Mount volume at default mountpoint") return self._mount_at_mountpoint(volume, self._DEFAULT_MOUNTPOINT) - def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> Volume: """ Mount a volume at the supplied mountpoint, creating the mountpoint directory and @@ -283,10 +315,12 @@ def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> Volume: raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex # Mount device /dev/mapper/{mapped_name} at /media/usb/ - mapped_device_path = os.path.join(volume.MAPPED_VOLUME_PREFIX, volume.mapped_name) + mapped_device_path = os.path.join( + volume.MAPPED_VOLUME_PREFIX, volume.mapped_name + ) try: - logger.debug(f"Mounting volume {volume.device_name} at {mountpoint}") + logger.info(f"Mounting volume at {mountpoint}") subprocess.check_call(["sudo", "mount", mapped_device_path, mountpoint]) subprocess.check_call(["sudo", "chown", "-R", "user:user", mountpoint]) @@ -311,10 +345,12 @@ def write_data_to_device( subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(submission_tmpdir, "export_data/") - logger.info("Copying file to {}".format(submission_target_dirname)) + logger.debug("Copying file to {}".format(submission_target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) - logger.info("File copied successfully to {}".format(submission_target_dirname)) + logger.info( + "File copied successfully to {}".format(submission_target_dirname) + ) except (subprocess.CalledProcessError, OSError) as ex: raise ExportException(sdstatus=Status.ERROR_EXPORT) from ex @@ -330,7 +366,7 @@ def cleanup_drive_and_tmpdir(self, volume: Volume, submission_tmpdir: str): Raise ExportException if errors during cleanup are encoutered. """ - logger.info("Syncing filesystems") + logger.debug("Syncing filesystems") try: subprocess.check_call(["sync"]) umounted = self._unmount_volume(volume) diff --git a/securedrop_export/disk/new_service.py b/securedrop_export/disk/new_service.py index 1084f751a..b5702a474 100644 --- a/securedrop_export/disk/new_service.py +++ b/securedrop_export/disk/new_service.py @@ -1,17 +1,10 @@ import logging -import os -import subprocess -import sys - -from enum import Enum - -from typing import List from securedrop_export.archive import Archive from .cli import CLI from .status import Status -from .volume import EncryptionScheme, Volume +from .volume import Volume from securedrop_export.exceptions import ExportException @@ -29,7 +22,7 @@ def __init__(self, cli: CLI): def run(self, arg: str) -> Status: """ - Run export actions. + Run export actions. """ def scan_all_devices(self) -> Status: @@ -46,13 +39,13 @@ def scan_all_devices(self) -> Status: elif number_devices > 1: return Status.MULTI_DEVICE_DETECTED else: - return scan_single_device(all_devices[0]) + return self.scan_single_device(all_devices[0]) - except ExportException: + except ExportException as ex: logger.error(ex) return Status.DEVICE_ERROR # Could not assess devices - def scan_single_device(self, str: blkid) -> Status: + def scan_single_device(self, blkid: str) -> Status: """ Given a string representing a single block device, see if it is a suitable export target and return information about its state. diff --git a/securedrop_export/disk/new_status.py b/securedrop_export/disk/new_status.py index 2bb0c242a..285d9f8b9 100644 --- a/securedrop_export/disk/new_status.py +++ b/securedrop_export/disk/new_status.py @@ -1,20 +1,29 @@ from securedrop_export.status import BaseStatus + class Status(BaseStatus): NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" - INVALID_DEVICE_DETECTED = "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc - MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported + INVALID_DEVICE_DETECTED = ( + "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc + ) + MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported - DEVICE_LOCKED = "DEVICE_LOCKED" # One device detected, and it's locked - DEVICE_WRITABLE = "DEVICE_WRITABLE" # One device detected, and it's unlocked (and mounted) + DEVICE_LOCKED = "DEVICE_LOCKED" # One device detected, and it's locked + DEVICE_WRITABLE = ( + "DEVICE_WRITABLE" # One device detected, and it's unlocked (and mounted) + ) ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" - ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted + ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted SUCCESS_EXPORT = "SUCCESS_EXPORT" - ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk - ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" # If export succeeds but drives were not properly unmounted + ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk + + # export succeeds but drives were not properly unmounted + ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" - DEVICE_ERROR = "DEVICE_ERROR" # Something went wrong while trying to check the device + DEVICE_ERROR = ( + "DEVICE_ERROR" # Something went wrong while trying to check the device + ) diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index adabf4e4e..e87386a91 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -1,11 +1,5 @@ import logging -import os -import subprocess -import sys -from typing import List - -from securedrop_export.archive import Archive from securedrop_export.exceptions import ExportException from .cli import CLI @@ -16,7 +10,6 @@ class Service: - def __init__(self, submission, cli=None): self.submission = submission self.cli = cli or CLI() @@ -32,6 +25,7 @@ def check_connected_devices(self) -> Status: num_devices = len(all_devices) except ExportException as ex: + logger.error(f"Error encountered during USB check: {ex.sdstatus.value}") # Use legacy status instead of new status values raise ExportException(sdstatus=Status.LEGACY_ERROR_USB_CHECK) from ex @@ -42,7 +36,6 @@ def check_connected_devices(self) -> Status: elif num_devices > 1: raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - def check_disk_format(self) -> Status: """ Check if volume is correctly formatted for export. @@ -51,15 +44,21 @@ def check_disk_format(self) -> Status: all_devices = self.cli.get_connected_devices() if len(all_devices) == 1: - device = self.cli.get_partitioned_device(all_devices) + device = self.cli.get_partitioned_device(all_devices[0]) + logger.info("Check if LUKS") if not self.cli.is_luks_volume(device): - raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + raise ExportException( + sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + ) # We can support checking if a drive is already unlocked, but for # backwards compatibility, this is the only expected status - # at this stage + # at this stage return Status.LEGACY_USB_ENCRYPTED except ExportException as ex: + logger.error( + f"Error encountered during disk format check: {ex.sdstatus.value}" + ) # Return legacy status values for now for ongoing client compatibility if ex.sdstatus in [s for s in NewStatus]: status = self._legacy_status(ex.sdstatus) @@ -67,10 +66,9 @@ def check_disk_format(self) -> Status: elif ex.sdstatus: raise else: - raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - + raise ExportException(sdstatus=Status.LEGACY_USB_DISK_ERROR) - def export(self) -> Status: + def export(self): """ Export all files to target device. """ @@ -83,27 +81,38 @@ def export(self) -> Status: device = self.cli.get_partitioned_device(all_devices[0]) # Decide what kind of volume it is + logger.info("Check if LUKS") if self.cli.is_luks_volume(device): volume = self.cli.get_luks_volume(device) + logger.info("Check if writable") if not volume.writable: - unlocked = self.cli.unlock_luks_volume( - volume, self.submission.archive_metadata.encryption_key + logger.info("Not writable-will try unlocking") + volume = self.cli.unlock_luks_volume( + volume, self.submission.encryption_key ) - mounted = self.cli.mount_volume(unlocked) + volume = self.cli.mount_volume(volume) - logger.debug(f"Export submission to {mounted.mountpoint}") - self.cli.write_data_to_device(self.submission.tmpdir, self.submission.target_dirname, mounted) - return Status.SUCCESS_EXPORT + logger.info(f"Export submission to {volume.mountpoint}") + self.cli.write_data_to_device( + self.submission.tmpdir, self.submission.target_dirname, volume + ) + # This is SUCCESS_EXPORT, but the 0.7.0 client is not expecting + # a return status from a successful export operation. + # When the client is updated, we will return SUCCESS_EXPORT here. else: # Another kind of drive: VeraCrypt/TC, or unsupported. # For now this is an error--in future there will be support # for additional encryption formats logger.error(f"Export failed because {device} is not supported") - raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) + raise ExportException( + sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + ) except ExportException as ex: - print(ex) + logger.error( + f"Error encountered during disk format check: {ex.sdstatus.value}" + ) # Return legacy status values for now for ongoing client compatibility if ex.sdstatus in [s for s in NewStatus]: status = self._legacy_status(ex.sdstatus) @@ -113,20 +122,23 @@ def export(self) -> Status: else: raise ExportException(sdstatus=Status.LEGACY_ERROR_GENERIC) - def _legacy_status(self, status: NewStatus) -> Status: """ Backwards-compatibility - status values that client (@0.7.0) is expecting. """ + logger.info(f"Convert to legacy: {status.value}") if status is NewStatus.ERROR_MOUNT: return Status.LEGACY_ERROR_USB_MOUNT elif status in [NewStatus.ERROR_EXPORT, NewStatus.ERROR_EXPORT_CLEANUP]: return Status.LEGACY_ERROR_USB_WRITE elif status in [NewStatus.ERROR_UNLOCK_LUKS, NewStatus.ERROR_UNLOCK_GENERIC]: return Status.LEGACY_USB_BAD_PASSPHRASE - elif status in [NewStatus.INVALID_DEVICE_DETECTED, NewStatus.MULTI_DEVICE_DETECTED]: + elif status in [ + NewStatus.INVALID_DEVICE_DETECTED, + NewStatus.MULTI_DEVICE_DETECTED, + ]: return Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED # The other status values, such as Status.NO_DEVICE_DETECTED, are not returned by the # CLI, so we don't need to check for them here else: - return Status.LEGACY_ERROR_GENERIC \ No newline at end of file + return Status.LEGACY_ERROR_GENERIC diff --git a/securedrop_export/disk/status.py b/securedrop_export/disk/status.py index 4a3aa8881..fa0bdf869 100644 --- a/securedrop_export/disk/status.py +++ b/securedrop_export/disk/status.py @@ -1,19 +1,20 @@ from securedrop_export.status import BaseStatus + class Status(BaseStatus): LEGACY_ERROR_GENERIC = "ERROR_GENERIC" # Legacy USB preflight related - LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success + LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success LEGACY_USB_NOT_CONNECTED = "USB_NOT_CONNECTED" LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" # Legacy USB Disk preflight related errors - LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success + LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" - #@todo - this can be raised during disk format check + # Can be raised during disk format check LEGACY_USB_DISK_ERROR = "USB_DISK_ERROR" # Legacy Disk export errors @@ -22,4 +23,4 @@ class Status(BaseStatus): LEGACY_ERROR_USB_WRITE = "ERROR_USB_WRITE" # New - SUCCESS_EXPORT = "SUCCESS_EXPORT" \ No newline at end of file + SUCCESS_EXPORT = "SUCCESS_EXPORT" diff --git a/securedrop_export/disk/volume.py b/securedrop_export/disk/volume.py index a3049e16e..c6bc2f8ae 100644 --- a/securedrop_export/disk/volume.py +++ b/securedrop_export/disk/volume.py @@ -17,8 +17,8 @@ class Volume: """ A volume on a removable device. - Volumes have a device name ("/dev/sdX"), a mapped name ("/dev/mapper/xxx"), an encryption scheme, - and a mountpoint if they are mounted. + Volumes have a device name ("/dev/sdX"), a mapped name ("/dev/mapper/xxx"), an encryption + scheme, and a mountpoint if they are mounted. """ def __init__( @@ -53,5 +53,7 @@ def unlocked(self) -> bool: return ( self.mapped_name is not None and self.encryption is not EncryptionScheme.UNKNOWN - and os.path.exists(os.path.join(self.MAPPED_VOLUME_PREFIX, self.mapped_name)) + and os.path.exists( + os.path.join(self.MAPPED_VOLUME_PREFIX, self.mapped_name) + ) ) diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index d740fc36b..78c0519c8 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -1,5 +1,4 @@ import logging -from typing import Optional logger = logging.getLogger(__name__) @@ -16,7 +15,8 @@ def __init__(self, *args, **kwargs): self.sdstatus = kwargs.get("sdstatus") self.sderror = kwargs.get("sderror") -class TimeoutException(ExportException): + +class TimeoutException(Exception): pass diff --git a/securedrop_export/main.py b/securedrop_export/main.py index 408173649..dca8e3f9a 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -3,12 +3,12 @@ import platform import logging import sys -import subprocess from securedrop_export.archive import Archive, Metadata from securedrop_export.command import Command from securedrop_export.status import BaseStatus from securedrop_export.directory_util import safe_mkdir +from securedrop_export.exceptions import ExportException from securedrop_export.disk.service import Service as ExportService from securedrop_export.print.service import Service as PrintService @@ -22,139 +22,136 @@ logger = logging.getLogger(__name__) + class Status(BaseStatus): """ Status values that can occur during initialization. """ + ERROR_LOGGING = "ERROR_LOGGING" ERROR_GENERIC = "ERROR_GENERIC" ERROR_FILE_NOT_FOUND = "ERROR_FILE_NOT_FOUND" + def entrypoint(): """ Entrypoint method (Note: a method is required for setuptools). Configure logging, extract tarball, and run desired export service, exiting with return code 0. """ - try: - _configure_logging() - except Exception: - _exit_gracefully(submission=None, status=Status.ERROR_LOGGING) - - logger.info("Starting SecureDrop Export {}".format(__version__)) - data = Archive(sys.argv[1]) + status, stacktrace, submission = None, None, None try: - # Halt immediately if target file is absent - if not os.path.exists(data.archive): - logger.info("Archive is not found {}.".format(data.archive)) - _exit_gracefully(data, Status.ERROR_FILE_NOT_FOUND) - - # Extract archive and either print or export to disk. - # Includes cleanup logic, which removes any temporary directories associated with - # the archive. - _extract_and_run(data) - - except Exception as e: - _exit_gracefully(data, Status.ERROR_GENERIC, e.output) - - -def _configure_logging(): - """ - All logging related settings are set up by this function. - """ - safe_mkdir(DEFAULT_HOME) - safe_mkdir(DEFAULT_HOME, LOG_DIR_NAME) + _configure_logging() + logger.info("Starting SecureDrop Export {}".format(__version__)) - log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) + data_path = sys.argv[1] - # set logging format - log_fmt = "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" - formatter = logging.Formatter(log_fmt) + # Halt if target file is absent + if not os.path.exists(data_path): + logger.info("Archive is not found {}.".format(data_path)) + status = Status.ERROR_FILE_NOT_FOUND - handler = TimedRotatingFileHandler(log_file) - handler.setFormatter(formatter) + else: + logger.debug("Extract tarball") + submission = Archive(data_path).extract_tarball() + logger.debug("Validate metadata") + metadata = Metadata(submission.tmpdir).validate() + logger.info("Archive extraction and metadata validation successful") + + # If all we're doing is starting the vm, we're done; otherwise, + # run the appropriate print or export routine + if metadata.command is not Command.START_VM: + submission.set_metadata(metadata) + logger.info(f"Start {metadata.command.value} service") + status = _start_service(submission) - # For rsyslog handler - if platform.system() != "Linux": # pragma: no cover - syslog_file = "/var/run/syslog" - else: - syslog_file = "/dev/log" + except ExportException as ex: + logger.error(f"Encountered exception {ex.sdstatus.value}, exiting") + status = ex.sdstatus + stacktrace = ex.output - sysloghandler = SysLogHandler(address=syslog_file) - sysloghandler.setFormatter(formatter) - handler.setLevel(logging.DEBUG) + except Exception as exc: + logger.error("Encountered exception during export, exiting") + status = Status.ERROR_GENERIC + stacktrace = exc.output - # set up primary log - log = logging.getLogger() - log.setLevel(logging.DEBUG) - log.addHandler(handler) - # add the second logger - log.addHandler(sysloghandler) + finally: + _exit_gracefully(submission, status=status, e=stacktrace) -def _extract_and_run(submission: Archive): +def _configure_logging(): """ - Extract tarball and metadata and run appropriate command based on metadata instruction. - Always exits with return code 0 and writes exit status, if applicable, to stderr. + All logging related settings are set up by this function. """ - status = None - stacktrace = None - try: - submission.extract_tarball() + safe_mkdir(DEFAULT_HOME) + safe_mkdir(DEFAULT_HOME, LOG_DIR_NAME) - # Validates metadata and ensures requested action is supported - submission.archive_metadata = Metadata.create_and_validate(submission.tmpdir) + log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) - # If we just wanted to start the VM, our work here is done - if submission.archive_metadata.command is Command.START_VM: - _exit_gracefully(submission) - else: - status = _start_service(submission, command) + # set logging format + log_fmt = ( + "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " + "%(levelname)s: %(message)s" + ) + formatter = logging.Formatter(log_fmt) - except ExportException as ex: - status = ex.value.sdstatus - stacktrace = ex.output + handler = TimedRotatingFileHandler(log_file) + handler.setFormatter(formatter) - except Exception as exc: - # All exceptions are wrapped in ExportException, but we are being cautious - logger.error("Encountered exception during export, exiting") - status = Status.ERROR_GENERIC - stacktrace = exc.output - - finally: - _exit_gracefully(submission, status, stacktrace) + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" + + sysloghandler = SysLogHandler(address=syslog_file) + sysloghandler.setFormatter(formatter) + handler.setLevel(logging.DEBUG) + + # set up primary log + log = logging.getLogger() + log.setLevel(logging.DEBUG) + log.addHandler(handler) + # add the second logger + log.addHandler(sysloghandler) + except Exception as ex: + raise ExportException(sdstatus=Status.ERROR_LOGGING) from ex -def _start_service(submission: Archive, cmd: Command) -> Status: +def _start_service(submission: Archive) -> Status: """ Start print or export service. """ # Print Routines - if cmd is Commmand.PRINTER: + if submission.command is Command.PRINT: return PrintService(submission).print() - elif cmd is Commmand.PRINTER_TEST: + elif submission.command is Command.PRINTER_PREFLIGHT: return PrintService(submission).printer_preflight() - elif cmd is Commmand.PRINTER_TEST: + elif submission.command is Command.PRINTER_TEST: return PrintService(submission).printer_test() # Export routines - elif cmd is Commmand.EXPORT: + elif submission.command is Command.EXPORT: return ExportService(submission).export() - elif cmd is Commmand.CHECK_USBS: + elif submission.command is Command.CHECK_USBS: return ExportService(submission).check_connected_devices() - elif cmd is Commmand.CHECK_VOLUME: + elif submission.command is Command.CHECK_VOLUME: return ExportService(submission).check_disk_format() -def _exit_gracefully(submission: Archive, status: Status=None, e=None): + +def _exit_gracefully(submission: Archive, status: BaseStatus = None, e: str = None): """ Utility to print error messages, mostly used during debugging, then exits successfully despite the error. Always exits 0, since non-zero exit values will cause system to try alternative solutions for mimetype handling, which we want to avoid. """ - logger.info(f"Exiting with status: {status.value}") + if status: + logger.info(f"Exit gracefully with status: {status.value}") + else: + logger.info("Exit gracefully (no status code supplied)") if e: logger.error("Captured exception output: {}".format(e.output)) try: @@ -178,6 +175,7 @@ def _write_status(status: BaseStatus): Write string to stderr. """ if status: + logger.info(f"Write status {status.value}") sys.stderr.write(status.value) sys.stderr.write("\n") else: diff --git a/securedrop_export/print/service.py b/securedrop_export/print/service.py index a8e22d24c..4cfad872f 100644 --- a/securedrop_export/print/service.py +++ b/securedrop_export/print/service.py @@ -7,13 +7,6 @@ from securedrop_export.exceptions import handler, TimeoutException, ExportException from .status import Status -PRINTER_NAME = "sdw-printer" -PRINTER_WAIT_TIMEOUT = 60 -BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" -BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" -LASERJET_DRIVER = "/usr/share/cups/drv/hpcups.drv" -LASERJET_PPD = "/usr/share/cups/model/hp-laserjet_6l.ppd" - logger = logging.getLogger(__name__) @@ -22,12 +15,19 @@ class Service: Printer service """ + PRINTER_NAME = "sdw-printer" + PRINTER_WAIT_TIMEOUT = 60 + BRLASER_DRIVER = "/usr/share/cups/drv/brlaser.drv" + BRLASER_PPD = "/usr/share/cups/model/br7030.ppd" + LASERJET_DRIVER = "/usr/share/cups/drv/hpcups.drv" + LASERJET_PPD = "/usr/share/cups/model/hp-laserjet_6l.ppd" + def __init__(self, submission): self.submission = submission - self.printer_name = PRINTER_NAME - self.printer_wait_timeout = PRINTER_WAIT_TIMEOUT + self.printer_name = self.PRINTER_NAME + self.printer_wait_timeout = self.PRINTER_WAIT_TIMEOUT - def print(self) -> Status: + def print(self): """ Routine to print all files. Throws ExportException if an error is encountered. @@ -35,40 +35,49 @@ def print(self) -> Status: logger.info("Printing all files from archive") self._check_printer_setup() self._print_all_files() - return Status.PRINT_SUCCESS + # When client can accept new print statuses, we will return + # a success status here + # return Status.PRINT_SUCCESS - def printer_preflight(self) -> Status: + def printer_preflight(self): """ Routine to perform preflight printer testing. Throws ExportException if an error is encoutered. """ - logger.info("Running printer preflight") + logger.info("Running printer preflight") self._check_printer_setup() - return Status.PREFLIGHT_SUCCESS + # When client can accept new print statuses, we will return + # a success status here + # return Status.PREFLIGHT_SUCCESS - def printer_test(self) -> Status: + def printer_test(self): """ Routine to print a test page. Throws ExportException if an error is encountered. """ - logger.info("Printing test page") + logger.info("Printing test page") self._check_printer_setup() self._print_test_page() - return Status.PRINT_SUCCESS + # When client can accept new print statuses, we will return + # a success status here + # return Status.TEST_SUCCESS def _wait_for_print(self): """ Use lpstat to ensure the job was fully transfered to the printer Return True if print was successful, otherwise throw ExportException. + Currently, the handler `handler` is defined in `exceptions.py`. """ signal.signal(signal.SIGALRM, handler) signal.alarm(self.printer_wait_timeout) printer_idle_string = "printer {} is idle".format(self.printer_name) while True: try: - logger.info("Running lpstat waiting for printer {}".format(self.printer_name)) + logger.info( + "Running lpstat waiting for printer {}".format(self.printer_name) + ) output = subprocess.check_output(["lpstat", "-p", self.printer_name]) if printer_idle_string in output.decode("utf-8"): logger.info("Print completed") @@ -108,10 +117,10 @@ def _check_printer_setup(self) -> None: printer_uri = printers[0] printer_ppd = self._install_printer_ppd(printer_uri) - self.setup_printer(printer_uri, printer_ppd) + self._setup_printer(printer_uri, printer_ppd) except subprocess.CalledProcessError as e: logger.error(e) - raise ExportException(sdstatus=Status.ERROR_GENERIC) + raise ExportException(sdstatus=Status.ERROR_UNKNOWN) def _get_printer_uri(self) -> str: """ @@ -123,6 +132,7 @@ def _get_printer_uri(self) -> str: try: output = subprocess.check_output(["sudo", "lpinfo", "-v"]) except subprocess.CalledProcessError: + logger.error("Error attempting to retrieve printer uri with lpinfo") raise ExportException(sdstatus=Status.ERROR_PRINTER_URI) # fetch the usb printer uri @@ -146,16 +156,17 @@ def _get_printer_uri(self) -> str: def _install_printer_ppd(self, uri): if not any(x in uri for x in ("Brother", "LaserJet")): - logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) + logger.error( + "Cannot install printer ppd for unsupported printer: {}".format(uri) + ) raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) - return if "Brother" in uri: - printer_driver = BRLASER_DRIVER - printer_ppd = BRLASER_PPD + printer_driver = self.BRLASER_DRIVER + printer_ppd = self.BRLASER_PPD elif "LaserJet" in uri: - printer_driver = LASERJET_DRIVER - printer_ppd = LASERJET_PPD + printer_driver = self.LASERJET_DRIVER + printer_ppd = self.LASERJET_PPD # Compile and install drivers that are not already installed if not os.path.exists(printer_ppd): @@ -177,7 +188,7 @@ def _install_printer_ppd(self, uri): def _setup_printer(self, printer_uri, printer_ppd): # Add the printer using lpadmin logger.info("Setting up printer {}".format(self.printer_name)) - safe_check_call( + self.safe_check_call( command=[ "sudo", "lpadmin", @@ -235,7 +246,7 @@ def _print_file(self, file_to_print): folder = os.path.dirname(file_to_print) converted_filename = file_to_print + ".pdf" converted_path = os.path.join(folder, converted_filename) - safe_check_call( + self.safe_check_call( command=["unoconv", "-o", converted_path, file_to_print], error_status=Status.ERROR_PRINT, ) @@ -248,8 +259,9 @@ def _print_file(self, file_to_print): error_status=Status.ERROR_PRINT, ) - - def safe_check_call(command: str, error_status: Status, ignore_stderr_startswith=None): + def safe_check_call( + self, command: str, error_status: Status, ignore_stderr_startswith=None + ): """ Wrap subprocess.check_output to ensure we wrap CalledProcessError and return our own exception, and log the error messages. @@ -267,4 +279,3 @@ def safe_check_call(command: str, error_status: Status, ignore_stderr_startswith raise ExportException(sdstatus=error_status, sderror=err) except subprocess.CalledProcessError as ex: raise ExportException(sdstatus=error_status, sderror=ex.output) - diff --git a/securedrop_export/print/status.py b/securedrop_export/print/status.py index fef0dbdf1..5ec81c8a3 100644 --- a/securedrop_export/print/status.py +++ b/securedrop_export/print/status.py @@ -1,5 +1,6 @@ from securedrop_export.status import BaseStatus + class Status(BaseStatus): # Printer preflight related errors @@ -8,11 +9,14 @@ class Status(BaseStatus): ERROR_PRINTER_NOT_SUPPORTED = "ERROR_PRINTER_NOT_SUPPORTED" ERROR_PRINTER_DRIVER_UNAVAILABLE = "ERROR_PRINTER_DRIVER_UNAVAILABLE" ERROR_PRINTER_INSTALL = "ERROR_PRINTER_INSTALL" + ERROR_PRINTER_URI = "ERROR_PRINTER_URI" # new - # Printer export errors + # Print error ERROR_PRINT = "ERROR_PRINT" # New PREFLIGHT_SUCCESS = "PRINTER_PREFLIGHT_SUCCESS" TEST_SUCCESS = "PRINTER_TEST_SUCCESS" PRINT_SUCCESS = "PRINTER_SUCCESS" + + ERROR_UNKNOWN = "ERROR_GENERIC" # Unknown printer error, backwards-compatible diff --git a/securedrop_export/status.py b/securedrop_export/status.py index 29b304574..bc3d29d97 100644 --- a/securedrop_export/status.py +++ b/securedrop_export/status.py @@ -1,5 +1,6 @@ from enum import Enum + class BaseStatus(Enum): """ Base class for export and print statuses. A Status represents a string that can be returned @@ -7,4 +8,5 @@ class BaseStatus(Enum): Status values are defined in subclasses in their respective packages. A full list is available in the project's README. """ + pass diff --git a/setup.py b/setup.py index 485a88084..b04979ddb 100644 --- a/setup.py +++ b/setup.py @@ -31,5 +31,7 @@ "Intended Audience :: Developers", "Operating System :: OS Independent", ), - entry_points={"console_scripts": ["send-to-usb = securedrop_export.main:entrypoint"]}, + entry_points={ + "console_scripts": ["send-to-usb = securedrop_export.main:entrypoint"] + }, ) diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index 55d79a40e..d174dc445 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -1,10 +1,7 @@ import pytest from unittest import mock -import os -import pytest import subprocess -import sys from securedrop_export.disk.cli import CLI from securedrop_export.disk.volume import EncryptionScheme, Volume @@ -32,6 +29,7 @@ class TestCli: Test the CLI wrapper that handless identification and locking/unlocking of USB volumes. """ + @classmethod def setup_class(cls): cls.cli = CLI() @@ -49,7 +47,8 @@ def _setup_usb_devices(self, mocker, disks, is_removable): Parameters: disks (byte array): Array of disk names separated by newline. - is_removable (byte array): Array of removable status results (1 for removable) separated by newline + is_removable (byte array): Array of removable status results (1 for removable), + separated by newline """ # Patch commandline calls to `lsblk | grep disk` @@ -58,7 +57,7 @@ def _setup_usb_devices(self, mocker, disks, is_removable): command_output.stdout.readlines = mock.MagicMock(return_value=disks) mocker.patch("subprocess.Popen", return_value=command_output) - # Pactch commandline call to 'cat /sys/class/block/{device}/removable' + # Patch commandline call to 'cat /sys/class/block/{device}/removable' # Using side_effect with an iterable allows for different return value each time, # which matches what would happen if iterating through list of devices @@ -73,7 +72,10 @@ def test_get_connected_devices(self, mocker): assert result[0] == "/dev/sda" and result[1] == "/dev/sdb" - @mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output")) + @mock.patch( + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), + ) def test_get_removable_devices_none_removable(self, mocker): disks = [b"sda disk\n", b"sdb disk\n"] removable = [b"0\n", b"0\n"] @@ -83,7 +85,9 @@ def test_get_removable_devices_none_removable(self, mocker): result = self.cli._get_removable_devices(disks) assert len(result) == 0 - @mock.patch("subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen")) + @mock.patch( + "subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen") + ) def test_get_connected_devices_error(self, mocked_subprocess): with pytest.raises(ExportException): @@ -91,15 +95,20 @@ def test_get_connected_devices_error(self, mocked_subprocess): @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_NO_PART) def test_get_partitioned_device_no_partition(self, mocked_call): - assert self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) == _DEFAULT_USB_DEVICE + assert ( + self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) == _DEFAULT_USB_DEVICE + ) @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_ONE_PART) def test_get_partitioned_device_one_partition(self, mocked_call): - assert self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) == _DEFAULT_USB_DEVICE+"1" + assert ( + self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + == _DEFAULT_USB_DEVICE + "1" + ) @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_MULTI_PART) def test_get_partitioned_device_multi_partition(self, mocked_call): - + with pytest.raises(ExportException) as ex: self.cli.get_partitioned_device(_SAMPLE_OUTPUT_MULTI_PART) @@ -113,10 +122,11 @@ def test_get_partitioned_device_lsblk_error(self, mocked_subprocess): assert ex.value.sdstatus is Status.DEVICE_ERROR @mock.patch( - "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output") + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), ) def test_get_partitioned_device_multi_partition_error(self, mocked_call): - + # Make sure we wrap CalledProcessError and throw our own exception with pytest.raises(ExportException) as ex: self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) @@ -125,11 +135,14 @@ def test_get_partitioned_device_multi_partition_error(self, mocked_call): @mock.patch("subprocess.check_call", return_value=0) def test_is_luks_volume_true(self, mocked_call): - + # `sudo cryptsetup isLuks` returns 0 if true assert self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test_is_luks_volume_false(self, mocked_subprocess): # `sudo cryptsetup isLuks` returns 1 if false; CalledProcessError is thrown @@ -139,10 +152,14 @@ def test_is_luks_volume_false(self, mocked_subprocess): def test__get_luks_name_from_headers(self, mocked_subprocess): result = self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) - assert result is not None and result.split("-")[1] in _SAMPLE_LUKS_HEADER.decode("utf8") + assert result is not None and result.split("-")[ + 1 + ] in _SAMPLE_LUKS_HEADER.decode("utf8") - @mock.patch("subprocess.check_output", return_value=b"corrupted-or-invalid-header\n") - def test__get_luks_name_from_headers_error(self, mocked_subprocess): + @mock.patch( + "subprocess.check_output", return_value=b"corrupted-or-invalid-header\n" + ) + def test__get_luks_name_from_headers_error_invalid(self, mocked_subprocess): with pytest.raises(ExportException) as ex: self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) @@ -158,7 +175,9 @@ def test__get_luks_name_from_headers_error_no_header(self, mocked_subprocess): assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED @mock.patch("subprocess.check_output", return_value=None) - def test__get_luks_name_from_headers_error_nothing_returned(self, mocked_subprocess): + def test__get_luks_name_from_headers_error_nothing_returned( + self, mocked_subprocess + ): with pytest.raises(ExportException) as ex: self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) @@ -166,7 +185,8 @@ def test__get_luks_name_from_headers_error_nothing_returned(self, mocked_subproc assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED @mock.patch( - "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output") + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), ) def test__get_luks_name_from_headers_error(self, mocked_subprocess): with pytest.raises(ExportException): @@ -188,7 +208,10 @@ def test_get_luks_volume_still_locked(self, mocked_subprocess, mocked_os_call): assert result.encryption is EncryptionScheme.LUKS assert not result.unlocked - @mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError("check_output", 1)) + @mock.patch( + "subprocess.check_output", + side_effect=subprocess.CalledProcessError("check_output", 1), + ) def test_get_luks_volume_error(self, mocked_subprocess): with pytest.raises(ExportException) as ex: self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) @@ -202,13 +225,19 @@ def test_unlock_luks_volume_success(self, mock_path, mocker): mock_popen.returncode = 0 mocker.patch("subprocess.Popen", return_value=mock_popen) - mocker.patch("subprocess.Popen.communicate", return_value=mock_popen_communicate) + mocker.patch( + "subprocess.Popen.communicate", return_value=mock_popen_communicate + ) mapped_name = "luks-id-123456" - vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=mapped_name, encryption=EncryptionScheme.LUKS) + vol = Volume( + device_name=_DEFAULT_USB_DEVICE, + mapped_name=mapped_name, + encryption=EncryptionScheme.LUKS, + ) key = "a_key&_!" result = self.cli.unlock_luks_volume(vol, key) - assert vol.unlocked + assert result.unlocked @mock.patch("os.path.exists", return_value=True) def test_unlock_luks_volume_not_luks(self, mocker): @@ -218,9 +247,12 @@ def test_unlock_luks_volume_not_luks(self, mocker): mocker.patch("subprocess.Popen", mock_popen) - vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.UNKNOWN) + vol = Volume( + device_name=_DEFAULT_USB_DEVICE, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.UNKNOWN, + ) key = "a key!" - mapped_name = "luks-id-123456" with pytest.raises(ExportException) as ex: self.cli.unlock_luks_volume(vol, key) @@ -234,18 +266,26 @@ def test_unlock_luks_volume_passphrase_failure(self, mocker): mocker.patch("subprocess.Popen", mock_popen) - vol = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS) + vol = Volume( + device_name=_DEFAULT_USB_DEVICE, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) key = "a key!" - mapped_name = "luks-id-123456" with pytest.raises(ExportException): self.cli.unlock_luks_volume(vol, key) - @mock.patch("subprocess.Popen", side_effect=subprocess.CalledProcessError("1", "Popen")) + @mock.patch( + "subprocess.Popen", side_effect=subprocess.CalledProcessError("1", "Popen") + ) def test_unlock_luks_volume_luksOpen_exception(self, mocked_subprocess): - pd = Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS) + pd = Volume( + device_name=_DEFAULT_USB_DEVICE, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) key = "a key!" - mapped_name = "luks-id-123456" with pytest.raises(ExportException) as ex: self.cli.unlock_luks_volume(pd, key) @@ -261,13 +301,17 @@ def test_mount_volume(self, mocked_call, mocked_output, mocked_path): mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - result = self.cli.mount_volume(vol) + self.cli.mount_volume(vol) assert vol.mountpoint is self.cli._DEFAULT_MOUNTPOINT @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_output", return_value=b"/dev/pretend/luks-id-123456\n") + @mock.patch( + "subprocess.check_output", return_value=b"/dev/pretend/luks-id-123456\n" + ) @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume_already_mounted(self, mocked_output, mocked_call, mocked_path): + def test_mount_volume_already_mounted( + self, mocked_output, mocked_call, mocked_path + ): md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, @@ -288,7 +332,10 @@ def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess, mocked_path) assert self.cli.mount_volume(md).mapped_name == _PRETEND_LUKS_ID @mock.patch("subprocess.check_output", return_value=b"\n") - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test_mount_volume_error(self, mocked_subprocess, mocked_output): md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -302,7 +349,10 @@ def test_mount_volume_error(self, mocked_subprocess, mocked_output): assert ex.value.sdstatus is Status.ERROR_MOUNT @mock.patch("os.path.exists", return_value=False) - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test_mount_at_mountpoint_mkdir_error(self, mocked_subprocess, mocked_path): md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -317,7 +367,10 @@ def test_mount_at_mountpoint_mkdir_error(self, mocked_subprocess, mocked_path): assert ex.value.sdstatus is Status.ERROR_MOUNT @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test_mount_at_mountpoint_mounting_error(self, mocked_subprocess, mocked_path): md = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -345,7 +398,10 @@ def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): assert result.mountpoint is None @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test__unmount_volume_error(self, mocked_subprocess, mocked_mountpath): mounted = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -372,7 +428,10 @@ def test__close_luks_volume(self, mocked_subprocess, mocked_os_call): self.cli._close_luks_volume(mapped) @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test__close_luks_volume_error(self, mocked_subprocess, mocked_os_call): mapped = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, @@ -385,7 +444,10 @@ def test__close_luks_volume_error(self, mocked_subprocess, mocked_os_call): assert ex.value.sdstatus is Status.DEVICE_ERROR - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test__remove_temp_directory_error(self, mocked_subprocess): with pytest.raises(ExportException): self.cli._remove_temp_directory("tmp") @@ -412,7 +474,10 @@ def test_write_to_disk(self, mock_check_call): # Don't want to patch it indefinitely though, that will mess with the other tests patch.stop() - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test_write_to_disk_error_still_does_cleanup(self, mock_call): # see above - patch internal method only for this test patch = mock.patch.object(self.cli, "cleanup_drive_and_tmpdir") @@ -428,16 +493,21 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call): submission = Archive("testfile") with pytest.raises(ExportException): - self.cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) + self.cli.write_data_to_device( + submission.tmpdir, submission.target_dirname, vol + ) self.cli.cleanup_drive_and_tmpdir.assert_called_once() patch.stop() - @mock.patch("subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call")) + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) def test_cleanup_drive_and_tmpdir_error(self, mocked_subprocess): submission = Archive("testfile") mock_volume = mock.MagicMock(Volume) - + with pytest.raises(ExportException) as ex: self.cli.cleanup_drive_and_tmpdir(mock_volume, submission.tmpdir) assert ex.value.sdstatus is Status.ERROR_EXPORT_CLEANUP @@ -469,10 +539,19 @@ def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): close_patch.stop() remove_tmpdir_patch.stop() - @mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output")) + @mock.patch( + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), + ) def test_mountpoint_error(self, mock_subprocess): with pytest.raises(ExportException) as ex: - self.cli._get_mountpoint(Volume(device_name=_DEFAULT_USB_DEVICE, mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS)) + self.cli._get_mountpoint( + Volume( + device_name=_DEFAULT_USB_DEVICE, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + ) assert ex.value.sdstatus is Status.ERROR_MOUNT @@ -480,15 +559,15 @@ def test_mountpoint_error(self, mock_subprocess): def test_mount_mkdir_fails(self, mocked_path): mock_mountpoint = mock.patch.object(self.cli, "_get_mountpoint") mock_mountpoint.return_value = None - # mock.patch("subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output")) - mock_volume = mock.MagicMock() - mock_volume.device_name = _DEFAULT_USB_DEVICE_ONE_PART - mock_volume.mapped_name = _PRETEND_LUKS_ID - mock_volume.EncryptionScheme = EncryptionScheme.LUKS - mock_volume.unlocked = True + vol = Volume( + device_name=_DEFAULT_USB_DEVICE_ONE_PART, + mapped_name=_PRETEND_LUKS_ID, + encryption=EncryptionScheme.LUKS, + ) + mock.patch.object(vol, "unlocked", return_value=True) with pytest.raises(ExportException) as ex: - self.cli.mount_volume(mock_volume) + self.cli.mount_volume(vol) - assert ex.value.sdstatus is Status.ERROR_MOUNT \ No newline at end of file + assert ex.value.sdstatus is Status.ERROR_MOUNT diff --git a/tests/disk/test_service.py b/tests/disk/test_service.py index 6cda02716..800a4fd13 100644 --- a/tests/disk/test_service.py +++ b/tests/disk/test_service.py @@ -1,19 +1,12 @@ import pytest from unittest import mock - import os -import pytest -import sys import tempfile -import subprocess -from subprocess import CalledProcessError - from securedrop_export.exceptions import ExportException from securedrop_export.disk.status import Status from securedrop_export.disk.new_status import Status as NewStatus from securedrop_export.disk.volume import Volume, EncryptionScheme - from securedrop_export.archive import Archive, Metadata from securedrop_export.disk.service import Service from securedrop_export.disk.cli import CLI @@ -22,15 +15,24 @@ SAMPLE_OUTPUT_USB = "/dev/sda" # noqa SAMPLE_OUTPUT_USB_PARTITIONED = "/dev/sda1" -class TestExportService: +class TestExportService: @classmethod def setup_class(cls): cls.mock_cli = mock.MagicMock(CLI) cls.mock_submission = cls._setup_submission() - cls.mock_luks_volume_unmounted = Volume(device_name=SAMPLE_OUTPUT_USB, mapped_name="fake-luks-id-123456", encryption=EncryptionScheme.LUKS) - cls.mock_luks_volume_mounted = Volume(device_name=SAMPLE_OUTPUT_USB, mapped_name="fake-luks-id-123456", mountpoint="/media/usb", encryption=EncryptionScheme.LUKS) + cls.mock_luks_volume_unmounted = Volume( + device_name=SAMPLE_OUTPUT_USB, + mapped_name="fake-luks-id-123456", + encryption=EncryptionScheme.LUKS, + ) + cls.mock_luks_volume_mounted = Volume( + device_name=SAMPLE_OUTPUT_USB, + mapped_name="fake-luks-id-123456", + mountpoint="/media/usb", + encryption=EncryptionScheme.LUKS, + ) cls.service = Service(cls.mock_submission, cls.mock_cli) @@ -49,11 +51,12 @@ def _setup_submission(cls) -> Archive: temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') - - submission.archive_metadata = Metadata.create_and_validate(temp_folder) + f.write( + '{"device": "disk", "encryption_method":' + ' "luks", "encryption_key": "hunter1"}' + ) - return submission + return submission.set_metadata(Metadata(temp_folder).validate()) def setup_method(self, method): """ @@ -63,7 +66,9 @@ def setup_method(self, method): test methods. """ self.mock_cli.get_connected_devices.return_value = [SAMPLE_OUTPUT_USB] - self.mock_cli.get_partitioned_device.return_value = SAMPLE_OUTPUT_USB_PARTITIONED + self.mock_cli.get_partitioned_device.return_value = ( + SAMPLE_OUTPUT_USB_PARTITIONED + ) self.mock_cli.get_luks_volume.return_value = self.mock_luks_volume_unmounted self.mock_cli.mount_volume.return_value = self.mock_luks_volume_mounted @@ -83,7 +88,10 @@ def test_no_devices_connected(self): assert ex.value.sdstatus is Status.LEGACY_USB_NOT_CONNECTED def test_too_many_devices_connected(self): - self.mock_cli.get_connected_devices.return_value = [SAMPLE_OUTPUT_USB, "/dev/sdb"] + self.mock_cli.get_connected_devices.return_value = [ + SAMPLE_OUTPUT_USB, + "/dev/sdb", + ] with pytest.raises(ExportException) as ex: self.service.check_connected_devices() @@ -100,7 +108,9 @@ def test_device_is_not_luks(self): assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_check_usb_error(self): - self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=Status.LEGACY_ERROR_USB_CHECK) + self.mock_cli.get_connected_devices.side_effect = ExportException( + sdstatus=Status.LEGACY_ERROR_USB_CHECK + ) with pytest.raises(ExportException) as ex: self.service.check_connected_devices() @@ -113,17 +123,21 @@ def test_check_disk_format(self): assert status is Status.LEGACY_USB_ENCRYPTED def test_check_disk_format_error(self): - self.mock_cli.get_partitioned_device.side_effect=ExportException(sdstatus=NewStatus.INVALID_DEVICE_DETECTED) + self.mock_cli.get_partitioned_device.side_effect = ExportException( + sdstatus=NewStatus.INVALID_DEVICE_DETECTED + ) with pytest.raises(ExportException) as ex: self.service.check_disk_format() - # We still return the legacy status for now + # We still return the legacy status for now assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_export(self): - status = self.service.export() - assert status is Status.SUCCESS_EXPORT + # Currently, a successful export does not return a success status. + # When the client is updated, this will change to assert EXPORT_SUCCESS + # is returned. + self.service.export() def test_export_disk_not_supported(self): self.mock_cli.is_luks_volume.return_value = False @@ -134,8 +148,10 @@ def test_export_disk_not_supported(self): assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_export_write_error(self): - self.mock_cli.is_luks_volume.return_value=True - self.mock_cli.write_data_to_device.side_effect = ExportException(sdstatus=Status.LEGACY_ERROR_USB_WRITE) + self.mock_cli.is_luks_volume.return_value = True + self.mock_cli.write_data_to_device.side_effect = ExportException( + sdstatus=Status.LEGACY_ERROR_USB_WRITE + ) with pytest.raises(ExportException) as ex: self.service.export() @@ -143,7 +159,9 @@ def test_export_write_error(self): assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_WRITE def test_export_throws_new_exception_return_legacy_status(self): - self.mock_cli.get_connected_devices.side_effect = ExportException(sdstatus=NewStatus.ERROR_MOUNT) + self.mock_cli.get_connected_devices.side_effect = ExportException( + sdstatus=NewStatus.ERROR_MOUNT + ) with pytest.raises(ExportException) as ex: self.service.export() @@ -152,8 +170,10 @@ def test_export_throws_new_exception_return_legacy_status(self): @mock.patch("os.path.exists", return_value=True) def test_write_error_returns_legacy_status(self, mock_path): - self.mock_cli.is_luks_volume.return_value=True - self.mock_cli.write_data_to_device.side_effect = ExportException(sdstatus=NewStatus.ERROR_EXPORT) + self.mock_cli.is_luks_volume.return_value = True + self.mock_cli.write_data_to_device.side_effect = ExportException( + sdstatus=NewStatus.ERROR_EXPORT + ) with pytest.raises(ExportException) as ex: self.service.export() @@ -162,7 +182,9 @@ def test_write_error_returns_legacy_status(self, mock_path): @mock.patch("os.path.exists", return_value=True) def test_unlock_error_returns_legacy_status(self, mock_path): - self.mock_cli.unlock_luks_volume.side_effect = ExportException(sdstatus=NewStatus.ERROR_UNLOCK_LUKS) + self.mock_cli.unlock_luks_volume.side_effect = ExportException( + sdstatus=NewStatus.ERROR_UNLOCK_LUKS + ) with pytest.raises(ExportException) as ex: self.service.export() @@ -171,9 +193,11 @@ def test_unlock_error_returns_legacy_status(self, mock_path): @mock.patch("os.path.exists", return_value=True) def test_unexpected_error_returns_legacy_status_generic(self, mock_path): - self.mock_cli.unlock_luks_volume.side_effect = ExportException(sdstatus=NewStatus.DEVICE_ERROR) + self.mock_cli.unlock_luks_volume.side_effect = ExportException( + sdstatus=NewStatus.DEVICE_ERROR + ) with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC \ No newline at end of file + assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC diff --git a/tests/disk/test_volume.py b/tests/disk/test_volume.py index 8651bdbef..f28e711c7 100644 --- a/tests/disk/test_volume.py +++ b/tests/disk/test_volume.py @@ -1,4 +1,3 @@ -import pytest from unittest import mock from securedrop_export.disk.volume import Volume, EncryptionScheme @@ -6,7 +5,11 @@ class TestVolume: def test_overwrite_valid_encryption_scheme(self): - volume = Volume(device_name="/dev/sda", mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS) + volume = Volume( + device_name="/dev/sda", + mapped_name="pretend-luks-mapper-id", + encryption=EncryptionScheme.LUKS, + ) assert volume.encryption is EncryptionScheme.LUKS volume.encryption = None assert volume.encryption is EncryptionScheme.UNKNOWN @@ -14,7 +17,9 @@ def test_overwrite_valid_encryption_scheme(self): @mock.patch("os.path.exists", return_value=True) def test_is_unlocked_true(self, mock_os_path): volume = Volume( - device_name="/dev/sda1", mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS + device_name="/dev/sda1", + mapped_name="pretend-luks-mapper-id", + encryption=EncryptionScheme.LUKS, ) assert volume.unlocked @@ -22,7 +27,9 @@ def test_is_unlocked_true(self, mock_os_path): @mock.patch("os.path.exists", return_value=False) def test_is_unlocked_false_no_path(self, mock_os_path): volume = Volume( - device_name="/dev/sda1", mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS + device_name="/dev/sda1", + mapped_name="pretend-luks-mapper-id", + encryption=EncryptionScheme.LUKS, ) assert not volume.unlocked @@ -30,13 +37,15 @@ def test_is_unlocked_false_no_path(self, mock_os_path): @mock.patch("os.path.exists", return_value=True) def test_writable_false(self, mock_os_path): vol = Volume( - device_name="dev/sda1", mapped_name="pretend-luks-id", encryption=EncryptionScheme.LUKS + device_name="dev/sda1", + mapped_name="pretend-luks-id", + encryption=EncryptionScheme.LUKS, ) assert not vol.writable @mock.patch("os.path.exists", return_value=True) - def test_writable_false(self, mock_os_path): + def test_writable(self, mock_os_path): vol = Volume( device_name="dev/sda1", mapped_name="pretend-luks-id", diff --git a/tests/print/test_service.py b/tests/print/test_service.py index 317cc992d..dfff606d2 100644 --- a/tests/print/test_service.py +++ b/tests/print/test_service.py @@ -1,9 +1,11 @@ -from unittest import mock +import pytest +from unittest import mock import os -import pytest +import subprocess from subprocess import CalledProcessError -import sys + +from securedrop_export.directory_util import safe_mkdir from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive @@ -13,15 +15,24 @@ SAMPLE_OUTPUT_NO_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\nnetwork lpd" # noqa SAMPLE_OUTPUT_BROTHER_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Brother/HL-L2320D%20series?serial=A00000A000000\nnetwork lpd" # noqa SAMPLE_OUTPUT_LASERJET_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000\nnetwork lpd" # noqa -TEST_CONFIG = os.path.join(os.path.dirname(__file__), "sd-export-config.json") - +SAMPLE_OUTPUT_UNSUPPORTED_PRINTER = b"network beh\nnetwork https\nnetwork ipp\nnetwork ipps\nnetwork http\nnetwork\nnetwork ipp14\ndirect usb://Canon/QL-700%?serial=A00000A000000\nnetwork lpd" # noqa -class PrinterTest: +class TestPrint: @classmethod def setup_class(cls): - cls.submission = Archive("testfile", TEST_CONFIG) - cls.service = Service(submission) + cls.submission = Archive("testfile") + cls.service = Service(cls.submission) + + # Set up files as if extracted from tarball + fp = os.path.join(cls.submission.tmpdir, "export_data") + if not os.path.exists(fp): + safe_mkdir(fp) + + for i in ["file1", "file2", "file3"]: + with open(f"{cls.submission.tmpdir}/export_data/{i}.txt", "a+") as file: + file.write(f"It's a pretend file {i}") + file.write("\n") @classmethod def teardown_class(cls): @@ -29,16 +40,72 @@ def teardown_class(cls): cls.submission = None @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) - def test_get_good_printer_uri_laserjet(mocked_call): - assert self.service._get_printer_uri() == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + def test_get_good_printer_uri_laserjet(self, mocked_call): + assert ( + self.service._get_printer_uri() + == "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + ) + + def test_service_initialized_correctly(self): + assert self.service.printer_wait_timeout == 60 + assert self.service.printer_name == "sdw-printer" + + def test_print_all_methods_called(self): + patch_setup = mock.patch.object(self.service, "_check_printer_setup") + patch_print = mock.patch.object(self.service, "_print_all_files") + + mock_setup = patch_setup.start() + mock_print = patch_print.start() + + self.service.print() + + # When the client can accept new status values, we will assert that the + # above call results in Status.PRINT_SUCCESS + assert mock_setup.called_once() + assert mock_print.called_once() + + patch_setup.stop() + patch_print.stop() + + def test_printer_test_all_methods_called(self): + patch_setup = mock.patch.object(self.service, "_check_printer_setup") + + mock_setup = patch_setup.start() + + self.service.printer_preflight() + + # When the client can accept new status values, we will assert that the + # above call results in Status.PREFLIGHT_SUCCESS + assert mock_setup.called_once() + + patch_setup.stop() + + def test_print_all_checks_called(self): + patch_setup = mock.patch.object(self.service, "_check_printer_setup") + patch_print = mock.patch.object(self.service, "_print_test_page") + + mock_setup = patch_setup.start() + mock_print = patch_print.start() + self.service.printer_test() + # When the client can accept new status values, we will assert that the + # above call results in Status.TEST_SUCCESS + + assert mock_setup.called_once() + assert mock_print.called_once() + + patch_setup.stop() + patch_print.stop() @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_LASERJET_PRINTER) - def test_get_good_printer_uri_brother(mocked_call): - assert self.service._get_printer_uri() == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + def test_get_good_printer_uri_brother(self, mocked_call): + assert ( + self.service._get_printer_uri() + == "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + ) @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) - def test_get_bad_printer_uri(mocked_call, capsys, mocker): + def test_get_bad_printer_uri(self, mocked_call, capsys, mocker): with pytest.raises(ExportException) as ex: self.service._get_printer_uri() @@ -53,7 +120,7 @@ def test_get_bad_printer_uri(mocked_call, capsys, mocker): "/tmp/tmpJf83j9/secret.pptx" ], ) - def test_is_open_office_file(capsys, open_office_paths): + def test_is_open_office_file(self, capsys, open_office_paths): assert self.service._is_open_office_file(open_office_paths) @pytest.mark.parametrize( @@ -65,37 +132,44 @@ def test_is_open_office_file(capsys, open_office_paths): "/tmp/tmpJf83j9/secret.gpg" ], ) - def test_is_not_open_office_file(capsys, open_office_paths): + def test_is_not_open_office_file(self, capsys, open_office_paths): assert not self.service._is_open_office_file(open_office_paths) @mock.patch("subprocess.run") - def test_install_printer_ppd_laserjet(mocker): - ppd = self.service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000") + def test_install_printer_ppd_laserjet(self, mocker): + ppd = self.service._install_printer_ppd( + "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A00000" + ) assert ppd == "/usr/share/cups/model/hp-laserjet_6l.ppd" @mock.patch("subprocess.run") - def test_install_printer_ppd_brother(mocker): - ppd = self.service._install_printer_ppd("usb://Brother/HL-L2320D%20series?serial=A00000A000000") + def test_install_printer_ppd_brother(self, mocker): + ppd = self.service._install_printer_ppd( + "usb://Brother/HL-L2320D%20series?serial=A00000A000000" + ) assert ppd == "/usr/share/cups/model/br7030.ppd" - - def test_install_printer_ppd_error_no_driver(mocker): + def test_install_printer_ppd_error_no_driver(self, mocker): mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) with pytest.raises(ExportException) as ex: - self.service._install_printer_ppd("usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000") + self.service._install_printer_ppd( + "usb://HP/LaserJet%20Pro%20M404-M405?serial=A00000A000000" + ) assert ex.value.sdstatus is Status.ERROR_PRINTER_DRIVER_UNAVAILABLE - def test_install_printer_ppd_error_not_supported(mocker): + def test_install_printer_ppd_error_not_supported(self, mocker): mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) with pytest.raises(ExportException) as ex: - self.service._install_printer_ppd("usb://Not/Supported?serial=A00000A000000") + self.service._install_printer_ppd( + "usb://Not/Supported?serial=A00000A000000" + ) assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED - def test_setup_printer_error(mocker): + def test_setup_printer_error(self, mocker): mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) with pytest.raises(ExportException) as ex: @@ -106,7 +180,6 @@ def test_setup_printer_error(mocker): assert ex.value.sdstatus is Status.ERROR_PRINTER_INSTALL - def test_safe_check_call(self): # This works, since `ls` is a valid comand self.service.safe_check_call(["ls"], Status.TEST_SUCCESS) @@ -115,12 +188,12 @@ def test_safe_check_call_invalid_call(self): with pytest.raises(ExportException) as ex: self.service.safe_check_call(["ls", "kjdsfhkdjfh"], Status.ERROR_PRINT) - assert ex.value.sdstatus is FakeStatus.ERROR_PRINT + assert ex.value.sdstatus is Status.ERROR_PRINT def test_safe_check_call_write_to_stderr_and_ignore_error(self): self.service.safe_check_call( ["python3", "-c", "import sys;sys.stderr.write('hello')"], - Status.TEST_SUCCESS, + error_status=Status.TEST_SUCCESS, ignore_stderr_startswith=b"hello", ) @@ -129,8 +202,192 @@ def test_safe_check_call_write_to_stderr_wrong_ignore_param(self): with pytest.raises(ExportException) as ex: self.service.safe_check_call( ["python3", "-c", "import sys;sys.stderr.write('hello\n')"], - Status.ERROR_PRINT, + error_status=Status.ERROR_PRINT, ignore_stderr_startswith=b"world", ) - assert ex.value.sdstatus is Status.ERROR_PRINT \ No newline at end of file + assert ex.value.sdstatus is Status.ERROR_PRINT + + @mock.patch("time.sleep", return_value=None) + @mock.patch( + "subprocess.check_output", + side_effect=[ + b"printer sdw-printer is busy\n", + b"printer sdw-printer is idle\n", + ], + ) + def test__wait_for_print(self, mock_subprocess, mock_time): + assert self.service._wait_for_print() + + @mock.patch("time.sleep", return_value=None) + @mock.patch( + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), + ) + def test__wait_for_print_print_exception(self, mock_subprocess, mock_time): + with pytest.raises(ExportException) as ex: + self.service._wait_for_print() + + assert ex.value.sdstatus is Status.ERROR_PRINT + + @mock.patch( + "subprocess.check_output", return_value=b"printer sdw-printer is busy\n" + ) + def test__wait_for_print_timeout_exception(self, mock_subprocess): + self.service.printer_wait_timeout = 1 + + with pytest.raises(ExportException) as ex: + self.service._wait_for_print() + + assert ex.value.sdstatus is Status.ERROR_PRINT + + self.service.printer_wait_timeout = self.service.PRINTER_WAIT_TIMEOUT + + @pytest.mark.parametrize( + "printers", [SAMPLE_OUTPUT_BROTHER_PRINTER, SAMPLE_OUTPUT_LASERJET_PRINTER] + ) + def test__check_printer_setup(self, printers, mocker): + mocker.patch("subprocess.check_output", return_value=printers) + p = mocker.patch.object(self.service, "_setup_printer") + p2 = mocker.patch.object(self.service, "_install_printer_ppd") + p.start() + p2.start() + + self.service._check_printer_setup() + p.assert_called_once() + p2.assert_called_once() + + p.stop() + p2.stop() + + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) + def test__check_printer_setup_error_no_printer(self, mock_output): + + with pytest.raises(ExportException) as ex: + self.service._check_printer_setup() + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_FOUND + + @mock.patch( + "subprocess.check_output", + return_value=SAMPLE_OUTPUT_BROTHER_PRINTER + + b"\n" + + SAMPLE_OUTPUT_LASERJET_PRINTER, + ) + def test__check_printer_setup_error_too_many_printers(self, mock_output): + + with pytest.raises(ExportException) as ex: + self.service._check_printer_setup() + assert ex.value.sdstatus is Status.ERROR_MULTIPLE_PRINTERS_FOUND + + @mock.patch( + "subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER + ) + def test__check_printer_setup_error_unsupported_printer(self, mock_output): + + with pytest.raises(ExportException) as ex: + self.service._check_printer_setup() + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED + + @mock.patch( + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), + ) + def test__check_printer_setup_error_checking_printer(self, mock_output): + + with pytest.raises(ExportException) as ex: + self.service._check_printer_setup() + assert ex.value.sdstatus is Status.ERROR_UNKNOWN + + @mock.patch( + "subprocess.check_output", + side_effect=subprocess.CalledProcessError(1, "check_output"), + ) + def test__get_printer_uri_error(self, mocked_subprocess): + with pytest.raises(ExportException) as ex: + self.service._get_printer_uri() + assert ex.value.sdstatus is Status.ERROR_PRINTER_URI + + @mock.patch( + "subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER + ) + def test__get_printer_uri_error_unsupported(self, mocked_subprocess): + with pytest.raises(ExportException) as ex: + self.service._get_printer_uri() + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED + + def test__install_printer_ppd_error_unsupported_uri(self): + with pytest.raises(ExportException) as ex: + self.service._install_printer_ppd( + "usb://YOURE_NOT_MY_REAL_PRINTER/A00000A000000" + ) + assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED + + def test__print_test_page_calls_method(self): + p = mock.patch.object(self.service, "_print_file") + mock_print = p.start() + + self.service._print_test_page() + mock_print.assert_called_once_with("/usr/share/cups/data/testprint") + p.stop() + + def test__print_all_files(self): + p = mock.patch.object(self.service, "_print_file") + mock_print = p.start() + + self.service._print_all_files() + mock_print.assert_has_calls( + [ + mock.call(f"{self.submission.tmpdir}/export_data/file1.txt"), + mock.call(f"{self.submission.tmpdir}/export_data/file2.txt"), + mock.call(f"{self.submission.tmpdir}/export_data/file3.txt"), + ], + any_order=True, + ) + p.stop() + + def test_open_office_file_convert_to_pdf(self): + file = "/tmp/definitely-an-office-file.odt" + + with mock.patch.object(self.service, "safe_check_call") as scc, mock.patch( + "securedrop_export.print.service.logger.info" + ) as log: + self.service._print_file(file) + + assert scc.call_count == 2 + scc.assert_has_calls( + [ + mock.call( + command=[ + "unoconv", + "-o", + "/tmp/definitely-an-office-file.odt.pdf", + "/tmp/definitely-an-office-file.odt", + ], + error_status=Status.ERROR_PRINT, + ), + mock.call( + command=[ + "xpp", + "-P", + "sdw-printer", + "/tmp/definitely-an-office-file.odt.pdf", + ], + error_status=Status.ERROR_PRINT, + ), + ] + ) + assert log.call_count == 2 + log.assert_has_calls( + [ + mock.call("Converting Office document to pdf"), + mock.call("Sending file to printer sdw-printer"), + ] + ) + + def test_safe_check_call_has_error_in_stderr(self): + mock.patch("subprocess.run") + + with mock.patch("subprocess.run"), pytest.raises(ExportException) as ex: + self.service.safe_check_call(command="ls", error_status=Status.TEST_SUCCESS) + + assert ex.value.sdstatus is Status.TEST_SUCCESS diff --git a/tests/test_archive.py b/tests/test_archive.py index 4e840abf3..57791a82e 100644 --- a/tests/test_archive.py +++ b/tests/test_archive.py @@ -12,6 +12,7 @@ from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive, Metadata, Status + def test_extract_tarball(): """ Check that we can successfully extract a valid tarball. @@ -42,20 +43,25 @@ def test_extract_tarball(): archive.close() - submission = Archive(archive_path) + submission = Archive(archive_path).extract_tarball() assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" - submission.extract_tarball() - - extracted_file_path = os.path.join(submission.tmpdir, "some", "dirs", "file.txt") + extracted_file_path = os.path.join( + submission.tmpdir, "some", "dirs", "file.txt" + ) assert os.path.exists(extracted_file_path) assert oct(os.stat(extracted_file_path).st_mode) == "0o100600" # Subdirectories that are added as members are extracted with 700 permissions - assert oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" + assert ( + oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" + ) # Subdirectories that are not added as members are extracted with 700 permissions # because os.umask(0o077) is set in the Archive constructor. - assert oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) == "0o40700" + assert ( + oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) + == "0o40700" + ) def test_extract_tarball_with_symlink(): @@ -84,7 +90,7 @@ def test_extract_tarball_with_symlink(): submission = Archive(archive_path) assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" - submission.extract_tarball() + submission = submission.extract_tarball() symlink_path = os.path.join(submission.tmpdir, "symlink") assert os.path.islink(symlink_path) @@ -111,7 +117,9 @@ def test_extract_tarball_raises_if_doing_path_traversal(): metadata_file_info.size = len(metadata_str) archive.addfile(metadata_file_info, metadata_bytes) content = b"test" - traversed_file_info = tarfile.TarInfo("../../../../../../../../../tmp/traversed") + traversed_file_info = tarfile.TarInfo( + "../../../../../../../../../tmp/traversed" + ) traversed_file_info.size = len(content) archive.addfile(traversed_file_info, BytesIO(content)) archive.close() @@ -288,7 +296,9 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): archive_path = os.path.join(temp_dir, "archive.sd-export") symlink_path = os.path.join(temp_dir, "symlink") - os.system(f"ln -s {tmp}/unsafe {symlink_path}") # create symlink to "/tmp/unsafe" + os.system( + f"ln -s {tmp}/unsafe {symlink_path}" + ) # create symlink to "/tmp/unsafe" with tarfile.open(archive_path, "w:gz") as archive: metadata = { @@ -402,7 +412,8 @@ def test_empty_config(capsys): f.write("{}") with pytest.raises(ExportException) as ex: - config = Metadata.create_and_validate(temp_folder) + Metadata(temp_folder).validate() + assert ex.value.sdstatus is Status.ERROR_ARCHIVE_METADATA def test_valid_printer_test_config(capsys): @@ -412,7 +423,7 @@ def test_valid_printer_test_config(capsys): with open(metadata, "w") as f: f.write('{"device": "printer-test"}') - config = Metadata.create_and_validate(temp_folder) + config = Metadata(temp_folder).validate() assert config.encryption_key is None assert config.encryption_method is None @@ -425,7 +436,7 @@ def test_valid_printer_config(capsys): with open(metadata, "w") as f: f.write('{"device": "printer"}') - config = Metadata.create_and_validate(temp_folder) + config = Metadata(temp_folder).validate() assert config.encryption_key is None assert config.encryption_method is None @@ -437,14 +448,17 @@ def test_invalid_encryption_config(capsys): temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write('{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}') + f.write( + '{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}' + ) with pytest.raises(ExportException) as ex: - config = Metadata.create_and_validate(temp_folder) + Metadata(temp_folder).validate() assert ex.value.sdstatus is Status.ERROR_ARCHIVE_METADATA -def test_malforned_config(capsys): + +def test_invalid_config(capsys): Archive("testfile") temp_folder = tempfile.mkdtemp() @@ -453,37 +467,46 @@ def test_malforned_config(capsys): f.write('{"device": "asdf", "encryption_method": "OHNO"}') with pytest.raises(ExportException) as ex: - config = Metadata.create_and_validate(temp_folder) + Metadata(temp_folder).validate() + + assert ex.value.sdstatus is Status.ERROR_ARCHIVE_METADATA + + +def test_malformed_config(capsys): + Archive("testfile") + + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "asdf", "encryption_method": {"OHNO", "MALFORMED"}') + + with pytest.raises(ExportException) as ex: + Metadata(temp_folder).validate() assert ex.value.sdstatus is Status.ERROR_METADATA_PARSING + def test_valid_encryption_config(capsys): Archive("testfile") temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write('{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}') + f.write( + '{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}' + ) - config = Metadata.create_and_validate(temp_folder) + config = Metadata(temp_folder).validate() assert config.encryption_key == "hunter1" assert config.encryption_method == "luks" -def test_cannot_use_metadata_constructor(): - """ - Require the `create_and_validate()` method for returning a Metadata object - """ - with pytest.raises(ValueError): - Metadata(object(), tempfile.mkdtemp()) - - @mock.patch("json.loads", side_effect=json.decoder.JSONDecodeError("ugh", "badjson", 0)) def test_metadata_parsing_error(mock_json): """ Handle exception caused when loading metadata JSON """ with pytest.raises(ExportException) as ex: - Metadata.create_and_validate(tempfile.mkdtemp()) + Metadata(tempfile.mkdtemp()).validate() - assert ex.value.sdstatus is Status.ERROR_METADATA_PARSING \ No newline at end of file + assert ex.value.sdstatus is Status.ERROR_METADATA_PARSING diff --git a/tests/test_directory_util.py b/tests/test_directory_util.py index 18eb6dd2a..cc1f304a8 100644 --- a/tests/test_directory_util.py +++ b/tests/test_directory_util.py @@ -1,24 +1,34 @@ import pytest import os +import tempfile +import shutil from pathlib import Path from securedrop_export import directory_util -from securedrop_export.exceptions import ExportException -class TestUtil: - _TMPDIR_PATH = "/tmp/pretendium/" +class TestDirectoryUtil: + _REL_TRAVERSAL = "../../../whee" _SAFE_RELPATH = "./hi" _SAFE_RELPATH2 = "yay/a/path" _UNSAFE_RELPATH = "lgtm/../ohwait" + @classmethod + def setup_class(cls): + cls.homedir = tempfile.mkdtemp() + "/" + + @classmethod + def teardown_class(cls): + if os.path.exists(cls.homedir): + shutil.rmtree(cls.homedir) + def setup_method(self, method): pass def teadown_method(self, method): - if (os.path.exists(self._TMPDIR_PATH)): - os.remove(self._TMPDIR_PATH) + if os.path.exists(self.homedir): + os.remove(self.homedir) def test_safe_mkdir_error_base_relpath(self): with pytest.raises(ValueError): @@ -26,40 +36,49 @@ def test_safe_mkdir_error_base_relpath(self): def test_safe_mkdir_error_basepath_path_traversal(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(f"{self._TMPDIR_PATH}{self._REL_TRAVERSAL}") + directory_util.safe_mkdir(f"{self.homedir}{self._REL_TRAVERSAL}") def test_safe_mkdir_error_relpath_path_traversal(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._REL_TRAVERSAL}") + directory_util.safe_mkdir(f"{self.homedir}", f"{self._REL_TRAVERSAL}") def test_safe_mkdir_success(self): - directory_util.safe_mkdir(f"{self._TMPDIR_PATH}") + directory_util.safe_mkdir(f"{self.homedir}") def test_safe_mkdir_success_with_relpath(self): - directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._SAFE_RELPATH}") + directory_util.safe_mkdir(f"{self.homedir}", f"{self._SAFE_RELPATH}") - assert (os.path.exists(f"{self._TMPDIR_PATH}{self._SAFE_RELPATH}")) + assert os.path.exists(f"{self.homedir}{self._SAFE_RELPATH}") def test_safe_mkdir_success_another_relpath(self): - directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._SAFE_RELPATH2}") + directory_util.safe_mkdir(f"{self.homedir}", f"{self._SAFE_RELPATH2}") + + assert os.path.exists(f"{self.homedir}{self._SAFE_RELPATH2}") - assert (os.path.exists(f"{self._TMPDIR_PATH}{self._SAFE_RELPATH2}")) - def test_safe_mkdir_weird_path(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(f"{self._TMPDIR_PATH}", f"{self._UNSAFE_RELPATH}") + directory_util.safe_mkdir(f"{self.homedir}", f"{self._UNSAFE_RELPATH}") def test__check_all_permissions_path_missing(self): with pytest.raises(ValueError): - directory_util._check_all_permissions(f"{self._TMPDIR_PATH}", f"{self._SAFE_RELPATH}") + directory_util._check_all_permissions( + f"{self.homedir}", f"{self._SAFE_RELPATH}" + ) def test_check_dir_perms_unsafe(self): - path = Path(f"{self._TMPDIR_PATH}{self._SAFE_RELPATH}") + path = Path(f"{self.homedir}{self._SAFE_RELPATH}") directory_util.safe_mkdir(path) # Not what we want, ever path.chmod(0o666) - + with pytest.raises(RuntimeError): - directory_util._check_dir_permissions(path) + directory_util._check_dir_permissions(path) + + def test_check_all_perms_invalid_full_path(self): + path = Path(f"{self.homedir}/idontexist") + base = Path(f"{self.homedir}") + + # Returns without error + assert directory_util._check_all_permissions(path, base) is None diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index 577fae13a..71af41143 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -3,18 +3,18 @@ from securedrop_export.exceptions import handler, TimeoutException + def test_handler(): signal.signal(signal.SIGALRM, handler) signal.setitimer(signal.ITIMER_REAL, 0.001) - with pytest.raises(TimeoutException) as ex: + with pytest.raises(TimeoutException): _run_handler_routine() + def _run_handler_routine(): try: while True: continue except TimeoutException: raise - - \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index e309ec305..b94109a88 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,17 +1,41 @@ import pytest -from unittest import mock +import tempfile import os +from unittest import mock +import shutil + +from securedrop_export.archive import Archive, Metadata, Status as ArchiveStatus +from securedrop_export.status import BaseStatus +from securedrop_export.command import Command +from securedrop_export.exceptions import ExportException + +from securedrop_export.main import ( + Status, + entrypoint, + _exit_gracefully, + _write_status, + _start_service, + _configure_logging, +) + +SUBMISSION_SAMPLE_ARCHIVE = "pretendfile.tar.gz" -from securedrop_export.main import Status, entrypoint, _extract_and_run, _exit_gracefully, _write_status # noqa: F401 -from securedrop_export.archive import Archive -class TestMain(): +class TestMain: + def setup_method(self, method): + # This can't be a class method, since we expect sysexit during this test suite, + # which + self.submission = Archive("pretendfile.tar.gz") + assert os.path.exists(self.submission.tmpdir) + + def teardown_method(self, method): + if os.path.exists(self.submission.tmpdir): + shutil.rmtree(self.submission.tmpdir) + self.submission = None def test_exit_gracefully_no_exception(self, capsys): - submission = Archive("testfile") - with pytest.raises(SystemExit) as sysexit: - _exit_gracefully(submission, Status.ERROR_GENERIC) + _exit_gracefully(self.submission, Status.ERROR_GENERIC) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 @@ -20,23 +44,19 @@ def test_exit_gracefully_no_exception(self, capsys): assert captured.err == "{}\n".format(Status.ERROR_GENERIC.value) assert captured.out == "" - def test_exit_gracefully_exception(self, capsys): - submission = Archive("testfile") - with pytest.raises(SystemExit) as sysexit: exception = mock.MagicMock() exception.output = "BANG!" - _exit_gracefully(submission, Status.ERROR_GENERIC, e=exception) + _exit_gracefully(self.submission, Status.ERROR_GENERIC, e=exception) # A graceful exit means a return code of 0 assert sysexit.value.code == 0 captured = capsys.readouterr() - assert captured.err.rstrip() == Status.ERROR_GENERIC.value + assert captured.err.rstrip() == Status.ERROR_GENERIC.value # todo assert captured.out == "" - @pytest.mark.parametrize("status", [s for s in Status]) def test_write_status(self, status, capsys): _write_status(status) @@ -49,13 +69,121 @@ def test_write_status_error(self, invalid_status, capsys): with pytest.raises(ValueError): _write_status(Status(invalid_status)) + def _did_exit_gracefully(self, exit, capsys, status: BaseStatus) -> bool: + """ + Helper. True if exited with 0, writing supplied status to stderr. + """ + return exit.value.code == 0 and capsys.readouterr().err == status.value + "\n" + + @pytest.mark.parametrize("command", list(Command)) + @mock.patch("securedrop_export.main._configure_logging") + @mock.patch("os.path.exists", return_value=True) + def test_entrypoint_success_start_service(self, mock_log, mock_path, command): + metadata = os.path.join(self.submission.tmpdir, Metadata.METADATA_FILE) + + with open(metadata, "w") as f: + f.write(f'{{"device": "{command.value}", "encryption_method": "luks"}}') + + with mock.patch( + "sys.argv", ["qvm-send-to-usb", SUBMISSION_SAMPLE_ARCHIVE] + ), mock.patch( + "securedrop_export.main._start_service" + ) as mock_service, mock.patch( + "securedrop_export.main.Archive.extract_tarball", + return_value=self.submission, + ), pytest.raises( + SystemExit + ): + entrypoint() + + if command is not Command.START_VM: + assert self.submission.command == command + assert mock_service.call_args[0][0].archive == SUBMISSION_SAMPLE_ARCHIVE + mock_service.assert_called_once_with(self.submission) + + def test_valid_printer_test_config(self, capsys): + Archive("testfile") + temp_folder = tempfile.mkdtemp() + metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) + with open(metadata, "w") as f: + f.write('{"device": "printer-test"}') + + config = Metadata(temp_folder).validate() + + assert config.encryption_key is None + assert config.encryption_method is None + + @mock.patch( + "securedrop_export.archive.safe_extractall", + side_effect=ValueError("A tarball problem!"), + ) + @mock.patch("securedrop_export.main.os.path.exists", return_value=True) + @mock.patch("securedrop_export.main.shutil.rmtree") + def test_entrypoint_failure_extraction( + self, mock_rm, mock_path, mock_extract, capsys + ): + with mock.patch( + "sys.argv", ["qvm-send-to-usb", SUBMISSION_SAMPLE_ARCHIVE] + ), pytest.raises(SystemExit) as sysexit: + entrypoint() + + assert self._did_exit_gracefully( + sysexit, capsys, ArchiveStatus.ERROR_EXTRACTION + ) + + @mock.patch( + "securedrop_export.main._configure_logging", + side_effect=ExportException( + sdstatus=Status.ERROR_LOGGING, + message="Zounds, an error setting up logging!", + ), + ) + def test_entrypoint_logging_fails(self, mock_mkdir, capsys): + with pytest.raises(SystemExit) as sysexit: + entrypoint() + + assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_LOGGING) + + @mock.patch( + "securedrop_export.main._configure_logging", + side_effect=RuntimeError("Zounds, an uncaught error!"), + ) + def test_entrypoint_fails_unexpected(self, mock_mkdir, capsys): + with pytest.raises(SystemExit) as sysexit: + entrypoint() + + assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) + + @mock.patch("os.path.exists", return_value=False) + def test_entrypoint_archive_path_fails(self, mock_path, capsys): + with pytest.raises(SystemExit) as sysexit: + entrypoint() + + assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_FILE_NOT_FOUND) + + @mock.patch( + "securedrop_export.main.safe_mkdir", + side_effect=ValueError(1, "No logs for you!"), + ) + def test__configure_logging_error(self, mock_mkdir, capsys): + with pytest.raises(ExportException) as ex: + _configure_logging() + + assert ex.value.sdstatus is Status.ERROR_LOGGING - def test__extract_and_run(self): - pass + @pytest.mark.parametrize("command", list(Command)) + def test__start_service_calls_correct_services(self, command): + if command is Command.START_VM: + pytest.skip("Command does not start a service") + self.submission.command = command - def test__extract_and_run_failure(self): - pass + with mock.patch("securedrop_export.main.PrintService") as ps, mock.patch( + "securedrop_export.main.ExportService" + ) as es: + _start_service(self.submission) - def test_entrypoint(self): - pass + if command in [Command.PRINT, Command.PRINTER_TEST, Command.PRINTER_PREFLIGHT]: + assert ps.call_args[0][0] is self.submission + else: + assert es.call_args[0][0] is self.submission From d488374d77a378e65eb3ebd5849244a0b1decea4 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 28 Nov 2022 20:58:35 -0800 Subject: [PATCH 541/751] Cleanup: Use wait_for_print method to ensure jobs are correctly transferred. Log exceptions when they occur instead of during graceful exit. Rename old service and status files to legacy_*; address review feedback. --- .semgrep/custom-rules.yaml | 4 +- securedrop_export/archive.py | 2 +- .../{directory_util.py => directory.py} | 3 - securedrop_export/disk/__init__.py | 1 + securedrop_export/disk/cli.py | 6 +- securedrop_export/disk/legacy_service.py | 146 +++++++++++++ securedrop_export/disk/legacy_status.py | 26 +++ securedrop_export/disk/new_service.py | 120 ----------- securedrop_export/disk/new_status.py | 29 --- securedrop_export/disk/service.py | 194 ++++++++---------- securedrop_export/disk/status.py | 35 ++-- securedrop_export/exceptions.py | 5 - securedrop_export/main.py | 26 +-- securedrop_export/print/__init__.py | 1 + securedrop_export/print/service.py | 23 ++- tests/disk/test_cli.py | 2 +- tests/disk/test_service.py | 46 ++--- tests/disk/test_status.py | 0 tests/print/test_service.py | 70 +++++-- ...st_directory_util.py => test_directory.py} | 28 ++- tests/test_main.py | 30 ++- 21 files changed, 421 insertions(+), 376 deletions(-) rename securedrop_export/{directory_util.py => directory.py} (99%) create mode 100644 securedrop_export/disk/legacy_service.py create mode 100644 securedrop_export/disk/legacy_status.py delete mode 100644 securedrop_export/disk/new_service.py delete mode 100644 securedrop_export/disk/new_status.py delete mode 100644 tests/disk/test_status.py rename tests/{test_directory_util.py => test_directory.py} (67%) diff --git a/.semgrep/custom-rules.yaml b/.semgrep/custom-rules.yaml index 38f60f003..377e55f4e 100644 --- a/.semgrep/custom-rules.yaml +++ b/.semgrep/custom-rules.yaml @@ -47,7 +47,7 @@ rules: languages: - python severity: ERROR - message: Possible path traversal or insecure directory and file permissions through os.mkdir(). Use securedrop_export.directory_util.safe_mkdir instead. + message: Possible path traversal or insecure directory and file permissions through os.mkdir(). Use securedrop_export.directory.safe_mkdir instead. patterns: - pattern: "....mkdir(...)" - pattern-not-inside: | @@ -58,7 +58,7 @@ rules: languages: - python severity: ERROR - message: Possible path traversal or insecure directory and file permissions through os.makedirs(). Use securedrop_export.directory_util.safe_mkdir instead. + message: Possible path traversal or insecure directory and file permissions through os.makedirs(). Use securedrop_export.directory.safe_mkdir instead. patterns: - pattern: "....makedirs(...)" - pattern-not-inside: | diff --git a/securedrop_export/archive.py b/securedrop_export/archive.py index 2ec50b5c8..ed8108221 100755 --- a/securedrop_export/archive.py +++ b/securedrop_export/archive.py @@ -9,7 +9,7 @@ from securedrop_export.exceptions import ExportException from securedrop_export.status import BaseStatus from securedrop_export.command import Command -from securedrop_export.directory_util import safe_extractall +from securedrop_export.directory import safe_extractall logger = logging.getLogger(__name__) diff --git a/securedrop_export/directory_util.py b/securedrop_export/directory.py similarity index 99% rename from securedrop_export/directory_util.py rename to securedrop_export/directory.py index a2a866c7e..4f5edf546 100644 --- a/securedrop_export/directory_util.py +++ b/securedrop_export/directory.py @@ -2,9 +2,6 @@ import tarfile from pathlib import Path from typing import Optional, Union -import logging - -logger = logging.getLogger(__name__) def safe_mkdir( diff --git a/securedrop_export/disk/__init__.py b/securedrop_export/disk/__init__.py index e69de29bb..3fa6c3647 100644 --- a/securedrop_export/disk/__init__.py +++ b/securedrop_export/disk/__init__.py @@ -0,0 +1 @@ +from .service import Service # noqa: F401 diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index 7abb33b02..5d07c9d53 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -7,7 +7,7 @@ from securedrop_export.exceptions import ExportException from .volume import EncryptionScheme, Volume -from .new_status import Status +from .status import Status logger = logging.getLogger(__name__) @@ -125,7 +125,7 @@ def _check_partitions(self, blkid: str) -> str: return device_and_partitions except subprocess.CalledProcessError as ex: - logger.error(f"Error checking block deivce {blkid}") + logger.error(f"Error checking block device {blkid}") raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex def is_luks_volume(self, device: str) -> bool: @@ -364,7 +364,7 @@ def cleanup_drive_and_tmpdir(self, volume: Volume, submission_tmpdir: str): directory. Currently called at end of `write_data_to_device()` to ensure device is always locked after export. - Raise ExportException if errors during cleanup are encoutered. + Raise ExportException if errors during cleanup are encountered. """ logger.debug("Syncing filesystems") try: diff --git a/securedrop_export/disk/legacy_service.py b/securedrop_export/disk/legacy_service.py new file mode 100644 index 000000000..279a84d9c --- /dev/null +++ b/securedrop_export/disk/legacy_service.py @@ -0,0 +1,146 @@ +import logging + +from securedrop_export.exceptions import ExportException + +from .cli import CLI +from .legacy_status import Status as LegacyStatus +from .status import Status as Status + +logger = logging.getLogger(__name__) + + +class Service: + def __init__(self, submission, cli=None): + self.submission = submission + self.cli = cli or CLI() + + def check_connected_devices(self) -> LegacyStatus: + """ + Check if single USB is inserted. + """ + logger.info("Export archive is usb-test") + + try: + all_devices = self.cli.get_connected_devices() + num_devices = len(all_devices) + + except ExportException as ex: + logger.error(f"Error encountered during USB check: {ex.sdstatus.value}") + # Use legacy status instead of new status values + raise ExportException(sdstatus=LegacyStatus.LEGACY_ERROR_USB_CHECK) from ex + + if num_devices == 0: + raise ExportException(sdstatus=LegacyStatus.LEGACY_USB_NOT_CONNECTED) + elif num_devices == 1: + return LegacyStatus.LEGACY_USB_CONNECTED + elif num_devices > 1: + raise ExportException( + sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + ) + + def check_disk_format(self) -> LegacyStatus: + """ + Check if volume is correctly formatted for export. + """ + try: + all_devices = self.cli.get_connected_devices() + + if len(all_devices) == 1: + device = self.cli.get_partitioned_device(all_devices[0]) + logger.info("Check if LUKS") + if not self.cli.is_luks_volume(device): + raise ExportException( + sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + ) + # We can support checking if a drive is already unlocked, but for + # backwards compatibility, this is the only expected status + # at this stage + return LegacyStatus.LEGACY_USB_ENCRYPTED + + except ExportException as ex: + logger.error( + f"Error encountered during disk format check: {ex.sdstatus.value}" + ) + # Return legacy status values for now for ongoing client compatibility + if ex.sdstatus in [s for s in Status]: + status = self._legacy_status(ex.sdstatus) + raise ExportException(sdstatus=status) + elif ex.sdstatus: + raise + else: + raise ExportException(sdstatus=LegacyStatus.LEGACY_USB_DISK_ERROR) + + def export(self): + """ + Export all files to target device. + """ + logger.info("Export archive is disk") + + try: + all_devices = self.cli.get_connected_devices() + + if len(all_devices) == 1: + device = self.cli.get_partitioned_device(all_devices[0]) + + # Decide what kind of volume it is + logger.info("Check if LUKS") + if self.cli.is_luks_volume(device): + volume = self.cli.get_luks_volume(device) + logger.info("Check if writable") + if not volume.writable: + logger.info("Not writable-will try unlocking") + volume = self.cli.unlock_luks_volume( + volume, self.submission.encryption_key + ) + volume = self.cli.mount_volume(volume) + + logger.info(f"Export submission to {volume.mountpoint}") + self.cli.write_data_to_device( + self.submission.tmpdir, self.submission.target_dirname, volume + ) + # This is SUCCESS_EXPORT, but the 0.7.0 client is not expecting + # a return status from a successful export operation. + # When the client is updated, we will return SUCCESS_EXPORT here. + + else: + # Another kind of drive: VeraCrypt/TC, or unsupported. + # For now this is an error--in future there will be support + # for additional encryption formats + logger.error(f"Export failed because {device} is not supported") + raise ExportException( + sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + ) + + except ExportException as ex: + logger.error( + f"Error encountered during disk format check: {ex.sdstatus.value}" + ) + # Return legacy status values for now for ongoing client compatibility + if ex.sdstatus in [s for s in Status]: + status = self._legacy_status(ex.sdstatus) + raise ExportException(sdstatus=status) + elif ex.sdstatus: + raise + else: + raise ExportException(sdstatus=LegacyStatus.LEGACY_ERROR_GENERIC) + + def _legacy_status(self, status: Status) -> LegacyStatus: + """ + Backwards-compatibility - status values that client (@0.7.0) is expecting. + """ + logger.info(f"Convert to legacy: {status.value}") + if status is Status.ERROR_MOUNT: + return LegacyStatus.LEGACY_ERROR_USB_MOUNT + elif status in [Status.ERROR_EXPORT, Status.ERROR_EXPORT_CLEANUP]: + return LegacyStatus.LEGACY_ERROR_USB_WRITE + elif status in [Status.ERROR_UNLOCK_LUKS, Status.ERROR_UNLOCK_GENERIC]: + return LegacyStatus.LEGACY_USB_BAD_PASSPHRASE + elif status in [ + Status.INVALID_DEVICE_DETECTED, + Status.MULTI_DEVICE_DETECTED, + ]: + return LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + # The other status values, such as Status.NO_DEVICE_DETECTED, are not returned by the + # CLI, so we don't need to check for them here + else: + return LegacyStatus.LEGACY_ERROR_GENERIC diff --git a/securedrop_export/disk/legacy_status.py b/securedrop_export/disk/legacy_status.py new file mode 100644 index 000000000..fa0bdf869 --- /dev/null +++ b/securedrop_export/disk/legacy_status.py @@ -0,0 +1,26 @@ +from securedrop_export.status import BaseStatus + + +class Status(BaseStatus): + + LEGACY_ERROR_GENERIC = "ERROR_GENERIC" + + # Legacy USB preflight related + LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success + LEGACY_USB_NOT_CONNECTED = "USB_NOT_CONNECTED" + LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" + + # Legacy USB Disk preflight related errors + LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success + LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" + + # Can be raised during disk format check + LEGACY_USB_DISK_ERROR = "USB_DISK_ERROR" + + # Legacy Disk export errors + LEGACY_USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" + LEGACY_ERROR_USB_MOUNT = "ERROR_USB_MOUNT" + LEGACY_ERROR_USB_WRITE = "ERROR_USB_WRITE" + + # New + SUCCESS_EXPORT = "SUCCESS_EXPORT" diff --git a/securedrop_export/disk/new_service.py b/securedrop_export/disk/new_service.py deleted file mode 100644 index b5702a474..000000000 --- a/securedrop_export/disk/new_service.py +++ /dev/null @@ -1,120 +0,0 @@ -import logging - -from securedrop_export.archive import Archive - -from .cli import CLI -from .status import Status -from .volume import Volume -from securedrop_export.exceptions import ExportException - - -logger = logging.getLogger(__name__) - - -class Service: - """ - Checks that can be performed against the device(s). - This is the "API" portion of the export workflow. - """ - - def __init__(self, cli: CLI): - self.cli = cli - - def run(self, arg: str) -> Status: - """ - Run export actions. - """ - - def scan_all_devices(self) -> Status: - """ - Check all connected devices and return current device - status. - """ - try: - all_devices = self.cli.get_connected_devices() - number_devices = len(all_devices) - - if number_devices == 0: - return Status.NO_DEVICE_DETECTED - elif number_devices > 1: - return Status.MULTI_DEVICE_DETECTED - else: - return self.scan_single_device(all_devices[0]) - - except ExportException as ex: - logger.error(ex) - return Status.DEVICE_ERROR # Could not assess devices - - def scan_single_device(self, blkid: str) -> Status: - """ - Given a string representing a single block device, see if it - is a suitable export target and return information about its state. - """ - try: - target = self.cli.get_partitioned_device(blkid) - - # See if it's a LUKS drive - if self.cli.is_luks_volume(target): - - # Returns Volume or throws ExportException - self.volume = self.cli.get_luks_volume(target) - - # See if it's unlocked and mounted - if self.volume.writable: - logger.debug("LUKS device is already mounted") - return Status.DEVICE_WRITABLE - else: - # Prompt for passphrase - return Status.DEVICE_LOCKED - else: - # Might be VeraCrypt, might be madness - logger.info("LUKS drive not found") - - # Currently we don't support anything other than LUKS. - # In future, we will support TC/VC volumes as well - return Status.INVALID_DEVICE_DETECTED - - except ExportException as ex: - logger.error(ex) - if ex.sdstatus: - return ex.sdstatus - else: - return Status.DEVICE_ERROR - - def unlock_device(self, passphrase: str, volume: Volume) -> Status: - """ - Given provided passphrase, unlock target volume. Currently, - LUKS volumes are supported. - """ - if volume: - try: - self.volume = self.cli.unlock_luks_volume(volume, passphrase) - - if volume.writable: - return Status.DEVICE_WRITABLE - else: - return Status.ERROR_UNLOCK_LUKS - - except ExportException as ex: - logger.error(ex) - return Status.ERROR_UNLOCK_LUKS - else: - # Trying to unlock devices before having an active device - logger.warning("Tried to unlock_device but no current volume detected.") - return Status.NO_DEVICE_DETECTED - - def write_to_device(self, volume: Volume, data: Archive) -> Status: - """ - Export data to volume. CLI unmounts and locks volume on completion, even - if export was unsuccessful. - """ - try: - self.cli.write_data_to_device(data.tmpdir, data.target_dirname, volume) - return Status.SUCCESS_EXPORT - - except ExportException as ex: - logger.error(ex) - if ex.sdstatus: - return ex.sdstatus - else: - return Status.ERROR_EXPORT diff --git a/securedrop_export/disk/new_status.py b/securedrop_export/disk/new_status.py deleted file mode 100644 index 285d9f8b9..000000000 --- a/securedrop_export/disk/new_status.py +++ /dev/null @@ -1,29 +0,0 @@ -from securedrop_export.status import BaseStatus - - -class Status(BaseStatus): - - NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" - INVALID_DEVICE_DETECTED = ( - "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc - ) - MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported - - DEVICE_LOCKED = "DEVICE_LOCKED" # One device detected, and it's locked - DEVICE_WRITABLE = ( - "DEVICE_WRITABLE" # One device detected, and it's unlocked (and mounted) - ) - - ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" - ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" - ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted - - SUCCESS_EXPORT = "SUCCESS_EXPORT" - ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk - - # export succeeds but drives were not properly unmounted - ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" - - DEVICE_ERROR = ( - "DEVICE_ERROR" # Something went wrong while trying to check the device - ) diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index e87386a91..b5702a474 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -1,144 +1,120 @@ import logging -from securedrop_export.exceptions import ExportException +from securedrop_export.archive import Archive from .cli import CLI from .status import Status -from .new_status import Status as NewStatus +from .volume import Volume +from securedrop_export.exceptions import ExportException + logger = logging.getLogger(__name__) class Service: - def __init__(self, submission, cli=None): - self.submission = submission - self.cli = cli or CLI() + """ + Checks that can be performed against the device(s). + This is the "API" portion of the export workflow. + """ + + def __init__(self, cli: CLI): + self.cli = cli - def check_connected_devices(self) -> Status: + def run(self, arg: str) -> Status: """ - Check if single USB is inserted. + Run export actions. """ - logger.info("Export archive is usb-test") - - try: - all_devices = self.cli.get_connected_devices() - num_devices = len(all_devices) - except ExportException as ex: - logger.error(f"Error encountered during USB check: {ex.sdstatus.value}") - # Use legacy status instead of new status values - raise ExportException(sdstatus=Status.LEGACY_ERROR_USB_CHECK) from ex - - if num_devices == 0: - raise ExportException(sdstatus=Status.LEGACY_USB_NOT_CONNECTED) - elif num_devices == 1: - return Status.LEGACY_USB_CONNECTED - elif num_devices > 1: - raise ExportException(sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED) - - def check_disk_format(self) -> Status: + def scan_all_devices(self) -> Status: """ - Check if volume is correctly formatted for export. + Check all connected devices and return current device + status. """ try: all_devices = self.cli.get_connected_devices() + number_devices = len(all_devices) - if len(all_devices) == 1: - device = self.cli.get_partitioned_device(all_devices[0]) - logger.info("Check if LUKS") - if not self.cli.is_luks_volume(device): - raise ExportException( - sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - ) - # We can support checking if a drive is already unlocked, but for - # backwards compatibility, this is the only expected status - # at this stage - return Status.LEGACY_USB_ENCRYPTED + if number_devices == 0: + return Status.NO_DEVICE_DETECTED + elif number_devices > 1: + return Status.MULTI_DEVICE_DETECTED + else: + return self.scan_single_device(all_devices[0]) except ExportException as ex: - logger.error( - f"Error encountered during disk format check: {ex.sdstatus.value}" - ) - # Return legacy status values for now for ongoing client compatibility - if ex.sdstatus in [s for s in NewStatus]: - status = self._legacy_status(ex.sdstatus) - raise ExportException(sdstatus=status) - elif ex.sdstatus: - raise - else: - raise ExportException(sdstatus=Status.LEGACY_USB_DISK_ERROR) + logger.error(ex) + return Status.DEVICE_ERROR # Could not assess devices - def export(self): + def scan_single_device(self, blkid: str) -> Status: """ - Export all files to target device. + Given a string representing a single block device, see if it + is a suitable export target and return information about its state. """ - logger.info("Export archive is disk") - try: - all_devices = self.cli.get_connected_devices() + target = self.cli.get_partitioned_device(blkid) + + # See if it's a LUKS drive + if self.cli.is_luks_volume(target): - if len(all_devices) == 1: - device = self.cli.get_partitioned_device(all_devices[0]) - - # Decide what kind of volume it is - logger.info("Check if LUKS") - if self.cli.is_luks_volume(device): - volume = self.cli.get_luks_volume(device) - logger.info("Check if writable") - if not volume.writable: - logger.info("Not writable-will try unlocking") - volume = self.cli.unlock_luks_volume( - volume, self.submission.encryption_key - ) - volume = self.cli.mount_volume(volume) - - logger.info(f"Export submission to {volume.mountpoint}") - self.cli.write_data_to_device( - self.submission.tmpdir, self.submission.target_dirname, volume - ) - # This is SUCCESS_EXPORT, but the 0.7.0 client is not expecting - # a return status from a successful export operation. - # When the client is updated, we will return SUCCESS_EXPORT here. + # Returns Volume or throws ExportException + self.volume = self.cli.get_luks_volume(target) + # See if it's unlocked and mounted + if self.volume.writable: + logger.debug("LUKS device is already mounted") + return Status.DEVICE_WRITABLE else: - # Another kind of drive: VeraCrypt/TC, or unsupported. - # For now this is an error--in future there will be support - # for additional encryption formats - logger.error(f"Export failed because {device} is not supported") - raise ExportException( - sdstatus=Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - ) + # Prompt for passphrase + return Status.DEVICE_LOCKED + else: + # Might be VeraCrypt, might be madness + logger.info("LUKS drive not found") + + # Currently we don't support anything other than LUKS. + # In future, we will support TC/VC volumes as well + return Status.INVALID_DEVICE_DETECTED except ExportException as ex: - logger.error( - f"Error encountered during disk format check: {ex.sdstatus.value}" - ) - # Return legacy status values for now for ongoing client compatibility - if ex.sdstatus in [s for s in NewStatus]: - status = self._legacy_status(ex.sdstatus) - raise ExportException(sdstatus=status) - elif ex.sdstatus: - raise + logger.error(ex) + if ex.sdstatus: + return ex.sdstatus else: - raise ExportException(sdstatus=Status.LEGACY_ERROR_GENERIC) + return Status.DEVICE_ERROR - def _legacy_status(self, status: NewStatus) -> Status: + def unlock_device(self, passphrase: str, volume: Volume) -> Status: """ - Backwards-compatibility - status values that client (@0.7.0) is expecting. + Given provided passphrase, unlock target volume. Currently, + LUKS volumes are supported. """ - logger.info(f"Convert to legacy: {status.value}") - if status is NewStatus.ERROR_MOUNT: - return Status.LEGACY_ERROR_USB_MOUNT - elif status in [NewStatus.ERROR_EXPORT, NewStatus.ERROR_EXPORT_CLEANUP]: - return Status.LEGACY_ERROR_USB_WRITE - elif status in [NewStatus.ERROR_UNLOCK_LUKS, NewStatus.ERROR_UNLOCK_GENERIC]: - return Status.LEGACY_USB_BAD_PASSPHRASE - elif status in [ - NewStatus.INVALID_DEVICE_DETECTED, - NewStatus.MULTI_DEVICE_DETECTED, - ]: - return Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - # The other status values, such as Status.NO_DEVICE_DETECTED, are not returned by the - # CLI, so we don't need to check for them here + if volume: + try: + self.volume = self.cli.unlock_luks_volume(volume, passphrase) + + if volume.writable: + return Status.DEVICE_WRITABLE + else: + return Status.ERROR_UNLOCK_LUKS + + except ExportException as ex: + logger.error(ex) + return Status.ERROR_UNLOCK_LUKS else: - return Status.LEGACY_ERROR_GENERIC + # Trying to unlock devices before having an active device + logger.warning("Tried to unlock_device but no current volume detected.") + return Status.NO_DEVICE_DETECTED + + def write_to_device(self, volume: Volume, data: Archive) -> Status: + """ + Export data to volume. CLI unmounts and locks volume on completion, even + if export was unsuccessful. + """ + try: + self.cli.write_data_to_device(data.tmpdir, data.target_dirname, volume) + return Status.SUCCESS_EXPORT + + except ExportException as ex: + logger.error(ex) + if ex.sdstatus: + return ex.sdstatus + else: + return Status.ERROR_EXPORT diff --git a/securedrop_export/disk/status.py b/securedrop_export/disk/status.py index fa0bdf869..285d9f8b9 100644 --- a/securedrop_export/disk/status.py +++ b/securedrop_export/disk/status.py @@ -3,24 +3,27 @@ class Status(BaseStatus): - LEGACY_ERROR_GENERIC = "ERROR_GENERIC" + NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" + INVALID_DEVICE_DETECTED = ( + "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc + ) + MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported - # Legacy USB preflight related - LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success - LEGACY_USB_NOT_CONNECTED = "USB_NOT_CONNECTED" - LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" + DEVICE_LOCKED = "DEVICE_LOCKED" # One device detected, and it's locked + DEVICE_WRITABLE = ( + "DEVICE_WRITABLE" # One device detected, and it's unlocked (and mounted) + ) - # Legacy USB Disk preflight related errors - LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success - LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" + ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" + ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" + ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted - # Can be raised during disk format check - LEGACY_USB_DISK_ERROR = "USB_DISK_ERROR" + SUCCESS_EXPORT = "SUCCESS_EXPORT" + ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk - # Legacy Disk export errors - LEGACY_USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" - LEGACY_ERROR_USB_MOUNT = "ERROR_USB_MOUNT" - LEGACY_ERROR_USB_WRITE = "ERROR_USB_WRITE" + # export succeeds but drives were not properly unmounted + ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" - # New - SUCCESS_EXPORT = "SUCCESS_EXPORT" + DEVICE_ERROR = ( + "DEVICE_ERROR" # Something went wrong while trying to check the device + ) diff --git a/securedrop_export/exceptions.py b/securedrop_export/exceptions.py index 78c0519c8..c70fac6bd 100644 --- a/securedrop_export/exceptions.py +++ b/securedrop_export/exceptions.py @@ -1,8 +1,3 @@ -import logging - -logger = logging.getLogger(__name__) - - class ExportException(Exception): """ Base class for exceptions encountered during export. diff --git a/securedrop_export/main.py b/securedrop_export/main.py index dca8e3f9a..e2910d74a 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -7,11 +7,11 @@ from securedrop_export.archive import Archive, Metadata from securedrop_export.command import Command from securedrop_export.status import BaseStatus -from securedrop_export.directory_util import safe_mkdir +from securedrop_export.directory import safe_mkdir from securedrop_export.exceptions import ExportException -from securedrop_export.disk.service import Service as ExportService -from securedrop_export.print.service import Service as PrintService +from securedrop_export.disk import Service as ExportService +from securedrop_export.print import Service as PrintService from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_export import __version__ @@ -38,8 +38,11 @@ def entrypoint(): Entrypoint method (Note: a method is required for setuptools). Configure logging, extract tarball, and run desired export service, exiting with return code 0. + + Non-zero exit values will cause the system to try alternative + solutions for mimetype handling, which we want to avoid. """ - status, stacktrace, submission = None, None, None + status, submission = None, None try: _configure_logging() @@ -68,16 +71,16 @@ def entrypoint(): except ExportException as ex: logger.error(f"Encountered exception {ex.sdstatus.value}, exiting") + logger.error(ex) status = ex.sdstatus - stacktrace = ex.output except Exception as exc: logger.error("Encountered exception during export, exiting") + logger.error(exc) status = Status.ERROR_GENERIC - stacktrace = exc.output finally: - _exit_gracefully(submission, status=status, e=stacktrace) + _exit_gracefully(submission, status) def _configure_logging(): @@ -141,19 +144,16 @@ def _start_service(submission: Archive) -> Status: return ExportService(submission).check_disk_format() -def _exit_gracefully(submission: Archive, status: BaseStatus = None, e: str = None): +def _exit_gracefully(submission: Archive, status: BaseStatus = None): """ - Utility to print error messages, mostly used during debugging, - then exits successfully despite the error. Always exits 0, - since non-zero exit values will cause system to try alternative + Write status code, ensure file cleanup, and exit with return code 0. + Non-zero exit values will cause the system to try alternative solutions for mimetype handling, which we want to avoid. """ if status: logger.info(f"Exit gracefully with status: {status.value}") else: logger.info("Exit gracefully (no status code supplied)") - if e: - logger.error("Captured exception output: {}".format(e.output)) try: # If the file archive was extracted, delete before returning if submission and os.path.isdir(submission.tmpdir): diff --git a/securedrop_export/print/__init__.py b/securedrop_export/print/__init__.py index e69de29bb..3fa6c3647 100644 --- a/securedrop_export/print/__init__.py +++ b/securedrop_export/print/__init__.py @@ -0,0 +1 @@ +from .service import Service # noqa: F401 diff --git a/securedrop_export/print/service.py b/securedrop_export/print/service.py index 4cfad872f..dbff034bf 100644 --- a/securedrop_export/print/service.py +++ b/securedrop_export/print/service.py @@ -22,10 +22,15 @@ class Service: LASERJET_DRIVER = "/usr/share/cups/drv/hpcups.drv" LASERJET_PPD = "/usr/share/cups/model/hp-laserjet_6l.ppd" - def __init__(self, submission): + BROTHER = "Brother" + LASERJET = "LaserJet" + + SUPPORTED_PRINTERS = [BROTHER, LASERJET] + + def __init__(self, submission, printer_timeout_seconds=PRINTER_WAIT_TIMEOUT): self.submission = submission self.printer_name = self.PRINTER_NAME - self.printer_wait_timeout = self.PRINTER_WAIT_TIMEOUT + self.printer_wait_timeout = printer_timeout_seconds # Override during testing def print(self): """ @@ -105,7 +110,7 @@ def _check_printer_setup(self) -> None: raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_FOUND) supported_printers = [ - p for p in printers if any(sub in p for sub in ("Brother", "LaserJet")) + p for p in printers if any(sub in p for sub in self.SUPPORTED_PRINTERS) ] if not supported_printers: logger.info("{} are unsupported printers".format(printers)) @@ -146,7 +151,7 @@ def _get_printer_uri(self) -> str: # No usb printer is connected logger.info("No usb printers connected") raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_FOUND) - elif not any(x in printer_uri for x in ("Brother", "LaserJet")): + elif not any(x in printer_uri for x in self.SUPPORTED_PRINTERS): # printer url is a make that is unsupported logger.info("Printer {} is unsupported".format(printer_uri)) raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) @@ -155,16 +160,16 @@ def _get_printer_uri(self) -> str: return printer_uri def _install_printer_ppd(self, uri): - if not any(x in uri for x in ("Brother", "LaserJet")): + if not any(x in uri for x in self.SUPPORTED_PRINTERS): logger.error( "Cannot install printer ppd for unsupported printer: {}".format(uri) ) raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) - if "Brother" in uri: + if self.BROTHER in uri: printer_driver = self.BRLASER_DRIVER printer_ppd = self.BRLASER_PPD - elif "LaserJet" in uri: + elif self.LASERJET in uri: printer_driver = self.LASERJET_DRIVER printer_ppd = self.LASERJET_PPD @@ -258,6 +263,10 @@ def _print_file(self, file_to_print): command=["xpp", "-P", self.printer_name, file_to_print], error_status=Status.ERROR_PRINT, ) + # This is an addition to ensure that the entire print job is transferred over. + # If the job is not fully transferred within the timeout window, the user + # will see an error message. + self._wait_for_print() def safe_check_call( self, command: str, error_status: Status, ignore_stderr_startswith=None diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index d174dc445..310e4b2d2 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -6,7 +6,7 @@ from securedrop_export.disk.cli import CLI from securedrop_export.disk.volume import EncryptionScheme, Volume from securedrop_export.exceptions import ExportException -from securedrop_export.disk.new_status import Status +from securedrop_export.disk.status import Status from securedrop_export.archive import Archive diff --git a/tests/disk/test_service.py b/tests/disk/test_service.py index 800a4fd13..17ad3266b 100644 --- a/tests/disk/test_service.py +++ b/tests/disk/test_service.py @@ -4,11 +4,11 @@ import tempfile from securedrop_export.exceptions import ExportException -from securedrop_export.disk.status import Status -from securedrop_export.disk.new_status import Status as NewStatus +from securedrop_export.disk.legacy_status import Status as LegacyStatus +from securedrop_export.disk.status import Status as Status from securedrop_export.disk.volume import Volume, EncryptionScheme from securedrop_export.archive import Archive, Metadata -from securedrop_export.disk.service import Service +from securedrop_export.disk.legacy_service import Service from securedrop_export.disk.cli import CLI SAMPLE_OUTPUT_LSBLK_NO_PART = b"disk\ncrypt" # noqa @@ -78,14 +78,14 @@ def teardown_method(self, method): def test_check_usb(self): status = self.service.check_connected_devices() - assert status is Status.LEGACY_USB_CONNECTED + assert status is LegacyStatus.LEGACY_USB_CONNECTED def test_no_devices_connected(self): self.mock_cli.get_connected_devices.return_value = [] with pytest.raises(ExportException) as ex: self.service.check_connected_devices() - assert ex.value.sdstatus is Status.LEGACY_USB_NOT_CONNECTED + assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_NOT_CONNECTED def test_too_many_devices_connected(self): self.mock_cli.get_connected_devices.return_value = [ @@ -95,7 +95,7 @@ def test_too_many_devices_connected(self): with pytest.raises(ExportException) as ex: self.service.check_connected_devices() - assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_device_is_not_luks(self): self.mock_cli.is_luks_volume.return_value = False @@ -105,33 +105,33 @@ def test_device_is_not_luks(self): with pytest.raises(ExportException) as ex: self.service.check_disk_format() - assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_check_usb_error(self): self.mock_cli.get_connected_devices.side_effect = ExportException( - sdstatus=Status.LEGACY_ERROR_USB_CHECK + sdstatus=LegacyStatus.LEGACY_ERROR_USB_CHECK ) with pytest.raises(ExportException) as ex: self.service.check_connected_devices() - assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_CHECK + assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_CHECK def test_check_disk_format(self): status = self.service.check_disk_format() - assert status is Status.LEGACY_USB_ENCRYPTED + assert status is LegacyStatus.LEGACY_USB_ENCRYPTED def test_check_disk_format_error(self): self.mock_cli.get_partitioned_device.side_effect = ExportException( - sdstatus=NewStatus.INVALID_DEVICE_DETECTED + sdstatus=Status.INVALID_DEVICE_DETECTED ) with pytest.raises(ExportException) as ex: self.service.check_disk_format() # We still return the legacy status for now - assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_export(self): # Currently, a successful export does not return a success status. @@ -145,59 +145,59 @@ def test_export_disk_not_supported(self): with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED def test_export_write_error(self): self.mock_cli.is_luks_volume.return_value = True self.mock_cli.write_data_to_device.side_effect = ExportException( - sdstatus=Status.LEGACY_ERROR_USB_WRITE + sdstatus=LegacyStatus.LEGACY_ERROR_USB_WRITE ) with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_WRITE + assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_WRITE def test_export_throws_new_exception_return_legacy_status(self): self.mock_cli.get_connected_devices.side_effect = ExportException( - sdstatus=NewStatus.ERROR_MOUNT + sdstatus=Status.ERROR_MOUNT ) with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_MOUNT + assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_MOUNT @mock.patch("os.path.exists", return_value=True) def test_write_error_returns_legacy_status(self, mock_path): self.mock_cli.is_luks_volume.return_value = True self.mock_cli.write_data_to_device.side_effect = ExportException( - sdstatus=NewStatus.ERROR_EXPORT + sdstatus=Status.ERROR_EXPORT ) with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_ERROR_USB_WRITE + assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_WRITE @mock.patch("os.path.exists", return_value=True) def test_unlock_error_returns_legacy_status(self, mock_path): self.mock_cli.unlock_luks_volume.side_effect = ExportException( - sdstatus=NewStatus.ERROR_UNLOCK_LUKS + sdstatus=Status.ERROR_UNLOCK_LUKS ) with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_USB_BAD_PASSPHRASE + assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_BAD_PASSPHRASE @mock.patch("os.path.exists", return_value=True) def test_unexpected_error_returns_legacy_status_generic(self, mock_path): self.mock_cli.unlock_luks_volume.side_effect = ExportException( - sdstatus=NewStatus.DEVICE_ERROR + sdstatus=Status.DEVICE_ERROR ) with pytest.raises(ExportException) as ex: self.service.export() - assert ex.value.sdstatus is Status.LEGACY_ERROR_GENERIC + assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_GENERIC diff --git a/tests/disk/test_status.py b/tests/disk/test_status.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/print/test_service.py b/tests/print/test_service.py index dfff606d2..ffaee6861 100644 --- a/tests/print/test_service.py +++ b/tests/print/test_service.py @@ -5,7 +5,7 @@ import subprocess from subprocess import CalledProcessError -from securedrop_export.directory_util import safe_mkdir +from securedrop_export.directory import safe_mkdir from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive @@ -39,6 +39,9 @@ def teardown_class(cls): cls.service = None cls.submission = None + def setup_method(self): + self.service.printer_wait_timeout = self.service.PRINTER_WAIT_TIMEOUT + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_BROTHER_PRINTER) def test_get_good_printer_uri_laserjet(self, mocked_call): assert ( @@ -67,7 +70,8 @@ def test_print_all_methods_called(self): patch_setup.stop() patch_print.stop() - def test_printer_test_all_methods_called(self): + @mock.patch("securedrop_export.print.service.Service._wait_for_print") + def test_printer_preflight_all_methods_called(self, mock_wait): patch_setup = mock.patch.object(self.service, "_check_printer_setup") mock_setup = patch_setup.start() @@ -80,7 +84,8 @@ def test_printer_test_all_methods_called(self): patch_setup.stop() - def test_print_all_checks_called(self): + @mock.patch("securedrop_export.print.service.Service._wait_for_print") + def test_print_testpage_all_checks_called(self, mock_wait): patch_setup = mock.patch.object(self.service, "_check_printer_setup") patch_print = mock.patch.object(self.service, "_print_test_page") @@ -208,7 +213,7 @@ def test_safe_check_call_write_to_stderr_wrong_ignore_param(self): assert ex.value.sdstatus is Status.ERROR_PRINT - @mock.patch("time.sleep", return_value=None) + @mock.patch("securedrop_export.print.service.time.sleep", return_value=None) @mock.patch( "subprocess.check_output", side_effect=[ @@ -219,12 +224,12 @@ def test_safe_check_call_write_to_stderr_wrong_ignore_param(self): def test__wait_for_print(self, mock_subprocess, mock_time): assert self.service._wait_for_print() - @mock.patch("time.sleep", return_value=None) @mock.patch( "subprocess.check_output", side_effect=subprocess.CalledProcessError(1, "check_output"), ) - def test__wait_for_print_print_exception(self, mock_subprocess, mock_time): + @mock.patch("time.sleep", return_value=None) + def test__wait_for_print_print_exception(self, mock_time, mock_subprocess): with pytest.raises(ExportException) as ex: self.service._wait_for_print() @@ -233,7 +238,7 @@ def test__wait_for_print_print_exception(self, mock_subprocess, mock_time): @mock.patch( "subprocess.check_output", return_value=b"printer sdw-printer is busy\n" ) - def test__wait_for_print_timeout_exception(self, mock_subprocess): + def test__wait_for_print_timeout_exception(self, mock_output): self.service.printer_wait_timeout = 1 with pytest.raises(ExportException) as ex: @@ -241,8 +246,6 @@ def test__wait_for_print_timeout_exception(self, mock_subprocess): assert ex.value.sdstatus is Status.ERROR_PRINT - self.service.printer_wait_timeout = self.service.PRINTER_WAIT_TIMEOUT - @pytest.mark.parametrize( "printers", [SAMPLE_OUTPUT_BROTHER_PRINTER, SAMPLE_OUTPUT_LASERJET_PRINTER] ) @@ -322,7 +325,8 @@ def test__install_printer_ppd_error_unsupported_uri(self): ) assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED - def test__print_test_page_calls_method(self): + @mock.patch("securedrop_export.print.service.Service._wait_for_print") + def test__print_test_page_calls_method(self, mock_wait): p = mock.patch.object(self.service, "_print_file") mock_print = p.start() @@ -330,7 +334,8 @@ def test__print_test_page_calls_method(self): mock_print.assert_called_once_with("/usr/share/cups/data/testprint") p.stop() - def test__print_all_files(self): + @mock.patch("securedrop_export.print.service.Service._wait_for_print") + def test__print_all_files(self, mock_wait): p = mock.patch.object(self.service, "_print_file") mock_print = p.start() @@ -345,7 +350,8 @@ def test__print_all_files(self): ) p.stop() - def test_open_office_file_convert_to_pdf(self): + @mock.patch("securedrop_export.print.service.Service._wait_for_print") + def test_open_office_file_convert_to_pdf(self, mock_wait): file = "/tmp/definitely-an-office-file.odt" with mock.patch.object(self.service, "safe_check_call") as scc, mock.patch( @@ -391,3 +397,43 @@ def test_safe_check_call_has_error_in_stderr(self): self.service.safe_check_call(command="ls", error_status=Status.TEST_SUCCESS) assert ex.value.sdstatus is Status.TEST_SUCCESS + + @mock.patch("securedrop_export.print.service.time.sleep", return_value=None) + @mock.patch( + "subprocess.check_output", + side_effect=[ + b"printer sdw-printer is busy\n", + b"printer sdw-printer is idle\n", + ], + ) + def test__wait_for_print_waits_correctly(self, mock_subprocess, mock_time): + file = "/tmp/happy-to-print-you.pdf" + + with mock.patch.object(self.service, "safe_check_call") as scc, mock.patch( + "securedrop_export.print.service.logger.info" + ) as log: + self.service._print_file(file) + + assert scc.call_count == 1 + scc.assert_has_calls( + [ + mock.call( + command=[ + "xpp", + "-P", + "sdw-printer", + "/tmp/happy-to-print-you.pdf", + ], + error_status=Status.ERROR_PRINT, + ), + ] + ) + assert log.call_count == 4 + log.assert_has_calls( + [ + mock.call("Sending file to printer sdw-printer"), + mock.call("Running lpstat waiting for printer sdw-printer"), + mock.call("Running lpstat waiting for printer sdw-printer"), + mock.call("Print completed"), + ] + ) diff --git a/tests/test_directory_util.py b/tests/test_directory.py similarity index 67% rename from tests/test_directory_util.py rename to tests/test_directory.py index cc1f304a8..2f0a3a9ef 100644 --- a/tests/test_directory_util.py +++ b/tests/test_directory.py @@ -4,10 +4,10 @@ import shutil from pathlib import Path -from securedrop_export import directory_util +from securedrop_export import directory -class TestDirectoryUtil: +class TestDirectory: _REL_TRAVERSAL = "../../../whee" _SAFE_RELPATH = "./hi" @@ -32,53 +32,51 @@ def teadown_method(self, method): def test_safe_mkdir_error_base_relpath(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(base_path=Path(".")) + directory.safe_mkdir(base_path=Path(".")) def test_safe_mkdir_error_basepath_path_traversal(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(f"{self.homedir}{self._REL_TRAVERSAL}") + directory.safe_mkdir(f"{self.homedir}{self._REL_TRAVERSAL}") def test_safe_mkdir_error_relpath_path_traversal(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(f"{self.homedir}", f"{self._REL_TRAVERSAL}") + directory.safe_mkdir(f"{self.homedir}", f"{self._REL_TRAVERSAL}") def test_safe_mkdir_success(self): - directory_util.safe_mkdir(f"{self.homedir}") + directory.safe_mkdir(f"{self.homedir}") def test_safe_mkdir_success_with_relpath(self): - directory_util.safe_mkdir(f"{self.homedir}", f"{self._SAFE_RELPATH}") + directory.safe_mkdir(f"{self.homedir}", f"{self._SAFE_RELPATH}") assert os.path.exists(f"{self.homedir}{self._SAFE_RELPATH}") def test_safe_mkdir_success_another_relpath(self): - directory_util.safe_mkdir(f"{self.homedir}", f"{self._SAFE_RELPATH2}") + directory.safe_mkdir(f"{self.homedir}", f"{self._SAFE_RELPATH2}") assert os.path.exists(f"{self.homedir}{self._SAFE_RELPATH2}") def test_safe_mkdir_weird_path(self): with pytest.raises(ValueError): - directory_util.safe_mkdir(f"{self.homedir}", f"{self._UNSAFE_RELPATH}") + directory.safe_mkdir(f"{self.homedir}", f"{self._UNSAFE_RELPATH}") def test__check_all_permissions_path_missing(self): with pytest.raises(ValueError): - directory_util._check_all_permissions( - f"{self.homedir}", f"{self._SAFE_RELPATH}" - ) + directory._check_all_permissions(f"{self.homedir}", f"{self._SAFE_RELPATH}") def test_check_dir_perms_unsafe(self): path = Path(f"{self.homedir}{self._SAFE_RELPATH}") - directory_util.safe_mkdir(path) + directory.safe_mkdir(path) # Not what we want, ever path.chmod(0o666) with pytest.raises(RuntimeError): - directory_util._check_dir_permissions(path) + directory._check_dir_permissions(path) def test_check_all_perms_invalid_full_path(self): path = Path(f"{self.homedir}/idontexist") base = Path(f"{self.homedir}") # Returns without error - assert directory_util._check_all_permissions(path, base) is None + assert directory._check_all_permissions(path, base) is None diff --git a/tests/test_main.py b/tests/test_main.py index b94109a88..41fce7f62 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -37,25 +37,14 @@ def test_exit_gracefully_no_exception(self, capsys): with pytest.raises(SystemExit) as sysexit: _exit_gracefully(self.submission, Status.ERROR_GENERIC) - # A graceful exit means a return code of 0 - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err == "{}\n".format(Status.ERROR_GENERIC.value) - assert captured.out == "" + assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) def test_exit_gracefully_exception(self, capsys): with pytest.raises(SystemExit) as sysexit: - exception = mock.MagicMock() - exception.output = "BANG!" - _exit_gracefully(self.submission, Status.ERROR_GENERIC, e=exception) + _exit_gracefully(self.submission, Status.ERROR_GENERIC) # A graceful exit means a return code of 0 - assert sysexit.value.code == 0 - - captured = capsys.readouterr() - assert captured.err.rstrip() == Status.ERROR_GENERIC.value # todo - assert captured.out == "" + assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) @pytest.mark.parametrize("status", [s for s in Status]) def test_write_status(self, status, capsys): @@ -73,7 +62,13 @@ def _did_exit_gracefully(self, exit, capsys, status: BaseStatus) -> bool: """ Helper. True if exited with 0, writing supplied status to stderr. """ - return exit.value.code == 0 and capsys.readouterr().err == status.value + "\n" + captured = capsys.readouterr() + + return ( + exit.value.code == 0 + and captured.err.rstrip().endswith(status.value) + and captured.out == "" + ) @pytest.mark.parametrize("command", list(Command)) @mock.patch("securedrop_export.main._configure_logging") @@ -119,8 +114,9 @@ def test_valid_printer_test_config(self, capsys): ) @mock.patch("securedrop_export.main.os.path.exists", return_value=True) @mock.patch("securedrop_export.main.shutil.rmtree") + @mock.patch("securedrop_export.main._configure_logging") def test_entrypoint_failure_extraction( - self, mock_rm, mock_path, mock_extract, capsys + self, mock_log, mock_rm, mock_path, mock_extract, capsys ): with mock.patch( "sys.argv", ["qvm-send-to-usb", SUBMISSION_SAMPLE_ARCHIVE] @@ -135,7 +131,7 @@ def test_entrypoint_failure_extraction( "securedrop_export.main._configure_logging", side_effect=ExportException( sdstatus=Status.ERROR_LOGGING, - message="Zounds, an error setting up logging!", + sderror="Zounds, an error setting up logging!", ), ) def test_entrypoint_logging_fails(self, mock_mkdir, capsys): From b835101617edc03d681d2c79b6c9f8e368d89429 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 18 Jan 2023 14:05:13 +0100 Subject: [PATCH 542/751] [update-safety-alerts] add project.json, silence 2 safety alerts --- project.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 project.json diff --git a/project.json b/project.json new file mode 100644 index 000000000..ffe297927 --- /dev/null +++ b/project.json @@ -0,0 +1,8 @@ +{ + "variables": { + "SAFETY_IGNORE_IDS": [ + "51499", + "52495" + ] + } +} From 6c2dec374adbe2b64966a1a4e4cd2fa6ea957563 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 31 Jan 2023 17:50:02 -0500 Subject: [PATCH 543/751] Update wheel checksums after rebuilding for Bookworm / 3.11 See . --- requirements/build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index af35aa35d..5548ed0c2 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -3,7 +3,7 @@ charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2 furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f -pyyaml==5.4.1 --hash=sha256:24ba69a7c05ba63fef9732bf26cc5d328b2089e525ee87fc9ec572c92f88dd46 --hash=sha256:be111e40b3e32707b373b90ef490fa0908bf7769c77f8cf940004f0c957954f6 --hash=sha256:645773490bf785cd110b4a5e47635990c46219b7c4f01b424f0409cf01d12f2b +pyyaml==5.4.1 --hash=sha256:9608c1b459ff310fe7fa78e8a9e12767a9a0ea9e3fa7cce116db58f95b61f56f --hash=sha256:f7190863a72d6eb89ed92e345e178a0803c439fd7126985b62c1c113cb01e534 requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 From 85ba1e0934784c49327ad2a6e7912ec62efc5907 Mon Sep 17 00:00:00 2001 From: Michael Z Date: Thu, 2 Feb 2023 09:30:39 -0500 Subject: [PATCH 544/751] Update dev requirements --- requirements/dev-requirements.txt | 699 ++++++++++++++++++------------ 1 file changed, 412 insertions(+), 287 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 7990c53c5..364615831 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -4,14 +4,41 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -attrs==21.2.0 \ - --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ - --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb +attrs==22.2.0 \ + --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ + --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 # via pytest -black==21.8b0 \ - --hash=sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7 \ - --hash=sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2 +black==23.1.0 \ + --hash=sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd \ + --hash=sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555 \ + --hash=sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481 \ + --hash=sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468 \ + --hash=sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9 \ + --hash=sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a \ + --hash=sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958 \ + --hash=sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580 \ + --hash=sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26 \ + --hash=sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32 \ + --hash=sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8 \ + --hash=sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753 \ + --hash=sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b \ + --hash=sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074 \ + --hash=sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651 \ + --hash=sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24 \ + --hash=sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6 \ + --hash=sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad \ + --hash=sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac \ + --hash=sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221 \ + --hash=sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06 \ + --hash=sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27 \ + --hash=sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648 \ + --hash=sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739 \ + --hash=sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104 # via -r requirements/dev-requirements.in +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 + # via pip-tools certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -24,75 +51,74 @@ charset-normalizer==2.0.4 \ # via # -r requirements/requirements.in # requests -click==8.0.1 \ - --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ - --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 # via # black # pip-tools -coverage==5.5 \ - --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \ - --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \ - --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \ - --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \ - --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \ - --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \ - --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \ - --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \ - --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \ - --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \ - --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \ - --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \ - --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \ - --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \ - --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \ - --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \ - --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \ - --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \ - --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \ - --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \ - --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \ - --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \ - --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \ - --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \ - --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \ - --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \ - --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \ - --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \ - --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \ - --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \ - --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \ - --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \ - --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \ - --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \ - --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \ - --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \ - --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \ - --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \ - --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \ - --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \ - --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \ - --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \ - --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \ - --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \ - --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \ - --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \ - --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \ - --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \ - --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \ - --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \ - --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \ - --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6 +coverage[toml]==7.1.0 \ + --hash=sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab \ + --hash=sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851 \ + --hash=sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265 \ + --hash=sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0 \ + --hash=sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a \ + --hash=sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5 \ + --hash=sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6 \ + --hash=sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311 \ + --hash=sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada \ + --hash=sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f \ + --hash=sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8 \ + --hash=sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc \ + --hash=sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73 \ + --hash=sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf \ + --hash=sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e \ + --hash=sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352 \ + --hash=sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c \ + --hash=sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c \ + --hash=sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c \ + --hash=sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda \ + --hash=sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d \ + --hash=sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0 \ + --hash=sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3 \ + --hash=sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d \ + --hash=sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038 \ + --hash=sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c \ + --hash=sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8 \ + --hash=sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa \ + --hash=sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09 \ + --hash=sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b \ + --hash=sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c \ + --hash=sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a \ + --hash=sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52 \ + --hash=sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3 \ + --hash=sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146 \ + --hash=sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a \ + --hash=sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f \ + --hash=sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4 \ + --hash=sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c \ + --hash=sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75 \ + --hash=sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040 \ + --hash=sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063 \ + --hash=sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050 \ + --hash=sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7 \ + --hash=sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222 \ + --hash=sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912 \ + --hash=sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801 \ + --hash=sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d \ + --hash=sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06 \ + --hash=sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8 \ + --hash=sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2 # via # -r requirements/dev-requirements.in # pytest-cov -exceptiongroup==1.0.4 \ - --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ - --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec +exceptiongroup==1.1.0 \ + --hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \ + --hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23 # via pytest -flake8==3.9.2 \ - --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \ - --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 +flake8==6.0.0 \ + --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ + --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 # via -r requirements/dev-requirements.in idna==3.2 \ --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ @@ -101,81 +127,125 @@ idna==3.2 \ # -r requirements/requirements.in # requests # yarl -iniconfig==1.1.1 \ - --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ - --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 +iniconfig==2.0.0 \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # via pytest -isort==5.9.3 \ - --hash=sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899 \ - --hash=sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2 +isort==5.12.0 \ + --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ + --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 # via -r requirements/dev-requirements.in -mccabe==0.6.1 \ - --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \ - --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 -multidict==5.1.0 \ - --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ - --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \ - --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \ - --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \ - --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \ - --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \ - --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \ - --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \ - --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \ - --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \ - --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \ - --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \ - --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \ - --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \ - --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \ - --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \ - --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \ - --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \ - --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \ - --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \ - --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \ - --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \ - --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \ - --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \ - --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \ - --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \ - --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \ - --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \ - --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \ - --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \ - --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \ - --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \ - --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \ - --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \ - --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \ - --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ - --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 +multidict==6.0.4 \ + --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ + --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ + --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ + --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ + --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ + --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ + --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ + --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ + --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ + --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ + --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ + --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ + --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ + --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ + --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ + --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ + --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ + --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ + --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ + --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ + --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ + --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ + --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ + --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ + --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ + --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ + --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ + --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ + --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ + --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ + --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ + --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ + --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ + --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ + --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ + --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ + --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ + --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ + --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ + --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ + --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ + --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ + --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ + --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ + --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ + --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ + --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ + --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ + --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ + --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ + --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ + --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ + --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ + --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ + --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ + --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ + --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ + --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ + --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ + --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ + --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ + --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ + --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ + --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ + --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ + --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ + --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ + --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ + --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ + --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ + --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ + --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ + --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ + --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba # via yarl -mypy==0.910 \ - --hash=sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9 \ - --hash=sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a \ - --hash=sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9 \ - --hash=sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e \ - --hash=sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2 \ - --hash=sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212 \ - --hash=sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b \ - --hash=sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885 \ - --hash=sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150 \ - --hash=sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703 \ - --hash=sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072 \ - --hash=sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457 \ - --hash=sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e \ - --hash=sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0 \ - --hash=sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb \ - --hash=sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97 \ - --hash=sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8 \ - --hash=sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811 \ - --hash=sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6 \ - --hash=sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de \ - --hash=sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504 \ - --hash=sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921 \ - --hash=sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d +mypy==0.991 \ + --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ + --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ + --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ + --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ + --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ + --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ + --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ + --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ + --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ + --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ + --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ + --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ + --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ + --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ + --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ + --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ + --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ + --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ + --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ + --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ + --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ + --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ + --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ + --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ + --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ + --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ + --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ + --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ + --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ + --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef # via -r requirements/dev-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ @@ -183,60 +253,59 @@ mypy-extensions==0.4.3 \ # via # black # mypy -packaging==21.0 \ - --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \ - --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14 - # via pytest -pathspec==0.9.0 \ - --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \ - --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 + # via + # black + # build + # pytest +pathspec==0.11.0 \ + --hash=sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229 \ + --hash=sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc # via black -pep517==0.11.0 \ - --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ - --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 - # via pip-tools -pip-tools==6.2.0 \ - --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ - --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 +pip-tools==6.12.2 \ + --hash=sha256:6a51f4fd67140d5e83703ebfa9610fb61398727151f56a1be02a972d062e4679 \ + --hash=sha256:8b903696df4598b10d469026ef9995c5f9a874b416e88e7a214884ebe4a70245 # via -r requirements/dev-requirements.in -platformdirs==2.3.0 \ - --hash=sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f \ - --hash=sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648 +platformdirs==2.6.2 \ + --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ + --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 # via black pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -pycodestyle==2.7.0 \ - --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \ - --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef +pycodestyle==2.10.0 \ + --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ + --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 # via flake8 -pyflakes==2.3.1 \ - --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \ - --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db +pyflakes==3.0.1 \ + --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ + --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 -pyotp==2.6.0 \ - --hash=sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28 \ - --hash=sha256:d28ddfd40e0c1b6a6b9da961c7d47a10261fb58f378cb00f05ce88b26df9c432 +pyotp==2.8.0 \ + --hash=sha256:889d037fdde6accad28531fc62a790f089e5dfd5b638773e9ee004cce074a2e5 \ + --hash=sha256:c2f5e17d9da92d8ec1f7de6331ab08116b9115adbabcba6e208d46fc49a98c5a # via -r requirements/dev-requirements.in -pyparsing==2.4.7 \ - --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ - --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b - # via packaging -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build +pytest==7.2.1 \ + --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ + --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 # via # -r requirements/dev-requirements.in # pytest-cov # pytest-mock -pytest-cov==2.12.1 \ - --hash=sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a \ - --hash=sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7 +pytest-cov==4.0.0 \ + --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ + --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 # via -r requirements/dev-requirements.in -pytest-mock==3.6.1 \ - --hash=sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3 \ - --hash=sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62 +pytest-mock==3.10.0 \ + --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ + --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f # via -r requirements/dev-requirements.in pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ @@ -271,49 +340,6 @@ pyyaml==5.4.1 \ # via # -r requirements/dev-requirements.in # vcrpy -regex==2021.8.28 \ - --hash=sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468 \ - --hash=sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354 \ - --hash=sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308 \ - --hash=sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d \ - --hash=sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc \ - --hash=sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8 \ - --hash=sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797 \ - --hash=sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2 \ - --hash=sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13 \ - --hash=sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d \ - --hash=sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a \ - --hash=sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0 \ - --hash=sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73 \ - --hash=sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1 \ - --hash=sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed \ - --hash=sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a \ - --hash=sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b \ - --hash=sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f \ - --hash=sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256 \ - --hash=sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb \ - --hash=sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2 \ - --hash=sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983 \ - --hash=sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb \ - --hash=sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645 \ - --hash=sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8 \ - --hash=sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a \ - --hash=sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906 \ - --hash=sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f \ - --hash=sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c \ - --hash=sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892 \ - --hash=sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0 \ - --hash=sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e \ - --hash=sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e \ - --hash=sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed \ - --hash=sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c \ - --hash=sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374 \ - --hash=sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd \ - --hash=sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791 \ - --hash=sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a \ - --hash=sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1 \ - --hash=sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759 - # via black requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 @@ -322,27 +348,26 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via vcrpy -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f - # via - # mypy - # pytest-cov -tomli==1.2.1 \ - --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ - --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via # black - # pep517 + # build + # coverage + # mypy # pytest -types-requests==2.25.6 \ - --hash=sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779 \ - --hash=sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee +types-requests==2.28.11.8 \ + --hash=sha256:61960554baca0008ae7e2db2bd3b322ca9a144d3e80ce270f5fb640817e40994 \ + --hash=sha256:e67424525f84adfbeab7268a159d3c633862dafae15c5b19547ce1b55954f0a3 # via -r requirements/dev-requirements.in -typing-extensions==3.10.0.2 \ - --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ - --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ - --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 +types-urllib3==1.26.25.4 \ + --hash=sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49 \ + --hash=sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee + # via types-requests +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via # black # mypy @@ -352,63 +377,163 @@ urllib3==1.26.6 \ # via # -r requirements/requirements.in # requests -vcrpy==4.1.1 \ - --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \ - --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599 +vcrpy==4.2.1 \ + --hash=sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013 \ + --hash=sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09 # via -r requirements/dev-requirements.in wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -wrapt==1.12.1 \ - --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 +wrapt==1.14.1 \ + --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ + --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ + --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ + --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ + --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ + --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ + --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ + --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ + --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ + --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ + --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ + --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ + --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ + --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ + --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ + --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ + --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ + --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ + --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ + --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ + --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ + --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ + --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ + --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ + --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ + --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ + --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ + --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ + --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ + --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ + --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ + --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ + --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ + --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ + --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ + --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ + --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ + --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ + --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ + --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ + --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ + --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ + --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ + --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ + --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ + --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ + --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ + --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ + --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ + --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ + --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ + --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ + --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ + --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ + --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ + --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ + --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ + --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ + --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ + --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ + --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ + --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ + --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ + --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via vcrpy -yarl==1.6.3 \ - --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ - --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \ - --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \ - --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \ - --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \ - --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \ - --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \ - --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \ - --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \ - --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \ - --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \ - --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \ - --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \ - --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \ - --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \ - --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \ - --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \ - --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \ - --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \ - --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \ - --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \ - --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \ - --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \ - --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \ - --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \ - --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \ - --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \ - --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \ - --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \ - --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \ - --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \ - --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \ - --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \ - --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \ - --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \ - --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ - --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 +yarl==1.8.2 \ + --hash=sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87 \ + --hash=sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89 \ + --hash=sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a \ + --hash=sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08 \ + --hash=sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996 \ + --hash=sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077 \ + --hash=sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901 \ + --hash=sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e \ + --hash=sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee \ + --hash=sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574 \ + --hash=sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165 \ + --hash=sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634 \ + --hash=sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229 \ + --hash=sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b \ + --hash=sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f \ + --hash=sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7 \ + --hash=sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf \ + --hash=sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89 \ + --hash=sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0 \ + --hash=sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1 \ + --hash=sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe \ + --hash=sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf \ + --hash=sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76 \ + --hash=sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951 \ + --hash=sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863 \ + --hash=sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06 \ + --hash=sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562 \ + --hash=sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6 \ + --hash=sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c \ + --hash=sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e \ + --hash=sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1 \ + --hash=sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3 \ + --hash=sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3 \ + --hash=sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778 \ + --hash=sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8 \ + --hash=sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2 \ + --hash=sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b \ + --hash=sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d \ + --hash=sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f \ + --hash=sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c \ + --hash=sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581 \ + --hash=sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918 \ + --hash=sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c \ + --hash=sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e \ + --hash=sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220 \ + --hash=sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37 \ + --hash=sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739 \ + --hash=sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77 \ + --hash=sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6 \ + --hash=sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42 \ + --hash=sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946 \ + --hash=sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5 \ + --hash=sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d \ + --hash=sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146 \ + --hash=sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a \ + --hash=sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83 \ + --hash=sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef \ + --hash=sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80 \ + --hash=sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588 \ + --hash=sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5 \ + --hash=sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2 \ + --hash=sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef \ + --hash=sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826 \ + --hash=sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05 \ + --hash=sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516 \ + --hash=sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0 \ + --hash=sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4 \ + --hash=sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2 \ + --hash=sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0 \ + --hash=sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd \ + --hash=sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8 \ + --hash=sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b \ + --hash=sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1 \ + --hash=sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c # via vcrpy # The following packages are considered to be unsafe in a requirements file: -pip==21.2.4 \ - --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ - --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c # via pip-tools -setuptools==58.0.4 \ - --hash=sha256:69cc739bc2662098a68a9bc575cd974a57969e70c1d58ade89d104ab73d79770 \ - --hash=sha256:f10059f0152e0b7fb6b2edd77bcb1ecd4c9ed7048a826eb2d79f72fd2e6e237b +setuptools==67.1.0 \ + --hash=sha256:a7687c12b444eaac951ea87a9627c4f904ac757e7abdc5aac32833234af90378 \ + --hash=sha256:e261cdf010c11a41cb5cb5f1bf3338a7433832029f559a6a7614bd42a967c300 # via pip-tools From a33a44e2c502ea903817366434c17b05c2a72033 Mon Sep 17 00:00:00 2001 From: Michael Z Date: Thu, 2 Feb 2023 10:49:57 -0500 Subject: [PATCH 545/751] Make all the dev tools happy black/mypy/flake8 related changes --- sdclientapi/__init__.py | 4 +--- sdclientapi/timestamps.py | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/sdclientapi/__init__.py b/sdclientapi/__init__.py index 5978c47f4..9849a2634 100644 --- a/sdclientapi/__init__.py +++ b/sdclientapi/__init__.py @@ -2,7 +2,7 @@ import http import json import os -from datetime import datetime +from datetime import datetime # noqa: F401 from subprocess import PIPE, Popen, TimeoutExpired from typing import Any, Dict, List, Optional, Tuple from urllib.parse import urljoin @@ -479,7 +479,6 @@ def get_submission(self, submission: Submission) -> Submission: :returns: Updated submission object from the server. """ if submission.source_uuid and submission.uuid is not None: - path_query = "api/v1/sources/{}/submissions/{}".format( submission.source_uuid, submission.uuid ) @@ -763,7 +762,6 @@ def get_reply_from_source(self, source: Source, reply_uuid: str) -> Reply: :returns: A reply object """ if source.uuid and reply_uuid is not None: - path_query = "api/v1/sources/{}/replies/{}".format(source.uuid, reply_uuid) method = "GET" diff --git a/sdclientapi/timestamps.py b/sdclientapi/timestamps.py index c171597bc..8a53a1a28 100644 --- a/sdclientapi/timestamps.py +++ b/sdclientapi/timestamps.py @@ -7,7 +7,7 @@ def parse(date_string: str) -> Optional[datetime]: try: # ISO8061 and RFC3339 # '2022-02-09T07:45:26.082728+00:00' - return datetime.fromisoformat(date_string) # type: ignore + return datetime.fromisoformat(date_string) except ValueError: try: # '2022-02-09T07:45:26.082728Z' From d18bcc991a6018611d58fe74fe9119ddf8bfa6e3 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 7 Feb 2023 12:58:16 -0800 Subject: [PATCH 546/751] Fix: imports/namespacing --- securedrop_export/disk/__init__.py | 2 +- securedrop_export/main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/securedrop_export/disk/__init__.py b/securedrop_export/disk/__init__.py index 3fa6c3647..6af1f1a09 100644 --- a/securedrop_export/disk/__init__.py +++ b/securedrop_export/disk/__init__.py @@ -1 +1 @@ -from .service import Service # noqa: F401 +from .legacy_service import Service as LegacyService # noqa: F401 diff --git a/securedrop_export/main.py b/securedrop_export/main.py index e2910d74a..b52d960c9 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -10,7 +10,7 @@ from securedrop_export.directory import safe_mkdir from securedrop_export.exceptions import ExportException -from securedrop_export.disk import Service as ExportService +from securedrop_export.disk import LegacyService as ExportService from securedrop_export.print import Service as PrintService from logging.handlers import TimedRotatingFileHandler, SysLogHandler From 24cfed80fb26c70df54dec59c60e42d124e915ba Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 10 Jan 2023 11:40:14 -0500 Subject: [PATCH 547/751] Stop using furl We needed to update furl for Python 3.10+ support, but after looking at it, we can drop it entirely. The valid_path() check to see if the path contains a hostname is straightforward to switch to urllib.parse.urlparse(). In prep_request(), we use furl for validation and path normalization. urlparse() is actually better for validation since it parses against the URL spec[1]. But one weird part is that port validation only applies when you actually access the `.port` member variable. For the path normalization, I just copied the 3 lines (now 8) of code out of furl. It should be very stable, it was never modified in furl once it was added 9 years ago. Finally, the test_proxy_500_misconfiguration test case had to be adjusted, because it relied on furl incorrectly interpreting an extra colon as an invalid port. The config now uses an explicitly invalid port ("-1") so it fails under the new code. [1] https://url.spec.whatwg.org/ Fixes #105. --- requirements/build-requirements.txt | 3 -- requirements/dev-requirements.txt | 13 --------- requirements/requirements.in | 3 -- requirements/requirements.txt | 17 ----------- securedrop_proxy/proxy.py | 44 +++++++++++++++++++++-------- tests/files/invalid-config.yaml | 4 +-- 6 files changed, 34 insertions(+), 50 deletions(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 5548ed0c2..13435c1eb 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -1,10 +1,7 @@ certifi==2022.12.7 --hash=sha256:7f205a1a4f02f4970fb5d0e16457964bb30d6b678a766515278bc56e6eeb645f charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 -furl==2.0.0 --hash=sha256:9f50360f6e4a0f1d0a35fb4997878e7186a73331f0fde5f6fc9b1bb9f006e6cc idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 -orderedmultidict==1.0 --hash=sha256:f6022beda2b3387c61e6eb7e0e1e3e2832fd9f55f3f64d4b4b226eea7487327f pyyaml==5.4.1 --hash=sha256:9608c1b459ff310fe7fa78e8a9e12767a9a0ea9e3fa7cce116db58f95b61f56f --hash=sha256:f7190863a72d6eb89ed92e345e178a0803c439fd7126985b62c1c113cb01e534 requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 -six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 werkzeug==2.0.2 --hash=sha256:55e8ebd03bf69dc51cd986ba7bf3e25f549bb27a22de9d6bdd15c855ba8f1f99 diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6dc72691a..e8c50264c 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -96,10 +96,6 @@ flake8==6.0.0 \ --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 # via -r requirements/dev-requirements.in -furl==2.0.0 \ - --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ - --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec - # via -r requirements/requirements.in idna==3.2 \ --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 @@ -234,12 +230,6 @@ mypy-extensions==0.4.3 \ # -r requirements/dev-requirements.in # black # mypy -orderedmultidict==1.0 \ - --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ - --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 - # via - # -r requirements/requirements.in - # furl packaging==22.0 \ --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 @@ -314,9 +304,6 @@ six==1.11.0 \ --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb # via # -r requirements/dev-requirements.in - # -r requirements/requirements.in - # furl - # orderedmultidict # vcrpy tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ diff --git a/requirements/requirements.in b/requirements/requirements.in index 66c290ef2..d7cdcdc2a 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,10 +1,7 @@ certifi>=2022.12.07 charset-normalizer>=2.0.4 -furl==2.0.0 idna>=2.7 -orderedmultidict==1.0 pyyaml==5.4.1 requests>=2.26.0 -six==1.11.0 urllib3>=1.26.5 werkzeug>=0.16.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 94b944bd8..71611f287 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -16,22 +16,12 @@ charset-normalizer==2.0.4 \ # via # -r requirements/requirements.in # requests -furl==2.0.0 \ - --hash=sha256:f7e90e9f85ef3f2e64485f04c2a80b50af6133942812fd87a44d45305b079018 \ - --hash=sha256:fdcaedc1fb19a63d7d875b0105b0a5b496dd0989330d454a42bcb401fa5454ec - # via -r requirements/requirements.in idna==3.2 \ --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 # via # -r requirements/requirements.in # requests -orderedmultidict==1.0 \ - --hash=sha256:24e3b730cf84e4a6a68be5cc760864905cf66abc89851e724bd5b4e849eaa96b \ - --hash=sha256:b89895ba6438038d0bdf88020ceff876cf3eae0d5c66a69b526fab31125db2c5 - # via - # -r requirements/requirements.in - # furl pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -67,13 +57,6 @@ requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via -r requirements/requirements.in -six==1.11.0 \ - --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb - # via - # -r requirements/requirements.in - # furl - # orderedmultidict urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index e5a7c2da7..b21320516 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -1,13 +1,14 @@ import http import logging import os +import posixpath import subprocess import sys import tempfile import uuid from typing import IO, Dict, Optional +from urllib.parse import ParseResult, urlparse -import furl # type: ignore import requests import werkzeug import yaml @@ -57,11 +58,8 @@ def on_done(self) -> None: @staticmethod def valid_path(path: str) -> bool: - u = furl.furl(path) - - if u.host is not None: - return False - return True + """Check does not contain a hostname in the path""" + return urlparse(path).hostname is None def err_on_done(self): print(json.dumps(self.res.__dict__)) @@ -154,6 +152,25 @@ def simple_error(self, status: int, err: str) -> None: self.res = res + def normalize_path(self, parsed: ParseResult) -> ParseResult: + """ + This is copied from the furl library + SPDX-License-Identifier: Unlicense + + Example: '//a/./b/../c//' -> '/a/c/' + """ + path = parsed.path + is_dir = path[-1] == "/" + path = posixpath.normpath(path) + if is_dir: + # Re-add the trailing / + path += "/" + if path.startswith("//"): + # https://bugs.python.org/issue636648 + path = "/" + path.lstrip("/") + + return parsed._replace(path=path) + def prep_request(self) -> None: scheme = self.conf.scheme @@ -167,16 +184,19 @@ def prep_request(self) -> None: self.simple_error(400, "Path provided in request did not look valid") raise ValueError("Path provided was invalid") + parsed = urlparse("{}://{}:{}/{}".format(scheme, host, port, path)) + parsed = self.normalize_path(parsed) + + # urlparse only errors on an invalid port if you examine it + # manually. try: - url = furl.furl("{}://{}:{}/{}".format(scheme, host, port, path)) - except Exception as e: - logger.error(e) + _ = parsed.port + except ValueError as err: + logger.error(err) self.simple_error(500, "Proxy error while generating URL to request") raise ValueError("Error generating URL from provided values") - url.path.normalize() - - preq = requests.Request(method, url.url) + preq = requests.Request(method, parsed.geturl()) preq.headers = self.req.headers preq.data = self.req.body prep = preq.prepare() diff --git a/tests/files/invalid-config.yaml b/tests/files/invalid-config.yaml index 1338eefc3..29d7af94c 100644 --- a/tests/files/invalid-config.yaml +++ b/tests/files/invalid-config.yaml @@ -1,5 +1,5 @@ -host: jsonplaceholder.typicode.com -scheme: https://http +host: badport.local:-1 +scheme: https port: 443 target_vm: compost dev: False From afc33dcfe9f0878a7a65e4c7f49265946275563c Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 16 Feb 2023 13:20:06 -0500 Subject: [PATCH 548/751] Replace werkzeug dependency with basic string checks werkzeug is ~19k lines of Python, which is a very heavy dependency just to parse a content-type header. The format of the header is pretty simple, via MDN[1] the syntax roughly is: Content-Type: text/html; charset=utf-8 Content-Type: multipart/form-data; boundary=something All we want to know is whether the type is JSON or not, so we can just check if the mime part of the value is "application/json". Originally I implemented this as a regex (`^application/json($|;)`), but realized that wasn't even necessary. This code is already covered by tests, but I added a few to demonstrate basic functionality of the new function. [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type Fixes #110. --- requirements/build-requirements.txt | 1 - requirements/dev-requirements.txt | 8 ++------ requirements/requirements.in | 1 - requirements/requirements.txt | 8 ++------ securedrop_proxy/proxy.py | 14 ++++++++++---- tests/test_proxy.py | 5 +++++ 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 5548ed0c2..2ded7f105 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -7,4 +7,3 @@ pyyaml==5.4.1 --hash=sha256:9608c1b459ff310fe7fa78e8a9e12767a9a0ea9e3fa7cce116db requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 -werkzeug==2.0.2 --hash=sha256:55e8ebd03bf69dc51cd986ba7bf3e25f549bb27a22de9d6bdd15c855ba8f1f99 diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6dc72691a..624daf3db 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # @@ -353,10 +353,6 @@ vcrpy==4.2.1 \ --hash=sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013 \ --hash=sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09 # via -r requirements/dev-requirements.in -werkzeug==2.0.2 \ - --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ - --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a - # via -r requirements/requirements.in wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 diff --git a/requirements/requirements.in b/requirements/requirements.in index 66c290ef2..c01325cf6 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -7,4 +7,3 @@ pyyaml==5.4.1 requests>=2.26.0 six==1.11.0 urllib3>=1.26.5 -werkzeug>=0.16.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 94b944bd8..4d3344ea3 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # @@ -80,7 +80,3 @@ urllib3==1.26.6 \ # via # -r requirements/requirements.in # requests -werkzeug==2.0.2 \ - --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ - --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a - # via -r requirements/requirements.in diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index e5a7c2da7..90ad530f0 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -9,7 +9,6 @@ import furl # type: ignore import requests -import werkzeug import yaml import securedrop_proxy.version as version @@ -18,6 +17,15 @@ logger = logging.getLogger(__name__) +def is_json_content_type(value: str) -> bool: + """ + Is the value of the content-type header JSON? + + See + """ + return value == "application/json" or value.startswith("application/json;") + + class Conf: scheme = "" host = "" @@ -214,9 +222,7 @@ def handle_non_json_response(self) -> None: def handle_response(self) -> None: logger.debug("Handling response") - ctype = werkzeug.http.parse_options_header(self._presp.headers["content-type"]) - - if ctype[0] == "application/json": + if is_json_content_type(self._presp.headers["content-type"]): self.handle_json_response() else: self.handle_non_json_response() diff --git a/tests/test_proxy.py b/tests/test_proxy.py index e09509859..5d6a10f24 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -386,6 +386,11 @@ def test_production_on_save(self): p.on_save(fh, self.res) self.assertEqual(patched_run.call_args[0][0][0], "qvm-move-to-vm") + def test_is_json_content_type(self): + self.assertTrue(proxy.is_json_content_type("application/json")) + self.assertTrue(proxy.is_json_content_type("application/json; charset=utf-8")) + self.assertFalse(proxy.is_json_content_type("application/yaml")) + class TestConfig(unittest.TestCase): def setUp(self): From 849072e371f3d5045478905b7629a3a612acd113 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 16 Feb 2023 14:46:33 -0500 Subject: [PATCH 549/751] Drop buster jobs from CI Will add bookworm ones later as part of parameterizing and overhauling the CI config. --- .circleci/config.yml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0540c1050..0e19e5c06 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,12 +38,6 @@ common-steps: version: 2 jobs: - test: - docker: - - image: debian:buster - steps: - - checkout - - *run_tests test-bullseye: docker: - image: debian:bullseye @@ -51,15 +45,6 @@ jobs: - checkout - *run_tests - build-buster: - docker: - - image: debian:buster - steps: - - checkout - - *install_packaging_dependencies - - *verify_requirements - - *build_debian_package - build-bullseye: docker: - image: debian:bullseye @@ -73,7 +58,5 @@ workflows: version: 2 per_pr: jobs: - - test - test-bullseye - - build-buster - build-bullseye From 4f9e422c340ed7227adfaba2fc0e0b100945a63f Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 16 Feb 2023 14:44:24 -0500 Subject: [PATCH 550/751] Configure flake8 and mypy This is slightly different than other repositories because most of the code is in individual scripts rather than a typical Python package (the same problem as securedrop-workstation). CI now calls `make check` instead of just running tests (copied from securedrop-proxy). Fixes #37. --- .circleci/config.yml | 8 +- .flake8 | 8 ++ Makefile | 13 +++ pyproject.toml | 9 ++ requirements/dev-requirements.in | 5 + requirements/dev-requirements.txt | 179 +++++++++++++++++++++++++++--- 6 files changed, 205 insertions(+), 17 deletions(-) create mode 100644 .flake8 create mode 100644 pyproject.toml diff --git a/.circleci/config.yml b/.circleci/config.yml index 0e19e5c06..da9d88844 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,10 +2,12 @@ common-steps: - &run_tests run: - name: Run tests + name: Install requirements and run tests command: | - apt-get update && apt-get install -y python3 - python3 -m unittest + apt-get update && apt-get install -y make python3-venv + make venv + source .venv/bin/activate + make check - &install_packaging_dependencies run: diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..f53bdba4d --- /dev/null +++ b/.flake8 @@ -0,0 +1,8 @@ +[flake8] +max-line-length = 100 +extend-exclude = .venv +filename = + *.py + securedrop-log + securedrop-log-saver + securedrop-redis-log diff --git a/Makefile b/Makefile index 3b8e95fcb..c0b027a84 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,19 @@ update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the late pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ done < 'requirements/dev-requirements.in' +.PHONY: check +check: flake8 mypy test + +.PHONY: flake8 +flake8: ## Run flake8 to lint Python files + flake8 + +mypy: ## Type check Python files + mypy + +test: ## Run Python unit tests + python3 -m unittest + # Explaination of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..0db7522bb --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,9 @@ +[tool.mypy] +python_version = "3.9" +scripts_are_modules = true +files = [ + "*.py", + "securedrop-log", + "securedrop-log-saver", + "securedrop-redis-log", +] diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index 2c2a9f384..28f7362de 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -1 +1,6 @@ +flake8 pip-tools + +mypy +types-redis +types-setuptools diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 51774d6bc..4deb73f0b 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,19 +1,146 @@ # -# This file is autogenerated by pip-compile with python 3.7 +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # +cffi==1.15.1 \ + --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ + --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ + --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ + --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ + --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ + --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ + --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ + --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ + --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ + --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ + --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ + --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ + --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ + --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ + --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ + --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ + --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ + --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ + --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ + --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ + --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ + --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ + --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ + --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ + --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ + --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ + --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ + --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ + --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ + --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ + --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ + --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ + --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ + --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ + --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ + --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ + --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ + --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ + --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ + --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ + --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ + --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ + --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ + --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ + --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ + --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ + --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ + --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ + --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ + --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ + --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ + --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ + --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ + --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ + --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ + --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ + --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ + --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ + --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ + --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ + --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ + --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ + --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ + --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 + # via cryptography click==8.0.1 \ --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 # via pip-tools -importlib-metadata==4.6.4 \ - --hash=sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f \ - --hash=sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5 +cryptography==39.0.1 \ + --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ + --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ + --hash=sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885 \ + --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ + --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ + --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ + --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ + --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ + --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ + --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ + --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ + --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ + --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ + --hash=sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef \ + --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ + --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ + --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ + --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ + --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ + --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ + --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ + --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ + --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 # via - # click - # pep517 + # types-pyopenssl + # types-redis +flake8==6.0.0 \ + --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ + --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 + # via -r requirements/dev-requirements.in +mccabe==0.7.0 \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + # via flake8 +mypy==1.0.0 \ + --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ + --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ + --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ + --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ + --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ + --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ + --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ + --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ + --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ + --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ + --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ + --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ + --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ + --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ + --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ + --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ + --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ + --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ + --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ + --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ + --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ + --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ + --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ + --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ + --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ + --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d + # via -r requirements/dev-requirements.in +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 + # via mypy pep517==0.11.0 \ --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 @@ -22,6 +149,18 @@ pip-tools==6.2.0 \ --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 # via -r requirements/dev-requirements.in +pycodestyle==2.10.0 \ + --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ + --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 + # via flake8 +pycparser==2.21 \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 + # via cffi +pyflakes==3.0.1 \ + --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ + --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd + # via flake8 redis==3.3.11 \ --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 @@ -29,22 +168,34 @@ redis==3.3.11 \ tomli==1.2.1 \ --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 - # via pep517 + # via + # mypy + # pep517 +types-docutils==0.19.1.4 \ + --hash=sha256:1b64b21b609ff1fc7791d3d930f14b56b36ad09029fd97e45e34cc889d671b5f \ + --hash=sha256:870d71f3663141f67a3c59d26d2c54a8c478c842208bb0b345fbf6036f49f561 + # via types-setuptools +types-pyopenssl==23.0.0.3 \ + --hash=sha256:6ca54d593f8b946f9570f9ed7457c41da3b518feff5e344851941a6209bea62b \ + --hash=sha256:847ab17a16475a882dc29898648a6a35ad0d3e11a5bba5aa8ab2f3435a8647cb + # via types-redis +types-redis==4.5.1.1 \ + --hash=sha256:081dfeec730df6e3f32ccbdafe3198873b7c02516c22d79cc2a40efdd69a3963 \ + --hash=sha256:c072e4824855f46d0a968509c3e0fa4789fc13b62d472064527bad3d1815aeed + # via -r requirements/dev-requirements.in +types-setuptools==67.3.0.1 \ + --hash=sha256:1a26d373036c720e566823b6edd664a2db4d138b6eeba856721ec1254203474f \ + --hash=sha256:a7e0f0816b5b449f5bcdc0efa43da91ff81dbe6941f293a6490d68a450e130a1 + # via -r requirements/dev-requirements.in typing-extensions==3.10.0.0 \ --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 - # via importlib-metadata + # via mypy wheel==0.37.0 \ --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad # via pip-tools -zipp==3.5.0 \ - --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \ - --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4 - # via - # importlib-metadata - # pep517 # The following packages are considered to be unsafe in a requirements file: pip==21.2.4 \ From ced0c8e69ac1c7eda83ac63a6b2e4919fd0799c3 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 16 Feb 2023 14:45:09 -0500 Subject: [PATCH 551/751] Fix flake8 and mypy warnings Left one TODO for a confusing metaclass that I couldn't figure out. --- ex2.py | 1 - example.py | 1 - journal-example.py | 9 +++++---- securedrop_log/__init__.py | 4 +++- setup.py | 1 - tests/test_logger.py | 5 +++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/ex2.py b/ex2.py index 9bb488e31..8813b4749 100644 --- a/ex2.py +++ b/ex2.py @@ -5,6 +5,5 @@ class Hello: def __init__(self, *args, **kwargs): self.logger = logging.getLogger(__name__) - def talk(self, msg): self.logger.debug(msg) diff --git a/example.py b/example.py index 1a582bbea..6b7a82876 100644 --- a/example.py +++ b/example.py @@ -10,7 +10,6 @@ def main(): logging.basicConfig(level=logging.DEBUG, handlers=[handler]) logger = logging.getLogger("example") - d = ex2.Hello() d.talk("This should be line 1") ex1.fire("Where are you in middle?") diff --git a/journal-example.py b/journal-example.py index 903412af9..3d53f4eba 100644 --- a/journal-example.py +++ b/journal-example.py @@ -1,6 +1,6 @@ import logging from securedrop_log import SecureDropLog -from systemd import journal +from systemd import journal # type: ignore[import] import select @@ -13,14 +13,15 @@ def main(): p = select.poll() p.register(j, j.get_events()) - while True: + while True: p.poll() if j.process() == journal.APPEND: for m in j: msg = "MSG: {}".format(m["MESSAGE"]) print(msg) - # TODO: Figure out why the log file in the logging VM is closing + # TODO: Figure out why the log file in the logging VM is closing logger.info(m["MESSAGE"]) + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/securedrop_log/__init__.py b/securedrop_log/__init__.py index a67d90f8e..4d67d5a8d 100644 --- a/securedrop_log/__init__.py +++ b/securedrop_log/__init__.py @@ -1,10 +1,12 @@ from logging import StreamHandler from subprocess import Popen, PIPE import threading +from typing import Dict class Singleton(type): - _ins = {} + # TODO: Add a better typehint here + _ins: Dict = {} _lock = threading.Lock() def __call__(cls, *args, **kwargs): diff --git a/setup.py b/setup.py index 0d3ccec97..520bac2c6 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,3 @@ -import pkgutil import setuptools with open("README.md", "r") as fh: diff --git a/tests/test_logger.py b/tests/test_logger.py index 174544f00..b7bed2966 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -12,7 +12,8 @@ def test_singleton_there_can_be_only_one(self, mock_popen): self.assertEqual(logger1.qubes_log, logger2.qubes_log) def test_singleton_raises_exception_for_dev(self, mock_popen): - logger1 = securedrop_log.SecureDropLog('name', 'logvmname') + # No exception raised + securedrop_log.SecureDropLog('name', 'logvmname') with self.assertRaises(Exception): - logger2 = securedrop_log.SecureDropLog('name2', 'logvmname2') + securedrop_log.SecureDropLog('name2', 'logvmname2') From 788aec82ebc23e494fb0884eb0a2ebb1384e6073 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 1 Sep 2022 20:46:10 -0400 Subject: [PATCH 552/751] Makefile: Use standard check-{black,isort} names This is what we use in our other repositories. --- Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 7b5bcd5de..3f765e783 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities done .PHONY: lint -lint: isort-check black-check ## Run isort, black and flake8 +lint: check-isort check-black ## Run isort, black and flake8 @flake8 securedrop_proxy tests .PHONY: mypy @@ -37,16 +37,16 @@ mypy: ## Run mypy static type checker black: ## Run black for file formatting @black securedrop_proxy tests -.PHONY: black-check -black-check: ## Check Python source code formatting with black +.PHONY: check-black +check-black: ## Check Python source code formatting with black @black --check --diff securedrop_proxy tests .PHONY: isort isort: ## Run isort for file formatting @isort securedrop_proxy/*.py tests/*.py -.PHONY: isort-check -isort-check: ## Check isort for file formatting +.PHONY: check-isort +check-isort: ## Check isort for file formatting @isort --check-only --diff securedrop_proxy/*.py tests/*.py .PHONY: sync-requirements From a8c0f03bd516c81d6fe7600606f110271c53d29d Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 1 Sep 2022 21:04:47 -0400 Subject: [PATCH 553/751] Remove indirect dependencies from dev-requirements.in It seems like in 40635b6dab05 these were accidentally added to dev-requirements.in despite not being needed directly. --- requirements/dev-requirements.in | 8 ------ requirements/dev-requirements.txt | 47 ++++++++++--------------------- 2 files changed, 15 insertions(+), 40 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index 2fb106860..9f5c23c39 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -2,16 +2,8 @@ black coverage flake8 isort -mccabe -multidict mypy -mypy-extensions pip-tools -pycodestyle -pyflakes types-PyYAML types-requests -six vcrpy -wrapt -yarl diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 03fa746c2..507e21d32 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -110,9 +110,7 @@ isort==5.11.2 \ mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via - # -r requirements/dev-requirements.in - # flake8 + # via flake8 multidict==6.0.3 \ --hash=sha256:018c8e3be7f161a12b3e41741b6721f9baeb2210f4ab25a6359b7d76c1017dce \ --hash=sha256:01b456046a05ff7cceefb0e1d2a9d32f05efcb1c7e0d152446304e11557639ce \ @@ -188,9 +186,7 @@ multidict==6.0.3 \ --hash=sha256:f76109387e1ec8d8e2137c94c437b89fe002f29e0881aae8ae45529bdff92000 \ --hash=sha256:f8a728511c977df6f3d8af388fcb157e49f11db4a6637dd60131b8b6e40b0253 \ --hash=sha256:fb6c3dc3d65014d2c782f5acf0b3ba14e639c6c33d3ed8932ead76b9080b3544 - # via - # -r requirements/dev-requirements.in - # yarl + # via yarl mypy==0.991 \ --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ @@ -227,7 +223,6 @@ mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 # via - # -r requirements/dev-requirements.in # black # mypy packaging==22.0 \ @@ -242,6 +237,10 @@ pep517==0.13.0 \ --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 # via build +pip==22.3.1 \ + --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ + --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 + # via pip-tools pip-tools==6.12.0 \ --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e @@ -253,15 +252,11 @@ platformdirs==2.6.0 \ pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 - # via - # -r requirements/dev-requirements.in - # flake8 + # via flake8 pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd - # via - # -r requirements/dev-requirements.in - # flake8 + # via flake8 pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -299,12 +294,14 @@ requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 # via -r requirements/requirements.in +setuptools==65.6.3 \ + --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ + --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 + # via pip-tools six==1.11.0 \ --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb - # via - # -r requirements/dev-requirements.in - # vcrpy + # via vcrpy tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -409,9 +406,7 @@ wrapt==1.14.1 \ --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af - # via - # -r requirements/dev-requirements.in - # vcrpy + # via vcrpy yarl==1.8.2 \ --hash=sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87 \ --hash=sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89 \ @@ -487,16 +482,4 @@ yarl==1.8.2 \ --hash=sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b \ --hash=sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1 \ --hash=sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c - # via - # -r requirements/dev-requirements.in - # vcrpy - -# The following packages are considered to be unsafe in a requirements file: -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 - # via pip-tools -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 - # via pip-tools + # via vcrpy From 95a5c4b821670f11416c33054d81651d9de50482 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 1 Sep 2022 20:46:36 -0400 Subject: [PATCH 554/751] Update CI configuration, add bullseye and bookworm jobs This is mostly copy-pasted from securedrop-client, with steps that don't apply here removed. --- .circleci/config.yml | 140 +++++++++++++++++++++++++++++++++---------- Makefile | 2 +- 2 files changed, 110 insertions(+), 32 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index abb89ba3e..d151e370b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,22 +1,67 @@ --- common-steps: - - &run_tests + - &install_testing_dependencies run: - name: Install requirements and run tests + name: Install testing dependencies command: | - apt-get update && apt-get install -y make python3-venv + set -e + apt update && apt install -y git gnupg make python3-dev python3-venv + + - &install_build_dependencies + run: + name: Install build dependencies + command: | + set -e + apt update && apt install -y git make sudo + + - &run_unit_tests + run: + name: Install requirements and run unit tests + command: | + set -e + make venv + source .venv/bin/activate + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test + + - &run_lint + run: + name: Run lint, type checking, code formatting + command: | + set -e + make venv + source .venv/bin/activate + make lint + + - &check_security + run: + name: Run static analysis on source code to find security issues + command: | + set -e + make venv + source .venv/bin/activate + make bandit + + - &check_python_dependencies_for_vulnerabilities + run: + name: Check Python dependencies for known vulnerabilities + command: | + set -e make venv source .venv/bin/activate - make check + make safety - &install_packaging_dependencies run: - name: Install Debian packaging dependencies and download wheels + name: Install Debian packaging dependencies and download Python wheels command: | - apt-get update && apt-get install -y git git-lfs make sudo + set -x mkdir ~/packaging && cd ~/packaging + # local builds may not have an ssh url, so || true + git config --global --unset url.ssh://git@github.com.insteadof || true git clone https://github.com/freedomofpress/securedrop-debian-packaging.git cd securedrop-debian-packaging + apt-get update && apt-get install -y sudo make make install-deps PKG_DIR=~/project make requirements @@ -29,48 +74,83 @@ common-steps: # previous run step), else return 0. git diff --quiet - - &make_source_tarball - run: - name: Tag and make source tarball - command: | - cd ~/project - ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here - python3 setup.py sdist - - &build_debian_package run: name: Build debian package command: | cd ~/packaging/securedrop-debian-packaging export PKG_VERSION=1000.0 - export PKG_PATH=~/project + export PKG_PATH=~/project/ make securedrop-proxy -version: 2 +version: 2.1 + jobs: - build-bullseye: - docker: - - image: debian:bullseye + build: + parameters: ¶meters + image: + type: string + docker: &docker + - image: debian:<< parameters.image >> steps: + - *install_build_dependencies - checkout - *install_packaging_dependencies - *verify_requirements - - *make_source_tarball - *build_debian_package - test-bullseye: - docker: - - image: debian:bullseye + unit-test: + parameters: *parameters + docker: *docker + steps: + - *install_testing_dependencies + - checkout + - *run_unit_tests + - store_test_results: + path: test-results + + lint: + parameters: *parameters + docker: *docker + steps: + - *install_testing_dependencies + - checkout + - *run_lint + + check-security: + parameters: *parameters + docker: *docker steps: + - *install_testing_dependencies - checkout - - *run_tests + - *check_security + + check-python-security: + parameters: *parameters + docker: *docker + steps: + - *install_testing_dependencies + - checkout + - *check_python_dependencies_for_vulnerabilities + workflows: - version: 2 securedrop_proxy_ci: - jobs: - - test-bullseye - - build-bullseye + jobs: &jobs + - unit-test: + matrix: &matrix + parameters: + image: + - bullseye + - bookworm + - lint: + matrix: *matrix + - check-security: + matrix: *matrix + - check-python-security: + matrix: *matrix + - build: + matrix: *matrix nightly: triggers: @@ -80,6 +160,4 @@ workflows: branches: only: - main - jobs: - - test-bullseye - - build-bullseye + jobs: *jobs diff --git a/Makefile b/Makefile index 3f765e783..0ae4efa82 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities done .PHONY: lint -lint: check-isort check-black ## Run isort, black and flake8 +lint: check-isort check-black mypy ## Run isort, black and flake8 and mypy @flake8 securedrop_proxy tests .PHONY: mypy From f4c88555d693c7e03fcb62c71922f552c167b4af Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 15 Feb 2023 15:49:19 -0500 Subject: [PATCH 555/751] Configure mypy and add to CI mypy can be run with `make mypy` or as part of `make check` (used by CI). Dependency files updated with `make dev-requirements`. There's a bigger diff on bookworm because some of those dependencies aren't needed on Python 3.11+. Fixes #103. --- Makefile | 6 +- pyproject.toml | 2 + requirements/dev-bookworm-requirements.in | 5 +- requirements/dev-bookworm-requirements.txt | 96 ++++++++++------------ requirements/dev-bullseye-requirements.in | 5 +- requirements/dev-bullseye-requirements.txt | 44 +++++++++- 6 files changed, 102 insertions(+), 56 deletions(-) create mode 100644 pyproject.toml diff --git a/Makefile b/Makefile index aaa0624b8..aa2f18eed 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the late done < 'requirements/dev-bookworm-requirements.in' .PHONY: check -check: lint semgrep test check-black ## Run linter and tests +check: lint mypy semgrep test check-black ## Run linter and tests .PHONY: check-black check-black: ## Check Python source code formatting with black @@ -66,6 +66,10 @@ test: ## Run tests lint: ## Run linter flake8 securedrop_export/ tests/ +.PHONY: mypy +mypy: ## Type check Python files + mypy . + .PHONY: black black: ## Format Python source code with black @black ./ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..5ec8cc186 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.mypy] +python_version = "3.9" diff --git a/requirements/dev-bookworm-requirements.in b/requirements/dev-bookworm-requirements.in index 5200c5299..1dd6e9bb7 100644 --- a/requirements/dev-bookworm-requirements.in +++ b/requirements/dev-bookworm-requirements.in @@ -4,4 +4,7 @@ pip-tools pytest pytest-cov pytest-mock -semgrep \ No newline at end of file +semgrep + +mypy +types-setuptools diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt index 46cccac92..d89afb8c8 100644 --- a/requirements/dev-bookworm-requirements.txt +++ b/requirements/dev-bookworm-requirements.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in requirements/requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in # attrs==21.4.0 \ --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ @@ -121,10 +121,6 @@ defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via semgrep -exceptiongroup==1.0.4 \ - --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ - --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec - # via pytest face==22.0.0 \ --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d @@ -153,10 +149,40 @@ mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 +mypy==1.0.0 \ + --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ + --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ + --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ + --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ + --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ + --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ + --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ + --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ + --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ + --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ + --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ + --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ + --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ + --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ + --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ + --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ + --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ + --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ + --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ + --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ + --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ + --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ + --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ + --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ + --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ + --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d + # via -r requirements/dev-bookworm-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 - # via black + # via + # black + # mypy packaging==21.3 \ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 @@ -254,42 +280,6 @@ ruamel-yaml==0.17.21 \ --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af # via semgrep -ruamel-yaml-clib==0.2.7 \ - --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ - --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ - --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ - --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ - --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ - --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ - --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ - --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ - --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ - --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ - --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ - --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ - --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5 \ - --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ - --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ - --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ - --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ - --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ - --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ - --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ - --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ - --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ - --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ - --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ - --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ - --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ - --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ - --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ - --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ - --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ - --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ - --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 - # via ruamel-yaml semgrep==1.2.0 \ --hash=sha256:31f5f764ff114e2e56b3a93b09829f738cb9e287af7479e2c4714c77b10dc5c0 \ --hash=sha256:cba38f882c9fedd00462247474a991715d5c8faf169e38cfbf299c7c89ccad55 \ @@ -303,21 +293,25 @@ setuptools==65.6.3 \ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # black - # build - # coverage - # pep517 - # pytest - # semgrep + # via semgrep tqdm==4.64.1 \ --hash=sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4 \ --hash=sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1 # via semgrep +types-docutils==0.19.1.4 \ + --hash=sha256:1b64b21b609ff1fc7791d3d930f14b56b36ad09029fd97e45e34cc889d671b5f \ + --hash=sha256:870d71f3663141f67a3c59d26d2c54a8c478c842208bb0b345fbf6036f49f561 + # via types-setuptools +types-setuptools==67.3.0.1 \ + --hash=sha256:1a26d373036c720e566823b6edd664a2db4d138b6eeba856721ec1254203474f \ + --hash=sha256:a7e0f0816b5b449f5bcdc0efa43da91ff81dbe6941f293a6490d68a450e130a1 + # via -r requirements/dev-bookworm-requirements.in typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e - # via semgrep + # via + # mypy + # semgrep ujson==5.6.0 \ --hash=sha256:0f0f21157d1a84ad5fb54388f31767cde9c1a48fb29de7ef91d8887fdc2ca92b \ --hash=sha256:1217326ba80eab1ff3f644f9eee065bd4fcc4e0c068a2f86f851cafd05737169 \ diff --git a/requirements/dev-bullseye-requirements.in b/requirements/dev-bullseye-requirements.in index 5200c5299..1dd6e9bb7 100644 --- a/requirements/dev-bullseye-requirements.in +++ b/requirements/dev-bullseye-requirements.in @@ -4,4 +4,7 @@ pip-tools pytest pytest-cov pytest-mock -semgrep \ No newline at end of file +semgrep + +mypy +types-setuptools diff --git a/requirements/dev-bullseye-requirements.txt b/requirements/dev-bullseye-requirements.txt index 36465c3fb..9feaaffa2 100644 --- a/requirements/dev-bullseye-requirements.txt +++ b/requirements/dev-bullseye-requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in requirements/requirements.in +# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in # attrs==21.4.0 \ --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ @@ -153,10 +153,40 @@ mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 +mypy==1.0.0 \ + --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ + --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ + --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ + --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ + --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ + --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ + --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ + --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ + --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ + --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ + --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ + --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ + --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ + --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ + --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ + --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ + --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ + --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ + --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ + --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ + --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ + --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ + --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ + --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ + --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ + --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d + # via -r requirements/dev-bullseye-requirements.in mypy-extensions==0.4.3 \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 - # via black + # via + # black + # mypy packaging==21.3 \ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 @@ -307,6 +337,7 @@ tomli==2.0.1 \ # black # build # coverage + # mypy # pep517 # pytest # semgrep @@ -314,11 +345,20 @@ tqdm==4.64.1 \ --hash=sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4 \ --hash=sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1 # via semgrep +types-docutils==0.19.1.4 \ + --hash=sha256:1b64b21b609ff1fc7791d3d930f14b56b36ad09029fd97e45e34cc889d671b5f \ + --hash=sha256:870d71f3663141f67a3c59d26d2c54a8c478c842208bb0b345fbf6036f49f561 + # via types-setuptools +types-setuptools==67.3.0.1 \ + --hash=sha256:1a26d373036c720e566823b6edd664a2db4d138b6eeba856721ec1254203474f \ + --hash=sha256:a7e0f0816b5b449f5bcdc0efa43da91ff81dbe6941f293a6490d68a450e130a1 + # via -r requirements/dev-bullseye-requirements.in typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via # black + # mypy # semgrep ujson==5.6.0 \ --hash=sha256:0f0f21157d1a84ad5fb54388f31767cde9c1a48fb29de7ef91d8887fdc2ca92b \ From 3291ba72f21b9c04a9e3d0e3d7ce54b45d500bf7 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 15 Feb 2023 15:58:10 -0500 Subject: [PATCH 556/751] Fix straightforward mypy errors disk/cli.py: * `grep.stdout` could be None if we passed e.g. stdout=subprocess.DEVNULL. Since mypy can't assert that we used PIPE, just ignore the error. * Always have `is_removable` be a bool. * `_check_partitions` actually returns bytes since we don't pass `text=True` to the subprocess calls. * Check that volume.mountpoint is not None before trying to unmount it. disk/legacy_service.py: * mypy doesn't know that `num_devices` is a non-negative integer so it thinks we're missing a return. Raise an exception as an unreachable logic error to satisfy it. disk/volume.py: * Newer mypy doesn't imply Optional so we need to explicitly state it. main.py: * mypy doesn't know we checked all the possible enum values (maybe it could using a 3.11+ match statement?), so raise an exception as an unreachable logic error to satisfy it. * Same explicit Optional needed for `_exit_gracefully`, and then pass it through to `_write_status`. setup.py: * pkgutil.get_data() can return None triggering mypy, but it's simpler for us to just read the file directly. (Probably we should do what client does and just stick the real version in setup.py, but that's a bigger change than I want to make here.) * `classifiers` is typed as List[str], not a tuple. tests/disk/test_cli.py: * The arguments to CalledProcessError were reversed. --- securedrop_export/disk/cli.py | 11 ++++++----- securedrop_export/disk/legacy_service.py | 4 ++++ securedrop_export/disk/volume.py | 3 ++- securedrop_export/main.py | 10 ++++++++-- setup.py | 9 ++++----- tests/disk/test_cli.py | 4 ++-- 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index 5d07c9d53..503d80b86 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -44,7 +44,7 @@ def get_connected_devices(self) -> List[str]: stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) - command_output = grep.stdout.readlines() + command_output = grep.stdout.readlines() # type: ignore[union-attr] # The first word in each element of the command_output list is the device name attached_devices = [x.decode("utf8").split()[0] for x in command_output] @@ -68,8 +68,9 @@ def _get_removable_devices(self, attached_devices: List[str]) -> List[str]: stderr=subprocess.PIPE, ) - # 0 for non-removable device, 1 for removable - is_removable = int(removable.decode("utf8").strip()) + # removable is "0" for non-removable device, "1" for removable, + # convert that into a Python boolean + is_removable = bool(int(removable.decode("utf8").strip())) except subprocess.CalledProcessError: # Not a removable device @@ -116,7 +117,7 @@ def get_partitioned_device(self, blkid: str) -> str: logger.error("Error checking device partitions") raise ExportException(sdstatus=Status.DEVICE_ERROR) - def _check_partitions(self, blkid: str) -> str: + def _check_partitions(self, blkid: str) -> bytes: try: logger.debug(f"Checking device partitions on {blkid}") device_and_partitions = subprocess.check_output( @@ -382,7 +383,7 @@ def _unmount_volume(self, volume: Volume) -> Volume: """ Helper. Unmount volume """ - if os.path.exists(volume.mountpoint): + if volume.mountpoint and os.path.exists(volume.mountpoint): logger.debug(f"Unmounting drive from {volume.mountpoint}") try: subprocess.check_call(["sudo", "umount", volume.mountpoint]) diff --git a/securedrop_export/disk/legacy_service.py b/securedrop_export/disk/legacy_service.py index 279a84d9c..555c1e697 100644 --- a/securedrop_export/disk/legacy_service.py +++ b/securedrop_export/disk/legacy_service.py @@ -37,6 +37,10 @@ def check_connected_devices(self) -> LegacyStatus: raise ExportException( sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED ) + else: + # Unreachable, num_devices is a non-negative integer, + # and we handled all possible cases already + raise ValueError(f"unreachable: num_devices is negative: {num_devices}") def check_disk_format(self) -> LegacyStatus: """ diff --git a/securedrop_export/disk/volume.py b/securedrop_export/disk/volume.py index c6bc2f8ae..195318c94 100644 --- a/securedrop_export/disk/volume.py +++ b/securedrop_export/disk/volume.py @@ -1,5 +1,6 @@ from enum import Enum import os +from typing import Optional class EncryptionScheme(Enum): @@ -26,7 +27,7 @@ def __init__( device_name: str, mapped_name: str, encryption: EncryptionScheme, - mountpoint: str = None, + mountpoint: Optional[str] = None, ): self.device_name = device_name self.mapped_name = mapped_name diff --git a/securedrop_export/main.py b/securedrop_export/main.py index b52d960c9..f0a8b80b6 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -3,6 +3,7 @@ import platform import logging import sys +from typing import Optional from securedrop_export.archive import Archive, Metadata from securedrop_export.command import Command @@ -143,8 +144,13 @@ def _start_service(submission: Archive) -> Status: elif submission.command is Command.CHECK_VOLUME: return ExportService(submission).check_disk_format() + # Unreachable + raise ValueError( + f"unreachable: unknown submission.command value: {submission.command}" + ) -def _exit_gracefully(submission: Archive, status: BaseStatus = None): + +def _exit_gracefully(submission: Archive, status: Optional[BaseStatus] = None): """ Write status code, ensure file cleanup, and exit with return code 0. Non-zero exit values will cause the system to try alternative @@ -170,7 +176,7 @@ def _exit_gracefully(submission: Archive, status: BaseStatus = None): sys.exit(0) -def _write_status(status: BaseStatus): +def _write_status(status: Optional[BaseStatus]): """ Write string to stderr. """ diff --git a/setup.py b/setup.py index b04979ddb..19256c2e6 100644 --- a/setup.py +++ b/setup.py @@ -1,11 +1,10 @@ -import pkgutil import setuptools with open("README.md", "r") as fh: long_description = fh.read() -version = pkgutil.get_data("securedrop_export", "VERSION").decode("utf-8") -version = version.strip() +with open("securedrop_export/VERSION") as f: + version = f.read().strip() setuptools.setup( name="securedrop-export", @@ -23,14 +22,14 @@ package_data={ "securedrop_export": ["VERSION"], }, - classifiers=( + classifiers=[ "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Intended Audience :: Developers", "Operating System :: OS Independent", - ), + ], entry_points={ "console_scripts": ["send-to-usb = securedrop_export.main:entrypoint"] }, diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index 310e4b2d2..4853666c7 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -210,7 +210,7 @@ def test_get_luks_volume_still_locked(self, mocked_subprocess, mocked_os_call): @mock.patch( "subprocess.check_output", - side_effect=subprocess.CalledProcessError("check_output", 1), + side_effect=subprocess.CalledProcessError(1, "check_output"), ) def test_get_luks_volume_error(self, mocked_subprocess): with pytest.raises(ExportException) as ex: @@ -277,7 +277,7 @@ def test_unlock_luks_volume_passphrase_failure(self, mocker): self.cli.unlock_luks_volume(vol, key) @mock.patch( - "subprocess.Popen", side_effect=subprocess.CalledProcessError("1", "Popen") + "subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen") ) def test_unlock_luks_volume_luksOpen_exception(self, mocked_subprocess): pd = Volume( From 87fd14cae6918b5899c464302889f507e7df3104 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 15 Feb 2023 15:58:43 -0500 Subject: [PATCH 557/751] Add FIXMEs and suppress mypy errors that weren't obvious --- securedrop_export/disk/cli.py | 5 ++++- securedrop_export/disk/legacy_service.py | 3 +++ securedrop_export/disk/service.py | 2 ++ securedrop_export/main.py | 6 ++++-- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index 503d80b86..b37084f37 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -342,7 +342,10 @@ def write_data_to_device( that cleanup happens even if export fails or only partially succeeds. """ try: - target_path = os.path.join(device.mountpoint, submission_target_dirname) + # TODO: is it possible for device.mountpoint to be None here? + target_path = os.path.join( + device.mountpoint, submission_target_dirname # type: ignore[arg-type] + ) subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(submission_tmpdir, "export_data/") diff --git a/securedrop_export/disk/legacy_service.py b/securedrop_export/disk/legacy_service.py index 555c1e697..ef6bda151 100644 --- a/securedrop_export/disk/legacy_service.py +++ b/securedrop_export/disk/legacy_service.py @@ -60,6 +60,9 @@ def check_disk_format(self) -> LegacyStatus: # backwards compatibility, this is the only expected status # at this stage return LegacyStatus.LEGACY_USB_ENCRYPTED + else: + # FIXME: What should be returned if there is more than 1 connected device? + raise NotImplementedError("???") except ExportException as ex: logger.error( diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index b5702a474..e2ddfa5f3 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -24,6 +24,8 @@ def run(self, arg: str) -> Status: """ Run export actions. """ + # FIXME: is this supposed to be empty or abstract? + raise NotImplementedError("???") def scan_all_devices(self) -> Status: """ diff --git a/securedrop_export/main.py b/securedrop_export/main.py index f0a8b80b6..c753000f0 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -140,9 +140,11 @@ def _start_service(submission: Archive) -> Status: elif submission.command is Command.EXPORT: return ExportService(submission).export() elif submission.command is Command.CHECK_USBS: - return ExportService(submission).check_connected_devices() + # FIXME: this returns LegacyStatus, not Status + return ExportService(submission).check_connected_devices() # type: ignore[return-value] elif submission.command is Command.CHECK_VOLUME: - return ExportService(submission).check_disk_format() + # FIXME: this returns LegacyStatus, not Status + return ExportService(submission).check_disk_format() # type: ignore[return-value] # Unreachable raise ValueError( From c0288e48bda4edd24402abf555410ed84c34ec99 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 28 Feb 2023 12:31:01 -0800 Subject: [PATCH 558/751] Remove unused methods, fix type errors --- securedrop_export/disk/__init__.py | 1 + securedrop_export/disk/legacy_service.py | 4 ++-- securedrop_export/disk/service.py | 7 ------- securedrop_export/main.py | 11 +++++------ 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/securedrop_export/disk/__init__.py b/securedrop_export/disk/__init__.py index 6af1f1a09..e61094546 100644 --- a/securedrop_export/disk/__init__.py +++ b/securedrop_export/disk/__init__.py @@ -1 +1,2 @@ from .legacy_service import Service as LegacyService # noqa: F401 +from .legacy_status import Status as LegacyStatus # noqa: F401 diff --git a/securedrop_export/disk/legacy_service.py b/securedrop_export/disk/legacy_service.py index ef6bda151..d6b883a9b 100644 --- a/securedrop_export/disk/legacy_service.py +++ b/securedrop_export/disk/legacy_service.py @@ -61,8 +61,8 @@ def check_disk_format(self) -> LegacyStatus: # at this stage return LegacyStatus.LEGACY_USB_ENCRYPTED else: - # FIXME: What should be returned if there is more than 1 connected device? - raise NotImplementedError("???") + logger.error("Multiple partitions not supported") + return LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED except ExportException as ex: logger.error( diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index e2ddfa5f3..22e524b59 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -20,13 +20,6 @@ class Service: def __init__(self, cli: CLI): self.cli = cli - def run(self, arg: str) -> Status: - """ - Run export actions. - """ - # FIXME: is this supposed to be empty or abstract? - raise NotImplementedError("???") - def scan_all_devices(self) -> Status: """ Check all connected devices and return current device diff --git a/securedrop_export/main.py b/securedrop_export/main.py index c753000f0..bc55ae159 100755 --- a/securedrop_export/main.py +++ b/securedrop_export/main.py @@ -12,6 +12,7 @@ from securedrop_export.exceptions import ExportException from securedrop_export.disk import LegacyService as ExportService +from securedrop_export.disk import LegacyStatus from securedrop_export.print import Service as PrintService from logging.handlers import TimedRotatingFileHandler, SysLogHandler @@ -124,7 +125,7 @@ def _configure_logging(): raise ExportException(sdstatus=Status.ERROR_LOGGING) from ex -def _start_service(submission: Archive) -> Status: +def _start_service(submission: Archive) -> LegacyStatus: """ Start print or export service. """ @@ -140,14 +141,12 @@ def _start_service(submission: Archive) -> Status: elif submission.command is Command.EXPORT: return ExportService(submission).export() elif submission.command is Command.CHECK_USBS: - # FIXME: this returns LegacyStatus, not Status - return ExportService(submission).check_connected_devices() # type: ignore[return-value] + return ExportService(submission).check_connected_devices() elif submission.command is Command.CHECK_VOLUME: - # FIXME: this returns LegacyStatus, not Status - return ExportService(submission).check_disk_format() # type: ignore[return-value] + return ExportService(submission).check_disk_format() # Unreachable - raise ValueError( + raise ExportException( f"unreachable: unknown submission.command value: {submission.command}" ) From d57c18239d1950c55a085896e78e610536a6106d Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 28 Feb 2023 12:15:10 -0800 Subject: [PATCH 559/751] Create MountedVolume object instead of using nullable mountpoint attribute for Volume. --- securedrop_export/disk/cli.py | 64 ++++++++++++------------ securedrop_export/disk/legacy_service.py | 11 ++-- securedrop_export/disk/service.py | 8 +-- securedrop_export/disk/volume.py | 34 ++++++++++--- tests/disk/test_cli.py | 34 +++++++------ tests/disk/test_service.py | 4 +- tests/disk/test_volume.py | 26 ++++------ 7 files changed, 101 insertions(+), 80 deletions(-) diff --git a/securedrop_export/disk/cli.py b/securedrop_export/disk/cli.py index b37084f37..abdc0c104 100644 --- a/securedrop_export/disk/cli.py +++ b/securedrop_export/disk/cli.py @@ -2,11 +2,11 @@ import os import subprocess -from typing import List, Optional +from typing import List, Optional, Union from securedrop_export.exceptions import ExportException -from .volume import EncryptionScheme, Volume +from .volume import EncryptionScheme, Volume, MountedVolume from .status import Status logger = logging.getLogger(__name__) @@ -178,17 +178,19 @@ def _get_luks_name_from_headers(self, device: str) -> str: logger.error("Failed to dump LUKS header") raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex - def get_luks_volume(self, device: str) -> Volume: + def get_luks_volume(self, device: str) -> Union[Volume, MountedVolume]: """ Given a string corresponding to a LUKS-partitioned volume, return a corresponding Volume object. - If LUKS volume is already mounted, existing mountpoint will be preserved. - If LUKS volume is unlocked but not mounted, volume will be mounted at _DEFAULT_MOUNTPOINT. + If LUKS volume is already mounted, existing mountpoint will be preserved and a + MountedVolume object will be returned. + If LUKS volume is unlocked but not mounted, volume will be mounted at _DEFAULT_MOUNTPOINT, + and a MountedVolume object will be returned. - If device is still locked, mountpoint will not be set. Once the decrpytion passphrase is - available, call unlock_luks_volume(), passing the Volume object and passphrase, to - unlock the volume. + If device is still locked, mountpoint will not be set, and a Volume object will be retuned. + Once the decrpytion passphrase is available, call unlock_luks_volume(), passing the Volume + object and passphrase to unlock the volume. Raise ExportException if errors are encountered. """ @@ -205,6 +207,7 @@ def get_luks_volume(self, device: str) -> Volume: # If the device has been unlocked, we can see if it's mounted and # use the existing mountpoint, or mount it ourselves. + # Either way, return a MountedVolume. if os.path.exists(os.path.join("/dev/mapper/", mapped_name)): return self.mount_volume(luks_volume) @@ -273,9 +276,9 @@ def _get_mountpoint(self, volume: Volume) -> Optional[str]: logger.error(ex) raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex - def mount_volume(self, volume: Volume) -> Volume: + def mount_volume(self, volume: Volume) -> MountedVolume: """ - Given an unlocked LUKS volume, return a mounted LUKS volume. + Given an unlocked LUKS volume, return MountedVolume object. If volume is already mounted, mountpoint is not changed. Otherwise, volume is mounted at _DEFAULT_MOUNTPOINT. @@ -289,23 +292,19 @@ def mount_volume(self, volume: Volume) -> Volume: mountpoint = self._get_mountpoint(volume) if mountpoint: - logger.info("The device is already mounted") - if volume.mountpoint is not mountpoint: - logger.warning("Mountpoint was inaccurate, updating") - - volume.mountpoint = mountpoint - return volume + logger.info("The device is already mounted--use existing mountpoint") + return MountedVolume.from_volume(volume, mountpoint) else: logger.info("Mount volume at default mountpoint") return self._mount_at_mountpoint(volume, self._DEFAULT_MOUNTPOINT) - def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> Volume: + def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> MountedVolume: """ Mount a volume at the supplied mountpoint, creating the mountpoint directory and adjusting permissions (user:user) if need be. `mountpoint` must be a full path. - Return Volume object. + Return MountedVolume object. Raise ExportException if unable to mount volume at target mountpoint. """ if not os.path.exists(mountpoint): @@ -325,27 +324,26 @@ def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> Volume: subprocess.check_call(["sudo", "mount", mapped_device_path, mountpoint]) subprocess.check_call(["sudo", "chown", "-R", "user:user", mountpoint]) - volume.mountpoint = mountpoint - except subprocess.CalledProcessError as ex: logger.error(ex) raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex - return volume + return MountedVolume.from_volume(volume, mountpoint) def write_data_to_device( - self, submission_tmpdir: str, submission_target_dirname: str, device: Volume + self, + submission_tmpdir: str, + submission_target_dirname: str, + device: MountedVolume, ): """ Move files to drive (overwrites files with same filename) and unmount drive. Drive is unmounted and files are cleaned up as part of the `finally` block to ensure that cleanup happens even if export fails or only partially succeeds. """ + try: - # TODO: is it possible for device.mountpoint to be None here? - target_path = os.path.join( - device.mountpoint, submission_target_dirname # type: ignore[arg-type] - ) + target_path = os.path.join(device.mountpoint, submission_target_dirname) subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(submission_tmpdir, "export_data/") @@ -357,12 +355,13 @@ def write_data_to_device( ) except (subprocess.CalledProcessError, OSError) as ex: + logger.error(ex) raise ExportException(sdstatus=Status.ERROR_EXPORT) from ex finally: self.cleanup_drive_and_tmpdir(device, submission_tmpdir) - def cleanup_drive_and_tmpdir(self, volume: Volume, submission_tmpdir: str): + def cleanup_drive_and_tmpdir(self, volume: MountedVolume, submission_tmpdir: str): """ Post-export cleanup method. Unmount and lock drive and remove temporary directory. Currently called at end of `write_data_to_device()` to ensure @@ -382,15 +381,14 @@ def cleanup_drive_and_tmpdir(self, volume: Volume, submission_tmpdir: str): logger.error("Error syncing filesystem") raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex - def _unmount_volume(self, volume: Volume) -> Volume: + def _unmount_volume(self, volume: MountedVolume) -> Volume: """ Helper. Unmount volume """ - if volume.mountpoint and os.path.exists(volume.mountpoint): + if os.path.exists(volume.mountpoint): logger.debug(f"Unmounting drive from {volume.mountpoint}") try: subprocess.check_call(["sudo", "umount", volume.mountpoint]) - volume.mountpoint = None except subprocess.CalledProcessError as ex: logger.error("Error unmounting device") @@ -398,7 +396,11 @@ def _unmount_volume(self, volume: Volume) -> Volume: else: logger.info("Mountpoint does not exist; volume was already unmounted") - return volume + return Volume( + device_name=volume.device_name, + mapped_name=volume.mapped_name, + encryption=volume.encryption, + ) def _close_luks_volume(self, unlocked_device: Volume) -> None: """ diff --git a/securedrop_export/disk/legacy_service.py b/securedrop_export/disk/legacy_service.py index d6b883a9b..3dbe6acaa 100644 --- a/securedrop_export/disk/legacy_service.py +++ b/securedrop_export/disk/legacy_service.py @@ -5,6 +5,7 @@ from .cli import CLI from .legacy_status import Status as LegacyStatus from .status import Status as Status +from .volume import MountedVolume logger = logging.getLogger(__name__) @@ -94,16 +95,18 @@ def export(self): if self.cli.is_luks_volume(device): volume = self.cli.get_luks_volume(device) logger.info("Check if writable") - if not volume.writable: + if not isinstance(volume, MountedVolume): logger.info("Not writable-will try unlocking") volume = self.cli.unlock_luks_volume( volume, self.submission.encryption_key ) - volume = self.cli.mount_volume(volume) + mounted_volume = self.cli.mount_volume(volume) - logger.info(f"Export submission to {volume.mountpoint}") + logger.info(f"Export submission to {mounted_volume.mountpoint}") self.cli.write_data_to_device( - self.submission.tmpdir, self.submission.target_dirname, volume + self.submission.tmpdir, + self.submission.target_dirname, + mounted_volume, ) # This is SUCCESS_EXPORT, but the 0.7.0 client is not expecting # a return status from a successful export operation. diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index 22e524b59..0c983c516 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -4,7 +4,7 @@ from .cli import CLI from .status import Status -from .volume import Volume +from .volume import Volume, MountedVolume from securedrop_export.exceptions import ExportException @@ -55,7 +55,7 @@ def scan_single_device(self, blkid: str) -> Status: self.volume = self.cli.get_luks_volume(target) # See if it's unlocked and mounted - if self.volume.writable: + if isinstance(self.volume, MountedVolume): logger.debug("LUKS device is already mounted") return Status.DEVICE_WRITABLE else: @@ -85,7 +85,7 @@ def unlock_device(self, passphrase: str, volume: Volume) -> Status: try: self.volume = self.cli.unlock_luks_volume(volume, passphrase) - if volume.writable: + if isinstance(volume, MountedVolume): return Status.DEVICE_WRITABLE else: return Status.ERROR_UNLOCK_LUKS @@ -98,7 +98,7 @@ def unlock_device(self, passphrase: str, volume: Volume) -> Status: logger.warning("Tried to unlock_device but no current volume detected.") return Status.NO_DEVICE_DETECTED - def write_to_device(self, volume: Volume, data: Archive) -> Status: + def write_to_device(self, volume: MountedVolume, data: Archive) -> Status: """ Export data to volume. CLI unmounts and locks volume on completion, even if export was unsuccessful. diff --git a/securedrop_export/disk/volume.py b/securedrop_export/disk/volume.py index 195318c94..6d41bce47 100644 --- a/securedrop_export/disk/volume.py +++ b/securedrop_export/disk/volume.py @@ -1,6 +1,5 @@ from enum import Enum import os -from typing import Optional class EncryptionScheme(Enum): @@ -27,11 +26,9 @@ def __init__( device_name: str, mapped_name: str, encryption: EncryptionScheme, - mountpoint: Optional[str] = None, ): self.device_name = device_name self.mapped_name = mapped_name - self.mountpoint = mountpoint self.encryption = encryption @property @@ -45,10 +42,6 @@ def encryption(self, scheme: EncryptionScheme): else: self._encryption = EncryptionScheme.UNKNOWN - @property - def writable(self) -> bool: - return self.unlocked and self.mountpoint is not None - @property def unlocked(self) -> bool: return ( @@ -58,3 +51,30 @@ def unlocked(self) -> bool: os.path.join(self.MAPPED_VOLUME_PREFIX, self.mapped_name) ) ) + + +class MountedVolume(Volume): + """ + An unlocked and mounted Volume. + """ + + def __init__( + self, + device_name: str, + mapped_name: str, + encryption: EncryptionScheme, + mountpoint: str, + ): + super().__init__( + device_name=device_name, mapped_name=mapped_name, encryption=encryption + ) + self.mountpoint = mountpoint + + @classmethod + def from_volume(cls, vol: Volume, mountpoint: str): + return cls( + device_name=vol.device_name, + mapped_name=vol.mapped_name, + encryption=vol.encryption, + mountpoint=mountpoint, + ) diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index 4853666c7..8326bb8e9 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -4,7 +4,7 @@ import subprocess from securedrop_export.disk.cli import CLI -from securedrop_export.disk.volume import EncryptionScheme, Volume +from securedrop_export.disk.volume import EncryptionScheme, Volume, MountedVolume from securedrop_export.exceptions import ExportException from securedrop_export.disk.status import Status @@ -301,8 +301,9 @@ def test_mount_volume(self, mocked_call, mocked_output, mocked_path): mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - self.cli.mount_volume(vol) - assert vol.mountpoint is self.cli._DEFAULT_MOUNTPOINT + mv = self.cli.mount_volume(vol) + assert isinstance(mv, MountedVolume) + assert mv.mountpoint is self.cli._DEFAULT_MOUNTPOINT @mock.patch("os.path.exists", return_value=True) @mock.patch( @@ -319,6 +320,7 @@ def test_mount_volume_already_mounted( ) result = self.cli.mount_volume(md) assert result.mountpoint == "/dev/pretend/luks-id-123456" + assert isinstance(result, MountedVolume) @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_output", return_value=b"\n") @@ -329,7 +331,9 @@ def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess, mocked_path) mapped_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, ) - assert self.cli.mount_volume(md).mapped_name == _PRETEND_LUKS_ID + mv = self.cli.mount_volume(md) + assert mv.mapped_name == _PRETEND_LUKS_ID + assert isinstance(mv, MountedVolume) @mock.patch("subprocess.check_output", return_value=b"\n") @mock.patch( @@ -361,8 +365,7 @@ def test_mount_at_mountpoint_mkdir_error(self, mocked_subprocess, mocked_path): ) with pytest.raises(ExportException) as ex: - volume = self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) - assert not volume.writable + self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) assert ex.value.sdstatus is Status.ERROR_MOUNT @@ -379,15 +382,14 @@ def test_mount_at_mountpoint_mounting_error(self, mocked_subprocess, mocked_path ) with pytest.raises(ExportException) as ex: - volume = self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) - assert not volume.writable + self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) assert ex.value.sdstatus is Status.ERROR_MOUNT @mock.patch("os.path.exists", return_value=True) @mock.patch("subprocess.check_call", return_value=0) def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): - mounted = Volume( + mounted = MountedVolume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, mountpoint=self.cli._DEFAULT_MOUNTPOINT, @@ -395,7 +397,7 @@ def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): ) result = self.cli._unmount_volume(mounted) - assert result.mountpoint is None + assert not isinstance(result, MountedVolume) @mock.patch("os.path.exists", return_value=True) @mock.patch( @@ -403,7 +405,7 @@ def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): side_effect=subprocess.CalledProcessError(1, "check_call"), ) def test__unmount_volume_error(self, mocked_subprocess, mocked_mountpath): - mounted = Volume( + mounted = MountedVolume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, mountpoint=self.cli._DEFAULT_MOUNTPOINT, @@ -459,7 +461,7 @@ def test_write_to_disk(self, mock_check_call): patch.return_value = mock.MagicMock() patch.start() - vol = Volume( + vol = MountedVolume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, mountpoint=self.cli._DEFAULT_MOUNTPOINT, @@ -484,7 +486,7 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call): patch.return_value = mock.MagicMock() patch.start() - vol = Volume( + vol = MountedVolume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, mountpoint=self.cli._DEFAULT_MOUNTPOINT, @@ -519,9 +521,9 @@ def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): vol = Volume( device_name=_DEFAULT_USB_DEVICE_ONE_PART, mapped_name=_PRETEND_LUKS_ID, - mountpoint=self.cli._DEFAULT_MOUNTPOINT, encryption=EncryptionScheme.LUKS, ) + mv = MountedVolume.from_volume(vol, mountpoint=self.cli._DEFAULT_MOUNTPOINT) close_patch = mock.patch.object(self.cli, "_close_luks_volume") remove_tmpdir_patch = mock.patch.object(self.cli, "_remove_temp_directory") @@ -530,9 +532,9 @@ def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): rm_tpdir_mock = remove_tmpdir_patch.start() # That was all setup. Here's our test - self.cli.cleanup_drive_and_tmpdir(vol, submission.tmpdir) + self.cli.cleanup_drive_and_tmpdir(mv, submission.tmpdir) - close_mock.assert_called_once_with(vol) + close_mock.assert_called_once() rm_tpdir_mock.assert_called_once_with(submission.tmpdir) # Undo patch changes diff --git a/tests/disk/test_service.py b/tests/disk/test_service.py index 17ad3266b..d7053e1d0 100644 --- a/tests/disk/test_service.py +++ b/tests/disk/test_service.py @@ -6,7 +6,7 @@ from securedrop_export.exceptions import ExportException from securedrop_export.disk.legacy_status import Status as LegacyStatus from securedrop_export.disk.status import Status as Status -from securedrop_export.disk.volume import Volume, EncryptionScheme +from securedrop_export.disk.volume import Volume, MountedVolume, EncryptionScheme from securedrop_export.archive import Archive, Metadata from securedrop_export.disk.legacy_service import Service from securedrop_export.disk.cli import CLI @@ -27,7 +27,7 @@ def setup_class(cls): mapped_name="fake-luks-id-123456", encryption=EncryptionScheme.LUKS, ) - cls.mock_luks_volume_mounted = Volume( + cls.mock_luks_volume_mounted = MountedVolume( device_name=SAMPLE_OUTPUT_USB, mapped_name="fake-luks-id-123456", mountpoint="/media/usb", diff --git a/tests/disk/test_volume.py b/tests/disk/test_volume.py index f28e711c7..10d4c6894 100644 --- a/tests/disk/test_volume.py +++ b/tests/disk/test_volume.py @@ -1,6 +1,6 @@ from unittest import mock -from securedrop_export.disk.volume import Volume, EncryptionScheme +from securedrop_export.disk.volume import Volume, MountedVolume, EncryptionScheme class TestVolume: @@ -34,23 +34,17 @@ def test_is_unlocked_false_no_path(self, mock_os_path): assert not volume.unlocked - @mock.patch("os.path.exists", return_value=True) - def test_writable_false(self, mock_os_path): - vol = Volume( - device_name="dev/sda1", - mapped_name="pretend-luks-id", - encryption=EncryptionScheme.LUKS, - ) - - assert not vol.writable +class TestMountedVolume: @mock.patch("os.path.exists", return_value=True) - def test_writable(self, mock_os_path): - vol = Volume( - device_name="dev/sda1", - mapped_name="pretend-luks-id", + def test_is_unlocked_true(self, mock_os_path): + volume = Volume( + device_name="/dev/sda1", + mapped_name="pretend-luks-mapper-id", encryption=EncryptionScheme.LUKS, - mountpoint="/media/usb", ) - assert vol.writable + mounted_volume = MountedVolume.from_volume(volume, mountpoint="/media/usb") + + assert mounted_volume.unlocked + assert mounted_volume.mountpoint == "/media/usb" From c80f652ad8c1130b0822e44176cee4196748dcb7 Mon Sep 17 00:00:00 2001 From: Gonzalo Bulnes Guilpain Date: Tue, 7 Feb 2023 17:10:46 +1100 Subject: [PATCH 560/751] Fix testing requirement checks: scope it to Debian version The requirement files for Bullseye and Bookworm used ot only differ in comments. That's not the case anymore, so this commit scoped the check to the requirement file that matches the Debian version under test. I've verified that the check fails as expected when the file is out of date. (cherry-picked from 37292714b97b1147801de408d41889b9a5d63205) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0aa6fb8a4..94cdb4b3d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -86,7 +86,7 @@ common-steps: make venv source .venv/bin/activate make requirements - git diff --ignore-matching-lines=# --exit-code + git diff --exit-code requirements/dev-${VERSION_CODENAME}-requirements.txt - &build_debian_package run: From 9398dbefbe77bc229cf895bcff252f2f3b95630b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 2 May 2023 12:32:31 -0400 Subject: [PATCH 561/751] Bump version to 0.4.1, add changelog Refs #116. --- changelog.md | 5 +++++ securedrop_proxy/VERSION | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 2453b0d66..32aa3ae84 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 0.4.1 + * Updated certifi to 2022.12.7 (#107) + * Drop furl dependency (#105, #111) + * Replace werkzeug dependency with basic string checks (#110, 115) + ## 0.4.0 * Reject JSON with duplicate keys (TOB-SDW-014) (#98) diff --git a/securedrop_proxy/VERSION b/securedrop_proxy/VERSION index 1d0ba9ea1..267577d47 100644 --- a/securedrop_proxy/VERSION +++ b/securedrop_proxy/VERSION @@ -1 +1 @@ -0.4.0 +0.4.1 From ee792ad6094a4f06a290b9c4f266b3e4b234dfde Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Tue, 23 May 2023 11:11:02 -0400 Subject: [PATCH 562/751] updated requests from 2.26.0 to 2.31.0 --- requirements/dev-requirements.txt | 597 +++++++++++++++--------------- requirements/requirements.txt | 10 +- 2 files changed, 305 insertions(+), 302 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 364615831..d269f0fb1 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,39 +1,35 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 - # via pytest -black==23.1.0 \ - --hash=sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd \ - --hash=sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555 \ - --hash=sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481 \ - --hash=sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468 \ - --hash=sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9 \ - --hash=sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a \ - --hash=sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958 \ - --hash=sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580 \ - --hash=sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26 \ - --hash=sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32 \ - --hash=sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8 \ - --hash=sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753 \ - --hash=sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b \ - --hash=sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074 \ - --hash=sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651 \ - --hash=sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24 \ - --hash=sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6 \ - --hash=sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad \ - --hash=sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac \ - --hash=sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221 \ - --hash=sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06 \ - --hash=sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27 \ - --hash=sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648 \ - --hash=sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739 \ - --hash=sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104 +black==23.3.0 \ + --hash=sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5 \ + --hash=sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915 \ + --hash=sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326 \ + --hash=sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940 \ + --hash=sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b \ + --hash=sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30 \ + --hash=sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c \ + --hash=sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c \ + --hash=sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab \ + --hash=sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27 \ + --hash=sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2 \ + --hash=sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961 \ + --hash=sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9 \ + --hash=sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb \ + --hash=sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70 \ + --hash=sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331 \ + --hash=sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2 \ + --hash=sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266 \ + --hash=sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d \ + --hash=sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6 \ + --hash=sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b \ + --hash=sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925 \ + --hash=sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8 \ + --hash=sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4 \ + --hash=sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3 # via -r requirements/dev-requirements.in build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ @@ -57,64 +53,64 @@ click==8.1.3 \ # via # black # pip-tools -coverage[toml]==7.1.0 \ - --hash=sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab \ - --hash=sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851 \ - --hash=sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265 \ - --hash=sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0 \ - --hash=sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a \ - --hash=sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5 \ - --hash=sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6 \ - --hash=sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311 \ - --hash=sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada \ - --hash=sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f \ - --hash=sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8 \ - --hash=sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc \ - --hash=sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73 \ - --hash=sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf \ - --hash=sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e \ - --hash=sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352 \ - --hash=sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c \ - --hash=sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c \ - --hash=sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c \ - --hash=sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda \ - --hash=sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d \ - --hash=sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0 \ - --hash=sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3 \ - --hash=sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d \ - --hash=sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038 \ - --hash=sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c \ - --hash=sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8 \ - --hash=sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa \ - --hash=sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09 \ - --hash=sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b \ - --hash=sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c \ - --hash=sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a \ - --hash=sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52 \ - --hash=sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3 \ - --hash=sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146 \ - --hash=sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a \ - --hash=sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f \ - --hash=sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4 \ - --hash=sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c \ - --hash=sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75 \ - --hash=sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040 \ - --hash=sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063 \ - --hash=sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050 \ - --hash=sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7 \ - --hash=sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222 \ - --hash=sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912 \ - --hash=sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801 \ - --hash=sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d \ - --hash=sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06 \ - --hash=sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8 \ - --hash=sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2 +coverage[toml]==7.2.5 \ + --hash=sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3 \ + --hash=sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a \ + --hash=sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813 \ + --hash=sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0 \ + --hash=sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a \ + --hash=sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd \ + --hash=sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139 \ + --hash=sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b \ + --hash=sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252 \ + --hash=sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790 \ + --hash=sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045 \ + --hash=sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce \ + --hash=sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200 \ + --hash=sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718 \ + --hash=sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b \ + --hash=sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f \ + --hash=sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5 \ + --hash=sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade \ + --hash=sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5 \ + --hash=sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a \ + --hash=sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8 \ + --hash=sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33 \ + --hash=sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e \ + --hash=sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c \ + --hash=sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3 \ + --hash=sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969 \ + --hash=sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068 \ + --hash=sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2 \ + --hash=sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771 \ + --hash=sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed \ + --hash=sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212 \ + --hash=sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614 \ + --hash=sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88 \ + --hash=sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3 \ + --hash=sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c \ + --hash=sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84 \ + --hash=sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11 \ + --hash=sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1 \ + --hash=sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1 \ + --hash=sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e \ + --hash=sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1 \ + --hash=sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd \ + --hash=sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47 \ + --hash=sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a \ + --hash=sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c \ + --hash=sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31 \ + --hash=sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5 \ + --hash=sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6 \ + --hash=sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303 \ + --hash=sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5 \ + --hash=sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47 # via # -r requirements/dev-requirements.in # pytest-cov -exceptiongroup==1.1.0 \ - --hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \ - --hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23 +exceptiongroup==1.1.1 \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via pytest flake8==6.0.0 \ --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ @@ -215,62 +211,58 @@ multidict==6.0.4 \ --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba # via yarl -mypy==0.991 \ - --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ - --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ - --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ - --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ - --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ - --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ - --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ - --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ - --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ - --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ - --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ - --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ - --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ - --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ - --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ - --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ - --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ - --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ - --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ - --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ - --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ - --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ - --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ - --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ - --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ - --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ - --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ - --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ - --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ - --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef +mypy==1.3.0 \ + --hash=sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703 \ + --hash=sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf \ + --hash=sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4 \ + --hash=sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85 \ + --hash=sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd \ + --hash=sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae \ + --hash=sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd \ + --hash=sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca \ + --hash=sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305 \ + --hash=sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409 \ + --hash=sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c \ + --hash=sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb \ + --hash=sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee \ + --hash=sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a \ + --hash=sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228 \ + --hash=sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897 \ + --hash=sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d \ + --hash=sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f \ + --hash=sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152 \ + --hash=sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf \ + --hash=sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8 \ + --hash=sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11 \ + --hash=sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017 \ + --hash=sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929 \ + --hash=sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e \ + --hash=sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a # via -r requirements/dev-requirements.in -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via # black # mypy -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f # via # black # build # pytest -pathspec==0.11.0 \ - --hash=sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229 \ - --hash=sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc +pathspec==0.11.1 \ + --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ + --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 # via black -pip-tools==6.12.2 \ - --hash=sha256:6a51f4fd67140d5e83703ebfa9610fb61398727151f56a1be02a972d062e4679 \ - --hash=sha256:8b903696df4598b10d469026ef9995c5f9a874b416e88e7a214884ebe4a70245 +pip-tools==6.13.0 \ + --hash=sha256:50943f151d87e752abddec8158622c34ad7f292e193836e90e30d87da60b19d9 \ + --hash=sha256:61d46bd2eb8016ed4a924e196e6e5b0a268cd3babd79e593048720db23522bb1 # via -r requirements/dev-requirements.in -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.5.1 \ + --hash=sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f \ + --hash=sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5 # via black pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ @@ -292,9 +284,9 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -pytest==7.2.1 \ - --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ - --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 +pytest==7.3.1 \ + --hash=sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362 \ + --hash=sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3 # via # -r requirements/dev-requirements.in # pytest-cov @@ -340,9 +332,9 @@ pyyaml==5.4.1 \ # via # -r requirements/dev-requirements.in # vcrpy -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via -r requirements/requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -357,17 +349,17 @@ tomli==2.0.1 \ # coverage # mypy # pytest -types-requests==2.28.11.8 \ - --hash=sha256:61960554baca0008ae7e2db2bd3b322ca9a144d3e80ce270f5fb640817e40994 \ - --hash=sha256:e67424525f84adfbeab7268a159d3c633862dafae15c5b19547ce1b55954f0a3 +types-requests==2.31.0.0 \ + --hash=sha256:7c5cea7940f8e92ec560bbc468f65bf684aa3dcf0554a6f8c4710f5f708dc598 \ + --hash=sha256:c1c29d20ab8d84dff468d7febfe8e0cb0b4664543221b386605e14672b44ea25 # via -r requirements/dev-requirements.in -types-urllib3==1.26.25.4 \ - --hash=sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49 \ - --hash=sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee +types-urllib3==1.26.25.13 \ + --hash=sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5 \ + --hash=sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c # via types-requests -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.6.0 \ + --hash=sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223 \ + --hash=sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768 # via # black # mypy @@ -381,159 +373,170 @@ vcrpy==4.2.1 \ --hash=sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013 \ --hash=sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09 # via -r requirements/dev-requirements.in -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 # via pip-tools -wrapt==1.14.1 \ - --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ - --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ - --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ - --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ - --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ - --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ - --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ - --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ - --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ - --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ - --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ - --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ - --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ - --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ - --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ - --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ - --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ - --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ - --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ - --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ - --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ - --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ - --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ - --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ - --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ - --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ - --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ - --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ - --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ - --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ - --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ - --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ - --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ - --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ - --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ - --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ - --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ - --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ - --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ - --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ - --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ - --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ - --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ - --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ - --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ - --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ - --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ - --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ - --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ - --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ - --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ - --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ - --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ - --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ - --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ - --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ - --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ - --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ - --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ - --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ - --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ - --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ - --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ - --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af +wrapt==1.15.0 \ + --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ + --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ + --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ + --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ + --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ + --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ + --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ + --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ + --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ + --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ + --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ + --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ + --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ + --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ + --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ + --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ + --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ + --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ + --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ + --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ + --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ + --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ + --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ + --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ + --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ + --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ + --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ + --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ + --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ + --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ + --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ + --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ + --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ + --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ + --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ + --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ + --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ + --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ + --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ + --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ + --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ + --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ + --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ + --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ + --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ + --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ + --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ + --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ + --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ + --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ + --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ + --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ + --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ + --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ + --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ + --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ + --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ + --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ + --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ + --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ + --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ + --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ + --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ + --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ + --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ + --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ + --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ + --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ + --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ + --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ + --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ + --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ + --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ + --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ + --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 # via vcrpy -yarl==1.8.2 \ - --hash=sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87 \ - --hash=sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89 \ - --hash=sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a \ - --hash=sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08 \ - --hash=sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996 \ - --hash=sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077 \ - --hash=sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901 \ - --hash=sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e \ - --hash=sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee \ - --hash=sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574 \ - --hash=sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165 \ - --hash=sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634 \ - --hash=sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229 \ - --hash=sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b \ - --hash=sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f \ - --hash=sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7 \ - --hash=sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf \ - --hash=sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89 \ - --hash=sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0 \ - --hash=sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1 \ - --hash=sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe \ - --hash=sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf \ - --hash=sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76 \ - --hash=sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951 \ - --hash=sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863 \ - --hash=sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06 \ - --hash=sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562 \ - --hash=sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6 \ - --hash=sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c \ - --hash=sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e \ - --hash=sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1 \ - --hash=sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3 \ - --hash=sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3 \ - --hash=sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778 \ - --hash=sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8 \ - --hash=sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2 \ - --hash=sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b \ - --hash=sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d \ - --hash=sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f \ - --hash=sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c \ - --hash=sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581 \ - --hash=sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918 \ - --hash=sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c \ - --hash=sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e \ - --hash=sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220 \ - --hash=sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37 \ - --hash=sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739 \ - --hash=sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77 \ - --hash=sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6 \ - --hash=sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42 \ - --hash=sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946 \ - --hash=sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5 \ - --hash=sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d \ - --hash=sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146 \ - --hash=sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a \ - --hash=sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83 \ - --hash=sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef \ - --hash=sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80 \ - --hash=sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588 \ - --hash=sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5 \ - --hash=sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2 \ - --hash=sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef \ - --hash=sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826 \ - --hash=sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05 \ - --hash=sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516 \ - --hash=sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0 \ - --hash=sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4 \ - --hash=sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2 \ - --hash=sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0 \ - --hash=sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd \ - --hash=sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8 \ - --hash=sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b \ - --hash=sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1 \ - --hash=sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c +yarl==1.9.2 \ + --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ + --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ + --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ + --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ + --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ + --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ + --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ + --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ + --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ + --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ + --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ + --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ + --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ + --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ + --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ + --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ + --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ + --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ + --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ + --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ + --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ + --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ + --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ + --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ + --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ + --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ + --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ + --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ + --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ + --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ + --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ + --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ + --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ + --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ + --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ + --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ + --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ + --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ + --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ + --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ + --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ + --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ + --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ + --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ + --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ + --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ + --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ + --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ + --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ + --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ + --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ + --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ + --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ + --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ + --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ + --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ + --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ + --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ + --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ + --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ + --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ + --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ + --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ + --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ + --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ + --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ + --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ + --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ + --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ + --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ + --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ + --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ + --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ + --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 # via vcrpy # The following packages are considered to be unsafe in a requirements file: -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c +pip==23.1.2 \ + --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ + --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 # via pip-tools -setuptools==67.1.0 \ - --hash=sha256:a7687c12b444eaac951ea87a9627c4f904ac757e7abdc5aac32833234af90378 \ - --hash=sha256:e261cdf010c11a41cb5cb5f1bf3338a7433832029f559a6a7614bd42a967c300 +setuptools==67.8.0 \ + --hash=sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f \ + --hash=sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102 # via pip-tools diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e66cc836f..925e15f18 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # @@ -22,9 +22,9 @@ idna==3.2 \ # via # -r requirements/requirements.in # requests -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via -r requirements/requirements.in urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ From fc49970ca7c224f8995f4e5f60cec75e8e4d4760 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 23 May 2023 11:55:56 -0700 Subject: [PATCH 563/751] bump python version to 3.9 --- setup.cfg | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.cfg b/setup.cfg index 69c7cb933..7e4c8a6b0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,7 +2,7 @@ max_line_length = 100 [mypy] -python_version = 3.5 +python_version = 3.9 show_column_numbers = True show_error_context = True disallow_subclassing_any = True diff --git a/setup.py b/setup.py index e1ce72a32..312bccd25 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ long_description_content_type="text/markdown", license="GPLv3+", install_requires=["requests", "urllib3"], - python_requires=">=3.5", + python_requires=">=3.9", url="https://github.com/freedomofpress/securedrop-sdk", packages=setuptools.find_packages(exclude=["docs", "tests"]), classifiers=( From fb62e37ed1de1e29b2411c99b2c48738b406c9b1 Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 21 Jun 2023 15:02:06 -0700 Subject: [PATCH 564/751] Update requests to 2.31.0 --- requirements/build-requirements.txt | 2 +- requirements/requirements.in | 2 +- requirements/requirements.txt | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 0c7572ba7..36355f99d 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -2,5 +2,5 @@ certifi==2022.12.7 --hash=sha256:7f205a1a4f02f4970fb5d0e16457964bb30d6b678a76651 charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 pyyaml==5.4.1 --hash=sha256:9608c1b459ff310fe7fa78e8a9e12767a9a0ea9e3fa7cce116db58f95b61f56f --hash=sha256:f7190863a72d6eb89ed92e345e178a0803c439fd7126985b62c1c113cb01e534 -requests==2.26.0 --hash=sha256:7cec5239ce6ec4f6bf3d1b8c7e4d34ebe1b86d3896fe9657a8465ee4d7282bc8 +requests==2.31.0 --hash=sha256:9f7f0f507fe7a9e10ea51e666da60aafcfcda94c71f0cac477dbadd8d25de49f urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 diff --git a/requirements/requirements.in b/requirements/requirements.in index 07e99dfca..8f11a868d 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -2,5 +2,5 @@ certifi>=2022.12.07 charset-normalizer>=2.0.4 idna>=2.7 pyyaml==5.4.1 -requests>=2.26.0 +requests>=2.31.0 urllib3>=1.26.5 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index fb334feb4..952bd0c2f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -53,9 +53,9 @@ pyyaml==5.4.1 \ --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 # via -r requirements/requirements.in -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via -r requirements/requirements.in urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ From a8a73b524ae2eef3273302ff216e9f299fef0c4b Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 21 Jun 2023 15:55:05 -0700 Subject: [PATCH 565/751] Update dev dependencies --- requirements/dev-requirements.txt | 765 ++++++++++++++++-------------- 1 file changed, 399 insertions(+), 366 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 507e21d32..145a4b967 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -4,23 +4,36 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # -black==22.12.0 \ - --hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \ - --hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \ - --hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \ - --hash=sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f \ - --hash=sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf \ - --hash=sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148 \ - --hash=sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4 \ - --hash=sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d \ - --hash=sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc \ - --hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \ - --hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \ - --hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f +black==23.3.0 \ + --hash=sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5 \ + --hash=sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915 \ + --hash=sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326 \ + --hash=sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940 \ + --hash=sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b \ + --hash=sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30 \ + --hash=sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c \ + --hash=sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c \ + --hash=sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab \ + --hash=sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27 \ + --hash=sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2 \ + --hash=sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961 \ + --hash=sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9 \ + --hash=sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb \ + --hash=sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70 \ + --hash=sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331 \ + --hash=sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2 \ + --hash=sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266 \ + --hash=sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d \ + --hash=sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6 \ + --hash=sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b \ + --hash=sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925 \ + --hash=sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8 \ + --hash=sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4 \ + --hash=sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3 # via -r requirements/dev-requirements.in -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ @@ -40,57 +53,67 @@ click==8.1.3 \ # via # black # pip-tools -coverage==6.5.0 \ - --hash=sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79 \ - --hash=sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a \ - --hash=sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f \ - --hash=sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a \ - --hash=sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa \ - --hash=sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398 \ - --hash=sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba \ - --hash=sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d \ - --hash=sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf \ - --hash=sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b \ - --hash=sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518 \ - --hash=sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d \ - --hash=sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795 \ - --hash=sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2 \ - --hash=sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e \ - --hash=sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32 \ - --hash=sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745 \ - --hash=sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b \ - --hash=sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e \ - --hash=sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d \ - --hash=sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f \ - --hash=sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660 \ - --hash=sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62 \ - --hash=sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6 \ - --hash=sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04 \ - --hash=sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c \ - --hash=sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5 \ - --hash=sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef \ - --hash=sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc \ - --hash=sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae \ - --hash=sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578 \ - --hash=sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466 \ - --hash=sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4 \ - --hash=sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91 \ - --hash=sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0 \ - --hash=sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4 \ - --hash=sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b \ - --hash=sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe \ - --hash=sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b \ - --hash=sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75 \ - --hash=sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b \ - --hash=sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c \ - --hash=sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72 \ - --hash=sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b \ - --hash=sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f \ - --hash=sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e \ - --hash=sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53 \ - --hash=sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3 \ - --hash=sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84 \ - --hash=sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987 +coverage==7.2.7 \ + --hash=sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f \ + --hash=sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2 \ + --hash=sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a \ + --hash=sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a \ + --hash=sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01 \ + --hash=sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6 \ + --hash=sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7 \ + --hash=sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f \ + --hash=sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02 \ + --hash=sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c \ + --hash=sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063 \ + --hash=sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a \ + --hash=sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5 \ + --hash=sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959 \ + --hash=sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97 \ + --hash=sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6 \ + --hash=sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f \ + --hash=sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9 \ + --hash=sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5 \ + --hash=sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f \ + --hash=sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562 \ + --hash=sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe \ + --hash=sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9 \ + --hash=sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f \ + --hash=sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb \ + --hash=sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb \ + --hash=sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1 \ + --hash=sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb \ + --hash=sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250 \ + --hash=sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e \ + --hash=sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511 \ + --hash=sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5 \ + --hash=sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59 \ + --hash=sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2 \ + --hash=sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d \ + --hash=sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3 \ + --hash=sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4 \ + --hash=sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de \ + --hash=sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9 \ + --hash=sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833 \ + --hash=sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0 \ + --hash=sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9 \ + --hash=sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d \ + --hash=sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050 \ + --hash=sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d \ + --hash=sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6 \ + --hash=sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353 \ + --hash=sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb \ + --hash=sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e \ + --hash=sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8 \ + --hash=sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495 \ + --hash=sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2 \ + --hash=sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd \ + --hash=sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27 \ + --hash=sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1 \ + --hash=sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818 \ + --hash=sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4 \ + --hash=sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e \ + --hash=sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850 \ + --hash=sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3 # via -r requirements/dev-requirements.in flake8==6.0.0 \ --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ @@ -103,151 +126,145 @@ idna==3.2 \ # -r requirements/requirements.in # requests # yarl -isort==5.11.2 \ - --hash=sha256:dd8bbc5c0990f2a095d754e50360915f73b4c26fc82733eb5bfc6b48396af4d2 \ - --hash=sha256:e486966fba83f25b8045f8dd7455b0a0d1e4de481e1d7ce4669902d9fb85e622 +isort==5.12.0 \ + --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ + --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 # via -r requirements/dev-requirements.in mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 -multidict==6.0.3 \ - --hash=sha256:018c8e3be7f161a12b3e41741b6721f9baeb2210f4ab25a6359b7d76c1017dce \ - --hash=sha256:01b456046a05ff7cceefb0e1d2a9d32f05efcb1c7e0d152446304e11557639ce \ - --hash=sha256:114a4ab3e5cfbc56c4b6697686ecb92376c7e8c56893ef20547921552f8bdf57 \ - --hash=sha256:12e0d396faa6dc55ff5379eee54d1df3b508243ff15bfc8295a6ec7a4483a335 \ - --hash=sha256:190626ced82d4cc567a09e7346340d380154a493bac6905e0095d8158cdf1e38 \ - --hash=sha256:1f5d5129a937af4e3c4a1d6c139f4051b7d17d43276cefdd8d442a7031f7eef2 \ - --hash=sha256:21e1ce0b187c4e93112304dcde2aa18922fdbe8fb4f13d8aa72a5657bce0563a \ - --hash=sha256:24e8d513bfcaadc1f8b0ebece3ff50961951c54b07d5a775008a882966102418 \ - --hash=sha256:2523a29006c034687eccd3ee70093a697129a3ffe8732535d3b2df6a4ecc279d \ - --hash=sha256:26fbbe17f8a7211b623502d2bf41022a51da3025142401417c765bf9a56fed4c \ - --hash=sha256:2b66d61966b12e6bba500e5cbb2c721a35e119c30ee02495c5629bd0e91eea30 \ - --hash=sha256:2cf5d19e12eff855aa198259c0b02fd3f5d07e1291fbd20279c37b3b0e6c9852 \ - --hash=sha256:2cfda34b7cb99eacada2072e0f69c0ad3285cb6f8e480b11f2b6d6c1c6f92718 \ - --hash=sha256:3541882266247c7cd3dba78d6ef28dbe704774df60c9e4231edaa4493522e614 \ - --hash=sha256:36df958b15639e40472adaa4f0c2c7828fe680f894a6b48c4ce229f59a6a798b \ - --hash=sha256:38d394814b39be1c36ac709006d39d50d72a884f9551acd9c8cc1ffae3fc8c4e \ - --hash=sha256:4159fc1ec9ede8ab93382e0d6ba9b1b3d23c72da39a834db7a116986605c7ab4 \ - --hash=sha256:445c0851a1cbc1f2ec3b40bc22f9c4a235edb3c9a0906122a9df6ea8d51f886c \ - --hash=sha256:47defc0218682281a52fb1f6346ebb8b68b17538163a89ea24dfe4da37a8a9a3 \ - --hash=sha256:4cc5c8cd205a9810d16a5cd428cd81bac554ad1477cb87f4ad722b10992e794d \ - --hash=sha256:4ccf55f28066b4f08666764a957c2b7c241c7547b0921d69c7ceab5f74fe1a45 \ - --hash=sha256:4fb3fe591956d8841882c463f934c9f7485cfd5f763a08c0d467b513dc18ef89 \ - --hash=sha256:526f8397fc124674b8f39748680a0ff673bd6a715fecb4866716d36e380f015f \ - --hash=sha256:578bfcb16f4b8675ef71b960c00f174b0426e0eeb796bab6737389d8288eb827 \ - --hash=sha256:5b51969503709415a35754954c2763f536a70b8bf7360322b2edb0c0a44391f6 \ - --hash=sha256:5e58ec0375803526d395f6f7e730ecc45d06e15f68f7b9cdbf644a2918324e51 \ - --hash=sha256:62db44727d0befea68e8ad2881bb87a9cfb6b87d45dd78609009627167f37b69 \ - --hash=sha256:67090b17a0a5be5704fd109f231ee73cefb1b3802d41288d6378b5df46ae89ba \ - --hash=sha256:6cd14e61f0da2a2cfb9fe05bfced2a1ed7063ce46a7a8cd473be4973de9a7f91 \ - --hash=sha256:70740c2bc9ab1c99f7cdcb104f27d16c63860c56d51c5bf0ef82fc1d892a2131 \ - --hash=sha256:73009ea04205966d47e16d98686ac5c438af23a1bb30b48a2c5da3423ec9ce37 \ - --hash=sha256:791458a1f7d1b4ab3bd9e93e0dcd1d59ef7ee9aa051dcd1ea030e62e49b923fd \ - --hash=sha256:7f9511e48bde6b995825e8d35e434fc96296cf07a25f4aae24ff9162be7eaa46 \ - --hash=sha256:81c3d597591b0940e04949e4e4f79359b2d2e542a686ba0da5e25de33fec13e0 \ - --hash=sha256:8230a39bae6c2e8a09e4da6bace5064693b00590a4a213e38f9a9366da10e7dd \ - --hash=sha256:8b92a9f3ab904397a33b193000dc4de7318ea175c4c460a1e154c415f9008e3d \ - --hash=sha256:94cbe5535ef150546b8321aebea22862a3284da51e7b55f6f95b7d73e96d90ee \ - --hash=sha256:960ce1b790952916e682093788696ef7e33ac6a97482f9b983abdc293091b531 \ - --hash=sha256:99341ca1f1db9e7f47914cb2461305665a662383765ced6f843712564766956d \ - --hash=sha256:9aac6881454a750554ed4b280a839dcf9e2133a9d12ab4d417d673fb102289b7 \ - --hash=sha256:9d359b0a962e052b713647ac1f13eabf2263167b149ed1e27d5c579f5c8c7d2c \ - --hash=sha256:9dbab2a7e9c073bc9538824a01f5ed689194db7f55f2b8102766873e906a6c1a \ - --hash=sha256:a27b029caa3b555a4f3da54bc1e718eb55fcf1a11fda8bf0132147b476cf4c08 \ - --hash=sha256:a8b817d4ed68fd568ec5e45dd75ddf30cc72a47a6b41b74d5bb211374c296f5e \ - --hash=sha256:ad7d66422b9cc51125509229693d27e18c08f2dea3ac9de408d821932b1b3759 \ - --hash=sha256:b46e79a9f4db53897d17bc64a39d1c7c2be3e3d4f8dba6d6730a2b13ddf0f986 \ - --hash=sha256:baa96a3418e27d723064854143b2f414a422c84cc87285a71558722049bebc5a \ - --hash=sha256:beeca903e4270b4afcd114f371a9602240dc143f9e944edfea00f8d4ad56c40d \ - --hash=sha256:c2a1168e5aa7c72499fb03c850e0f03f624fa4a5c8d2e215c518d0a73872eb64 \ - --hash=sha256:c5790cc603456b6dcf8a9a4765f666895a6afddc88b3d3ba7b53dea2b6e23116 \ - --hash=sha256:cb4a08f0aaaa869f189ffea0e17b86ad0237b51116d494da15ef7991ee6ad2d7 \ - --hash=sha256:cd5771e8ea325f85cbb361ddbdeb9ae424a68e5dfb6eea786afdcd22e68a7d5d \ - --hash=sha256:ce8e51774eb03844588d3c279adb94efcd0edeccd2f97516623292445bcc01f9 \ - --hash=sha256:d09daf5c6ce7fc6ed444c9339bbde5ea84e2534d1ca1cd37b60f365c77f00dea \ - --hash=sha256:d0e798b072cf2aab9daceb43d97c9c527a0c7593e67a7846ad4cc6051de1e303 \ - --hash=sha256:d325d61cac602976a5d47b19eaa7d04e3daf4efce2164c630219885087234102 \ - --hash=sha256:d408172519049e36fb6d29672f060dc8461fc7174eba9883c7026041ef9bfb38 \ - --hash=sha256:d52442e7c951e4c9ee591d6047706e66923d248d83958bbf99b8b19515fffaef \ - --hash=sha256:dc4cfef5d899f5f1a15f3d2ac49f71107a01a5a2745b4dd53fa0cede1419385a \ - --hash=sha256:df7b4cee3ff31b3335aba602f8d70dbc641e5b7164b1e9565570c9d3c536a438 \ - --hash=sha256:e068dfeadbce63072b2d8096486713d04db4946aad0a0f849bd4fc300799d0d3 \ - --hash=sha256:e07c24018986fb00d6e7eafca8fcd6e05095649e17fcf0e33a592caaa62a78b9 \ - --hash=sha256:e0bce9f7c30e7e3a9e683f670314c0144e8d34be6b7019e40604763bd278d84f \ - --hash=sha256:e1925f78a543b94c3d46274c66a366fee8a263747060220ed0188e5f3eeea1c0 \ - --hash=sha256:e322c94596054352f5a02771eec71563c018b15699b961aba14d6dd943367022 \ - --hash=sha256:e4a095e18847c12ec20e55326ab8782d9c2d599400a3a2f174fab4796875d0e2 \ - --hash=sha256:e5a811aab1b4aea0b4be669363c19847a8c547510f0e18fb632956369fdbdf67 \ - --hash=sha256:eddf604a3de2ace3d9a4e4d491be7562a1ac095a0a1c95a9ec5781ef0273ef11 \ - --hash=sha256:ee9b1cae9a6c5d023e5a150f6f6b9dbb3c3bbc7887d6ee07d4c0ecb49a473734 \ - --hash=sha256:f1650ea41c408755da5eed52ac6ccbc8938ccc3e698d81e6f6a1be02ff2a0945 \ - --hash=sha256:f2c0957b3e8c66c10d27272709a5299ab3670a0f187c9428f3b90d267119aedb \ - --hash=sha256:f76109387e1ec8d8e2137c94c437b89fe002f29e0881aae8ae45529bdff92000 \ - --hash=sha256:f8a728511c977df6f3d8af388fcb157e49f11db4a6637dd60131b8b6e40b0253 \ - --hash=sha256:fb6c3dc3d65014d2c782f5acf0b3ba14e639c6c33d3ed8932ead76b9080b3544 +multidict==6.0.4 \ + --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ + --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ + --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ + --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ + --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ + --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ + --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ + --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ + --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ + --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ + --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ + --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ + --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ + --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ + --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ + --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ + --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ + --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ + --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ + --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ + --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ + --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ + --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ + --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ + --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ + --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ + --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ + --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ + --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ + --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ + --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ + --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ + --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ + --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ + --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ + --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ + --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ + --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ + --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ + --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ + --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ + --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ + --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ + --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ + --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ + --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ + --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ + --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ + --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ + --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ + --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ + --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ + --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ + --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ + --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ + --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ + --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ + --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ + --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ + --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ + --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ + --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ + --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ + --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ + --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ + --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ + --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ + --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ + --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ + --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ + --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ + --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ + --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ + --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba # via yarl -mypy==0.991 \ - --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ - --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ - --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ - --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ - --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ - --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ - --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ - --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ - --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ - --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ - --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ - --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ - --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ - --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ - --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ - --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ - --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ - --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ - --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ - --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ - --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ - --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ - --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ - --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ - --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ - --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ - --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ - --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ - --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ - --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef +mypy==1.4.0 \ + --hash=sha256:0cf0ca95e4b8adeaf07815a78b4096b65adf64ea7871b39a2116c19497fcd0dd \ + --hash=sha256:0f98973e39e4a98709546a9afd82e1ffcc50c6ec9ce6f7870f33ebbf0bd4f26d \ + --hash=sha256:19d42b08c7532d736a7e0fb29525855e355fa51fd6aef4f9bbc80749ff64b1a2 \ + --hash=sha256:210fe0f39ec5be45dd9d0de253cb79245f0a6f27631d62e0c9c7988be7152965 \ + --hash=sha256:3b1b5c875fcf3e7217a3de7f708166f641ca154b589664c44a6fd6d9f17d9e7e \ + --hash=sha256:3f2b353eebef669529d9bd5ae3566905a685ae98b3af3aad7476d0d519714758 \ + --hash=sha256:50f65f0e9985f1e50040e603baebab83efed9eb37e15a22a4246fa7cd660f981 \ + --hash=sha256:53c2a1fed81e05ded10a4557fe12bae05b9ecf9153f162c662a71d924d504135 \ + --hash=sha256:5a0ee54c2cb0f957f8a6f41794d68f1a7e32b9968675ade5846f538504856d42 \ + --hash=sha256:62bf18d97c6b089f77f0067b4e321db089d8520cdeefc6ae3ec0f873621c22e5 \ + --hash=sha256:653863c75f0dbb687d92eb0d4bd9fe7047d096987ecac93bb7b1bc336de48ebd \ + --hash=sha256:67242d5b28ed0fa88edd8f880aed24da481929467fdbca6487167cb5e3fd31ff \ + --hash=sha256:6ba9a69172abaa73910643744d3848877d6aac4a20c41742027dcfd8d78f05d9 \ + --hash=sha256:6c34d43e3d54ad05024576aef28081d9d0580f6fa7f131255f54020eb12f5352 \ + --hash=sha256:7461469e163f87a087a5e7aa224102a30f037c11a096a0ceeb721cb0dce274c8 \ + --hash=sha256:94a81b9354545123feb1a99b960faeff9e1fa204fce47e0042335b473d71530d \ + --hash=sha256:a0b2e0da7ff9dd8d2066d093d35a169305fc4e38db378281fce096768a3dbdbf \ + --hash=sha256:a34eed094c16cad0f6b0d889811592c7a9b7acf10d10a7356349e325d8704b4f \ + --hash=sha256:a3af348e0925a59213244f28c7c0c3a2c2088b4ba2fe9d6c8d4fbb0aba0b7d05 \ + --hash=sha256:b4c734d947e761c7ceb1f09a98359dd5666460acbc39f7d0a6b6beec373c5840 \ + --hash=sha256:bba57b4d2328740749f676807fcf3036e9de723530781405cc5a5e41fc6e20de \ + --hash=sha256:ca33ab70a4aaa75bb01086a0b04f0ba8441e51e06fc57e28585176b08cad533b \ + --hash=sha256:de1e7e68148a213036276d1f5303b3836ad9a774188961eb2684eddff593b042 \ + --hash=sha256:f051ca656be0c179c735a4c3193f307d34c92fdc4908d44fd4516fbe8b10567d \ + --hash=sha256:f5984a8d13d35624e3b235a793c814433d810acba9eeefe665cdfed3d08bc3af \ + --hash=sha256:f7a5971490fd4a5a436e143105a1f78fa8b3fe95b30fff2a77542b4f3227a01f # via -r requirements/dev-requirements.in -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via # black # mypy -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 - # via build -pathspec==0.10.3 \ - --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ - --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f + # via + # black + # build +pathspec==0.11.1 \ + --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ + --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 # via black -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 - # via build -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 +pip==23.1.2 \ + --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ + --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 # via pip-tools -pip-tools==6.12.0 \ - --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ - --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e +pip-tools==6.13.0 \ + --hash=sha256:50943f151d87e752abddec8158622c34ad7f292e193836e90e30d87da60b19d9 \ + --hash=sha256:61d46bd2eb8016ed4a924e196e6e5b0a268cd3babd79e593048720db23522bb1 # via -r requirements/dev-requirements.in -platformdirs==2.6.0 \ - --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ - --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e +platformdirs==3.7.0 \ + --hash=sha256:87fbf6473e87c078d536980ba970a472422e94f17b752cfad17024c18876d481 \ + --hash=sha256:cfd065ba43133ff103ab3bd10aecb095c2a0035fcd1f07217c9376900d94ba07 # via black pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ @@ -257,6 +274,10 @@ pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build pyyaml==5.4.1 \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ @@ -290,17 +311,17 @@ pyyaml==5.4.1 \ # via # -r requirements/requirements.in # vcrpy -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via -r requirements/requirements.in -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 +setuptools==68.0.0 \ + --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ + --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 # via pip-tools -six==1.11.0 \ - --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via vcrpy tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -309,21 +330,21 @@ tomli==2.0.1 \ # black # build # mypy -types-pyyaml==6.0.12.2 \ - --hash=sha256:1e94e80aafee07a7e798addb2a320e32956a373f376655128ae20637adb2655b \ - --hash=sha256:6840819871c92deebe6a2067fb800c11b8a063632eb4e3e755914e7ab3604e83 +types-pyyaml==6.0.12.10 \ + --hash=sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f \ + --hash=sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97 # via -r requirements/dev-requirements.in -types-requests==2.28.11.5 \ - --hash=sha256:091d4a5a33c1b4f20d8b1b952aa8fa27a6e767c44c3cf65e56580df0b05fd8a9 \ - --hash=sha256:a7df37cc6fb6187a84097da951f8e21d335448aa2501a6b0a39cbd1d7ca9ee2a +types-requests==2.31.0.1 \ + --hash=sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac \ + --hash=sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3 # via -r requirements/dev-requirements.in -types-urllib3==1.26.25.4 \ - --hash=sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49 \ - --hash=sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee +types-urllib3==1.26.25.13 \ + --hash=sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5 \ + --hash=sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c # via types-requests -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.6.3 \ + --hash=sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26 \ + --hash=sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5 # via # black # mypy @@ -333,153 +354,165 @@ urllib3==1.26.6 \ # via # -r requirements/requirements.in # requests -vcrpy==4.2.1 \ - --hash=sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013 \ - --hash=sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09 + # vcrpy +vcrpy==4.3.1 \ + --hash=sha256:24e2d450bf1c2f9f9b4246ee91beb7d58f862a9f2f030514b14783b83c5146ec \ + --hash=sha256:35398f1b373f32340f39d735ea45f40d679ace316f3dddf8cbcbc2f120e6d1d0 # via -r requirements/dev-requirements.in -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 # via pip-tools -wrapt==1.14.1 \ - --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ - --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ - --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ - --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ - --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ - --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ - --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ - --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ - --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ - --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ - --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ - --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ - --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ - --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ - --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ - --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ - --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ - --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ - --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ - --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ - --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ - --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ - --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ - --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ - --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ - --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ - --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ - --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ - --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ - --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ - --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ - --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ - --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ - --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ - --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ - --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ - --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ - --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ - --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ - --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ - --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ - --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ - --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ - --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ - --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ - --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ - --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ - --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ - --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ - --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ - --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ - --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ - --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ - --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ - --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ - --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ - --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ - --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ - --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ - --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ - --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ - --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ - --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ - --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af +wrapt==1.15.0 \ + --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ + --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ + --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ + --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ + --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ + --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ + --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ + --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ + --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ + --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ + --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ + --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ + --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ + --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ + --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ + --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ + --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ + --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ + --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ + --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ + --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ + --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ + --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ + --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ + --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ + --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ + --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ + --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ + --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ + --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ + --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ + --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ + --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ + --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ + --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ + --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ + --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ + --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ + --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ + --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ + --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ + --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ + --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ + --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ + --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ + --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ + --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ + --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ + --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ + --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ + --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ + --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ + --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ + --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ + --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ + --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ + --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ + --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ + --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ + --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ + --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ + --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ + --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ + --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ + --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ + --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ + --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ + --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ + --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ + --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ + --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ + --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ + --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ + --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ + --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 # via vcrpy -yarl==1.8.2 \ - --hash=sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87 \ - --hash=sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89 \ - --hash=sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a \ - --hash=sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08 \ - --hash=sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996 \ - --hash=sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077 \ - --hash=sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901 \ - --hash=sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e \ - --hash=sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee \ - --hash=sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574 \ - --hash=sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165 \ - --hash=sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634 \ - --hash=sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229 \ - --hash=sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b \ - --hash=sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f \ - --hash=sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7 \ - --hash=sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf \ - --hash=sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89 \ - --hash=sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0 \ - --hash=sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1 \ - --hash=sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe \ - --hash=sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf \ - --hash=sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76 \ - --hash=sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951 \ - --hash=sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863 \ - --hash=sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06 \ - --hash=sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562 \ - --hash=sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6 \ - --hash=sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c \ - --hash=sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e \ - --hash=sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1 \ - --hash=sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3 \ - --hash=sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3 \ - --hash=sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778 \ - --hash=sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8 \ - --hash=sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2 \ - --hash=sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b \ - --hash=sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d \ - --hash=sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f \ - --hash=sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c \ - --hash=sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581 \ - --hash=sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918 \ - --hash=sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c \ - --hash=sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e \ - --hash=sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220 \ - --hash=sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37 \ - --hash=sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739 \ - --hash=sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77 \ - --hash=sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6 \ - --hash=sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42 \ - --hash=sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946 \ - --hash=sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5 \ - --hash=sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d \ - --hash=sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146 \ - --hash=sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a \ - --hash=sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83 \ - --hash=sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef \ - --hash=sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80 \ - --hash=sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588 \ - --hash=sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5 \ - --hash=sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2 \ - --hash=sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef \ - --hash=sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826 \ - --hash=sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05 \ - --hash=sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516 \ - --hash=sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0 \ - --hash=sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4 \ - --hash=sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2 \ - --hash=sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0 \ - --hash=sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd \ - --hash=sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8 \ - --hash=sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b \ - --hash=sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1 \ - --hash=sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c +yarl==1.9.2 \ + --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ + --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ + --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ + --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ + --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ + --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ + --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ + --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ + --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ + --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ + --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ + --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ + --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ + --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ + --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ + --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ + --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ + --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ + --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ + --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ + --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ + --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ + --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ + --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ + --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ + --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ + --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ + --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ + --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ + --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ + --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ + --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ + --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ + --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ + --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ + --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ + --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ + --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ + --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ + --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ + --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ + --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ + --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ + --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ + --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ + --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ + --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ + --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ + --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ + --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ + --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ + --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ + --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ + --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ + --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ + --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ + --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ + --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ + --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ + --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ + --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ + --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ + --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ + --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ + --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ + --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ + --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ + --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ + --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ + --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ + --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ + --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ + --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ + --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 # via vcrpy From 6336153ef9a7b201e18a10be9657ea7a1a184865 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 26 Jun 2023 11:54:37 -0700 Subject: [PATCH 566/751] Satisfy black --- securedrop_proxy/proxy.py | 6 ------ tests/test_main.py | 1 - 2 files changed, 7 deletions(-) diff --git a/securedrop_proxy/proxy.py b/securedrop_proxy/proxy.py index 11af7cdd9..b87d43c19 100644 --- a/securedrop_proxy/proxy.py +++ b/securedrop_proxy/proxy.py @@ -74,7 +74,6 @@ def err_on_done(self): sys.exit(1) def read_conf(self, conf_path: str) -> None: - if not os.path.isfile(conf_path): self.simple_error(500, "Configuration file does not exist at {}".format(conf_path)) self.err_on_done() @@ -180,7 +179,6 @@ def normalize_path(self, parsed: ParseResult) -> ParseResult: return parsed._replace(path=path) def prep_request(self) -> None: - scheme = self.conf.scheme host = self.conf.host port = self.conf.port @@ -212,7 +210,6 @@ def prep_request(self) -> None: self._prepared_request = prep def handle_json_response(self) -> None: - res = Response(self._presp.status_code) res.headers = dict(self._presp.headers) @@ -221,7 +218,6 @@ def handle_json_response(self) -> None: self.res = res def handle_non_json_response(self) -> None: - res = Response(self._presp.status_code) # Create a NamedTemporaryFile, we don't want @@ -255,9 +251,7 @@ def handle_response(self) -> None: self.res.headers = dict(self.res.headers) def proxy(self) -> None: - try: - self.prep_request() # To confirm that we have a prepared request before the proxy call assert self._prepared_request diff --git a/tests/test_main.py b/tests/test_main.py index 94a39a2cc..66289660c 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -102,7 +102,6 @@ def test_non_json_response(self): "path_query": "" }""" def on_save(self, fh, res): - subprocess.run(["cp", fh.name, "/tmp/{}".format(self.fn)]) res.headers["X-Origin-Content-Type"] = res.headers["Content-Type"] From 66f19176cc669d465c04187dd85946e32774c85c Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 10 Jul 2023 17:51:56 -0700 Subject: [PATCH 567/751] Add comments to Makefile targets. Remove requirements.in from update-dev-only-dependencies Makefile target, since this requirement is now specified in the .in file directly. --- Makefile | 6 ++++-- requirements/dev-bookworm-requirements.in | 3 +++ requirements/dev-bullseye-requirements.in | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index aa2f18eed..6e9cf4965 100644 --- a/Makefile +++ b/Makefile @@ -19,12 +19,14 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities || exit 1; \ done +# Helper, not to be used directly .PHONY: sync-requirements sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies if test -f "requirements/dev-bullseye-requirements.txt"; then rm -r requirements/dev-bullseye-requirements.txt; fi if test -f "requirements/dev-bookworm-requirements.txt"; then rm -r requirements/dev-bookworm-requirements.txt; fi $(MAKE) dev-requirements +# Helper, not to be used directly .PHONY: dev-requirements dev-requirements: ## Update dev-*requirements.txt files if pinned versions do not comply with the dependency specifications in dev-*requirements.in pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in @@ -44,10 +46,10 @@ update-dependency: ## Add or upgrade a package to the latest version that compl update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in $(MAKE) sync-requirements @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bullseye-requirements.txt requirements/requirements.in requirements/dev-bullseye-requirements.in; \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in; \ done < 'requirements/dev-bullseye-requirements.in' @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bookworm-requirements.txt requirements/requirements.in requirements/dev-bookworm-requirements.in; \ + pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in; \ done < 'requirements/dev-bookworm-requirements.in' .PHONY: check diff --git a/requirements/dev-bookworm-requirements.in b/requirements/dev-bookworm-requirements.in index 1dd6e9bb7..8bad67377 100644 --- a/requirements/dev-bookworm-requirements.in +++ b/requirements/dev-bookworm-requirements.in @@ -1,3 +1,6 @@ +# Include prod requirements +-r requirements.in + black flake8 pip-tools diff --git a/requirements/dev-bullseye-requirements.in b/requirements/dev-bullseye-requirements.in index 1dd6e9bb7..b75bf7f7c 100644 --- a/requirements/dev-bullseye-requirements.in +++ b/requirements/dev-bullseye-requirements.in @@ -1,3 +1,6 @@ +# include prod requirements +-r requirements.in + black flake8 pip-tools From 447cf771374c678ebd2a97bc6a1c59f90a77b91a Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 10 Jul 2023 19:45:14 -0700 Subject: [PATCH 568/751] Update dev-only dependencies --- requirements/dev-bookworm-requirements.txt | 788 +++++++++++++-------- requirements/dev-bullseye-requirements.txt | 765 ++++++++++++-------- 2 files changed, 981 insertions(+), 572 deletions(-) diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt index d89afb8c8..380bb8c5c 100644 --- a/requirements/dev-bookworm-requirements.txt +++ b/requirements/dev-bookworm-requirements.txt @@ -2,29 +2,39 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in +# pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in # -attrs==21.4.0 \ - --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ - --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd +attrs==23.1.0 \ + --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ + --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 # via # glom # jsonschema - # pytest + # referencing # semgrep -black==22.12.0 \ - --hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \ - --hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \ - --hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \ - --hash=sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f \ - --hash=sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf \ - --hash=sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148 \ - --hash=sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4 \ - --hash=sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d \ - --hash=sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc \ - --hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \ - --hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \ - --hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f +black==23.7.0 \ + --hash=sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3 \ + --hash=sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb \ + --hash=sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087 \ + --hash=sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320 \ + --hash=sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6 \ + --hash=sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3 \ + --hash=sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc \ + --hash=sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f \ + --hash=sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587 \ + --hash=sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91 \ + --hash=sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a \ + --hash=sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad \ + --hash=sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926 \ + --hash=sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9 \ + --hash=sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be \ + --hash=sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd \ + --hash=sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96 \ + --hash=sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491 \ + --hash=sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2 \ + --hash=sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a \ + --hash=sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f \ + --hash=sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995 # via -r requirements/dev-bookworm-requirements.in boltons==21.0.0 \ --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ @@ -37,85 +47,168 @@ bracex==2.3.post1 \ --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 # via wcmatch -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.5.7 \ + --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ + --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.2.0 \ + --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ + --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ + --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ + --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ + --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ + --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ + --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ + --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ + --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ + --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ + --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ + --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ + --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ + --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ + --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ + --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ + --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ + --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ + --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ + --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ + --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ + --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ + --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ + --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ + --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ + --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ + --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ + --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ + --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ + --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ + --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ + --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ + --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ + --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ + --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ + --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ + --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ + --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ + --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ + --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ + --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ + --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ + --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ + --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ + --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ + --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ + --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ + --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ + --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ + --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ + --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ + --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ + --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ + --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ + --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ + --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ + --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ + --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ + --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ + --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ + --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ + --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ + --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ + --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ + --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ + --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ + --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ + --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ + --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ + --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ + --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ + --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ + --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ + --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ + --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa # via requests -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +click==8.1.4 \ + --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ + --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 # via # black # click-option-group # pip-tools # semgrep -click-option-group==0.5.5 \ - --hash=sha256:0f8ca79bc9b1d6fcaafdbe194b17ba1a2dde44ddf19087235c3efed2ad288143 \ - --hash=sha256:78ee474f07a0ca0ef6c0317bb3ebe79387aafb0c4a1e03b1d8b2b0be1e42fc78 +click-option-group==0.5.6 \ + --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ + --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 # via semgrep colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via semgrep -coverage[toml]==6.5.0 \ - --hash=sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79 \ - --hash=sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a \ - --hash=sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f \ - --hash=sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a \ - --hash=sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa \ - --hash=sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398 \ - --hash=sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba \ - --hash=sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d \ - --hash=sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf \ - --hash=sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b \ - --hash=sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518 \ - --hash=sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d \ - --hash=sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795 \ - --hash=sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2 \ - --hash=sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e \ - --hash=sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32 \ - --hash=sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745 \ - --hash=sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b \ - --hash=sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e \ - --hash=sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d \ - --hash=sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f \ - --hash=sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660 \ - --hash=sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62 \ - --hash=sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6 \ - --hash=sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04 \ - --hash=sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c \ - --hash=sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5 \ - --hash=sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef \ - --hash=sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc \ - --hash=sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae \ - --hash=sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578 \ - --hash=sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466 \ - --hash=sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4 \ - --hash=sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91 \ - --hash=sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0 \ - --hash=sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4 \ - --hash=sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b \ - --hash=sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe \ - --hash=sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b \ - --hash=sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75 \ - --hash=sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b \ - --hash=sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c \ - --hash=sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72 \ - --hash=sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b \ - --hash=sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f \ - --hash=sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e \ - --hash=sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53 \ - --hash=sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3 \ - --hash=sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84 \ - --hash=sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987 +coverage[toml]==7.2.7 \ + --hash=sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f \ + --hash=sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2 \ + --hash=sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a \ + --hash=sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a \ + --hash=sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01 \ + --hash=sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6 \ + --hash=sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7 \ + --hash=sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f \ + --hash=sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02 \ + --hash=sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c \ + --hash=sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063 \ + --hash=sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a \ + --hash=sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5 \ + --hash=sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959 \ + --hash=sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97 \ + --hash=sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6 \ + --hash=sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f \ + --hash=sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9 \ + --hash=sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5 \ + --hash=sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f \ + --hash=sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562 \ + --hash=sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe \ + --hash=sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9 \ + --hash=sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f \ + --hash=sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb \ + --hash=sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb \ + --hash=sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1 \ + --hash=sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb \ + --hash=sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250 \ + --hash=sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e \ + --hash=sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511 \ + --hash=sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5 \ + --hash=sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59 \ + --hash=sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2 \ + --hash=sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d \ + --hash=sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3 \ + --hash=sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4 \ + --hash=sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de \ + --hash=sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9 \ + --hash=sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833 \ + --hash=sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0 \ + --hash=sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9 \ + --hash=sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d \ + --hash=sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050 \ + --hash=sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d \ + --hash=sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6 \ + --hash=sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353 \ + --hash=sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb \ + --hash=sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e \ + --hash=sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8 \ + --hash=sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495 \ + --hash=sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2 \ + --hash=sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd \ + --hash=sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27 \ + --hash=sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1 \ + --hash=sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818 \ + --hash=sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4 \ + --hash=sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e \ + --hash=sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850 \ + --hash=sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3 # via pytest-cov defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ @@ -137,85 +230,90 @@ idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -iniconfig==1.1.1 \ - --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ - --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 +iniconfig==2.0.0 \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # via pytest -jsonschema==4.17.3 \ - --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ - --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 +jsonschema==4.18.0 \ + --hash=sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4 \ + --hash=sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60 # via semgrep +jsonschema-specifications==2023.6.1 \ + --hash=sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7 \ + --hash=sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28 + # via jsonschema +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb + # via rich mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 -mypy==1.0.0 \ - --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ - --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ - --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ - --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ - --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ - --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ - --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ - --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ - --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ - --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ - --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ - --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ - --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ - --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ - --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ - --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ - --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ - --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ - --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ - --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ - --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ - --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ - --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ - --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ - --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ - --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +mypy==1.4.1 \ + --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ + --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ + --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ + --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ + --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ + --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ + --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ + --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ + --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ + --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ + --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ + --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ + --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ + --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ + --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ + --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ + --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ + --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ + --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ + --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ + --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ + --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ + --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ + --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ + --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ + --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b # via -r requirements/dev-bookworm-requirements.in -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via # black # mypy -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f # via + # black # build # pytest # semgrep -pathspec==0.10.3 \ - --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ - --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 +pathspec==0.11.1 \ + --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ + --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 # via black -peewee==3.15.4 \ - --hash=sha256:2581520c8dfbacd9d580c2719ae259f0637a9e46eda47dfc0ce01864c6366205 +peewee==3.16.2 \ + --hash=sha256:10769981198c7311f84a0ca8db892fa213303a8eb1305deb795a71e7bd606a91 # via semgrep -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 - # via build -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 - # via pip-tools -pip-tools==6.12.0 \ - --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ - --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e +pip-tools==6.14.0 \ + --hash=sha256:06366be0e08d86b416407333e998b4d305d5bd925151b08942ed149380ba3e47 \ + --hash=sha256:c5ad042cd27c0b343b10db1db7f77a7d087beafbec59ae6df1bba4d3368dfe8c # via -r requirements/dev-bookworm-requirements.in -platformdirs==2.6.0 \ - --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ - --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e +platformdirs==3.8.1 \ + --hash=sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c \ + --hash=sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528 # via black -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.2.0 \ + --hash=sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849 \ + --hash=sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3 # via pytest pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ @@ -225,163 +323,277 @@ pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 -pyparsing==3.0.9 \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc - # via packaging -pyrsistent==0.19.2 \ - --hash=sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed \ - --hash=sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb \ - --hash=sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a \ - --hash=sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95 \ - --hash=sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712 \ - --hash=sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73 \ - --hash=sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41 \ - --hash=sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b \ - --hash=sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78 \ - --hash=sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab \ - --hash=sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308 \ - --hash=sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425 \ - --hash=sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2 \ - --hash=sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e \ - --hash=sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6 \ - --hash=sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2 \ - --hash=sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a \ - --hash=sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291 \ - --hash=sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584 \ - --hash=sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a \ - --hash=sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0 \ - --hash=sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770 - # via jsonschema -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pygments==2.15.1 \ + --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ + --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 + # via rich +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build +pytest==7.4.0 \ + --hash=sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32 \ + --hash=sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a # via # -r requirements/dev-bookworm-requirements.in # pytest-cov # pytest-mock -pytest-cov==4.0.0 \ - --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ - --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 +pytest-cov==4.1.0 \ + --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ + --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a # via -r requirements/dev-bookworm-requirements.in -pytest-mock==3.10.0 \ - --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ - --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f +pytest-mock==3.11.1 \ + --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ + --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f # via -r requirements/dev-bookworm-requirements.in python-lsp-jsonrpc==1.0.0 \ --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd # via semgrep -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +referencing==0.29.1 \ + --hash=sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e \ + --hash=sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 + # via semgrep +rich==13.4.2 \ + --hash=sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec \ + --hash=sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898 # via semgrep -ruamel-yaml==0.17.21 \ - --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ - --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af +rpds-py==0.8.10 \ + --hash=sha256:08166467258fd0240a1256fce272f689f2360227ee41c72aeea103e9e4f63d2b \ + --hash=sha256:083df0fafe199371206111583c686c985dddaf95ab3ee8e7b24f1fda54515d09 \ + --hash=sha256:0da53292edafecba5e1d8c1218f99babf2ed0bf1c791d83c0ab5c29b57223068 \ + --hash=sha256:0eeb2731708207d0fe2619afe6c4dc8cb9798f7de052da891de5f19c0006c315 \ + --hash=sha256:134ec8f14ca7dbc6d9ae34dac632cdd60939fe3734b5d287a69683c037c51acb \ + --hash=sha256:13e643ce8ad502a0263397362fb887594b49cf84bf518d6038c16f235f2bcea4 \ + --hash=sha256:148b0b38d719c0760e31ce9285a9872972bdd7774969a4154f40c980e5beaca7 \ + --hash=sha256:14f1c356712f66653b777ecd8819804781b23dbbac4eade4366b94944c9e78ad \ + --hash=sha256:15a90d0ac11b4499171067ae40a220d1ca3cb685ec0acc356d8f3800e07e4cb8 \ + --hash=sha256:1a2edf8173ac0c7a19da21bc68818be1321998528b5e3f748d6ee90c0ba2a1fd \ + --hash=sha256:1b21575031478609db6dbd1f0465e739fe0e7f424a8e7e87610a6c7f68b4eb16 \ + --hash=sha256:1ee45cd1d84beed6cbebc839fd85c2e70a3a1325c8cfd16b62c96e2ffb565eca \ + --hash=sha256:220bdcad2d2936f674650d304e20ac480a3ce88a40fe56cd084b5780f1d104d9 \ + --hash=sha256:2418cf17d653d24ffb8b75e81f9f60b7ba1b009a23298a433a4720b2a0a17017 \ + --hash=sha256:2614c2732bf45de5c7f9e9e54e18bc78693fa2f635ae58d2895b7965e470378c \ + --hash=sha256:2cd3045e7f6375dda64ed7db1c5136826facb0159ea982f77d9cf6125025bd34 \ + --hash=sha256:2eb4b08c45f8f8d8254cdbfacd3fc5d6b415d64487fb30d7380b0d0569837bf1 \ + --hash=sha256:300eb606e6b94a7a26f11c8cc8ee59e295c6649bd927f91e1dbd37a4c89430b6 \ + --hash=sha256:376b8de737401050bd12810003d207e824380be58810c031f10ec563ff6aef3d \ + --hash=sha256:3793c21494bad1373da517001d0849eea322e9a049a0e4789e50d8d1329df8e7 \ + --hash=sha256:37f7ee4dc86db7af3bac6d2a2cedbecb8e57ce4ed081f6464510e537589f8b1e \ + --hash=sha256:3816a890a6a9e9f1de250afa12ca71c9a7a62f2b715a29af6aaee3aea112c181 \ + --hash=sha256:3c490204e16bca4f835dba8467869fe7295cdeaa096e4c5a7af97f3454a97991 \ + --hash=sha256:3cc5e5b5514796f45f03a568981971b12a3570f3de2e76114f7dc18d4b60a3c4 \ + --hash=sha256:41c89a366eae49ad9e65ed443a8f94aee762931a1e3723749d72aeac80f5ef2f \ + --hash=sha256:4a8ca409f1252e1220bf09c57290b76cae2f14723746215a1e0506472ebd7bdf \ + --hash=sha256:4b519bac7c09444dd85280fd60f28c6dde4389c88dddf4279ba9b630aca3bbbe \ + --hash=sha256:521fc8861a86ae54359edf53a15a05fabc10593cea7b3357574132f8427a5e5a \ + --hash=sha256:574868858a7ff6011192c023a5289158ed20e3f3b94b54f97210a773f2f22921 \ + --hash=sha256:5a665f6f1a87614d1c3039baf44109094926dedf785e346d8b0a728e9cabd27a \ + --hash=sha256:5d1c2bc319428d50b3e0fa6b673ab8cc7fa2755a92898db3a594cbc4eeb6d1f7 \ + --hash=sha256:60e0e86e870350e03b3e25f9b1dd2c6cc72d2b5f24e070249418320a6f9097b7 \ + --hash=sha256:695f642a3a5dbd4ad2ffbbacf784716ecd87f1b7a460843b9ddf965ccaeafff4 \ + --hash=sha256:69d089c026f6a8b9d64a06ff67dc3be196707b699d7f6ca930c25f00cf5e30d8 \ + --hash=sha256:6c6a0225b8501d881b32ebf3f5807a08ad3685b5eb5f0a6bfffd3a6e039b2055 \ + --hash=sha256:70bb9c8004b97b4ef7ae56a2aa56dfaa74734a0987c78e7e85f00004ab9bf2d0 \ + --hash=sha256:73a1e48430f418f0ac3dfd87860e4cc0d33ad6c0f589099a298cb53724db1169 \ + --hash=sha256:7495010b658ec5b52835f21d8c8b1a7e52e194c50f095d4223c0b96c3da704b1 \ + --hash=sha256:7947e6e2c2ad68b1c12ee797d15e5f8d0db36331200b0346871492784083b0c6 \ + --hash=sha256:7b38a9ac96eeb6613e7f312cd0014de64c3f07000e8bf0004ad6ec153bac46f8 \ + --hash=sha256:7d20a8ed227683401cc508e7be58cba90cc97f784ea8b039c8cd01111e6043e0 \ + --hash=sha256:7f29b8c55fd3a2bc48e485e37c4e2df3317f43b5cc6c4b6631c33726f52ffbb3 \ + --hash=sha256:802f42200d8caf7f25bbb2a6464cbd83e69d600151b7e3b49f49a47fa56b0a38 \ + --hash=sha256:805a5f3f05d186c5d50de2e26f765ba7896d0cc1ac5b14ffc36fae36df5d2f10 \ + --hash=sha256:82bb361cae4d0a627006dadd69dc2f36b7ad5dc1367af9d02e296ec565248b5b \ + --hash=sha256:84eb541a44f7a18f07a6bfc48b95240739e93defe1fdfb4f2a295f37837945d7 \ + --hash=sha256:89c92b74e8bf6f53a6f4995fd52f4bd510c12f103ee62c99e22bc9e05d45583c \ + --hash=sha256:8c398fda6df361a30935ab4c4bccb7f7a3daef2964ca237f607c90e9f3fdf66f \ + --hash=sha256:915031002c86a5add7c6fd4beb601b2415e8a1c956590a5f91d825858e92fe6e \ + --hash=sha256:927d784648211447201d4c6f1babddb7971abad922b32257ab74de2f2750fad0 \ + --hash=sha256:92cf5b3ee60eef41f41e1a2cabca466846fb22f37fc580ffbcb934d1bcab225a \ + --hash=sha256:93d06cccae15b3836247319eee7b6f1fdcd6c10dabb4e6d350d27bd0bdca2711 \ + --hash=sha256:93d99f957a300d7a4ced41615c45aeb0343bb8f067c42b770b505de67a132346 \ + --hash=sha256:96b293c0498c70162effb13100624c5863797d99df75f2f647438bd10cbf73e4 \ + --hash=sha256:97cab733d303252f7c2f7052bf021a3469d764fc2b65e6dbef5af3cbf89d4892 \ + --hash=sha256:996cc95830de9bc22b183661d95559ec6b3cd900ad7bc9154c4cbf5be0c9b734 \ + --hash=sha256:9a7d20c1cf8d7b3960c5072c265ec47b3f72a0c608a9a6ee0103189b4f28d531 \ + --hash=sha256:9cd57981d9fab04fc74438d82460f057a2419974d69a96b06a440822d693b3c0 \ + --hash=sha256:a11ab0d97be374efd04f640c04fe5c2d3dabc6dfb998954ea946ee3aec97056d \ + --hash=sha256:a13c8e56c46474cd5958d525ce6a9996727a83d9335684e41f5192c83deb6c58 \ + --hash=sha256:a38b9f526d0d6cbdaa37808c400e3d9f9473ac4ff64d33d9163fd05d243dbd9b \ + --hash=sha256:a7c6304b894546b5a6bdc0fe15761fa53fe87d28527a7142dae8de3c663853e1 \ + --hash=sha256:ad3bfb44c8840fb4be719dc58e229f435e227fbfbe133dc33f34981ff622a8f8 \ + --hash=sha256:ae40f4a70a1f40939d66ecbaf8e7edc144fded190c4a45898a8cfe19d8fc85ea \ + --hash=sha256:b01b39ad5411563031ea3977bbbc7324d82b088e802339e6296f082f78f6115c \ + --hash=sha256:b2e3c4f2a8e3da47f850d7ea0d7d56720f0f091d66add889056098c4b2fd576c \ + --hash=sha256:b41941583adce4242af003d2a8337b066ba6148ca435f295f31ac6d9e4ea2722 \ + --hash=sha256:b4627520a02fccbd324b33c7a83e5d7906ec746e1083a9ac93c41ac7d15548c7 \ + --hash=sha256:ba9f1d1ebe4b63801977cec7401f2d41e888128ae40b5441270d43140efcad52 \ + --hash=sha256:c03a435d26c3999c2a8642cecad5d1c4d10c961817536af52035f6f4ee2f5dd0 \ + --hash=sha256:c200b30dd573afa83847bed7e3041aa36a8145221bf0cfdfaa62d974d720805c \ + --hash=sha256:c493365d3fad241d52f096e4995475a60a80f4eba4d3ff89b713bc65c2ca9615 \ + --hash=sha256:c4d42e83ddbf3445e6514f0aff96dca511421ed0392d9977d3990d9f1ba6753c \ + --hash=sha256:c60528671d9d467009a6ec284582179f6b88651e83367d0ab54cb739021cd7de \ + --hash=sha256:c72ebc22e70e04126158c46ba56b85372bc4d54d00d296be060b0db1671638a4 \ + --hash=sha256:ccbbd276642788c4376fbe8d4e6c50f0fb4972ce09ecb051509062915891cbf0 \ + --hash=sha256:ceaac0c603bf5ac2f505a78b2dcab78d3e6b706be6596c8364b64cc613d208d2 \ + --hash=sha256:d19db6ba816e7f59fc806c690918da80a7d186f00247048cd833acdab9b4847b \ + --hash=sha256:d5c191713e98e7c28800233f039a32a42c1a4f9a001a8a0f2448b07391881036 \ + --hash=sha256:d64f9f88d5203274a002b54442cafc9c7a1abff2a238f3e767b70aadf919b451 \ + --hash=sha256:d77dff3a5aa5eedcc3da0ebd10ff8e4969bc9541aa3333a8d41715b429e99f47 \ + --hash=sha256:dd4f16e57c12c0ae17606c53d1b57d8d1c8792efe3f065a37cb3341340599d49 \ + --hash=sha256:e39d7ab0c18ac99955b36cd19f43926450baba21e3250f053e0704d6ffd76873 \ + --hash=sha256:e3d0cd3dff0e7638a7b5390f3a53057c4e347f4ef122ee84ed93fc2fb7ea4aa2 \ + --hash=sha256:e7dfb1cbb895810fa2b892b68153c17716c6abaa22c7dc2b2f6dcf3364932a1c \ + --hash=sha256:e8e24b210a4deb5a7744971f8f77393005bae7f873568e37dfd9effe808be7f7 \ + --hash=sha256:e9c0683cb35a9b5881b41bc01d5568ffc667910d9dbc632a1fba4e7d59e98773 \ + --hash=sha256:ed41f3f49507936a6fe7003985ea2574daccfef999775525d79eb67344e23767 \ + --hash=sha256:ee744fca8d1ea822480a2a4e7c5f2e1950745477143668f0b523769426060f29 \ + --hash=sha256:f3f1e860be21f3e83011116a65e7310486300e08d9a3028e73e8d13bb6c77292 \ + --hash=sha256:f43ab4cb04bde6109eb2555528a64dfd8a265cc6a9920a67dcbde13ef53a46c8 \ + --hash=sha256:f53f55a8852f0e49b0fc76f2412045d6ad9d5772251dea8f55ea45021616e7d5 \ + --hash=sha256:f59996d0550894affaad8743e97b9b9c98f638b221fac12909210ec3d9294786 \ + --hash=sha256:f96f3f98fbff7af29e9edf9a6584f3c1382e7788783d07ba3721790625caa43e \ + --hash=sha256:f9adb5664b78fcfcd830000416c8cc69853ef43cb084d645b3f1f0296edd9bae \ + --hash=sha256:fa326b3505d5784436d9433b7980171ab2375535d93dd63fbcd20af2b5ca1bb6 \ + --hash=sha256:fafc0049add8043ad07ab5382ee80d80ed7e3699847f26c9a5cf4d3714d96a84 + # via + # jsonschema + # referencing +ruamel-yaml==0.17.32 \ + --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ + --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 # via semgrep -semgrep==1.2.0 \ - --hash=sha256:31f5f764ff114e2e56b3a93b09829f738cb9e287af7479e2c4714c77b10dc5c0 \ - --hash=sha256:cba38f882c9fedd00462247474a991715d5c8faf169e38cfbf299c7c89ccad55 \ - --hash=sha256:d7b9ccffab1cbecb7870e6792dc274f6a63133910150f33b6ba07d28f5cf00d5 \ - --hash=sha256:e04dbc4a95ddfc9b07550b09b88f61c5c7d81817fac1c86683d8c2534514ac6c +ruamel-yaml-clib==0.2.7 \ + --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ + --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ + --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ + --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ + --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ + --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ + --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ + --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ + --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ + --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ + --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ + --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ + --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ + --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ + --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ + --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ + --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ + --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ + --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ + --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ + --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ + --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ + --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ + --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ + --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ + --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ + --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ + --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ + --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ + --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ + --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ + --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ + --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ + --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ + --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ + --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ + --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 + # via ruamel-yaml +semgrep==1.31.2 \ + --hash=sha256:0fc463f8afcc649efaf61c00f17f7c124498c2e95cca9d805fd68d203362cdeb \ + --hash=sha256:30d0662a6ac8d7258af3b383cca1c93da646fc99b60e3247f6acf3dcf764e815 \ + --hash=sha256:c26ce223c60688e317299f97cac9889b3e879dc4ee28097555cad6215086dcf4 \ + --hash=sha256:cd707b74cd76ef5dff974df3fe653967faf1bd0248019f7b6777170cefa4fca5 # via -r requirements/dev-bookworm-requirements.in -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 - # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via semgrep -tqdm==4.64.1 \ - --hash=sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4 \ - --hash=sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1 - # via semgrep -types-docutils==0.19.1.4 \ - --hash=sha256:1b64b21b609ff1fc7791d3d930f14b56b36ad09029fd97e45e34cc889d671b5f \ - --hash=sha256:870d71f3663141f67a3c59d26d2c54a8c478c842208bb0b345fbf6036f49f561 - # via types-setuptools -types-setuptools==67.3.0.1 \ - --hash=sha256:1a26d373036c720e566823b6edd664a2db4d138b6eeba856721ec1254203474f \ - --hash=sha256:a7e0f0816b5b449f5bcdc0efa43da91ff81dbe6941f293a6490d68a450e130a1 +types-setuptools==68.0.0.1 \ + --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ + --hash=sha256:cc5acbc464b106104899e9b9eb4955dd47e854753c8d4ee2ce697eaf0f4d74e1 # via -r requirements/dev-bookworm-requirements.in -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.7.1 \ + --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ + --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 # via # mypy # semgrep -ujson==5.6.0 \ - --hash=sha256:0f0f21157d1a84ad5fb54388f31767cde9c1a48fb29de7ef91d8887fdc2ca92b \ - --hash=sha256:1217326ba80eab1ff3f644f9eee065bd4fcc4e0c068a2f86f851cafd05737169 \ - --hash=sha256:169b3fbd1188647c6ce00cb690915526aff86997c89a94c1b50432010ad7ae0f \ - --hash=sha256:1a7e4023c79d9a053c0c6b7c6ec50ea0af78381539ab27412e6af8d9410ae555 \ - --hash=sha256:20d929a27822cb79e034cc5e0bb62daa0257ab197247cb6f35d5149f2f438983 \ - --hash=sha256:213e41dc501b4a6d029873039da3e45ba7766b9f9eba97ecc4287c371f5403cc \ - --hash=sha256:23051f062bb257a87f3e55ea5a055ea98d56f08185fd415b34313268fa4d814e \ - --hash=sha256:24d40e01accbf4f0ba5181c4db1bac83749fdc1a5413466da582529f2a096085 \ - --hash=sha256:2a24b9a96364f943a4754fa00b47855d0a01b84ac4b8b11ebf058c8fb68c1f77 \ - --hash=sha256:2cb7a4bd91de97b4c8e57fb5289d1e5f3f019723b59d01d79e2df83783dce5a6 \ - --hash=sha256:31288f85db6295ec63e128daff7285bb0bc220935e1b5107bd2d67e2dc687b7e \ - --hash=sha256:35423460954d0c61602da734697724e8dd5326a8aa7900123e584b935116203e \ - --hash=sha256:355ef5311854936b9edc7f1ce638f8257cb45fb6b9873f6b2d16a715eafc9570 \ - --hash=sha256:3a68a204386648ec92ae9b526c1ffca528f38221eca70f98b4709390c3204275 \ - --hash=sha256:3ad74eb53ee07e76c82f9ef8e7256c33873b81bd1f97a274fdb65ed87c2801f6 \ - --hash=sha256:3b49a1014d396b962cb1d6c5f867f88b2c9aa9224c3860ee6ff63b2837a2965b \ - --hash=sha256:3f00dff3bf26bbb96791ceaf51ca95a3f34e2a21985748da855a650c38633b99 \ - --hash=sha256:3f8b9e8c0420ce3dcc193ab6dd5628840ba79ad1b76e1816ac7ca6752c6bf035 \ - --hash=sha256:52f536712d16a1f4e0f9d084982c28e11b7e70c397a1059069e4d28d53b3f522 \ - --hash=sha256:551408a5c4306839b4a4f91503c96069204dbef2c7ed91a9dab08874ac1ed679 \ - --hash=sha256:57904e5b49ffe93189349229dcd83f73862ef9bb8517e8f1e62d0ff73f313847 \ - --hash=sha256:5e5715b0e2767b1987ceed0066980fc0a53421dd2f197b4f88460d474d6aef4c \ - --hash=sha256:61fdf24f7bddc402ce06b25e4bed7bf5ee4f03e23028a0a09116835c21d54888 \ - --hash=sha256:6d0a60c5f065737a81249c819475d001a86da9a41900d888287e34619c9b4851 \ - --hash=sha256:6ea9024749a41864bffb12da15aace4a3193c03ea97e77b069557aefa342811f \ - --hash=sha256:7174e81c137d480abe2f8036e9fb69157e509f2db0bfdee4488eb61dc3f0ff6b \ - --hash=sha256:72fa6e850831280a46704032721c75155fd41b839ddadabb6068ab218c56a37a \ - --hash=sha256:74671d1bde8c03daeb92abdbd972960978347b1a1d432c4c1b3c9284ce4094cf \ - --hash=sha256:798116b88158f13ed687417526100ef353ba4692e0aef8afbc622bd4bf7e9057 \ - --hash=sha256:7a66c5a75b46545361271b4cf55560d9ad8bad794dd054a14b3fbb031407948e \ - --hash=sha256:7bde16cb18b95a8f68cc48715e4652b394b4fee68cb3f9fee0fd7d26b29a53b6 \ - --hash=sha256:82bf24ea72a73c7d77402a7adc954931243e7ec4241d5738ae74894b53944458 \ - --hash=sha256:87578ccfc35461c77e73660fb7d89bc577732f671364f442bda9e2c58b571765 \ - --hash=sha256:91000612a2c30f50c6a009e6459a677e5c1972e51b59ecefd6063543dc47a4e9 \ - --hash=sha256:9cf04fcc958bb52a6b6c301b780cb9afab3ec68713b17ca5aa423e1f99c2c1cf \ - --hash=sha256:9f4efcac06f45183b6ed8e2321554739a964a02d8aa3089ec343253d86bf2804 \ - --hash=sha256:a51cbe614acb5ea8e2006e4fd80b4e8ea7c51ae51e42c75290012f4925a9d6ab \ - --hash=sha256:a8795de7ceadf84bcef88f947f91900d647eda234a2c6cc89912c25048cc0490 \ - --hash=sha256:ae723b8308ac17a591bb8be9478b58c2c26fada23fd2211fc323796801ad7ff5 \ - --hash=sha256:aff708a1b9e2d4979f74375ade0bff978be72c8bd90422a756d24d8a46d78059 \ - --hash=sha256:b2aece7a92dffc9c78787f5f36e47e24b95495812270c27abc2fa430435a931d \ - --hash=sha256:b4420bfff18ca6aa39cfb22fe35d8aba3811fa1190c4f4e1ad816b0aad72f7e3 \ - --hash=sha256:b64d2ac99503a9a5846157631addacc9f74e23f64d5a886fe910e9662660fa10 \ - --hash=sha256:b72d4d948749e9c6afcd3d7af9ecc780fccde84e26d275c97273dd83c68a488b \ - --hash=sha256:b74396a655ac8a5299dcb765b4a17ba706e45c0df95818bcc6c13c4645a1c38e \ - --hash=sha256:b9e9d26600020cf635a4e58763959f5a59f8c70f75d72ebf26ceae94c2efac74 \ - --hash=sha256:bca074d08f0677f05df8170b25ce6e61db3bcdfda78062444972fa6508dc825f \ - --hash=sha256:bca3c06c3f10ce03fa80b1301dce53765815c2578a24bd141ce4e5769bb7b709 \ - --hash=sha256:bfb1fdf61763fafc0f8a20becf9cc4287c14fc41c0e14111d28c0d0dfda9ba56 \ - --hash=sha256:c169e12642f0edf1dde607fb264721b88787b55a6da5fb3824302a9cac6f9405 \ - --hash=sha256:c4277f6b1d24be30b7f87ec5346a87693cbc1e55bbc5877f573381b2250c4dd6 \ - --hash=sha256:ceee5aef3e234c7e998fdb52e5236c41e50cdedc116360f7f1874a04829f6490 \ - --hash=sha256:d1b5e233e42f53bbbc6961caeb492986e9f3aeacd30be811467583203873bad2 \ - --hash=sha256:d6f4be832d97836d62ac0c148026ec021f9f36481f38e455b51538fcd949ed2a \ - --hash=sha256:dd5ccc036b0f4721b98e1c03ccc604e7f3e1db53866ccc92b2add40ace1782f7 \ - --hash=sha256:dde59d2f06297fc4e70b2bae6e4a6b3ce89ca89697ab2c41e641abae3be96b0c \ - --hash=sha256:e4be7d865cb5161824e12db71cee83290ab72b3523566371a30d6ba1bd63402a \ - --hash=sha256:e97af10b6f13a498de197fb852e9242064217c25dfca79ebe7ad0cf2b0dd0cb7 \ - --hash=sha256:f2d70b7f0b485f85141bbc518d0581ae96b912d9f8b070eaf68a9beef8eb1e60 \ - --hash=sha256:f3e651f04b7510fae7d4706a4600cd43457f015df08702ece82a71339fc15c3d \ - --hash=sha256:f63535d51e039a984b2fb67ff87057ffe4216d4757c3cedf2fc846af88253cb7 \ - --hash=sha256:f881e2d8a022e9285aa2eab6ba8674358dbcb2b57fa68618d88d62937ac3ff04 \ - --hash=sha256:fadebaddd3eb71a5c986f0bdc7bb28b072bfc585c141eef37474fc66d1830b0a \ - --hash=sha256:fb1632b27e12c0b0df62f924c362206daf246a42c0080e959dd465810dc3482e \ - --hash=sha256:fecf83b2ef3cbce4f5cc573df6f6ded565e5e27c1af84038bae5ade306686d82 +ujson==5.8.0 \ + --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ + --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ + --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ + --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ + --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ + --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ + --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ + --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ + --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ + --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ + --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ + --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ + --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ + --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ + --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ + --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ + --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ + --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ + --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ + --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ + --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ + --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ + --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ + --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ + --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ + --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ + --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ + --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ + --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ + --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ + --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ + --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ + --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ + --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ + --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ + --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ + --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ + --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ + --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ + --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ + --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ + --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ + --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ + --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ + --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ + --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ + --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ + --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ + --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ + --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ + --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ + --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ + --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ + --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ + --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ + --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ + --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ + --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ + --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ + --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ + --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c # via python-lsp-jsonrpc -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 +urllib3==1.26.16 \ + --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ + --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 # via # requests # semgrep @@ -389,7 +601,17 @@ wcmatch==8.4.1 \ --hash=sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7 \ --hash=sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943 # via semgrep -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 + # via pip-tools + +# The following packages are considered to be unsafe in a requirements file: +pip==23.1.2 \ + --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ + --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 + # via pip-tools +setuptools==68.0.0 \ + --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ + --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 # via pip-tools diff --git a/requirements/dev-bullseye-requirements.txt b/requirements/dev-bullseye-requirements.txt index 9feaaffa2..ef3de0c31 100644 --- a/requirements/dev-bullseye-requirements.txt +++ b/requirements/dev-bullseye-requirements.txt @@ -2,29 +2,39 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in +# pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in # -attrs==21.4.0 \ - --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \ - --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd +attrs==23.1.0 \ + --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ + --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 # via # glom # jsonschema - # pytest + # referencing # semgrep -black==22.12.0 \ - --hash=sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320 \ - --hash=sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351 \ - --hash=sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350 \ - --hash=sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f \ - --hash=sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf \ - --hash=sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148 \ - --hash=sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4 \ - --hash=sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d \ - --hash=sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc \ - --hash=sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d \ - --hash=sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2 \ - --hash=sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f +black==23.7.0 \ + --hash=sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3 \ + --hash=sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb \ + --hash=sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087 \ + --hash=sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320 \ + --hash=sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6 \ + --hash=sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3 \ + --hash=sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc \ + --hash=sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f \ + --hash=sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587 \ + --hash=sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91 \ + --hash=sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a \ + --hash=sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad \ + --hash=sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926 \ + --hash=sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9 \ + --hash=sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be \ + --hash=sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd \ + --hash=sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96 \ + --hash=sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491 \ + --hash=sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2 \ + --hash=sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a \ + --hash=sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f \ + --hash=sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995 # via -r requirements/dev-bullseye-requirements.in boltons==21.0.0 \ --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ @@ -37,93 +47,176 @@ bracex==2.3.post1 \ --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 # via wcmatch -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.5.7 \ + --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ + --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.2.0 \ + --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ + --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ + --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ + --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ + --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ + --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ + --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ + --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ + --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ + --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ + --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ + --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ + --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ + --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ + --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ + --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ + --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ + --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ + --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ + --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ + --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ + --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ + --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ + --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ + --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ + --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ + --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ + --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ + --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ + --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ + --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ + --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ + --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ + --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ + --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ + --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ + --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ + --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ + --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ + --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ + --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ + --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ + --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ + --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ + --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ + --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ + --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ + --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ + --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ + --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ + --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ + --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ + --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ + --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ + --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ + --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ + --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ + --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ + --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ + --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ + --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ + --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ + --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ + --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ + --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ + --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ + --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ + --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ + --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ + --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ + --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ + --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ + --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ + --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ + --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa # via requests -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +click==8.1.4 \ + --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ + --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 # via # black # click-option-group # pip-tools # semgrep -click-option-group==0.5.5 \ - --hash=sha256:0f8ca79bc9b1d6fcaafdbe194b17ba1a2dde44ddf19087235c3efed2ad288143 \ - --hash=sha256:78ee474f07a0ca0ef6c0317bb3ebe79387aafb0c4a1e03b1d8b2b0be1e42fc78 +click-option-group==0.5.6 \ + --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ + --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 # via semgrep colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via semgrep -coverage[toml]==6.5.0 \ - --hash=sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79 \ - --hash=sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a \ - --hash=sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f \ - --hash=sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a \ - --hash=sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa \ - --hash=sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398 \ - --hash=sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba \ - --hash=sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d \ - --hash=sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf \ - --hash=sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b \ - --hash=sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518 \ - --hash=sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d \ - --hash=sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795 \ - --hash=sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2 \ - --hash=sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e \ - --hash=sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32 \ - --hash=sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745 \ - --hash=sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b \ - --hash=sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e \ - --hash=sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d \ - --hash=sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f \ - --hash=sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660 \ - --hash=sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62 \ - --hash=sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6 \ - --hash=sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04 \ - --hash=sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c \ - --hash=sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5 \ - --hash=sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef \ - --hash=sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc \ - --hash=sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae \ - --hash=sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578 \ - --hash=sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466 \ - --hash=sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4 \ - --hash=sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91 \ - --hash=sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0 \ - --hash=sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4 \ - --hash=sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b \ - --hash=sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe \ - --hash=sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b \ - --hash=sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75 \ - --hash=sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b \ - --hash=sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c \ - --hash=sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72 \ - --hash=sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b \ - --hash=sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f \ - --hash=sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e \ - --hash=sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53 \ - --hash=sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3 \ - --hash=sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84 \ - --hash=sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987 +coverage[toml]==7.2.7 \ + --hash=sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f \ + --hash=sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2 \ + --hash=sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a \ + --hash=sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a \ + --hash=sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01 \ + --hash=sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6 \ + --hash=sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7 \ + --hash=sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f \ + --hash=sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02 \ + --hash=sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c \ + --hash=sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063 \ + --hash=sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a \ + --hash=sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5 \ + --hash=sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959 \ + --hash=sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97 \ + --hash=sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6 \ + --hash=sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f \ + --hash=sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9 \ + --hash=sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5 \ + --hash=sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f \ + --hash=sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562 \ + --hash=sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe \ + --hash=sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9 \ + --hash=sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f \ + --hash=sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb \ + --hash=sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb \ + --hash=sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1 \ + --hash=sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb \ + --hash=sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250 \ + --hash=sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e \ + --hash=sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511 \ + --hash=sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5 \ + --hash=sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59 \ + --hash=sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2 \ + --hash=sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d \ + --hash=sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3 \ + --hash=sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4 \ + --hash=sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de \ + --hash=sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9 \ + --hash=sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833 \ + --hash=sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0 \ + --hash=sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9 \ + --hash=sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d \ + --hash=sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050 \ + --hash=sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d \ + --hash=sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6 \ + --hash=sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353 \ + --hash=sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb \ + --hash=sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e \ + --hash=sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8 \ + --hash=sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495 \ + --hash=sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2 \ + --hash=sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd \ + --hash=sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27 \ + --hash=sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1 \ + --hash=sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818 \ + --hash=sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4 \ + --hash=sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e \ + --hash=sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850 \ + --hash=sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3 # via pytest-cov defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via semgrep -exceptiongroup==1.0.4 \ - --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ - --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec +exceptiongroup==1.1.2 \ + --hash=sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5 \ + --hash=sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f # via pytest face==22.0.0 \ --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ @@ -141,85 +234,90 @@ idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -iniconfig==1.1.1 \ - --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ - --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 +iniconfig==2.0.0 \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # via pytest -jsonschema==4.17.3 \ - --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ - --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 +jsonschema==4.18.0 \ + --hash=sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4 \ + --hash=sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60 # via semgrep +jsonschema-specifications==2023.6.1 \ + --hash=sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7 \ + --hash=sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28 + # via jsonschema +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb + # via rich mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 -mypy==1.0.0 \ - --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ - --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ - --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ - --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ - --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ - --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ - --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ - --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ - --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ - --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ - --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ - --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ - --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ - --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ - --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ - --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ - --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ - --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ - --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ - --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ - --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ - --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ - --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ - --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ - --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ - --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +mypy==1.4.1 \ + --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ + --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ + --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ + --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ + --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ + --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ + --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ + --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ + --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ + --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ + --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ + --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ + --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ + --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ + --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ + --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ + --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ + --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ + --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ + --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ + --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ + --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ + --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ + --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ + --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ + --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b # via -r requirements/dev-bullseye-requirements.in -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via # black # mypy -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f # via + # black # build # pytest # semgrep -pathspec==0.10.3 \ - --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ - --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 +pathspec==0.11.1 \ + --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ + --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 # via black -peewee==3.15.4 \ - --hash=sha256:2581520c8dfbacd9d580c2719ae259f0637a9e46eda47dfc0ce01864c6366205 +peewee==3.16.2 \ + --hash=sha256:10769981198c7311f84a0ca8db892fa213303a8eb1305deb795a71e7bd606a91 # via semgrep -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 - # via build -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 - # via pip-tools -pip-tools==6.12.0 \ - --hash=sha256:8e22fbc84ede7ca522ba4b033c4fcf6a6419adabc75d24747be3d8262504489a \ - --hash=sha256:f441603c63b16f4af0dd5026f7522a49eddec2bc8a4a4979af44e1f6b0a1c13e +pip-tools==6.14.0 \ + --hash=sha256:06366be0e08d86b416407333e998b4d305d5bd925151b08942ed149380ba3e47 \ + --hash=sha256:c5ad042cd27c0b343b10db1db7f77a7d087beafbec59ae6df1bba4d3368dfe8c # via -r requirements/dev-bullseye-requirements.in -platformdirs==2.6.0 \ - --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ - --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e +platformdirs==3.8.1 \ + --hash=sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c \ + --hash=sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528 # via black -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.2.0 \ + --hash=sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849 \ + --hash=sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3 # via pytest pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ @@ -229,65 +327,157 @@ pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 -pyparsing==3.0.9 \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc - # via packaging -pyrsistent==0.19.2 \ - --hash=sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed \ - --hash=sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb \ - --hash=sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a \ - --hash=sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95 \ - --hash=sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712 \ - --hash=sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73 \ - --hash=sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41 \ - --hash=sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b \ - --hash=sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78 \ - --hash=sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab \ - --hash=sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308 \ - --hash=sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425 \ - --hash=sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2 \ - --hash=sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e \ - --hash=sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6 \ - --hash=sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2 \ - --hash=sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a \ - --hash=sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291 \ - --hash=sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584 \ - --hash=sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a \ - --hash=sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0 \ - --hash=sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770 - # via jsonschema -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pygments==2.15.1 \ + --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ + --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 + # via rich +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build +pytest==7.4.0 \ + --hash=sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32 \ + --hash=sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a # via # -r requirements/dev-bullseye-requirements.in # pytest-cov # pytest-mock -pytest-cov==4.0.0 \ - --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ - --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 +pytest-cov==4.1.0 \ + --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ + --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a # via -r requirements/dev-bullseye-requirements.in -pytest-mock==3.10.0 \ - --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ - --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f +pytest-mock==3.11.1 \ + --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ + --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f # via -r requirements/dev-bullseye-requirements.in python-lsp-jsonrpc==1.0.0 \ --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd # via semgrep -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +referencing==0.29.1 \ + --hash=sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e \ + --hash=sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via semgrep -ruamel-yaml==0.17.21 \ - --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ - --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af +rich==13.4.2 \ + --hash=sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec \ + --hash=sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898 + # via semgrep +rpds-py==0.8.10 \ + --hash=sha256:08166467258fd0240a1256fce272f689f2360227ee41c72aeea103e9e4f63d2b \ + --hash=sha256:083df0fafe199371206111583c686c985dddaf95ab3ee8e7b24f1fda54515d09 \ + --hash=sha256:0da53292edafecba5e1d8c1218f99babf2ed0bf1c791d83c0ab5c29b57223068 \ + --hash=sha256:0eeb2731708207d0fe2619afe6c4dc8cb9798f7de052da891de5f19c0006c315 \ + --hash=sha256:134ec8f14ca7dbc6d9ae34dac632cdd60939fe3734b5d287a69683c037c51acb \ + --hash=sha256:13e643ce8ad502a0263397362fb887594b49cf84bf518d6038c16f235f2bcea4 \ + --hash=sha256:148b0b38d719c0760e31ce9285a9872972bdd7774969a4154f40c980e5beaca7 \ + --hash=sha256:14f1c356712f66653b777ecd8819804781b23dbbac4eade4366b94944c9e78ad \ + --hash=sha256:15a90d0ac11b4499171067ae40a220d1ca3cb685ec0acc356d8f3800e07e4cb8 \ + --hash=sha256:1a2edf8173ac0c7a19da21bc68818be1321998528b5e3f748d6ee90c0ba2a1fd \ + --hash=sha256:1b21575031478609db6dbd1f0465e739fe0e7f424a8e7e87610a6c7f68b4eb16 \ + --hash=sha256:1ee45cd1d84beed6cbebc839fd85c2e70a3a1325c8cfd16b62c96e2ffb565eca \ + --hash=sha256:220bdcad2d2936f674650d304e20ac480a3ce88a40fe56cd084b5780f1d104d9 \ + --hash=sha256:2418cf17d653d24ffb8b75e81f9f60b7ba1b009a23298a433a4720b2a0a17017 \ + --hash=sha256:2614c2732bf45de5c7f9e9e54e18bc78693fa2f635ae58d2895b7965e470378c \ + --hash=sha256:2cd3045e7f6375dda64ed7db1c5136826facb0159ea982f77d9cf6125025bd34 \ + --hash=sha256:2eb4b08c45f8f8d8254cdbfacd3fc5d6b415d64487fb30d7380b0d0569837bf1 \ + --hash=sha256:300eb606e6b94a7a26f11c8cc8ee59e295c6649bd927f91e1dbd37a4c89430b6 \ + --hash=sha256:376b8de737401050bd12810003d207e824380be58810c031f10ec563ff6aef3d \ + --hash=sha256:3793c21494bad1373da517001d0849eea322e9a049a0e4789e50d8d1329df8e7 \ + --hash=sha256:37f7ee4dc86db7af3bac6d2a2cedbecb8e57ce4ed081f6464510e537589f8b1e \ + --hash=sha256:3816a890a6a9e9f1de250afa12ca71c9a7a62f2b715a29af6aaee3aea112c181 \ + --hash=sha256:3c490204e16bca4f835dba8467869fe7295cdeaa096e4c5a7af97f3454a97991 \ + --hash=sha256:3cc5e5b5514796f45f03a568981971b12a3570f3de2e76114f7dc18d4b60a3c4 \ + --hash=sha256:41c89a366eae49ad9e65ed443a8f94aee762931a1e3723749d72aeac80f5ef2f \ + --hash=sha256:4a8ca409f1252e1220bf09c57290b76cae2f14723746215a1e0506472ebd7bdf \ + --hash=sha256:4b519bac7c09444dd85280fd60f28c6dde4389c88dddf4279ba9b630aca3bbbe \ + --hash=sha256:521fc8861a86ae54359edf53a15a05fabc10593cea7b3357574132f8427a5e5a \ + --hash=sha256:574868858a7ff6011192c023a5289158ed20e3f3b94b54f97210a773f2f22921 \ + --hash=sha256:5a665f6f1a87614d1c3039baf44109094926dedf785e346d8b0a728e9cabd27a \ + --hash=sha256:5d1c2bc319428d50b3e0fa6b673ab8cc7fa2755a92898db3a594cbc4eeb6d1f7 \ + --hash=sha256:60e0e86e870350e03b3e25f9b1dd2c6cc72d2b5f24e070249418320a6f9097b7 \ + --hash=sha256:695f642a3a5dbd4ad2ffbbacf784716ecd87f1b7a460843b9ddf965ccaeafff4 \ + --hash=sha256:69d089c026f6a8b9d64a06ff67dc3be196707b699d7f6ca930c25f00cf5e30d8 \ + --hash=sha256:6c6a0225b8501d881b32ebf3f5807a08ad3685b5eb5f0a6bfffd3a6e039b2055 \ + --hash=sha256:70bb9c8004b97b4ef7ae56a2aa56dfaa74734a0987c78e7e85f00004ab9bf2d0 \ + --hash=sha256:73a1e48430f418f0ac3dfd87860e4cc0d33ad6c0f589099a298cb53724db1169 \ + --hash=sha256:7495010b658ec5b52835f21d8c8b1a7e52e194c50f095d4223c0b96c3da704b1 \ + --hash=sha256:7947e6e2c2ad68b1c12ee797d15e5f8d0db36331200b0346871492784083b0c6 \ + --hash=sha256:7b38a9ac96eeb6613e7f312cd0014de64c3f07000e8bf0004ad6ec153bac46f8 \ + --hash=sha256:7d20a8ed227683401cc508e7be58cba90cc97f784ea8b039c8cd01111e6043e0 \ + --hash=sha256:7f29b8c55fd3a2bc48e485e37c4e2df3317f43b5cc6c4b6631c33726f52ffbb3 \ + --hash=sha256:802f42200d8caf7f25bbb2a6464cbd83e69d600151b7e3b49f49a47fa56b0a38 \ + --hash=sha256:805a5f3f05d186c5d50de2e26f765ba7896d0cc1ac5b14ffc36fae36df5d2f10 \ + --hash=sha256:82bb361cae4d0a627006dadd69dc2f36b7ad5dc1367af9d02e296ec565248b5b \ + --hash=sha256:84eb541a44f7a18f07a6bfc48b95240739e93defe1fdfb4f2a295f37837945d7 \ + --hash=sha256:89c92b74e8bf6f53a6f4995fd52f4bd510c12f103ee62c99e22bc9e05d45583c \ + --hash=sha256:8c398fda6df361a30935ab4c4bccb7f7a3daef2964ca237f607c90e9f3fdf66f \ + --hash=sha256:915031002c86a5add7c6fd4beb601b2415e8a1c956590a5f91d825858e92fe6e \ + --hash=sha256:927d784648211447201d4c6f1babddb7971abad922b32257ab74de2f2750fad0 \ + --hash=sha256:92cf5b3ee60eef41f41e1a2cabca466846fb22f37fc580ffbcb934d1bcab225a \ + --hash=sha256:93d06cccae15b3836247319eee7b6f1fdcd6c10dabb4e6d350d27bd0bdca2711 \ + --hash=sha256:93d99f957a300d7a4ced41615c45aeb0343bb8f067c42b770b505de67a132346 \ + --hash=sha256:96b293c0498c70162effb13100624c5863797d99df75f2f647438bd10cbf73e4 \ + --hash=sha256:97cab733d303252f7c2f7052bf021a3469d764fc2b65e6dbef5af3cbf89d4892 \ + --hash=sha256:996cc95830de9bc22b183661d95559ec6b3cd900ad7bc9154c4cbf5be0c9b734 \ + --hash=sha256:9a7d20c1cf8d7b3960c5072c265ec47b3f72a0c608a9a6ee0103189b4f28d531 \ + --hash=sha256:9cd57981d9fab04fc74438d82460f057a2419974d69a96b06a440822d693b3c0 \ + --hash=sha256:a11ab0d97be374efd04f640c04fe5c2d3dabc6dfb998954ea946ee3aec97056d \ + --hash=sha256:a13c8e56c46474cd5958d525ce6a9996727a83d9335684e41f5192c83deb6c58 \ + --hash=sha256:a38b9f526d0d6cbdaa37808c400e3d9f9473ac4ff64d33d9163fd05d243dbd9b \ + --hash=sha256:a7c6304b894546b5a6bdc0fe15761fa53fe87d28527a7142dae8de3c663853e1 \ + --hash=sha256:ad3bfb44c8840fb4be719dc58e229f435e227fbfbe133dc33f34981ff622a8f8 \ + --hash=sha256:ae40f4a70a1f40939d66ecbaf8e7edc144fded190c4a45898a8cfe19d8fc85ea \ + --hash=sha256:b01b39ad5411563031ea3977bbbc7324d82b088e802339e6296f082f78f6115c \ + --hash=sha256:b2e3c4f2a8e3da47f850d7ea0d7d56720f0f091d66add889056098c4b2fd576c \ + --hash=sha256:b41941583adce4242af003d2a8337b066ba6148ca435f295f31ac6d9e4ea2722 \ + --hash=sha256:b4627520a02fccbd324b33c7a83e5d7906ec746e1083a9ac93c41ac7d15548c7 \ + --hash=sha256:ba9f1d1ebe4b63801977cec7401f2d41e888128ae40b5441270d43140efcad52 \ + --hash=sha256:c03a435d26c3999c2a8642cecad5d1c4d10c961817536af52035f6f4ee2f5dd0 \ + --hash=sha256:c200b30dd573afa83847bed7e3041aa36a8145221bf0cfdfaa62d974d720805c \ + --hash=sha256:c493365d3fad241d52f096e4995475a60a80f4eba4d3ff89b713bc65c2ca9615 \ + --hash=sha256:c4d42e83ddbf3445e6514f0aff96dca511421ed0392d9977d3990d9f1ba6753c \ + --hash=sha256:c60528671d9d467009a6ec284582179f6b88651e83367d0ab54cb739021cd7de \ + --hash=sha256:c72ebc22e70e04126158c46ba56b85372bc4d54d00d296be060b0db1671638a4 \ + --hash=sha256:ccbbd276642788c4376fbe8d4e6c50f0fb4972ce09ecb051509062915891cbf0 \ + --hash=sha256:ceaac0c603bf5ac2f505a78b2dcab78d3e6b706be6596c8364b64cc613d208d2 \ + --hash=sha256:d19db6ba816e7f59fc806c690918da80a7d186f00247048cd833acdab9b4847b \ + --hash=sha256:d5c191713e98e7c28800233f039a32a42c1a4f9a001a8a0f2448b07391881036 \ + --hash=sha256:d64f9f88d5203274a002b54442cafc9c7a1abff2a238f3e767b70aadf919b451 \ + --hash=sha256:d77dff3a5aa5eedcc3da0ebd10ff8e4969bc9541aa3333a8d41715b429e99f47 \ + --hash=sha256:dd4f16e57c12c0ae17606c53d1b57d8d1c8792efe3f065a37cb3341340599d49 \ + --hash=sha256:e39d7ab0c18ac99955b36cd19f43926450baba21e3250f053e0704d6ffd76873 \ + --hash=sha256:e3d0cd3dff0e7638a7b5390f3a53057c4e347f4ef122ee84ed93fc2fb7ea4aa2 \ + --hash=sha256:e7dfb1cbb895810fa2b892b68153c17716c6abaa22c7dc2b2f6dcf3364932a1c \ + --hash=sha256:e8e24b210a4deb5a7744971f8f77393005bae7f873568e37dfd9effe808be7f7 \ + --hash=sha256:e9c0683cb35a9b5881b41bc01d5568ffc667910d9dbc632a1fba4e7d59e98773 \ + --hash=sha256:ed41f3f49507936a6fe7003985ea2574daccfef999775525d79eb67344e23767 \ + --hash=sha256:ee744fca8d1ea822480a2a4e7c5f2e1950745477143668f0b523769426060f29 \ + --hash=sha256:f3f1e860be21f3e83011116a65e7310486300e08d9a3028e73e8d13bb6c77292 \ + --hash=sha256:f43ab4cb04bde6109eb2555528a64dfd8a265cc6a9920a67dcbde13ef53a46c8 \ + --hash=sha256:f53f55a8852f0e49b0fc76f2412045d6ad9d5772251dea8f55ea45021616e7d5 \ + --hash=sha256:f59996d0550894affaad8743e97b9b9c98f638b221fac12909210ec3d9294786 \ + --hash=sha256:f96f3f98fbff7af29e9edf9a6584f3c1382e7788783d07ba3721790625caa43e \ + --hash=sha256:f9adb5664b78fcfcd830000416c8cc69853ef43cb084d645b3f1f0296edd9bae \ + --hash=sha256:fa326b3505d5784436d9433b7980171ab2375535d93dd63fbcd20af2b5ca1bb6 \ + --hash=sha256:fafc0049add8043ad07ab5382ee80d80ed7e3699847f26c9a5cf4d3714d96a84 + # via + # jsonschema + # referencing +ruamel-yaml==0.17.32 \ + --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ + --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 # via semgrep ruamel-yaml-clib==0.2.7 \ --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ + --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ @@ -298,13 +488,13 @@ ruamel-yaml-clib==0.2.7 \ --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5 \ --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ + --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ @@ -313,23 +503,21 @@ ruamel-yaml-clib==0.2.7 \ --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ + --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 + --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ + --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 # via ruamel-yaml -semgrep==1.2.0 \ - --hash=sha256:31f5f764ff114e2e56b3a93b09829f738cb9e287af7479e2c4714c77b10dc5c0 \ - --hash=sha256:cba38f882c9fedd00462247474a991715d5c8faf169e38cfbf299c7c89ccad55 \ - --hash=sha256:d7b9ccffab1cbecb7870e6792dc274f6a63133910150f33b6ba07d28f5cf00d5 \ - --hash=sha256:e04dbc4a95ddfc9b07550b09b88f61c5c7d81817fac1c86683d8c2534514ac6c +semgrep==1.31.2 \ + --hash=sha256:0fc463f8afcc649efaf61c00f17f7c124498c2e95cca9d805fd68d203362cdeb \ + --hash=sha256:30d0662a6ac8d7258af3b383cca1c93da646fc99b60e3247f6acf3dcf764e815 \ + --hash=sha256:c26ce223c60688e317299f97cac9889b3e879dc4ee28097555cad6215086dcf4 \ + --hash=sha256:cd707b74cd76ef5dff974df3fe653967faf1bd0248019f7b6777170cefa4fca5 # via -r requirements/dev-bullseye-requirements.in -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 - # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -338,98 +526,87 @@ tomli==2.0.1 \ # build # coverage # mypy - # pep517 + # pip-tools + # pyproject-hooks # pytest # semgrep -tqdm==4.64.1 \ - --hash=sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4 \ - --hash=sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1 - # via semgrep -types-docutils==0.19.1.4 \ - --hash=sha256:1b64b21b609ff1fc7791d3d930f14b56b36ad09029fd97e45e34cc889d671b5f \ - --hash=sha256:870d71f3663141f67a3c59d26d2c54a8c478c842208bb0b345fbf6036f49f561 - # via types-setuptools -types-setuptools==67.3.0.1 \ - --hash=sha256:1a26d373036c720e566823b6edd664a2db4d138b6eeba856721ec1254203474f \ - --hash=sha256:a7e0f0816b5b449f5bcdc0efa43da91ff81dbe6941f293a6490d68a450e130a1 +types-setuptools==68.0.0.1 \ + --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ + --hash=sha256:cc5acbc464b106104899e9b9eb4955dd47e854753c8d4ee2ce697eaf0f4d74e1 # via -r requirements/dev-bullseye-requirements.in -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.7.1 \ + --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ + --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 # via # black # mypy # semgrep -ujson==5.6.0 \ - --hash=sha256:0f0f21157d1a84ad5fb54388f31767cde9c1a48fb29de7ef91d8887fdc2ca92b \ - --hash=sha256:1217326ba80eab1ff3f644f9eee065bd4fcc4e0c068a2f86f851cafd05737169 \ - --hash=sha256:169b3fbd1188647c6ce00cb690915526aff86997c89a94c1b50432010ad7ae0f \ - --hash=sha256:1a7e4023c79d9a053c0c6b7c6ec50ea0af78381539ab27412e6af8d9410ae555 \ - --hash=sha256:20d929a27822cb79e034cc5e0bb62daa0257ab197247cb6f35d5149f2f438983 \ - --hash=sha256:213e41dc501b4a6d029873039da3e45ba7766b9f9eba97ecc4287c371f5403cc \ - --hash=sha256:23051f062bb257a87f3e55ea5a055ea98d56f08185fd415b34313268fa4d814e \ - --hash=sha256:24d40e01accbf4f0ba5181c4db1bac83749fdc1a5413466da582529f2a096085 \ - --hash=sha256:2a24b9a96364f943a4754fa00b47855d0a01b84ac4b8b11ebf058c8fb68c1f77 \ - --hash=sha256:2cb7a4bd91de97b4c8e57fb5289d1e5f3f019723b59d01d79e2df83783dce5a6 \ - --hash=sha256:31288f85db6295ec63e128daff7285bb0bc220935e1b5107bd2d67e2dc687b7e \ - --hash=sha256:35423460954d0c61602da734697724e8dd5326a8aa7900123e584b935116203e \ - --hash=sha256:355ef5311854936b9edc7f1ce638f8257cb45fb6b9873f6b2d16a715eafc9570 \ - --hash=sha256:3a68a204386648ec92ae9b526c1ffca528f38221eca70f98b4709390c3204275 \ - --hash=sha256:3ad74eb53ee07e76c82f9ef8e7256c33873b81bd1f97a274fdb65ed87c2801f6 \ - --hash=sha256:3b49a1014d396b962cb1d6c5f867f88b2c9aa9224c3860ee6ff63b2837a2965b \ - --hash=sha256:3f00dff3bf26bbb96791ceaf51ca95a3f34e2a21985748da855a650c38633b99 \ - --hash=sha256:3f8b9e8c0420ce3dcc193ab6dd5628840ba79ad1b76e1816ac7ca6752c6bf035 \ - --hash=sha256:52f536712d16a1f4e0f9d084982c28e11b7e70c397a1059069e4d28d53b3f522 \ - --hash=sha256:551408a5c4306839b4a4f91503c96069204dbef2c7ed91a9dab08874ac1ed679 \ - --hash=sha256:57904e5b49ffe93189349229dcd83f73862ef9bb8517e8f1e62d0ff73f313847 \ - --hash=sha256:5e5715b0e2767b1987ceed0066980fc0a53421dd2f197b4f88460d474d6aef4c \ - --hash=sha256:61fdf24f7bddc402ce06b25e4bed7bf5ee4f03e23028a0a09116835c21d54888 \ - --hash=sha256:6d0a60c5f065737a81249c819475d001a86da9a41900d888287e34619c9b4851 \ - --hash=sha256:6ea9024749a41864bffb12da15aace4a3193c03ea97e77b069557aefa342811f \ - --hash=sha256:7174e81c137d480abe2f8036e9fb69157e509f2db0bfdee4488eb61dc3f0ff6b \ - --hash=sha256:72fa6e850831280a46704032721c75155fd41b839ddadabb6068ab218c56a37a \ - --hash=sha256:74671d1bde8c03daeb92abdbd972960978347b1a1d432c4c1b3c9284ce4094cf \ - --hash=sha256:798116b88158f13ed687417526100ef353ba4692e0aef8afbc622bd4bf7e9057 \ - --hash=sha256:7a66c5a75b46545361271b4cf55560d9ad8bad794dd054a14b3fbb031407948e \ - --hash=sha256:7bde16cb18b95a8f68cc48715e4652b394b4fee68cb3f9fee0fd7d26b29a53b6 \ - --hash=sha256:82bf24ea72a73c7d77402a7adc954931243e7ec4241d5738ae74894b53944458 \ - --hash=sha256:87578ccfc35461c77e73660fb7d89bc577732f671364f442bda9e2c58b571765 \ - --hash=sha256:91000612a2c30f50c6a009e6459a677e5c1972e51b59ecefd6063543dc47a4e9 \ - --hash=sha256:9cf04fcc958bb52a6b6c301b780cb9afab3ec68713b17ca5aa423e1f99c2c1cf \ - --hash=sha256:9f4efcac06f45183b6ed8e2321554739a964a02d8aa3089ec343253d86bf2804 \ - --hash=sha256:a51cbe614acb5ea8e2006e4fd80b4e8ea7c51ae51e42c75290012f4925a9d6ab \ - --hash=sha256:a8795de7ceadf84bcef88f947f91900d647eda234a2c6cc89912c25048cc0490 \ - --hash=sha256:ae723b8308ac17a591bb8be9478b58c2c26fada23fd2211fc323796801ad7ff5 \ - --hash=sha256:aff708a1b9e2d4979f74375ade0bff978be72c8bd90422a756d24d8a46d78059 \ - --hash=sha256:b2aece7a92dffc9c78787f5f36e47e24b95495812270c27abc2fa430435a931d \ - --hash=sha256:b4420bfff18ca6aa39cfb22fe35d8aba3811fa1190c4f4e1ad816b0aad72f7e3 \ - --hash=sha256:b64d2ac99503a9a5846157631addacc9f74e23f64d5a886fe910e9662660fa10 \ - --hash=sha256:b72d4d948749e9c6afcd3d7af9ecc780fccde84e26d275c97273dd83c68a488b \ - --hash=sha256:b74396a655ac8a5299dcb765b4a17ba706e45c0df95818bcc6c13c4645a1c38e \ - --hash=sha256:b9e9d26600020cf635a4e58763959f5a59f8c70f75d72ebf26ceae94c2efac74 \ - --hash=sha256:bca074d08f0677f05df8170b25ce6e61db3bcdfda78062444972fa6508dc825f \ - --hash=sha256:bca3c06c3f10ce03fa80b1301dce53765815c2578a24bd141ce4e5769bb7b709 \ - --hash=sha256:bfb1fdf61763fafc0f8a20becf9cc4287c14fc41c0e14111d28c0d0dfda9ba56 \ - --hash=sha256:c169e12642f0edf1dde607fb264721b88787b55a6da5fb3824302a9cac6f9405 \ - --hash=sha256:c4277f6b1d24be30b7f87ec5346a87693cbc1e55bbc5877f573381b2250c4dd6 \ - --hash=sha256:ceee5aef3e234c7e998fdb52e5236c41e50cdedc116360f7f1874a04829f6490 \ - --hash=sha256:d1b5e233e42f53bbbc6961caeb492986e9f3aeacd30be811467583203873bad2 \ - --hash=sha256:d6f4be832d97836d62ac0c148026ec021f9f36481f38e455b51538fcd949ed2a \ - --hash=sha256:dd5ccc036b0f4721b98e1c03ccc604e7f3e1db53866ccc92b2add40ace1782f7 \ - --hash=sha256:dde59d2f06297fc4e70b2bae6e4a6b3ce89ca89697ab2c41e641abae3be96b0c \ - --hash=sha256:e4be7d865cb5161824e12db71cee83290ab72b3523566371a30d6ba1bd63402a \ - --hash=sha256:e97af10b6f13a498de197fb852e9242064217c25dfca79ebe7ad0cf2b0dd0cb7 \ - --hash=sha256:f2d70b7f0b485f85141bbc518d0581ae96b912d9f8b070eaf68a9beef8eb1e60 \ - --hash=sha256:f3e651f04b7510fae7d4706a4600cd43457f015df08702ece82a71339fc15c3d \ - --hash=sha256:f63535d51e039a984b2fb67ff87057ffe4216d4757c3cedf2fc846af88253cb7 \ - --hash=sha256:f881e2d8a022e9285aa2eab6ba8674358dbcb2b57fa68618d88d62937ac3ff04 \ - --hash=sha256:fadebaddd3eb71a5c986f0bdc7bb28b072bfc585c141eef37474fc66d1830b0a \ - --hash=sha256:fb1632b27e12c0b0df62f924c362206daf246a42c0080e959dd465810dc3482e \ - --hash=sha256:fecf83b2ef3cbce4f5cc573df6f6ded565e5e27c1af84038bae5ade306686d82 +ujson==5.8.0 \ + --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ + --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ + --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ + --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ + --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ + --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ + --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ + --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ + --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ + --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ + --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ + --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ + --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ + --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ + --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ + --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ + --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ + --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ + --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ + --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ + --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ + --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ + --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ + --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ + --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ + --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ + --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ + --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ + --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ + --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ + --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ + --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ + --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ + --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ + --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ + --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ + --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ + --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ + --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ + --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ + --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ + --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ + --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ + --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ + --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ + --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ + --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ + --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ + --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ + --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ + --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ + --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ + --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ + --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ + --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ + --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ + --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ + --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ + --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ + --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ + --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c # via python-lsp-jsonrpc -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 +urllib3==1.26.16 \ + --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ + --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 # via # requests # semgrep @@ -437,7 +614,17 @@ wcmatch==8.4.1 \ --hash=sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7 \ --hash=sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943 # via semgrep -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 + # via pip-tools + +# The following packages are considered to be unsafe in a requirements file: +pip==23.1.2 \ + --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ + --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 + # via pip-tools +setuptools==68.0.0 \ + --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ + --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 # via pip-tools From 2676b370fe72b9ecd6667e03ce5f31b19a334587 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 11 Jul 2023 09:21:52 -0700 Subject: [PATCH 569/751] Satisfy linter --- securedrop_export/disk/legacy_status.py | 1 - securedrop_export/disk/service.py | 1 - securedrop_export/disk/status.py | 1 - securedrop_export/disk/volume.py | 1 - securedrop_export/print/status.py | 1 - tests/disk/test_cli.py | 8 -------- tests/print/test_service.py | 4 ---- tests/test_directory.py | 1 - tests/test_main.py | 1 - 9 files changed, 19 deletions(-) diff --git a/securedrop_export/disk/legacy_status.py b/securedrop_export/disk/legacy_status.py index fa0bdf869..77f0fa6ce 100644 --- a/securedrop_export/disk/legacy_status.py +++ b/securedrop_export/disk/legacy_status.py @@ -2,7 +2,6 @@ class Status(BaseStatus): - LEGACY_ERROR_GENERIC = "ERROR_GENERIC" # Legacy USB preflight related diff --git a/securedrop_export/disk/service.py b/securedrop_export/disk/service.py index 0c983c516..1db9a8338 100644 --- a/securedrop_export/disk/service.py +++ b/securedrop_export/disk/service.py @@ -50,7 +50,6 @@ def scan_single_device(self, blkid: str) -> Status: # See if it's a LUKS drive if self.cli.is_luks_volume(target): - # Returns Volume or throws ExportException self.volume = self.cli.get_luks_volume(target) diff --git a/securedrop_export/disk/status.py b/securedrop_export/disk/status.py index 285d9f8b9..7ce713913 100644 --- a/securedrop_export/disk/status.py +++ b/securedrop_export/disk/status.py @@ -2,7 +2,6 @@ class Status(BaseStatus): - NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" INVALID_DEVICE_DETECTED = ( "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc diff --git a/securedrop_export/disk/volume.py b/securedrop_export/disk/volume.py index 6d41bce47..aae7d9332 100644 --- a/securedrop_export/disk/volume.py +++ b/securedrop_export/disk/volume.py @@ -12,7 +12,6 @@ class EncryptionScheme(Enum): class Volume: - MAPPED_VOLUME_PREFIX = "/dev/mapper/" """ diff --git a/securedrop_export/print/status.py b/securedrop_export/print/status.py index 5ec81c8a3..116316a46 100644 --- a/securedrop_export/print/status.py +++ b/securedrop_export/print/status.py @@ -2,7 +2,6 @@ class Status(BaseStatus): - # Printer preflight related errors ERROR_MULTIPLE_PRINTERS_FOUND = "ERROR_MULTIPLE_PRINTERS_FOUND" ERROR_PRINTER_NOT_FOUND = "ERROR_PRINTER_NOT_FOUND" diff --git a/tests/disk/test_cli.py b/tests/disk/test_cli.py index 8326bb8e9..798980905 100644 --- a/tests/disk/test_cli.py +++ b/tests/disk/test_cli.py @@ -89,7 +89,6 @@ def test_get_removable_devices_none_removable(self, mocker): "subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen") ) def test_get_connected_devices_error(self, mocked_subprocess): - with pytest.raises(ExportException): self.cli.get_connected_devices() @@ -108,7 +107,6 @@ def test_get_partitioned_device_one_partition(self, mocked_call): @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_MULTI_PART) def test_get_partitioned_device_multi_partition(self, mocked_call): - with pytest.raises(ExportException) as ex: self.cli.get_partitioned_device(_SAMPLE_OUTPUT_MULTI_PART) @@ -126,7 +124,6 @@ def test_get_partitioned_device_lsblk_error(self, mocked_subprocess): side_effect=subprocess.CalledProcessError(1, "check_output"), ) def test_get_partitioned_device_multi_partition_error(self, mocked_call): - # Make sure we wrap CalledProcessError and throw our own exception with pytest.raises(ExportException) as ex: self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) @@ -135,7 +132,6 @@ def test_get_partitioned_device_multi_partition_error(self, mocked_call): @mock.patch("subprocess.check_call", return_value=0) def test_is_luks_volume_true(self, mocked_call): - # `sudo cryptsetup isLuks` returns 0 if true assert self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) @@ -144,7 +140,6 @@ def test_is_luks_volume_true(self, mocked_call): side_effect=subprocess.CalledProcessError(1, "check_call"), ) def test_is_luks_volume_false(self, mocked_subprocess): - # `sudo cryptsetup isLuks` returns 1 if false; CalledProcessError is thrown assert not self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) @@ -160,7 +155,6 @@ def test__get_luks_name_from_headers(self, mocked_subprocess): "subprocess.check_output", return_value=b"corrupted-or-invalid-header\n" ) def test__get_luks_name_from_headers_error_invalid(self, mocked_subprocess): - with pytest.raises(ExportException) as ex: self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) @@ -168,7 +162,6 @@ def test__get_luks_name_from_headers_error_invalid(self, mocked_subprocess): @mock.patch("subprocess.check_output", return_value=b"\n") def test__get_luks_name_from_headers_error_no_header(self, mocked_subprocess): - with pytest.raises(ExportException) as ex: self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) @@ -178,7 +171,6 @@ def test__get_luks_name_from_headers_error_no_header(self, mocked_subprocess): def test__get_luks_name_from_headers_error_nothing_returned( self, mocked_subprocess ): - with pytest.raises(ExportException) as ex: self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) diff --git a/tests/print/test_service.py b/tests/print/test_service.py index ffaee6861..cf5c6ca1a 100644 --- a/tests/print/test_service.py +++ b/tests/print/test_service.py @@ -265,7 +265,6 @@ def test__check_printer_setup(self, printers, mocker): @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_NO_PRINTER) def test__check_printer_setup_error_no_printer(self, mock_output): - with pytest.raises(ExportException) as ex: self.service._check_printer_setup() assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_FOUND @@ -277,7 +276,6 @@ def test__check_printer_setup_error_no_printer(self, mock_output): + SAMPLE_OUTPUT_LASERJET_PRINTER, ) def test__check_printer_setup_error_too_many_printers(self, mock_output): - with pytest.raises(ExportException) as ex: self.service._check_printer_setup() assert ex.value.sdstatus is Status.ERROR_MULTIPLE_PRINTERS_FOUND @@ -286,7 +284,6 @@ def test__check_printer_setup_error_too_many_printers(self, mock_output): "subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER ) def test__check_printer_setup_error_unsupported_printer(self, mock_output): - with pytest.raises(ExportException) as ex: self.service._check_printer_setup() assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED @@ -296,7 +293,6 @@ def test__check_printer_setup_error_unsupported_printer(self, mock_output): side_effect=subprocess.CalledProcessError(1, "check_output"), ) def test__check_printer_setup_error_checking_printer(self, mock_output): - with pytest.raises(ExportException) as ex: self.service._check_printer_setup() assert ex.value.sdstatus is Status.ERROR_UNKNOWN diff --git a/tests/test_directory.py b/tests/test_directory.py index 2f0a3a9ef..b0857f59c 100644 --- a/tests/test_directory.py +++ b/tests/test_directory.py @@ -8,7 +8,6 @@ class TestDirectory: - _REL_TRAVERSAL = "../../../whee" _SAFE_RELPATH = "./hi" _SAFE_RELPATH2 = "yay/a/path" diff --git a/tests/test_main.py b/tests/test_main.py index 41fce7f62..06da9ef66 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -54,7 +54,6 @@ def test_write_status(self, status, capsys): @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0", None]) def test_write_status_error(self, invalid_status, capsys): - with pytest.raises(ValueError): _write_status(Status(invalid_status)) From 2c2e0d4f08d751f5d24735f286f6bcb32176ebef Mon Sep 17 00:00:00 2001 From: Michael Z Date: Wed, 12 Jul 2023 10:25:29 -0400 Subject: [PATCH 570/751] Update dev requirements (with Python 3.8) --- requirements/dev-requirements.txt | 189 +++++++++++++++--------------- 1 file changed, 97 insertions(+), 92 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 4deb73f0b..6827b970b 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,9 +1,13 @@ # -# This file is autogenerated by pip-compile with python 3.9 +# This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in # +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 + # via pip-tools cffi==1.15.1 \ --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ @@ -70,34 +74,34 @@ cffi==1.15.1 \ --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 # via cryptography -click==8.0.1 \ - --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \ - --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6 +click==8.1.4 \ + --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ + --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 # via pip-tools -cryptography==39.0.1 \ - --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ - --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ - --hash=sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885 \ - --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ - --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ - --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ - --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ - --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ - --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ - --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ - --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ - --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ - --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ - --hash=sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef \ - --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ - --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ - --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ - --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ - --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ - --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ - --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ - --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ - --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 +cryptography==41.0.2 \ + --hash=sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711 \ + --hash=sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7 \ + --hash=sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd \ + --hash=sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e \ + --hash=sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58 \ + --hash=sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0 \ + --hash=sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d \ + --hash=sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83 \ + --hash=sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831 \ + --hash=sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766 \ + --hash=sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b \ + --hash=sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c \ + --hash=sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182 \ + --hash=sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f \ + --hash=sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa \ + --hash=sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4 \ + --hash=sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a \ + --hash=sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2 \ + --hash=sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76 \ + --hash=sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5 \ + --hash=sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee \ + --hash=sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f \ + --hash=sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14 # via # types-pyopenssl # types-redis @@ -109,45 +113,45 @@ mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via flake8 -mypy==1.0.0 \ - --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ - --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ - --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ - --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ - --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ - --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ - --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ - --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ - --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ - --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ - --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ - --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ - --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ - --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ - --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ - --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ - --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ - --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ - --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ - --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ - --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ - --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ - --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ - --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ - --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ - --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d +mypy==1.4.1 \ + --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ + --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ + --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ + --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ + --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ + --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ + --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ + --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ + --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ + --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ + --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ + --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ + --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ + --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ + --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ + --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ + --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ + --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ + --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ + --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ + --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ + --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ + --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ + --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ + --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ + --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b # via -r requirements/dev-requirements.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via mypy -pep517==0.11.0 \ - --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \ - --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2 - # via pip-tools -pip-tools==6.2.0 \ - --hash=sha256:77727ef7457d1865e61fe34c2b1439f9b971b570cc232616a22ce82ab89d357d \ - --hash=sha256:9ed38c73da4993e531694ea151f77048b4dbf2ba7b94c4a569daa39568cc6564 +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f + # via build +pip-tools==6.14.0 \ + --hash=sha256:06366be0e08d86b416407333e998b4d305d5bd925151b08942ed149380ba3e47 \ + --hash=sha256:c5ad042cd27c0b343b10db1db7f77a7d087beafbec59ae6df1bba4d3368dfe8c # via -r requirements/dev-requirements.in pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ @@ -161,48 +165,49 @@ pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build redis==3.3.11 \ --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 # via -r requirements/requirements.in -tomli==1.2.1 \ - --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \ - --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via + # build # mypy - # pep517 -types-docutils==0.19.1.4 \ - --hash=sha256:1b64b21b609ff1fc7791d3d930f14b56b36ad09029fd97e45e34cc889d671b5f \ - --hash=sha256:870d71f3663141f67a3c59d26d2c54a8c478c842208bb0b345fbf6036f49f561 - # via types-setuptools -types-pyopenssl==23.0.0.3 \ - --hash=sha256:6ca54d593f8b946f9570f9ed7457c41da3b518feff5e344851941a6209bea62b \ - --hash=sha256:847ab17a16475a882dc29898648a6a35ad0d3e11a5bba5aa8ab2f3435a8647cb + # pip-tools + # pyproject-hooks +types-pyopenssl==23.2.0.1 \ + --hash=sha256:0568553f104466f1b8e0db3360fbe6770137d02e21a1a45c209bf2b1b03d90d4 \ + --hash=sha256:beeb5d22704c625a1e4b6dc756355c5b4af0b980138b702a9d9f932acf020903 # via types-redis -types-redis==4.5.1.1 \ - --hash=sha256:081dfeec730df6e3f32ccbdafe3198873b7c02516c22d79cc2a40efdd69a3963 \ - --hash=sha256:c072e4824855f46d0a968509c3e0fa4789fc13b62d472064527bad3d1815aeed +types-redis==4.6.0.2 \ + --hash=sha256:a98f3386f44d045057696f3efc8869c53dda0060610e0fe3d8a4d391e2a8916a \ + --hash=sha256:d0efcd96f65fd2036437c29d8c12566cfdc549345d73eddacb0488b81aff9f9e # via -r requirements/dev-requirements.in -types-setuptools==67.3.0.1 \ - --hash=sha256:1a26d373036c720e566823b6edd664a2db4d138b6eeba856721ec1254203474f \ - --hash=sha256:a7e0f0816b5b449f5bcdc0efa43da91ff81dbe6941f293a6490d68a450e130a1 +types-setuptools==68.0.0.1 \ + --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ + --hash=sha256:cc5acbc464b106104899e9b9eb4955dd47e854753c8d4ee2ce697eaf0f4d74e1 # via -r requirements/dev-requirements.in -typing-extensions==3.10.0.0 \ - --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ - --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ - --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 +typing-extensions==4.7.1 \ + --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ + --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 # via mypy -wheel==0.37.0 \ - --hash=sha256:21014b2bd93c6d0034b6ba5d35e4eb284340e09d63c59aef6fc14b0f346146fd \ - --hash=sha256:e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 # via pip-tools # The following packages are considered to be unsafe in a requirements file: -pip==21.2.4 \ - --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ - --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 +pip==23.1.2 \ + --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ + --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 # via pip-tools -setuptools==57.4.0 \ - --hash=sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465 \ - --hash=sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6 +setuptools==68.0.0 \ + --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ + --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 # via pip-tools From 98d104e9a876673f97e13c0a1df3706ffc94a5da Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Wed, 26 Jul 2023 16:42:42 -0700 Subject: [PATCH 571/751] Remove CodeQL In other repositories we've decided that this analysis adds limited value for the time being. --- .github/workflows/codeql-analysis.yml | 71 --------------------------- 1 file changed, 71 deletions(-) delete mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index 0e907d316..000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,71 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -name: "CodeQL" - -on: - push: - branches: [main] - pull_request: - # The branches below must be a subset of the branches above - branches: [main] - schedule: - - cron: '0 3 * * 6' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # Override automatic language detection by changing the below list - # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] - language: ['python'] - # Learn more... - # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - # We must fetch at least the immediate parents so that if this is - # a pull request then we can checkout the head. - fetch-depth: 2 - - # If this run was triggered by a pull request event, then checkout - # the head of the pull request instead of the merge commit. - - run: git checkout HEAD^2 - if: ${{ github.event_name == 'pull_request' }} - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 From e437c59088848e1b7d4e29415ffe680ac80a5de2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 26 Jul 2023 22:36:49 -0700 Subject: [PATCH 572/751] Have CI wait for HTTP to be up on server dev environment The tcp port is available as soon as the container is running, but we actually want to wait for the HTTP server to be up, which means all the Rust code has been built and sources generated. dockerize already supports that, we just need to use the "http" protocol instead of "tcp". This allows us to get rid of the manual "sleep 30" as well. Fixes #183. --- .circleci/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 601b98320..c22e2c14a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -56,8 +56,7 @@ jobs: - run: name: Wait for server to be up and for test sources to load command: | - dockerize -wait tcp://127.0.0.1:8080 -timeout 30m - sleep 30 + dockerize -wait http://127.0.0.1:8080 -timeout 30m - run: name: Remove VCR cassettes and run tests against latest API command: | From 43c2ae5312a6976946d49a1a1cc9e0ecab750b6f Mon Sep 17 00:00:00 2001 From: Michael Z Date: Wed, 26 Jul 2023 09:32:58 -0400 Subject: [PATCH 573/751] Bump certifi dependency due to root certificate removal --- requirements/dev-requirements.txt | 6 +++--- requirements/requirements.in | 2 +- requirements/requirements.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index d269f0fb1..1440f6813 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -35,9 +35,9 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via # -r requirements/requirements.in # requests diff --git a/requirements/requirements.in b/requirements/requirements.in index 2a5c8b1ed..8e8b7f628 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,6 +1,6 @@ # Ensure these match client production dependencies -certifi>=2021.5.30 +certifi>=2023.07.22 charset-normalizer>=2.0.4 idna>=2.7 requests>=2.26.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 925e15f18..dab03b89d 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,9 +4,9 @@ # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via # -r requirements/requirements.in # requests From b12a3318129f0391229fcfc42a63ab0882f6ab72 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 27 Jul 2023 16:41:06 -0700 Subject: [PATCH 574/751] Minor CI updates Clarify comments, update machine image & Dockerize version --- .circleci/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c22e2c14a..18ab7a2f9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,8 +22,9 @@ jobs: working_directory: ~/project machine: enabled: true - # TODO: why is this using Ubuntu instead of Debian? - image: ubuntu-2004:202010-01 + # Because we are running Docker inside this job, we need a machine type. + # CircleCI does not currently offer Debian machine images. + image: ubuntu-2004:2023.07.1 environment: DOCKER_API_VERSION: 1.23 steps: @@ -31,7 +32,6 @@ jobs: - run: name: Install dependencies command: | - (cd $(pyenv root); git pull) pyenv install 3.9 pyenv global 3.9 make venv @@ -45,14 +45,14 @@ jobs: cd securedrop NUM_SOURCES=5 make dev background: true - - run: # As suggested in https://discuss.circleci.com/t/prevent-race-conditions-by-waiting-for-services-with-dockerize/11215 + - run: # We use dockerize to wait until the dev server is listening and we're ready to run tests name: Install dockerize command: | wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz environment: - DOCKERIZE_VERSION: v0.6.1 + DOCKERIZE_VERSION: v0.7.0 - run: name: Wait for server to be up and for test sources to load command: | From e1cd07d1151caf7a49c0cbda3a867c570de05c5d Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 31 Jul 2023 13:28:35 -0400 Subject: [PATCH 575/751] Update certifi to 2023.7.22 Fixes CVE-2023-37920. --- requirements/dev-requirements.txt | 6 +++--- requirements/requirements.in | 2 +- requirements/requirements.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 145a4b967..e14f0a563 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -35,9 +35,9 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via # -r requirements/requirements.in # requests diff --git a/requirements/requirements.in b/requirements/requirements.in index 8f11a868d..00b5b4ca6 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1,4 +1,4 @@ -certifi>=2022.12.07 +certifi>=2023.7.22 charset-normalizer>=2.0.4 idna>=2.7 pyyaml==5.4.1 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 952bd0c2f..f5095c605 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,9 +4,9 @@ # # pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in # -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via # -r requirements/requirements.in # requests From 2420769045297371a938f8cd4fe2503b70b0fd1f Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 31 Jul 2023 14:39:05 -0400 Subject: [PATCH 576/751] Update build-requirements with certifi localwheel hash Added in . --- requirements/build-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/build-requirements.txt b/requirements/build-requirements.txt index 36355f99d..abbd5984e 100644 --- a/requirements/build-requirements.txt +++ b/requirements/build-requirements.txt @@ -1,4 +1,4 @@ -certifi==2022.12.7 --hash=sha256:7f205a1a4f02f4970fb5d0e16457964bb30d6b678a766515278bc56e6eeb645f +certifi==2023.7.22 --hash=sha256:920fc822272317b0d13e60eef0405ddd7f921e08dd21150a9eb613c863e31c2a charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 pyyaml==5.4.1 --hash=sha256:9608c1b459ff310fe7fa78e8a9e12767a9a0ea9e3fa7cce116db58f95b61f56f --hash=sha256:f7190863a72d6eb89ed92e345e178a0803c439fd7126985b62c1c113cb01e534 From 77d0c51a1d628c4879907d81c9be46f083ca3fbc Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Mon, 31 Jul 2023 17:16:23 -0700 Subject: [PATCH 577/751] Clarify comment --- .circleci/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 18ab7a2f9..7da81f38a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,8 +22,7 @@ jobs: working_directory: ~/project machine: enabled: true - # Because we are running Docker inside this job, we need a machine type. - # CircleCI does not currently offer Debian machine images. + # TODO: This should be migrated to a Debian container as part of moving to GitHub Actions image: ubuntu-2004:2023.07.1 environment: DOCKER_API_VERSION: 1.23 From cf8bf957f8324b5d4d748d2dde8e74b08348652e Mon Sep 17 00:00:00 2001 From: Michael Z Date: Wed, 26 Jul 2023 09:48:01 -0400 Subject: [PATCH 578/751] Bump certifi dev dependency due to removal of root certificate --- requirements/dev-bookworm-requirements.in | 1 + requirements/dev-bookworm-requirements.txt | 10 ++++++---- requirements/dev-bullseye-requirements.in | 1 + requirements/dev-bullseye-requirements.txt | 10 ++++++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/requirements/dev-bookworm-requirements.in b/requirements/dev-bookworm-requirements.in index 8bad67377..4e3eb791b 100644 --- a/requirements/dev-bookworm-requirements.in +++ b/requirements/dev-bookworm-requirements.in @@ -2,6 +2,7 @@ -r requirements.in black +certifi>=2023.07.22 flake8 pip-tools pytest diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt index 380bb8c5c..c89930a71 100644 --- a/requirements/dev-bookworm-requirements.txt +++ b/requirements/dev-bookworm-requirements.txt @@ -51,10 +51,12 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -certifi==2023.5.7 \ - --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ - --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 - # via requests +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 + # via + # -r requirements/dev-bookworm-requirements.in + # requests charset-normalizer==3.2.0 \ --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ diff --git a/requirements/dev-bullseye-requirements.in b/requirements/dev-bullseye-requirements.in index b75bf7f7c..43216f80c 100644 --- a/requirements/dev-bullseye-requirements.in +++ b/requirements/dev-bullseye-requirements.in @@ -2,6 +2,7 @@ -r requirements.in black +certifi>=2023.07.22 flake8 pip-tools pytest diff --git a/requirements/dev-bullseye-requirements.txt b/requirements/dev-bullseye-requirements.txt index ef3de0c31..8ec35fd7a 100644 --- a/requirements/dev-bullseye-requirements.txt +++ b/requirements/dev-bullseye-requirements.txt @@ -51,10 +51,12 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -certifi==2023.5.7 \ - --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ - --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 - # via requests +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 + # via + # -r requirements/dev-bullseye-requirements.in + # requests charset-normalizer==3.2.0 \ --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ From bcc250b90e538334ce58b6c94609f450cea8f1fa Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 10 Aug 2023 16:24:41 -0400 Subject: [PATCH 579/751] Use types-redis<4, drop cryptography and other dev dependencies We're still using redis==3.3.11, so we should be pulling in those type stubs and not the ones for v4. Coincidentally, those stubs also happen to not have dependencies on cryptography and types-pyOpenSSL, which is very nice. Refs . --- requirements/dev-requirements.in | 2 +- requirements/dev-requirements.txt | 108 +----------------------------- 2 files changed, 4 insertions(+), 106 deletions(-) diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in index 28f7362de..3c10a63db 100644 --- a/requirements/dev-requirements.in +++ b/requirements/dev-requirements.in @@ -2,5 +2,5 @@ flake8 pip-tools mypy -types-redis +types-redis<4 types-setuptools diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 6827b970b..d58b33fb0 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -8,103 +8,10 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools -cffi==1.15.1 \ - --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ - --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ - --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ - --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ - --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ - --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ - --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ - --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ - --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ - --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ - --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ - --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ - --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ - --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ - --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ - --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ - --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ - --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ - --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ - --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ - --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ - --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ - --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ - --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ - --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ - --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ - --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ - --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ - --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ - --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ - --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ - --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ - --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ - --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ - --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ - --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ - --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ - --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ - --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ - --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ - --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ - --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ - --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ - --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ - --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ - --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ - --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ - --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ - --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ - --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ - --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ - --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ - --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ - --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ - --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ - --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ - --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ - --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ - --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ - --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ - --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ - --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ - --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ - --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 - # via cryptography click==8.1.4 \ --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 # via pip-tools -cryptography==41.0.2 \ - --hash=sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711 \ - --hash=sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7 \ - --hash=sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd \ - --hash=sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e \ - --hash=sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58 \ - --hash=sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0 \ - --hash=sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d \ - --hash=sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83 \ - --hash=sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831 \ - --hash=sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766 \ - --hash=sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b \ - --hash=sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c \ - --hash=sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182 \ - --hash=sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f \ - --hash=sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa \ - --hash=sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4 \ - --hash=sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a \ - --hash=sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2 \ - --hash=sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76 \ - --hash=sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5 \ - --hash=sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee \ - --hash=sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f \ - --hash=sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14 - # via - # types-pyopenssl - # types-redis flake8==6.0.0 \ --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 @@ -157,10 +64,6 @@ pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 # via flake8 -pycparser==2.21 \ - --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ - --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 - # via cffi pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd @@ -180,14 +83,9 @@ tomli==2.0.1 \ # build # mypy # pip-tools - # pyproject-hooks -types-pyopenssl==23.2.0.1 \ - --hash=sha256:0568553f104466f1b8e0db3360fbe6770137d02e21a1a45c209bf2b1b03d90d4 \ - --hash=sha256:beeb5d22704c625a1e4b6dc756355c5b4af0b980138b702a9d9f932acf020903 - # via types-redis -types-redis==4.6.0.2 \ - --hash=sha256:a98f3386f44d045057696f3efc8869c53dda0060610e0fe3d8a4d391e2a8916a \ - --hash=sha256:d0efcd96f65fd2036437c29d8c12566cfdc549345d73eddacb0488b81aff9f9e +types-redis==3.5.18 \ + --hash=sha256:15482304e8848c63b383b938ffaba7ebe0b7f8f33381ecc450ee03935213e166 \ + --hash=sha256:5c55c4b9e8ebdc6d57d4e47900b77d99f19ca0a563264af3f701246ed0926335 # via -r requirements/dev-requirements.in types-setuptools==68.0.0.1 \ --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ From ed54ff40115e8db7ab1d0d23f76769442f04151c Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Thu, 24 Aug 2023 19:07:25 -0400 Subject: [PATCH 580/751] Switch dependency management to Poetry --- MANIFEST.in | 3 +- Makefile | 62 +- README.md | 43 +- ...requirements.txt => build-requirements.txt | 0 poetry.lock | 1020 +++++++++++++++++ pyproject.toml | 25 + requirements/dev-requirements.in | 9 - requirements/dev-requirements.txt | 518 --------- requirements/requirements.in | 6 - requirements/requirements.txt | 65 -- 10 files changed, 1090 insertions(+), 661 deletions(-) rename requirements/build-requirements.txt => build-requirements.txt (100%) create mode 100644 poetry.lock delete mode 100644 requirements/dev-requirements.in delete mode 100644 requirements/dev-requirements.txt delete mode 100644 requirements/requirements.in delete mode 100644 requirements/requirements.txt diff --git a/MANIFEST.in b/MANIFEST.in index 1c69ebe30..adb7bc804 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,7 +4,6 @@ include securedrop_proxy/VERSION include changelog.md include config-example.yaml include qubes/securedrop.Proxy -include requirements/build-requirements.txt -include requirements/requirements.txt +include build-requirements.txt include securedrop_proxy/*.py include setup.py diff --git a/Makefile b/Makefile index 0ae4efa82..b1590ef97 100644 --- a/Makefile +++ b/Makefile @@ -3,83 +3,53 @@ .PHONY: all all: help -.PHONY: venv -venv: - python3 -m venv .venv ## Provision a Python 3 virtualenv for **development** - .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r "requirements/dev-requirements.txt" - .PHONY: bandit bandit: ## Run bandit with medium level excluding test-related folders - pip install --upgrade pip && \ - pip install --upgrade bandit!=1.6.0 && \ - bandit -ll --recursive securedrop_proxy + @echo "Running bandit security checks…" + @poetry run bandit -ll --recursive securedrop_proxy .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities - pip install --upgrade safety && \ - for req_file in `find . -type f -name '*requirements.txt'`; do \ - echo "Checking file $$req_file" \ - && safety check --full-report -r $$req_file \ - && echo -e '\n' \ - || exit 1; \ - done + @echo "Running safety against build requirements…" + @poetry run safety check --full-report -r build-requirements.txt .PHONY: lint lint: check-isort check-black mypy ## Run isort, black and flake8 and mypy - @flake8 securedrop_proxy tests + @poetry run flake8 securedrop_proxy tests .PHONY: mypy mypy: ## Run mypy static type checker - @mypy --ignore-missing-imports securedrop_proxy + @poetry run mypy --ignore-missing-imports securedrop_proxy .PHONY: black black: ## Run black for file formatting - @black securedrop_proxy tests + @echo "Running black (may result in changes in your working directory)…" + @poetry run black securedrop_proxy tests .PHONY: check-black check-black: ## Check Python source code formatting with black - @black --check --diff securedrop_proxy tests + @echo "Running black formatting check…" + @poetry run black --check --diff securedrop_proxy tests .PHONY: isort isort: ## Run isort for file formatting - @isort securedrop_proxy/*.py tests/*.py + @echo "Running isort (may result in changes in your working directory)…" + @poetry run isort securedrop_proxy/*.py tests/*.py .PHONY: check-isort check-isort: ## Check isort for file formatting - @isort --check-only --diff securedrop_proxy/*.py tests/*.py - -.PHONY: sync-requirements -sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies - rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in - -.PHONY: requirements -requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in - pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dependency -update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dev-only-dependencies -update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in - $(MAKE) sync-requirements - @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ - done < 'requirements/dev-requirements.in' + @echo "Running isort module ordering check…" + @poetry run isort --check-only --diff securedrop_proxy/*.py tests/*.py .PHONY: test test: clean .coverage ## Runs tests with coverage .coverage: - @coverage run --source securedrop_proxy -m unittest + @poetry run coverage run --source securedrop_proxy -m unittest .PHONY: browse-coverage browse-coverage: .coverage ## Generates and opens HTML coverage report - @coverage html + @poetry run coverage html @xdg-open htmlcov/index.html 2>/dev/null || open htmlcov/index.html 2>/dev/null .PHONY: check diff --git a/README.md b/README.md index 6d80117f1..2204be5bc 100644 --- a/README.md +++ b/README.md @@ -29,27 +29,40 @@ https://github.com/freedomofpress/securedrop-workstation/issues/107. #### Quick Start -To try the proxy script, create a virtual environment and install the -requirements. In the root of the project directory, run +1. [Install Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) +2. Run `make test` to verify the installation -``` -make venv -source .venv/bin/activate -make test -``` +#### Managing Dependencies -#### Update Dependencies +We use Poetry to manage dependencies for this project. -If you're adding or updating a dependency, you need to: +### Development dependencies -1. Modify either `dev-requirements.in` and `requirements.in` (depending on whether it is prod or dev only) and then run `make update-pip-dependencies`. This will generate `dev-requirements.txt` and `requirements.txt`. +You can add development dependencies via `poetry add --group dev`. +Make sure you commit changes to the lockfile along with changes to `pyproject.toml`. -2. For building a debian package from this project, we use the requirements in -`build-requirements.txt` which uses our pip mirror, i.e. the hashes in that file point to -wheels on our pip mirror. A maintainer will need to add -the updated dependency to our pip mirror (you can request this in the PR). +To update the dependency to the latest version within the specified +version constraints, simply run `poetry update ` and commit the resutling +changes. -3. Once the pip mirror is updated, you should checkout the [securedrop-debian-packaging repo](https://github.com/freedomofpress/securedrop-debian-packaging) and run `make requirements`. Commit the `build-requirements.txt` that results and add it to your PR. +To update to a new major version (e.g., from 1.0.0 to 2.0.0), you will typically have to +update `pyproject.toml`. + +### Production dependencies + +To add a production dependency, use `poetry add `, and to update it, +use `poetry update `. + +For our production Debian packages, we use locally built wheels instead of +downloading wheels from PyPI. + +This means that whenever you add or update a production dependency, you also +have to build and commit a new wheel according to the process described in the +[securedrop-builder](https://github.com/freedomofpress/securedrop-builder) +repository. + +This will result in an updated `build-requirements.txt` file you can add to your +PR in this repository. ## Making a Release diff --git a/requirements/build-requirements.txt b/build-requirements.txt similarity index 100% rename from requirements/build-requirements.txt rename to build-requirements.txt diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..784188f39 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1020 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "bandit" +version = "1.7.5" +description = "Security oriented static analyser for python code." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, + {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +rich = "*" +stevedore = ">=1.20.0" + +[package.extras] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] + +[[package]] +name = "black" +version = "23.7.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "2.0.4" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.5.0" +files = [ + {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, + {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, +] + +[package.extras] +unicode-backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.3.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, + {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, + {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, + {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, + {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, + {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, + {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, + {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, + {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, + {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, + {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, + {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, + {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, + {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, + {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, + {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, + {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, + {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, + {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, + {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, + {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, + {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "dparse" +version = "0.6.3" +description = "A parser for Python dependency files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, + {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, +] + +[package.dependencies] +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +conda = ["pyyaml"] +pipenv = ["pipenv (<=2022.12.19)"] + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.37" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, + {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] + +[[package]] +name = "idna" +version = "3.2" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, + {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, +] + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "mypy" +version = "1.5.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, + {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, + {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, + {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, + {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, + {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, + {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, + {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, + {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, + {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, + {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, + {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, + {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, + {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, + {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, + {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, + {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, + {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, + {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + +[[package]] +name = "pbr" +version = "5.11.1" +description = "Python Build Reasonableness" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, + {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, +] + +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pycodestyle" +version = "2.11.0" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, + {file = "pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, +] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyyaml" +version = "5.4.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, + {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, + {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, + {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, + {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, + {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, + {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, + {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, + {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.5.3" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.5.3-py3-none-any.whl", hash = "sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9"}, + {file = "rich-13.5.3.tar.gz", hash = "sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "ruamel-yaml" +version = "0.17.32" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3" +files = [ + {file = "ruamel.yaml-0.17.32-py3-none-any.whl", hash = "sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447"}, + {file = "ruamel.yaml-0.17.32.tar.gz", hash = "sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} + +[package.extras] +docs = ["ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.7" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.5" +files = [ + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, + {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, +] + +[[package]] +name = "safety" +version = "2.3.4" +description = "Checks installed dependencies for known vulnerabilities and licenses." +optional = false +python-versions = "*" +files = [ + {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, + {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, +] + +[package.dependencies] +Click = ">=8.0.2" +dparse = ">=0.6.2" +packaging = ">=21.0" +requests = "*" +"ruamel.yaml" = ">=0.17.21" +setuptools = ">=19.3" + +[package.extras] +github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +gitlab = ["python-gitlab (>=1.3.0)"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "smmap" +version = "5.0.1" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[package]] +name = "stevedore" +version = "5.1.0" +description = "Manage dynamic plugins for Python applications" +optional = false +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.11" +description = "Typing stubs for PyYAML" +optional = false +python-versions = "*" +files = [ + {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, + {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, +] + +[[package]] +name = "types-requests" +version = "2.31.0.2" +description = "Typing stubs for requests" +optional = false +python-versions = "*" +files = [ + {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"}, + {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"}, +] + +[package.dependencies] +types-urllib3 = "*" + +[[package]] +name = "types-urllib3" +version = "1.26.25.14" +description = "Typing stubs for urllib3" +optional = false +python-versions = "*" +files = [ + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "urllib3" +version = "1.26.6" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +files = [ + {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, + {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, +] + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "vcrpy" +version = "5.1.0" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "vcrpy-5.1.0-py2.py3-none-any.whl", hash = "sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e"}, + {file = "vcrpy-5.1.0.tar.gz", hash = "sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2"}, +] + +[package.dependencies] +PyYAML = "*" +urllib3 = {version = "<2", markers = "python_version < \"3.10\""} +wrapt = "*" +yarl = "*" + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "8fe8dfaaea2b81e6262ab59080e35c12c680ac67cd1c3fe130b061f7ee4fa8ce" diff --git a/pyproject.toml b/pyproject.toml index 7eaeaea01..c65f11a97 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,3 +3,28 @@ line-length = 100 [tool.isort] line_length = 100 + +[tool.poetry] +name = "securedrop-proxy" +version = "0.1.0" +description = "Qubes RPC proxy service for the SecureDrop Client" +authors = ["SecureDrop Team"] +license = "GPLv3+" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.9" +pyyaml = "^5.4.1" +requests = "^2.31.0" + +[tool.poetry.group.dev.dependencies] +black = "^23.7.0" +coverage = "^7.3.0" +flake8 = "^6.1.0" +isort = "^5.12.0" +mypy = "^1.5.1" +types-PyYAML = "^6.0.12.11" +types-requests = "^2.31.0.2" +vcrpy = "^5.1.0" +bandit = "*" +safety = "*" diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in deleted file mode 100644 index 9f5c23c39..000000000 --- a/requirements/dev-requirements.in +++ /dev/null @@ -1,9 +0,0 @@ -black -coverage -flake8 -isort -mypy -pip-tools -types-PyYAML -types-requests -vcrpy diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt deleted file mode 100644 index e14f0a563..000000000 --- a/requirements/dev-requirements.txt +++ /dev/null @@ -1,518 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in -# -black==23.3.0 \ - --hash=sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5 \ - --hash=sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915 \ - --hash=sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326 \ - --hash=sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940 \ - --hash=sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b \ - --hash=sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30 \ - --hash=sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c \ - --hash=sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c \ - --hash=sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab \ - --hash=sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27 \ - --hash=sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2 \ - --hash=sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961 \ - --hash=sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9 \ - --hash=sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb \ - --hash=sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70 \ - --hash=sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331 \ - --hash=sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2 \ - --hash=sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266 \ - --hash=sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d \ - --hash=sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6 \ - --hash=sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b \ - --hash=sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925 \ - --hash=sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8 \ - --hash=sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4 \ - --hash=sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3 - # via -r requirements/dev-requirements.in -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via - # -r requirements/requirements.in - # requests -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 - # via - # black - # pip-tools -coverage==7.2.7 \ - --hash=sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f \ - --hash=sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2 \ - --hash=sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a \ - --hash=sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a \ - --hash=sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01 \ - --hash=sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6 \ - --hash=sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7 \ - --hash=sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f \ - --hash=sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02 \ - --hash=sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c \ - --hash=sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063 \ - --hash=sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a \ - --hash=sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5 \ - --hash=sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959 \ - --hash=sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97 \ - --hash=sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6 \ - --hash=sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f \ - --hash=sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9 \ - --hash=sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5 \ - --hash=sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f \ - --hash=sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562 \ - --hash=sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe \ - --hash=sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9 \ - --hash=sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f \ - --hash=sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb \ - --hash=sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb \ - --hash=sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1 \ - --hash=sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb \ - --hash=sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250 \ - --hash=sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e \ - --hash=sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511 \ - --hash=sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5 \ - --hash=sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59 \ - --hash=sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2 \ - --hash=sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d \ - --hash=sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3 \ - --hash=sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4 \ - --hash=sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de \ - --hash=sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9 \ - --hash=sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833 \ - --hash=sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0 \ - --hash=sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9 \ - --hash=sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d \ - --hash=sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050 \ - --hash=sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d \ - --hash=sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6 \ - --hash=sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353 \ - --hash=sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb \ - --hash=sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e \ - --hash=sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8 \ - --hash=sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495 \ - --hash=sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2 \ - --hash=sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd \ - --hash=sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27 \ - --hash=sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1 \ - --hash=sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818 \ - --hash=sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4 \ - --hash=sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e \ - --hash=sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850 \ - --hash=sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3 - # via -r requirements/dev-requirements.in -flake8==6.0.0 \ - --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ - --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 - # via -r requirements/dev-requirements.in -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 - # via - # -r requirements/requirements.in - # requests - # yarl -isort==5.12.0 \ - --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ - --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 - # via -r requirements/dev-requirements.in -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -multidict==6.0.4 \ - --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ - --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ - --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ - --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ - --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ - --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ - --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ - --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ - --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ - --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ - --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ - --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ - --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ - --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ - --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ - --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ - --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ - --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ - --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ - --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ - --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ - --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ - --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ - --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ - --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ - --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ - --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ - --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ - --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ - --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ - --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ - --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ - --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ - --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ - --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ - --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ - --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ - --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ - --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ - --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ - --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ - --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ - --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ - --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ - --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ - --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ - --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ - --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ - --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ - --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ - --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ - --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ - --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ - --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ - --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ - --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ - --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ - --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ - --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ - --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ - --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ - --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ - --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ - --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ - --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ - --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ - --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ - --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ - --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ - --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ - --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ - --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ - --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ - --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba - # via yarl -mypy==1.4.0 \ - --hash=sha256:0cf0ca95e4b8adeaf07815a78b4096b65adf64ea7871b39a2116c19497fcd0dd \ - --hash=sha256:0f98973e39e4a98709546a9afd82e1ffcc50c6ec9ce6f7870f33ebbf0bd4f26d \ - --hash=sha256:19d42b08c7532d736a7e0fb29525855e355fa51fd6aef4f9bbc80749ff64b1a2 \ - --hash=sha256:210fe0f39ec5be45dd9d0de253cb79245f0a6f27631d62e0c9c7988be7152965 \ - --hash=sha256:3b1b5c875fcf3e7217a3de7f708166f641ca154b589664c44a6fd6d9f17d9e7e \ - --hash=sha256:3f2b353eebef669529d9bd5ae3566905a685ae98b3af3aad7476d0d519714758 \ - --hash=sha256:50f65f0e9985f1e50040e603baebab83efed9eb37e15a22a4246fa7cd660f981 \ - --hash=sha256:53c2a1fed81e05ded10a4557fe12bae05b9ecf9153f162c662a71d924d504135 \ - --hash=sha256:5a0ee54c2cb0f957f8a6f41794d68f1a7e32b9968675ade5846f538504856d42 \ - --hash=sha256:62bf18d97c6b089f77f0067b4e321db089d8520cdeefc6ae3ec0f873621c22e5 \ - --hash=sha256:653863c75f0dbb687d92eb0d4bd9fe7047d096987ecac93bb7b1bc336de48ebd \ - --hash=sha256:67242d5b28ed0fa88edd8f880aed24da481929467fdbca6487167cb5e3fd31ff \ - --hash=sha256:6ba9a69172abaa73910643744d3848877d6aac4a20c41742027dcfd8d78f05d9 \ - --hash=sha256:6c34d43e3d54ad05024576aef28081d9d0580f6fa7f131255f54020eb12f5352 \ - --hash=sha256:7461469e163f87a087a5e7aa224102a30f037c11a096a0ceeb721cb0dce274c8 \ - --hash=sha256:94a81b9354545123feb1a99b960faeff9e1fa204fce47e0042335b473d71530d \ - --hash=sha256:a0b2e0da7ff9dd8d2066d093d35a169305fc4e38db378281fce096768a3dbdbf \ - --hash=sha256:a34eed094c16cad0f6b0d889811592c7a9b7acf10d10a7356349e325d8704b4f \ - --hash=sha256:a3af348e0925a59213244f28c7c0c3a2c2088b4ba2fe9d6c8d4fbb0aba0b7d05 \ - --hash=sha256:b4c734d947e761c7ceb1f09a98359dd5666460acbc39f7d0a6b6beec373c5840 \ - --hash=sha256:bba57b4d2328740749f676807fcf3036e9de723530781405cc5a5e41fc6e20de \ - --hash=sha256:ca33ab70a4aaa75bb01086a0b04f0ba8441e51e06fc57e28585176b08cad533b \ - --hash=sha256:de1e7e68148a213036276d1f5303b3836ad9a774188961eb2684eddff593b042 \ - --hash=sha256:f051ca656be0c179c735a4c3193f307d34c92fdc4908d44fd4516fbe8b10567d \ - --hash=sha256:f5984a8d13d35624e3b235a793c814433d810acba9eeefe665cdfed3d08bc3af \ - --hash=sha256:f7a5971490fd4a5a436e143105a1f78fa8b3fe95b30fff2a77542b4f3227a01f - # via -r requirements/dev-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build -pathspec==0.11.1 \ - --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ - --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 - # via black -pip==23.1.2 \ - --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ - --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 - # via pip-tools -pip-tools==6.13.0 \ - --hash=sha256:50943f151d87e752abddec8158622c34ad7f292e193836e90e30d87da60b19d9 \ - --hash=sha256:61d46bd2eb8016ed4a924e196e6e5b0a268cd3babd79e593048720db23522bb1 - # via -r requirements/dev-requirements.in -platformdirs==3.7.0 \ - --hash=sha256:87fbf6473e87c078d536980ba970a472422e94f17b752cfad17024c18876d481 \ - --hash=sha256:cfd065ba43133ff103ab3bd10aecb095c2a0035fcd1f07217c9376900d94ba07 - # via black -pycodestyle==2.10.0 \ - --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ - --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 - # via flake8 -pyflakes==3.0.1 \ - --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ - --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd - # via flake8 -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pyyaml==5.4.1 \ - --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ - --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ - --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ - --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ - --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ - --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ - --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ - --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ - --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ - --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ - --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ - --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ - --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ - --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ - --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ - --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ - --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ - --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ - --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ - --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ - --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ - --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ - --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ - --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ - --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ - --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ - --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 - # via - # -r requirements/requirements.in - # vcrpy -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via -r requirements/requirements.in -setuptools==68.0.0 \ - --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ - --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 - # via pip-tools -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via vcrpy -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # black - # build - # mypy -types-pyyaml==6.0.12.10 \ - --hash=sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f \ - --hash=sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97 - # via -r requirements/dev-requirements.in -types-requests==2.31.0.1 \ - --hash=sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac \ - --hash=sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3 - # via -r requirements/dev-requirements.in -types-urllib3==1.26.25.13 \ - --hash=sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5 \ - --hash=sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c - # via types-requests -typing-extensions==4.6.3 \ - --hash=sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26 \ - --hash=sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5 - # via - # black - # mypy -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f - # via - # -r requirements/requirements.in - # requests - # vcrpy -vcrpy==4.3.1 \ - --hash=sha256:24e2d450bf1c2f9f9b4246ee91beb7d58f862a9f2f030514b14783b83c5146ec \ - --hash=sha256:35398f1b373f32340f39d735ea45f40d679ace316f3dddf8cbcbc2f120e6d1d0 - # via -r requirements/dev-requirements.in -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 - # via pip-tools -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 - # via vcrpy -yarl==1.9.2 \ - --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ - --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ - --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ - --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ - --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ - --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ - --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ - --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ - --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ - --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ - --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ - --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ - --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ - --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ - --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ - --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ - --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ - --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ - --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ - --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ - --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ - --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ - --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ - --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ - --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ - --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ - --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ - --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ - --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ - --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ - --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ - --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ - --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ - --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ - --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ - --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ - --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ - --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ - --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ - --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ - --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ - --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ - --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ - --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ - --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ - --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ - --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ - --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ - --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ - --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ - --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ - --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ - --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ - --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ - --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ - --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ - --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ - --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ - --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ - --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ - --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ - --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ - --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ - --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ - --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ - --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ - --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ - --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ - --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ - --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ - --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ - --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ - --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ - --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 - # via vcrpy diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index 00b5b4ca6..000000000 --- a/requirements/requirements.in +++ /dev/null @@ -1,6 +0,0 @@ -certifi>=2023.7.22 -charset-normalizer>=2.0.4 -idna>=2.7 -pyyaml==5.4.1 -requests>=2.31.0 -urllib3>=1.26.5 diff --git a/requirements/requirements.txt b/requirements/requirements.txt deleted file mode 100644 index f5095c605..000000000 --- a/requirements/requirements.txt +++ /dev/null @@ -1,65 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in -# -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via - # -r requirements/requirements.in - # requests -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 - # via - # -r requirements/requirements.in - # requests -pyyaml==5.4.1 \ - --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ - --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ - --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ - --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ - --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ - --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ - --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ - --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ - --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ - --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ - --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ - --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ - --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ - --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ - --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ - --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ - --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ - --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ - --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ - --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ - --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ - --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ - --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ - --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ - --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ - --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ - --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 - # via -r requirements/requirements.in -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via -r requirements/requirements.in -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f - # via - # -r requirements/requirements.in - # requests From 2891a69ba5dde9ef516a0beaaf729365ade412e9 Mon Sep 17 00:00:00 2001 From: Erik Moeller Date: Tue, 26 Sep 2023 20:51:52 -0400 Subject: [PATCH 581/751] Update CircleCI config to use Poetry We're installing the Poetry system package on Debian Bookworm -- that's generally a preferable strategy going forward, and in fact, pip will error out if you attempt to install it from PyPI. This necessitates some conditional logic we can drop once we move fully to Bookworm. --- .circleci/config.yml | 58 ++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d151e370b..a39a4c5b3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,26 +1,41 @@ --- common-steps: + - &install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + - &install_testing_dependencies run: name: Install testing dependencies command: | - set -e - apt update && apt install -y git gnupg make python3-dev python3-venv + apt-get install --yes --no-install-recommends git gnupg make + poetry install --no-ansi - &install_build_dependencies run: name: Install build dependencies command: | set -e - apt update && apt install -y git make sudo + apt-get update && apt-get install --yes git make sudo - &run_unit_tests run: name: Install requirements and run unit tests command: | - set -e - make venv - source .venv/bin/activate export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata make test @@ -28,9 +43,6 @@ common-steps: run: name: Run lint, type checking, code formatting command: | - set -e - make venv - source .venv/bin/activate make lint - &check_security @@ -38,8 +50,7 @@ common-steps: name: Run static analysis on source code to find security issues command: | set -e - make venv - source .venv/bin/activate + poetry update bandit make bandit - &check_python_dependencies_for_vulnerabilities @@ -47,8 +58,7 @@ common-steps: name: Check Python dependencies for known vulnerabilities command: | set -e - make venv - source .venv/bin/activate + poetry update safety make safety - &install_packaging_dependencies @@ -59,10 +69,11 @@ common-steps: mkdir ~/packaging && cd ~/packaging # local builds may not have an ssh url, so || true git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-debian-packaging.git - cd securedrop-debian-packaging + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder apt-get update && apt-get install -y sudo make make install-deps + source .venv/bin/activate PKG_DIR=~/project make requirements - &verify_requirements @@ -78,9 +89,10 @@ common-steps: run: name: Build debian package command: | - cd ~/packaging/securedrop-debian-packaging + cd ~/packaging/securedrop-builder export PKG_VERSION=1000.0 export PKG_PATH=~/project/ + source .venv/bin/activate make securedrop-proxy version: 2.1 @@ -93,8 +105,8 @@ jobs: docker: &docker - image: debian:<< parameters.image >> steps: - - *install_build_dependencies - checkout + - *install_build_dependencies - *install_packaging_dependencies - *verify_requirements - *build_debian_package @@ -103,8 +115,9 @@ jobs: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies - checkout + - *install_poetry + - *install_testing_dependencies - *run_unit_tests - store_test_results: path: test-results @@ -113,24 +126,27 @@ jobs: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies - checkout + - *install_poetry + - *install_testing_dependencies - *run_lint check-security: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies - checkout + - *install_poetry + - *install_testing_dependencies - *check_security check-python-security: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies - checkout + - *install_poetry + - *install_testing_dependencies - *check_python_dependencies_for_vulnerabilities From 21545a0e7d14aeff9fc2ba37c72efd5e02b0edb3 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 3 Nov 2023 13:50:12 -0400 Subject: [PATCH 582/751] Migrate dependency management to poetry Switch dependency management to use poetry, which is much nicer than pip-tools. This is largely based off of and applies the same changes to the Makefile and CI. --- .circleci/config.yml | 38 +- MANIFEST.in | 5 +- Makefile | 50 +- README.md | 12 +- ...requirements.txt => build-requirements.txt | 0 poetry.lock | 733 ++++++++++++++++++ pyproject.toml | 20 + requirements/dev-requirements.in | 6 - requirements/dev-requirements.txt | 111 --- requirements/requirements.in | 1 - requirements/requirements.txt | 10 - 11 files changed, 801 insertions(+), 185 deletions(-) rename requirements/build-requirements.txt => build-requirements.txt (100%) create mode 100644 poetry.lock delete mode 100644 requirements/dev-requirements.in delete mode 100644 requirements/dev-requirements.txt delete mode 100644 requirements/requirements.in delete mode 100644 requirements/requirements.txt diff --git a/.circleci/config.yml b/.circleci/config.yml index da9d88844..2391acf1b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,12 +1,34 @@ --- common-steps: + - &install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + + - &install_testing_dependencies + run: + name: Install testing dependencies + command: | + apt-get install --yes --no-install-recommends git gnupg make + poetry install --no-ansi + - &run_tests run: name: Install requirements and run tests command: | - apt-get update && apt-get install -y make python3-venv - make venv - source .venv/bin/activate make check - &install_packaging_dependencies @@ -15,9 +37,10 @@ common-steps: command: | apt-get update && apt-get install -y git git-lfs make sudo mkdir ~/packaging && cd ~/packaging - git clone https://github.com/freedomofpress/securedrop-debian-packaging.git - cd securedrop-debian-packaging + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder make install-deps + source .venv/bin/activate PKG_DIR=~/project make requirements - &verify_requirements @@ -33,9 +56,10 @@ common-steps: run: name: Build debian package command: | - cd ~/packaging/securedrop-debian-packaging + cd ~/packaging/securedrop-builder export PKG_VERSION=1000.0 export PKG_PATH=~/project/ + source .venv/bin/activate make securedrop-log version: 2 @@ -45,6 +69,8 @@ jobs: - image: debian:bullseye steps: - checkout + - *install_poetry + - *install_testing_dependencies - *run_tests build-bullseye: diff --git a/MANIFEST.in b/MANIFEST.in index 17086b81b..b1e9a7fa9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,11 +1,10 @@ include LICENSE include README.md include changelog.md -include requirements/build-requirements.txt -include requirements/requirements.txt +include build-requirements.txt include securedrop-log* include securedrop-redis-log include securedrop.Log include sd-rsyslog* include sdlog.conf -include VERSION \ No newline at end of file +include VERSION diff --git a/Makefile b/Makefile index c0b027a84..dbf828e4a 100644 --- a/Makefile +++ b/Makefile @@ -1,66 +1,32 @@ DEFAULT_GOAL: help SHELL := /bin/bash -.PHONY: venv -venv: ## Provision a Python 3 virtualenv for **development** - python3 -m venv .venv - .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r requirements/dev-requirements.txt - # Bandit is a static code analysis tool to detect security vulnerabilities in Python applications # https://wiki.openstack.org/wiki/Security/Projects/Bandit .PHONY: bandit bandit: ## Run bandit with medium level excluding test-related folders - pip install --upgrade pip && \ - pip install --upgrade bandit!=1.6.0 && \ - bandit -ll --recursive . --exclude tests,.venv + @echo "Running bandit security checks…" + @poetry run bandit -ll --recursive . --exclude tests,.venv .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities - pip install --upgrade safety && \ - for req_file in `find . -type f -name '*requirements.txt'`; do \ - echo "Checking file $$req_file" \ - && safety check --full-report -r $$req_file \ - && echo -e '\n' \ - || exit 1; \ - done - -.PHONY: sync-requirements -sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies - rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in - -.PHONY: requirements -requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in - pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dependency -update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dev-only-dependencies -update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in - $(MAKE) sync-requirements - @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ - done < 'requirements/dev-requirements.in' + @echo "Running safety against build requirements…" + @poetry run safety check --full-report -r build-requirements.txt .PHONY: check check: flake8 mypy test .PHONY: flake8 flake8: ## Run flake8 to lint Python files - flake8 + @poetry run flake8 mypy: ## Type check Python files - mypy + @poetry run mypy test: ## Run Python unit tests - python3 -m unittest + @poetry run python3 -m unittest -# Explaination of the below shell command should it ever break. +# Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets # 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption diff --git a/README.md b/README.md index 9bce5f6ba..88e0398db 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ # securedrop-log -This is a Python module and qrexec service for logging in Qubes for [SecureDrop](https://securedrop.org). +`securedrop-log` is part of the [SecureDrop +Workstation](https://github.com/freedomofpress/securedrop-workstation) project. -## How to upgrade the dependencies? +This is a Python module and qrexec service for logging in Qubes. -To upgrade one single Python dependency, say `redis`, run the following: +#### Quick Start -```bash -PACKAGE=redis make upgrade-pip -``` +1. [Install Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) +2. Run `make test` to verify the installation ## How to use/try this? diff --git a/requirements/build-requirements.txt b/build-requirements.txt similarity index 100% rename from requirements/build-requirements.txt rename to build-requirements.txt diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..85f1d56c4 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,733 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "bandit" +version = "1.7.5" +description = "Security oriented static analyser for python code." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, + {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +rich = "*" +stevedore = ">=1.20.0" + +[package.extras] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "dparse" +version = "0.6.3" +description = "A parser for Python dependency files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, + {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, +] + +[package.dependencies] +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +conda = ["pyyaml"] +pipenv = ["pipenv (<=2022.12.19)"] + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "gitdb" +version = "4.0.11" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.40" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mypy" +version = "1.6.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.6" +files = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pbr" +version = "5.11.1" +description = "Python Build Reasonableness" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, + {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, +] + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "redis" +version = "3.3.11" +description = "Python client for Redis key-value store" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "redis-3.3.11-py2.py3-none-any.whl", hash = "sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62"}, + {file = "redis-3.3.11.tar.gz", hash = "sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2"}, +] + +[package.extras] +hiredis = ["hiredis (>=0.1.3)"] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.6.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "ruamel-yaml" +version = "0.18.5" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.5-py3-none-any.whl", hash = "sha256:a013ac02f99a69cdd6277d9664689eb1acba07069f912823177c5eced21a6ada"}, + {file = "ruamel.yaml-0.18.5.tar.gz", hash = "sha256:61917e3a35a569c1133a8f772e1226961bf5a1198bea7e23f06a0841dea1ab0e"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "safety" +version = "2.3.5" +description = "Checks installed dependencies for known vulnerabilities and licenses." +optional = false +python-versions = "*" +files = [ + {file = "safety-2.3.5-py3-none-any.whl", hash = "sha256:2227fcac1b22b53c1615af78872b48348661691450aa25d6704a5504dbd1f7e2"}, + {file = "safety-2.3.5.tar.gz", hash = "sha256:a60c11f8952f412cbb165d70cb1f673a3b43a2ba9a93ce11f97e6a4de834aa3a"}, +] + +[package.dependencies] +Click = ">=8.0.2" +dparse = ">=0.6.2" +packaging = ">=21.0,<22.0" +requests = "*" +"ruamel.yaml" = ">=0.17.21" +setuptools = ">=19.3" + +[package.extras] +github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +gitlab = ["python-gitlab (>=1.3.0)"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "smmap" +version = "5.0.1" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[package]] +name = "stevedore" +version = "5.1.0" +description = "Manage dynamic plugins for Python applications" +optional = false +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "types-redis" +version = "3.5.18" +description = "Typing stubs for redis" +optional = false +python-versions = "*" +files = [ + {file = "types-redis-3.5.18.tar.gz", hash = "sha256:15482304e8848c63b383b938ffaba7ebe0b7f8f33381ecc450ee03935213e166"}, + {file = "types_redis-3.5.18-py3-none-any.whl", hash = "sha256:5c55c4b9e8ebdc6d57d4e47900b77d99f19ca0a563264af3f701246ed0926335"}, +] + +[[package]] +name = "types-setuptools" +version = "68.2.0.0" +description = "Typing stubs for setuptools" +optional = false +python-versions = "*" +files = [ + {file = "types-setuptools-68.2.0.0.tar.gz", hash = "sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"}, + {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "urllib3" +version = "2.0.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "47eeeed0a2f5016dc51f59e43b2b823e8137076ca7e1720b1db5d836839aeec1" diff --git a/pyproject.toml b/pyproject.toml index 0db7522bb..cbca5340e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,23 @@ +[tool.poetry] +name = "securedrop-log" +version = "0.1.0" +description = "SecureDrop Qubes logging scripts" +authors = ["SecureDrop Team"] +license = "GPLv3+" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.9" +redis = "=3.3.11" + +[tool.poetry.group.dev.dependencies] +flake8 = "^6.0.0" +mypy = "^1.4.1" +types-redis = "<4" +types-setuptools = "^68.0.0" +bandit = "*" +safety = "*" + [tool.mypy] python_version = "3.9" scripts_are_modules = true diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in deleted file mode 100644 index 3c10a63db..000000000 --- a/requirements/dev-requirements.in +++ /dev/null @@ -1,6 +0,0 @@ -flake8 -pip-tools - -mypy -types-redis<4 -types-setuptools diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt deleted file mode 100644 index d58b33fb0..000000000 --- a/requirements/dev-requirements.txt +++ /dev/null @@ -1,111 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.8 -# To update, run: -# -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in -# -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 - # via pip-tools -click==8.1.4 \ - --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ - --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 - # via pip-tools -flake8==6.0.0 \ - --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ - --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 - # via -r requirements/dev-requirements.in -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -mypy==1.4.1 \ - --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ - --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ - --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ - --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ - --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ - --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ - --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ - --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ - --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ - --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ - --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ - --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ - --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ - --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ - --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ - --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ - --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ - --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ - --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ - --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ - --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ - --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ - --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ - --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ - --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ - --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b - # via -r requirements/dev-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via build -pip-tools==6.14.0 \ - --hash=sha256:06366be0e08d86b416407333e998b4d305d5bd925151b08942ed149380ba3e47 \ - --hash=sha256:c5ad042cd27c0b343b10db1db7f77a7d087beafbec59ae6df1bba4d3368dfe8c - # via -r requirements/dev-requirements.in -pycodestyle==2.10.0 \ - --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ - --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 - # via flake8 -pyflakes==3.0.1 \ - --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ - --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd - # via flake8 -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -redis==3.3.11 \ - --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ - --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 - # via -r requirements/requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # build - # mypy - # pip-tools -types-redis==3.5.18 \ - --hash=sha256:15482304e8848c63b383b938ffaba7ebe0b7f8f33381ecc450ee03935213e166 \ - --hash=sha256:5c55c4b9e8ebdc6d57d4e47900b77d99f19ca0a563264af3f701246ed0926335 - # via -r requirements/dev-requirements.in -types-setuptools==68.0.0.1 \ - --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ - --hash=sha256:cc5acbc464b106104899e9b9eb4955dd47e854753c8d4ee2ce697eaf0f4d74e1 - # via -r requirements/dev-requirements.in -typing-extensions==4.7.1 \ - --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ - --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 - # via mypy -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 - # via pip-tools - -# The following packages are considered to be unsafe in a requirements file: -pip==23.1.2 \ - --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ - --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 - # via pip-tools -setuptools==68.0.0 \ - --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ - --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 - # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index 767bdac05..000000000 --- a/requirements/requirements.in +++ /dev/null @@ -1 +0,0 @@ -redis==3.3.11 \ No newline at end of file diff --git a/requirements/requirements.txt b/requirements/requirements.txt deleted file mode 100644 index 5bf812bb7..000000000 --- a/requirements/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.7 -# To update, run: -# -# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in -# -redis==3.3.11 \ - --hash=sha256:3613daad9ce5951e426f460deddd5caf469e08a3af633e9578fc77d362becf62 \ - --hash=sha256:8d0fc278d3f5e1249967cba2eb4a5632d19e45ce5c09442b8422d15ee2c22cc2 - # via -r requirements/requirements.in From 4a11f4360cc124476535f59bda922c38ae71c92c Mon Sep 17 00:00:00 2001 From: Cory Francis Myers Date: Mon, 6 Nov 2023 08:02:12 +0100 Subject: [PATCH 583/751] chore: ignore urllib3 CVE-2023-43804 We don't rely on cookie or redirect functionality against untrusted hosts. See also freedomofpress/fpf-misc-resources#22. It seems that the $IGNORED_VULNERABILITIES list added in e7cd70d isn't actually extensible to multiple IDs: Make/bash will quote them and Safety wants one per "--ignore". So now we just write out one "--ignore" per line as freedomofpress/securedrop does. --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index acc549a0c..bdda3627a 100644 --- a/Makefile +++ b/Makefile @@ -136,14 +136,15 @@ test-functional: ## Run the functional tests lint: ## Run the linters @flake8 securedrop_client tests -IGNORED_VULNERABILITIES ?= "51668" - .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities pip install --upgrade safety && \ for req_file in `find . -type f -wholename '*requirements.txt'`; do \ echo "Checking file $$req_file" \ - && safety check --full-report --ignore $(IGNORED_VULNERABILITIES) -r $$req_file \ + && safety check --full-report \ + --ignore 51668 \ + --ignore 61601 \ + -r $$req_file \ && echo -e '\n' \ || exit 1; \ done From 5b2f65342ce3d96d62b73c289b334de53138ddf2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 6 Nov 2023 12:46:17 -0500 Subject: [PATCH 584/751] Migrate dependency management to poetry Switch dependency management to use poetry, which is much nicer than pip-tools. This is largely based off of and applies the same changes to the Makefile and CI. --- .circleci/config.yml | 79 +- MANIFEST.in | 3 +- Makefile | 66 +- README.md | 17 +- ...requirements.txt => build-requirements.txt | 0 poetry.lock | 1094 +++++++++++++++++ pyproject.toml | 22 + requirements/dev-bookworm-requirements.in | 14 - requirements/dev-bookworm-requirements.txt | 619 ---------- requirements/dev-bullseye-requirements.in | 14 - requirements/dev-bullseye-requirements.txt | 632 ---------- requirements/requirements.in | 0 requirements/requirements.txt | 6 - scripts/codename | 15 - 14 files changed, 1162 insertions(+), 1419 deletions(-) rename requirements/build-requirements.txt => build-requirements.txt (100%) create mode 100644 poetry.lock delete mode 100644 requirements/dev-bookworm-requirements.in delete mode 100644 requirements/dev-bookworm-requirements.txt delete mode 100644 requirements/dev-bullseye-requirements.in delete mode 100644 requirements/dev-bullseye-requirements.txt delete mode 100644 requirements/requirements.in delete mode 100644 requirements/requirements.txt delete mode 100755 scripts/codename diff --git a/.circleci/config.yml b/.circleci/config.yml index 94cdb4b3d..f1549fb15 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,27 +1,40 @@ --- common-steps: + - &install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + - &install_testing_dependencies run: name: Install testing dependencies command: | - set -e apt update && apt install -y git gnupg make python3-dev gnupg python3-venv libnotify-bin + poetry install --no-ansi - &install_build_dependencies run: name: Install build dependencies command: | - set -e apt update && apt install -y git make sudo - &run_unit_tests run: name: Install requirements and run unit tests command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata make test @@ -29,30 +42,18 @@ common-steps: run: name: Run lint, type checking, code formatting command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make check-black lint - &check_security run: name: Run static analysis on source code to find security issues command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make semgrep - &check_python_dependencies_for_vulnerabilities run: name: Check Python dependencies for known vulnerabilities command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make safety - &install_packaging_dependencies @@ -63,10 +64,10 @@ common-steps: mkdir ~/packaging && cd ~/packaging # local builds may not have an ssh url, so || true git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-debian-packaging.git - cd securedrop-debian-packaging - apt-get update && apt-get install -y sudo make + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder make install-deps + source .venv/bin/activate PKG_DIR=~/project make requirements - &check_packaging_requirements @@ -77,24 +78,14 @@ common-steps: # Fail if unstaged changes exist (after `make requirements` in the previous run step). git diff --ignore-matching-lines=# --exit-code - - &check_testing_requirements - run: - name: Ensure that the same Python requirements are used for development/testing and production. - command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate - make requirements - git diff --exit-code requirements/dev-${VERSION_CODENAME}-requirements.txt - - &build_debian_package run: name: Build debian package command: | - cd ~/packaging/securedrop-debian-packaging + cd ~/packaging/securedrop-builder export PKG_VERSION=1000.0 export PKG_PATH=~/project/ + source .venv/bin/activate make securedrop-export version: 2.1 @@ -117,8 +108,9 @@ jobs: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *run_unit_tests - store_test_results: path: test-results @@ -127,33 +119,28 @@ jobs: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *run_lint check-security: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *check_security check-python-security: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout - - *check_python_dependencies_for_vulnerabilities - - check-testing-requirements: - parameters: *parameters - docker: *docker - steps: - *install_testing_dependencies - - checkout - - *check_testing_requirements + - *check_python_dependencies_for_vulnerabilities workflows: securedrop_export_ci: @@ -166,8 +153,6 @@ workflows: - bookworm - lint: matrix: *matrix - - check-testing-requirements: - matrix: *matrix - check-security: matrix: *matrix - check-python-security: diff --git a/MANIFEST.in b/MANIFEST.in index 4322c8cb2..87fb2b127 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,8 +2,7 @@ include LICENSE include README.md include securedrop_export/VERSION include changelog.md -include requirements/build-requirements.txt -include requirements/requirements.txt +include build-requirements.txt include securedrop_export/*.py include setup.py include files/send-to-usb.desktop diff --git a/Makefile b/Makefile index 6e9cf4965..b650fcb89 100644 --- a/Makefile +++ b/Makefile @@ -1,80 +1,34 @@ .PHONY: all all: help -VERSION_CODENAME ?= bullseye - -.PHONY: venv -venv: ## Provision a Python 3 virtualenv for **development** - python3 -m venv .venv - .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r requirements/dev-${VERSION_CODENAME}-requirements.txt - .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities - pip install --upgrade safety && \ - for req_file in `find . -type f -name '*requirements.txt'`; do \ - echo "Checking file $$req_file" \ - && safety check --full-report -r $$req_file \ - && echo -e '\n' \ - || exit 1; \ - done - -# Helper, not to be used directly -.PHONY: sync-requirements -sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies - if test -f "requirements/dev-bullseye-requirements.txt"; then rm -r requirements/dev-bullseye-requirements.txt; fi - if test -f "requirements/dev-bookworm-requirements.txt"; then rm -r requirements/dev-bookworm-requirements.txt; fi - $(MAKE) dev-requirements - -# Helper, not to be used directly -.PHONY: dev-requirements -dev-requirements: ## Update dev-*requirements.txt files if pinned versions do not comply with the dependency specifications in dev-*requirements.in - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in - -.PHONY: requirements -requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in - pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) dev-requirements - -.PHONY: update-dependency -update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dev-only-dependencies -update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in - $(MAKE) sync-requirements - @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in; \ - done < 'requirements/dev-bullseye-requirements.in' - @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in; \ - done < 'requirements/dev-bookworm-requirements.in' + @echo "Running safety against build requirements…" + @poetry run safety check --full-report -r build-requirements.txt .PHONY: check check: lint mypy semgrep test check-black ## Run linter and tests .PHONY: check-black check-black: ## Check Python source code formatting with black - @black --check --diff ./ + @poetry run black --check --diff ./ TESTS ?= tests .PHONY: test test: ## Run tests - pytest -v --cov-report html --cov-report term-missing --cov=securedrop_export $$TESTS + poetry run pytest -v --cov-report html --cov-report term-missing --cov=securedrop_export $$TESTS .PHONY: lint lint: ## Run linter - flake8 securedrop_export/ tests/ + poetry run flake8 securedrop_export/ tests/ .PHONY: mypy mypy: ## Type check Python files - mypy . + poetry run mypy . .PHONY: black black: ## Format Python source code with black - @black ./ + @poetry run black ./ SEMGREP_FLAGS := --exclude "tests/" --error --strict --verbose @@ -84,14 +38,14 @@ semgrep:semgrep-community semgrep-local .PHONY: semgrep-community semgrep-community: @echo "Running semgrep with semgrep.dev community rules..." - @semgrep $(SEMGREP_FLAGS) --config "p/r2c-security-audit" --config "p/r2c-ci" + @poetry run semgrep $(SEMGREP_FLAGS) --config "p/r2c-security-audit" --config "p/r2c-ci" .PHONY: semgrep-local semgrep-local: @echo "Running semgrep with local rules..." - @semgrep $(SEMGREP_FLAGS) --config ".semgrep" + @poetry run semgrep $(SEMGREP_FLAGS) --config ".semgrep" -# Explaination of the below shell command should it ever break. +# Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets # 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption diff --git a/README.md b/README.md index 7572ee30c..241f97b19 100644 --- a/README.md +++ b/README.md @@ -6,21 +6,10 @@ Code for exporting and printing files from the SecureDrop Qubes Workstation. -## Getting Started +## Quick Start -Python 3 support is required. To get started: - -``` -virtualenv --python=python3.7 .venv -source .venv/bin/activate -pip install -r test-requirements.txt -``` - -To run the linter and tests: - -``` -make check -``` +1. [Install Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) +2. Run `make check` to verify the installation ## Supported Printers diff --git a/requirements/build-requirements.txt b/build-requirements.txt similarity index 100% rename from requirements/build-requirements.txt rename to build-requirements.txt diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..e385fd54a --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1094 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "black" +version = "23.10.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, + {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, + {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, + {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, + {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, + {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, + {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, + {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, + {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, + {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, + {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "boltons" +version = "21.0.0" +description = "When they're not builtins, they're boltons." +optional = false +python-versions = "*" +files = [ + {file = "boltons-21.0.0-py2.py3-none-any.whl", hash = "sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b"}, + {file = "boltons-21.0.0.tar.gz", hash = "sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13"}, +] + +[[package]] +name = "bracex" +version = "2.4" +description = "Bash style brace expander." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"}, + {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"}, +] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-option-group" +version = "0.5.6" +description = "Option groups missing in Click" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777"}, + {file = "click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7"}, +] + +[package.dependencies] +Click = ">=7.0,<9" + +[package.extras] +docs = ["Pallets-Sphinx-Themes", "m2r2", "sphinx"] +tests = ["pytest"] +tests-cov = ["coverage", "coveralls", "pytest", "pytest-cov"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.3.2" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "dparse" +version = "0.6.3" +description = "A parser for Python dependency files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, + {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, +] + +[package.dependencies] +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +conda = ["pyyaml"] +pipenv = ["pipenv (<=2022.12.19)"] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "face" +version = "22.0.0" +description = "A command-line application framework (and CLI parser). Friendly for users, full-featured for developers." +optional = false +python-versions = "*" +files = [ + {file = "face-22.0.0-py3-none-any.whl", hash = "sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35"}, + {file = "face-22.0.0.tar.gz", hash = "sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d"}, +] + +[package.dependencies] +boltons = ">=20.0.0" + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "glom" +version = "22.1.0" +description = "A declarative object transformer and formatter, for conglomerating nested data." +optional = false +python-versions = "*" +files = [ + {file = "glom-22.1.0-py2.py3-none-any.whl", hash = "sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772"}, + {file = "glom-22.1.0.tar.gz", hash = "sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5"}, +] + +[package.dependencies] +attrs = "*" +boltons = ">=19.3.0" +face = ">=20.1.0" + +[package.extras] +yaml = ["PyYAML"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "jsonschema" +version = "4.19.2" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mypy" +version = "1.6.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + +[[package]] +name = "peewee" +version = "3.17.0" +description = "a little orm" +optional = false +python-versions = "*" +files = [ + {file = "peewee-3.17.0.tar.gz", hash = "sha256:3a56967f28a43ca7a4287f4803752aeeb1a57a08dee2e839b99868181dfb5df8"}, +] + +[[package]] +name = "platformdirs" +version = "3.11.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pytest" +version = "7.4.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.12.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, + {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.6.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.12.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, +] + +[[package]] +name = "ruamel-yaml" +version = "0.17.40" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3" +files = [ + {file = "ruamel.yaml-0.17.40-py3-none-any.whl", hash = "sha256:b16b6c3816dff0a93dca12acf5e70afd089fa5acb80604afd1ffa8b465b7722c"}, + {file = "ruamel.yaml-0.17.40.tar.gz", hash = "sha256:6024b986f06765d482b5b07e086cc4b4cd05dd22ddcbc758fa23d54873cf313d"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "safety" +version = "2.3.4" +description = "Checks installed dependencies for known vulnerabilities and licenses." +optional = false +python-versions = "*" +files = [ + {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, + {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, +] + +[package.dependencies] +Click = ">=8.0.2" +dparse = ">=0.6.2" +packaging = ">=21.0" +requests = "*" +"ruamel.yaml" = ">=0.17.21" +setuptools = ">=19.3" + +[package.extras] +github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +gitlab = ["python-gitlab (>=1.3.0)"] + +[[package]] +name = "semgrep" +version = "1.48.0" +description = "Lightweight static analysis for many languages. Find bug variants with patterns that look like source code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-any.whl", hash = "sha256:35999402ada6cc9ae03642eb2fb1011fcaf46f23a85d56335d2a8de8a04db38f"}, + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_10_14_x86_64.whl", hash = "sha256:111a0a9675735f7ba0b4a47f5c17c989c9243f2cf4a35e92cbfb0cd8ca24c497"}, + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_11_0_arm64.whl", hash = "sha256:7a669e8b4beb977f7fe76cce887c15c5af9522f0bd8b9bc60929d3135a23b90e"}, + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-musllinux_1_0_aarch64.manylinux2014_aarch64.whl", hash = "sha256:516706163a1a6d128dbcb5fec5a0d175371bf0a25a2c0afe70517f1081aa463e"}, + {file = "semgrep-1.48.0.tar.gz", hash = "sha256:9db8547dadd3f65e62c96a74d756be4469559a8a9e11f39549316cbe6930e5a6"}, +] + +[package.dependencies] +attrs = ">=21.3" +boltons = ">=21.0,<22.0" +click = ">=8.1,<9.0" +click-option-group = ">=0.5,<1.0" +colorama = ">=0.4.0,<0.5.0" +defusedxml = ">=0.7.1,<0.8.0" +glom = ">=22.1,<23.0" +jsonschema = ">=4.6,<5.0" +packaging = ">=21.0" +peewee = ">=3.14,<4.0" +requests = ">=2.22,<3.0" +rich = ">=12.6.0" +"ruamel.yaml" = ">=0.16.0,<0.18" +tomli = ">=2.0.1,<2.1.0" +typing-extensions = ">=4.2,<5.0" +urllib3 = ">=1.26,<2.0" +wcmatch = ">=8.3,<9.0" + +[package.extras] +experiments = ["jsonnet (>=0.18,<1.0)"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "types-setuptools" +version = "68.2.0.0" +description = "Typing stubs for setuptools" +optional = false +python-versions = "*" +files = [ + {file = "types-setuptools-68.2.0.0.tar.gz", hash = "sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"}, + {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "wcmatch" +version = "8.5" +description = "Wildcard/glob file name matcher." +optional = false +python-versions = ">=3.8" +files = [ + {file = "wcmatch-8.5-py3-none-any.whl", hash = "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5"}, + {file = "wcmatch-8.5.tar.gz", hash = "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3"}, +] + +[package.dependencies] +bracex = ">=2.1.1" + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "6e18d52942bf002b4a5fe2f237bfe9f2a355a411e6b9443d3f1abf9a652d0d0b" diff --git a/pyproject.toml b/pyproject.toml index 5ec8cc186..3afb5b8ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,2 +1,24 @@ +[tool.poetry] +name = "securedrop-export" +version = "0.1.0" +description = "SecureDrop Qubes export scripts" +authors = ["SecureDrop Team"] +license = "GPLv3+" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.9" + +[tool.poetry.group.dev.dependencies] +black = "^23.7.0" +flake8 = "^6.0.0" +mypy = "^1.4.1" +types-setuptools = "^68.0.0" +pytest = "^7.4.0" +pytest-cov = "^4.1.0" +pytest-mock = "^3.11.1" +semgrep = "^1.31.2" +safety = "*" + [tool.mypy] python_version = "3.9" diff --git a/requirements/dev-bookworm-requirements.in b/requirements/dev-bookworm-requirements.in deleted file mode 100644 index 4e3eb791b..000000000 --- a/requirements/dev-bookworm-requirements.in +++ /dev/null @@ -1,14 +0,0 @@ -# Include prod requirements --r requirements.in - -black -certifi>=2023.07.22 -flake8 -pip-tools -pytest -pytest-cov -pytest-mock -semgrep - -mypy -types-setuptools diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt deleted file mode 100644 index c89930a71..000000000 --- a/requirements/dev-bookworm-requirements.txt +++ /dev/null @@ -1,619 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in -# -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 - # via - # glom - # jsonschema - # referencing - # semgrep -black==23.7.0 \ - --hash=sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3 \ - --hash=sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb \ - --hash=sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087 \ - --hash=sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320 \ - --hash=sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6 \ - --hash=sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3 \ - --hash=sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc \ - --hash=sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f \ - --hash=sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587 \ - --hash=sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91 \ - --hash=sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a \ - --hash=sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad \ - --hash=sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926 \ - --hash=sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9 \ - --hash=sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be \ - --hash=sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd \ - --hash=sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96 \ - --hash=sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491 \ - --hash=sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2 \ - --hash=sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a \ - --hash=sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f \ - --hash=sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995 - # via -r requirements/dev-bookworm-requirements.in -boltons==21.0.0 \ - --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ - --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b - # via - # face - # glom - # semgrep -bracex==2.3.post1 \ - --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ - --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 - # via wcmatch -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/dev-bookworm-requirements.in - # requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa - # via requests -click==8.1.4 \ - --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ - --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 - # via - # black - # click-option-group - # pip-tools - # semgrep -click-option-group==0.5.6 \ - --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ - --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 - # via semgrep -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via semgrep -coverage[toml]==7.2.7 \ - --hash=sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f \ - --hash=sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2 \ - --hash=sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a \ - --hash=sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a \ - --hash=sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01 \ - --hash=sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6 \ - --hash=sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7 \ - --hash=sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f \ - --hash=sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02 \ - --hash=sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c \ - --hash=sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063 \ - --hash=sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a \ - --hash=sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5 \ - --hash=sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959 \ - --hash=sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97 \ - --hash=sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6 \ - --hash=sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f \ - --hash=sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9 \ - --hash=sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5 \ - --hash=sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f \ - --hash=sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562 \ - --hash=sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe \ - --hash=sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9 \ - --hash=sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f \ - --hash=sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb \ - --hash=sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb \ - --hash=sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1 \ - --hash=sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb \ - --hash=sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250 \ - --hash=sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e \ - --hash=sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511 \ - --hash=sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5 \ - --hash=sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59 \ - --hash=sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2 \ - --hash=sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d \ - --hash=sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3 \ - --hash=sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4 \ - --hash=sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de \ - --hash=sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9 \ - --hash=sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833 \ - --hash=sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0 \ - --hash=sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9 \ - --hash=sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d \ - --hash=sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050 \ - --hash=sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d \ - --hash=sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6 \ - --hash=sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353 \ - --hash=sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb \ - --hash=sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e \ - --hash=sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8 \ - --hash=sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495 \ - --hash=sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2 \ - --hash=sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd \ - --hash=sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27 \ - --hash=sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1 \ - --hash=sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818 \ - --hash=sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4 \ - --hash=sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e \ - --hash=sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850 \ - --hash=sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3 - # via pytest-cov -defusedxml==0.7.1 \ - --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ - --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - # via semgrep -face==22.0.0 \ - --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ - --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d - # via glom -flake8==6.0.0 \ - --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ - --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 - # via -r requirements/dev-bookworm-requirements.in -glom==22.1.0 \ - --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ - --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 - # via semgrep -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 - # via requests -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via pytest -jsonschema==4.18.0 \ - --hash=sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4 \ - --hash=sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60 - # via semgrep -jsonschema-specifications==2023.6.1 \ - --hash=sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7 \ - --hash=sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28 - # via jsonschema -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb - # via rich -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba - # via markdown-it-py -mypy==1.4.1 \ - --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ - --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ - --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ - --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ - --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ - --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ - --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ - --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ - --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ - --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ - --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ - --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ - --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ - --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ - --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ - --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ - --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ - --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ - --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ - --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ - --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ - --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ - --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ - --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ - --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ - --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b - # via -r requirements/dev-bookworm-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build - # pytest - # semgrep -pathspec==0.11.1 \ - --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ - --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 - # via black -peewee==3.16.2 \ - --hash=sha256:10769981198c7311f84a0ca8db892fa213303a8eb1305deb795a71e7bd606a91 - # via semgrep -pip-tools==6.14.0 \ - --hash=sha256:06366be0e08d86b416407333e998b4d305d5bd925151b08942ed149380ba3e47 \ - --hash=sha256:c5ad042cd27c0b343b10db1db7f77a7d087beafbec59ae6df1bba4d3368dfe8c - # via -r requirements/dev-bookworm-requirements.in -platformdirs==3.8.1 \ - --hash=sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c \ - --hash=sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528 - # via black -pluggy==1.2.0 \ - --hash=sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849 \ - --hash=sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3 - # via pytest -pycodestyle==2.10.0 \ - --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ - --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 - # via flake8 -pyflakes==3.0.1 \ - --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ - --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd - # via flake8 -pygments==2.15.1 \ - --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ - --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 - # via rich -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pytest==7.4.0 \ - --hash=sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32 \ - --hash=sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a - # via - # -r requirements/dev-bookworm-requirements.in - # pytest-cov - # pytest-mock -pytest-cov==4.1.0 \ - --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ - --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a - # via -r requirements/dev-bookworm-requirements.in -pytest-mock==3.11.1 \ - --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ - --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f - # via -r requirements/dev-bookworm-requirements.in -python-lsp-jsonrpc==1.0.0 \ - --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ - --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd - # via semgrep -referencing==0.29.1 \ - --hash=sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e \ - --hash=sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via semgrep -rich==13.4.2 \ - --hash=sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec \ - --hash=sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898 - # via semgrep -rpds-py==0.8.10 \ - --hash=sha256:08166467258fd0240a1256fce272f689f2360227ee41c72aeea103e9e4f63d2b \ - --hash=sha256:083df0fafe199371206111583c686c985dddaf95ab3ee8e7b24f1fda54515d09 \ - --hash=sha256:0da53292edafecba5e1d8c1218f99babf2ed0bf1c791d83c0ab5c29b57223068 \ - --hash=sha256:0eeb2731708207d0fe2619afe6c4dc8cb9798f7de052da891de5f19c0006c315 \ - --hash=sha256:134ec8f14ca7dbc6d9ae34dac632cdd60939fe3734b5d287a69683c037c51acb \ - --hash=sha256:13e643ce8ad502a0263397362fb887594b49cf84bf518d6038c16f235f2bcea4 \ - --hash=sha256:148b0b38d719c0760e31ce9285a9872972bdd7774969a4154f40c980e5beaca7 \ - --hash=sha256:14f1c356712f66653b777ecd8819804781b23dbbac4eade4366b94944c9e78ad \ - --hash=sha256:15a90d0ac11b4499171067ae40a220d1ca3cb685ec0acc356d8f3800e07e4cb8 \ - --hash=sha256:1a2edf8173ac0c7a19da21bc68818be1321998528b5e3f748d6ee90c0ba2a1fd \ - --hash=sha256:1b21575031478609db6dbd1f0465e739fe0e7f424a8e7e87610a6c7f68b4eb16 \ - --hash=sha256:1ee45cd1d84beed6cbebc839fd85c2e70a3a1325c8cfd16b62c96e2ffb565eca \ - --hash=sha256:220bdcad2d2936f674650d304e20ac480a3ce88a40fe56cd084b5780f1d104d9 \ - --hash=sha256:2418cf17d653d24ffb8b75e81f9f60b7ba1b009a23298a433a4720b2a0a17017 \ - --hash=sha256:2614c2732bf45de5c7f9e9e54e18bc78693fa2f635ae58d2895b7965e470378c \ - --hash=sha256:2cd3045e7f6375dda64ed7db1c5136826facb0159ea982f77d9cf6125025bd34 \ - --hash=sha256:2eb4b08c45f8f8d8254cdbfacd3fc5d6b415d64487fb30d7380b0d0569837bf1 \ - --hash=sha256:300eb606e6b94a7a26f11c8cc8ee59e295c6649bd927f91e1dbd37a4c89430b6 \ - --hash=sha256:376b8de737401050bd12810003d207e824380be58810c031f10ec563ff6aef3d \ - --hash=sha256:3793c21494bad1373da517001d0849eea322e9a049a0e4789e50d8d1329df8e7 \ - --hash=sha256:37f7ee4dc86db7af3bac6d2a2cedbecb8e57ce4ed081f6464510e537589f8b1e \ - --hash=sha256:3816a890a6a9e9f1de250afa12ca71c9a7a62f2b715a29af6aaee3aea112c181 \ - --hash=sha256:3c490204e16bca4f835dba8467869fe7295cdeaa096e4c5a7af97f3454a97991 \ - --hash=sha256:3cc5e5b5514796f45f03a568981971b12a3570f3de2e76114f7dc18d4b60a3c4 \ - --hash=sha256:41c89a366eae49ad9e65ed443a8f94aee762931a1e3723749d72aeac80f5ef2f \ - --hash=sha256:4a8ca409f1252e1220bf09c57290b76cae2f14723746215a1e0506472ebd7bdf \ - --hash=sha256:4b519bac7c09444dd85280fd60f28c6dde4389c88dddf4279ba9b630aca3bbbe \ - --hash=sha256:521fc8861a86ae54359edf53a15a05fabc10593cea7b3357574132f8427a5e5a \ - --hash=sha256:574868858a7ff6011192c023a5289158ed20e3f3b94b54f97210a773f2f22921 \ - --hash=sha256:5a665f6f1a87614d1c3039baf44109094926dedf785e346d8b0a728e9cabd27a \ - --hash=sha256:5d1c2bc319428d50b3e0fa6b673ab8cc7fa2755a92898db3a594cbc4eeb6d1f7 \ - --hash=sha256:60e0e86e870350e03b3e25f9b1dd2c6cc72d2b5f24e070249418320a6f9097b7 \ - --hash=sha256:695f642a3a5dbd4ad2ffbbacf784716ecd87f1b7a460843b9ddf965ccaeafff4 \ - --hash=sha256:69d089c026f6a8b9d64a06ff67dc3be196707b699d7f6ca930c25f00cf5e30d8 \ - --hash=sha256:6c6a0225b8501d881b32ebf3f5807a08ad3685b5eb5f0a6bfffd3a6e039b2055 \ - --hash=sha256:70bb9c8004b97b4ef7ae56a2aa56dfaa74734a0987c78e7e85f00004ab9bf2d0 \ - --hash=sha256:73a1e48430f418f0ac3dfd87860e4cc0d33ad6c0f589099a298cb53724db1169 \ - --hash=sha256:7495010b658ec5b52835f21d8c8b1a7e52e194c50f095d4223c0b96c3da704b1 \ - --hash=sha256:7947e6e2c2ad68b1c12ee797d15e5f8d0db36331200b0346871492784083b0c6 \ - --hash=sha256:7b38a9ac96eeb6613e7f312cd0014de64c3f07000e8bf0004ad6ec153bac46f8 \ - --hash=sha256:7d20a8ed227683401cc508e7be58cba90cc97f784ea8b039c8cd01111e6043e0 \ - --hash=sha256:7f29b8c55fd3a2bc48e485e37c4e2df3317f43b5cc6c4b6631c33726f52ffbb3 \ - --hash=sha256:802f42200d8caf7f25bbb2a6464cbd83e69d600151b7e3b49f49a47fa56b0a38 \ - --hash=sha256:805a5f3f05d186c5d50de2e26f765ba7896d0cc1ac5b14ffc36fae36df5d2f10 \ - --hash=sha256:82bb361cae4d0a627006dadd69dc2f36b7ad5dc1367af9d02e296ec565248b5b \ - --hash=sha256:84eb541a44f7a18f07a6bfc48b95240739e93defe1fdfb4f2a295f37837945d7 \ - --hash=sha256:89c92b74e8bf6f53a6f4995fd52f4bd510c12f103ee62c99e22bc9e05d45583c \ - --hash=sha256:8c398fda6df361a30935ab4c4bccb7f7a3daef2964ca237f607c90e9f3fdf66f \ - --hash=sha256:915031002c86a5add7c6fd4beb601b2415e8a1c956590a5f91d825858e92fe6e \ - --hash=sha256:927d784648211447201d4c6f1babddb7971abad922b32257ab74de2f2750fad0 \ - --hash=sha256:92cf5b3ee60eef41f41e1a2cabca466846fb22f37fc580ffbcb934d1bcab225a \ - --hash=sha256:93d06cccae15b3836247319eee7b6f1fdcd6c10dabb4e6d350d27bd0bdca2711 \ - --hash=sha256:93d99f957a300d7a4ced41615c45aeb0343bb8f067c42b770b505de67a132346 \ - --hash=sha256:96b293c0498c70162effb13100624c5863797d99df75f2f647438bd10cbf73e4 \ - --hash=sha256:97cab733d303252f7c2f7052bf021a3469d764fc2b65e6dbef5af3cbf89d4892 \ - --hash=sha256:996cc95830de9bc22b183661d95559ec6b3cd900ad7bc9154c4cbf5be0c9b734 \ - --hash=sha256:9a7d20c1cf8d7b3960c5072c265ec47b3f72a0c608a9a6ee0103189b4f28d531 \ - --hash=sha256:9cd57981d9fab04fc74438d82460f057a2419974d69a96b06a440822d693b3c0 \ - --hash=sha256:a11ab0d97be374efd04f640c04fe5c2d3dabc6dfb998954ea946ee3aec97056d \ - --hash=sha256:a13c8e56c46474cd5958d525ce6a9996727a83d9335684e41f5192c83deb6c58 \ - --hash=sha256:a38b9f526d0d6cbdaa37808c400e3d9f9473ac4ff64d33d9163fd05d243dbd9b \ - --hash=sha256:a7c6304b894546b5a6bdc0fe15761fa53fe87d28527a7142dae8de3c663853e1 \ - --hash=sha256:ad3bfb44c8840fb4be719dc58e229f435e227fbfbe133dc33f34981ff622a8f8 \ - --hash=sha256:ae40f4a70a1f40939d66ecbaf8e7edc144fded190c4a45898a8cfe19d8fc85ea \ - --hash=sha256:b01b39ad5411563031ea3977bbbc7324d82b088e802339e6296f082f78f6115c \ - --hash=sha256:b2e3c4f2a8e3da47f850d7ea0d7d56720f0f091d66add889056098c4b2fd576c \ - --hash=sha256:b41941583adce4242af003d2a8337b066ba6148ca435f295f31ac6d9e4ea2722 \ - --hash=sha256:b4627520a02fccbd324b33c7a83e5d7906ec746e1083a9ac93c41ac7d15548c7 \ - --hash=sha256:ba9f1d1ebe4b63801977cec7401f2d41e888128ae40b5441270d43140efcad52 \ - --hash=sha256:c03a435d26c3999c2a8642cecad5d1c4d10c961817536af52035f6f4ee2f5dd0 \ - --hash=sha256:c200b30dd573afa83847bed7e3041aa36a8145221bf0cfdfaa62d974d720805c \ - --hash=sha256:c493365d3fad241d52f096e4995475a60a80f4eba4d3ff89b713bc65c2ca9615 \ - --hash=sha256:c4d42e83ddbf3445e6514f0aff96dca511421ed0392d9977d3990d9f1ba6753c \ - --hash=sha256:c60528671d9d467009a6ec284582179f6b88651e83367d0ab54cb739021cd7de \ - --hash=sha256:c72ebc22e70e04126158c46ba56b85372bc4d54d00d296be060b0db1671638a4 \ - --hash=sha256:ccbbd276642788c4376fbe8d4e6c50f0fb4972ce09ecb051509062915891cbf0 \ - --hash=sha256:ceaac0c603bf5ac2f505a78b2dcab78d3e6b706be6596c8364b64cc613d208d2 \ - --hash=sha256:d19db6ba816e7f59fc806c690918da80a7d186f00247048cd833acdab9b4847b \ - --hash=sha256:d5c191713e98e7c28800233f039a32a42c1a4f9a001a8a0f2448b07391881036 \ - --hash=sha256:d64f9f88d5203274a002b54442cafc9c7a1abff2a238f3e767b70aadf919b451 \ - --hash=sha256:d77dff3a5aa5eedcc3da0ebd10ff8e4969bc9541aa3333a8d41715b429e99f47 \ - --hash=sha256:dd4f16e57c12c0ae17606c53d1b57d8d1c8792efe3f065a37cb3341340599d49 \ - --hash=sha256:e39d7ab0c18ac99955b36cd19f43926450baba21e3250f053e0704d6ffd76873 \ - --hash=sha256:e3d0cd3dff0e7638a7b5390f3a53057c4e347f4ef122ee84ed93fc2fb7ea4aa2 \ - --hash=sha256:e7dfb1cbb895810fa2b892b68153c17716c6abaa22c7dc2b2f6dcf3364932a1c \ - --hash=sha256:e8e24b210a4deb5a7744971f8f77393005bae7f873568e37dfd9effe808be7f7 \ - --hash=sha256:e9c0683cb35a9b5881b41bc01d5568ffc667910d9dbc632a1fba4e7d59e98773 \ - --hash=sha256:ed41f3f49507936a6fe7003985ea2574daccfef999775525d79eb67344e23767 \ - --hash=sha256:ee744fca8d1ea822480a2a4e7c5f2e1950745477143668f0b523769426060f29 \ - --hash=sha256:f3f1e860be21f3e83011116a65e7310486300e08d9a3028e73e8d13bb6c77292 \ - --hash=sha256:f43ab4cb04bde6109eb2555528a64dfd8a265cc6a9920a67dcbde13ef53a46c8 \ - --hash=sha256:f53f55a8852f0e49b0fc76f2412045d6ad9d5772251dea8f55ea45021616e7d5 \ - --hash=sha256:f59996d0550894affaad8743e97b9b9c98f638b221fac12909210ec3d9294786 \ - --hash=sha256:f96f3f98fbff7af29e9edf9a6584f3c1382e7788783d07ba3721790625caa43e \ - --hash=sha256:f9adb5664b78fcfcd830000416c8cc69853ef43cb084d645b3f1f0296edd9bae \ - --hash=sha256:fa326b3505d5784436d9433b7980171ab2375535d93dd63fbcd20af2b5ca1bb6 \ - --hash=sha256:fafc0049add8043ad07ab5382ee80d80ed7e3699847f26c9a5cf4d3714d96a84 - # via - # jsonschema - # referencing -ruamel-yaml==0.17.32 \ - --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ - --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 - # via semgrep -ruamel-yaml-clib==0.2.7 \ - --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ - --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ - --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ - --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ - --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ - --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ - --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ - --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ - --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ - --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ - --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ - --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ - --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ - --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ - --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ - --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ - --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ - --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ - --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ - --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ - --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ - --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ - --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ - --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ - --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ - --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ - --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ - --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ - --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ - --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ - --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ - --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ - --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ - --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ - --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 - # via ruamel-yaml -semgrep==1.31.2 \ - --hash=sha256:0fc463f8afcc649efaf61c00f17f7c124498c2e95cca9d805fd68d203362cdeb \ - --hash=sha256:30d0662a6ac8d7258af3b383cca1c93da646fc99b60e3247f6acf3dcf764e815 \ - --hash=sha256:c26ce223c60688e317299f97cac9889b3e879dc4ee28097555cad6215086dcf4 \ - --hash=sha256:cd707b74cd76ef5dff974df3fe653967faf1bd0248019f7b6777170cefa4fca5 - # via -r requirements/dev-bookworm-requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via semgrep -types-setuptools==68.0.0.1 \ - --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ - --hash=sha256:cc5acbc464b106104899e9b9eb4955dd47e854753c8d4ee2ce697eaf0f4d74e1 - # via -r requirements/dev-bookworm-requirements.in -typing-extensions==4.7.1 \ - --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ - --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 - # via - # mypy - # semgrep -ujson==5.8.0 \ - --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ - --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ - --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ - --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ - --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ - --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ - --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ - --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ - --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ - --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ - --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ - --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ - --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ - --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ - --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ - --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ - --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ - --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ - --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ - --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ - --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ - --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ - --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ - --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ - --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ - --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ - --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ - --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ - --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ - --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ - --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ - --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ - --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ - --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ - --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ - --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ - --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ - --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ - --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ - --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ - --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ - --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ - --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ - --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ - --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ - --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ - --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ - --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ - --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ - --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ - --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ - --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ - --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ - --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ - --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ - --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ - --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ - --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ - --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ - --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ - --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c - # via python-lsp-jsonrpc -urllib3==1.26.16 \ - --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ - --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 - # via - # requests - # semgrep -wcmatch==8.4.1 \ - --hash=sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7 \ - --hash=sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943 - # via semgrep -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 - # via pip-tools - -# The following packages are considered to be unsafe in a requirements file: -pip==23.1.2 \ - --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ - --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 - # via pip-tools -setuptools==68.0.0 \ - --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ - --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 - # via pip-tools diff --git a/requirements/dev-bullseye-requirements.in b/requirements/dev-bullseye-requirements.in deleted file mode 100644 index 43216f80c..000000000 --- a/requirements/dev-bullseye-requirements.in +++ /dev/null @@ -1,14 +0,0 @@ -# include prod requirements --r requirements.in - -black -certifi>=2023.07.22 -flake8 -pip-tools -pytest -pytest-cov -pytest-mock -semgrep - -mypy -types-setuptools diff --git a/requirements/dev-bullseye-requirements.txt b/requirements/dev-bullseye-requirements.txt deleted file mode 100644 index 8ec35fd7a..000000000 --- a/requirements/dev-bullseye-requirements.txt +++ /dev/null @@ -1,632 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in -# -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 - # via - # glom - # jsonschema - # referencing - # semgrep -black==23.7.0 \ - --hash=sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3 \ - --hash=sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb \ - --hash=sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087 \ - --hash=sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320 \ - --hash=sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6 \ - --hash=sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3 \ - --hash=sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc \ - --hash=sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f \ - --hash=sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587 \ - --hash=sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91 \ - --hash=sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a \ - --hash=sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad \ - --hash=sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926 \ - --hash=sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9 \ - --hash=sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be \ - --hash=sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd \ - --hash=sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96 \ - --hash=sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491 \ - --hash=sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2 \ - --hash=sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a \ - --hash=sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f \ - --hash=sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995 - # via -r requirements/dev-bullseye-requirements.in -boltons==21.0.0 \ - --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ - --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b - # via - # face - # glom - # semgrep -bracex==2.3.post1 \ - --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ - --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 - # via wcmatch -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/dev-bullseye-requirements.in - # requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa - # via requests -click==8.1.4 \ - --hash=sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3 \ - --hash=sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37 - # via - # black - # click-option-group - # pip-tools - # semgrep -click-option-group==0.5.6 \ - --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ - --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 - # via semgrep -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via semgrep -coverage[toml]==7.2.7 \ - --hash=sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f \ - --hash=sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2 \ - --hash=sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a \ - --hash=sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a \ - --hash=sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01 \ - --hash=sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6 \ - --hash=sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7 \ - --hash=sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f \ - --hash=sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02 \ - --hash=sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c \ - --hash=sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063 \ - --hash=sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a \ - --hash=sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5 \ - --hash=sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959 \ - --hash=sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97 \ - --hash=sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6 \ - --hash=sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f \ - --hash=sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9 \ - --hash=sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5 \ - --hash=sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f \ - --hash=sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562 \ - --hash=sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe \ - --hash=sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9 \ - --hash=sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f \ - --hash=sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb \ - --hash=sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb \ - --hash=sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1 \ - --hash=sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb \ - --hash=sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250 \ - --hash=sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e \ - --hash=sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511 \ - --hash=sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5 \ - --hash=sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59 \ - --hash=sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2 \ - --hash=sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d \ - --hash=sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3 \ - --hash=sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4 \ - --hash=sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de \ - --hash=sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9 \ - --hash=sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833 \ - --hash=sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0 \ - --hash=sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9 \ - --hash=sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d \ - --hash=sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050 \ - --hash=sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d \ - --hash=sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6 \ - --hash=sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353 \ - --hash=sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb \ - --hash=sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e \ - --hash=sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8 \ - --hash=sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495 \ - --hash=sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2 \ - --hash=sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd \ - --hash=sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27 \ - --hash=sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1 \ - --hash=sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818 \ - --hash=sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4 \ - --hash=sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e \ - --hash=sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850 \ - --hash=sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3 - # via pytest-cov -defusedxml==0.7.1 \ - --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ - --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - # via semgrep -exceptiongroup==1.1.2 \ - --hash=sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5 \ - --hash=sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f - # via pytest -face==22.0.0 \ - --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ - --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d - # via glom -flake8==6.0.0 \ - --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ - --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 - # via -r requirements/dev-bullseye-requirements.in -glom==22.1.0 \ - --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ - --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 - # via semgrep -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 - # via requests -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via pytest -jsonschema==4.18.0 \ - --hash=sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4 \ - --hash=sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60 - # via semgrep -jsonschema-specifications==2023.6.1 \ - --hash=sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7 \ - --hash=sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28 - # via jsonschema -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb - # via rich -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba - # via markdown-it-py -mypy==1.4.1 \ - --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ - --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ - --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ - --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ - --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ - --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ - --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ - --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ - --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ - --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ - --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ - --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ - --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ - --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ - --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ - --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ - --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ - --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ - --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ - --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ - --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ - --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ - --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ - --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ - --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ - --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b - # via -r requirements/dev-bullseye-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build - # pytest - # semgrep -pathspec==0.11.1 \ - --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ - --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 - # via black -peewee==3.16.2 \ - --hash=sha256:10769981198c7311f84a0ca8db892fa213303a8eb1305deb795a71e7bd606a91 - # via semgrep -pip-tools==6.14.0 \ - --hash=sha256:06366be0e08d86b416407333e998b4d305d5bd925151b08942ed149380ba3e47 \ - --hash=sha256:c5ad042cd27c0b343b10db1db7f77a7d087beafbec59ae6df1bba4d3368dfe8c - # via -r requirements/dev-bullseye-requirements.in -platformdirs==3.8.1 \ - --hash=sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c \ - --hash=sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528 - # via black -pluggy==1.2.0 \ - --hash=sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849 \ - --hash=sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3 - # via pytest -pycodestyle==2.10.0 \ - --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ - --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 - # via flake8 -pyflakes==3.0.1 \ - --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ - --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd - # via flake8 -pygments==2.15.1 \ - --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ - --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 - # via rich -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pytest==7.4.0 \ - --hash=sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32 \ - --hash=sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a - # via - # -r requirements/dev-bullseye-requirements.in - # pytest-cov - # pytest-mock -pytest-cov==4.1.0 \ - --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ - --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a - # via -r requirements/dev-bullseye-requirements.in -pytest-mock==3.11.1 \ - --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ - --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f - # via -r requirements/dev-bullseye-requirements.in -python-lsp-jsonrpc==1.0.0 \ - --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ - --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd - # via semgrep -referencing==0.29.1 \ - --hash=sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e \ - --hash=sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via semgrep -rich==13.4.2 \ - --hash=sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec \ - --hash=sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898 - # via semgrep -rpds-py==0.8.10 \ - --hash=sha256:08166467258fd0240a1256fce272f689f2360227ee41c72aeea103e9e4f63d2b \ - --hash=sha256:083df0fafe199371206111583c686c985dddaf95ab3ee8e7b24f1fda54515d09 \ - --hash=sha256:0da53292edafecba5e1d8c1218f99babf2ed0bf1c791d83c0ab5c29b57223068 \ - --hash=sha256:0eeb2731708207d0fe2619afe6c4dc8cb9798f7de052da891de5f19c0006c315 \ - --hash=sha256:134ec8f14ca7dbc6d9ae34dac632cdd60939fe3734b5d287a69683c037c51acb \ - --hash=sha256:13e643ce8ad502a0263397362fb887594b49cf84bf518d6038c16f235f2bcea4 \ - --hash=sha256:148b0b38d719c0760e31ce9285a9872972bdd7774969a4154f40c980e5beaca7 \ - --hash=sha256:14f1c356712f66653b777ecd8819804781b23dbbac4eade4366b94944c9e78ad \ - --hash=sha256:15a90d0ac11b4499171067ae40a220d1ca3cb685ec0acc356d8f3800e07e4cb8 \ - --hash=sha256:1a2edf8173ac0c7a19da21bc68818be1321998528b5e3f748d6ee90c0ba2a1fd \ - --hash=sha256:1b21575031478609db6dbd1f0465e739fe0e7f424a8e7e87610a6c7f68b4eb16 \ - --hash=sha256:1ee45cd1d84beed6cbebc839fd85c2e70a3a1325c8cfd16b62c96e2ffb565eca \ - --hash=sha256:220bdcad2d2936f674650d304e20ac480a3ce88a40fe56cd084b5780f1d104d9 \ - --hash=sha256:2418cf17d653d24ffb8b75e81f9f60b7ba1b009a23298a433a4720b2a0a17017 \ - --hash=sha256:2614c2732bf45de5c7f9e9e54e18bc78693fa2f635ae58d2895b7965e470378c \ - --hash=sha256:2cd3045e7f6375dda64ed7db1c5136826facb0159ea982f77d9cf6125025bd34 \ - --hash=sha256:2eb4b08c45f8f8d8254cdbfacd3fc5d6b415d64487fb30d7380b0d0569837bf1 \ - --hash=sha256:300eb606e6b94a7a26f11c8cc8ee59e295c6649bd927f91e1dbd37a4c89430b6 \ - --hash=sha256:376b8de737401050bd12810003d207e824380be58810c031f10ec563ff6aef3d \ - --hash=sha256:3793c21494bad1373da517001d0849eea322e9a049a0e4789e50d8d1329df8e7 \ - --hash=sha256:37f7ee4dc86db7af3bac6d2a2cedbecb8e57ce4ed081f6464510e537589f8b1e \ - --hash=sha256:3816a890a6a9e9f1de250afa12ca71c9a7a62f2b715a29af6aaee3aea112c181 \ - --hash=sha256:3c490204e16bca4f835dba8467869fe7295cdeaa096e4c5a7af97f3454a97991 \ - --hash=sha256:3cc5e5b5514796f45f03a568981971b12a3570f3de2e76114f7dc18d4b60a3c4 \ - --hash=sha256:41c89a366eae49ad9e65ed443a8f94aee762931a1e3723749d72aeac80f5ef2f \ - --hash=sha256:4a8ca409f1252e1220bf09c57290b76cae2f14723746215a1e0506472ebd7bdf \ - --hash=sha256:4b519bac7c09444dd85280fd60f28c6dde4389c88dddf4279ba9b630aca3bbbe \ - --hash=sha256:521fc8861a86ae54359edf53a15a05fabc10593cea7b3357574132f8427a5e5a \ - --hash=sha256:574868858a7ff6011192c023a5289158ed20e3f3b94b54f97210a773f2f22921 \ - --hash=sha256:5a665f6f1a87614d1c3039baf44109094926dedf785e346d8b0a728e9cabd27a \ - --hash=sha256:5d1c2bc319428d50b3e0fa6b673ab8cc7fa2755a92898db3a594cbc4eeb6d1f7 \ - --hash=sha256:60e0e86e870350e03b3e25f9b1dd2c6cc72d2b5f24e070249418320a6f9097b7 \ - --hash=sha256:695f642a3a5dbd4ad2ffbbacf784716ecd87f1b7a460843b9ddf965ccaeafff4 \ - --hash=sha256:69d089c026f6a8b9d64a06ff67dc3be196707b699d7f6ca930c25f00cf5e30d8 \ - --hash=sha256:6c6a0225b8501d881b32ebf3f5807a08ad3685b5eb5f0a6bfffd3a6e039b2055 \ - --hash=sha256:70bb9c8004b97b4ef7ae56a2aa56dfaa74734a0987c78e7e85f00004ab9bf2d0 \ - --hash=sha256:73a1e48430f418f0ac3dfd87860e4cc0d33ad6c0f589099a298cb53724db1169 \ - --hash=sha256:7495010b658ec5b52835f21d8c8b1a7e52e194c50f095d4223c0b96c3da704b1 \ - --hash=sha256:7947e6e2c2ad68b1c12ee797d15e5f8d0db36331200b0346871492784083b0c6 \ - --hash=sha256:7b38a9ac96eeb6613e7f312cd0014de64c3f07000e8bf0004ad6ec153bac46f8 \ - --hash=sha256:7d20a8ed227683401cc508e7be58cba90cc97f784ea8b039c8cd01111e6043e0 \ - --hash=sha256:7f29b8c55fd3a2bc48e485e37c4e2df3317f43b5cc6c4b6631c33726f52ffbb3 \ - --hash=sha256:802f42200d8caf7f25bbb2a6464cbd83e69d600151b7e3b49f49a47fa56b0a38 \ - --hash=sha256:805a5f3f05d186c5d50de2e26f765ba7896d0cc1ac5b14ffc36fae36df5d2f10 \ - --hash=sha256:82bb361cae4d0a627006dadd69dc2f36b7ad5dc1367af9d02e296ec565248b5b \ - --hash=sha256:84eb541a44f7a18f07a6bfc48b95240739e93defe1fdfb4f2a295f37837945d7 \ - --hash=sha256:89c92b74e8bf6f53a6f4995fd52f4bd510c12f103ee62c99e22bc9e05d45583c \ - --hash=sha256:8c398fda6df361a30935ab4c4bccb7f7a3daef2964ca237f607c90e9f3fdf66f \ - --hash=sha256:915031002c86a5add7c6fd4beb601b2415e8a1c956590a5f91d825858e92fe6e \ - --hash=sha256:927d784648211447201d4c6f1babddb7971abad922b32257ab74de2f2750fad0 \ - --hash=sha256:92cf5b3ee60eef41f41e1a2cabca466846fb22f37fc580ffbcb934d1bcab225a \ - --hash=sha256:93d06cccae15b3836247319eee7b6f1fdcd6c10dabb4e6d350d27bd0bdca2711 \ - --hash=sha256:93d99f957a300d7a4ced41615c45aeb0343bb8f067c42b770b505de67a132346 \ - --hash=sha256:96b293c0498c70162effb13100624c5863797d99df75f2f647438bd10cbf73e4 \ - --hash=sha256:97cab733d303252f7c2f7052bf021a3469d764fc2b65e6dbef5af3cbf89d4892 \ - --hash=sha256:996cc95830de9bc22b183661d95559ec6b3cd900ad7bc9154c4cbf5be0c9b734 \ - --hash=sha256:9a7d20c1cf8d7b3960c5072c265ec47b3f72a0c608a9a6ee0103189b4f28d531 \ - --hash=sha256:9cd57981d9fab04fc74438d82460f057a2419974d69a96b06a440822d693b3c0 \ - --hash=sha256:a11ab0d97be374efd04f640c04fe5c2d3dabc6dfb998954ea946ee3aec97056d \ - --hash=sha256:a13c8e56c46474cd5958d525ce6a9996727a83d9335684e41f5192c83deb6c58 \ - --hash=sha256:a38b9f526d0d6cbdaa37808c400e3d9f9473ac4ff64d33d9163fd05d243dbd9b \ - --hash=sha256:a7c6304b894546b5a6bdc0fe15761fa53fe87d28527a7142dae8de3c663853e1 \ - --hash=sha256:ad3bfb44c8840fb4be719dc58e229f435e227fbfbe133dc33f34981ff622a8f8 \ - --hash=sha256:ae40f4a70a1f40939d66ecbaf8e7edc144fded190c4a45898a8cfe19d8fc85ea \ - --hash=sha256:b01b39ad5411563031ea3977bbbc7324d82b088e802339e6296f082f78f6115c \ - --hash=sha256:b2e3c4f2a8e3da47f850d7ea0d7d56720f0f091d66add889056098c4b2fd576c \ - --hash=sha256:b41941583adce4242af003d2a8337b066ba6148ca435f295f31ac6d9e4ea2722 \ - --hash=sha256:b4627520a02fccbd324b33c7a83e5d7906ec746e1083a9ac93c41ac7d15548c7 \ - --hash=sha256:ba9f1d1ebe4b63801977cec7401f2d41e888128ae40b5441270d43140efcad52 \ - --hash=sha256:c03a435d26c3999c2a8642cecad5d1c4d10c961817536af52035f6f4ee2f5dd0 \ - --hash=sha256:c200b30dd573afa83847bed7e3041aa36a8145221bf0cfdfaa62d974d720805c \ - --hash=sha256:c493365d3fad241d52f096e4995475a60a80f4eba4d3ff89b713bc65c2ca9615 \ - --hash=sha256:c4d42e83ddbf3445e6514f0aff96dca511421ed0392d9977d3990d9f1ba6753c \ - --hash=sha256:c60528671d9d467009a6ec284582179f6b88651e83367d0ab54cb739021cd7de \ - --hash=sha256:c72ebc22e70e04126158c46ba56b85372bc4d54d00d296be060b0db1671638a4 \ - --hash=sha256:ccbbd276642788c4376fbe8d4e6c50f0fb4972ce09ecb051509062915891cbf0 \ - --hash=sha256:ceaac0c603bf5ac2f505a78b2dcab78d3e6b706be6596c8364b64cc613d208d2 \ - --hash=sha256:d19db6ba816e7f59fc806c690918da80a7d186f00247048cd833acdab9b4847b \ - --hash=sha256:d5c191713e98e7c28800233f039a32a42c1a4f9a001a8a0f2448b07391881036 \ - --hash=sha256:d64f9f88d5203274a002b54442cafc9c7a1abff2a238f3e767b70aadf919b451 \ - --hash=sha256:d77dff3a5aa5eedcc3da0ebd10ff8e4969bc9541aa3333a8d41715b429e99f47 \ - --hash=sha256:dd4f16e57c12c0ae17606c53d1b57d8d1c8792efe3f065a37cb3341340599d49 \ - --hash=sha256:e39d7ab0c18ac99955b36cd19f43926450baba21e3250f053e0704d6ffd76873 \ - --hash=sha256:e3d0cd3dff0e7638a7b5390f3a53057c4e347f4ef122ee84ed93fc2fb7ea4aa2 \ - --hash=sha256:e7dfb1cbb895810fa2b892b68153c17716c6abaa22c7dc2b2f6dcf3364932a1c \ - --hash=sha256:e8e24b210a4deb5a7744971f8f77393005bae7f873568e37dfd9effe808be7f7 \ - --hash=sha256:e9c0683cb35a9b5881b41bc01d5568ffc667910d9dbc632a1fba4e7d59e98773 \ - --hash=sha256:ed41f3f49507936a6fe7003985ea2574daccfef999775525d79eb67344e23767 \ - --hash=sha256:ee744fca8d1ea822480a2a4e7c5f2e1950745477143668f0b523769426060f29 \ - --hash=sha256:f3f1e860be21f3e83011116a65e7310486300e08d9a3028e73e8d13bb6c77292 \ - --hash=sha256:f43ab4cb04bde6109eb2555528a64dfd8a265cc6a9920a67dcbde13ef53a46c8 \ - --hash=sha256:f53f55a8852f0e49b0fc76f2412045d6ad9d5772251dea8f55ea45021616e7d5 \ - --hash=sha256:f59996d0550894affaad8743e97b9b9c98f638b221fac12909210ec3d9294786 \ - --hash=sha256:f96f3f98fbff7af29e9edf9a6584f3c1382e7788783d07ba3721790625caa43e \ - --hash=sha256:f9adb5664b78fcfcd830000416c8cc69853ef43cb084d645b3f1f0296edd9bae \ - --hash=sha256:fa326b3505d5784436d9433b7980171ab2375535d93dd63fbcd20af2b5ca1bb6 \ - --hash=sha256:fafc0049add8043ad07ab5382ee80d80ed7e3699847f26c9a5cf4d3714d96a84 - # via - # jsonschema - # referencing -ruamel-yaml==0.17.32 \ - --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ - --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 - # via semgrep -ruamel-yaml-clib==0.2.7 \ - --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ - --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ - --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ - --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ - --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ - --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ - --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ - --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ - --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ - --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ - --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ - --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ - --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ - --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ - --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ - --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ - --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ - --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ - --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ - --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ - --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ - --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ - --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ - --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ - --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ - --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ - --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ - --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ - --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ - --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ - --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ - --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ - --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ - --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ - --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 - # via ruamel-yaml -semgrep==1.31.2 \ - --hash=sha256:0fc463f8afcc649efaf61c00f17f7c124498c2e95cca9d805fd68d203362cdeb \ - --hash=sha256:30d0662a6ac8d7258af3b383cca1c93da646fc99b60e3247f6acf3dcf764e815 \ - --hash=sha256:c26ce223c60688e317299f97cac9889b3e879dc4ee28097555cad6215086dcf4 \ - --hash=sha256:cd707b74cd76ef5dff974df3fe653967faf1bd0248019f7b6777170cefa4fca5 - # via -r requirements/dev-bullseye-requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # black - # build - # coverage - # mypy - # pip-tools - # pyproject-hooks - # pytest - # semgrep -types-setuptools==68.0.0.1 \ - --hash=sha256:a0454ea7ad0711f63a602caa87929003a83cab89224ae1506ed44bb5be8fe7d7 \ - --hash=sha256:cc5acbc464b106104899e9b9eb4955dd47e854753c8d4ee2ce697eaf0f4d74e1 - # via -r requirements/dev-bullseye-requirements.in -typing-extensions==4.7.1 \ - --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ - --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 - # via - # black - # mypy - # semgrep -ujson==5.8.0 \ - --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ - --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ - --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ - --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ - --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ - --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ - --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ - --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ - --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ - --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ - --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ - --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ - --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ - --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ - --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ - --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ - --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ - --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ - --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ - --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ - --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ - --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ - --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ - --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ - --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ - --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ - --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ - --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ - --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ - --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ - --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ - --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ - --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ - --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ - --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ - --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ - --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ - --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ - --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ - --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ - --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ - --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ - --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ - --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ - --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ - --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ - --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ - --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ - --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ - --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ - --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ - --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ - --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ - --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ - --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ - --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ - --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ - --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ - --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ - --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ - --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c - # via python-lsp-jsonrpc -urllib3==1.26.16 \ - --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ - --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 - # via - # requests - # semgrep -wcmatch==8.4.1 \ - --hash=sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7 \ - --hash=sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943 - # via semgrep -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 - # via pip-tools - -# The following packages are considered to be unsafe in a requirements file: -pip==23.1.2 \ - --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ - --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 - # via pip-tools -setuptools==68.0.0 \ - --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ - --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 - # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index e69de29bb..000000000 diff --git a/requirements/requirements.txt b/requirements/requirements.txt deleted file mode 100644 index b7f4b2d8b..000000000 --- a/requirements/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: -# -# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in -# diff --git a/scripts/codename b/scripts/codename deleted file mode 100755 index 261793bc5..000000000 --- a/scripts/codename +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# Returns the Debian version's codename (e.g. "bullseye") in a way that should -# work across both released versions and unreleased ones. -# See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008735 - -source /etc/os-release - -if [[ "$VERSION_CODENAME" != "" ]]; then - echo $VERSION_CODENAME -else - # PRETTY_NAME="Debian GNU/Linux bookworm/sid" - # Use awk to split on spaces and / - echo $PRETTY_NAME | awk '{split($0, a, "[ /]"); print a[4]}' -fi - From 7a8318ff7bd7bacf0c20b8799958eebbc131e83c Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 585/751] Translated using Weblate (Catalan) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Catalan) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Catalan) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Catalan) Currently translated at 100.0% (98 of 98 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Benet (BennyBeat) R. i Camps Co-authored-by: John Smith Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ca/ Translation: SecureDrop/SecureDrop Client --- .../locale/ca/LC_MESSAGES/messages.po | 97 ++++++++++++++----- 1 file changed, 75 insertions(+), 22 deletions(-) diff --git a/securedrop_client/locale/ca/LC_MESSAGES/messages.po b/securedrop_client/locale/ca/LC_MESSAGES/messages.po index e196bea60..587f725fd 100644 --- a/securedrop_client/locale/ca/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/ca/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-23 12:33+0000\n" -"Last-Translator: Benet (BennyBeat) R. i Camps \n" +"PO-Revision-Date: 2023-10-19 13:30+0000\n" +"Last-Translator: \"Benet (BennyBeat) R. i Camps\" \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} ja s'ha iniciat" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "S'està recuperant 1 missatge" +msgstr[1] "S'estan recuperant {message_count} missatges" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "No es pot arribar al servidor del SecureDrop. S'intenta de nou..." @@ -48,10 +53,7 @@ msgid "Your session expired. Please log in again." msgstr "La sessió ha caducat. Torneu a iniciar-hi sessió." msgid "Failed to update star." -msgstr "No s'ha pogut actualitzar l'estrela." - -msgid "Retrieving new messages" -msgstr "S'estan obtenint els missatges nous" +msgstr "No s'ha pogut actualitzar l'estel." msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Els fitxers no existeixen al directori de dades. Proveu baixant-los novament." @@ -65,8 +67,23 @@ msgstr "Ha fallat la supressió de la conversa al servidor" msgid "Failed to delete source at server" msgstr "Ha fallat la supressió de la font al servidor" -msgid "Download All Files" -msgstr "Baixa tots els fitxers" +msgid "No messages." +msgstr "Cap missatge." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s ha escrit:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s ha enviat:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Fitxer: %(filename)s" + +msgid "Download All" +msgstr "Baixa-ho tot" msgid "Delete Source Account" msgstr "Supressió del compte de la font" @@ -74,6 +91,21 @@ msgstr "Supressió del compte de la font" msgid "Delete All Files and Messages" msgstr "Suprimeix tots els fitxers i missatges" +msgid "Print Transcript" +msgstr "Imprimeix la transcripció" + +msgid "Export Transcript" +msgstr "Exporta la transcripció" + +msgid "Export All" +msgstr "Exporta-ho tot" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Alguns fitxers no s'exportaran

Alguns fitxers d'aquesta font encara no s'han baixat, i no s'exportaran.

Per a exportar els fitxers baixats, feu clic a «Continua»." + +msgid "all files and transcript" +msgstr "tots els fitxers i la transcripció" + msgid "SecureDrop Client {}" msgstr "Client del SecureDrop {}" @@ -96,7 +128,7 @@ msgid "SIGN IN" msgstr "INICIA LA SESSIÓ" msgid "Nothing to see just yet!" -msgstr "Encara no hi ha res per mostrar" +msgstr "Encara no hi ha res per a mostrar" msgid "Source submissions will be listed to the left, once downloaded and decrypted." msgstr "Els enviaments de les fonts es llistaran a l'esquerra, una vegada es baixen i es desxifren." @@ -116,11 +148,11 @@ msgstr "Veure o obtenir fitxers" msgid "Send a response" msgstr "Enviar una resposta" -msgid "Deleting files and messages..." -msgstr "S'estan suprimint fitxers i missatges..." +msgid "Deleting files and messages…" +msgstr "S'estan suprimint els fitxers i missatges…" -msgid "Deleting source account..." -msgstr "S'està suprimint el compte de la font..." +msgid "Deleting source account…" +msgstr "S'està eliminant el compte de la font…" msgid "— All files and messages deleted for this source —" msgstr "— S'han suprimit tots els fitxers i missatges d'aquesta font —" @@ -171,6 +203,12 @@ msgstr "Inici de sessió" msgid " to compose or send a reply" msgstr " per escriure o respondre" +msgid "FILES AND MESSAGES" +msgstr "FITXERS I MISSATGES" + +msgid "SOURCE ACCOUNT" +msgstr "COMPTE DE LA FONT" + msgid "Username" msgstr "Nom d’usuari" @@ -225,8 +263,8 @@ msgstr "CONTINUA" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SÍ, SUPRIMEIX FITXERS I MISSATGES" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Segur que voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte font {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte de la font {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Preservant el compte es mantindran les metadades i podreu iniciar sessió novament a {source} del vostre SecureDrop." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "un missatge" msgstr[1] "{message_count} missatges" +msgid "SUBMIT" +msgstr "ENVIA" + msgid "Preparing to export:
{}" msgstr "S'està preparant per a exportar:
{}" @@ -282,15 +323,9 @@ msgstr "La contrasenya que he inserit no és vàlida. Torneu a provar." msgid "See your administrator for help." msgstr "Contacteu amb l'administrador si us cal ajuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "El botó CONTINUA romandrà desactivat fins que la informació no estigui enllestida" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Recordeu tenir cura quan treballeu amb informació fora del vostre equip." -msgid "SUBMIT" -msgstr "ENVIA" - msgid "DONE" msgstr "FET" @@ -330,5 +365,23 @@ msgstr "La vostra organització no podrà enviar respostes." msgid "All files and messages from that source will also be destroyed." msgstr "També es destruiran tots els missatges de la font." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Segur que voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte font {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "S'estan suprimint fitxers i missatges..." + +#~ msgid "Deleting source account..." +#~ msgstr "S'està suprimint el compte de la font..." + +#~ msgid "Download All Files" +#~ msgstr "Baixa tots els fitxers" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Imprimeix la transcripció de la conversa" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "El botó CONTINUA romandrà desactivat fins que la informació no estigui enllestida" + #~ msgid "DELETE" #~ msgstr "SUPRIMEIX" From bb2e66291c589353da9d21ccebffae8fc4d07390 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 586/751] Translated using Weblate (Turkish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Turkish) Currently translated at 87.5% (91 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Alper Gunay Co-authored-by: Cory Francis Myers Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/tr/ Translation: SecureDrop/SecureDrop Client --- .../locale/tr/LC_MESSAGES/messages.po | 90 ++++++++++++++----- 1 file changed, 70 insertions(+), 20 deletions(-) diff --git a/securedrop_client/locale/tr/LC_MESSAGES/messages.po b/securedrop_client/locale/tr/LC_MESSAGES/messages.po index 790329591..d0d09edfc 100644 --- a/securedrop_client/locale/tr/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/tr/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.1\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-23 05:17+0000\n" -"Last-Translator: tekrei \n" +"PO-Revision-Date: 2023-10-13 13:30+0000\n" +"Last-Translator: Alper Gunay \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} zaten çalışıyor" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "1 mesaj gösteriliyor" +msgstr[1] "{message_count} mesaj gösteriliyor" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "SecureDrop sunucusuna erişilemedi. Bağlantı yeniden kurulmaya çalışılıyor..." @@ -50,9 +55,6 @@ msgstr "Oturumunuzun süresi dolmuş. Lütfen yeniden oturum açın." msgid "Failed to update star." msgstr "Yıldız güncellenemedi." -msgid "Retrieving new messages" -msgstr "Yeni iletiler alınıyor" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Dosya data klasöründe bulunamadı. Lütfen yeniden indirmeyi deneyin." @@ -65,8 +67,23 @@ msgstr "Sunucudaki yazışma silinemedi" msgid "Failed to delete source at server" msgstr "Sunucudaki kaynak silinemedi" -msgid "Download All Files" -msgstr "Tüm Dosyaları İndir" +msgid "No messages." +msgstr "Mesaj yok." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s yazdı:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s gönderdi:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Dosya: %(filename)s" + +msgid "Download All" +msgstr "Hepsini indir" msgid "Delete Source Account" msgstr "Kaynak Hesabını Sil" @@ -74,6 +91,21 @@ msgstr "Kaynak Hesabını Sil" msgid "Delete All Files and Messages" msgstr "Tüm Dosya ve İletileri Sil" +msgid "Print Transcript" +msgstr "Transkripti yazdır" + +msgid "Export Transcript" +msgstr "Transkripti dışa aktar" + +msgid "Export All" +msgstr "Hepsini dışa aktar" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Bazı dosyalar dışa aktarılmayacak

Bu kaynaktaki bazı dosyalar henüz indirilmedi ve dışa aktarılmayacak.

İndirilen dosyaları dışa aktarmak için \"Devam et.\" seçeneğine tıklayın." + +msgid "all files and transcript" +msgstr "tüm dosyalar ve transkript" + msgid "SecureDrop Client {}" msgstr "SecureDrop İstemcisi {}" @@ -116,11 +148,11 @@ msgstr "Dosyaları görüntüle ya da al" msgid "Send a response" msgstr "Yanıt ver" -msgid "Deleting files and messages..." -msgstr "Dosya ve iletiler siliniyor..." +msgid "Deleting files and messages…" +msgstr "Dosyalar ve mesajlar siliniyor…" -msgid "Deleting source account..." -msgstr "Kaynak hesap siliniyor..." +msgid "Deleting source account…" +msgstr "Kaynak hesap siliniyor…" msgid "— All files and messages deleted for this source —" msgstr "— Bu kaynağın tüm dosya ve iletileri silindi —" @@ -171,6 +203,12 @@ msgstr "Oturum açarak" msgid " to compose or send a reply" msgstr " yanıt yazın ya da gönderin" +msgid "FILES AND MESSAGES" +msgstr "DOSYALAR VE MESAJLAR" + +msgid "SOURCE ACCOUNT" +msgstr "KAYNAK HESAP" + msgid "Username" msgstr "Kullanıcı adı" @@ -225,8 +263,8 @@ msgstr "DEVAM" msgid "YES, DELETE FILES AND MESSAGES" msgstr "EVET, DOSYALARI VE İLETİLERİ SİL" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "{source} hesabından {files_to_delete}, {replies_to_delete}, {messages_to_delete} silmek istiyor musunuz?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "{source} kaynak hesabından bunları silmek istiyor musunuz: {files_to_delete}{replies_to_delete}{messages_to_delete}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Hesabı korumak, üst verileri korur ve {source} için SecureDrop ile yeniden oturum açılabilmesini sağlar." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "bir ileti" msgstr[1] "{message_count} ileti" +msgid "SUBMIT" +msgstr "GÖNDER" + msgid "Preparing to export:
{}" msgstr "Dışa aktarmaya hazırlanılıyor:
{}" @@ -282,15 +323,9 @@ msgstr "Belirtilen parola işe yaramadı. Lütfen yeniden deneyin." msgid "See your administrator for help." msgstr "Yardım almak için yöneticinizle görüşün." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Dışa aktarma sanal makinesi hazır olana kadar DEVAM düğmesi devre dışı görünür" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "İş İstasyonu bilgisayarınızın dışındaki dosyalarla çalışırken dikkatli olmayı unutmayın." -msgid "SUBMIT" -msgstr "GÖNDER" - msgid "DONE" msgstr "TAMAM" @@ -330,6 +365,21 @@ msgstr "Kuruluşunuz onlara yanıt gönderemeyecek." msgid "All files and messages from that source will also be destroyed." msgstr "Bu kaynağın tüm dosya ve iletileri de silinir." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "{source} hesabından {files_to_delete}, {replies_to_delete}, {messages_to_delete} silmek istiyor musunuz?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Dosya ve iletiler siliniyor..." + +#~ msgid "Deleting source account..." +#~ msgstr "Kaynak hesap siliniyor..." + +#~ msgid "Download All Files" +#~ msgstr "Tüm Dosyaları İndir" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Dışa aktarma sanal makinesi hazır olana kadar DEVAM düğmesi devre dışı görünür" + #~ msgid "Entire source account" #~ msgstr "Tüm kaynak hesabı" From 3956cd0cf3d5c1574ffe2660a34ff311a7b3f6a8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 587/751] Translated using Weblate (Icelandic) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Icelandic) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Icelandic) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Icelandic) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Icelandic) Currently translated at 100.0% (98 of 98 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Icelandic) Currently translated at 100.0% (97 of 97 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Icelandic) Currently translated at 100.0% (93 of 93 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Oktavia Co-authored-by: Sveinn í Felli Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/is/ Translation: SecureDrop/SecureDrop Client --- .../locale/is/LC_MESSAGES/messages.po | 102 ++++++++++++++---- 1 file changed, 79 insertions(+), 23 deletions(-) diff --git a/securedrop_client/locale/is/LC_MESSAGES/messages.po b/securedrop_client/locale/is/LC_MESSAGES/messages.po index 269dbfe6d..ef21c86e3 100644 --- a/securedrop_client/locale/is/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/is/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-09 04:11+0000\n" -"Last-Translator: Sveinn í Felli \n" +"PO-Revision-Date: 2023-10-26 02:30+0000\n" +"Last-Translator: Oktavia \n" "Language-Team: Icelandic \n" "Language: is\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} er þegar í gangi" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Tek á móti 1 skilaboðum" +msgstr[1] "Tek á móti {message_count} skilaboðum" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Tókst ekki að ná sambandi við SecureDrop-þjóninn. Reyni aftur að tengjast..." @@ -50,9 +55,6 @@ msgstr "Setan þin er útrunnin. Skráðu þig aftur inn." msgid "Failed to update star." msgstr "Mistókst að uppfæra stjörnu." -msgid "Retrieving new messages" -msgstr "Tek á móti nýjum skilaboðum" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Skráin er ekki til staðar í gagnamöppunni. Prófaðu að sækja hana aftur." @@ -65,15 +67,45 @@ msgstr "Mistókst að eyða samtali á netþjóni" msgid "Failed to delete source at server" msgstr "Mistókst að eyða heimildarmanni á netþjóni" -msgid "Download All Files" -msgstr "Sækja allar skrár" +msgid "No messages." +msgstr "Engin skilaboð." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s skrifaði:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s sendi:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Skrá: %(filename)s" + +msgid "Download All" +msgstr "Sækja allt" msgid "Delete Source Account" -msgstr "Eyði aðgangi heimildarmanns" +msgstr "Eyða aðgangi heimildarmanns" msgid "Delete All Files and Messages" msgstr "Eyða öllum skrám og skilaboðum" +msgid "Print Transcript" +msgstr "Prenta umritun" + +msgid "Export Transcript" +msgstr "Flytja umritun út" + +msgid "Export All" +msgstr "Flytja allt út" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Sumar skrár verða ekki fluttar út

Ekki er búið að sækja sumar skrár frá þessum heimildarmanni og verða þær þá ekki fluttar út.

Til að flytja út þær skrár sem búið er að sækja skaltu smella á \"Halda áfram.\"" + +msgid "all files and transcript" +msgstr "allar skrár og umritanir" + msgid "SecureDrop Client {}" msgstr "SecureDrop biðlari {}" @@ -116,11 +148,11 @@ msgstr "Skoða eða sækja skrár" msgid "Send a response" msgstr "Senda svar" -msgid "Deleting files and messages..." -msgstr "Eyði skrám og skilaboðum..." +msgid "Deleting files and messages…" +msgstr "Eyði skrám og skilaboðum…" -msgid "Deleting source account..." -msgstr "Eyði aðgangi heimildarmanns..." +msgid "Deleting source account…" +msgstr "Eyði aðgangi heimildarmanns…" msgid "— All files and messages deleted for this source —" msgstr "— Öllum skrám og skilaboðum eytt fyrir þennan heimildarmann —" @@ -171,6 +203,12 @@ msgstr "Skrá inn" msgid " to compose or send a reply" msgstr " til að semja eða senda svör" +msgid "FILES AND MESSAGES" +msgstr "SKRÁR OG SKILABOÐ" + +msgid "SOURCE ACCOUNT" +msgstr "AÐGANGUR HEIMILDAR" + msgid "Username" msgstr "Notandanafn" @@ -178,7 +216,7 @@ msgid "Passphrase" msgstr "Lykilorð" msgid "Two-Factor Code" -msgstr "Teggja-þátta kóði" +msgstr "Tveggja-þátta kóði" msgid "SecureDrop Client v{}" msgstr "SecureDrop biðlari útg.{}" @@ -225,11 +263,11 @@ msgstr "HALDA ÁFRAM" msgid "YES, DELETE FILES AND MESSAGES" msgstr "JÁ, EYÐA SKRÁM OG SKILABOÐUM" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} úr aðgangi heimildarmannsins {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} af aðgangi heimildamannsins {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Sé aðgangnum haldið, geymast lýsigögn hans og möguleikinn fyrir {source} til að skrá sig aftur inn á SecureDrop hjá þér." +msgstr "Sé aðganginum haldið, geymast lýsigögn hans og möguleikinn fyrir {source} til að skrá sig aftur inn á SecureDrop hjá þér." msgid "one file" msgid_plural "{file_count} files" @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "ein skilaboð" msgstr[1] "{message_count} skilaboð" +msgid "SUBMIT" +msgstr "SENDA INN" + msgid "Preparing to export:
{}" msgstr "Undirbý útflutning:
{}" @@ -282,15 +323,9 @@ msgstr "Uppgefið lykilorð virkaði ekki. Reyndu aftur." msgid "See your administrator for help." msgstr "Hafðu samband við kerfisstjórann þinn til að fá frekari aðstoð." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "HALDA ÁFRAM hnappurinn verður óvirkur þar til útflutnings-sýndarvélin (Export VM) er tilbúin" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Mundu eftir að fara varlega þegar þú ert að vinna með skrár utan vinnutölvunnar þinnar." -msgid "SUBMIT" -msgstr "SENDA INN" - msgid "DONE" msgstr "LOKIÐ" @@ -330,6 +365,27 @@ msgstr "Þið munið ekki geta sent þeim svör." msgid "All files and messages from that source will also be destroyed." msgstr "Öllum skilaboðum og skrám frá þessum heimildarmanni verður einnig eytt." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} úr aðgangi heimildarmannsins {source}?" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "

Sumar skrár verða ekki fluttar út

Ekki er búið að sækja sumar skrár frá þessum heimildarmanni og verða þær þá ekki fluttar út.

Til að flytja út þær skrár sem búið er að sækja skaltu smella á \"Halda áfram.\"" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Eyði skrám og skilaboðum..." + +#~ msgid "Deleting source account..." +#~ msgstr "Eyði aðgangi heimildarmanns..." + +#~ msgid "Download All Files" +#~ msgstr "Sækja allar skrár" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Prenta umritun samtals" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "HALDA ÁFRAM hnappurinn verður óvirkur þar til útflutnings-sýndarvélin (Export VM) er tilbúin" + #~ msgid "Entire source account" #~ msgstr "Öllum aðgangi heimildarmanns" From ba0c750fec00a57c07d75a0ad79f10453be559d4 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 588/751] Translated using Weblate (Portuguese (Brazil)) Currently translated at 95.1% (99 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Portuguese (Brazil)) Currently translated at 84.6% (88 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Cory Francis Myers Co-authored-by: Guilherme Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/pt_BR/ Translation: SecureDrop/SecureDrop Client --- .../locale/pt_BR/LC_MESSAGES/messages.po | 105 +++++++++++++----- 1 file changed, 75 insertions(+), 30 deletions(-) diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po index dc1a24cd7..58c52201a 100644 --- a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.6.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-05-19 12:11+0000\n" -"Last-Translator: Flávio José de Siqueira Cavalcanti Veras \n" +"PO-Revision-Date: 2023-06-13 19:56+0000\n" +"Last-Translator: Guilherme \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} já está executando" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Recuperando 1 mensagem" +msgstr[1] "Recuperando {message_count} mensagens" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "SecureDrop não pode ser alcançado. Tentando reconectar..." @@ -50,9 +55,6 @@ msgstr "Sua sessão expirou. Por favor, acesse sua conta novamente." msgid "Failed to update star." msgstr "Falha ao atualizar estrela." -msgid "Retrieving new messages" -msgstr "Obtendo novas mensagens" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Arquivo não existe no diretório de dados. Por favor, tente fazer o download novamente." @@ -65,20 +67,44 @@ msgstr "Falhou ao tentar apagar conversar no server" msgid "Failed to delete source at server" msgstr "Falhou ao apagar fonte no server" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Todos os Arquivos" +msgid "No messages." +msgstr "Não há mensagens." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s escreveu:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s enviou:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Arquivo: %(filename)s" + +msgid "Download All" +msgstr "Baixar tudo" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Apagando conta da fonte..." +msgstr "" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Apagando arquivos e mensagens..." +msgstr "Apagar Todos os Arquivos e Mensagens" + +msgid "Print Transcript" +msgstr "Imprimir conversa" + +msgid "Export Transcript" +msgstr "Exportar Conversa" + +msgid "Export All" +msgstr "Exportar tudo" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Alguns arquivos não serão exportados

Alguns arquivos dessa fonte ainda não foram baixados, e, por isso, não serão exportados.

Para exportar os arquivos já baixados clique em \"Continuar.\"" + +msgid "all files and transcript" +msgstr "todos os arquivos e a conversa" msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -122,11 +148,11 @@ msgstr "Veja ou obtenha arquivos" msgid "Send a response" msgstr "Envie uma resposta" -msgid "Deleting files and messages..." -msgstr "Apagando arquivos e mensagens..." +msgid "Deleting files and messages…" +msgstr "Apagando todos os arquivos e mensagens…" -msgid "Deleting source account..." -msgstr "Apagando conta da fonte..." +msgid "Deleting source account…" +msgstr "" msgid "— All files and messages deleted for this source —" msgstr "— Todos os arquivos e mensagens desta fonte foram deletados —" @@ -177,6 +203,12 @@ msgstr "Acessar conta" msgid " to compose or send a reply" msgstr " para escrever ou enviar uma resposta" +msgid "FILES AND MESSAGES" +msgstr "ARQUIVOS E MENSAGENS" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Nome de usuário" @@ -220,9 +252,8 @@ msgid "USE OFFLINE" msgstr "USE OFFLINE" #, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Frase-passe" +msgstr "Mostrar Frase-senha" msgid "CANCEL" msgstr "CANCELAR" @@ -233,8 +264,8 @@ msgstr "CONTINUAR" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SIM, APAGAR ARQUIVOS E MENSAGENS" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Mantendo a conta será retido os metadados, e a possibilidade de {source} entrar no seu SecureDrop novamente." @@ -254,6 +285,9 @@ msgid_plural "{message_count} messages" msgstr[0] "uma mensagem" msgstr[1] "{message_count} mensagens" +msgid "SUBMIT" +msgstr "ENVIAR" + msgid "Preparing to export:
{}" msgstr "Preparando para exportar:
{}" @@ -290,15 +324,9 @@ msgstr "A frase-passe fornecida não funcionou. Por favor, tenta novamente." msgid "See your administrator for help." msgstr "Consulte seu administrador para ajuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "O botão CONTINUAR será desabilitado até que o arquivo VM esteja pronto" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Lembre-se de ter cuidado ao trabalhar com arquivos fora de sua estação de trabalho." -msgid "SUBMIT" -msgstr "ENVIAR" - msgid "DONE" msgstr "FEITO" @@ -338,6 +366,23 @@ msgstr "Sua organização não poderá enviar respostas a eles." msgid "All files and messages from that source will also be destroyed." msgstr "Todos or arquivos e mensagens dessa fonte também serão destruídos." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Apagando arquivos e mensagens..." + +#~ msgid "Deleting source account..." +#~ msgstr "Apagando conta da fonte..." + +#, fuzzy +#~| msgid "All Files" +#~ msgid "Download All Files" +#~ msgstr "Todos os Arquivos" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "O botão CONTINUAR será desabilitado até que o arquivo VM esteja pronto" + #~ msgid "Entire source account" #~ msgstr "Conta completa da fonte" From f28655444ea09d96c16b284e2853c7083f6c4f3b Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 589/751] Translated using Weblate (Croatian) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Croatian) Currently translated at 96.1% (100 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Croatian) Currently translated at 87.5% (91 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Croatian) Currently translated at 100.0% (94 of 94 strings) Co-authored-by: Cory Francis Myers Co-authored-by: Igor K Co-authored-by: Milo Ivir Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/hr/ Translation: SecureDrop/SecureDrop Client --- .../locale/hr/LC_MESSAGES/messages.po | 107 ++++++++++++------ 1 file changed, 75 insertions(+), 32 deletions(-) diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.po b/securedrop_client/locale/hr/LC_MESSAGES/messages.po index 5752db09c..8f3aeb66b 100644 --- a/securedrop_client/locale/hr/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/hr/LC_MESSAGES/messages.po @@ -7,20 +7,26 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-05-18 11:11+0000\n" -"Last-Translator: Igor K. \n" +"PO-Revision-Date: 2023-10-14 20:30+0000\n" +"Last-Translator: \"Igor K.\" \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "Aplikacija {application_name} je već pokrenuta" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Preuzimanje jedne poruke" +msgstr[1] "Preuzimanje {message_count} poruka" +msgstr[2] "Preuzimanje {message_count} poruka" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Nije moguće doći do SecureDrop poslužitelja. Pokušavam se spojiti..." @@ -50,9 +56,6 @@ msgstr "Vaša sesija je istekla. Prijavite se opet." msgid "Failed to update star." msgstr "Nije uspjelo ažuriranje zvijezdice." -msgid "Retrieving new messages" -msgstr "Dohvaćanje novih poruka" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Datoteka ne postoji u direktoriju. Pokušajte ponovno preuzimanje." @@ -65,20 +68,44 @@ msgstr "Nije uspjelo brisanje razgovora na poslužitelju" msgid "Failed to delete source at server" msgstr "Nije uspjelo brisanje izvora na poslužitelju" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Sve datoteke" +msgid "No messages." +msgstr "Nema poruka." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s je napisao/la:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s je poslao/la:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Datoteka: %(filename)s" + +msgid "Download All" +msgstr "Preuzmi sve" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Brišem račun izvora..." +msgstr "Obriši račun izvora" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Brišem datoteke i poruke..." +msgstr "Izbriši sve datoteke i poruke" + +msgid "Print Transcript" +msgstr "Ispiši prijepis" + +msgid "Export Transcript" +msgstr "Izvezi prijepis" + +msgid "Export All" +msgstr "Izvezi sve" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Neke datoteke neće biti izvezene

Neke datoteke iz ovog izvora još nisu preuzete i neće biti izvezene.

Za izvoz trenutno preuzetih datoteka kliknite \"Nastavi.\"" + +msgid "all files and transcript" +msgstr "sve datoteke i prijepis" msgid "SecureDrop Client {}" msgstr "SecureDrop klijent{}" @@ -122,11 +149,11 @@ msgstr "Pogledali ili dohvatili datoteke" msgid "Send a response" msgstr "Poslali odgovor" -msgid "Deleting files and messages..." -msgstr "Brišem datoteke i poruke..." +msgid "Deleting files and messages…" +msgstr "Brisanje datoteka i poruka …" -msgid "Deleting source account..." -msgstr "Brišem račun izvora..." +msgid "Deleting source account…" +msgstr "Brisanje računa izvora …" msgid "— All files and messages deleted for this source —" msgstr "— Sve datoteke i poruke obrisane za ovaj izvor —" @@ -177,6 +204,12 @@ msgstr "Prijava" msgid " to compose or send a reply" msgstr " kako bi napisao ili poslao odgovor" +msgid "FILES AND MESSAGES" +msgstr "DATOTEKE I PORUKE" + +msgid "SOURCE ACCOUNT" +msgstr "RAČUN IZVORA" + msgid "Username" msgstr "Korisničko ime" @@ -219,22 +252,20 @@ msgstr "Molimo unesite korisničko ime, lozinku i dvofaktorski kod." msgid "USE OFFLINE" msgstr "Koristi offline" -#, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Lozinka" +msgstr "Pokaži lozinku" msgid "CANCEL" msgstr "Otkaži" msgid "CONTINUE" -msgstr "Nastavi" +msgstr "NASTAVI" msgid "YES, DELETE FILES AND MESSAGES" msgstr "Da, obriši datoteke i poruke" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Želite li izbrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} s računa izvora za {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Očuvanje računa će zadržati njegove metapodatke i mogućnost da se {source} ponovno prijavi na Vaš SecureDrop." @@ -257,6 +288,9 @@ msgstr[0] "jedna poruka" msgstr[1] "{message_count} poruke" msgstr[2] "{message_count} poruka" +msgid "SUBMIT" +msgstr "POŠALJI" + msgid "Preparing to export:
{}" msgstr "Priprema za izvoz:
{}" @@ -293,15 +327,9 @@ msgstr "Dana lozinka ne radi. Molimo pokušajte opet." msgid "See your administrator for help." msgstr "Obratite se administratoru za pomoć." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Gumb Nastavi će biti onemogućen sve dok Izvoz VM-a nije spreman" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Zapamtite - budite oprezni kad radite s datotekama izvan svoje radne stanice." -msgid "SUBMIT" -msgstr "Predaj" - msgid "DONE" msgstr "Gotovo" @@ -341,6 +369,21 @@ msgstr "Vaša organizacija mu neće moći slati odgovore." msgid "All files and messages from that source will also be destroyed." msgstr "Sve datoteke i poruke tog izvora će također biti uništene." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Brišem datoteke i poruke..." + +#~ msgid "Deleting source account..." +#~ msgstr "Brišem račun izvora..." + +#~ msgid "Download All Files" +#~ msgstr "Preuzmi sve datoteke" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Gumb Nastavi će biti onemogućen sve dok Izvoz VM-a nije spreman" + #~ msgid "Entire source account" #~ msgstr "Cijeli račun izvora" From 508801eeca0c14d8f6f60e97c3c1609ed42f28db Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 590/751] Translated using Weblate (German) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (German) Currently translated at 100.0% (97 of 97 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (German) Currently translated at 100.0% (93 of 93 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Ettore Atalan Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/de/ Translation: SecureDrop/SecureDrop Client --- .../locale/de/LC_MESSAGES/messages.po | 90 ++++++++++++++----- 1 file changed, 70 insertions(+), 20 deletions(-) diff --git a/securedrop_client/locale/de/LC_MESSAGES/messages.po b/securedrop_client/locale/de/LC_MESSAGES/messages.po index 9b4fa553f..c4a4f91bb 100644 --- a/securedrop_client/locale/de/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/de/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-22 22:22+0000\n" -"Last-Translator: Kevin Kandlbinder \n" +"PO-Revision-Date: 2023-06-13 21:56+0000\n" +"Last-Translator: Ettore Atalan \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} läuft bereits" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "1 Nachricht wird abgerufen" +msgstr[1] "{message_count} Nachrichten werden abgerufen" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Der SecureDrop-Server kann nicht erreicht werden. Versuche, die Verbindung wiederherzustellen ..." @@ -50,9 +55,6 @@ msgstr "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an." msgid "Failed to update star." msgstr "Stern konnte nicht aktualisiert werden." -msgid "Retrieving new messages" -msgstr "Neue Nachrichten werden abgerufen" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Datei existiert nicht im Datenverzeichnis. Bitte versuchen Sie, sie nochmals herunterzuladen." @@ -65,8 +67,23 @@ msgstr "Löschen der Konversation am Server fehlgeschlagen" msgid "Failed to delete source at server" msgstr "Löschen der Quelle am Server fehlgeschlagen" -msgid "Download All Files" -msgstr "Alle Dateien herunterladen" +msgid "No messages." +msgstr "Keine Nachrichten." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s schrieb:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s sendete:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Datei: %(filename)s" + +msgid "Download All" +msgstr "Alles herunterladen" msgid "Delete Source Account" msgstr "Quellkonto löschen" @@ -74,6 +91,21 @@ msgstr "Quellkonto löschen" msgid "Delete All Files and Messages" msgstr "Alle Dateien und Nachrichten löschen" +msgid "Print Transcript" +msgstr "Transkript drucken" + +msgid "Export Transcript" +msgstr "Transkript exportieren" + +msgid "Export All" +msgstr "Alles exportieren" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Manche Dateien werden nicht exportiert

Manche Dateien aus dieser Quelle wurden noch nicht heruntergeladen und werden daher nicht exportiert.

Klicken Sie auf „Weiter“, um die aktuell heruntergeladenen Dateien zu exportieren." + +msgid "all files and transcript" +msgstr "alle Dateien und Transkript" + msgid "SecureDrop Client {}" msgstr "SecureDrop-Client {}" @@ -116,11 +148,11 @@ msgstr "Dateien ansehen oder abrufen" msgid "Send a response" msgstr "Antwort senden" -msgid "Deleting files and messages..." -msgstr "Löschen von Dateien und Nachrichten..." +msgid "Deleting files and messages…" +msgstr "Dateien und Nachrichten werden gelöscht…" -msgid "Deleting source account..." -msgstr "Quellkonto löschen..." +msgid "Deleting source account…" +msgstr "Quellkonto wird gelöscht…" msgid "— All files and messages deleted for this source —" msgstr "— Alle Dateien und Nachrichten für diese Quelle sind gelöscht —" @@ -171,6 +203,12 @@ msgstr "Anmelden" msgid " to compose or send a reply" msgstr " um eine Antwort zu verfassen oder zu senden" +msgid "FILES AND MESSAGES" +msgstr "DATEIEN UND NACHRICHTEN" + +msgid "SOURCE ACCOUNT" +msgstr "QUELLKONTO" + msgid "Username" msgstr "Benutzername" @@ -225,8 +263,8 @@ msgstr "FORTSETZEN" msgid "YES, DELETE FILES AND MESSAGES" msgstr "JA, DATEIEN UND NACHRICHTEN LÖSCHEN" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Sie möchten {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Möchten Sie {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Wenn Sie das Konto behalten, bleiben seine Metadaten erhalten, und {source} kann sich erneut bei SecureDrop anmelden." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "Eine Nachricht" msgstr[1] "{message_count} Nachrichten" +msgid "SUBMIT" +msgstr "EINREICHEN" + msgid "Preparing to export:
{}" msgstr "Vorbereitung für den Export:
{}" @@ -282,15 +323,9 @@ msgstr "Die angegebene Passphrase hat nicht funktioniert. Bitte versuchen Sie es msgid "See your administrator for help." msgstr "Wenden Sie sich an Ihren Administrator, um Hilfe zu erhalten." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Die Schaltfläche FORTSETZEN wird deaktiviert, bis die Export-VM bereit ist" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Seien Sie vorsichtig, wenn Sie mit Dateien außerhalb Ihres Workstation-Rechners arbeiten." -msgid "SUBMIT" -msgstr "EINREICHEN" - msgid "DONE" msgstr "FERTIG" @@ -330,6 +365,21 @@ msgstr "Ihre Organisation kann ihnen dann keine Antworten senden." msgid "All files and messages from that source will also be destroyed." msgstr "Alle Dateien und Nachrichten von dieser Quelle werden ebenfalls zerstört." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Sie möchten {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Löschen von Dateien und Nachrichten..." + +#~ msgid "Deleting source account..." +#~ msgstr "Quellkonto löschen..." + +#~ msgid "Download All Files" +#~ msgstr "Alle Dateien herunterladen" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Die Schaltfläche FORTSETZEN wird deaktiviert, bis die Export-VM bereit ist" + #~ msgid "Entire source account" #~ msgstr "Gesamtes Quellkonto" From 64021ac0f768298b4212827a1308f07834d8762c Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 591/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Greek) Currently translated at 87.5% (91 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Greek) Currently translated at 100.0% (94 of 94 strings) Added translation using Weblate (Greek) Co-authored-by: Adrian Co-authored-by: Cory Francis Myers Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/el/ Translation: SecureDrop/SecureDrop Client --- .../locale/el/LC_MESSAGES/messages.po | 381 ++++++++++++++++++ 1 file changed, 381 insertions(+) create mode 100644 securedrop_client/locale/el/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/el/LC_MESSAGES/messages.po b/securedrop_client/locale/el/LC_MESSAGES/messages.po new file mode 100644 index 000000000..9f54b50d8 --- /dev/null +++ b/securedrop_client/locale/el/LC_MESSAGES/messages.po @@ -0,0 +1,381 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.8.1\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-03-15 23:17+0000\n" +"Last-Translator: Cory Francis Myers \n" +"Language-Team: Greek \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" +"Generated-By: Babel 2.10.3\n" + +msgid "{application_name} is already running" +msgstr "Το {application_name} εκτελείται ήδη" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Ο διακομιστής του SecureDrop δεν είναι προσπελάσιμος. Προσπάθεια επανασύνδεσης..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Δεν μπορούμε να προσπελάσουμε τον διακομιστή του SecureDrop. \n" +"Παρακαλούμε ελέγξτε τη σύνδεσή σας στο διαδίκτυο και το Tor, και προσπαθήστε ξανά." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Αυτά τα στοιχεία σύνδεσης δεν δούλεψαν. Παρακαλώ προσπαθήστε ξανά,\n" +"και επιβεβαιώστε πως θα χρησιμοποιήσετε ένα νέο κωδικό δύο παραγόντων." + +msgid "That didn't work. Please check everything and try again." +msgstr "Αυτό δε δούλεψε. Παρακαλώ ελέγξτε τα πάντα και προσπαθήστε ξανά." + +msgid "You must sign in to perform this action." +msgstr "Πρέπει να συνδεθείτε για να πραγματοποιήσετε αυτή την ενέργεια." + +msgid "Your session expired. Please log in again." +msgstr "Η συνεδρία σας έληξε. Παρακαλώ συνδεθείτε ξανά." + +msgid "Failed to update star." +msgstr "Αδυναμία ανανέωσης αγαπημένου." + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Το αρχείο δεν υπάρχει στο φάκελο δεδομένων. Παρακαλώ προσπαθήστε να το ξανακατεβάσετε." + +msgid "The file download failed. Please try again." +msgstr "Η λήψη του αρχείου απέτυχε. Παρακαλώ δοκιμάστε ξανά." + +msgid "Failed to delete conversation at server" +msgstr "Αποτυχία διαγραφής της συζήτησης στον διακομιστή" + +msgid "Failed to delete source at server" +msgstr "Αποτυχία διαγραφής της πηγής στον διακομιστή" + +msgid "No messages." +msgstr "" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" +msgstr "" + +msgid "Delete Source Account" +msgstr "Διαγραφή λογαριασμού πηγής" + +msgid "Delete All Files and Messages" +msgstr "Διαγραφή όλων των αρχείων και μηνυμάτων" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop Client {}" + +msgid "Quit" +msgstr "Έξοδος" + +msgid "Last Refresh: {}" +msgstr "Τελευταία ανανέωση: {}" + +msgid "Last Refresh: never" +msgstr "Τελευταία ανανέωση: ποτέ" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "ΑΠΟΣΥΝΔΕΣΗ" + +msgid "SIGN IN" +msgstr "ΣΥΝΔΕΣΗ" + +msgid "Nothing to see just yet!" +msgstr "Δεν υπάρχει κάτι να δείτε ακόμα!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Οι υποβολές από τις πηγές θα εμφανίζονται στα αριστερά, αφού ληφθούν και αποκρυπτογραφηθούν." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Εδώ θα διαβάζετε τα μηνύματα, θα απαντάτε στις πηγές και θα χρησιμοποιείτε τα αρχεία." + +msgid "Select a source from the list, to:" +msgstr "Επιλέξτε μια πηγή από τη λίστα, για να:" + +msgid "Read a conversation" +msgstr "Διαβάστε μια συνομιλία" + +msgid "View or retrieve files" +msgstr "Δείτε ή λάβετε αρχεία" + +msgid "Send a response" +msgstr "Στείλτε μια απάντηση" + +msgid "Deleting files and messages…" +msgstr "" + +msgid "Deleting source account…" +msgstr "" + +msgid "— All files and messages deleted for this source —" +msgstr "— Όλα τα αρχεία και τα μηνύματα αυτής της πηγής διαγράφτηκαν —" + +msgid "Failed to send" +msgstr "Αποτυχία αποστολής" + +msgid " DOWNLOAD" +msgstr " ΛΗΨΗ" + +msgid "EXPORT" +msgstr "ΕΞΑΓΩΓΗ" + +msgid "PRINT" +msgstr "ΕΚΤΥΠΩΣΗ" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "ΚΡΥΠΤΟΓΡΑΦΗΜΕΝΟ ΑΡΧΕΙΟ ΣΤΟΝ ΔΙΑΚΟΜΙΣΤΗ" + +msgid "DOWNLOAD" +msgstr "ΛΗΨΗ" + +msgid " DOWNLOADING " +msgstr " ΓΙΝΕΤΑΙ ΛΗΨΗ " + +msgid "Earlier files and messages deleted." +msgstr "Τα προηγούμενα αρχεία και μηνύματα διαγράφτηκαν." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Τα αρχεία και τα μηνύματα\n" +"αυτής της πηγής διαγράφτηκαν" + +msgid "Compose a reply to " +msgstr "Σύνταξη μιας απάντησης προς " + +msgid "Awaiting encryption key" +msgstr "Αναμένεται το κλειδί κρυπτογράφησης" + +msgid " from server to enable replies" +msgstr " από τον διακομιστή για να επιτραπούν οι απαντήσεις" + +msgid "Sign in" +msgstr "Συνδεθείτε" + +msgid " to compose or send a reply" +msgstr " για να συντάξετε ή να στείλετε μια απάντηση" + +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + +msgid "Username" +msgstr "Όνομα χρήστη" + +msgid "Passphrase" +msgstr "Κωδική φράση" + +msgid "Two-Factor Code" +msgstr "Κωδικός δύο παραγόντων" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop Client v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Αυτό το όνομα χρήστη δεν θα δουλέψει.\n" +"Θα πρέπει να είναι τουλάχιστον 3 χαρακτήρες." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Αυτή η κωδική φράση δεν θα δουλέψει.\n" +"Θα πρέπει να είναι από 14 έως 128 χαρακτήρες." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Αυτός ο κωδικός δύο παραγόντων δεν θα δουλέψει.\n" +"Θα πρέπει να περιέχει μόνο αριθμούς." + +msgid "SIGNING IN" +msgstr "ΣΥΝΔΕΕΤΑΙ" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Παρακαλούμε εισάγετε το όνομα χρήστη, τη κωδική φράση και τον κωδικό δύο παραγόντων." + +msgid "USE OFFLINE" +msgstr "ΧΡΗΣΗ ΕΚΤΟΣ ΣΥΝΔΕΣΗΣ" + +msgid "Show Passphrase" +msgstr "Εμφάνιση κωδικής φράσης" + +msgid "CANCEL" +msgstr "ΑΚΥΡΩΣΗ" + +msgid "CONTINUE" +msgstr "ΣΥΝΕΧΕΙΑ" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "ΝΑΙ, ΔΙΑΓΡΑΦΗ ΑΡΧΕΙΩΝ ΚΑΙ ΜΗΝΥΜΑΤΩΝ" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Με τη διατήρηση του λογαριασμού, θα παραμείνουν τα μεταδεδομένα και η δυνατότητα του/της {source} να συνδεθεί ξανά στο SecureDrop σας." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "ένα αρχείο" +msgstr[1] "{file_count} αρχεία" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "μια απάντηση" +msgstr[1] "{reply_count} απαντήσεις" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "ένα μήνυμα" +msgstr[1] "{message_count} μηνύματα" + +msgid "SUBMIT" +msgstr "ΥΠΟΒΟΛΗ" + +msgid "Preparing to export:
{}" +msgstr "Προετοιμασία εξαγωγής:
{}" + +msgid "Ready to export:
{}" +msgstr "Έτοιμο για εξαγωγή:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Εισάγετε το κρυπτογραφημένο στικάκι USB" + +msgid "Enter passphrase for USB drive" +msgstr "Εισάγετε τη κωδική φράση για το στικάκι USB" + +msgid "Export successful" +msgstr "Επιτυχής εξαγωγή" + +msgid "Export failed" +msgstr "Αποτυχία εξαγωγής" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Έχετε επίγνωση των κινδύνων πριν εξάγετε τα αρχεία

Malware
Αυτός ο σταθμός εργασίας σας επιτρέπει να ανοίξετε τα αρχεία με ασφάλεια. Αν ανοίξετε τα αρχεία σε άλλο υπολογιστή, οποιοδήποτε κακόβουλο λογισμικό (malware) που τυχόν υπάρχει εκεί μπορεί να μεταδοθεί στον υπολογιστή σας ή στο δίκτυο. Αν δεν είστε σίγουροι πως να αντιμετωπίσετε αυτό το ρίσκο, παρακαλούμε εκτυπώστε το αρχείο, ή επικοινωνήστε με τον διαχειριστή σας.

Ανωνυμία
Τα αρχεία που υποβάλλονται από τις πηγές σας μπορεί να περιέχουν πληροφορίες ή κρυμμένα μεταδεδομένα που να τους ταυτοποιούν. Για να προστατέψετε τις πηγές σας, σκεφτείτε να επεξεργαστείτε τα αρχεία και να σβήσετε ευαίσθητες πληροφορίες, πριν τα χρησιμοποιήσετε σε υπολογιστές που είναι συνδεδεμένοι στο δίκτυο." + +msgid "Exporting: {}" +msgstr "Εξάγεται: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Παρακαλούμε εισάγετε ένα από τα μέσα εξαγωγής που προορίζονται συγκεκριμένα για τον σταθμό εργασίας SecureDrop Workstation." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Είτε το συγκεκριμένο μέσο δεν είναι κρυπτογραφημένο, είτε κάτι άλλο πάει στραβά με αυτό." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Η κωδική φράση που εισάγατε δεν λειτούργησε. Παρακαλούμε προσπαθήστε ξανά." + +msgid "See your administrator for help." +msgstr "Μιλήστε με τον διαχειριστή σας για βοήθεια." + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Θυμηθείτε να είστε προσεκτικοί όταν χρησιμοποιείτε τα αρχεία εκτός του σταθμού εργασίας σας." + +msgid "DONE" +msgstr "ΤΕΛΟΣ" + +msgid "Preparing to print:
{}" +msgstr "Προετοιμασία για εκτύπωση:
{}" + +msgid "Ready to print:
{}" +msgstr "Έτοιμο για εκτύπωση:
{}" + +msgid "Connect USB printer" +msgstr "Σύνδεση εκτυπωτή USB" + +msgid "Printing failed" +msgstr "Αποτυχία εκτύπωσης" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Διαχείριση κινδύνων εκτύπωσης

Κώδικες QR και διευθύνσεις διαδικτύου
Ποτέ μη πληκτρολογείτε και ανοίγετε διευθύνσεις, και ποτέ μη σκανάρετε κώδικες QR που περιέχονται σε εκτυπωμένα έγγραφα, χωρίς να λαμβάνετε κατάλληλα μέτρα ασφαλείας. Αν δεν είστε σίγουροι πως να διαχειριστείτε αυτό τον κίνδυνο, παρακαλώ επικοινωνήστε με τον διαχειριστή σας.

Κουκίδες εκτύπωσης
Οποιοδήποτε τμήμα μιας εκτυπωμένης σελίδας μπορεί να περιέχει πληροφορίες ταυτοποίησης που δεν είναι ορατές με γυμνό μάτι, όπως για παράδειγμα κουκίδες από τον εκτυπωτή. Παρακαλούμε εξετάστε αυτό τον κίνδυνο με προσοχή, όταν εργάζεστε με ή δημοσιοποιείτε σκαναρισμένα έγγραφα." + +msgid "Please connect your printer to a USB port." +msgstr "Παρακαλούμε συνδέστε τον εκτυπωτή σας μέσω μιας θύρας USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "ΝΑΙ, ΔΙΑΓΡΑΦΗ ΟΛΟΚΛΗΡΟΥ ΤΟΥ ΛΟΓΑΡΙΑΣΜΟΥ ΠΗΓΗΣ" + +msgid "Are you sure this is what you want?" +msgstr "Σίγουρα θέλετε να κάνετε αυτή την ενέργεια;" + +msgid "When the entire account for a source is deleted:" +msgstr "Όταν διαγράφεται ολόκληρος ο λογαριασμός μιας πηγής:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Η πηγή δεν θα μπορεί να ξανασυνδεθεί με το κωδικό όνομά της." + +msgid "Your organization will not be able to send them replies." +msgstr "Ο οργανισμός σας δεν θα μπορεί να του/της στείλει απαντήσεις." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Επίσης, όλα τα αρχεία και τα μηνύματα αυτής της πηγής θα καταστραφούν." + +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Θέλετε να διαγράψετε τα {files_to_delete}, {replies_to_delete}, {messages_to_delete} από το λογαριασμό πηγής του/της {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Τα αρχεία και τα μηνύματα διαγράφονται..." + +#~ msgid "Deleting source account..." +#~ msgstr "Ο λογαριασμός της πηγής διαγράφεται..." + +#~ msgid "Download All Files" +#~ msgstr "Λήψη όλων των αρχείων" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Το κουμπί ΣΥΝΕΧΕΙΑ δεν θα είναι διαθέσιμο μέχρι να ετοιμαστεί το VM Εξαγωγής" From 072b012ca57233458b99739721005e00ffe94f3b Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 592/751] Translated using Weblate (Italian) Currently translated at 75.0% (78 of 104 strings) Translated using Weblate (Italian) Currently translated at 56.7% (59 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Italian) Currently translated at 44.2% (46 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Italian) Currently translated at 50.0% (47 of 94 strings) Co-authored-by: Claudio Arseni Co-authored-by: Cory Francis Myers Co-authored-by: Weblate Co-authored-by: lsd-cat Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/it/ Translation: SecureDrop/SecureDrop Client --- .../locale/it/LC_MESSAGES/messages.po | 190 +++++++++++------- 1 file changed, 121 insertions(+), 69 deletions(-) diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.po b/securedrop_client/locale/it/LC_MESSAGES/messages.po index 84dd41773..836d4bbaa 100644 --- a/securedrop_client/locale/it/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/it/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.7.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-27 19:09+0000\n" +"PO-Revision-Date: 2023-10-31 18:30+0000\n" "Last-Translator: Claudio Arseni \n" "Language-Team: Italian \n" "Language: it\n" @@ -15,12 +15,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} è già in esecuzione" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Recupero di 1 messaggio" +msgstr[1] "Recupero di {message_count} messaggi" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Impossibile raggiungere il sevrer SecureDrop. Nuovo tentativo di connessione in corso..." @@ -35,14 +40,14 @@ msgid "" "Those credentials didn't work. Please try again, and \n" "make sure to use a new two-factor code." msgstr "" -"Quelle credenziali non funzionano. Riprovare, e \n" +"Le credenziali non funzionano. Riprovare, e \n" "assicurarsi di usare un nuovo codice a due fattori." msgid "That didn't work. Please check everything and try again." -msgstr "" +msgstr "Qualcosa non ha funzionato. Verificare tutto e riprovare." msgid "You must sign in to perform this action." -msgstr "" +msgstr "Devi effettuare l'accesso per eseguire questa azione." msgid "Your session expired. Please log in again." msgstr "Sessione scaduta. Effettuare nuovamente l'accesso." @@ -50,30 +55,57 @@ msgstr "Sessione scaduta. Effettuare nuovamente l'accesso." msgid "Failed to update star." msgstr "" -msgid "Retrieving new messages" -msgstr "" - msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "" +msgstr "Il file non esiste nella cartella dati. Prova a scaricarlo nuovamente." msgid "The file download failed. Please try again." msgstr "Scaricamento del file non riuscito. Riprovare." msgid "Failed to delete conversation at server" -msgstr "" +msgstr "Eliminazione della conversazione sul server non riuscita" msgid "Failed to delete source at server" -msgstr "" +msgstr "Eliminazione della fonte sul server non riuscita" + +msgid "No messages." +msgstr "Nessun messaggio." -msgid "Download All Files" -msgstr "Scarica tutti i file" +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s ha scritto:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s ha inviato:" + +#, python-format +msgid "File: %(filename)s" +msgstr "File: %(filename)s" + +msgid "Download All" +msgstr "Scarica tutto" msgid "Delete Source Account" -msgstr "" +msgstr "Elimina l'account della fonte" msgid "Delete All Files and Messages" +msgstr "Elimina tutti i file e i messaggi" + +msgid "Print Transcript" +msgstr "Stampa trascrizione" + +msgid "Export Transcript" +msgstr "Esporta trascrizione" + +msgid "Export All" +msgstr "Esporta tutto" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" msgstr "" +msgid "all files and transcript" +msgstr "tutti i file e la trascrizione" + msgid "SecureDrop Client {}" msgstr "Client SecureDrop {}" @@ -90,134 +122,148 @@ msgid "{}" msgstr "{}" msgid "SIGN OUT" -msgstr "" +msgstr "ESCI" msgid "SIGN IN" -msgstr "" +msgstr "ACCEDI" msgid "Nothing to see just yet!" -msgstr "" +msgstr "Non c'è ancora nulla da vedere!" msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "" +msgstr "Gli invii della fonte verranno mostarti sulla sinistra, una volta scaricati e decifrati." msgid "This is where you will read messages, reply to sources, and work with files." msgstr "" msgid "Select a source from the list, to:" -msgstr "" +msgstr "Selezionare una fonte dall'elenco, per:" msgid "Read a conversation" -msgstr "" +msgstr "Leggere una conversazione" msgid "View or retrieve files" -msgstr "" +msgstr "Visualizzare o recuperare i file" msgid "Send a response" -msgstr "" +msgstr "Inviare una risposta" -msgid "Deleting files and messages..." -msgstr "" +msgid "Deleting files and messages…" +msgstr "Eliminazione in corso di file e messaggi…" -msgid "Deleting source account..." -msgstr "" +msgid "Deleting source account…" +msgstr "Eliminazione in corso dell'account della fonte…" msgid "— All files and messages deleted for this source —" -msgstr "" +msgstr "— Tutti i file e i messaggi eliminati per questa fonte —" msgid "Failed to send" -msgstr "" +msgstr "Invio non riuscito" msgid " DOWNLOAD" -msgstr "" +msgstr " SCARICA" msgid "EXPORT" -msgstr "" +msgstr "ESPORTA" msgid "PRINT" -msgstr "" +msgstr "STAMPA" msgid "ENCRYPTED FILE ON SERVER" -msgstr "" +msgstr "FILE CIFRATO SUL SERVER" msgid "DOWNLOAD" -msgstr "" +msgstr "SCARICA" msgid " DOWNLOADING " -msgstr "" +msgstr " SCARICAMENTO IN CORSO " msgid "Earlier files and messages deleted." -msgstr "" +msgstr "File e messaggi predecenti eliminati." msgid "" "Files and messages deleted\n" " for this source" msgstr "" +"File e messaggi eliminati\n" +" per questa fonte" msgid "Compose a reply to " -msgstr "" +msgstr "Rispondere a " msgid "Awaiting encryption key" -msgstr "" +msgstr "In attesa della chiave di cifratura" msgid " from server to enable replies" -msgstr "" +msgstr " dal server per abilitare le risposte" msgid "Sign in" -msgstr "" +msgstr "Accedi" msgid " to compose or send a reply" -msgstr "" +msgstr " per scrivere o inviare una risposta" + +msgid "FILES AND MESSAGES" +msgstr "FILE E MESSAGGI" + +msgid "SOURCE ACCOUNT" +msgstr "ACCOUNT DELLA FONTE" msgid "Username" -msgstr "" +msgstr "Nome utente" msgid "Passphrase" -msgstr "" +msgstr "Passphrase" msgid "Two-Factor Code" -msgstr "" +msgstr "Codice a due fattori" msgid "SecureDrop Client v{}" -msgstr "" +msgstr "Client SecureDrop v{}" msgid "" "That username won't work.\n" "It should be at least 3 characters long." msgstr "" +"Il nome utente non è valido.\n" +"Deve avere una lunghezza di almeno 3 caratteri." msgid "" "That passphrase won't work.\n" "It should be between 14 and 128 characters long." msgstr "" +"La passphrase non è valida.\n" +"Deve avere una lunghezza compresa tra 14 e 128 caratteri." msgid "" "That two-factor code won't work.\n" "It should only contain numerals." msgstr "" +"Il codice a due fattori non è valido.\n" +"Deve contenere solo numeri." msgid "SIGNING IN" -msgstr "" +msgstr "ACCESSO IN CORSO" msgid "Please enter a username, passphrase and two-factor code." -msgstr "" +msgstr "Inserire un nome utente, una passphrase e un codice a due fattori." msgid "USE OFFLINE" -msgstr "" +msgstr "USA OFFLINE" msgid "Show Passphrase" -msgstr "" +msgstr "Mostra passphrase" msgid "CANCEL" -msgstr "" +msgstr "ANNULLA" msgid "CONTINUE" -msgstr "" +msgstr "CONTINUA" msgid "YES, DELETE FILES AND MESSAGES" -msgstr "" +msgstr "SI, ELIMINA FILE E MESSAGGI" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." @@ -225,18 +271,21 @@ msgstr "" msgid "one file" msgid_plural "{file_count} files" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "un file" +msgstr[1] "{file_count} file" msgid "one reply" msgid_plural "{reply_count} replies" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "una risposta" +msgstr[1] "{reply_count} risposte" msgid "one message" msgid_plural "{message_count} messages" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "un messaggio" +msgstr[1] "{message_count} messaggi" + +msgid "SUBMIT" +msgstr "INVIA" msgid "Preparing to export:
{}" msgstr "" @@ -251,16 +300,16 @@ msgid "Enter passphrase for USB drive" msgstr "" msgid "Export successful" -msgstr "" +msgstr "Esportazione avvenuta con successo" msgid "Export failed" -msgstr "" +msgstr "Esportazione non riuscita" msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." msgstr "" msgid "Exporting: {}" -msgstr "" +msgstr "Esportazione: {}" msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." msgstr "" @@ -274,15 +323,9 @@ msgstr "" msgid "See your administrator for help." msgstr "" -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "" -msgid "SUBMIT" -msgstr "" - msgid "DONE" msgstr "" @@ -308,7 +351,7 @@ msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "" msgid "Are you sure this is what you want?" -msgstr "" +msgstr "Procedere veramente con questa scelta?" msgid "When the entire account for a source is deleted:" msgstr "" @@ -320,4 +363,13 @@ msgid "Your organization will not be able to send them replies." msgstr "" msgid "All files and messages from that source will also be destroyed." -msgstr "" +msgstr "Anche tutti i file e i messaggi inviati da quella fonte verranno distrutti." + +#~ msgid "Deleting files and messages..." +#~ msgstr "Eliminare file e messaggi..." + +#~ msgid "Deleting source account..." +#~ msgstr "Eliminare gli account delle fonti..." + +#~ msgid "Download All Files" +#~ msgstr "Scarica tutti i file" From 20433139b41bd07ddfe1695c6f8a2fa7c202661e Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 593/751] Translated using Weblate (Russian) Currently translated at 98.0% (102 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Russian) Currently translated at 87.5% (91 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Russian) Currently translated at 98.9% (93 of 94 strings) Co-authored-by: Alexey Peschany Co-authored-by: Andrey Co-authored-by: Cory Francis Myers Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ru/ Translation: SecureDrop/SecureDrop Client --- .../locale/ru/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 75 insertions(+), 28 deletions(-) diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/securedrop_client/locale/ru/LC_MESSAGES/messages.po index 3de078a39..93436b2fd 100644 --- a/securedrop_client/locale/ru/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/ru/LC_MESSAGES/messages.po @@ -7,20 +7,26 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.6.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-05-19 21:11+0000\n" -"Last-Translator: Andrey \n" +"PO-Revision-Date: 2023-10-15 16:30+0000\n" +"Last-Translator: Alexey Peschany \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} уже запущено" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Получаю 1 сообщение" +msgstr[1] "Получаю {message_count} сообщения" +msgstr[2] "Получаю {message_count} сообщений" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "С сервером SecureDrop не удается связаться. Попытка повторного подключения..." @@ -50,9 +56,6 @@ msgstr "Ваша сессия истекла. Пожалуйста, автори msgid "Failed to update star." msgstr "Ошибка добавления в избранное." -msgid "Retrieving new messages" -msgstr "Получение новых сообщений" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Файл не существует в каталоге данных. Попробуйте повторить загрузку." @@ -65,20 +68,44 @@ msgstr "Не удалось удалить беседу на сервере" msgid "Failed to delete source at server" msgstr "Не удалось удалить источник на сервере" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Все файлы" +msgid "No messages." +msgstr "Нет сообщений." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s написал:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s отправил:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Файл: %(filename)s" + +msgid "Download All" +msgstr "Скачать все" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Удаление исходного аккаунта..." +msgstr "Удалить исходный аккаунт" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Удаление файлов и сообщений..." +msgstr "Удалить все файлы и сообщения" + +msgid "Print Transcript" +msgstr "Напечатать транскрипцию" + +msgid "Export Transcript" +msgstr "Экспортировать транскрипцию" + +msgid "Export All" +msgstr "Экспортировать все" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Некоторые файлы не будут экспортированы

Некоторые файлы из этого источника ещё не были загружены, и не будут экспортированы.

Чтобы экспортировать уже загруженные файлы, нажмите \"Продолжить.\"" + +msgid "all files and transcript" +msgstr "все файлы и транскрипции" msgid "SecureDrop Client {}" msgstr "Клиент SecureDrop {}" @@ -122,11 +149,11 @@ msgstr "Просмотр или получение файлов" msgid "Send a response" msgstr "Отправить ответ" -msgid "Deleting files and messages..." -msgstr "Удаление файлов и сообщений..." +msgid "Deleting files and messages…" +msgstr "Удаляю файлы и сообщения…" -msgid "Deleting source account..." -msgstr "Удаление исходного аккаунта..." +msgid "Deleting source account…" +msgstr "Удаляю аккаунт источника…" msgid "— All files and messages deleted for this source —" msgstr "— Все файлы и сообщения удалены для этого источника —" @@ -177,6 +204,12 @@ msgstr "Вход" msgid " to compose or send a reply" msgstr " для написания или отправки ответа" +msgid "FILES AND MESSAGES" +msgstr "ФАЙЛЫ И СООБЩЕНИЯ" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Имя пользователя" @@ -231,8 +264,8 @@ msgstr "ПРОДОЛЖИТЬ" msgid "YES, DELETE FILES AND MESSAGES" msgstr "ДА, УДАЛИТЬ ФАЙЛЫ И СООБЩЕНИЯ" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "При сохранении учетной записи ее метаданные будут сохранены, и {source} сможет снова авторизоваться в SecureDrop." @@ -255,6 +288,9 @@ msgstr[0] "{message_count} сообщение" msgstr[1] "{message_count} сообщения" msgstr[2] "{message_count} сообщений" +msgid "SUBMIT" +msgstr "ОТПРАВИТЬ" + msgid "Preparing to export:
{}" msgstr "Подготовка к экспорту:
{}" @@ -291,15 +327,9 @@ msgstr "Введенный пароль не сработал. Пожалуйс msgid "See your administrator for help." msgstr "Обратитесь за помощью к вашему администратору." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Кнопка ПРОДОЛЖИТЬ будет отключена до тех пор, пока экспортируемая виртуальная машина не будет готова" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Помните, что нужно проявлять осторожность при работе с файлами за пределами вашей рабочей станции." -msgid "SUBMIT" -msgstr "ОТПРАВИТЬ" - msgid "DONE" msgstr "ГОТОВО" @@ -339,6 +369,23 @@ msgstr "Ваша организация не сможет отправлять msgid "All files and messages from that source will also be destroyed." msgstr "Все файлы и сообщения источника будут очищены." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Удаление файлов и сообщений..." + +#~ msgid "Deleting source account..." +#~ msgstr "Удаление исходного аккаунта..." + +#, fuzzy +#~| msgid "All Files" +#~ msgid "Download All Files" +#~ msgstr "Все файлы" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Кнопка ПРОДОЛЖИТЬ будет отключена до тех пор, пока экспортируемая виртуальная машина не будет готова" + #~ msgid "Entire source account" #~ msgstr "Весь исходный аккаунт" From fe9b94482704383ca1d8e4d5cf5bb66bd666ad1f Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 594/751] Translated using Weblate (Spanish) Currently translated at 85.5% (89 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Spanish) Currently translated at 87.5% (91 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Spanish) Currently translated at 100.0% (94 of 94 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (94 of 94 strings) Co-authored-by: Cory Francis Myers Co-authored-by: David Figuera Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/es/ Translation: SecureDrop/SecureDrop Client --- .../locale/es/LC_MESSAGES/messages.po | 104 ++++++++++++------ 1 file changed, 73 insertions(+), 31 deletions(-) diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.po b/securedrop_client/locale/es/LC_MESSAGES/messages.po index 09b0bc87d..abc28fd01 100644 --- a/securedrop_client/locale/es/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/es/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-03-25 10:38+0000\n" -"Last-Translator: Zuhualime Akoochimoya \n" +"PO-Revision-Date: 2023-11-22 19:12+0000\n" +"Last-Translator: Cory Francis Myers \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 5.1.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} ya se está ejecutando" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "El servidor SecureDrop no puede ser alcanzado. Intentando reconectar..." @@ -50,9 +55,6 @@ msgstr "Tu sesión expiró. Por favor iníciala de nuevo." msgid "Failed to update star." msgstr "Fallo al actualizar estrella." -msgid "Retrieving new messages" -msgstr "Descargando mensajes nuevos" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "El archivo no existe en el directorio de datos. Por favor, intenta volver a descargarlo." @@ -65,20 +67,44 @@ msgstr "Fallo al borrar conversación en el servidor" msgid "Failed to delete source at server" msgstr "Fallo al borrar fuente en el servidor" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Todos los archivos" +msgid "No messages." +msgstr "No hay mensajes." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" +msgstr "" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Borrando cuenta de la fuente..." +msgstr "Eliminar Cuenta de Fuente" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Borrando archivos y mensajes..." +msgstr "Borrar todos los archivos y mensajes" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -122,11 +148,11 @@ msgstr "Ver o descargar archivos" msgid "Send a response" msgstr "Enviar una respuesta" -msgid "Deleting files and messages..." -msgstr "Borrando archivos y mensajes..." +msgid "Deleting files and messages…" +msgstr "" -msgid "Deleting source account..." -msgstr "Borrando cuenta de la fuente..." +msgid "Deleting source account…" +msgstr "" msgid "— All files and messages deleted for this source —" msgstr "— Todos los archivos y mensajes borrados para esta fuente —" @@ -177,6 +203,12 @@ msgstr "Crear cuenta" msgid " to compose or send a reply" msgstr " para componer o enviar una respuesta" +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Nombre de Usuario" @@ -219,10 +251,8 @@ msgstr "Por favor ingresa un nombre de usuario, frase de contraseña y código d msgid "USE OFFLINE" msgstr "USAR FUERA DE LÍNEA" -#, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Frase de contraseña" +msgstr "Mostrar frase de contraseña" msgid "CANCEL" msgstr "CANCELAR" @@ -233,8 +263,8 @@ msgstr "CONTINUAR" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SÍ, BORRAR ARCHIVOS Y MENSAJES" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Preservar la cuenta retendrá sus metadatos, y la habilidad de {source} de iniciar sesión en tu SecureDrop de nuevo." @@ -254,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "un mensaje" msgstr[1] "{message_count} mensajes" +msgid "SUBMIT" +msgstr "ENVIAR" + msgid "Preparing to export:
{}" msgstr "Preparando para exportar:
{}" @@ -290,15 +323,9 @@ msgstr "La frase de contraseña ingresada no funcionó. Por favor inténtalo de msgid "See your administrator for help." msgstr "Vé a tu administrador por ayuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "El botón CONTINUAR será deshabilitado hasta que la MV de Exportación esté lista" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Recuerda ser cuidadoso cuando trabajes con archivos fuera de tu estación de trabajo." -msgid "SUBMIT" -msgstr "ENVIAR" - msgid "DONE" msgstr "HECHO" @@ -338,6 +365,21 @@ msgstr "Tu organización no será capaz de enviarle respuestas." msgid "All files and messages from that source will also be destroyed." msgstr "Todos los archivos y mensajes de esa fuente también serán destruidos." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Borrando archivos y mensajes..." + +#~ msgid "Deleting source account..." +#~ msgstr "Borrando cuenta de la fuente..." + +#~ msgid "Download All Files" +#~ msgstr "Descargar todos los archivos" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "El botón CONTINUAR será deshabilitado hasta que la MV de Exportación esté lista" + #~ msgid "Entire source account" #~ msgstr "Cuenta de la fuente completa" From c649c8f58e943e3609ef6cd56c5c386f9bd00a59 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 595/751] Translated using Weblate (Slovak) Currently translated at 81.7% (85 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Slovak) Currently translated at 83.6% (87 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: 1000101 Co-authored-by: Cory Francis Myers Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/sk/ Translation: SecureDrop/SecureDrop Client --- .../locale/sk/LC_MESSAGES/messages.po | 99 +++++++++++++------ 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/securedrop_client/locale/sk/LC_MESSAGES/messages.po index 769eeb071..132362d3d 100644 --- a/securedrop_client/locale/sk/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/sk/LC_MESSAGES/messages.po @@ -7,19 +7,26 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2021-10-18 15:42+0000\n" -"Last-Translator: Katarina Kasalova \n" +"PO-Revision-Date: 2023-10-13 16:30+0000\n" +"Last-Translator: 1000101 \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} je už otvorená" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Nie je možné pripojiť sa na server SecureDrop. Pokus o opätovné pripojenie práve prebieha ..." @@ -49,9 +56,6 @@ msgstr "Platnosť vášho prihlásenia vypršala. Prosíme prihláste sa znova." msgid "Failed to update star." msgstr "Zlyhalo aktualizovanie star." -msgid "Retrieving new messages" -msgstr "Načítavanie nových správ" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Súbor neexistuje v adresári dát. Prosíme skúste ho stiahnuť znova." @@ -64,18 +68,44 @@ msgstr "Nepodarilo sa vymazať konverzáciu zo servera" msgid "Failed to delete source at server" msgstr "Nepodarilo sa zmazať zdroj zo servera" -msgid "Download All Files" +msgid "No messages." +msgstr "" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" msgstr "" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Mazanie účtu zdroja ..." +msgstr "Zmazať účet zdroja" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Mazanie súborov a správ ..." +msgstr "" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" msgid "SecureDrop Client {}" msgstr "SecureDrop Klient {}" @@ -119,11 +149,11 @@ msgstr "Zobrazenie alebo načítanie súborov" msgid "Send a response" msgstr "Poslať odpoveď" -msgid "Deleting files and messages..." -msgstr "Mazanie súborov a správ ..." +msgid "Deleting files and messages…" +msgstr "" -msgid "Deleting source account..." -msgstr "Mazanie účtu zdroja ..." +msgid "Deleting source account…" +msgstr "" msgid "— All files and messages deleted for this source —" msgstr "— Všetky súbory a správy pre tento zdroj boli zmazané —" @@ -174,6 +204,12 @@ msgstr "Prihlásiť sa" msgid " to compose or send a reply" msgstr " vytvoriť alebo poslať odpoveď" +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Používateľské meno" @@ -216,10 +252,8 @@ msgstr "Prosíme zadajte prihlasovacie meno, prihlasovaciu frázu a dvojfaktorov msgid "USE OFFLINE" msgstr "POUŽIŤ OFFLINE" -#, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Prístupová fráza" +msgstr "" msgid "CANCEL" msgstr "ZRUŠIŤ" @@ -230,8 +264,8 @@ msgstr "ĎALEJ" msgid "YES, DELETE FILES AND MESSAGES" msgstr "ÁNO, ZMAZAŤ SÚBORY A SPRÁVY" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Chceli by ste zmazať {files_to_delete}, {replies_to_delete}, {messages_to_delete} z účtu zdroja pre {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Zachovanie účtu zachová jeho metadáta a možnosť {source} znova sa prihlásiť do vášho SecureDrop." @@ -254,6 +288,9 @@ msgstr[0] "jedna správa" msgstr[1] "{message_count} správy" msgstr[2] "{message_count} správy" +msgid "SUBMIT" +msgstr "POTVRDIŤ" + msgid "Preparing to export:
{}" msgstr "Príprava na export:
{}" @@ -290,15 +327,9 @@ msgstr "Zadaná prístupová fráza nefunguje. Prosíme skúste znova." msgid "See your administrator for help." msgstr "Požiadajte vášho správcu o pomoc." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Tlačidlo ĎALEJ bude deaktivované kým bude pripravený Export VM" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Nezabudnite na opatrnosť pri práci so súbormi mimo vašej Workstation." -msgid "SUBMIT" -msgstr "POTVRDIŤ" - msgid "DONE" msgstr "HOTOVO" @@ -338,6 +369,18 @@ msgstr "Vaša organizácia mu nebude môcť poslať odpovede." msgid "All files and messages from that source will also be destroyed." msgstr "Všetky súbory a správy od daného zdroja budú zničené." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Chceli by ste zmazať {files_to_delete}, {replies_to_delete}, {messages_to_delete} z účtu zdroja pre {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Mazanie súborov a správ ..." + +#~ msgid "Deleting source account..." +#~ msgstr "Mazanie účtu zdroja ..." + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Tlačidlo ĎALEJ bude deaktivované kým bude pripravený Export VM" + #~ msgid "Entire source account" #~ msgstr "Celý účet zdroja" From f48053c2770e7e2d53e62e819547c6641c1d616c Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 596/751] Translated using Weblate (French) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (French) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (French) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (French) Currently translated at 100.0% (97 of 97 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (French) Currently translated at 100.0% (93 of 93 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (French) Currently translated at 100.0% (94 of 94 strings) Translated using Weblate (French) Currently translated at 100.0% (94 of 94 strings) Translated using Weblate (French) Currently translated at 100.0% (94 of 94 strings) Added translation using Weblate (French) Co-authored-by: AO Localization Lab Co-authored-by: Weblate Co-authored-by: vex vex Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/fr/ Translation: SecureDrop/SecureDrop Client --- .../locale/fr/LC_MESSAGES/messages.po | 384 ++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 securedrop_client/locale/fr/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/fr/LC_MESSAGES/messages.po b/securedrop_client/locale/fr/LC_MESSAGES/messages.po new file mode 100644 index 000000000..390f9ef3a --- /dev/null +++ b/securedrop_client/locale/fr/LC_MESSAGES/messages.po @@ -0,0 +1,384 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.8.1\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-10-15 19:30+0000\n" +"Last-Translator: AO Localization Lab \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.18.2\n" +"Generated-By: Babel 2.10.3\n" + +msgid "{application_name} is already running" +msgstr "{application_name} est déjà lancé" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Récupération d’un message" +msgstr[1] "Récupération de {message_count} messages" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Impossible d’atteindre le serveur SecureDrop. Tentative de reconnexion…" + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Impossible d’atteindre le serveur SecureDrop. Veuillez vérifier vos\n" +"connexions à Internet et à Tor et réessayez." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Ces authentifiants sont erronés. Veuillez réessayer et\n" +"utiliser un nouveau code d’authentification à deux facteurs." + +msgid "That didn't work. Please check everything and try again." +msgstr "Cela n’a pas fonctionné. Veuillez tout vérifier et réessayer." + +msgid "You must sign in to perform this action." +msgstr "Vous devez vous connecter pour effectuer cette action." + +msgid "Your session expired. Please log in again." +msgstr "Votre session a expiré. Veuillez vous reconnecter." + +msgid "Failed to update star." +msgstr "Échec de mise à jour de l’étoile." + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Le fichier n’existe pas dans le répertoire des données. Veuillez tenter de retélécharger." + +msgid "The file download failed. Please try again." +msgstr "Échec de téléchargement. Veuillez réessayer." + +msgid "Failed to delete conversation at server" +msgstr "Échec de suppression de la conversation sur le serveur" + +msgid "Failed to delete source at server" +msgstr "Échec de suppression de la source sur le serveur" + +msgid "No messages." +msgstr "Aucun message." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s a écrit :" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s a envoyé :" + +#, python-format +msgid "File: %(filename)s" +msgstr "Fichier : %(filename)s" + +msgid "Download All" +msgstr "Tout télécharger" + +msgid "Delete Source Account" +msgstr "Supprimer le compte de la source" + +msgid "Delete All Files and Messages" +msgstr "Supprimer tout les fichiers et messages" + +msgid "Print Transcript" +msgstr "Imprimer la transcription" + +msgid "Export Transcript" +msgstr "Exporter la transcription" + +msgid "Export All" +msgstr "Tout exporter" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Certains fichiers ne seront pas exportés.

Certains fichiers de cette source n’ont pas encore été téléchargés et ne seront pas exportés.

Pour exporter les fichiers téléchargés actuellement, cliquez sur « Poursuivre »." + +msgid "all files and transcript" +msgstr "tous les fichiers et la transcription" + +msgid "SecureDrop Client {}" +msgstr "Client SecureDrop {}" + +msgid "Quit" +msgstr "Fermer" + +msgid "Last Refresh: {}" +msgstr "Dernière actualisation : {}" + +msgid "Last Refresh: never" +msgstr "Dernière actualisation : jamais" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "DÉCONNEXION" + +msgid "SIGN IN" +msgstr "SE CONNECTER" + +msgid "Nothing to see just yet!" +msgstr "Rien à voir pour l’instant" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Les envois des sources seront listés sur la gauche après téléchargement et déchiffrement." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Vous pourrez lire les messages ici, répondre aux sources et travailler sur les fichiers." + +msgid "Select a source from the list, to:" +msgstr "Sélectionner une source de la liste, pour :" + +msgid "Read a conversation" +msgstr "Lire une conversation" + +msgid "View or retrieve files" +msgstr "Visualiser ou récupérer des fichiers" + +msgid "Send a response" +msgstr "Envoyer une réponse" + +msgid "Deleting files and messages…" +msgstr "Suppression des fichiers et des messages…" + +msgid "Deleting source account…" +msgstr "Suppression du compte source…" + +msgid "— All files and messages deleted for this source —" +msgstr "— Tout les fichiers et messages ont été supprimés pour cette source —" + +msgid "Failed to send" +msgstr "Échec d’envoi" + +msgid " DOWNLOAD" +msgstr " TÉLÉCHARGER" + +msgid "EXPORT" +msgstr "EXPORTER" + +msgid "PRINT" +msgstr "IMPRIMER" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "DOSSIER CHIFFRÉ SUR LE SERVEUR" + +msgid "DOWNLOAD" +msgstr "TÉLÉCHARGER" + +msgid " DOWNLOADING " +msgstr " TÉLÉCHARGEMENT " + +msgid "Earlier files and messages deleted." +msgstr "Les fichiers et messages antérieurs ont été supprimés." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Les fichiers et messages ont été\n" +"supprimés pour cette source" + +msgid "Compose a reply to " +msgstr "Rédiger une réponse pour " + +msgid "Awaiting encryption key" +msgstr "En attente de la clé de chiffrement" + +msgid " from server to enable replies" +msgstr " du serveur pour permettre les réponses" + +msgid "Sign in" +msgstr "Se connecter" + +msgid " to compose or send a reply" +msgstr " pour rédiger ou envoyer une réponse" + +msgid "FILES AND MESSAGES" +msgstr "FICHIERS ET MESSAGES" + +msgid "SOURCE ACCOUNT" +msgstr "COMPTE DE LA SOURCE" + +msgid "Username" +msgstr "Nom d’utilisateur" + +msgid "Passphrase" +msgstr "Phrase de passe" + +msgid "Two-Factor Code" +msgstr "Code d’authentification à deux facteurs" + +msgid "SecureDrop Client v{}" +msgstr "Client SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Ce nom d’utilisateur ne sera pas accepté.\n" +"Il devrait comporter au moins trois caractères." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Cette phrase de passe ne sera pas acceptée.\n" +"Elle devrait comporter entre 14 et 128 caractères." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Ce code d’authentification à deux facteurs ne sera\n" +"pas accepté. Il doit être entièrement numérique." + +msgid "SIGNING IN" +msgstr "CONNEXION" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Veuillez saisir un nom d’utilisateur, une phrase de passe et code d’authentification à deux facteurs." + +msgid "USE OFFLINE" +msgstr "UTILISER HORS LIGNE" + +msgid "Show Passphrase" +msgstr "Afficher la phrase de passe" + +msgid "CANCEL" +msgstr "ANNULER" + +msgid "CONTINUE" +msgstr "POURSUIVRE" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "OUI, SUPPRIMER LES FICHIERS ET MESSAGES" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Voulez-vous supprimer {files_to_delete}, {replies_to_delete}, {messages_to_delete} du compte source pour {source} ?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Préserver le compte conservera ces métadonnées et permettra à {source} de se connecter à votre SecureDrop de nouveau." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "un fichier" +msgstr[1] "{file_count} fichiers" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "une réponse" +msgstr[1] "{reply_count} réponses" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "un message" +msgstr[1] "{message_count} messages" + +msgid "SUBMIT" +msgstr "ENVOYER" + +msgid "Preparing to export:
{}" +msgstr "Préparation à l’exportation :
{}" + +msgid "Ready to export:
{}" +msgstr "Prêt à exporter :
{}" + +msgid "Insert encrypted USB drive" +msgstr "Insérer la clé USB chiffrée" + +msgid "Enter passphrase for USB drive" +msgstr "Saisir la phrase de passe de la clé USB" + +msgid "Export successful" +msgstr "L’exportation est réussie" + +msgid "Export failed" +msgstr "Échec d’exportation" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Comprenez les risques avant d’exporter des fichiers

Logiciels malveillants
Ce poste de travail vous permet d’ouvrir des fichiers en toute sécurité. Si vous ouvrez les fichiers sur un autre ordinateur, tout logiciel malveillant qu’ils comporteraient pourrait se propager sur votre ordinateur ou votre réseau. Si vous ne savez pas comment gérer ce risque, veuillez imprimer ce fichier ou contacter votre administrateur.

Anonymat
Les fichiers envoyés par les sources peuvent contenir de l’information ou des métadonnées cachées qui identifient ces sources. Pour les protéger, veuillez envisager de caviarder les fichiers avant de les traiter sur des ordinateurs connectés à un réseau." + +msgid "Exporting: {}" +msgstr "Exportation : {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Veuillez insérer une des clés d’exportation réservées au poste de travail SecureDrop." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Soit la clé n’est pas chiffrée soit elle présente un autre problème." + +msgid "The passphrase provided did not work. Please try again." +msgstr "La phrase de passe est erronée. Veuillez recommencer." + +msgid "See your administrator for help." +msgstr "Consultez votre administrateur pour obtenir de l’aide." + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Veuillez faire preuve de prudence en traitant les fichiers sur un ordinateur autre que votre poste de travail." + +msgid "DONE" +msgstr "TERMINÉ" + +msgid "Preparing to print:
{}" +msgstr "Préparation à l’impression :
{}" + +msgid "Ready to print:
{}" +msgstr "Prêt à imprimer :
{}" + +msgid "Connect USB printer" +msgstr "Connecter l’imprimante USB" + +msgid "Printing failed" +msgstr "Échec d’impression" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Gérer les risques d’impression

Codes QR et adresses Web
Ne saisissez jamais dans un navigateur les adresses Web qui apparaissent sur les documents imprimés. Ne balayez pas non plus les codes QR qui s’y trouvent sans prendre de mesures de sécurité. Si vous ne savez pas comment gérer ce risque, veuillez contacter votre administrateur.

Points d’imprimante
Une page imprimée peut comporter de l’information d’identification invisible à l’œil nu, telle que des points d’imprimante. Veuillez prendre ce risque en considération quand vous travaillez sur des impressions ou si vous les publiez après numérisation." + +msgid "Please connect your printer to a USB port." +msgstr "Veuillez connecter votre imprimante à un port USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "OUI, SUPPRIMER COMPLÈTEMENT LE COMPTE DE LA SOURCE" + +msgid "Are you sure this is what you want?" +msgstr "Confirmez-vous ?" + +msgid "When the entire account for a source is deleted:" +msgstr "Si le compte d’une source est complètement supprimé :" + +msgid "The source will not be able to log in with their codename again." +msgstr "La source ne pourra plus se connecter avec son nom de code." + +msgid "Your organization will not be able to send them replies." +msgstr "Votre organisme ne pourra plus lui envoyer de réponse." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Tout les fichiers et messages de cette source seront détruits." + +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Vous voulez supprimer {files_to_delete}, {replies_to_delete}, {messages_to_delete} du compte de la source pour {source} ?" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "

Certains fichiers ne seront pas exportés

Certains fichiers de cette source n’ont pas encore téléchargés et ne seront pas exportés.

Pour exporter les fichiers téléchargés actuellement, cliquez sur « Poursuivre »." + +#~ msgid "Deleting files and messages..." +#~ msgstr "Suppression des fichiers et messages…" + +#~ msgid "Deleting source account..." +#~ msgstr "Suppression du compte de la source…" + +#~ msgid "Download All Files" +#~ msgstr "Télécharger tout les fichiers" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Le bouton POURSUIVRE sera désactivé tant que la MV d’exportation se sera pas prête" From 4d27fbfca138646ea5b33dad95f326615ffc5f6f Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 597/751] Translated using Weblate (Swedish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Swedish) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Swedish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Swedish) Currently translated at 100.0% (98 of 98 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Swedish) Currently translated at 100.0% (97 of 97 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Swedish) Currently translated at 100.0% (93 of 93 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Swedish) Currently translated at 100.0% (94 of 94 strings) Co-authored-by: Jonas Waga Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/sv/ Translation: SecureDrop/SecureDrop Client --- .../locale/sv/LC_MESSAGES/messages.po | 98 +++++++++++++++---- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.po b/securedrop_client/locale/sv/LC_MESSAGES/messages.po index f5707b646..17eb1972b 100644 --- a/securedrop_client/locale/sv/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/sv/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.7.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-13 14:02+0000\n" +"PO-Revision-Date: 2023-04-24 08:13+0000\n" "Last-Translator: Jonas Waga \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -15,12 +15,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} är redan igång" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Hämtar 1 meddelande" +msgstr[1] "Hämtar {message_count} meddelanden" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "SecureDrop-servern kan inte nås. Försöker att återansluta..." @@ -50,9 +55,6 @@ msgstr "Din session har gått ut. Försök att logga in igen." msgid "Failed to update star." msgstr "Misslyckades att uppdatera stjärnmarkering." -msgid "Retrieving new messages" -msgstr "Hämtar nya meddelanden" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Filen finns inte i mappen. Försök att ladda hem igen." @@ -65,15 +67,45 @@ msgstr "Misslyckades att radera konversation på servern" msgid "Failed to delete source at server" msgstr "Misslyckades att radera källan på servern" -msgid "Download All Files" -msgstr "Ladda hem alla filer" +msgid "No messages." +msgstr "Inga meddelanden." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s skrev:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s skickade:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Fil: %(filename)s" + +msgid "Download All" +msgstr "Ladda hem alla" msgid "Delete Source Account" -msgstr "Radera käll-konto" +msgstr "Radera en källa" msgid "Delete All Files and Messages" msgstr "Radera alla filer och meddelanden" +msgid "Print Transcript" +msgstr "Skriv ut kopia" + +msgid "Export Transcript" +msgstr "Exportera kopia" + +msgid "Export All" +msgstr "Exportera alla" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Vissa filer kommer inte att exporteras

Vissa filer från den här källan har inte laddats ned , och kommer inte att exporteras.

För att exportera de redan nedladdade filerna, klicka på \"Fortsätt.\"" + +msgid "all files and transcript" +msgstr "alla filer och kopior" + msgid "SecureDrop Client {}" msgstr "SecureDrop Klient {}" @@ -116,11 +148,11 @@ msgstr "Se eller hämta filer" msgid "Send a response" msgstr "Skicka ett svar" -msgid "Deleting files and messages..." -msgstr "Radera filer och meddelanden…" +msgid "Deleting files and messages…" +msgstr "Raderar filer och meddelanden…" -msgid "Deleting source account..." -msgstr "Radera källans konto…" +msgid "Deleting source account…" +msgstr "Raderar källkonto…" msgid "— All files and messages deleted for this source —" msgstr "— Alla filer och meddelanden raderade för denna källan —" @@ -171,6 +203,12 @@ msgstr "Logga in" msgid " to compose or send a reply" msgstr " för att skriva eller skicka ett svar" +msgid "FILES AND MESSAGES" +msgstr "FILER och MEDDELANDEN" + +msgid "SOURCE ACCOUNT" +msgstr "KÄLLKONTO" + msgid "Username" msgstr "Användarnamn" @@ -225,8 +263,8 @@ msgstr "FORTSÄTT" msgid "YES, DELETE FILES AND MESSAGES" msgstr "JA, RADERA FILER OCH MEDDELANDEN" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Vill du radera {files_to_delete}, {replies_to_delete}, {messages_to_delete} från källkontot för {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Om du behåller kontot så kommer dess metadata att sparas, och {source} kommer kunna logga in i SecureDrop igen." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "ett meddelande" msgstr[1] "{message_count} meddelanden" +msgid "SUBMIT" +msgstr "SKICKA IN" + msgid "Preparing to export:
{}" msgstr "Förbereder export:
{}" @@ -282,15 +323,9 @@ msgstr "Lösenordsfrasen som angavs fungerade inte. Vänligen försök igen." msgid "See your administrator for help." msgstr "Kontakta din administratör för hjälp." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "FORTSÄTT-knappen kommer att vara inaktiv tills Export VM är klar" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Kom ihåg att vara försiktig när du arbetar med filer utanför den här arbetsstationen." -msgid "SUBMIT" -msgstr "SKICKA IN" - msgid "DONE" msgstr "KLAR" @@ -316,7 +351,7 @@ msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "JA, RADERA HELA KÄLLANS KONTO" msgid "Are you sure this is what you want?" -msgstr "Är du säker på att detta är vad du vill?" +msgstr "Är du säker på att detta är det du vill?" msgid "When the entire account for a source is deleted:" msgstr "När hela kontot för källan raderas:" @@ -329,3 +364,24 @@ msgstr "Din organisation kommer inte att kunna skicka svar till källan." msgid "All files and messages from that source will also be destroyed." msgstr "Alla filer och meddelanden från den källan kommer också att raderas." + +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "

Vissa filer kommer inte att exporteras

Vissa filer från den här källan har inte laddats hem ännu och kommer därför inte exporteras.

För att exportera the nedladdade filerna, klicka på \"Fortsätt.\"" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Radera filer och meddelanden…" + +#~ msgid "Deleting source account..." +#~ msgstr "Radera källans konto…" + +#~ msgid "Download All Files" +#~ msgstr "Ladda hem alla filer" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Skriv ut konversations-kopia" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "FORTSÄTT-knappen kommer att vara inaktiv tills Export VM är klar" From 28ae003f7bce3a1b17f354bf09466bfc01b9d2db Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 598/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Bengali) Currently translated at 2.1% (2 of 94 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Added translation using Weblate (Bengali) Co-authored-by: Weblate Co-authored-by: diyaf Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/bn/ Translation: SecureDrop/SecureDrop Client --- .../locale/bn/LC_MESSAGES/messages.po | 354 ++++++++++++++++++ 1 file changed, 354 insertions(+) create mode 100644 securedrop_client/locale/bn/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/bn/LC_MESSAGES/messages.po b/securedrop_client/locale/bn/LC_MESSAGES/messages.po new file mode 100644 index 000000000..3a686abf2 --- /dev/null +++ b/securedrop_client/locale/bn/LC_MESSAGES/messages.po @@ -0,0 +1,354 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.7.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-08-19 14:39+0000\n" +"Last-Translator: diyaf \n" +"Language-Team: Bengali \n" +"Language: bn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.13\n" +"Generated-By: Babel 2.10.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} চলমান" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "SecureDrop সার্ভারে পৌছানো যাচ্ছে না। পুনরায় চেষ্টা করা হচ্ছে..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" + +msgid "That didn't work. Please check everything and try again." +msgstr "" + +msgid "You must sign in to perform this action." +msgstr "" + +msgid "Your session expired. Please log in again." +msgstr "" + +msgid "Failed to update star." +msgstr "" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "" + +msgid "The file download failed. Please try again." +msgstr "" + +msgid "Failed to delete conversation at server" +msgstr "" + +msgid "Failed to delete source at server" +msgstr "" + +msgid "No messages." +msgstr "" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" +msgstr "" + +msgid "Delete Source Account" +msgstr "" + +msgid "Delete All Files and Messages" +msgstr "" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" + +msgid "SecureDrop Client {}" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "Last Refresh: {}" +msgstr "" + +msgid "Last Refresh: never" +msgstr "" + +msgid "{}" +msgstr "" + +msgid "SIGN OUT" +msgstr "" + +msgid "SIGN IN" +msgstr "" + +msgid "Nothing to see just yet!" +msgstr "" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "" + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "" + +msgid "Select a source from the list, to:" +msgstr "" + +msgid "Read a conversation" +msgstr "" + +msgid "View or retrieve files" +msgstr "" + +msgid "Send a response" +msgstr "" + +msgid "Deleting files and messages…" +msgstr "" + +msgid "Deleting source account…" +msgstr "" + +msgid "— All files and messages deleted for this source —" +msgstr "" + +msgid "Failed to send" +msgstr "" + +msgid " DOWNLOAD" +msgstr "" + +msgid "EXPORT" +msgstr "" + +msgid "PRINT" +msgstr "" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "" + +msgid "DOWNLOAD" +msgstr "" + +msgid " DOWNLOADING " +msgstr "" + +msgid "Earlier files and messages deleted." +msgstr "" + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" + +msgid "Compose a reply to " +msgstr "" + +msgid "Awaiting encryption key" +msgstr "" + +msgid " from server to enable replies" +msgstr "" + +msgid "Sign in" +msgstr "" + +msgid " to compose or send a reply" +msgstr "" + +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "Passphrase" +msgstr "" + +msgid "Two-Factor Code" +msgstr "" + +msgid "SecureDrop Client v{}" +msgstr "" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" + +msgid "SIGNING IN" +msgstr "" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "" + +msgid "USE OFFLINE" +msgstr "" + +msgid "Show Passphrase" +msgstr "" + +msgid "CANCEL" +msgstr "" + +msgid "CONTINUE" +msgstr "" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "" + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "" +msgstr[1] "" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "" +msgstr[1] "" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "" +msgstr[1] "" + +msgid "SUBMIT" +msgstr "" + +msgid "Preparing to export:
{}" +msgstr "" + +msgid "Ready to export:
{}" +msgstr "" + +msgid "Insert encrypted USB drive" +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "" + +msgid "Export successful" +msgstr "" + +msgid "Export failed" +msgstr "" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "" + +msgid "Exporting: {}" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "" + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "" + +msgid "See your administrator for help." +msgstr "" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "" + +msgid "DONE" +msgstr "" + +msgid "Preparing to print:
{}" +msgstr "" + +msgid "Ready to print:
{}" +msgstr "" + +msgid "Connect USB printer" +msgstr "" + +msgid "Printing failed" +msgstr "" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "" + +msgid "Please connect your printer to a USB port." +msgstr "" + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "" + +msgid "Are you sure this is what you want?" +msgstr "" + +msgid "When the entire account for a source is deleted:" +msgstr "" + +msgid "The source will not be able to log in with their codename again." +msgstr "" + +msgid "Your organization will not be able to send them replies." +msgstr "" + +msgid "All files and messages from that source will also be destroyed." +msgstr "" From 42bc09e4ec5492647c21e813ad08fbfc459557fa Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 599/751] Translated using Weblate (Finnish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Finnish) Currently translated at 86.5% (90 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Finnish) Currently translated at 98.9% (93 of 94 strings) Translated using Weblate (Finnish) Currently translated at 97.8% (92 of 94 strings) Translated using Weblate (Finnish) Currently translated at 72.3% (68 of 94 strings) Added translation using Weblate (Finnish) Co-authored-by: Cory Francis Myers Co-authored-by: Jiri Grönroos Co-authored-by: Oskari Lavinto Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/fi/ Translation: SecureDrop/SecureDrop Client --- .../locale/fi/LC_MESSAGES/messages.po | 378 ++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 securedrop_client/locale/fi/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/fi/LC_MESSAGES/messages.po b/securedrop_client/locale/fi/LC_MESSAGES/messages.po new file mode 100644 index 000000000..bd6baf0d1 --- /dev/null +++ b/securedrop_client/locale/fi/LC_MESSAGES/messages.po @@ -0,0 +1,378 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.8.1\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-10-13 16:30+0000\n" +"Last-Translator: Oskari Lavinto \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18.2\n" +"Generated-By: Babel 2.10.3\n" + +msgid "{application_name} is already running" +msgstr "{application_name} on jo käynnissä" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Noudetaan 1 viesti" +msgstr[1] "Noudetaan {message_count} viestiä" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "SecureDrop-palvelin ei ole tavoitettavissa. Yritetään yhdistää uudelleen..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"SecureDrop-palvelimeen ei saatu yhteyttä. Tarkista \n" +"internet- sekä tor-yhteydet ja yritä uudelleen." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Kirjautumistiedot eivät olleet oikein. Yritä uudelleen ja \n" +"varmista, että käytät uutta kaksivaiheisen tunnistautumisen koodia." + +msgid "That didn't work. Please check everything and try again." +msgstr "Se ei toiminut. Tarkista kaikki tiedot sekä asetukset ja yritä uudelleen." + +msgid "You must sign in to perform this action." +msgstr "Tämä toiminto vaatii sisäänkirjautumisen." + +msgid "Your session expired. Please log in again." +msgstr "Istunto vanheni. Kirjaudu sisään uudelleen." + +msgid "Failed to update star." +msgstr "Tähden päivittäminen epäonnistui." + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Tiedostoa ei ole olemassa datahakemistossa. Yritä ladata uudelleen." + +msgid "The file download failed. Please try again." +msgstr "Lataaminen epäonnistui. Yritä uudelleen." + +msgid "Failed to delete conversation at server" +msgstr "Keskustelun poistaminen palvelimelta epäonnistui" + +msgid "Failed to delete source at server" +msgstr "Lähteen poistaminen palvelimelta epäonnistui" + +msgid "No messages." +msgstr "Viestejä ei ole." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s kirjoitti:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s lähetti:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Tiedosto: %(filename)s" + +msgid "Download All" +msgstr "Lataa kaikki" + +msgid "Delete Source Account" +msgstr "Poista lähdetili" + +msgid "Delete All Files and Messages" +msgstr "Poista kaikki tiedostot ja viestit" + +msgid "Print Transcript" +msgstr "Tulosta transkriptio" + +msgid "Export Transcript" +msgstr "Vie transkriptio" + +msgid "Export All" +msgstr "Vie kaikki" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Joitakin tiedostoja ei viedä

Joitakin lähteen tiedostoja ei ole vielä ladataa, eikä niitä sen vuoksi viedä.

Vie jo ladatut tiedostot painamalla \"Jatka\"." + +msgid "all files and transcript" +msgstr "kaikki tiedostot ja transkriptio" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop-asiakasohjelmisto {}" + +msgid "Quit" +msgstr "Lopeta" + +msgid "Last Refresh: {}" +msgstr "Viimeisin päivitys: {}" + +msgid "Last Refresh: never" +msgstr "Viimeisin päivitys: ei koskaan" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "KIRJAUDU ULOS" + +msgid "SIGN IN" +msgstr "KIRJAUDU SISÄÄN" + +msgid "Nothing to see just yet!" +msgstr "Ei mitään nähtävää vielä!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Lähteiden talletteet listataan vasemmalle, kun ne on ladattu ja salaus purettu." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Täällä voit lukea viestejä, vastata lähteille ja työskennellä tiedostojen kanssa." + +msgid "Select a source from the list, to:" +msgstr "Valitse lähde listasta, niin voit:" + +msgid "Read a conversation" +msgstr "Lukea keskusteluja" + +msgid "View or retrieve files" +msgstr "Katsella tai vastaanottaa tiedostoja" + +msgid "Send a response" +msgstr "Lähettää vastauksen" + +msgid "Deleting files and messages…" +msgstr "Tiedostoja ja viestejä poistetaan…" + +msgid "Deleting source account…" +msgstr "Lähdetiliä poistetaan…" + +msgid "— All files and messages deleted for this source —" +msgstr "— Kaikki tämän lähteen tiedostot ja viestit poistettu —" + +msgid "Failed to send" +msgstr "Lähettäminen epäonnistui" + +msgid " DOWNLOAD" +msgstr " LATAA" + +msgid "EXPORT" +msgstr "VIE" + +msgid "PRINT" +msgstr "TULOSTA" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "SALATTU TIEDOSTO PALVELIMELLA" + +msgid "DOWNLOAD" +msgstr "LATAA" + +msgid " DOWNLOADING " +msgstr " LADATAAN " + +msgid "Earlier files and messages deleted." +msgstr "Aiemmat tiedostot ja viestit poistettu." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Tämän lähteen tiedostot ja\n" +" viestit poistettu" + +msgid "Compose a reply to " +msgstr "Vastaus käyttäjälle " + +msgid "Awaiting encryption key" +msgstr "Odotetaan salausavainta" + +msgid " from server to enable replies" +msgstr " palvelimelta vastausten käyttämiseksi" + +msgid "Sign in" +msgstr "Kirjaudu sisään" + +msgid " to compose or send a reply" +msgstr " muodostaaksesi viestin tai lähettääksesi vastauksen" + +msgid "FILES AND MESSAGES" +msgstr "TIEDOSTOT JA VIESTIT" + +msgid "SOURCE ACCOUNT" +msgstr "LÄHDETILI" + +msgid "Username" +msgstr "Käyttäjätunnus" + +msgid "Passphrase" +msgstr "Salalause" + +msgid "Two-Factor Code" +msgstr "Kaksivaiheisen tunnistautumisen koodi" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop-asiakasohjelmisto v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Tämä käyttäjätunnus ei toimi.\n" +"Käyttäjätunnuksen tulee sisältää vähintään kolme merkkiä." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Tämä tunnuslause ei toimi.\n" +"Tunnuslauseen tulee olla pituudeltaan 14-128 merkkiä." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Tämä kaksivaiheisen tunnistautumisen koodi ei toimi.\n" +"Kaksivaiheisen tunnistautumisen koodin tulee sisältää vain numeroita." + +msgid "SIGNING IN" +msgstr "KIRJAUDUTAAN SISÄÄN" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Kirjoita käyttäjätunnus, tunnuslause ja kaksivaiheisen tunnistautumisen koodi." + +msgid "USE OFFLINE" +msgstr "KÄYTÄ OFFLINE-TILASSA" + +msgid "Show Passphrase" +msgstr "Näytä tunnuslause" + +msgid "CANCEL" +msgstr "PERUUTA" + +msgid "CONTINUE" +msgstr "JATKA" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "KYLLÄ, POISTA TIEDOSTOT JA VIESTIT" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Haluatko poistaa {files_to_delete}, {replies_to_delete}, {messages_to_delete} lähdetililtä {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Tilin säilyttäminen säilyttää siihen liittyvät metatiedot ja mahdollistaa lähteen {source} kirjautua SecureDrop-palveluun uudelleen." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "yksi tiedosto" +msgstr[1] "{file_count} tiedostoa" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "yksi vastaus" +msgstr[1] "{reply_count} vastausta" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "yksi viesti" +msgstr[1] "{message_count} viestiä" + +msgid "SUBMIT" +msgstr "LÄHETÄ" + +msgid "Preparing to export:
{}" +msgstr "Valmistellaan vientiä:
{}" + +msgid "Ready to export:
{}" +msgstr "Valmis vientiin:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Liitä salattu USB-asema" + +msgid "Enter passphrase for USB drive" +msgstr "Kirjoita USB-aseman tunnuslause" + +msgid "Export successful" +msgstr "Vienti onnistui" + +msgid "Export failed" +msgstr "Vienti epäonnistui" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Ymmärrä riskit ennen kuin viet tiedostoja

Haittaohjelmat
Tämä työasema mahdollistaa tiedostojen avaamisen turvallisesti. Jos avaat tiedostoja jollain muulla tietokoneella, mikä tahansa upotettu haittaohjelma voi levitä tietokoneellesi tai verkkoon. Jos olet epävarma, miten hallita tätä riskiä, tulosta tiedosto tai ole yhteydessä ylläpitoon.

Anonymiteetti
Lähteiden toimittamat tiedostot saattavat sisältää piilotettua metatietoa, jonka pohjalta on mahdollista tunnistaa lähde. Suojaa lähteitä sensuroimalla, muokkaamalla ja rajaamalla tiedostoja, jos olet aikeissa käyttää näitä tiedostoja verkkoon yhdistetyillä tietokoneilla." + +msgid "Exporting: {}" +msgstr "Viedään: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Liitä yksi SecureDrop Workstation -tietokoneelle tarkoitetusta viemiseen pyhitetyistä levyistä." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Asema ei ole salattu tai siinä on jotain muuta vialla." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Annettu tunnuslause ei kelpaa. Yritä uudelleen." + +msgid "See your administrator for help." +msgstr "Pyydä tukea ylläpitäjältä." + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Käsittele tiedostoja varoen Workstation-tietokoneen ulkopuolella." + +msgid "DONE" +msgstr "VALMIS" + +msgid "Preparing to print:
{}" +msgstr "Valmistellaan tulostusta:
{}" + +msgid "Ready to print:
{}" +msgstr "Valmis tulostamaan:
{}" + +msgid "Connect USB printer" +msgstr "Yhdistä USB-tulostin" + +msgid "Printing failed" +msgstr "Tulostaminen epäonnistui" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Tulostukseen liittyvien riskien hallinta

QR-koodit ja verkko-osoitteet
Älä koskaan kirjoita ja avaa verkko-osoitteita tai skannaa QR-koodeja tulostetuista asiakirjoista ilman turvallisuuteen tähtääviä lisätoimenpiteitä. Jos et ole varma, miten hallita riskiä, ole yhteydessä ylläpitoon.

Tulostuspisteet
Mikä tahansa osa tulostetusta sivusta voi sisältää tunnistettavaa tietoa, kuten tulostuspisteistä, joka ei ole näkyvissä ihmissilmälle sellaisenaan. Huomioi tämä riski, kun työskentelet tai julkaiset skannattuja tulosteita." + +msgid "Please connect your printer to a USB port." +msgstr "Yhdistä tulostin USB-porttiin." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "KYLLÄ, POISTA KOKO LÄHDETILI" + +msgid "Are you sure this is what you want?" +msgstr "Haluatko varmasti tätä?" + +msgid "When the entire account for a source is deleted:" +msgstr "Kun koko lähdetili on poistettu:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Lähde ei voi enää sisäänkirjautua käyttäen koodinimeä." + +msgid "Your organization will not be able to send them replies." +msgstr "Organisaatiosi ei voi lähettää lähteelle vastauksia." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Kaikki lähteeltä vastaanotetut tiedostot ja viestit tuhotaan." + +#~ msgid "Deleting files and messages..." +#~ msgstr "Poistetaan tiedostoja ja viestejä..." + +#~ msgid "Deleting source account..." +#~ msgstr "Poistetaan lähdetiliä..." + +#~ msgid "Download All Files" +#~ msgstr "Lataa kaikki tiedostot" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "JATKA-painike ei ole käytössä siihen asti, kunnes Vie VM on valmiina" From 2b023340f4bd989b4b33b129911a043c556fee95 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 600/751] Translated using Weblate (Polish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Polish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Polish) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Polish) Currently translated at 100.0% (98 of 98 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Polish) Currently translated at 100.0% (97 of 97 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Polish) Currently translated at 100.0% (93 of 93 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Polish) Currently translated at 100.0% (94 of 94 strings) Translated using Weblate (Polish) Currently translated at 100.0% (94 of 94 strings) Added translation using Weblate (Polish) Co-authored-by: Adam Rak Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/pl/ Translation: SecureDrop/SecureDrop Client --- .../locale/pl/LC_MESSAGES/messages.po | 391 ++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 securedrop_client/locale/pl/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/pl/LC_MESSAGES/messages.po b/securedrop_client/locale/pl/LC_MESSAGES/messages.po new file mode 100644 index 000000000..c722b700c --- /dev/null +++ b/securedrop_client/locale/pl/LC_MESSAGES/messages.po @@ -0,0 +1,391 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.8.1\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-04-22 20:13+0000\n" +"Last-Translator: Adam Rak \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.14.1\n" +"Generated-By: Babel 2.10.3\n" + +msgid "{application_name} is already running" +msgstr "{application_name} już działa" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Pobieranie 1 wiadomości" +msgstr[1] "Pobieranie {message_count} wiadomości" +msgstr[2] "Pobieranie {message_count} wiadomości" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Serwer SecureDrop jest nieosiągalny. Próbuję ponownie się połączyć..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Nie można połączyć się z serwerem SecureDrop. Sprawdź swoje \n" +"połączenie z Internetem oraz siecią Tor i spróbuj ponownie." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Te dane uwierzytelniające nie zadziałały. Spróbuj ponownie \n" +"i upewnij się, że używasz nowego kodu dwuskładnikowego." + +msgid "That didn't work. Please check everything and try again." +msgstr "To nie zadziałało. Sprawdź wszystko i spróbuj ponownie." + +msgid "You must sign in to perform this action." +msgstr "Aby wykonać tę czynność, musisz się zalogować." + +msgid "Your session expired. Please log in again." +msgstr "Twoja sesja wygasła. Zaloguj się ponownie." + +msgid "Failed to update star." +msgstr "Nie udało się zaktualizować gwiazdy." + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Plik nie istnieje w katalogu danych. Spróbuj pobrać ponownie." + +msgid "The file download failed. Please try again." +msgstr "Pobieranie pliku nie powiodło się. Spróbuj ponownie." + +msgid "Failed to delete conversation at server" +msgstr "Nie udało się usunąć rozmowy na serwerze" + +msgid "Failed to delete source at server" +msgstr "Nie udało się usunąć źródła na serwerze" + +msgid "No messages." +msgstr "Brak wiadomości." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s napisał(a):" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s wysłał(a):" + +#, python-format +msgid "File: %(filename)s" +msgstr "Plik: %(filename)s" + +msgid "Download All" +msgstr "Pobierz wszystko" + +msgid "Delete Source Account" +msgstr "Usuń konto źródła" + +msgid "Delete All Files and Messages" +msgstr "Usuń wszystkie pliki i wiadomości" + +msgid "Print Transcript" +msgstr "Wydrukuj transkrypcję" + +msgid "Export Transcript" +msgstr "Eksportuj transkrypcję" + +msgid "Export All" +msgstr "Eksportuj wszystko" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Niektóre pliki nie zostaną wyeksportowane

Niektóre pliki z tego źródła nie zostały jeszcze pobrane i nie zostaną wyeksportowane.

Aby wyeksportować aktualnie pobrane pliki, kliknij „Kontynuuj”." + +msgid "all files and transcript" +msgstr "wszystkie pliki i transkrypcje" + +msgid "SecureDrop Client {}" +msgstr "Klient SecureDrop {}" + +msgid "Quit" +msgstr "Zakończ" + +msgid "Last Refresh: {}" +msgstr "Ostatnie odświeżenie: {}" + +msgid "Last Refresh: never" +msgstr "Ostatnie odświeżenie: nigdy" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "WYLOGUJ SIĘ" + +msgid "SIGN IN" +msgstr "ZALOGUJ SIĘ" + +msgid "Nothing to see just yet!" +msgstr "Nie ma jeszcze nic do zobaczenia!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Zgłoszenia źródła zostaną wyświetlone po lewej stronie po pobraniu i odszyfrowaniu." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Tutaj będziesz czytać wiadomości, odpowiadać źródłom i pracować z plikami." + +msgid "Select a source from the list, to:" +msgstr "Wybierz źródło z listy, aby:" + +msgid "Read a conversation" +msgstr "Przeczytaj rozmowę" + +msgid "View or retrieve files" +msgstr "Wyświetl lub pobierz pliki" + +msgid "Send a response" +msgstr "Wyślij odpowiedź" + +msgid "Deleting files and messages…" +msgstr "Usuwanie plików i wiadomości…" + +msgid "Deleting source account…" +msgstr "Usuwanie konta źródła…" + +msgid "— All files and messages deleted for this source —" +msgstr "— Wszystkie pliki i wiadomości tego źródła usunięto —" + +msgid "Failed to send" +msgstr "Nie udało się wysłać" + +msgid " DOWNLOAD" +msgstr " POBIERZ" + +msgid "EXPORT" +msgstr "EKSPORTUJ" + +msgid "PRINT" +msgstr "WYDRUKUJ" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "ZASZYFROWANY PLIK NA SERWERZE" + +msgid "DOWNLOAD" +msgstr "POBIERZ" + +msgid " DOWNLOADING " +msgstr " POBIERANIE " + +msgid "Earlier files and messages deleted." +msgstr "Wcześniejsze pliki i wiadomości zostały usunięte." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Usunięto pliki i wiadomości\n" +" tego źródła" + +msgid "Compose a reply to " +msgstr "Utwórz odpowiedź do " + +msgid "Awaiting encryption key" +msgstr "Oczekiwanie na klucz szyfrowania" + +msgid " from server to enable replies" +msgstr " z serwera, aby umożliwić odpowiedzi" + +msgid "Sign in" +msgstr "Zaloguj się" + +msgid " to compose or send a reply" +msgstr " aby utworzyć lub wysłać odpowiedź" + +msgid "FILES AND MESSAGES" +msgstr "PLIKI I WIADOMOŚCI" + +msgid "SOURCE ACCOUNT" +msgstr "KONTO ŹRÓDŁA" + +msgid "Username" +msgstr "Nazwa użytkownika" + +msgid "Passphrase" +msgstr "Hasło" + +msgid "Two-Factor Code" +msgstr "Kod dwuskładnikowy" + +msgid "SecureDrop Client v{}" +msgstr "Klient SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Ta nazwa użytkownika nie będzie działać.\n" +"Powinna mieć co najmniej 3 znaki." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"To hasło nie zadziała.\n" +"Powinno mieć od 14 do 128 znaków." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Ten kod dwuskładnikowy nie zadziała.\n" +"Powinien zawierać tylko cyfry." + +msgid "SIGNING IN" +msgstr "LOGOWANIE" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Wprowadź nazwę użytkownika, hasło i kod dwuskładnikowy." + +msgid "USE OFFLINE" +msgstr "UŻYWAJ OFFLINE" + +msgid "Show Passphrase" +msgstr "Pokaż hasło" + +msgid "CANCEL" +msgstr "ANULUJ" + +msgid "CONTINUE" +msgstr "DALEJ" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "TAK, USUŃ PLIKI I WIADOMOŚCI" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Czy chcesz usunąć {files_to_delete}, {replies_to_delete}, {messages_to_delete} z konta źródła {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Zachowanie konta pozwoli pozostawić jego metadane oraz utrzymać możliwość ponownego zalogowania się {source} do Twojego SecureDrop." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "jeden plik" +msgstr[1] "{file_count} pliki" +msgstr[2] "{file_count} plików" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "jedna odpowiedź" +msgstr[1] "{reply_count} odpowiedzi" +msgstr[2] "{reply_count} odpowiedzi" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "jedna wiadomość" +msgstr[1] "{message_count} wiadomości" +msgstr[2] "{message_count} wiadomości" + +msgid "SUBMIT" +msgstr "PRZEŚLIJ" + +msgid "Preparing to export:
{}" +msgstr "Przygotowanie do eksportu:
{}" + +msgid "Ready to export:
{}" +msgstr "Gotowość do eksportu:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Włóż zaszyfrowany dysk USB" + +msgid "Enter passphrase for USB drive" +msgstr "Wprowadź hasło do dysku USB" + +msgid "Export successful" +msgstr "Eksport udany" + +msgid "Export failed" +msgstr "Eksport nie powiódł się" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Zrozum zagrożenia przed wyeksportowaniem plików

Złośliwe oprogramowanie
Ta stacja robocza umożliwia bezpieczne otwieranie plików. Jeśli otworzysz pliki na innym komputerze, każde osadzone złośliwe oprogramowanie może rozprzestrzenić się na Twój komputer lub sieć. Jeśli nie masz pewności, jak zarządzać tym ryzykiem, wydrukuj plik lub skontaktuj się z administratorem.

Anonimowość
Pliki przesłane przez źródła mogą zawierać informacje lub ukryte metadane, które identyfikują, kim są. Aby chronić swoje źródła, rozważ redagowanie plików przed rozpoczęciem pracy z nimi na komputerach podłączonych do sieci." + +msgid "Exporting: {}" +msgstr "Eksportowanie: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Włóż jeden z dysków eksportu, który jest przeznaczony specjalnie dla stacji roboczej SecureDrop." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Albo dysk nie jest zaszyfrowany, albo jest z nim coś nie tak." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Podane hasło nie zadziałało. Spróbuj ponownie." + +msgid "See your administrator for help." +msgstr "Skontaktuj się z administratorem, aby uzyskać pomoc." + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Pamiętaj, aby zachować ostrożność podczas pracy z plikami poza maszyną stacji roboczej." + +msgid "DONE" +msgstr "GOTOWE" + +msgid "Preparing to print:
{}" +msgstr "Przygotowanie do druku:
{}" + +msgid "Ready to print:
{}" +msgstr "Gotowość do druku:
{}" + +msgid "Connect USB printer" +msgstr "Podłącz drukarkę USB" + +msgid "Printing failed" +msgstr "Drukowanie nie powiodło się" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Zarządzanie ryzykiem związanym z wydrukami

Kody QR i adresy internetowe
Nigdy nie wpisuj i nie otwieraj adresów internetowych ani nie skanuj kodów QR zawartych w drukowanych dokumentach bez zachowania środków ostrożności. Jeśli nie masz pewności, jak zarządzać tym ryzykiem, skontaktuj się z administratorem.

Kropki na wydrukach
Każda część drukowanej strony może zawierać informacje identyfikujące niewidoczne gołym okiem, takie jak kropki na wydrukach. Prosimy o uważne rozważenie tego ryzyka podczas pracy lub publikowania zeskanowanych wydruków." + +msgid "Please connect your printer to a USB port." +msgstr "Podłącz drukarkę do portu USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "TAK, USUŃ CAŁE KONTO ŹRÓDŁA" + +msgid "Are you sure this is what you want?" +msgstr "Czy na pewno tego chcesz?" + +msgid "When the entire account for a source is deleted:" +msgstr "Po usunięciu całego konta źródła:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Źródło nie będzie mogło ponownie zalogować się za pomocą swojego kryptonimu." + +msgid "Your organization will not be able to send them replies." +msgstr "Twoja organizacja nie będzie mogła wysyłać im odpowiedzi." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Wszystkie pliki i wiadomośc od tego źródła również zostaną zniszczone." + +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Chcesz usunąć {files_to_delete}, {replies_to_delete}, {messages_to_delete} z konta źródła {source}?" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "

Niektóre pliki nie zostaną wyeksportowane

Niektóre pliki z tego źródła nie zostały jeszcze pobrane i nie zostaną wyeksportowane.

Aby wyeksportować aktualnie pobrane pliki, kliknij „Kontynuuj\"." + +#~ msgid "Deleting files and messages..." +#~ msgstr "Usuwam pliki i wiadomości..." + +#~ msgid "Deleting source account..." +#~ msgstr "Usuwam konto źródła..." + +#~ msgid "Download All Files" +#~ msgstr "Pobierz wszystkie pliki" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Wydrukuj transkrypcję rozmowy" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Przycisk DALEJ będzie nieaktywny, dopóki maszyna wirtualna eksportu nie będzie gotowa" From fefb85755ecf6d8be257afb4d8ccf699362d224a Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 601/751] Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 99.0% (103 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (97 of 97 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Co-authored-by: deeplow Co-authored-by: notmuchtohide Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/pt_PT/ Translation: SecureDrop/SecureDrop Client --- .../locale/pt_PT/LC_MESSAGES/messages.po | 88 +++++++++++++++---- 1 file changed, 69 insertions(+), 19 deletions(-) diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po b/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po index aab469a65..e4028c0e4 100644 --- a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.6.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-27 23:09+0000\n" +"PO-Revision-Date: 2023-04-23 18:13+0000\n" "Last-Translator: deeplow \n" "Language-Team: Portuguese (Portugal) \n" "Language: pt_PT\n" @@ -15,12 +15,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} já está aberto" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "A obter 1 mensagem" +msgstr[1] "A obter {message_count} novas mensagens" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Não é possível aceder ao servidor SecureDrop. A reconectar..." @@ -50,9 +55,6 @@ msgstr "A sua sessão expirou. Por favor, inicie sessão novamente." msgid "Failed to update star." msgstr "Falha ao atualizar a estrela." -msgid "Retrieving new messages" -msgstr "A obter novas mensagens" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "O ficheiro não existe na pasta. Por favor, tente transferi-lo de novo." @@ -65,8 +67,23 @@ msgstr "Não foi possível eliminar a conversa no servidor" msgid "Failed to delete source at server" msgstr "Falha ao eliminar fonte no servidor" -msgid "Download All Files" -msgstr "Transferir Todos os Ficheiros" +msgid "No messages." +msgstr "Não há ainda mensagens." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s escreveu:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s enviada:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Ficheiro: %(filename)s" + +msgid "Download All" +msgstr "Transferir tudo" msgid "Delete Source Account" msgstr "Eliminar Conta da Fonte" @@ -74,6 +91,21 @@ msgstr "Eliminar Conta da Fonte" msgid "Delete All Files and Messages" msgstr "Eliminar Todos os Ficheiros e Mensagens" +msgid "Print Transcript" +msgstr "Imprimir conversa" + +msgid "Export Transcript" +msgstr "Exportar Conversa" + +msgid "Export All" +msgstr "Exportar tudo" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Há ficheiros que não serão exportados

Alguns ficheiros desta fonte ainda não foram transferidos e, por isso, não vão ser exportados.

Para exportar os ficheiros já transferidos clique em \"Continuar.\"" + +msgid "all files and transcript" +msgstr "todos os ficheiros e a conversa" + msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -116,11 +148,11 @@ msgstr "Veja ou transferira ficheiros" msgid "Send a response" msgstr "Envie uma resposta" -msgid "Deleting files and messages..." -msgstr "A eliminar ficheiros e mensagens..." +msgid "Deleting files and messages…" +msgstr "A eliminar ficheiros e mensagens…" -msgid "Deleting source account..." -msgstr "A eliminar conta da fonte..." +msgid "Deleting source account…" +msgstr "A eliminar a conta da fonte…" msgid "— All files and messages deleted for this source —" msgstr "— Todos os ficheiros e mensagens eliminados para esta fonte —" @@ -171,6 +203,12 @@ msgstr "Iniciar sessão" msgid " to compose or send a reply" msgstr " para escrever ou responder" +msgid "FILES AND MESSAGES" +msgstr "FICHEIROS E MENSAGENS" + +msgid "SOURCE ACCOUNT" +msgstr "CONTA DA FONTE" + msgid "Username" msgstr "Nome de utilizador" @@ -225,8 +263,8 @@ msgstr "CONTINUAR" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SIM, ELIMINAR FICHEIROS E MENSAGENS" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Deseja eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Manter a conta irá preservar os seus metadados e permite à fonte {source} iniciar sessão no SecureDrop de novo." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "uma mensagem" msgstr[1] "{message_count} mensagens" +msgid "SUBMIT" +msgstr "SUBMETER" + msgid "Preparing to export:
{}" msgstr "A preparar para exportar:
{}" @@ -282,15 +323,9 @@ msgstr "A frase-chave inserida não funcionou. Por favor, tente novamente." msgid "See your administrator for help." msgstr "Consulte o administrador do sistema para obter ajuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "O botão CONTINUAR será desativado até a \"Export VM\" estar pronta" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Lembre-se de ter cuidado quando trabalha com ficheiros fora da Estação de Trabalho SecureDrop." -msgid "SUBMIT" -msgstr "SUBMETER" - msgid "DONE" msgstr "FEITO" @@ -330,6 +365,21 @@ msgstr "A sua organização não lhes conseguirá enviar respostas." msgid "All files and messages from that source will also be destroyed." msgstr "Todos os ficheiros e mensagens da fonte serão também destruídos." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "A eliminar ficheiros e mensagens..." + +#~ msgid "Deleting source account..." +#~ msgstr "A eliminar conta da fonte..." + +#~ msgid "Download All Files" +#~ msgstr "Transferir Todos os Ficheiros" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "O botão CONTINUAR será desativado até a \"Export VM\" estar pronta" + #~ msgid "Entire source account" #~ msgstr "Conta completa da fonte" From 1b5304ad648b8182ed558c9f753d37da8724d8fc Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 602/751] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (104 of 104 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 15.3% (16 of 104 strings) Added translation using Weblate (Chinese (Traditional)) Co-authored-by: Chi-Hsun Tsai Co-authored-by: Chido Musodza Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/zh_Hant/ Translation: SecureDrop/SecureDrop Client --- .../locale/zh_Hant/LC_MESSAGES/messages.po | 362 ++++++++++++++++++ 1 file changed, 362 insertions(+) create mode 100644 securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po b/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po new file mode 100644 index 000000000..c7f4541ee --- /dev/null +++ b/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po @@ -0,0 +1,362 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2023 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.9.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-10-26 02:30+0000\n" +"Last-Translator: Chi-Hsun Tsai \n" +"Language-Team: Chinese (Traditional) \n" +"Language: zh_Hant\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.18.2\n" +"Generated-By: Babel 2.12.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} 已在運行" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "接收{message_count} 訊息" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "無法連接 SecureDrop 伺服器,嘗試重新連接...." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"無法連上 SecureDrop 伺服器,請檢查網際網路\n" +"與 Tor 連線狀態後再試試。" + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"這些憑證無效,請重試一遍,\n" +"並確認使用新的雙因素驗證碼。" + +msgid "That didn't work. Please check everything and try again." +msgstr "此為無效,請檢查後再重試。" + +msgid "You must sign in to perform this action." +msgstr "須先登錄方能進行此動作。" + +msgid "Your session expired. Please log in again." +msgstr "期效已過,請重新登錄。" + +msgid "Failed to update star." +msgstr "更新失敗的星號。" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "資料目錄中無檔案,請試著重新下載。" + +msgid "The file download failed. Please try again." +msgstr "檔案下載失敗,請重試。" + +msgid "Failed to delete conversation at server" +msgstr "無法刪除伺服器上的對話" + +msgid "Failed to delete source at server" +msgstr "無法刪除伺服器上的消息來源" + +msgid "No messages." +msgstr "無訊息。" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender) 寫道:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(發訊者) 送出:" + +#, python-format +msgid "File: %(filename)s" +msgstr "檔案: %%(filename)" + +msgid "Download All" +msgstr "全部下載" + +msgid "Delete Source Account" +msgstr "刪除線人帳戶" + +msgid "Delete All Files and Messages" +msgstr "刪除全部的檔案與訊息" + +msgid "Print Transcript" +msgstr "列印記錄文本" + +msgid "Export Transcript" +msgstr "滙出記錄文" + +msgid "Export All" +msgstr "滙出全部" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

某些檔案不會匯出

尚未完整下載這名線人的檔案,故不會匯出。

欲匯出目前下載的檔案,請按“繼續”" + +msgid "all files and transcript" +msgstr "所有的檔案與記錄" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop 客戶端 {}" + +msgid "Quit" +msgstr "停止" + +msgid "Last Refresh: {}" +msgstr "近期重新整理: {}" + +msgid "Last Refresh: never" +msgstr "上一回重新整理: 尚無" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "登出" + +msgid "SIGN IN" +msgstr "登錄" + +msgid "Nothing to see just yet!" +msgstr "尚無東西可看!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "一旦下載或解密線人提交,就會列入至左側。" + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "這處可讀取訊息、回覆與使用檔案。" + +msgid "Select a source from the list, to:" +msgstr "從列表中選取線人至:" + +msgid "Read a conversation" +msgstr "讀取對話" + +msgid "View or retrieve files" +msgstr "檢視或取回檔案" + +msgid "Send a response" +msgstr "發送回應" + +msgid "Deleting files and messages…" +msgstr "刪除檔案與訊息…" + +msgid "Deleting source account…" +msgstr "刪除線人帳戶…" + +msgid "— All files and messages deleted for this source —" +msgstr "— 刪除此名線人的全部檔案和訊息 —" + +msgid "Failed to send" +msgstr "無法發送" + +msgid " DOWNLOAD" +msgstr " 下載" + +msgid "EXPORT" +msgstr "滙出" + +msgid "PRINT" +msgstr "列印" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "伺服器上的加密檔案" + +msgid "DOWNLOAD" +msgstr "下載" + +msgid " DOWNLOADING " +msgstr " 下載 " + +msgid "Earlier files and messages deleted." +msgstr "早先刪除的檔案與訊息。" + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"此名線人\n" +"檔案與訊息已刪除" + +msgid "Compose a reply to " +msgstr "撰寫回覆給: " + +msgid "Awaiting encryption key" +msgstr "等待加密密鑰" + +msgid " from server to enable replies" +msgstr " 從伺服器上開啟回覆" + +msgid "Sign in" +msgstr "登錄" + +msgid " to compose or send a reply" +msgstr " 欲撰寫或發送回覆" + +msgid "FILES AND MESSAGES" +msgstr "檔案與訊息" + +msgid "SOURCE ACCOUNT" +msgstr "線人帳戶" + +msgid "Username" +msgstr "用戶名" + +msgid "Passphrase" +msgstr "密語" + +msgid "Two-Factor Code" +msgstr "雙因素驗證碼" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop 客戶端版本{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"此用戶名無效。\n" +"至少須 3 個字元。" + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"此密語無效\n" +"密語須介於 14 ~ 128 字元長度。" + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"雙因素驗證無效。\n" +"其應該只有數字。" + +msgid "SIGNING IN" +msgstr "登錄" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "請輸入用名、密語與雙因素驗證碼。" + +msgid "USE OFFLINE" +msgstr "離線使用" + +msgid "Show Passphrase" +msgstr "顯示密語" + +msgid "CANCEL" +msgstr "取消" + +msgid "CONTINUE" +msgstr "繼續" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "確認刪除檔案與訊息" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "要刪除來自線人帳戶 {source}的全部{files_to_delete}, {replies_to_delete}, {messages_to_delete} 嗎?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "保留帳戶將會留下中繼資料,也會讓{source}可再繼續登錄 SecureDrop。" + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "{file_count}檔案" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "{reply_count}回覆" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "{message_count}訊息" + +msgid "SUBMIT" +msgstr "提交" + +msgid "Preparing to export:
{}" +msgstr "準備滙出:
{}" + +msgid "Ready to export:
{}" +msgstr "已滙出:
{}" + +msgid "Insert encrypted USB drive" +msgstr "插入加密的 USB 隨身碟" + +msgid "Enter passphrase for USB drive" +msgstr "輸入 USB 隨身碟 的密語" + +msgid "Export successful" +msgstr "成功滙出" + +msgid "Export failed" +msgstr "滙出失敗" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

匯出檔案前了解相關風險

惡意軟體
此工作站可讓您安全地開啟檔案。 如果在另一台電腦上打開檔案,任何嵌入的惡意軟體都可能傳播到電腦或網路。 如果不確定如何管理此風險,請列印該文件,或聯絡管理員。

匿名性
線人提交的檔案可能有足以識別出他們是誰的資訊或隱藏元數據。 為了保護消息來源,請考慮在連網的電腦上使用檔案之前先對其進行編輯。" + +msgid "Exporting: {}" +msgstr "滙出中: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "請接上專為 SecureDrop 工作站配置的匯出磁碟。" + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "該磁碟可能未加密,或存在其他問題。" + +msgid "The passphrase provided did not work. Please try again." +msgstr "所提供的密語無效,請重試。" + +msgid "See your administrator for help." +msgstr "聯絡求助管理員。" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "記住在工作站以外的電腦上處理檔案時要小心。" + +msgid "DONE" +msgstr "完成" + +msgid "Preparing to print:
{}" +msgstr "準備列印:
{}" + +msgid "Ready to print:
{}" +msgstr "已可列印:
{}" + +msgid "Connect USB printer" +msgstr "連接 USB 印表機" + +msgid "Printing failed" +msgstr "列印失敗" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

管理列印輸出風險

二維碼和網址
在未採取安全預防措施的情況下,切勿輸入並開啟網址或掃描列印文件中包含的QR 圖碼。如果不確定如何管理此風險,請聯絡管理員。

印表機隱寫技術
列印頁面的任何部分都可能包含肉眼看不見的識別資訊,例如印表機隱寫技術。 在使用或發布掃描的列印輸出時,請仔細考慮此風險。" + +msgid "Please connect your printer to a USB port." +msgstr "請將印表機接入 USB 端口。" + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "確認刪除全部的線人帳戶" + +msgid "Are you sure this is what you want?" +msgstr "確認真要這麼做?" + +msgid "When the entire account for a source is deleted:" +msgstr "若某名線人的帳戶被刪除:" + +msgid "The source will not be able to log in with their codename again." +msgstr "此名線人將無法再利用其代碼名稱來登錄。" + +msgid "Your organization will not be able to send them replies." +msgstr "您的組織將無法向他們發送回覆。" + +msgid "All files and messages from that source will also be destroyed." +msgstr "即將刪除此線人全部的檔案與訊息。" From 35017ee2752fc7a40899a621d722653a9408ed37 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 603/751] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Chinese (Simplified)) Currently translated at 87.5% (91 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (94 of 94 strings) Co-authored-by: Cory Francis Myers Co-authored-by: Kishin Sagume Co-authored-by: Weblate Co-authored-by: ff98sha Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/zh_Hans/ Translation: SecureDrop/SecureDrop Client --- .../locale/zh_Hans/LC_MESSAGES/messages.po | 91 ++++++++++++++----- 1 file changed, 70 insertions(+), 21 deletions(-) diff --git a/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po b/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po index a2b29900c..a2f1d8074 100644 --- a/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po +++ b/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po @@ -7,20 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.6.0-rc2\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-20 17:02+0000\n" -"Last-Translator: ff98sha \n" +"PO-Revision-Date: 2023-06-15 05:56+0000\n" +"Last-Translator: Kishin Sagume \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} 已在运行" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "正获取 {message_count} 条消息" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "无法连接到 SecureDrop 服务器,重连中……" @@ -50,9 +54,6 @@ msgstr "会话已过期,请重新登录。" msgid "Failed to update star." msgstr "未能更新星标。" -msgid "Retrieving new messages" -msgstr "正获取新消息" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "文件不存在,请重新下载。" @@ -65,15 +66,45 @@ msgstr "服务器上删除消息失败" msgid "Failed to delete source at server" msgstr "服务器上删除线人失败" -msgid "Download All Files" -msgstr "下载所有文件" +msgid "No messages." +msgstr "无消息。" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s 写道:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s 送出:" + +#, python-format +msgid "File: %(filename)s" +msgstr "文件:%(filename)s" + +msgid "Download All" +msgstr "全部下载" msgid "Delete Source Account" -msgstr "删除线人账号" +msgstr "删除线人账户" msgid "Delete All Files and Messages" msgstr "删除所有文件和消息" +msgid "Print Transcript" +msgstr "打印记录" + +msgid "Export Transcript" +msgstr "导出记录" + +msgid "Export All" +msgstr "全部导出" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

一些文件无法导出

一些来自此线人的文件还未下载,且无法导出。

要导出目前已下载文件,请点击“继续”。" + +msgid "all files and transcript" +msgstr "所有文件和记录" + msgid "SecureDrop Client {}" msgstr "SecureDrop 客户端 {}" @@ -116,11 +147,11 @@ msgstr "查看和获取文件" msgid "Send a response" msgstr "发送回复" -msgid "Deleting files and messages..." -msgstr "文件和消息删除中..." +msgid "Deleting files and messages…" +msgstr "正在删除文件和消息…" -msgid "Deleting source account..." -msgstr "删除线人账号中..." +msgid "Deleting source account…" +msgstr "正在删除线人账号…" msgid "— All files and messages deleted for this source —" msgstr "— 此线人的所有文件和消息已删除 —" @@ -171,6 +202,12 @@ msgstr "登录" msgid " to compose or send a reply" msgstr " 编写和发送回复" +msgid "FILES AND MESSAGES" +msgstr "文件和消息" + +msgid "SOURCE ACCOUNT" +msgstr "线人账号" + msgid "Username" msgstr "用户名" @@ -225,8 +262,8 @@ msgstr "继续" msgid "YES, DELETE FILES AND MESSAGES" msgstr "确认删除文件和消息" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "您要为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete} 和 {messages_to_delete} 吗?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "保留帐户将保留其元数据,使得 {source} 可以再次登录 SecureDrop。" @@ -243,6 +280,9 @@ msgid "one message" msgid_plural "{message_count} messages" msgstr[0] "{message_count} 条消息" +msgid "SUBMIT" +msgstr "提交" + msgid "Preparing to export:
{}" msgstr "正准备导出:
{}" @@ -279,15 +319,9 @@ msgstr "密码无效,请重试。" msgid "See your administrator for help." msgstr "请寻求管理员的帮助。" -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "继续按钮会被禁用,直到导出的虚拟机准备就绪" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "在工作机在外的地方处理文件时请小心。" -msgid "SUBMIT" -msgstr "提交" - msgid "DONE" msgstr "完成" @@ -327,6 +361,21 @@ msgstr "你的组织无法再向他们发送回复。" msgid "All files and messages from that source will also be destroyed." msgstr "此线人的所有文件和消息都将被删除。" +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "文件和消息删除中..." + +#~ msgid "Deleting source account..." +#~ msgstr "删除线人账号中..." + +#~ msgid "Download All Files" +#~ msgstr "下载所有文件" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "继续按钮会被禁用,直到导出的虚拟机准备就绪" + #~ msgid "Entire source account" #~ msgstr "整个线人账号" From e85b4a81ee8b6a643908945f299e0b0e11e8881e Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 604/751] Translated using Weblate (English (XA pseudolocale)) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (English (XA pseudolocale)) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (English (XA pseudolocale)) Currently translated at 100.0% (104 of 104 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (English (XA pseudolocale)) Currently translated at 100.0% (98 of 98 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (English (XA pseudolocale)) Currently translated at 100.0% (97 of 97 strings) Added translation using Weblate (English (XA pseudolocale)) Co-authored-by: Cory Francis Myers Co-authored-by: Weblate Co-authored-by: anonymous Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/en_XA/ Translation: SecureDrop/SecureDrop Client --- .../locale/en_XA/LC_MESSAGES/messages.po | 384 ++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 securedrop_client/locale/en_XA/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po b/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po new file mode 100644 index 000000000..5b2e4900c --- /dev/null +++ b/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po @@ -0,0 +1,384 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2023 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.8.1\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-04-22 18:13+0000\n" +"Last-Translator: anonymous \n" +"Language-Team: English (XA pseudolocale) \n" +"Language: en_XA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" +"Generated-By: Babel 2.11.0\n" + +msgid "{application_name} is already running" +msgstr "[!!!{application_name} is already running!!!]" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "[!!Retrieving 1 message!!]" +msgstr[1] "[!!!Retrieving {message_count} messages!!!]" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "[!!!!!!The SecureDrop server cannot be reached. Trying to reconnect...!!!!!!]" + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"[!!!!!!!!!!Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again.!!!!!!!!!!]" + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"[!!!!!!!!!Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code.!!!!!!!!!]" + +msgid "That didn't work. Please check everything and try again." +msgstr "[!!!!!That didn't work. Please check everything and try again.!!!!!]" + +msgid "You must sign in to perform this action." +msgstr "[!!!!You must sign in to perform this action.!!!!]" + +msgid "Your session expired. Please log in again." +msgstr "[!!!!Your session expired. Please log in again.!!!!]" + +msgid "Failed to update star." +msgstr "[!!Failed to update star.!!]" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "[!!!!!!File does not exist in the data directory. Please try re-downloading.!!!!!!]" + +msgid "The file download failed. Please try again." +msgstr "[!!!!The file download failed. Please try again.!!!!]" + +msgid "Failed to delete conversation at server" +msgstr "[!!!Failed to delete conversation at server!!!]" + +msgid "Failed to delete source at server" +msgstr "[!!!Failed to delete source at server!!!]" + +msgid "No messages." +msgstr "[!No messages.!]" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "[!%(sender)s wrote:!]" + +#, python-format +msgid "%(sender)s sent:" +msgstr "[!%(sender)s sent:!]" + +#, python-format +msgid "File: %(filename)s" +msgstr "[!File: %(filename)s!]" + +msgid "Download All" +msgstr "[!Download All!]" + +msgid "Delete Source Account" +msgstr "[!!Delete Source Account!!]" + +msgid "Delete All Files and Messages" +msgstr "[!!Delete All Files and Messages!!]" + +msgid "Print Transcript" +msgstr "[!Print Transcript!]" + +msgid "Export Transcript" +msgstr "[!Export Transcript!]" + +msgid "Export All" +msgstr "[!Export All!]" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "[!!!!!!!!!!!!!!!!!!!

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"!!!!!!!!!!!!!!!!!!!]" + +msgid "all files and transcript" +msgstr "[!!all files and transcript!!]" + +msgid "SecureDrop Client {}" +msgstr "[!!SecureDrop Client {}!!]" + +msgid "Quit" +msgstr "[Quit]" + +msgid "Last Refresh: {}" +msgstr "[!Last Refresh: {}!]" + +msgid "Last Refresh: never" +msgstr "[!Last Refresh: never!]" + +msgid "{}" +msgstr "[{}]" + +msgid "SIGN OUT" +msgstr "[SIGN OUT]" + +msgid "SIGN IN" +msgstr "[SIGN IN]" + +msgid "Nothing to see just yet!" +msgstr "[!!Nothing to see just yet!!!]" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "[!!!!!!!Source submissions will be listed to the left, once downloaded and decrypted.!!!!!!!]" + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "[!!!!!!!This is where you will read messages, reply to sources, and work with files.!!!!!!!]" + +msgid "Select a source from the list, to:" +msgstr "[!!!Select a source from the list, to:!!!]" + +msgid "Read a conversation" +msgstr "[!Read a conversation!]" + +msgid "View or retrieve files" +msgstr "[!!View or retrieve files!!]" + +msgid "Send a response" +msgstr "[!Send a response!]" + +msgid "Deleting files and messages…" +msgstr "[!!Deleting files and messages…!!]" + +msgid "Deleting source account…" +msgstr "[!!Deleting source account…!!]" + +msgid "— All files and messages deleted for this source —" +msgstr "[!!!!!— All files and messages deleted for this source —!!!!!]" + +msgid "Failed to send" +msgstr "[!Failed to send!]" + +msgid " DOWNLOAD" +msgstr " [ DOWNLOAD]" + +msgid "EXPORT" +msgstr "[EXPORT]" + +msgid "PRINT" +msgstr "[PRINT]" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "[!!ENCRYPTED FILE ON SERVER!!]" + +msgid "DOWNLOAD" +msgstr "[DOWNLOAD]" + +msgid " DOWNLOADING " +msgstr " [! DOWNLOADING !] " + +msgid "Earlier files and messages deleted." +msgstr "[!!!Earlier files and messages deleted.!!!]" + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"[!!!!Files and messages deleted\n" +" for this source!!!!]" + +msgid "Compose a reply to " +msgstr "[!Compose a reply to !] " + +msgid "Awaiting encryption key" +msgstr "[!!Awaiting encryption key!!]" + +msgid " from server to enable replies" +msgstr " [!!! from server to enable replies!!!]" + +msgid "Sign in" +msgstr "[Sign in]" + +msgid " to compose or send a reply" +msgstr " [!! to compose or send a reply!!]" + +msgid "FILES AND MESSAGES" +msgstr "[!FILES AND MESSAGES!]" + +msgid "SOURCE ACCOUNT" +msgstr "[!SOURCE ACCOUNT!]" + +msgid "Username" +msgstr "[Username]" + +msgid "Passphrase" +msgstr "[!Passphrase!]" + +msgid "Two-Factor Code" +msgstr "[!Two-Factor Code!]" + +msgid "SecureDrop Client v{}" +msgstr "[!!SecureDrop Client v{}!!]" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"[!!!!!!That username won't work.\n" +"It should be at least 3 characters long.!!!!!!]" + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"[!!!!!!!That passphrase won't work.\n" +"It should be between 14 and 128 characters long.!!!!!!!]" + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"[!!!!!!That two-factor code won't work.\n" +"It should only contain numerals.!!!!!!]" + +msgid "SIGNING IN" +msgstr "[!SIGNING IN!]" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "[!!!!!Please enter a username, passphrase and two-factor code.!!!!!]" + +msgid "USE OFFLINE" +msgstr "[!USE OFFLINE!]" + +msgid "Show Passphrase" +msgstr "[!Show Passphrase!]" + +msgid "CANCEL" +msgstr "[CANCEL]" + +msgid "CONTINUE" +msgstr "[CONTINUE]" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "[!!!YES, DELETE FILES AND MESSAGES!!!]" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "[!!!!!!!!!!!!Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?!!!!!!!!!!!!]" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "[!!!!!!!!!!!Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again.!!!!!!!!!!!]" + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "[one file]" +msgstr[1] "[!{file_count} files!]" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "[one reply]" +msgstr[1] "[!!{reply_count} replies!!]" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "[!one message!]" +msgstr[1] "[!!{message_count} messages!!]" + +msgid "SUBMIT" +msgstr "[SUBMIT]" + +msgid "Preparing to export:
{}" +msgstr "[!!!!!!Preparing to export:
{}!!!!!!]" + +msgid "Ready to export:
{}" +msgstr "[!!!!!!Ready to export:
{}!!!!!!]" + +msgid "Insert encrypted USB drive" +msgstr "[!!Insert encrypted USB drive!!]" + +msgid "Enter passphrase for USB drive" +msgstr "[!!!Enter passphrase for USB drive!!!]" + +msgid "Export successful" +msgstr "[!Export successful!]" + +msgid "Export failed" +msgstr "[!Export failed!]" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "[!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]" + +msgid "Exporting: {}" +msgstr "[!Exporting: {}!]" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "[!!!!!!!!!Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.!!!!!!!!!]" + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "[!!!!!!!Either the drive is not encrypted or there is something else wrong with it.!!!!!!!]" + +msgid "The passphrase provided did not work. Please try again." +msgstr "[!!!!!The passphrase provided did not work. Please try again.!!!!!]" + +msgid "See your administrator for help." +msgstr "[!!!See your administrator for help.!!!]" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "[!!!!!!!!Remember to be careful when working with files outside of your Workstation machine.!!!!!!!!]" + +msgid "DONE" +msgstr "[DONE]" + +msgid "Preparing to print:
{}" +msgstr "[!!!!!!Preparing to print:
{}!!!!!!]" + +msgid "Ready to print:
{}" +msgstr "[!!!!!!Ready to print:
{}!!!!!!]" + +msgid "Connect USB printer" +msgstr "[!Connect USB printer!]" + +msgid "Printing failed" +msgstr "[!Printing failed!]" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "[!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]" + +msgid "Please connect your printer to a USB port." +msgstr "[!!!!Please connect your printer to a USB port.!!!!]" + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "[!!!YES, DELETE ENTIRE SOURCE ACCOUNT!!!]" + +msgid "Are you sure this is what you want?" +msgstr "[!!!Are you sure this is what you want?!!!]" + +msgid "When the entire account for a source is deleted:" +msgstr "[!!!!When the entire account for a source is deleted:!!!!]" + +msgid "The source will not be able to log in with their codename again." +msgstr "[!!!!!!The source will not be able to log in with their codename again.!!!!!!]" + +msgid "Your organization will not be able to send them replies." +msgstr "[!!!!!Your organization will not be able to send them replies.!!!!!]" + +msgid "All files and messages from that source will also be destroyed." +msgstr "[!!!!!!All files and messages from that source will also be destroyed.!!!!!!]" + +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "[!!!!!!!!!!!!You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?!!!!!!!!!!!!]" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "[!!!!!!!!!!!!!!!!!!!

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"!!!!!!!!!!!!!!!!!!!]" + +#~ msgid "Deleting files and messages..." +#~ msgstr "[!!!Deleting files and messages...!!!]" + +#~ msgid "Deleting source account..." +#~ msgstr "[!!Deleting source account...!!]" + +#~ msgid "Download All Files" +#~ msgstr "[!Download All Files!]" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "[!!Print Conversation Transcript!!]" From 8f41381eee0441345c9bbc2d2e8dbf7fb650f977 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 Nov 2023 19:12:01 +0000 Subject: [PATCH 605/751] Update translation files Updated by "Squash Git commits" hook in Weblate. Translation: SecureDrop/SecureDrop Client Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ --- .../locale/bn/LC_MESSAGES/messages.mo | Bin 0 -> 800 bytes .../locale/ca/LC_MESSAGES/messages.mo | Bin 12136 -> 13062 bytes .../locale/de/LC_MESSAGES/messages.mo | Bin 12597 -> 13589 bytes .../locale/el/LC_MESSAGES/messages.mo | Bin 0 -> 16400 bytes .../locale/en_XA/LC_MESSAGES/messages.mo | Bin 0 -> 13451 bytes .../locale/eo/LC_MESSAGES/messages.mo | Bin 0 -> 479 bytes .../locale/es/LC_MESSAGES/messages.mo | Bin 12266 -> 11672 bytes .../locale/fi/LC_MESSAGES/messages.mo | Bin 0 -> 13037 bytes .../locale/fr/LC_MESSAGES/messages.mo | Bin 0 -> 13671 bytes .../locale/hr/LC_MESSAGES/messages.mo | Bin 11722 -> 12741 bytes .../locale/is/LC_MESSAGES/messages.mo | Bin 12335 -> 13283 bytes .../locale/it/LC_MESSAGES/messages.mo | Bin 1739 -> 7025 bytes .../locale/pl/LC_MESSAGES/messages.mo | Bin 0 -> 13254 bytes .../locale/pt_BR/LC_MESSAGES/messages.mo | Bin 11972 -> 12446 bytes .../locale/pt_PT/LC_MESSAGES/messages.mo | Bin 12218 -> 13180 bytes .../locale/ru/LC_MESSAGES/messages.mo | Bin 15719 -> 16490 bytes .../locale/sk/LC_MESSAGES/messages.mo | Bin 11550 -> 11273 bytes .../locale/sv/LC_MESSAGES/messages.mo | Bin 11897 -> 12838 bytes .../locale/tr/LC_MESSAGES/messages.mo | Bin 12069 -> 13010 bytes .../locale/zh_Hans/LC_MESSAGES/messages.mo | Bin 10874 -> 11739 bytes .../locale/zh_Hant/LC_MESSAGES/messages.mo | Bin 0 -> 11727 bytes 21 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 securedrop_client/locale/bn/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/el/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/eo/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/fi/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/fr/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/pl/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/bn/LC_MESSAGES/messages.mo b/securedrop_client/locale/bn/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..1964e91c7525c2b31a66cd1119dd06079218c8b7 GIT binary patch literal 800 zcmZ`%J8#rL5H_#IB{jte2?>PO<{(AnJmA7PaMC#!-8sA(*z-+%j+|XQgxo44`Aegx4SI0bZ}wQw zWvwRM?0P}_;=S&gZ+EyhEL2?RlpCo$Sl#G!V67SWu;>TPcIR5N)#~~E{xV5LJmxX7 z5czifHH#x-GVQtULmW^Ibab_xAuY#|Dt5EkB-*X{e_R%&2@2y5gj;v;U?A+E9r*R^ z4d;@5T?#{57EUsn$KWI5W+_j^0z@OOG@7N2aFxy1x^k>dRLmEV9MV=jm>(p@UQfr0 zr)*WKZS8@`s!%UoUVxdqBw!gD3-%p$0|lztUT)8(gE^;h#kT4{07d?_$iEl)Q89f{ zw zb+{S3a6L|7B^vy;wF3tSyO$8wOB@!vQ7g^0C(Vi)>j7@$b(+4* z`57>$+Km$NFiOOq##NX?32YJXz!TVo-^D4sg8ev1+5-3`d=M|8%)9RvrAUGbp=2F@ztYEO3y#-i%*FN%@l~fqV_+O`kzY=?lm|^$H(6s@_D6SFj#S zNrwc`QgAoQy!$tj{}BcuZpeaXa2S7yedwn`_Mwdu;CYl3{slX+mNf0fF_hd>xAU5L+cHwE1)W3$zt^S5m{pEZ# zVl#dMM{p~~k)l^FehQz$Gd^knC1Xh{S28u9WgrinLSj(gM@i-D1%HQ{nf{3{a=%tH z3D=i!7uVmUlqK*tQ3AP&vPE@V$Qw7JWS|Y@c;AIfIElrWy~IHF;w@~#U!%riqH4uP z+=d5Hit{*1peIqDdm1HE&!c4O=O~#fXELdgPLzxdAiJifkmRWadxX$`~i|2^(Q2|s+4GCfku?$+l!K+5#%>XB~dc6giUh( zzrdh}8|TsBdpM4xy!JtS8XdffGO^9;$(uZaCHQre7dV4M_(H+|7965t@8!OWm3SHD zSpF5g^Y0_i@`q|%g?^M2x1pqN5G5lIATg-ZC=0%XQY&wuO!#{|f>*H{$J+P}!BZH( zKNPOFFJoo!5OT;hfp$c3hVJK9>brY zoQ4keNA8a!|5Sz#DcWZX{%R-rr(o4OqL5>^3#lJ9jm3HBq=LKNNQs#)9m1gx*h=0-~P0?YJ4s z>C&V=q_J~e(Mp!2JwTUJat~b^he-|4Z=%bVu>)Ss$olFK{WEl_ZfVqs_y52r@w4=` z^iukAD=Q3al%pq2wo&$03U9f|PpzB?De9T!n<%GE3XqmnyYmC@le+PKzu8`|k~tyD zqHmx}GxWRZ0s1gKNUx{&(xu6%kh;0Ct>FfT!fTvvb%5SQ*WNDygGu^o*H?O^ert2u zBqAoYEv*?i-D<^+g;dfp-Di)K7G*=pxY09q%%t^#9gFEi($UjKo5i_g$}y3i?a_`s zE50+6O2)MlwV5=TNrjD$TJy$xXvxTfCZQwAg+wfAMNFhsTZzd3owmJaI;FSo>6z{o zCX$8qnAzxXCY2)K*wTub@)5S`aLf)L)AfO5!m$$>(_WvOEPKAV<(9|R!tyz<9&+S2h@&%6yGG zm%pLLjgzv?yhM1s@YIwS;lplIm4EH%q47Xa_XPr@hYn2S_E-JKmwUYW1K;ZVl9^aU zFC{bX-)kKAL`}>+R%_K->{Nc!B*V_NcgVe7J5^NN)!yN@Y(CnuV#lMFHi>!Ly1owN zuDra{ojbX?sVLhQo6RKB%sCL4;m&bt}hq& zp2m}F1J<05+ti9PYueqPHP-p8+?B@SqD@2bxs)9@_TtA@%DvZA?Q7*_QYM_4Gi-pP zDW}3D`Bx>yEB@-f+P=x%(%e}Y7#$g#2HCS53%K1<=o6HJ0(}An3Y3=eD70+5({{*q2X<#^kzkb| zMhuC`gb#i~<0Ax(qN^f_VnQ`0MiC$J0}&I58bXLj{9wSO_&>A7aMQEDJG=9^_ndpD z#|Cfoj{lmId{WW+h)0OLB&EhNeHtIM)KsO?Fby*>7azsBI2#-Ao=2%&Sm#x0+YF^v z@%{01rRL+;Scre3+;SQ>;Z&7@x$>xjL`PL%kRMiJGQN&-;%O|!_c0&8Lm9yDSc1v3 zl*++5ScG*b4_c2hfGxNl51?Fk5xG=d!)%%A?Wr$3nM(QjArt4~QsgJK0}F5%TX7s0 z;+H4`xP#0@rDrL{pVEBDKx#1s*C9z!o3R3WupW`$eH1(K3zSqBanf|GLCIh}$^aTsGP40Clbtx8N5`b2@fnbZCW?#D*FfK4cOm*ZxX0X~mz#&9Xecd!8$6p(+p!Cvya8_%IU zIG<_EL?6lwYEeqC9BZ%xr9?+iYWfD2;{+bUTPOn@rVf(w*H9MgH~1Ldz&V&vO#Xdz zDvOo!VkbU<-FV8Q)CrW7RdTgtY6;5uZOBi`Ld}IQ;0iA*DXPhlk*vj6we*}@l>u>12)^!gJ6nvQK8&z{nl z@;zj1>MpWzR4LPEW2tJCi8NpecA;cyCl<;6x9P}?PoSjqQ7 z<#-r(;3wFOIpkN4yRi$;Vk4%o^d+-va3wyCYw$eo=K0FANT~trL$ahMP#$~(O1POB&p_D^1vW{3rNZqB8Fn2<2QvWA8*iQ5k z(l!%)ZZGknfs(q5OVTN|Wl6Z(65Q1-wh&9DLz8kylgXtKTjhYZHi7%@XrRAQ>c5JP zynLid-7*N-lCy{n#KUa{2V~c6B+X5$97uhoNm(AWRytC~Btq&ft(e$J$U4d-x_N%$ z&4#j_q)~2n!AY&8e)7hXg+o=`Ehwd$Nu(1}_fFzLlb!USbs zO3Yru2Mf_{EBH)t?xyy{N7L?m;>*(COiHS%s&cMn78Rgsu|~roD-hI;p^#o}hK#6_ zmUYg#npN%;WuJF`%ibIB$+_i;Z_i8iB!!Jp=h=LJ%GRd#wl3%U{M`7Z{Og_-&6_rM zwQbzms{3QMZH4uy$-Vjw9Wo>|U>Du`^QI8~>-&=Z*iQ`;*HCO?%9UM760$%xE-V z4;fLJMW^40+7qwpXl!4^95J0ezQPjuzA0di1+;D1QEh~xdg^ND1>aexudL0vUG}JR zrED}gVuS)tr@z~|;D63(FE5G@m3zJMqZN6c(m+^S{k9P{!?t^i{~xQvR?PWj;j*}Y z(JpUSD-*WtiMXE1MWc>bBY|)*!k~giG%#SB2Ld(&2uJn)n4v=fZH5P}$Vgzoso*s0yrb{xXgiDSDleo0f3IwtnTz9x>}68oH&hSXi(jeU#H zdtvXcwn?K)RkgSkQkt&H2Pi=mB7%}4)T2caAR)qsN(2#6i4O?1k(E#okt$TEpb&}w zvv;nKh>_=hvva#Mv-3Q2erxiTFJ<1VT=j~g*wii5Xt7e#ab*o3Qr7u@Du5ffT#s9^ z7VB^?Zp1L&hXy|hC^d(_9w}3*o9kG)Qrqx*Sglk>U8f;)-NF+5D^}s( z^OjVwD6Y5QDtrdzzUT2XcmX%z8z>9AhMRE-nN!`x8Z2d%GS4=Y1w4cU%&&%N$b;X& zQoM@tCci>?AwGU;*gD5LLiL22?S=c;2gwNt${2@-@2iS)P*|uK%8h#mXpp1Lqex=w1HHNZ- z5tJQ{VWx-1(=;SDKgTh=i!#Ac_H`}3h_dA`qb%f`C~tZhWlP^e{?yO-;8FEE)c66` zV+q?K3)q==AIi7`53v73G{)$V317oO`~wEDkqkM2Hp&98plsnC+=Df2Qx6_NdF~>f z#`jPr?5ZVUaS-JNP9Q@o3)^wNmi<3VyfH}&4RlJVs!@)0JxYkW@dA#cgf4TNhGh92uEQR7H7)ftqDUc`F*7Our# zpzO>$*eU1#T^eCJ$_a1`BPdCE9S`7UUN4QOQ3iY$<&FM?GT>b#tZFr@K8O#Z977u) z$2ao*C7;VB;gP&2v4Z*4Bn?@SoA(^bn=hgqr%U(+%wjA44dwW0E@X?_umpoB6CTEK z{4RbG|Ba(~qD`se_ye@Cm?MxGreSCt!5?D?S9jzd7{HgfzJwdGjrhofJy?dLD7i6# z5{joWg+D?`#s)g&bo8SfR|g-(%P22&^I`U1wr=b0-0|r|c3nM=^5AnwqN~@Dq*vEb z7Wi8XpcL6DNjP}{DKdeCQI4?``5lm>DLFAf9ia|U%c=7J$KMip3t6EQdBX|6mHX&{ zCkn1l(v~>yr#9yMWs%F}C=JP*;(W&moTkc)E*B!;{}fM3{KNTP`Js3u-xkPA|36Z#pSDOFU-n|sT8Iyi-XY2s6oUVhfK|KEYeG3q)m zP;#oip($ycsBxQ98v#-`&D9Q|3PK4d>vr@(;igU(|f@4QwseE*79e4U0YvU<=w2W z-m|{F5h3t)nJw=rT zlSJLL>{ND5)3(6oj+J|J%eE$`3B;6fyv6n{-lNUCOOK9+1_uX5hQlM-c=KXWwx{Jv nQQ6S7xBcN|zrBSv+q={HjJMP_Uq{}pq=>|DWoGYW`yc-cuq|U2 delta 2486 zcmYk+drXye9LMqBIiP?Zda}{*zPcAJ=Twe>L53*<7*Aiw4yTEj$`R`d~_^)85iP*sEMym`8{gD z+qfQoMeSfEH@D(Gti`Xe4mG+y*P|BrDn>GfEBJgLYp^hr{A++cwCznZ?2q)ctL!ly_nm9z>0E z6E$B9X`o!pST-FEv=}R}9<{R()P-kI6JA0c(F9gvHKQrzL#PFOfF#RYMAl?(plap; zYRCUz6~^To(}8u^r|17YIw~s7QU`4~jPIfr7RM|aXg-o_FAjF4RH>P#fEi>3aT;(OJzGXRs6}P|tmGkzNoK3TnV|)I?R-i6?L;{)U@z zE&1MxC$Ru3Tg(iLxJ$MXNEGJQ^{}MSy zGl`srNnR3ttd?Pj&jYv$Z=*Igw=7!iJCL=S1E~AXq3X|EqvOU&)XMIm3w05Xv}q!A zG#iM=n~q}{p)AA_Do|yLlZYId7P*~hCbXcZ2{jTNc~Py?`9H;nZN#&L+D2k`q!;~X z0i_TrvRYJTD49r=L*zM^4a5p{XsQb}6=DLR<5F82B~m9f^xJg))pS(ZYO2gcLg}7G zv=WcE8GPWBB8}`vUOxJuCr2$eO60#XsX~h(RIqA#LR3R~B$J3O%pZNT;XFc(`iRs4 zPfX;zISsRh;5Z{sijHa~q1q@X+KER^h4`p#qN9RTG3uqJvri?|cmYOQ%2J?EBTdCJ z&G{?7D?FO;pDVn|b1o*Pw6xTjNXp7Y(-0gD_=DYEtJd$gntXnH$Vo`P=-f za(+(P6Yff#bcMI2$GTzy_NenpM!~esy7lWioEsTw;p-Wuj`ohC`uX zz#8>2R*!9YeM8+ne%ose2SPr-73#CC#{GMPgCT3nddoLt4cgt_=ffY*{@3N? zMuWqCuk(3!$T^2_5*{qsWMxcSH2;kOo?kM*>UUl{7`vjf&hFyLIt&nnO! zHVxZ;e}6C#3R?cD-}N;+vaN>hknOVr&Y}D}&hdhp@ZAEJ%ZbfTbCL@WgijSNcZYu| zUg(N#vxjY`qNFDLQppi_v(L8Ld;7Zmq38VLXPM4w+OWB!y|H6QV;h?r^jcoKyFcU` z@!5l+#a0hn@p4OaZzb%l#~!qOA+{I_yURXxJ9(7{J?&gEFn*!8FT`rDWUp}^RunrQ LRql7Hmj3iVa%Vra diff --git a/securedrop_client/locale/el/LC_MESSAGES/messages.mo b/securedrop_client/locale/el/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..3f0a73bcfa712451db7b687b4a25cb9978e80063 GIT binary patch literal 16400 zcmb`NdvIJ=ea9~}B_JSyl%^00T!&Wzdf)^~syI#*X=Ow#$w+cS00 zit2jslf*NQTQ_kNJ2AF#TuLj;V{FBiAMtdCX{SSbHJw6RW=N+GO8Z9#$_$SVZD;!V z{?55~ccpb+pz-x@_ug~Q`8~eB@9%ex^pDqFwLjqJvs}N<^}nwTf-fMy^UM6l&p%up z1aClo8~JABzarm_{2}t4$hW*c2!8gOAZSJ2!n+@A34%Mh|G=Aq;JwI$$X`P~k9-~S z?~n`)UO@f|@_SzX44LEmH7s%!vVzpOhmr3>ZbSYm@-R~C&m(U@eiQk2kIW!fAwP`Vj?}ty zNa_EV$hRP0KuVAABjviQxrr-+HzPlUd^_?sWH)jH@^_Iv$nPM#kt|@Ao&*@;=hj|&ma|#e?uyMR|BG(kRL#9Mh+sS*Ef*z?^QTo zcgf;0(*1l^5ZCz4)T1(2VDF5vZ{l8rq1aCtA6p6~gRTwY*I*{v;JCJ{h{5J9$ z`;AhaAC4vS;Xax9%1s z5DlJ1%8wV3^2c|PBgo!WE}x!8N{<(iv&i8)f}n&9RtLeoh)Ja4@fS!`4t|VOJU(zJaxaT|Ghisc&FS7=&Zx(nMH^$`3{5 zuv!YEVs>L83d_-CAs4|k>TsS>0cbCfMDLGEwo}AiP$XCYAc{pB;G^xdYL`rCB<}nKk5y4YX3+UjNslLj+6*zsTw6%_6yVl-NB?B<+7u-NG1VpfD7)Q2#JLEVH?&LnHkj+ z4+EL5LcxK-QhWju0QD6|Kc=fwfy`xKwooatR0wrc%cYqp$NRuaz_2_u@CrIIQg^4b z#p<0w*K{^-x<cMCx=91b+P-+L?YPlpW-Vb|zrX{uOtchh8R@NauN3usD9WcOOu zy{1Q*f$pLE*NtR)!rs2MnQ(9*9L@~gn;8l+pI$dOG!kU8Wy(OgS>SS}D1phq7{(`r ztDJub7O$Agd<;MV=4*&Osgyvd(MnW+P^Zf!NWw@bUu7=i%*kw}GC5ur;ld^s5t}*4 z7_Ee3Su!M-e1rH%jSBSU?_g?YxOq#^Yr_;=r>nA(Qd4nE18`i`TRzSsvDpX}z`7Tv zCdsuZguTk`f#L<<18N~AdYICn;v~>mM&|MqA4&y8=4rVK3d&Jit~6aNl(IP#ceA*9 zndXRhb&Gk!pzkyc`ihvqQV#8STHtlATAO9{p=gY1JKjlVVtCMa4-XB%oB{?eszg!v zxhdY6iK;7tbwhmvBf+{f4na~!e3DrGbLGprhOA2)IKMp^N(BQI*>DOKi`fZyu`aBZ z0@J0oF}TH&BNwGF=ABWcA|1z=dCyf7XP63HNmY>Nxv(-BjpoPlqgju ztC~a5Gfe=8&qv36W%yei0A(2(38SdM~jfHmB=W+3bvaB^_{h<#A^t9$G3?(gGHjn%thyka$ci2PW7*KS%N zTGIbnOva=SE6(j?2oY8FsZ7#|M!~Qe&$@IQ&Tmq;7kHw# zUZ5h(tFxsv;2BLu1`sM?z7UNub*VTi26Ak|L*XVDSt(Qr9Z|K+<#WXkR;}qud1%xs zmpEd^5rP4(R-)|1y7ZkcrBk%@!K1X=)Jc@uNEa2+g{=Ijt-bP=+rrWDY?&;FcY&!0 z&L*STs!x8@X*Of2=sH$Qi6X6ina04+knqYCUPT#CZIfBoHz|`A5vr?Ce+I{kAY@PFrztou$39A&Y@2o2cb?^C7WI^|; z+5QZDe9~L(1Oj<=opgXuZEaynv2{r*zSbrQJlIBC>|2UfzE0w0CUk369NkDMSC=i( zWU=;uqx6H?n-GVlNJ`Civ$RaGLGdkHNu>bL7bEsqjp1i@ZuGih(2W(r`eC|}-rlu+ z^hWD_1qtrW^D5K_N0#%T)wLzTecHb$38WZ?CVVQEOp_2d_%hlV+@Be44SO)mzus<_A+_fe%9NbUGIiX@%ad|55O-5xF zoInwlQp;STx6{CBOO8SwM=;E{BAd;t8>*!Z?#7nZaI@cYH{ML*RCl*VC>|a41}A0V zPOYt-&8BQI|2wYbX@(-((c`=c!vPxwQ(8NH;~Uihd`cpCe0tP*h^k1-lECcQVD0D@ z9~M3H+6SBchh#)zRiHrzz`)F(Nd|ad1e>#y97K$o{u_ktEdq45APmzxO%;n&wE$NB zm#t4&(`XyG=Bq91 z3R7@(TQ3<=q5Yh+ua!G)xt)^~J-MS8uDByyd3(#J+tx%yc-`D`pEED~X!}b3wFF`O zbo^xe$MKVVdOSW5ABy+K&&K=W1L*?}u;NpTTNn3)i#y}X@ue_66EDQ4;`4mD7%wdD z;PzY?pVrMVzNG)=7q{|Y=i)ZK7++p|OmAI|7i=P4y`)zbcf|9I+RpTK?=sykdp;XK z&pbQh`B1ZKT3cy8J{ey~9(pe@wYey&X6MDAz2y2`~57dm$hUmP&RA;2n z;%+H5AD>6h$1rcVMl5bm&Qaoni+jz`^DMSqhhn^ZN+!tqd6Yb7vv?yCr|6;0h}FAl z=MC`@zVD1rgm~<1h`JZzvo>xUZn?m9+VnJQ{W5ro`zQ6pd7`7_=ZolY%rkJ7M+u#vLiXH)F~{7wedlz&YUNKk#N-vfXS(Cd{_};@yiUJvuFt* zta~w@<1!!0;B=b$IDuu0Ax_m|HtM2H0wUs*KBekoPd0jJ%C`jMGV-LU$(rUqZb_w+ zWQt{r#$%Asp9D$}QJUyw#r%ZSlfQt>Exf6D|wc1-Lf;|c%RD^h3+ya(wp(Q_#)8~*352l7HtG8J~#}b zpJV+Kd=i?31+rTS#@K|nlk+xPlpJwYnoy<Dd>LRd$jxmemt?=OH$_qmyjRSeB3aXz~Q z=xNv-G*p>Xh-$?S%YB1GL!!}V$r>>i4tN>NDd-SGE9fu6@`5l=`R?aqhxT)d6({Ishfl` z?uoW+39@UORT)7wvAZ@iGg1kcXS&7A`w*jKkE)tAl~z-fF3#CFvT0rg@qX-=&XiE` zJxHPXyprAS0c{;YP zNLyZc8IRYsRt_3)#7^lT0=h)_6*;5P+XJ;yxWQTN7zoQPPtR*&oDQ#ekP-!+SbH~% zO1{o(j)U>>_-Oo9w0lx29=EN+SJ*Bbi1%?rkd!^pJdL(><}!6jZ*K8NxyyX;FDWc? zwlq)JWH&R->A*XnkGIYuVbhd)3~mYNh1U!86spq7vnAab4y)g*$U>5=w)<=kTjC?A znznyDPZ{n4?mrzr&r3Edb$5qs^=c=bp6;4Utp}Au6QWKM#2$~7_~oh37y~?=1!z-s zO`FT-`AX*w5T3=mPsfMjV?nx0bNiaK{bqUaX?;M_4y3u6bO+XsIe^MHbY6NQ&%z#c zGvPsPMC1l_m1<0IL&AmtR|*-lmnA>8@nBgJIA3V1AS|VHtJA&sa8hXN*0cVCxt8Wj z<2)Y1Hp{{IC`delVuxYFqrmi!*v>wK-wtVoecW;o<;yV}btuGeAPb%kGw^`j2GRTD zFLCp60RFfDE=yg2tQL4YD3O}8-;3KWn=I-|@BNUA2a`2dyKuUC28slZ_v9pRo)Dg! z_10ES>M~X2p@#DW`l;ZibPiFl6pdKg9Bt*JS~J0w^-gJ^&=z&?o(+I?sj9hp-OzK#!(}T9~(x< zVYN0EFxzh)X;GIG{MPX%7ziUM_9Wh`vG=UB_OT$nU3T;XhMEKR@WdBf1<#L>dyFH${g zfreESRKkaogp*~k#k?0ymZpe(7WGwdr32lIrF>%`I>m~1q9dkw>Cv2?`a-rOAgJy$ z)R;xxi6aLVKEJq!7@t}p!w#~Hc+QvKgH2O0XbhX!+cKN5>5$`$2nCaB#c^rDC19@G zwUN8)$~cEzVhgf~qD(v+@R2Tr_Dv#y8QK79CvRPyD|BaRt%%)~X~ngbjIo?b$w$Wr zI>3W$z@kyuX|3R@+RInX$kIT$l_^=qa45>WzE zvh;lPRjlw#(l%M`P2l@t}^WPfnvujlxkNNnlO`=9&TJO-f-3px=`K zFL%Jlx{G^QPMZ*G=9#6#zHhJnnqN8Ys)coTEYFIeRV(^2Uo`5&4ZFjY^%9&6(Zezt3U~YB)rqV)`yjNcncTh33rL1Fut5)`1%*MLB~FP3!sby7Tf$TS_Yrx)pG)Y_QakJWY^^@Gz5OEB{PNJ z%8Xp1gnf+p=5?adq%*?IB|AjpEa$$IiCpDC*R96?DGX|Ry?w6b316%v%BNUk&XHa^ zu(Xq&c%i)|eoE}61ZzBgRd@+D{`ccAl|sc&}tr{9BF@i*Yi z;s(op(VB3CsywKjMX=eiP4Sb${~UPL?+9dvxzV$x|GE_jxE)thP^*~g_X;{LaMYcY zL9oI6X*<@q7gT;}xmq8nf^S)5$hFfZ(@E{*X``2A>obM#TYa^-a?(7h_CRN~bBz&C zPK&_4|0RUqo?uJ^If?RIKU`;%`oRQOlzp+FQer>2-krp;PErXA^-Dp5b>a2QlL%$~UR)@`o zjh`p3)|P}@1<3_GqMaXPv$)seh6zM9Mp{kHB4xb`W1U~%ME1K&NC$<%#1&iqbUXA? z^c2KjiH~wXM9mM0=fPO#M#sX&!XIUvh^rem zt2We_mnJAiZcB!{U9))%)^xesw#bpU+1!>sh|E40?+FsAA6I*#(~ zcxYB4bd>nGor&rE>liJGJw3ue&b(yy6(`-tRPG?{tMQ?b+3hbxp5d)S@o^^F#~M5d zjIJ8$&(e%@&Z;#bu4L&{LmL~>m1^{Yn7rm$I}NZ*luwtOa0CCRK#WSXagAZ9-tTq4 z3ON=2Tz?j(L>4=srlP;(xKvL(9i_~_bdzx>tq>*E*iQ_u{j&SLDj#g~U0>vv@t8R% z-MP3FQ~M^y70V|yW8M?P;2cQOu^xLQ*424NvX;Dd7G__@!8-C;LY2D&8!aMXNgdgzih)#>T~SG g#!gx+8|O&Vv&o;hk^8^!U-;CcvF^yq{yy&i0ZOO6Y5)KL literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo b/securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..8f3e867134cca7985aa979634820da8c2b83bad9 GIT binary patch literal 13451 zcmeI2Ym6jUb;qw?cs(`{8ypM)=gxxhE}ow8E+#C!54(4!XFV{lou2XT;y6o9cg=LM z-Bq2c>YZ)IOB_Wa%0og9kSGu-LPAz75%`o3Bq1N1d`Lo&2$Aw3iLA&$fxILnqDYQJ zl;1hGs=IooXR|MpNO5VZ|6R9loqO(i*Qt5=zS}=%I0DXhayD)=Mh3q820rAtOaII* z;2XKT8+;IaJNOge5%9;rRq$TW2mkXHW46GTxQ_2O=J2h?eBd5q9_PCGCS%?W{toyy z@Gn4F>O0^*@L#~Ufd8K1zBj`Y*Y5;x2Y()vd7lE`1%4X5AN*ZV`1)h;9pEbIQTdS z%for)_)|!qoC0J2)F>&Kw0mL z;5_&@Uw4?Y9F49a@P-j1z;^Pup57KF6% zz(>JL;5PUoDEfN{rHCDz0uO*2;1TfCpve7CK}ee)fMWOe@bMn-0Qi&O0{9Tv25$vF z1O62F>)4FKA@Y0&_%R4Q3jQoWagj#^a;y0QDEs^xD0+Gc6n?)6A~N%j;3vTU0!42YyCD##S` z4bXz$2gQ!=eXoB5ip9L4e&w`?te*k^( z(1bCw;BSC;fiHt1@9%-a#}7c+=dC3t&-+1<|AQbVX38L}n>7#?%qKxv|HTZy4hr4B z1fK!_7L@&bXwsOU20sZd$vC(SK7x=Jz-K{`-=BjLFT@!Zff-Ql`wS@Ya^ z(?wAD{}d>Cc^)i-UjaV{{u77@&CeZncJLy|pZOLa!q;u@cXEFc6un#qF=g{xAS{|c z0#UK~H;}EE`%%*E;52v=d=k6`ltb(Yv($ab^@li{oI+QQH*<gh- z!zp|Cpj>d=%XwbExsNA+pDA3QQTP{%o^uMImOQ85P8=)5wY698^L{?`5}6jBjA)+BZtHcRHZf`*K&w|&T-zsxxtwq z$M{moE{^7dASR}^D|R9=1lKVh=Y5=Vh#wv26g!>gta9$>lzbq^TR7jN--bW#<`VbP zLwrc=`v|Ayl;bJRyYw3$c4q0!;`~x&X7Fup@su@oBaYfO@#BkrY}3g4p|{@hZR~ei zfu9%|sz>ckl=wD^nHM&!r@!{hLkHy2j}Im?o|cOPTXB^7Wpk`~_{4%2dYeJGX*+Qc zrcpPwagba{j!p5~vGo(DS6HCoC)R`XmcMSjMkDr<#An7j6Jk4cV$oObdL7>ep-zlC zemFc^*{ge@?Gvm=Vd@2;-;kShalSU9dbbU?iQNj)rf`#b7lgaSuXp1h?J?7@d)+jM z!er9UZP;GawO;JoZkTj|X0#K?)_cLKTE#E^*x@tX@+hX?84#FTwV=s;3 zNw=B&^Te{q1F1Knw6NDo2n$}E+Gqnw=WKUmv9{N9K2}~%NgJ7aiiO6=@JR#F^7C}cB?7kj$)OR z2u`Hk>8`heq^ZI~@FM73#mS_qz81B8yAia|?pDxh*)U4&x^MkUohVNIhMGWOj+&w_ znjpM7vi2^r0dDH~aw9x6qOGtMc@4iY;S6R3*&#WvV$!;t3Ii3#$c;@72ss8PY`qoK zFWCLlSWOUi{mK2hg*CD8Bo*TnX{zbM3IfmfA^X=o<`%u+wYCuEz0uH zX25ns+xAnh;iVq@cxmnn#48L{t-dE7J84mVM*>mqj@bf5Uv-uq`wg#-+A~e&3Ldg} z#NW1PB9mc>-G@+y^<2VOeFZCb`V@<46UT7e#06R9HM4AW2d|Yx;txc>G>&?HgZnWn zF$@hg>Iz~yvPl`;^1}3SQ`zzY<<$@Caj&Bmb;0kM>B{1Cb>2)bEw0Wju2s!+7Pqr_ zEe64uGHustC-X4CShv+sH^Xj-5Mt*wiH8169CfnXFo+XPA2-qHHZ~{m3wfw3t~!el znMfc~kBL#lCNX%@%q%Td`N(q6jE@WWR;1mteUD9llkIN zT5KrSXsJpB)cA<*;(!>1k|a!J3c)0hg-p?35~3ig#JKzx34+wfR}G>;3N6h69WO~b z%~%o$p+(iBlugwIFXh~QU5&jksmDPl&41kR@TEq6MU<~2Nn&|6!pdd4ec8xvasZMg?REr1`-?ty{LV#>F zZkAW(7FW%3U#}+5vzZ5~2f6gFg_q}ilEgTfPbE`fWuEQAuk4e!)hFltYbz>k5V+Ly z8h-!A!0j*!DcUwvx>*j?T}lBENtM9w4V!fQdax1HJxTpydpq3!%ph+;pSsYaY}pi( zaWuL~f9iYdguEPyRbwPp*>rvt)3 z=6nTw)WvZ9!d%A#Na zq~U-|0f%yTC=PCCE^=Oj_vL&_Vrp}z7VX@k!=<%V{UVPdGPbm~GF`Qm z>FK34oTs*Sa$yb_8~XVk|Z#7x$3VRdp+Sa1&=eQ9SN+83$hl+3GT zZb5h&7^R*@6Plu2wOq(Wh5ND`SbVb4XXimQ(Ik%v1X3$gw-Un#3sW;_Z6{R%ewN2B z;zyocCfHX8DMQe$m1GY+gk)DhsKd&R<@vl$6^nNS=wYNK^|$S)jJ0_(%nHp&atuZv z`aIkYs~_qN%(^Ty%`VJZjk0NWc7BeEZY@hq=Ba>NiKzr%i3{0dpE)BBj^YHu7#qz4 zwS?ck6C#EzS(nWjHCK^GD}X(=o>eB>y4Uk*blweIp0L|lmtuG@mtJ9X;O3dmifrUr z;Bj-VTAQ#l)%ogb)mAB@SE_bLL@Lf0QBIwM?Y2|^iHi}!e#ej5Y#Sl4O?k+OsD_ys zBdtv@3_js%tx;Aam6Qmtt#-iUO?D%_5s5dFfRQPVklAOJ!!i>kp%;o+S`c~FC}n{N z)2K-E0IlLR@>?cAvu6mGNotu!HPFjRWa=>6UWe{cT{m`KjQ+A%y4S*S$zyRh3`v`Y zaQ(`2pVemoU0b74uDskJb{21zTPPr+j}yg9bB)qd#4bcpw$*S`ni2NE*^2EXezy^| zB5E4{pgl0i6bHvvd}%$D7Lv`NQ99Y(OiHU!*^VtQl~zb*LaH=Fxmvd8s+E<}!cu9b zVxL?pFU&piQ66B%q!uh`4bYN~PT9_`&ClD#%0ks1t1eXL=AWp{%&bsdpI~aZ+2!G{ zwCa29EAe-%nWmkjJT*o03#$HPqWP}Dv)3dhGDS?1-6m6m@xs>xluwV3k6*b<$ppQ3T>MQQ#z%B3Wy;gzJ6o1J z2VL7zM&{h$m8|? zYsdBH_1RBLDan?v_g_c$Uw7Nk)s6K1kv?0YXzEuZ*_#Pzh`FZZ9{pRlnxj_9>iR3R za+$7k_vq;Audb`hw7jn?cZ_K5O0JY2cJ+6MJ@7}->>bD)UZwG?;99@J{rJq4+P|4h zvN^S(CUEgLZN1XZAHT}pa$iup=I46L zd(7F)!900Ba*GYditXmi5JY6N7|IPdo`sO3DddJb(AlPSp<#>6A7yqmqH|*7dpD%r zYQr69?Mmx%!{eDgirs0))Lt!WC9Z91v8F+XE8j}?RGD>FTrW_wkn1EC8rJ=t@Fly8 zCyZtTW&NHJdaZidy2j9&H>0`js5)!65sF#ra(RRNb6Z)yPvZEKS zdRvx34a)jbNyellF7rop#RsbHceh=Qd(H0xb_l3X?k0)*HE5pa(o{1U)kx1Bq43*Y z%@}AwCTpta-)O4~Z5ef)b(QvTFH3LJ2D`E`Xp-1LlRe{O_ix0SOo26CdeN=hv*Ygg z(8zl-1vwe^RnN!wl?gRY{*FZbn}lH0DM+pkOKG!Qgh^TJa= z_EzGmTmM5F;bK)9!~F3-RyX`6z|rpSS1w=EcLUjaPQp9h6DSvjcLj2tzb;T=j(%m( z*VeVZIuKs^N^*?-FTPCZOQz3N@!i45w+ka@jwrAD+q~M>4Z=$_t zLiBIi>t%$}%wI?dkGtPV=&FVH5{`?#^C49FFDP`^BVSVFo4KlY6>jU>mvbRr-+K!Y H2F(9AND6PG literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/eo/LC_MESSAGES/messages.mo b/securedrop_client/locale/eo/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..cde80e5a1ae4de44fed0289998df0b7a5931fb58 GIT binary patch literal 479 zcmYjN%TB{E5Cp*~N6s9K!~q1GP{g6QEh3N(Mq0gLVxgD918S2i$ysPh z)IwUtjwYB?8UwA$V`q$|(iS3<r6arz9v**wsLo|fIXZJ%M z^-f-fgV5;t^OnY5Q9~#bmF6-k%Sl|B)$?K!SAo_5>EQ>=ib|U?>Xmx z{-?k6?(a!_KQnWmp{*lk6Ia~EBycQ?FWPaBF*$ewr{Tvq2fxNycn$w{8RN}1W+Bgd za*b)=`f{%^W%v}{g0JEfd>^^he2Dq#>XX!g`40Q|;VNcgC%x&$ZoC!4SbzyE!hNV0 zzJu!MJzRwsPy?)(o*HlfZ{oZoecp$aoX2pkrh0$_K4y%sLOg>({0XbEYKAc-*oBPP zL@^JyBV#o$q6YK^DrqN?B$(4U56|E-{1bbzmWKoQ0{WHea~wQ@MGTXB%uZAW4xl=G z4I9xxrS^C1#6>enH|{`XY7eU8mrcr$*47M{ma{0kH6u!LUZJk$%9V=FeH zM!pAEctzlURipPy=#PQA+I!R1t2(a@>Zu;SsFBPtlFP;u5@uuT!j*td}zNSuy#i zUd-9zR8jnhdN79t@8QW>+>N`~8ZBHe;_d4AQB+OrLQUW>YL^^C4d?_iR`V^6;1yJD zthZA4^`izHOK?D+<|WjFqo@~7pk{m?LwFq*V2HGkMe{V0ZDXT~_idbyAD|}iGb+`& zrK#Ohg58`iL%nA&s=vf34#Exi!!_)C7X)#r4>SQS{+C?9u)&e&M7xChyxW(!hhW*aWWgQ(1%MascsuwM1_Z^}5(4Qq4(pGON%Az3v) zAd@qhESx&3MmMg(2JA)`DhuksPw4t8;>M=I+(~GXnS_=lkPqvr6q@WAbmc` z91iXw?kDb^yol|@G(tN_wX%}9vE_0?wv&w{CM#Yi`j1hYt@WR5O&qKyG6*U&*;HsM zO0BoHQwL!YS}yH>HI_fQW7s&!<*UIJ1gnzV30kVDgqKhYrAU6a-8h@p^bab&MFe$d z_=`?9Rl3?jLN%ba-1*P5H`DeN=Q~He8Lq}qThIhTYui?bd;t@P3`T|{mTz#-Y91Jj z#I5j9pVbS5=USW7_trRNd6(UG zS^gn!fAmSKJsgj3>5qk-@%(<5Ggz?E?X(q*xw976)YsHId9(Vm?9;Vg$F}CXidF{w zD?=s_?DYFOT6`U*DH@A~W7e>Jtaf&Z2@Vcy9vI@>KN1-l4qJT@t64`8yP$N!xn5f7 zvd`4!*#7dKytb&-AKuE4hT`GJBJmpMmGZ|k?DDE{Pir(j%scJ6iUQ|S)t4?OtGX(~ JIa1?y{SU)T4Y2?K delta 2819 zcmbu=X>3$g6u|L2U7)osr3)>!6mAzOOQ}+7p(1oIEp)+BT9#__+Igh|(|PT@8A?-e zqA?N(AJoCbpfMpXpad5NqiB>!l`lw$2^x)w2Dca!qlpO+HNpRRGu0CP=1uSWz5U*M z&Uw?PcmC8L`YJQwDMjn2FQ8|~D;2`jS!`%YNlGPSGNxe`F2q92$6EZ|rBokQ#3|K# zTlD@zsY=yw{RkH070ksOD6gK&%XlQDa@on^gpOH>ZjM_}Zajqvcm{buokf|zdAuF3 z;(YuQ<^Fkdq603#O&r&v+f^VUOI)$5NV=+qPmZMCd5+zbK7?O}Qvy+W|sBsL7@JW<` z-$Z%QN7#;+a1G}3P#bn*9UjAa{5E#Hn3v1MhEXDQ0$1Y|ti{wE;x8{~C%*UNQIr91 zUbIdnh&X zBg%r}nZ0~fsUdcFR^_0qumXeFijt#qD8+LD<$;e;X8u{sYv?>*6n$|8N+i}|C%SP3 zoPUH7wD1iKbg@cIALQe{v31l;%FouMj7xrCSnTlmq=w`BQA+K zf?GL0jWVGm!XOJML0MpB%m$RmcA?at+Rl!IWE6>}dJOqfC)mhJK0$u8)DP&!->?q1 zEhYDO6#MZS_F@kS--55=28^Th*W*U)z=JVA#~#L4rNsRZK7_nOB@GkA#XsR|^Rss}?d;C^=E@Hp1sE9gQQ zTqe>?ucvp?XEv#5`C9tu39$>wDDRw2mrr^-eIxxI`Z~Ha0^_8xRq}r?2U1uM(4}pr zCpml3jRqpF_!6BawLprU9LkAm+0djG);N37Ur*Vk$eqtu>OyLwg)U9fEGg`e{MWKG z-MZPCLzl`;r?=5(wiFJCrqc+L^W!52tDG~@bi{U@{}obK@pP#JX-*nZ>V{wYX#OQ9 zYw7Zt_0vhC^AARHR7sZ{@=-XyeC;Tyl7dX5OOs-oZe7zmcpqH~auZ$ZhI&&K^b&e5 zT~eKPHyi5CY3n1WWlr7T(+&Cf6&y%;Gh-s1-KMGlJ-WnFW~W;`qpdVhB?>cRCDE80k7%SjOy{~z_6*C_KjNpfbMD69$WiO!#xo>n!P73q{pqG*R8#tJ*Ey= z+AS+H^`x_~{(#jVJ+Z$`Px{SKugA1+JvqJX8E5s7-x_hoymg6s$nxvS=(+thYCEyf zRwOC+Y}~BM@|7#gD-5K)P`Ly@Q#G+w020ik$X$PiWCe+*&S-P|=K6L&ZgPVqb>Xc#Y0a+Fi`ahwM ZhT=csqDKwCF(dljL2daXJIdC({sMU+wz2>K diff --git a/securedrop_client/locale/fi/LC_MESSAGES/messages.mo b/securedrop_client/locale/fi/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..9556a85779f172fd4723182a76dab795b169c116 GIT binary patch literal 13037 zcmbuFTZ|l8dB@Mf!Y;$Y269&v!h+ID+-E}rSJ*Bij8>8^3t zbaz$LRXwvEXO%@*M9M{o1oDvN1<68$5Tra1L=^In$peZKDHkOVkpj^Qg@^Ehk`O5o zN`C)ys=90JA=-tK&-}ZqPM!0e@B4q3bJ|~j^ZlPTToLVUw9c!I(Ty*>mOr{)=l+@d zz&G&q_24_ew}L+fo&tXaY=LhAL-4=vGiD$BbH0yWZ_JagGUfvh8FP;B-8UNZF7R{U zBj8_wn(CY2gW$h`KMMXwjt@SJOniSEct7}2Q2jm*z8(Ao_~YOof|Bb1{7LX7kSWdg zz_);N2&sAA1#15HfXm=2sP}#coCCiCY8`(8YQ6uMfB$Cw{k!0sxqm;M9tR%*9|g~W zh-?DzC%_?C2Y&@r|Gx&`3;qiz`5xk?*7-QdkmhMn@-{)qdmVfYI07Zt^Wb~HkAbJa zFM>C~Z-GnTMFv|0e;xb?_&1=&J^y3IpaQcAN`Gxo^LD{!z+VDom#>1G;P*g{e+8vJ z0RAc{eg7sXIer(^IzJ0apI-v`Xa1BwylVaqwBWbEW8i}*L-W5k$EQJ!y9};?o1o_V z4A=z!39NySLyq%c1WLXyfYRT$!Jh@+f|8yA*FnAaN$^A9*Fnv9`mJykY=V;iS&*Sk z0KN}=9=rwqJ}CP=hEc?Wi{No^2RsFS0+imr1~RnycTl{4h(GTJkAv?7SHQ=>0r)EL zx4@qPe;fSFeb^tAz7j|)J??>;=cAz3^LbGEdkK_2{|j7Wpf@1YAMyP|)|fxx`@;w; zef%XPMszcW5U9kw8R zAMgXGL^IVq?ejI!i z&;J0Fd|w3b19eG%l5JgIxPFe-rD=X$57VSW*-JWEqpi^1NYizVrd%i9>UtCHhWq6I zJOg~V^!+-Y#SO^;t=y%x7uOX&$ma43UDD%Cns{7XsME#YZLpQ!RD2LeiVLc_TqnL? zrpZoi+5@zQXu8CCU6{>m(4-?>zd#dDFVS@2Hs%8DwKUleb-R23m@V3KH2JqK*-4yv ziuOU;8))KWafzq8BAQ}=u6NPiPg~HJ{E~k*Xs@A(6UB9!54HTu)5T2?%D9+~Y0b~m zpt=cYZ>H%AX=iAQv?i@iJ4QQ4(!&kfwbUB~&mN)rbyP1jZ0>)a>)*rl~= ztIf6A((F@X^`bR)XOs+V8jkkDk_-8~dXq3m44k?vrO%f;hMt#W(G66vbIG&g>{kd+F&DJUhL8_R0nm zbi&jI480$2+o01Kg=renW19{md*bYB=%kwrLmS1eV=@fm!@Zq&?I5<(0ozHO1yLM! z^pcyLkDa7F9w2RM_oJ*UX|kXv>C&)09!1%No?$x}XHgQTRomFHlVogzQE10;ItIGQ zzLYZ1szRG}qtvZu-VXa=fR@~>?M$zYSj!-aqcj@@Su(2n#T0+fu1gP)|x3_`mT^|9`L)bHCk$?SG$!{>*|C<{A|0;N8Vif+;r<+aguu*U*;X%gy1WauRO zaX$$A3}^-E>YFn0SQVSmbOVFW|gw_oH^t9$SPpQ9KT-$J`RO#PBo| zIi*cUT|`0Q#X7Wpx5k3eD?xuBWzOi^k{+c!#&JgKhwx9lay0e|a{LSXlPTv)&#-HN z8oJm-&NzlOTK>d_gYB?`GN6W=(@`Xa!2#kXo`c03GFcpEl4Cl@E8w*=t7o7-@~ZcnVYdU}}WC2liiH)6T59fVoX39;!Gho?Ego@FB*d{(;33xehC=K4xS@FEkA6Yp~qg zQ;Zo9$8g-#2U#a;&TQunK|f984@AFgluW`7??WpQ!-X2>3Zjk{sk{3@oSieZ{UCC( zhH-l|89GMw!iia|tuEG^W^rw`)mYuCo5ehC=kZ#E;GPrOZf%|~!T|Ti{f=`pcteB` z&o>nf!=+I&%yYvmPIN=u#6`EchT<3caIV<$jF3(gh@8iaFvLw_aMdiWt=9RI=b)t! z7YMDi<$0jqE4j8z{&dp^fm*wrjN{DTotdbt-Pv$ zR(;7{Xf*3~ZPjkpH?Gz^HojY`g9oO9<+MDit75(V?L zltH0USSi9aYw@Ej*vF2`(c)kbK9RbCeF-u3x!hWFPNAi&Vj3~4DjQ4A;I-Wh5NIRZ zp#bSF;OXeX9KMGhSIPc4RjYjQrbUHm7~0)21CXsAHR~IV)s|VG+SL?!Hupg1K|Z~^ z!YlATNn)%PUCC6iEU;tb)jEk=)8V{-?I)ET0+;i=PB?ur@+(YYinbl6-8=`nRjL3; zR3-4dW7A>Sj&`DUpwut!-R1t*W_gS8sS5+jmYbrCA9EqEXVM|HSDH=w;hAGQp#A)CM8bj1{l0cr^*?pBUA~~o+BF7ea!WRo#S+E`T zRpn`=w>*nq&|>L`73hAG9rJbw2 zH^2|5tc`G>Lc!6Dbkh!8rFTS8=Q9^Yv9hA5<8)DC0I9i6B!g)iVK$0FXMmH1JCtwU z%3b7!3*IjjT~f2zxVUN?s~*?3TJD3kBD%M>wXs;YwZ+A?Eu3d_>-u$RAc~{}>jNJ|U!zyp}RSg7rtx+WA&{D}}^B8G?F61KR%yh^WAT*n*_)C7g z8QoNwZSwTwDwtHxloz>ZScBnOkV%y5hdT_N#1yne7~`SxS0{7{T#3J>9N&pL@#C2* z6{i8P?eeW6(ZolZyArE=u@o2flj#t14Z<^f9I`t?ZBzTHgg*I{oBQOGr);|$j0hhD zeE6@(>IS1kEJqc@Icmft_FDz#YcYGO5#>xiLJ_dO&#MT-Vzuqa?E8-r;)wbK*2c;i zyz8nIbcQp!?GI`uYxuBQtx5#H>6mIe_t2?Il~Z!BR^O8HTwqi^jU`-)^3`%F7nR=2 zb6|OA6+ z!i8poif$`UP3CIEtHe}-ui`?!?K9W3ag-BCFcw+_YK7ma6QYJZSudDtj;_*2KSDf~ zo>wNf+*)sB$qj$wg?W1`KczT)v(R4Y?##_|o0Y{VvcNfWy}mhbm+H-Wt8VKQ(HnJp zS41lJIHH`oj@ScL0I81=5`P$uSnL2LuuN?-5~^W3j?mW4AdY^~*IGxhNR^b7H*h>) zdy~J&*@)te5->W&5psU!IV`6r3B6Rras*LSjVcSIOyg8q1ZbyTqi4AS&G!xA>g1Sd zoCPMu5V<+btzgLMQQIx-hDiT{m>%?TT=Ljx9LJNB)dfMN~2S`O6)=v3v448HSOBtv%K)c+(xK_hRRBMGwM{%k8h@xRyu-EIgjmpYeWvON_tu3rH-uoQel{r;@6_@e*I=^9(t!C4%)>i8FbbY1P zXg*V0TH2tNK1T+3!eN`3npCI07CFzOT z{nEz@M-uqWiJj=gY=#AFH@DJQsn6DaviiO`Hg*|(D=iMm7Hk$ipPd-?DTAJN@ih&z zGh3|-l~c2R;=@ijs?=jb6ZTlJr?#VPZoNMykXJ51*^~-+=)R_Bo_w0~Ej>9C+egpX zlTXh*Te%p<1bwHNYkqn5sp`p7)hFkSZPr?~nqWyERyk)J2K~LT9}U7j+x9&)8{jAe zhu*=RNtPYl8ANH=OCy5=C7p!FK@Xlsb`RdO+vS)pvi*ZQ-B6tm?&J^MIDC%FhmU!; z=+KE|FBm`*W)qr7`%}zBAZZo;6qgn1V$@erF z7f_YYTh3mJwKA{{w|JRag&vb`7EU;sU>rN?vns|(h+W0;rOstJzRmTR4ps7$HL((5 zS(ev@XMs&<(=}-kX|#v^(MZDjC2ZdbPbc|thLxSdvM9_F1nsd%t=SpPPew1vx|{R@ z8%9p%7+zpTCv((=Q7O7&XqJQp-)JHzoJVlY$*?6J#1)(eh#iLVb> z`e;-vUmN0>8G2(Df!MPlcBf8oiG!ysNV>Zr6fCj6<<%(N1!*`4*d}y4iO7i?Pes{f zbQx8iE?egOm3w<`>S1|W)+3{F+&AW6+6|N?J+hB%De{&XHXd@&hi&lOl8}yHeS*Cd z=*X16uh1gj^R5i9op)dZ^e{ZQbEJPThK8BCiKpXifo{N8;5)^sD1MVgvl!BJ{LleE z^+TlNQOq~f3p_+kau3xRGtU`DQQxZo{j&vjt3^$_NsNaKv09+eOWjbiPT_Bu3F37* zL$I4;xa+_Az#-ys9*HO-5qgJ%gf~wqXg&()@4pqS+jaA%a!NK^6mqy?Fb(zS5Kk>k zQg};Y2_jF&MSuxs`(>-~6=z#!xSmf1IFX`;&n5x81L9>_Psj$5p%*vD-2^UDdR+?o zW4s{oA&`d(0{lB?*7zX?z3CVu=#!n$urh#IuWxK^wQA;at+iY;SAFW5E@s!q7jxZ7 zjWnDlRXj7aNu2IoE7JssU5N}b;@C%7Wi)m(0Y9%OB+fCbJ65frc}MYNRLR4!OFt8S zr(&YugIAxdk@wi@-NwawO=U9UB-)|*r<%_b^r)J-i42Zvc* zOpCShNwYBr;x3-#@m+S2i@T&5MUY5z-o>&$NGPAM{c$w$>E4~HRa{U~$cf`|D$|DA zuN1=SqbrYlI#i7kJ!7}x;sCo!)<2Gld*$y0_Jcc=o)oghI$QQ~&9c1B7UverVcJuT z(r2bFqVW_bDCT{+~(Jv3CyS&GSUG@>7TxwjKryWHy242r`J zIAaXlacq|jBEdRKxKXv&J?ngKDwD4mDR z;m|#G4CVTCH4{oxD3O<0M?c3Z*b()M#hyPpxL3*J?4}T;f@x3RBn@&tYFb-O_*yfY z2;qq`_3Of?or7y%k-(&Igi{IFqoj=pDjW#-4Cu(kZ_Q($5?z5= zE%Y!^qMyYNTRw)Xpv!40guR3g>JP%7E2(fTCJ@smUEQ5vL)J(d^q+_qL0^Vd9wpqd zc=&#B=anDB9v-JC&$8f^kJKWj5O`s0Ki>|>Rc7CjKaJ4bv{*;WMVcdSOTDGER-`Yw z7u$PRj7!%+NvU~I9^;{34%%&AEP~ z_?2tL>lYrW?j^?tKfoBv2X|5e0QKxN7bw&QqXg}gNLAt#+UWO^;h1RPg6V2Ps&Sd| zWbU{8?or&j`8vT<&wxR^ei{?_AaX)r~z%E{X}kxWmu5s?P|5?q#YeSJRQ8 z7>Ax-bpO<+<*9relPBfrmzh6I5hAY4nmlXSlOv zmYA8RbywVJ6F`OTVlt@e*C)_0AII0YF7?a;PnFoOD(c=CGtIuU&Zfq8%@sp418H$R ze&+~g>ALhn)03M%+H{BHKNnOzLv_61qhpcBP=-rLG08W#s7hV2pLN;3^Cjo(O0o0a zC#Y!TLr`6tZg^Ylr(+_Cyd=uYOpQ)-MK3Oc=1I^!W(O9Lm32@7*#PYy*r4SF$aF;- zeoh-T!T_%7eAAcZdYNMpgn3!~bGwR{k($l&!R_nBqvG_tLX@iUOFH-c8P=3#>{19P z@)EblRJ73kgugQl1ZJ7E(_=%MhaHvG^7?5-v@qMO_<}I7Kh!C>EJGY;8nMTytce%OL6$F$43^sMGSEPNl}^YO_U$)5C98$xk9IE*4)vzwm?xr zm6KCa@;NI)6n)nI4i*)`Ho{H~igErEA@^cx0nQEX3AN=!UXF#N3K#wkC3RP06`VYL z9$wrHjO*mH+C69D(`4s6`Mu#?$KqaoC~(xlxZA%t)~Xo97mIW8<$U}0|5ed>GA?bH I-1+$b0kNTQ!~g&Q literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/fr/LC_MESSAGES/messages.mo b/securedrop_client/locale/fr/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..4720bafe1e5a4782c942f59fe818ddce55ebb75f GIT binary patch literal 13671 zcmbuFe{3XYdB-OZNH7V7KnbLjz6ni}fW60sP!8wr631R&miSk^_9aJ4!+3XWPqI6^ znVGfExtfa9d#2jzoXumuNbm23vyUk`q_z-xaDnK*w7cs2MTQ1^Wp{7LX*;E#i!1tr%3coX;n$dtkN z!8d^u2&sAA25SDdgAag9pq~3QI01eh)H=QdYQ0}A&c9xqe-FHY>sNErZQzaI&EP#C zA_pP(Mz9ao!CwY-|ChmcfL{Y8-*sHnI&T9RGPoO*ybGY@JqNx5OhL(Y9(+6aOW+Cc z&%j5(Z-8^)83vmLKMFn${xhg??|VZKpn{+YN`Ea-^KOIpg1-pLE?)qf;P*j|{~$`e z2K*IJ`u|6!1! zgAjZtcpkg}?t`-5tr$f-I0N1eZh|MkkAc$rKY|P${5L4xU&o)H25$#{3S0zl1-szO zz)yfb3w{#({j0D)D7|$cEhY;tfSTvm!Jh&D24rc$^PuGX9{7h0bUi}-FXw;hg5aB+ ze->e-k54kW#`!8JIsTnL((7vwLUwv1$dtj&p#1t2xC6c)ls>)!ir>$H;_){@2fh|z zr03(H*7X5U^IR;>KMv~ozW}Gf&x7v+zYA(T_b`~o-3C!@umfs69|tAJAA`6+@Fh@u z`6?)TehWMfzKub|+jWp3gH7-e@Yg`;=i8vx|B5@jz3QOs*9K8p@L^DT{-fgjbKtd{ ze+3jTo&(1@rZq2fEONYt zL!XB@#6`)a&+9nEvGQ{-U!>FWBfXsAIL)E8=_AgSp9lFO-M_rJ@G!W=Av={H%wX|% z16(UEN*m1saY+9yj%zq%Ykd@h^ugT5Q|U;b4|2SL<9-f(WTSZwaaDeU zInA$tV4dUr95?BNkNDN(K;^;Db6n3MpD8~R#g`bAkLe?u$)4gs`H`QC^RM98EH8p5 zIcAD;ajpD_hvFvGF(1U$f{^0|4t*kyQyjA#3mo#ZTR7zZ`n;Y)oH_h?H5YI{``pgo zB@X$L-@>oiL5$aFoQu3p$pdwDb+oZP2xH8$N|Z{Wf-a)Trr0NcG?DW$7bMK0ftGh5H3>vy6ME!nKCT#u!!r5h)4mZxFf zOKW~H<=@jQ(g#{^_wveGXA(pR)77frfs(AsukRt)MVuDO*$Zq~Rt=yYs~jNzd}xj47GEp_)& z)07k^ZTANoojBVz<)L^fx-@ZCGt)PF-NcRDWVfms6FWkbHuP?dR~LlHk~O06Q}5nMUDpY0#3SC zCvH9FZkdHOaWaT%x7ZTa#qcZ_Ii*dbE~23DavfT~t+8bEV%XV5nIrnHNsrPVqdFl4)YLs!o2ha;uSs%Lr{wZj%>FDzLac#QF= zzw59>p~ERwpD;3_ml}rkGqBv-Q;g{n$8g-t2U(M~V79qK*vWeG2cln|_V%JS&qFH_ z!$OU@f~ccK>gsNol>pUi}r%qnWfqKLNL3$wANT!uLrY5+%Dp^ z2*EWI+O0S5E5iWS2A#IK8N4Avi04g3!)Pw;^^4pviWA!rZer1GqM`VOKFk%@JR_tN z1tRm96hmwggKNRu@=~2YMGl&aaDm84Tb>8Hd$G_~Q2g5TL13oU>J5_IUmcmKs^1r$ zd}j1>q2bU!W4T z*fy!LQk@8B@e$jlF)<1wDNGdxffDFKx7aTkQ4mu?uBbzTAT{#Uf@qvGmgRtcm}UL# zR0)L8V&<`tgSro1Cb|E*mWD~zO5=WB{1LMZ z++w}ioHvzD^%(i_YS%LL!-RK_|%0VWy_W* zY1!h?Um(wo#@mpo8-``-6-DL&ZiTVCY@VOU$}VknC>|}K8R`HipCH%O%ljc zIJ>VhQj&uzBywz-Cw#G>m4zE|M^&Cydcm{!q88KXsgBY&GfXA^6#;BT)taj~pIwju zh5J1?i1T1onKvABBfGZuqbN*++5lImtktNiLcwT8x@m=0=^atj`OHO8tgI;Nm@X;| zAT_s$WH4UdW?!@w(Y59E)!Dk6 znVnr;$9bCT_boPnQ7)P#G-HJwyzug?cG1%3p~BmYy&ZM>HJ<9I8VHM8qfE?^qms=h zG14@*kc*Tvvp!pZC}^tUulR8@-cp$z6zRz-m`u)86uD?vgW+0`NtEkEn+)AcC}_(t z#*fNh?Z^_i691ZVd^>I@x8+tU4g+Az@~tA#o{uz#601E}i3_{E;SduI!ZUjuvO7X; zQ2VKbK7NnI_Ps6SwBqMX6AR;8dboYA&FsF|$c!)mQ25&WiOsO`c-hbmQ0DZEdwaY&ZB5zNgfKss+Fl*iQ%J(sTr)cQ|icJq8*%uJzuv)S9=PjyOyd%aAM>1)+Y(L6Gmz`lzX!ew2Abk?C zxg9q@qjO>2XPH@65v(^Uo95>i8dP-aMQRGp#ym<)CHN{X6x+VwA#EJx1QLvemVsK~ zcj$zup-9%#!9zw@>7x@P9!oDOlMA-iNAlhy{=&scccJJ~j9)CZSGhWJ^TK9TG0H4( zPjIf@oOE;bh5B0E)hVJ^>+VoQs@`!#Idu-PyQ%;(A0s4wKT26_7bUPvZ8CaP!`zsn zt*tPLpYXNTQ7lp=CFOOE2W)SO2kDI{-Y5a1Qyih-XOY7SijvSPMJz3dvT9UWAY}%o z(lS7sdISAdC@^@@5U!hynSohguN-e0!X6RnFN*152gfCkrGq3PZ3cwv z7oPkr+XL9#7L`ilm4rB4yg44BfapC+6rXCer_K_)P{p*HXJ60W<@QlpxMN~9QlDXJ zG24pUQ}+$FvZ=M+w3}F2o?0by>A9&nYSU?Vu0FFmwYWSrH{OpXSzNYrsx#YAp)8Lt##C=XpPyK6Z?@ z7DGg}%raSN8WMQTvCZ_@Xo6{|Jh9kVtdCZHy!Orswskr8 zPOZ@*n|670K0ns)Pz2p=(KUL?!24smVP;vxYO?V-4hQ_orw}6zNzIQzdCnU?f8k>ofCmuJ9uj0;HlaB zXI9U!uNpgD#II;Nw%OsT<%k#boyd7^*zu;a`vcpa} zr5gtai~FjL$I#z#uz%_4v4&*m4))nJ<+`k{K;mXtB^Q%XLuM?4oRRhh zJ2t2!VNnUP<5lu*cJ_+6E<+{ic^>T7Tr+k%J%&TA8C^F&35^Z)O5K)M76lCbFLX8O zFddyYZX@sJRzmQ&>{sb{vgol^9L?U99!2y>(=lDtywWIJXLjp!mh0v;qD89)i#mq1 zEMbVuROt$t*?c#&h&h!e=)u!=|37>pru#Ucz>AO?%}W)ia|gQ`*fCV zDo#xMD5mOGl_u*%^bd05fZu?L9Y)s6Z%11#+=_>MD~*k@`5i|GGEfd; z>P%FB(V46v@ArHwa$PS(;Yve64-E)I2GYFPWSv$l;FWagPcJ>Kak4?YlSY@GzVx@n z+A%q#<*urWqF>f7iw~!jmdj~NpIzu}#jTibi~6EF5hmfWN{@XOUiB!^MW@1O-hw_3 z*#x*xO5Ii+Ue?zOjH5kA4;12-@)!+>0=!N@)xDHRYq3BZ4QNfiHZiMG!cFlT(TAiD zZO@}fNTg81Mf-QT3GZVtfcLx6;NqFTMtsboaB$_$?cI=haDZY>8vUjDyzl*n`6ys6 zR7_TeYy2Vf(XS|V<@pxCG+UIIDK7JUgpq;p9QwiR01oy!Yq3YQFN%i6dlFM2ZLzYD zre+d(%@64iAMB&eN>n4u;EB?(T!Y#XDr34!H-oo<WK69;}u*wwhRd`YoHrQh>N=IZ1(A9jlT9E(b~!YwlQK%X;HTq#IrG&KNrxgG^<0rZ<=sa- zA)zTt8I8Jh=6qi(f+s)*8`W?KM zFAGs7YDa_fG@$6R;i;9WsO!8kHK-zrH0n#^st1@`ro>9_2nUy!EtSy9z8KoDov`I7Jbim$-`c1W~iWHn@ypB;&gYct@r6^amN%G1(Tr1<7+Bx>& zujiT)|HySO`!#ZhT1l6lF4JewtUF#vpzztcjdB3o080mBZOl6inu0IPc4{$HF7sb8qhb5H7F-KGeH9q2*Xp3v98wjuhFUZBvhEkr3qkeP>h*mj=F z>y1gaF)O| z^8gk4dKDMMZA3`lchP&6jCXH`DBYnypjfMZG9>oY%m@qqx$-p&EoHrE84HoxZ}Sdh zC`TUCut7j348bzjJX$*AN3MOv>_op ms?sn_S_k{(I~d!wjWsuredxEt-9bqvWgydgb$4KIX8sTHlRY8; literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.mo b/securedrop_client/locale/hr/LC_MESSAGES/messages.mo index c7dc0e7e44d8e5ef0caed87c7e750a68f6d51ccd..a4853983ab60a09d974ca750fdfc4328d27ea04e 100644 GIT binary patch delta 3616 zcmZwIZEO_B8Nl&58?Z69!5Fa3OBox8jR6~IXDDP1B$#&_v4Xhg7Z7C{h2< z-X1b2BR}_>-P_%ndFI*k%ZFzZGgp?*dqmMJVl^>RtdyL1aseOG7W#iGgcTev!mnT* zuEI84f&*BECjKv^)CqinV|S5K+l!RiQLa=w$77XBt;3&TjZ!n}&vaz0Ygmf!V>SLe zuyiq#;&?UA!|$M6cNW*+1GpT2fikf_;!1oQ8B=|ZwOGb1Wt?>=6KKYLjIW|}F`Xo3uVT=C^Nnb=c9`czk zWOxi`I_P|xj_l2I7{||12Dp>Fmf#OiQvNW?L>@(1=@Td^eH!^wzvF{j)!$I#yV!uG zq(dgKDR39cbN8(v|NH60IUxgHz+U_ZhOv?U>_fTlAv}Ut zPzKyxN5Nt*$^s4{k5&e5#gld9|1_PSb3*oT0~;f?(2Y$vif#A+O6p%ko~=GXss3_4 z)?*W{#r?PeCy}C89)2Bvgdc{e0hBF%mdcgddU1x%W;(B;RAn)v%K(kYoKy#{n2oz-Lf?NB)aaE6cc8wqh;H1X@vQrvurN85N_$ z8=(%N?8!K8!ADW5^d)3Y>P_5>MJ!kLFoKe?yHQeqACg4%7)mCdM@jYTsPP?~k0tDD z30B~GdH^_&&;mKf@RnQ&8J6 zj<@4k?8aBH3zw7LZ{iTne3j1Qbof)R@gc9({FeL$x8VVf&!VjSO_YH@3j6{!$Ca)5 zEow!F;{lZOmr=IlU$_m6*EysP`0F=tGQPl!6H15U&9A6 zgwmu~B|Cj`K>G$UMo95WTTDoO$lJ7!h!OjVNO6gz^xKt1{Y`DD-TAgCXe zAWDdGLYn+mNMk2dKOtF?b`K%7Bl|3km&dOKDLlzI3G}yA##e*H5FxLPG^vF+A*sHb zs34>;3#}~ZSSb4|O5!LsQzc zM@)BPTGPqwRC7+8aGi{~^YO!_MKf_{($u3?(oE|URx+t=C!>c=ZJtayZpIwh-8!~? z&zx&UU1w5f#w;G{WZi_R$BZe{zv+}IH=4E{aZcDt#~3k3HfzHk`O?R>>>hS?>z>`i z?ZSW)jK`BroyfW_6HcC*^Q8O?H|s>wN=)d6PRGtzcGhfZ$Q>waEAqm1)wzr1#i5Q^ zG@`m<2cx~QaF^;blV--$VODj!zd)JIelwjmj+^PixAFWk!ij{FwKLuyDpnW2ecuz_ zTNSlSP;~{1k*9c{Rs3?LpBFh&k$iW+HSBc4wNl>iE4Nkk^hV-39PQHkBk_2+I}-Ok zs(iL$r{2&cIkt^SbEEgn;#8TQ4Cc|2Tesxn&?0^PF_~QX(z4L{ZG|gTznO6@bIP)h z>(jwq$Nb5j@#?A@D`JEFoe>@G?2HXY2fRJi-!C6?PUt=(olcFpM(%~`u~06#{L|3F zgHAR%qE9(l@9#AkZ?q=qMQe>(gY4wDU$T=aEGCn?RC}=~)aDJXN^PH0Ipd~IIq9U~ zv?h%kN{TORBW0!Y-{f9erHf{w=7gz7j10v_$2KpYGxe~Qv9vWkWlo#6=~vf{S6S2A znR1THC5~(8acA~|wyktlr(82TE&FMG*^{mpl+@FZ;orV(n)R4=He)-5yREUpd<;F2 zv?gqe2R1~FbjFynsHSUc9xC#_tM6S9jt_(n^mq&Ee>~IeWSEialku%d!yY$P&-Acs z&0er{n&Q8{K#SD4*$Gp{f^S{p^7*VCEJf{g$qsiHZeWu68w@R#cKz%8UHK)DfyMHr zKlr3Sp7(M6Q!9HUf&L+L@w+M48aK(m_p65Hs;=-rY#_2PqI+~-tbcG{#CxORYL#(A z8S(~rKiyL2U0s(bkD8N4Fqf8GWc_=ga#`HgN`#fCY{*W>1hEp^~8cJ3G6;w?4h zH=pprjWsL!!Wj@j7Vf>H$2;11uF{z>W}mlo(wVmGiEQp_<2@m- zrG9Jf>5VUkDrTQEld?xiDH`w7O_4QeeN%#_4ShQQV|1q7yLXf8^>02}bMwXo*~vY% Hc~$8DJjtAP delta 2621 zcmYk-d2Ccg9Ki9}?LiAI^rWRw7_OFD=>Zj}9KF~=rI%33QJ~p&U)o2v`^p}zKy)!; zng}L_Cy8RB@`q?7h_GnIL=#Q>hZrHmMiWDbD4G}{@}Hmt{Qh=VWzu<{dFRahely#N z-b-EK>sg7%6{VXxhnkb1R2b8eIZ#qkluE@^Ovh}Ti}P_d*5Y3drFP*mr&8Od#-4vE zO{p60zlsZS67%pb%BM5<7_Wp?9*t}+=(ttr;d~>?gJ&=iFCZ_dizoy55)1GK=Hq>o z=X0mWI-G->IIl%{{wU_+Y2;D$1!l@ruf#9hz+!Ivf%7qMhEglAOl;3Nw^jXj%vWiuoYKHsQ1(8#`Cxyvod)Ix8Xi~1No*(r&ozY zAxcLJuohRKgn9(G;227%r}5AfT!<36Qj`Hyp+u?%!xEB48acQNHSWU&cnqcEk5E1| zfi3tAuEN>8)QlZihbOTfe~zCQ@o^bgKT4$D!<9IRwU{=O_{#@ci0^JZfzsh!oQ5e( zLq?v1l7d34z$%m!87R3O#U*$O58@S+0d6Ax66(V!i}frn!mn{2-pLOuwU|c6ETx>d z0#{%)-gYQ8ge+LKhqqX8g%7g}yKNaGzTK4}58r!(=9ZCmfzXqbr_$-599uhgkBXfns7Od9vV(OhE;eR9VmI0$jB@u zH8T50i{x2$%PwkS{D%CmV4~58?ZzF{r>HW3wNxq0GrFCdB>!tT*-qUuaztD(t)xq zWXnhjnyHVLX`GbBFG%F%$483fSBmU}e~XKTZ0!W9tPd%&Fn3bBsFLbV$-itP$%o{! zn@aSf|6o|i(R4^|WnorOTd0z%G-^6k%9a?>9P$&=ILlTkcG4G`&VZ)p@;kWkyaUJUzjYnSauQ5m zAD6Qe%F4>@8#D5wre>VW_61G9p#xUP-)m@hZ?6^d*^?QSc7Eo?^niBzJbKUw1l)aw zeLZt1(v@|~5!s%T=t%GxBle-(;-szhElnNv)!c0Ra;`7ZJk#S?+tAk9(bT%trF%lb zpykserq`=`4DB%k?jEn<(IGnZ>R`X2UC#_z{-Ew`(PlvV4Yy~1<$Fo!=}A%(d+GPJ$`fI zq^UMoL2KAj?S3P4z#Me@_8O{Q?ihpG;|^LuW5Cd+rt8pvK|uby>35I69P(-Nz_8_a zOQej&XB`dp)$$y>yr{(9TlCY^|6jDbil2-8TKt>C{;}j<=6b7t*gZZfeQBRHZ1&p~ zrSp;*fyceqHcCe$_e=LU>NbQ1dvt4T#Cm+x&^>0*)RxZ}wE9Av`*dKKKv@I2i7^}? zFiYLqXY$R!kl$b?ksV9_cG%4ST3Kfv8yV&Bd040 G9RC3HuWa+PxtmSGq*GI=DqLi56AvGm3pIm)wdL8;hXTue5GXIrJHz&75YCFfNSZlfw#db zxDhtPGB^y^K@(mJD0K>6qVKFxYEPb0cNQzvMt{0QscQH=xIw9u`V9@)>m67C{|PJL z2RRm$5)}PSa21?~^4{0rW_S*+hu?=1SO(q---hg|K8BUBh$v;BYA6A0hrR5t2588{ zr(h9$1C*YUi8&EcEtwOM{56S`Vg)FTMxC@@HBL8P-yug6eu$IDz7P?_QjKF4i4od2O z30Ygc4@LdOJZfM)ydCz#S{Q|hUU_gYd=g#=paCc+e+=b{ww_4QkO|L2S>WdoeW<@d zN$G#!5G$=Est@UpX{A1)f1GF~bH~|z4}1}_w)zW{6JLd*rPVAhnJ9-+^B{Z#?uAmi z)P-E*5)3l%E6ASeJt&zd+M2E9HYf|<4dwr%P_*De$y^E!!v)Axbp^`Co46wAQ#C-U zrrMxrWCRjmO4&3dvN^a7o`q7ImviI)fSUeCa1d^$F7kd9iU#JPe7IhL64>jIYN`*Q zsK10oW&Cz{6TAx+!Y)|n-+vli49r3sUVtH3Pr=(^41N_ZK~eo)6euMML0NDFN@nhZ zJ@9@g^M3@#;58`Mahx3`MQ~h25}pXEsA4P*Oh+ zCB=`!Lih|!z(pvcyR|WUD-Od^`p-dG=Nb&djwbR?aOz1KlJZON9{4^y2D=!Xh0j3= zWc}{!h7E8H{Z=TcJ_PTC<4^+lHYACv7-ed>7fJ?3AXQOMLtas@?IHiNz!e6hMrEJR zeo`BuFES`%a-m$Or=X_=4Eot13qe@da`RJdUr$3-DzV@rhZulu4`_rz)yNIyn=~^x&)UNN!Bfip$NyQfgne z;Xl!t|NTY|zG6k3240SfnfP6JC*FsP7UZMVhKp6;HGb>HhlrI+9V3Pyvq^$9aJX*$~ynugn=Rt%hS;;z~9oza54R5%_rb;PpGgg#~2wvNSJJ#K3A z^vSs6nv<cqih-quQOeSTvq=CQLnT%$okBIa4N@F+CYS6|>{Uq&eB3jo9S> zUAD1x+|f<@TgTf3!|~jHtZeFuq~j2V!vvjyfN6kdSm@*TM>0M?2 z3anYNT)L{fC{VL|`3*H>x{hVeN`z-}vrhOCKICn!s9QUDWT-Qw+dDf4j|>c_dn-N) zq#s*$TTyRO zf^~xe5;Kk!F)~Y5OZvMTkL9J3QNz&;W)>VhYdV=FLz^=*mX6p-*X6IwtFAAFkPMoR z9?!gLWtKE6=tO35=6*vbRxS}?A)UEMa*|O!ZCX*wo-~}O5sO(mKDE3<=3-`%r7va{ zQlHuFxu_&RUwg-3=Dc^c`tKz->d5 zNbR$MfaT@ar3ww5TQ~h+T}@#7?oVG!M%A!6Bj<@`(ysLxK`qudRJ3Q#cef989~shz zLOuOGeO>KC>EG8skmp_A(wu&C$1{PztaoPTy!Va9{;fttk~U=!%=KzXu@Y7+q0eM* g`a^Brhda-Efu_+aj{m7zD5oE$5wjd`wCNB314eLq2LJ#7 delta 2509 zcmYk-du$X{6u{v--BP;H+6VMO5jq7*AC#6Bl!rpQeL;bOZ7D6bP`2z!w=CPTkCsPp z#ZaOMfjEH}G%6?v(I`5JM3hQck;E8{H73TW2`EGjYWS~KBmU0pVz}8e-<|Hx%)RHH zJN;?vJDbBlrpF&sv@YU7VzN!CFeW8%pd}_MWk)+E<0PDpc{mlTa7}=^{O~MJ!*?+QzeE|pP0Ydg z2b4<3T+GG_ln1Rs89+0x!U2@)t{|7H>zF1}{WJClEk&sUzDU75T!?(7Hee?9U>$~W z4qinWz#U{JDk)VdK1$~x11ZOGxDrW!+$OK=`Gp)AqUC~NvU7GebV;BAxv_OK3;@{=gV`Z>MN*H|#9HG1CTWxbbrSJ})Jq~E4r9Px4C=IJ7z}n|xEg^*|ttN`KbL{k6W9KVk=3y1FM%KTQ z&PGC-Y?Wj}DqG(DvcC7X37n91tC3}EE6R!Nb!oX#tfOQygRl`&7t&-IA19<-|Ju#(MGHyq+qE_>pvw} z|DeRQ1so_$t1aa?&iE^_!yL5V)y&07r){><(o*AkN_Hly+P*=bx6kR)9bT_q@A0|= zhCTIy@k45%k)8H|@pD?Q*^z!*GutP}Yc`*I(0D4NU|ef;W5YV*tBgtJ7a2FSr8R5U ztZP`)TBmo1g26tYKIq|I-EQ6G2{^mGZkHbN1wCFp*yGmgcJ}xAgZlbL-4oFLZl`OP z`DWI?nvtKgJwYGr3wd3}dsBkO(VQ)2($t-CTDdVaZL^s?y*GeAOdSIJBa?)?K&c0?;7A!Fi7u+-s6h3R}MK5Z`N5x@t z<(%nSf-iEZH?-Y&zNEw)Dd~@Mt#GWab?A|O_05h(y~pS5?+^JsKA%3|_D9Z#{CdP3 z@c6e$XP8IGd?FWvPk2K?pU1Z~FgFmn diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.mo b/securedrop_client/locale/it/LC_MESSAGES/messages.mo index fb32c62fb1d62d1ff1abf9bd7b3505d8213d5211..ee29e7b307ea5183493015db697f90623fef6d44 100644 GIT binary patch literal 7025 zcmaKwTZ|-C8OM)`g3Wrv3!eRV>=llNO|9rh~U310v6<3q{dhVy+uhdy^-v{}__40?5`Y`wk_!00T_yzC{@bln5 zz>kCbu2kw1;0@pja2EU$7=qV=Pl0q*&x2QiFM^*0e+Bly-{tK``FI2G$H7m74}-Ga zW8mk&?}Gcl=fTf{FM~4g8=$QBCRhOf3yM8gV!YUW9VqVy^Y^>JYj|G<4}uSY`@wI3 z9|fNS9q=Vk`u!Wc1>DEvV)r~K`>ugv&m*AN^C&2;`zFXg^=2s{aX z8T>jZ{`dtbJh=$o1ilS^5xjy)Zw7Ayp`5xOyaTL*&%RHoZ-KJT0fHv{nFXc)GAQ#5 zKw1BLIsP2{D(|m?2f%#+e0&n5 zi+T=}`1~3aKKvOJo?gXZ;oTf4emDw3J9|l-=ecFvVQz`D>`g9NOD@q$xo+cTN_)w? zavkRu-!!;oPn!E4Zn=uwVwYUvXW@eQ<1TKoUpP9tmU$pu>~#l!7xQPN$j0~>IKwUc z8C{ZlAK zL%n8n&%{X-Zkt|7l_R6K!&Jv956OlXYyNG?Kxy4_gXDxNZ@FIL1$|8KM%%;03j=-D zY^zGSQE_Uj(rk39ja5fg@@?ei%g$&^{hkiOge|$<4VEyvZMv+s7=^>!EhW9;8y5$3 zH%#}etQ_e=HAqYpn8a?ZgKN5B5SXrAUG|zp+uH5BUQkkF&o3I^Bu0xy{!mYp$-JYzcoJOT}dZptm>ZNMU(anZ# zJFSyWOF5@jnyrp<+=zHbd#pk@#A<@!oEwHwl1-OAb|N>3yOB3cMjzK*Hr5-x#c8+8 z_SRDjup`*Wg1+#$5+mBW+*s6gr`;|uJ8iXOM@m$(1;wFoGIleULKVx=OZ$y>zDEz? zrxI7|UI^_Z&gPsKC)x{asC#bW>Yf)7w=mis$5~<*nPM+@AV!z$EDQSPLlTC-9hk$h zZQ4cb+*bv?4kIjIGwW2%W!08hk4(I=paa9scD3P^MmSE95-*G=?l>eiMn9S|!L~{E ztCd!@(NQaI91k}lXsL2`l7a-#)hUh=3up9j+{dys*$Rv6u51gH-5(77J&84lj(I;})no}T`6{CG(JcH*J7?%rHJPZST)!qoV z^px+~UO#{hs-0zBoURSLI7UK{8PO!C%#}4+4!Fa%o zbzNcLo;CRa6H4;Hr@(CKU5>*N(q}14p9<-tR@><4(o(J3aMWs^bLynWP!cT45+<`f zR;Qizj9zqVPRFqVyi5B|bC?Yz!Q+gMLbjoa5RpNqA}k9hONx$i2wR3CWkaM3*X07> zhkX&Y{M2!G9KFdzsly<%N?i~w8)d9LUX*;xQ(0X$r=^qB2ixj`h0zqFn&E;wqzCeJq+#IHW=dyAs5o!I;t6hY=w`K_r+?jcoMeb zm<3%;T;Fp8eP|*ShYKwu2Uf8j_q|^6-n1VVJK=&ZtTc-)v`hvT7hTE}ecCCviuGo3 zv8?ZFF4U{HJk)GB1<~xHRY%`NG#B*JYOSUl<+`KqcIxG7?Vj@DVvFAWe&0)jzI^h=PMpxbq)7^I zo&2K%_QSDZY%sH-K<)srwGnnlK7)3P~g_{g6sZkUi-y3-N{IYISqaOaj zya3JjYMnRwdY**C<^U%}RQjwXiLXbB)Ayum&1c%(7tifAwTx)9Q+8{u3vFeoE7he| z8N#(!YkE}Ywx!N3XVu_jN!&vSyK-J=lWkK%>)`!}7|M>r$s6SsM6$Mx8Z$!!!X9~P z+=awDzqp&5CP~}7nZ6fQG4a^vP zxdBxeA5t2RHxR07_M^=^9I2lkvn--%In~m>i-}^-Fdx{d;S%ft0O4UBM z(b$pLN`utbQhwCRda2pyII7w>Sw(HK`g)=rw$#3~H7~WrP;|liA>$M(?jPjmA-?6; zhKUvsyFDbjj+*29iSHD@ZcWcq%YLS~=&hwyHtSex2aJPp9(f~Ci@iX^*Ucia8KSNu z>PhxW0d57A06dVoem6vNh1cl+dKy^klW>PT+Vp1Rl;+i@?X<%o&nCr1&n*=esoXW< zojbuthBwUl^AgJeLc)5oPik_bZADH&j`9m5NU6Q3vSWcTUjSmjI9VhPZAwv&XH!hk zanF%^nTE`|J{cKGbv|X#|2tAPBhKUrElRpUTJ!sdJRtFTlEX`C^!zv(X}T2bxg3iI z(9cXsNiL9tpfx#TYNLYvJO#UFcQp!DFx_(opBDH%>+zp6E=8Z1kj5Dut?J1CQ|*RxgJ*kb>G De#6Hy delta 448 zcmXBPy-Pw-7{~GByJ==>f%e87Dl8)`sm6$2rk1QBh@i{$7AFoGdaWVC#ijXBTetnBZUCC`X94R)HbgQ1V?>f!8yH&4USPbiCZ$o=cS1Dc2 No#^sdNk_*QegO=lua@&GABAd3$PPKem)5Tqc1KY-vv6d6N6An_rA4}c|p z|9h*tdv<3-?3A|V-(7X<*16~W&*Prn@4V^e-}E>_&UbUxUg>$d@TFJtN5^aJKkp{+ zb$q=Q{AutV;Jd&h;7@?7;2XgJ{O_AQuLJ%$-;-NC@4i=f-Un{;ypw$2e!b`23I0C# zHt^e^UiAWa3;1u~o53ICc*`4*iSO?QZw5aOYTPe_KLvgY{7LW+LCJL$d?)xk$Sb`U z!MB5B2&wnn3F`gt1!utpP|rOLj)7kRwT@j->;2pO`wRK^{{r8{^_v-V5BN6lcJL&K z$es_r6>NbO@G_|Je+9k|{4OZ@ZsVfXc@M~x-ceBU&ViEm9QZ0Q0VUUC;CsPOfJeYD zgO7mU1E;|=Og07nD)@`wUxS+W)LT3c6?iM4^j8J--fi#!@MECt@-=V;d=b?A52Do9 zfS&}V?@xo0;|i#CegTv|{{-Zp_bh*S)O!vz;P=2gz*|s;-v7QFkAj+a7MurHK)vtx zz&Y?Az%qCb-mM5Byc67JqNCt<`TjY>Gkm{@|9~3zO9(4FTmt0}zXr;Ve+)_=e*q%0 z_phLM^eTi!MDML2uI=3qegHfHo&dA_{xcwy^!^6adtU%infJe-{ON7?IRCl}6c0ZH zj)Svc349Ecp1%n4&-(^{WdDBwHSYn8GXWk2B~O^+Wl-<=Jcx^V-vG6a=fGRQAAqk0 zU(B!Hd@mf~``uswR>8C2UxH`Aw_x;N0Y3stkN*tneJ_HV?_H2l^1lbv_#@yn_yqV- zun%s6cd|Iy`;$5THuze;e-0E+znp*nIw<{r3zQ#y2NZw44~k#!WzkyySx|cXD0mxK z2hV|zfk(mTK&|WbDDyNp3oe462Is)%!4H844-%KbEpQcl8e9hd1H1s9!b!BguY+#@ zp9A&&=Rxt}KS50Dz45T;HNYdF0Y48yS?`< zRIZaAbi9%C5&Oygc>wtNk?+#4Y%DpTp*_T{;&_k`lKqwWg@?f{PU)#QP^*o<8=&;9 zL-v&q6$jL_xlTMf%L&!ID(7oBWosSs4IP-#+Dkgp@e7>d&4)R4$TqV7t2yO|n8Ern z;H`0<=aj$bfHF4r%U&Phd>yAaUL0fjhY*wx=uphSB;KUH-*CQcplOL1q4Q{1g^-odGOpySP)gtP08Te%{x={Uf-z)mxgUxVb{RM)e~(F>g<&Votr*!F!V=KaXu3ZpI4O2R0M+nGti zw4NS2$h~75Cmvkp1+^eGK2vvs4dd5pNsy)iBQ_Y2n1d%40xMm&6__xx1LIZ@?Hz5! ztNM`{OjwPh%nzfWribjy`B;mq?IzNurW0n{k|y)(k}eIZ?Ig^)j0~!NI}76|Et#23 z(~aB4PXg19(l)Ricchf2Ru!0RJ523*#!agc_-M(#wVLU%gtauoC`_}&&*G%y7E}B^ zu_S$<^;(>bthF2=f}dn2-bB-d*e$)R>37}qtS79oh;Xwj(ZgsnPMW?%=JTUr8p?zS znQaFq^6M-+=mz5^ZCAIApXQUg7njUZE;no3Y&RPA6)Dq0hhlN2vn_SUiPe-8CvCUd z8;vmCw#q~CQgmVBv}8@c5;p_088)zPCu}rK6lZ25Fu`N3ILU&VrNGD-OGW$A6y;UX zwf`s!;Gu4y2a%x`ccMn@*Mi!(Bg{V2?$Prql(w(4%D}`4dSj8piJXArrrHRrb#uoQ ztO=ubP`bk|VNDEAGm%r;wA4iu6ke=D>$htx7(MSdIw*5U-&N^R+G8GTq(%V$#4Af< zry$F}pwS(0ZsZPDsG$s~Vc%&flEPpgabw59;t8273Npzt zc*jfNwKc8Pf#e<6Y(F~H%TXM4n|RkyDW@$h()I?I;ey%d8fW!%FV9D~%`3MJOv4a52}EO+)4W17S<95;1A*2Zh6o{^uP7P@(@EUQbHgxBYzMfBjc#KzieKo%y5g#1gmj`nWIZOq z5L?9Hk~h7$P~lIWgQf#qATZLFKCHq;iW~IhT z6(XRGkJv5=iBT9yVJbHWlt336V(+9xK}-p`f(8kK)W}C0M8k}^Yz}DoY1-OOlt2hA z);xA*ui}E2mE3(?P5daWCSfZpZf^ScQmyz#l&_*mVtIarH&2=ik9%70iYYHloB7Jh zO8HD>#XD`E6f@k~95pb6zNF;I*o0m@!m8^r zQlpZy7-!wN7Lt5Pl|;cjEoD$B2_}kg&05?nljg1ia8d@i@vm{sUV zR`F&cRyArYIfK*ooR2`u!6pUB_9UK;F1)?h(BlHxKc{MmFV3{6Fbx8;(`Ev))$QKW z^31}jw=}S;SLE5;1FZ+S^ll3;-}xkou~ZBtQ^7Ldw2@cqByJ6+bNzl47V}dV`jjnOqKun! zGOuUS7PVKJbsNF)J2uIo6P+O3+Ri2;l_rflPF#5W*g=gsv3C-yftNLhsA(mEJh`*G zDkC8|s6ryg7J0%I3tE}K5jIriX{8q&iyzlw8nNmqeX@obiGO(jTT-=VMx4)HkN~;+ zJ=hL2Z&{hw-{VI1TKC6Mm?pIoyi8>+2Tc_UmS&`zs&6a3eTq7lxhRU26-6DZixCEp znyW-In6?~bNf=lI94_2p^x}owMIN!i`|)B(>aEP2SuisT4j0!}?FVf|bZv2Md8%T{ zQ&Wp;IM2%3sreaTn2V+e%~;`4yzu&~_M%On*A(8?*xNy)RpP0JssTT*HHyR>7%JIp z93xFKgj}SYnYP#h1m21&{t-W33Aa>cdwF`Y6-+8;%8OhytjTaK$Rx@&f=#B5BMRCg zjB!)>s}|S` zeH5^{-D`ek=fY{1Wu{n#x3)srbo%t%3>Dp4o|?ReLLMci5_}aG@@=2Du8pIdK!UN* zB2X**4xA7*yQ4;z{5laiAs2Wuk zNSU5hX%V2UdOh9C73keCglmvxre`hCEvCrL;a%`sbdRcbVULLPkBjMk1IHzgCG998 zZF+?3=b!iuy9coEwo$1tUO|X!i#Nj~6cF(aQG8;iHt`U#3sp>-rC7ZPb6}Vj?j2hW z)MuEOPq)I_#HsdHIqrj{uaA73pdo?R9BefX4qq@yn`vx*X1+39`Qg%` zF}8IXV<%Q=kxiN`cubE`1Rb@}H4U=kYpbUxjts|%4VytSQHcmlSYy&0*$A_-rAC`D zK5-htrqsVJ`!zlO{-eBBcaBHLj~_NC%^}0xyAB^Zar{1W_ucm6vE%pa;{jbhbnNgU z^RbWF>l$AXq{2TMk(&DL^%JTW*LwRAQLXWbi zeMpCgh+Omu+ReECY$NQ1yO&K|YsH-~sP#h6-BW|3*X2&5ygU(h!#wXNz1>T-9{vjTyS;8b#4CG9aEWVOKJuzs(ysf>uxJC# z#*m$6WJni~VxmjU;C9P#XQVf@5NnWNEnj6x!L- z2o0KhT68plXK{%-Z}JN@R=0k?_xBFE83hyeG6)-#U(gqVB0xexSV?^E% zt?sb@R!Zz{hV}N&?jp_zwI6+8HgGJge!Vor*d$KFX4jA^ zI|!r@829ukkiD{Ciz-CKpl2J`sy*9g^{ZV=L)$5}ra;}jKt?O<;%I~NUB`4G4C>j{ zXULR9P-%p@dzi(Kb}ylupiWVmWO^75LCkB%_najCuO?TYsX_hW1T59;1Zl6@WA1o^ z0Dy9ax38ankB!Q>-RSF4vh3?OBw#U}6?xp$kvs}_2-TmRg$LcJ-QIcriQjb#Jdf7e z_=~?KrlC9axO-Gwqq8$<(<%VH6z+7se-T>Z^*9HCb1U(imcJvuv`R&h`PChY_jm&n zvvV#Yg)h>#!ob=+cP=YBvP$^{*SV$eA+kID`;bWvUeEikJ$B)B5fU*{zt&SO?A=JT zoR}fXIPbi*a95W5hF#j^FWXNFX3##@kdUoTWFZr9ntsJc+=Hj)}0(f4>LS3`b|+PzdV zqFi+w|F#}Q&r0*HacAb5i7HCrck=#Ar9NW zNOZuME>vP5nj$4{J%tLH!h&N%NY(AvVn}tRO6IxN*YLRx7VAGdblD!i{@`-3q~uNY z2=vfhQPe$J-KJC5JLxUrl=V>2SijfcKI7aoTi${=q^PdQ^`LadmOM;uXn#Ep7LoG@T!! z+>nih#)!J{(CoVEv?P0=ZC*FDNT^=#V1#A;@KN1ciZ@6Qq-yu(*gIcdIe+f-^5S}V z;hb5To0+A$Gqi)(DM2b;Wp+g!Vf4O^efn2e%1)~2X&qtDo1MWGV%upO!ahZ@$8P}} z>|VNQ-9}krZ-#RWtlFiP(ExW{ykw8qzhcLdiXb0RuH(xJ+dfqcQ@PpN)~Xek2~hK3 zHN#7`*vH*k)t%j^y!^VIS;dmg4A%aGTWvhDTYPigWLw74$&8sX>oeu)#rehl(^E5+ zPmGsDmP1>;I}iA_3dvmZh>%tFn|jbYu9m1Z@+2PSNt`NgBs8)2 z>vgwcTLGZ}#4o0QIX&cSrczspd2aE{+F7$Qv->-^ z=*Sm7Dih6AyxGNt)kV|)%JS9EO!q%t=C`EtmHyLnGiSY7*8m?H-S)z-zp7sN|5x|r zn`ug%x(kBMxQZKhU6L#UG&HpRY~`zsE)BY_s_>nW>VuW5BF@7Dd{VG=J3sII7Ca+q z+I{9=Q!=unv0*Ty`z&6XM$jpCb(W}H(@rI9lj!5xAa{msx{|RabB`K4BpE3mjTA0L zQry2D;n_Tv$=ZV{N@Gj725n~3R29w})hvhi>XrBSk2KmTc&kLWeFETKY4WLP;4po$ zE#=3tI{%%DvW{@cW<^1kJ<3RowUcb@KE;{{Zf;?02XeV!ua&FH(*2z#vhUD8mtfSY zE4D*25-VM0!65dnyO*{IuliNh)n%Uu10Sh|LH$25fJ_7^>f@t1AYsI!7H6!4)HRmz^k%H@(bdwst3*7|>XZoPbV(1~BTj!f27 zkv40%CPZHS+A0PM7o}~V<|vg_9k z8U{r#Ud;o=ggrb|S1RoiW0;mQeb{m=o~9wsbDi#%3N626Mnm9$!zJ(f9nVOf4m?*l z$vk^I^Uh#>v=BY>jQJEETEGvE)78e@h!0^MK8CmA zIb4oE#s+)^7vmfF&yX?yz~{OCON}v`!p8hyp)uRI{sV)w;o5p*K48p@8RSHBC6IT_ zQEb9o;2G57zKm5ET2y{+0p7y(BGiI9uoee#DIP?P>!T(-iTC2;sOR6r8s<0EEMF^c zLhW#MaD97l9mPiO$8Zf!;7a@qvL^FgycsWI6n}|&zJ)C!|gq_4~=)Pm2T zN^urHh)&M{2WrRL`Gl0QezX`vy_ZAv#FtQ+`xXu`(DO5#{DK>`%<=#?UPm?2SZlevpFqYo z7g0O>73y=m7To_6k`z--i=RS^>Y>L`CA)yy$Tx8vzJ$uyJIK^#W}T-+K8>`)jH$Y< zT!Lk&8bwhnOQ0rr2sPn()BxW>E%-&$PF}%H_&TcDn)pW3=->dp6xdARbw7^U$jjKM z@BbPnRowV{@Qdph<+_e^$QbU!bJ&A#p)%4=rtImx(4EILdR}mYw1k+=b${LLp8sVP&a>!h!Z;Mi7H|n(MsrlzMX`cP7T^d z=olsFxzbnDr5nL9fA$1x3EHLfhis9mu!9SIzY7bY>ao_cmXln!nRDZ~ z@8#U?3uD#cnV6S$?L;!=X6^B0DrGZX&W^j*Ju&6^IXBU>@yMpFbDo*-y|m38NiwLH z_v5ZT;!L}xmrlBR(aqR|cRZ8woP?Wbw@xPUzQcC*jQe)u)}HZgV$=)fV`SIH^S;l5 zQzz$)R9<1bji-|Fqqeoz%jA-oyxZAY++VXLT!=I`6`!u17g|3&6g7Rr_YDmWNBT^k zn{somjj*eor44E|yWMQonRK&-OLZ*`zd!wT(-$mP&lRrMeQ#N5=ejb{^69AWWU_HT zIaRn=-?eyPFdDOwp+37i8jD4CMPr3O*FRg=ZC9^V7Bf!TU03+wqNy624rb~swl%yJ zT4*c711ZoJ{Y`pf85Jwa-S$RH!ThqQ#Vb73qwntr4Cyu z*GgN-&8{m~{PxmQ;dys-b`?67A6he~&~9cr>E+*5dzY=a({8@IcxL%2r- zOE1}EHtV(j-|&0hGO~By!2aQwjnX?q>Ybt3 z=i9C}ysLLuMB#ItOA7yKOE;3$g6u|L2(}FE+X-f+&P~diDZ=viewA0ekTG}Ell)b*rJj%dyUYU8rV#P@e zaUnz!MiV26iVF&gfTJieAxbfRa3MjA1`SH!gBlYJevlZF`af@m0Dkpm?)%-h-+Rt^ z^OA9XWAw_X)aMngn_fiEPf;q0nZw!8($bVl$8^lXJe-KdI38>9AD2=au-dIu*NDXR z`!bcP;rw%0ikGkeZ=yUphlg=XR24AD&7k%tEpwDqk%<=;VGH}UDA(`D(fBrUsrnRiWvLgE2d?5|PW*wzSdgt0L$wIUU=ucAH;%$L za5{d3GLh>j3mL*3%wr=HE5l*97zvK5$7$Gx3nkRM8Fb@&xD-d_auIgnc07bUQ)Tg1 ziNpky7nNWw&PNILPVB%BQ9_-;MfYJTO5~=aOkgfbq-roKA!%fgj~h_qb}YezC@=m1 zO%VXVVz$^8l*E)&~=5~;Uv0basd%p61f# zfoUv5W}c6df(bYa=c1&@M9J+_I0cX30A4_uU<>h=Q13-4))QEUU*IJCvoNYuIfITG%F3&_TSB)0HP)fr=f!4jdiA}$a$0n z{e<#W{Ssv$CvG56H45d^b*SPi4}>@Z9k^6|1wI5Uq@Nt z>7=)C75jCQ6DxfIv)DhG^eoCmzQp19ElT~V9~n@P>M!IODt$^KWV4VjNp+$;s24Y2 z1n1#Jl!&Ae?-n$0Jsw9{NIKzp06TC29>9A193R9C!rjIDRTG1Ld<7*(xib=>nu?Nw zc}T&kMy$kcBwOlP)OZT{sf%oO;1J3Scg##o;9b=0|Aw-_3?4$zRW(LgwCZBu#wdF5 z33Q=^S#sS-ucNoq?`~3n^0i1*BsJ2~=>)*}YUGn%OMi%dKYcM>8Ub)VXQC8!LLp(? zBxh(V=xNRQoS;1$)U7G37mh*!J^lG@dh zf4(56P~?xIn@*aX!joLhrO&4GF*yHxtthF=q-W8kbtG`MEAJXV%(#o*LYI1=yqr%@ zaxZmOL(i2;re2)3gzd1{?zHvszte_X@iQ57+`}9F0W+*(ZQ}~!Ls==VVGYY0IvWmV z=f|qE$4soOtW-UHzmT8nUR>Ya*4f;)szLWeY}*Rzo&G>T z_n6w}4;wuJ)2DfvKcMX`rf%5PZ-s2Vx>ftbI%FEY-SHpBY;#BTPAd}d>41NmsclR9 zWX7f**epxywyo~Ofju+yK*;P5`2Tw_Il;Rx)tf_BpYzUpSFJZ&Aw7^dwx>p|B_!I4 zHILmC|77fdJ7sodb!s2Tsqnb`RxPRYXxmX`wU(iv`qSL Ct+iPI diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo b/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo index 2a78c263435b98c13a110ebd853bf053f75f11c6..d741437dd32d6f849ff098c45b5e12a2b21afa55 100644 GIT binary patch delta 3426 zcmZvdYiv}<701WM0b|U=b{*S5%3v@y!7<=MA;tw8+ZY!=h}YyriF>^}wwJ8;lDoUc zh(sn034KW^U6l`Ml`5i&NSgLTS4q>R4=J>2q^43t)kzYo($T_a zU>W=g)Jc8?b>cr3#@7qu4`3zpCA`!KYv6jg4-&KS;O+1P?1AT?-v1rk0 z{!Jqt_B4B-BJPKZ_yKqu44?v=fp@|u;BNRsI0|pTZrDrOy5QI0Bk(P#efNLL7?NNj zP#KIuWq1C2Em^D}-}YOX*F zZ@_w3N;(w4mIC)c?R)5U@;^W)!h{??2m9flVJB=vA^Tw*D!`YZQuq$s1#3xD2Rsb5 z?mRpO--dG7UWZ^|Khy#4hiq*;xDC$Kk^j?lUSL8sY@jgGLN9EB<8U{88Y=Z~K=wB8 zL#e-S@B)0j2n|35^bM4&41Q;pjyCu{h)C^SMPr@(3XQ8w;yPj}W(?%#Y zw?eXO9)!9k0aQjVK&A9$sFVI0%F*B9UGQBv4A&BcGUh|wo=XtHn^&L?_y&|#u0t{~ zYd$PYEX8{(57t3B9)?QMG$a}3N!SZ7Le=ml+zyMWlh*Bk`hZP9s%g#^_-ui%!cyk1 zK$YMxuvPc}2Av@$R&O@u3_K3|;7xb{?xgSmd=%;=??IKQ2ql)lYN+|uum?657{D(w zeigRCy5@WaN1(1{3|8RZWa#Lm=b$3I0CmFeLZ#{zxD&n!m6>AlT?scq1#&l3X$Igi zcnr$nYp?@;02SD-mOLMWn!gNZ_tGiZn!jdUu$}Q!a6m7>FT)D%iZt;IEQddW3gDMe zrMUui9sdC*VH0&BR&yRI;9o$JX|BONu$+2{2bF(`=`0iV@OuzBnBPDIYTkv~pz1UE z>$D5%yU+%?O<_}p(4IM*ADX+Nf{uZ1~uJjHA)#?zv6I|7oNT!2Mc3mRbpO@sgzVA6ruc^BiMr&AGNTdm+=3< z4)_IZIaZ3zwX#Ad4po0Om5Hi^!qZqyBJRU(!^W|>CXK0#wAoMy`F{SJECo|`a}?v| z7!Rw&)ExFXtPAVMq-yDAAEs7?NjINt%b1WL)tazDOdly5ehKK@i!IF-l^(5cXiB+c z%mtfMmQK3OESNYM_-WU6@n~uBY{Z{(c08VNDSI-WNZ6#Gwqwq^nG=4HcCq%YldXFf zyfYs7Q#L&rXH!2DM4g@Vrd_z`l+!|&v@!o=GU0nM7i+d&GWLJBZD}71?AE>QWBY^= zzu=FZosDLKfPfRH7VMOdu-Qfv@#w?0zRORhD%_XRofmZD>-ClHQctoH7Tpqjh!Jzpfl9vr{gW@+MrWCAV$Wdqv9@Y?rI6EGyc$ zeeMl2?9xHpO)J9Fg;k?rgpXx6RW&XjIx^hVV>`RLhK>x5SnJ%5JWZ)?vKFWS+vJ=?$Lp{4~Dcgg9v7xQjW zf#ck6+GW~uFRU3Vo;`T^IrfZBx_IEH>?0YNcCNjy?g7;%C zmGlx4Cu3fI^|&8+2u1;pyCBYT>zXavvhh^PZ_d9oEeFSNw7|=}LL`vGUf|6= z3oLv5H_qckearSpM6tW6d6{?tI(h$&NJ*>2&}m&FJ{3=Tf%R;Zcs)z7Vc>ck>Or9f zHl2z2*|YW6*X5x=3osPM%pPU4TH zN!lmnG||+(qHAbyq|cYaxXTu6zA4%am9d`GpE(s za^-in)!LdxawDmDP0CT5~n4t<_xieBGVR&+hYme7@hi`+nb_ z_viij-s^k6JMw*Q@^M4!rcb3$N-`#bnW-FTX=%o!V>)KxM4XN@a0=GpKQ3c-V2#_D zE#r(?!Sxq1jd>J5#mV?9>Xxb8grAx$oTx|T#|LH(dii2GCgVxe56|EfmO4_b!`pdHuYe$@XiA%8VDF-KGVEpfq>ZOkmb$i^AC2>Hrv!+h+= zCX8S?evAs>E;197Il&k{#&S>~)tG{7k))UnI0w717N5m#rTRk#jaZyxOappxAD%(( zZHkzlGBOACpt)Fw4X9Kf#tyuUN_7E0dIaa8GFXcWpdOW(7E~rXFfxgOpMk}vu>{{h zJ@`_>tEd~^!dCnRHG^9I+=BbC9zVd9sJrXD0Ttj8jAaZLaef!;aCScV*9`{9?@qjc zdT<`o$iPz6460E}umtDfM${4=Lapg3EW>WkV%>GCGo1BiQ2AfQM=_ z@1rubn?g_xjUpS%JdgU{tC)u8P_^_P=4t<5VemK?ZlY#Bd3OATvJ@3S8|sEVs3HyG z68sYDFoOzHKrIQ6VFTyaQQuFc^q1pKT#2va6ZiwR@_aM3f+%qSHG@A;#gV}R=3)VA z3CeL1HX}bV&!7T6kHliG;vT$*OL3qo?wiQ+n_EayP0HMO5m#VDH`vI)jl)=vqv%4G z(&+u5Wl`ko=?^y*k}|i0t|d~o(&!{I_P)@)x6#+q7t=LsH3h4QHf#MA=~ntKy4nVM zcWe|tSYT;muUZACwbU$9>1wKKwMM$Kqo(w$Y1ZlVO*)~ii4%Kw)G=<;`mbQ1bye%6 zXVF#B+7&JIhub(#$Zo8W&DhIFC#r0<;yAIRYC>BqiM~2^CB8$pGwz~i(>L?{_?r#2 z#%fwyRW2LD%%|&(rvhSCVy|B->UU67BaF)%VT81Q&){otToP4)%rs==<|4=ik_SN zugfVd+LLNW0>gt|=iS1v^HNc7G;>PC?V9f#owh5QH@(drZJg1Tyj&sITi>96kAKJ$ zw7r3$u*Z5mwvT~NUv>sPL!mxj&>ys&0dF8=`KuYCR z+41PbvW4!btK7Pr#)^jMD;1UQhV`~55FR@ju!&jKx7&~}ICjE%eIZZSzu)5xSWkHD xto7KE|7TNTeW5V%>ZIjftHcp)yho;lVwA0t`ySq3z+8+J( zch0%zeCK$jwn8y10H?rXa6CKNXUM{|Uw7huHNsSOCSaVmKQ<0vE!k;1>7_tcQPtb+C%?^}>EAdjACRQN>S;Mlcgf zgtK8^4V_XtlA9jb49`M2z(riY4lALgW*HPiRznHpW01e9l^?dK0MzhVSOCvJIrv(P zpF`32C2WL$&LaMD&@$q+2JV5i@O`)pCQ~6|SR<6sJqH)SORxrh1!Z3a;cA6_P!9YR zq~6pWD2D$XN=o8#lzJHEKuOuE9O5sz?`EPH4#0)*B9u_yf$UY;BuuKk92UYxI34<7 z5j+MdautD(!XbFuMd%^fRM)v$WJmoGdSE=2>qNYdj$FI5khSUq_*bsrP1uWq&oOfs zW#2@}Zshy>RGfy>uvR>&hLYoLP*SiDN_8KHQk;YEm+%IZ+PYj4U4Ipdp?#myDWj8) zyP~iLmcw31n$#)igd9qBe+8wgB_Er?a<~|tfO7C>a6bGG6n*ncqxw6cMBrtp;b~YW z_x~!L6-=bejfQq3loafSPs0$D+*M#@3tS1M+J6AWu-`$>Qn~Y@5nKUf+y=+PqcOe; z*DyW}+u&c|8M*(PG4oqY#NoDt_(}LfcmZ;@3RFZbJ_(ZcuK4`%KxPdSpgx6sUY+pp3zzFPuC6&bgIXW-W8G+MDB=x4!s-ht*hvI1~ zlu+-5>tGlzfrv=7DNhfH8R>H-)j-kArF`|F-)2iAtk1skU^|Xj4@I2KiX!{ zX+&lr;zc$h1@jalO>!vpppg_L2Z=|xSN@fwITLFqA9IQ&L@3N zLFB`!h%~uUk~40nnu&~U%f}1~=ubx;N64b{ypkQ~^;`)jBTpjIvJeAVFN0Wf{FfA@ zBe}>Fg!DO&N;Q-wIj@mUtWoez?I^=sS@>zZNM(s6X{hg!HQ>L|)8Q z$R?TM8alM0nf}-Mp;q5T|B>_z*SgFQL z?DYGBM&+qJNpXG6z8*t&db*8(-s$P?)?Qyww;9^_-Zq~AnR@LU$^Ojb%RSQ~tvGdSu z==SY?KL&U28lx#{VX1EK_OyRj7u5N@L63L4QC1Mzk-RX@?9IsxeKEizZ=l`p*=GJawLE?0nucaw+f=U`8=9MIS2Q%6scAzg zmAa@{LhN<-7$xQ>Y1@)@Pt1(6P~C(P*EoGwO)ylNk?blgA6=m~7(u_s*x~VZ={>Ps zTO3>Wh8AV!$AwWnj=&UR;G?!Snrr$&Yo7Kt+0LAe(|oZ0c*&LXzLvg331{9 z>uoGRXQ`Iy`wz^Ok9SK;D$9BcCx0E4Ek*HIn!sg!;9xWfq&fw!&8#9%+43ak@^ zYS_An3^C8FeT4E`ua6{zMhd@hnKx$6Omb$mb;0~iVNr^*PO+Tu$zt<(apAbw*nZwV zYNjm7Uo90jx=1E9s|WdW4l}RV`|;A=C-&QiuqGlOoE;~fC5Kps4V*@j!l9m7g)Y}w z^Jm3Vl4DcKa)vpYWs>D9tQ({kA?wee`l#tEnPmR7c#C;sQNGz*G9$FEq|udrPq7A+ z^@cfN$z1d1Y%7N(Via12osb@uWT5R*Stv9oQ_4e1CXBHd7BlXD9Ub~{*|4kl94?pN zuQ05v6B1_XNOT?5rn^dK*v~&;dPeBb))&8wpU4aD7fK^BLn9!vLmkHlr8GliJkG`mScMnh5}b~Wc-j)V z3+JVYbY~{-fBJlp#e6@A7vbM=Di+X*c3puy5|@QkCecuvvL0Kw-h_JNF%056$OG~L z>I6Q)X=qKPQ=EZ%{{qwj7vTzQM7{qIPR2KpN982uGQND9YOu0JO86ohXW~NSD_MtA za1+*H9P{v1yafM*I+0*bav{aYzf|#|6I+hyxE@K4G~*m>!)nHtUsGwow{bbn%N1FM z-S`U}MaGaz8C5e;gPO6WSc_{>Q+)t$#P?BCeF-<6hs#hiw*qwn^{AO@z__NQl}bL| zg$5tO3-K`O!0)C!h1%gia25Ust8oPnuf(0W1U+1eljvNp*P>4FQS>v03%L$XA^){h z7Li}=U>mN-H&6#IWf@smjk<#6s9UiLE3gH1tM;Sr@e5dr?_m#~L7iX^`=BWwL_M@0 z;Vk^VfczIzF@+*O!CFkiR=fIvPUYZCU|0!w48mz&6NT2c+ZpO6BMGoRt zT!%RvfK9j=b!(4fTpOk@N_Mmp*+zL6^)1j|n<0P}E+Li?`mlCL=KZ42=!AmA&4eE4 zAIi^DmFrQns^vD~R=-C6_0<1R7E_r_j3d?)r9^ZSI-7p z>lZyAT6kIfA2N=Bf2d2e@tnfW`lnx;a)|}{v#F(+-~gX3>C~1I9B%*p*7Go)m`YUH z&t}}@l#D-PIe*EjN*i}&I1=g<`{=Z(&fJLsE4^-IU45Nhk)0n1w{5gfW={%~mzUcQ zWf%AkXAewji-kKvrZd{r(Ht^O&CSuSHhX7IrTu!&@Ptm&)Yf9QhB`Z&Hiqndx$RC? z-d`;zBR^;b+Ctq<#pIc3HOsDDU4QlJHFah~S1cB7Gu`1x#B2zemT+g&hDfNzbTLH4 z#5RRY-5u@Gj+j}y%7i;jN2sagPG{xREopJn9qo#=m`Hd_$i$+iB@_w8LZ+ux7t;`n zHY6Lim6@K7PA<75zKl+<4LMpe1%@ZK?COl4I6{$K6NV2i@PgkGcolL-y$GQv0z*`PUnF z$auZ(7=HuaeQv^i(H(M!$+5VPyMu1OJDO@saHrSn?c&BkZW?nPcg*np2!H+F4);Z` z&+X?qXK2nWEB#?N;q}@@b7t9}mgd{nlr^Z%iL%=)`~8xFfVh9Ky^>;kbNLCUd2VjN zIXLf#m6sfxfwcR>-X3q4^V^Jn$#LB(B4D2`S zxA&45E}7jlmpPs@12REROxf*sKCI46Z}j#UO_bj~(=h&IHI+kNpSSnNoeO61f_<#= b0=w$s++1DiDDyshAnea-UUA;L;t}h=tZ`oH diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.mo b/securedrop_client/locale/sk/LC_MESSAGES/messages.mo index c57fbb3c748db2e6a2864f2430bcc07194b908a9..529eee7b15420ba0b2e0888561b75245ecb4548c 100644 GIT binary patch delta 2249 zcmYk+TWl0n9LMp~?G4)k<=QO>9a?A$xP_L|))t`)+tR{rw{%;s0bSZDDVN>4y`Ui3 zARr+G6SGl_B8f&K@j^6{Xao}zTObl2e85CsOf(Ur@xceB1QX-;H(P|0{^xUMr!(iA z|M|~c+<9hu^2eE3uNvA`;&I{|k11-p1_6p3eLxm@qPyPVGZ}* zaL@`WQK_y*o^2YCXP8brg8L`0|AKm3{y-LK?&1P0u+kY> zhCa^gP!sM;($PxaL<-g1K(^c5M(V@d!77}1B*TPIuWKK+;ckdQCJ;^bl$q-~IMWHKks&R0h;kjFg01 z{W`DFfu@x`Xj+{bFO9pmA@}UzL4~NTXeFL}__MwpNw+xkIn^Eq9=WJ)9znLw7n_HhT z^I&{5dcdlT*u5hOJCKMEE=>&<6-Dwo!@e$ibYN&89`gmF!*-*!qs8Cl3x$0Fztt9Q z47D%c$?$o>=+LmQI}wcy9gGgg6OC4DPcUe8_(Lt$nwF5iJ=p9I1iD%xk+rEN@7{u7 zG`4Rfx{t>V9Z3D;U7gv}-I^*cE=#@T4J>HN+wR+F$LvJZPE7xa)3h5zDJ(Tb_LosGump+1+UwI-OZ(XBTLL zi}8s8KCqA&H7W!jm}t~ZltA#ywlSJ$j7H-l5{(j~0Tn-3g~a$jT@>-Fo9_PZ+};^%a^Qe(M1gB3V}*JJr*N=?S;c&K#^uGmnOc;*WlsN>nsnVF@uixa4Md~N}Ry#8mz-M zyaTH+i?eYr%0}KnB2i!9)p!PFV}ByaQUM-DjOseP8E4{LT!R}~U+tpNil;G(k*k!t zAJfR6I>nDHFoMlEo>e5p?YIVap``d5yc~Z=$(V#G3y(#~P&G;>CSx^5Fso@Sp;3pu zC<{J;@}Q@%0}rC?_!n%)S)`!_Gq@O!T(~}uvatp1Rx-35Z^y&fjNhW%U&rcFZ*Dc` zFAIJ^2gjzqM%nofD5?Jy!#I|0%h5EU)WE$s69;h+520*ObCaa_Zj|DD7^ma&cmodO zjd&7EaeRRM&!JIC{;r{?4JBpkYKz4ZLn*2x$_Dn~Ju z9wm^;TuADtqa4v}ytmyj1m4WUH(3G(KuZ&5P%6UuXbN6JW55-v?O4dwpjcs2E>dT7XlwqQ3t ziVN^7T#2>(b69~UF2UC^iX#}uc{3?Yd=3}lm)L@}vx=F#2QyqBLJ4p(=OjmQE7q{S zYNjDOTZaUzwj)_r2a)4fLnx{I9+OzZyVZz~;Zi(~QUm3jlWcrGN>L6V$yIM-DSm~E z@B}K|+O@8;y(_=t@_pqUZS8H{ZK}1aQ+}korB$_>w&`0=ukNvIGo=kDq5I8L%IGyy zp-|}JaLP@4aZ?-dxSMu-hH`T%-l%qb%QN+*W4V(RBc*Cd?!JoJ{P&d&Wr5YE?^$L> z7IDli|2#e)sJfzbLA0y0dwJ)bZ910reb>=jEZf#GQzxvH5wp#NW;M&!{w7nmZB4qK zuh({HE2TZtNNmebs_rYz>Md^CPH5ZeGqvyPghXWO!O?&=`tHVJ$M#$Fpl2p+%S>I` z`FFVg>eW4-+dsPIrJ?B_*VBW=zU_sm6;rKcnY7B*Q z9|i*1)aY1(vF0AnG!t%rDCv>oajUwzgHZzUE!PRQ8ot@2>%;YtU?dW}EvzGRn!=G_ zcy2h%#NcWYnELO$a4<4gM;eSu@fjB7Viez4m!oRn?&uGgej8otr!S&l&~W!P@U z(DVBYzt0HuUAS)U?Kdnt6nFa6jk-OavEiYtoC2m}%?!&>f*jK34nCWvkYAw5)F#KBSg)b$6}pQfs=Gw=CwZ`xPL%Uut@eLI6J8s@t@)t)4{lEYK diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.mo b/securedrop_client/locale/sv/LC_MESSAGES/messages.mo index 90b461f1725630e39b0dcc48e7b594757b247985..3f104b468ef3853a5bbb814324e5807f00686998 100644 GIT binary patch delta 3429 zcmZ|QeQZ@{9l-JDwrrFF<)wDLg$^Ft(iUh7Wo%=m(q7uzj`g->y#)le)x*7~z1RD4 z%DJa4FOs_jBhip7+ll)_jS($GCtEZ(VpL4jyFWe$Vf@_k*V{$MbKmUGgn@p7f)#+Cc|kh0ACQvqB_b2)Cn zI$V#taW#(P8Z`04fKqe#Yufg5rFNDn_3#R%dT1xAlxoE9VXabm^&2i^tUFkNf5U2g z&$nU~lcHUZOYk|A=e~>&;`3O8ub@nOtpg#J3xw|W;P`&aPM zgsr#{hjBAzkfc{GK7udd#Q-^g567-zrlq(coQW8Z=xj4 zN2qZnvy;8;K-u$tBv>kn@?HidQgb+p-$q%;KTw{pr6F6SHclgJ#wotQ#d`L~c=QP)u3`vb~z@A&@@FiXjSjVKdq z#qDzbALZh++?c|XcnSM)!xp6mFotrRUPgJbo5Ak;A!7;xQy}D1uiP_CAonYQ3m({O2@xK=A_<0wpV?O64FM(A|ZVUrQ<;~@c?$? zRgB@g7{SBsoB*81Uc85SCa3mxlvbR?hiJcwA-s)K*tESg;051r;!5scL7C{!klj%? zF^&I1IYn{yQ{y>gEH#h4_&Pp})t$s&I@sS?N~#Hz37tYtike4R@h_32S9fqP-o*e) zk@v|pbwC=F$EXRaOhC#isvJ#8+9B#Fb(mU3mHbnOL4NrpxumS2PIyX`TK1s$Ws1h03 z&!yBAR4Ks{ik(tpREd(5&r>CL9;Zr??U7`@pDL$=0D8w<##aZalBsfhq{v>$@4znV zQ&ib&Nw9@d>0cyKj-C|RCdr*HY4}CHaQ0L0qfYww1W8WGFG^nRDP4G<7nRgwv-M^;DW+n~tTEv6OD;v$9SyJ7ab<6b@CsT)yr0vzJxB znKrpOwJUs#9w`bH0qj2DKgKMEASQu9Gz z*)h7H*FK#;AzkBs+<2nOAU)!7laLX@jzYSrzN{*mvXirV#wqn)IN!W6P$Oxy z@SJ+QIG=F{u=`efy?eE#zH+GerATCGbYy(A@Vl0$%L*s9ei&GKNKSKn#=X_H&aDl$ tZ;*ZR7VfRl(UTJ0Go@2}w#WTK+qB!=K3gNp_0yoVThmF)c7N1<{Xe5@Q?&p9 delta 2529 zcmYk-d2AF_9Ki9nyQQ?y+PiGa(J9b_mTnJ^mU8t*pylWV*g`X~BV9VXTejN+5f=ps zLQG5s68^#vkdW{Xuu)=+l2D8W2?Pv(n1F^xqasl;CI&I!_cvP-UizEQo7tH+@BQ9; z)6?EZy^-(JeprTacoOBtGdLU1V;0^(>A+8zi*YX~ zm5zDn#wwH-tw!lUJFdnNl;tBUp-G zqIBRPG7^=PsuX`p;~*WW#3{H6Ns3yBCD?;CcmVq()t9I=VP2Y2jp)Ulcm`=(c)6)R9OScB4mdX&txqGYlIBbiiuR5W}G=i-MbFTOnK zEtCc)unq5{jG%^xTX84W;}_U~(z={CqIB?Gv@?d)oIk`mT#!xvrGXvfcQal@d2trQ zn2rS~BdA1~f?BM=^(a&H4$7RK!eSi9-S_~dgZ<2dr2GWRV!ej*@fXa)1j;A^NeH2an(${G64#g6oSlr555ol*M}vCH2=) zcGGPnS?Y%f6&cyz_y$gASTffKP;NYo{HdcHm|k@erRP_XL8$vE4Y}qjMPHR0<+&=9 zj4Z*mXrOfXV`TQ!9h6K*{-h$ST=t5jHU(v_>X0ld6J;d(u^P`~75<7cvRUL)c0n!5 z{aq;6{U}p+7^VFqSdJ%gDSnG%vj5Y_XA>6=VGG_sS^e2`mvy2JqAb4SC?h?MjriH5 zPw_R*8;fEcIF9n-PbR&Dl98_`y@k^59n6&d{}&ZW)l?1)N>!kwrV}MqUQEC-H1KU) zf`Dy^Am6T+&?6`&BoU?RX63#gcC^73E8% zq4d~;3|2Lvtoi}e@DP^aS=8}6ti#1zd>P+FSsNEnI&uwJuj(I+$cQsMvDIIV%Q&w^ z2Qo!=%3DxIw3c|jNF(xsULuZ=Y)Pg_j6G%2_9kK#v51hYNg+Y@T3IRcznBwA+ZIB~ zI-<|6#SR)UL-r!8M?Q*n7UEG#O$DD}_Nnz_+Ky;X`U6LFV`iMg6);Avy;((5x*FP6c3L;HGNRYBCLBu}*RJVYxu&aG z+d3Q$2LsxukG8fNn%6g^Z#50CHXI21OfB4RXw74T!BAN1Zqs~2TFB77yP{`jJaJeB zx&C-x0~F(WIGMoUTewmF1tkJ^FZdnKK%nKjCzZ=-%jW^W2W~f$>wO zSvC+1goCPG_ZlJHiWFp9B?Z%pH2XI_Fr?W(PwYLdT6M2i*ZK{=rkkd&z0OEOR(ruW z){??9>s(=ub*%7;wXa~N^XaEN?|Hepnmf z9_vYYZszWgF=+aXp}ugi&uf@Q*x0ks@>FO^dO+Jf6dVq1GxjXEZdQz0eU)GR4+N1< A1^@s6 diff --git a/securedrop_client/locale/tr/LC_MESSAGES/messages.mo b/securedrop_client/locale/tr/LC_MESSAGES/messages.mo index b53914ff076acad926c257c09f0fb20dd6640e7e..a7af7eca89f670800e57ad6d93ff696fcd9808ba 100644 GIT binary patch delta 3538 zcmZvd4Qw1o8HVQ^w{;xbN$mXCbpz8&96Nt@;x?^uOzg9Lv0MKow&NxZ)Lq|g?B(wE z%-&t%vm0HZ2$Z(apA|*WmZ~Zwp(;@8L=hrw5q1Sqh=i&NBqT}|Dk=dIi6}@xt>F3g z?#j99$lpD)v%53jyx%+P@89>PnR&aq^qY!i5w{TGRZ7XgOE>Z(ZMFBOe6W(sHSklg z4%WjqxDJlP_0WX>@hNp0{*r5FjZ&>8O6{*us*~%PDy6o<3vjbi8TA`Fvevt>4E_z) z!1wbkTT4=0-vUeFm!LfNRk#H{1~I$DT3Ak&vd&g03G9RetgnXY z$cx{B_s7l!qGOW_T;?gygIYxCzd}Ap9DX=P$!u@Es@# zRxnt@`l^u*bE*SSG9HAI@o{(qbf6?Q2Y14UU>p1qoP_VeUf73hJ@8TZMfh7N^LB4g z3K7&86a_<26rO>ZE;E+gB0T>k|t?}4>sA!a-Tr6e{K@1&q8u>cWGJpyOo3;Fw* z3euHYR6{xcH$zF_PAG~DLBvsUD5v2pl!d+pMcUUPbE!*kKfDS>x$WC?UKoL*SQyH@ zXP|7%&5dW&IXYsR*P%%G7L-KZhhnnztR@L)*azF8xcAF&2Yf2eUqF%cuTWh70Ti=V zk_}U-T6iPu%<~ZJlJh@AXPg_~fDZgKlv6Ol?8ERyXv6E!J2n_W7I*;O0KX1p11{`` z7oZ%&Yj7Iw$FZM*&%$!}dnig?f$LabU8N)E-nTnfiYh3QZOXF+ws74K<;yh(Wuj-G zxcNL3rCx*gz{{`$Heieca0-sX@4{|)4a$aZZ|3~-tU61l9lio(p=&S>Z{=bhJ^?AK zs^HAXPFtZU&<8a<2HC7i!&C5kP)b>kL&X~hpv-$eWUuORC<$KNhyI)hb)5mJ`Nr1V zi>-N%LaChtF}?aW6q7vzIZa*@Q%Q1%bC;gfGxX&&Nn1-uGUA~DVuTnXstEc2<4Goq z%Lhf;dScS+<$k)reMQ&D>Gu%_2|VUCIVpv9gpSC(DnD=xiVtL?g(hm05>u@2)k1E_ zheCE&XyWcL(M#M-h{Pe{CZd9nCO(ly#k?AeO49Bpq*P)^X`r;KPZ*sE zVzuilJK=9=N|<)obao^(on*Tz8aVC5lVX18GSLgm|?RdG4nTdokZ6=ztd)NKL zx29;iY+ZG^Z`;1Y6Kd2CqLRl_EPO+$*Q*IR(DtZy-h_G zpI&-J%n-I#_#kb}hnE-IvtOz2FUfQp^UI59o=6)}!_nM$<2geck)+`)FGgcV+6WmD z&kx-x9Wm0j+=^IwYUO(~roD7=UR!q9a;#{~3|kt9eDZ7`*#H+*9$bDo_l|hTy}YG% zXGB{|=Pg_Nd(BfuOqOQqxFtc46C*lA7Y#b0u-Im$v(TcX;mM zQL2|nn#d`eQ6IBUZofs(xFt=^6$63e!+`T5$5M%uotkgg3!ddBlkv&095(aJf@97`Ei+L(R5%eu oW1T8E5ggyG$CuouJu&ycd#w88(#6>Sy++YI4|@u`)6K8_4|bZ1p#T5? delta 2537 zcmYk-X>3$g6u|L2(*+7$=rY{^dyBR}3#Bar1*H1|l$NEXP|A`A^Q66b_JNj)-@+n2xN6aJgl9U?7^i)15GiNH5hH03Ax%d#4;#_RRe;i8f##*ORJ7y`> z!1d?Tm3kOI!vg#jrO8wp;Z~J_xzbhsbVXI5n;+^i8Be3!coyel6kYfQ$^d@EVoc6d zDhErj5NlC7>O>j9HtfX1D9>F%9#yw6Tc&y^alw(L)Ixs9!cts?{G|FZ9|y4wN3jyG zq72|JG82_PM=Ac4=0gTjgDJQXNs8Kn6*z!(_$=;|RDVdN6-%;}YC$(1!m~)*s+j3X zMk-J`T853-f|BZ!*n@GDR2Op746H`UU>(W;nou&c2_=&~IGRVrLq+3LxB$mdI=+(d zI!c4Lu?v4jnL!;7Z^A>^gqN`yrFHq=kJ%{(}UH}MmGtl|3GnrHB9ls%QoXeISk zD0^ZB%0$;$xJ&+M|)5*H-<9P zmvIGNK*`V)N;@u&2HQoAR#G7wsvadJJ5V|tLD~JUqI7f`JMa=N#uQo?m!V{)AKAxh z7|ZcE%8XAZdre#9fNZIJIH?z7e2sl%;af5?m=nr8cND;BKu2ykL&R-Y{4d` zeGtb`Ch`l)Zck;pa?Z0++9|;qSdDUDoh|FXmC7~}{a^=^6pH&Bt6 zj}%$23}POUNo*n>EVKARR_#KP?4u}OYV9l2=}lDa{}po7l8BDPML9{khyfyt=%fGX zHyg@}MGDJnueoc=tfyTIQ?@sEZRoYWbmhiAcincZYuVi0 zyPvSx)eDin3ew*LnjHQ>hCl~3%re=^dX9ji1 z1@Pgip5yLPrd*5sXK5{Jix_*(K{ld9!t+{G9dL!jV|vqAkwY z@rqK1tKal{{%_Cl#-sjt)cUHjDwesV+}Yn6k6s-&v@skuf<8ls48P&kK4aM9H$xsh zXdI14gF4{lvK}_vMo_o5^)+>A_vA!;+$XoV&BHdm-);Da5k)l_^e#;ZnzWH!)_?^e*@>kkD)l2&0sG3t5Otf zsufT?ZiM3TBX9x?LUC+2oCo*8W$+wqg-KWk*ATW^co2RKegMVp>gh@m1m%PhK{u2L zx53CNly9I&ZbqOJ-iETlL&S9=d=5&;UxebwaVRG}10|#vAU`$CgQe<2sKF#Gf*FKE z9GGu&1r)mtcN710C{6}s!&9&kUWPTWlnPl5y-*x{14;=04!;Ns2-7OK0m{1Xz{lWK zC>vH4Qn0WQ$^o`OOe+^$40jh2|EExXz<}hin8Zjetbt{4J6r}2K?(gYAhy*%p;Ui1 zkGZf6&VuV;F>Hqvy)xhz;1T$)gBpNx@^4eQ;@FW0iiGHUP(1q?ln{Po^B?e!EKJ9% z(=yI3_h5Oirqt)@pJ1_s{`ZhFP)R5$xn&^_Its;5 z6iOt1ZjZ;I6sLpZ%DfyX2IfJDKqU`xXfwoT^&FJ>eKs%Hykzrtkc$veAE8LDZa~@a zzcyzQM=?+Z<%DY?uT-nue+KeX$9Tww@7m*6A%@i_P}ZlHSO?05;&6%0g|I~K|56kw zh89>455m>(Lz{VA@@D#5pcw48ISA9~zi;<{3uXNko3kk($^8yU@YHvq%)eywmoSt4 z)dwhI__F;X38lzxKnh(=EVm*v3rdl$gff4t&2}h;zYeQm7nDf-1j@k@P;N^;6?`9T zg5ubI7{OUJj3POWLD@j=*q1;Ntc8z4Nzq9t8@~xN;Ruw}ybmRHe}+5Zr%>#+FR<($ zhGO@Ja3TBy6bBs(iN6>qVN|NW3UU*b6UxckAqB7Y!*TF5Tmt(bm%?nao>Z$1R@ZdA z4P6|PCXR~@vD<(&A?pzNfJyzShk^X_Nrq)B2DT$;{|I4LgH%aMQWCF6?9urg{HC8{OR#=MplxlqpksP-m)RA%_@bh%?ZxYumj(J*4gO`h1!{5Z1Qon!bByAQ;v?Rg2n|tW24+Js4=$!fjrR z20DUnU2Ahashf-T=(14vYo5R^zc1kO=$-|d%kTNWW-F?;1+_&htF~1OngjNJSk^Un zM=*%PzC9_HEDslGZlBlvgjQ4=@Q1zr4!xo%x;g7?+Wc#sXH=c;(;3_`=9tUv4s`g# z<}2GHt;XjwDsu+%psF`ds5J*&{*XK9-5EAM&RKld+QxdPR zpMB+em%(84_>3!#NbF)~Z18yENOx@Lt;ErjiRj_@`C(R>HDJFyaeB1-Y@+}5+DSqeLp$Wf35RG)IYN>ts!w>KqdNLi}&`$51hRI%Inse z_=^V)cggt4}$JzEZJy1;3p7m7|f(rrUcb8k%lY|6F7iBra^;#t|L z{zV@ze$^4ZzjU`_!rnfDWN76NY8u<$SsiK(2UMP`rgo8Z=-CULdljR!c=w)A3DB zWy123lbM%wkO0%vrm1PVIMdi@HKVe-Xikp)r8a8c-|{-+8J_)|_uY5Tm`)Gv`K;ZYNb(dw#GYsDmEAzzHdP~3xh@BnthqZo_7pa$T>cnp2Yn2y*3 z<8UylqfFEQreY?(f%@GUf*7$iEs`NPg$y2~@|iOyfyR zM9p9jY6)JzftZV0qW4g1x)+o1EWV95Py;Mx9hCAq6v*W{Kko)RNstbv%U8>G_F{ z*{B!TbmzJNmATijv(CSVie|nYnY5`xb@Yd$57ppp9EEq0zDyd^(M;yyP~3#i;rFQL z?xO}af|m+^rh*SGQ4Ok}dQ78#bCF6q#;}F8`)8pBP>dRRC29#gsDW-peqxTJ8vGO0 z;2m6q@qO9QxE3|gI@D&pgzRT?8#y2*f}^4RXA-D{;5ZzN6Vavngf`~{LQ6D-c)X}{ z&3FzGO7L0;9#_T@JT3BA?Jw&!GR-Hyi3WsiY7c2=-a<>}r#Z zBnA*!gqBJ#Bkhqv#5Cejnfj=Lxx`E&lh8(FRf8u4f+s*m4dJ7oYLpQ~8~bkCd~a3w zLzg!#VxQZcnwn}~ZXeeP&A9TaveNSTh1QtTQfop?AJY0><`<=%sxAGqwq_(fq> zRe5D;p?$1Ng}picRc}PscS78QQU}``y5)Gox?gm8*I2{dnZ8XYjDK5ob7P%v%Lael zTK~$!zO}or?bzE~e@GK*y$Cd%YHny~IliCAoiCc}*SDNJ>0h_PU$d^Y0Xs6G#y*>n zVn0k+WA93Q-5cF|x63}=C*byPJ7PB`_3#FgK5>l-G=3gvJmlZ7?%I~GnwxgEe0DIf ze`VmK12>yC1a=+wtv%v9+~lin2<%+dvSX)zeXYNy!B@S;x3}7N0X8o}K$E63{Uhl#?et|bnM}vI-MgEnlRwhtkIrP$ z&+mD5PbXP!<79``_jdPr`MrF9FT4Ek!*`7;jwt7+I3w>-N^ZRVKK{t@e*I6~0e+Cn z4}iZ9ejNNHxDNaf*aH3*=z#xohf-bOx42GyK&glBRO*ZOD)lJW?Z2Vaec%lEQSdvU zY?TG?0sjO1ZScQ*yyrKOiR({+cY(d2jN1kN9ykL2E_eMk$8<+!Y zz)dVx4Gx2U3H}2p>puQFN?`)k42u22pzPZYJ_ddr6u;aAo57!hvi_48^=@zvDE2-G ziX6v4(eo52_IwlMpPJ_nQ`J9$7MKH9fcIbw+5bTw9|mRJFN5`9GbsB_gLUBd!7A_p z$niKB1x3EsL9ySD!7qUy!$^;Tn?ad(0DKnwAt?K;|2SL)>p+qJX^^Fr4So)M0o(ze z2E~8(;}qe+CU7O#2Cf4~K(YJZfh?_l3JUM<<c^(4E)v| z_#YI#_d{Bd=O`%gHVqOaBnG4B`PB-h_#llQZ5-16mLVdOatLIL$H zQ2g=FKK=ldb$$fOy8jJ63zk8C8Q1P(0u;TU2W6d6Q1qMu#joE4g_r*dqJqkTGGCMz zyWI_b9$W>=I?sYK{_CLlVbH%G_wf`cadp{${!LKU`5q|o^ixpge-dMg94kRtzX}vR zIzj%aJ^aBmYSzcU2gScX24((x{?PFJL!ij}86O`6Q9(Tf3J;zF*MqykN5F6UcqhU< z&GloT*kv4)bzcYH2VVED{~E01`n#aazX$RNUpIo{-(8@LKjGsUA1{Kk-ZlUFZ$TOV z9T1AE0x0_5vC7>41SsRbplsJ{7-|3phm%U;7xEX_%pBqTnULq&aI%>`yeRe z-vIv@`~fKT_y|GP1a1OF?+H-$JqNxYoCAdy-v)7&`aYNhe*wz6$<>A@2SIs$9xMm{ z36$q|a3Ol#2g>^EL0PX6l)U7C5>MUWo!~h55I70m0m>ocakJVi7aSsgJE!nZ4&j}w zA#wF(&PL99PRUzxY~>VNOCFI!;$)ltW&S({{CUasGyLAfxq(w`CWq(}98dD&anASn zH-tCaIVE0#V+}v<;%wz?@o!3g_@e(?09WZ+R|EbDCoWN8&bvA9<&;BgCx`e{{3JG# z<1aWRKAzx|0~)K1oWc>|lW^ffoN{d8{0b+jOdpt5=l(B%f5!Pi&U-k6qs;#i1tsR> zkQkD<6ix+)#9uAvdpX;Jo1pNs%D;ZNR15WWbt2 zw3B+?Nm-eM<;3mQm}8}!WGw2WmD~y^I+BUBVAXZQ>oUsKeVCVj@#R#@$FVJ6^&;Sof#_?O+S}jzlLY)TQ@w}#0C*3ZP_f{<+NIM zB$9H{X@?Q53`kjPHZ(X|y6&W7MdNy4BI(2zkJjRa?YLE3Fr0{I>}cGH$RxcvKO>27 zX9v=zt*&UMU8Kp_&xv$tC)}BeX1W>agze5uG!ai%Sha0dccRm>Q;yXcPj>?Ci7qip zhiK(knf7Q}>$BQQ#vB_f>0QGanU+GAj%YlZ&ZO*2B2{6O3I1-_EcU?akwm6M*Qz)o z*r|+_Xv5Nh*h$%}!|pcAqfaz~64AD95j`4jOQbq%5t-l5N7GSpAwp)_9V>1>huTiJ zv)W2`hTAPW?JsIJuCO-ya-(BgXDp_-NV7b22$ZwB+Qr<7l(v)@POP2mY>h?J?b>)4 zUJM<$I9;J#-<;@hthQ(j?{-CFF)NT8%i!LWCUDog=5k1bJmJ#SQCwR zIu$Fl3R{HX>5Pz5tf{GsC>T7@L-f}=28^z^V_g_?fxazbN3kC3XeY%S_$R#5G&Tm( z{BvU6Mb4Ex!>=}GXvZfKjGeGX)bF;Oj#ejvF`$OtQ&S`jgKfl37!C$A#AR_OBXSh? zco)3ZuGKaWc~{G7zdY5e;)!^72hp`)l#QAe>CRSe!v(9g+cI8HFXnj(x7o5iin?*D z!^zkYJ7Xh{oe5%rd<9W8>$@dlD=eI!ltdJSqrX9EtQw}LoQNI9?Y<`i2QOkg=I^lZ zgm1%gw2!kgq6Zd+^;NLk_){3uK^`M;(9Lzw97R#q$d3w!8LY%z=w zn@A$k5tG6Z+sVNds;03a#2>!~)i{KJV~Mp44`g(`Z!P6NZ8k}uDjZI9#xv&bf{RM+ z`&Q4Xg~z^yZ8J?j@{@+_r$P{WF~mnW)n-1;EF6C#**Z6{|-A>T034; zqHnWR)lg&AhnkzKHieqiMmi1GHuY3s-kM+XjSSg2?k^BIvatSoHiPe_DUihTd2kNuww(&-=}H?7sj=i zFzqZFM5A=tq6aPefmP1wq?6e#;jTC_cQ4vy;nNZ9djO8(MAm|?{cEs+cTAMX-#4)HtcwD{Tdmw zVeul`0>9E4LQO3RubQvj%gLFvL*q~0BWj8QSwVW zrX>IQ32d`;YgS3{=^G+|AAV1EMl-5ODzCjLjP$+kU&mmws9xY#G**+-A&r8j8RaHy z>rQW(rp{C@nqsMnLLF_35(ZG3!(=j;*5qVTQAayqZ4eHnH+T3UvP~!N7lR>b)m*!& z!K!UA*tn%d|BzP^x!1U*sXAm;RaZA|A$Xd%JYHW5EYzZEQZrt7o+y0#U42uR&n1nw zc6PfHOI9!|Cf$JT_ZmTAb}TyC%xaue$q;Ih)Xa2}R{%#fOUGXl$Ia30(q=2aJn0T5 zEy3hBxmZ{hBeWosP%h@Qv2-F%LmQ+q9!mX+IJ$sK;ct-|ABjfd4`g(!SWJLnU2i25 zb(>7Hq_FCVC3&GMQCy;|mh{X!4%Ho@TIv0yg+|pJ4N~+;lqE)ta>q8 z#L}#SILob=h?`dh9cyvksZz8v{t7|DdWWe9gR=74k+D9%oDj?OAFwtqHG{djOTlIY zqkjFt%v24NRx2t*1oP5Sw6-6iMUzTR@uOPCmKaYbM(L;Vgf3C0TP~?ZCG-3mSo&t8 z-<=n-i7xU`AS%5weJeS9VPkp*-P=i*K%51+i~JE(m(}Q%#L6sa_DcINJ)~sQK1GdM9?)#TOh_%+N42(*5+06%r~HV#}qDu zG&7aMEZpR2*>R75X9;a+7()C+ChxI#v-dks-zDR5*%Jhg^uugl!)80Ro2RdDzU1p$&t?v<@M?9 z(Mb8@o!ispEs092Y;$9I6NOBcDX*bbt+bvARW+5@Htg0|IGqoehOinZ%1 z9x78-_S#T>elS43L%O$K$YcGr?z@?A&nf%DLR}dG{bcF1auFEPSkRCuh9LGv2;wcVx^xKj`+)6kgq5IC{z3 zcg7pLnVWdY>+AO}_oCEK=7-&Z-R{tB*`ohs_Sz|qe7tlg#}ML2Jv-e~JH1yXv)A_Kj?cO0C%DYs95q^a=Uy|yvt9n|P`>v< z?#*dm!9&x`4L&l;*Hb>SiptY7-s!2r#6_{lp%V49Q3|j27G6G%5ZN0y*s0Jr z;|}a9^xbqvF68;EMa=IU%uUYcCWjC!e`<)q`Ey6zfs^^myYT|jWN!^2=(77E7Rt?J zZ{E%wo-vMeuk{&wuu!RIyz!kzv+Rw-xi@C>J$+vP`J&P+q`%F1Q~R@X$GkI#z3Bnu z@h1D+;S2axd(@qsz-8|FVQ=&eL$*TCxVwLE?&?H#ZjSxTJht&h`%7mpu^!YjtLBcK zcL(>HrAnt`e{Xp3t)9u;_4(Y~@LN4EYvIf!vx&@`+m-*uiQKVkg(H)TdFS;_doPXT zZ%h@=9$s(>%DPuiW^YdB&W?)%&L8r2&KT;sle30XW^rv+O%;smj-1L~>v2bB3&(Ec z`}w`c8$875qO!)f?wiAqQ?w}Ae8JT_FM9{ixdZ+p;;Ji`@>ee`?DWf!()Z`-ONQlQ z=z+2SpQ*#Qagx{bjRjK}k9i|F`?aFs4Jp0J!TgoW*&8Pf3-NvS#+ci4z&m;&e`c1! zhL>y%@$*MU-2Ogq^qO~QLR87^oWm>G+b`$OUG=UEc)b_0w|04R`wjC9=P+rZ=LG7r zR?(zBgAMPl58++6f54sP@0CK&rTp}8?&?f_Ud*N3y_enD-R{7d!uV^r)Tkoqqi?3D zN`63MhwWtov7SG(H#a$zKh+Ci3v=^s@5E2$r&R9TpnI#|-Set@VHf`j2WAz?2)UKv zoiYj1zU>6S=vVORdlEB@Zb3jRfY=4fH~B?2RO z_}WEp^oYWA?w+YYRxL8cL4UkkViMntMw6wA&*G4a|JR68w)^8uRaM@xH@vY~SBoPC zIy#jfpVB&B-tCQzlLL_(nS@1}|9-GQfCEPgyZ18Lcthrx5qzmD`BbMQu?1PUY>8Ix z)k{Vr<&7L9K^fB{$70(;uRW6Gj=f@bB*RnLD=kt!a;g071K#A+;zu-_JX#1dGt_(e zV*cc9JWWCSG!&E8K>1!HtxMzvg_A%+AT3Ak>;-q^gfM6JP4Q&nz;?6lqC8Gl-kC>`siV6Yj7ZphvIdHF zER#%d>=hGYDnE3R_W)5YXzWe2=LOnsLSd1rRIicH-Ci z(&Qf5r@J-X#+f~f{ZHw(exqkbEGdHurqQMtKY3%cx9>k-I^bgD^8TzxPfihKq`yKh0?JFHVdMfCJm@w#$dV<}NSCtcGm&rfB`M6$ qV2i#6`7h|pd<&8sOk3SMM5i2l1@i4s!sMbm%$B^An_cu5p#KGbvq1#_ literal 0 HcmV?d00001 From 883e9d1bbfb3c55c93e42897ab2c4e42ba698920 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 6 Dec 2023 12:56:41 -0500 Subject: [PATCH 606/751] Ignore urllib3 CVE-2023-45803 Same as the last one, we're not concerned with malicious redirects. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index bdda3627a..e7c170901 100644 --- a/Makefile +++ b/Makefile @@ -144,6 +144,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities && safety check --full-report \ --ignore 51668 \ --ignore 61601 \ + --ignore 61893 \ -r $$req_file \ && echo -e '\n' \ || exit 1; \ From 363506479938c7e4bc078e705f4343b50d7cf0e6 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 6 Dec 2023 13:00:35 -0500 Subject: [PATCH 607/751] Ignore CVE-2023-5752 in pip We don't install dependencies from mercurial repositories. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index e7c170901..57fadba98 100644 --- a/Makefile +++ b/Makefile @@ -145,6 +145,7 @@ safety: ## Runs `safety check` to check python dependencies for vulnerabilities --ignore 51668 \ --ignore 61601 \ --ignore 61893 \ + --ignore 62044 \ -r $$req_file \ && echo -e '\n' \ || exit 1; \ From 9c8d083ae417fe082ae1b948f4da96690bf8a583 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 7 Nov 2023 17:23:28 -0500 Subject: [PATCH 608/751] WIP: Migrate dependency management to poetry Switch dependency management to use poetry, which is much nicer than pip-tools. This is largely based off of and applies the same changes to the Makefile and CI. The main difference is that we install PyQt5 via system packages, so the two versions we specifically need are listed in pyproject.toml and vary on the Python versions shipped with bullseye and bookworm. We also don't actually need the pathlib2 dependency any more because our Python version is high enough, so it's dropped now that poetry is smart enough to detect it! --- .circleci/config.yml | 96 +- Makefile | 101 +- ...requirements.txt => build-requirements.txt | 1 - poetry.lock | 2413 +++++++++++++++++ pyproject.toml | 54 + requirements/dev-bookworm-requirements.in | 3 - requirements/dev-bookworm-requirements.txt | 1345 --------- requirements/dev-bullseye-requirements.in | 3 - requirements/dev-bullseye-requirements.txt | 1361 ---------- requirements/dev-mac-requirements.in | 2 - requirements/dev-sdw-requirements.in | 30 - requirements/dev-sdw-requirements.txt | 1329 --------- requirements/requirements.in | 16 - requirements/requirements.txt | 143 - run.sh | 4 +- scripts/codename | 14 - test-functional.sh | 2 +- 17 files changed, 2529 insertions(+), 4388 deletions(-) rename requirements/build-requirements.txt => build-requirements.txt (94%) create mode 100644 poetry.lock delete mode 100644 requirements/dev-bookworm-requirements.in delete mode 100644 requirements/dev-bookworm-requirements.txt delete mode 100644 requirements/dev-bullseye-requirements.in delete mode 100644 requirements/dev-bullseye-requirements.txt delete mode 100644 requirements/dev-mac-requirements.in delete mode 100644 requirements/dev-sdw-requirements.in delete mode 100644 requirements/dev-sdw-requirements.txt delete mode 100644 requirements/requirements.in delete mode 100644 requirements/requirements.txt delete mode 100755 scripts/codename diff --git a/.circleci/config.yml b/.circleci/config.yml index 357b6437f..c7ee1e2c3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,11 +1,30 @@ --- common-steps: + - &install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + - &install_testing_dependencies run: name: Install testing dependencies command: | set -e apt update && apt install -y git gnupg libarchive13 libmagic1 libqt5x11extras5 make python3-tk python3-dev gnupg python3-venv sqlite3 xvfb + poetry install --no-ansi - &configure_locales run: @@ -21,17 +40,12 @@ common-steps: run: name: Install build dependencies command: | - set -e apt update && apt install -y git make sudo - &run_unit_tests run: name: Install requirements and run unit tests command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata make test-random @@ -39,10 +53,6 @@ common-steps: run: name: Install requirements and run integration tests command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata make test-integration @@ -50,10 +60,6 @@ common-steps: run: name: Install requirements and run functional tests command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata make test-functional @@ -61,50 +67,30 @@ common-steps: run: name: Run lint, type checking, code formatting command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make check-black check-isort lint mypy - &check_security run: name: Run static analysis on source code to find security issues command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make semgrep bandit - &check_source_strings run: name: Check that source strings are updated command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make check-strings - &check_mo_repro run: name: Check that translation machine objects are reproducible command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make verify-mo - &check_python_dependencies_for_vulnerabilities run: name: Check Python dependencies for known vulnerabilities command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate make safety - &install_packaging_dependencies @@ -119,6 +105,7 @@ common-steps: cd securedrop-builder apt-get update && apt-get install -y sudo make make install-deps + source .venv/bin/activate PKG_DIR=~/project make requirements - &check_packaging_requirements @@ -129,17 +116,6 @@ common-steps: # Fail if unstaged changes exist that are not comments (after `make requirements` in the previous run step). git diff --ignore-matching-lines=# --exit-code - - &check_testing_requirements - run: - name: Ensure that the same Python requirements are used for development/testing and production. - command: | - set -e - export VERSION_CODENAME=$(~/project/scripts/codename) - make venv - source .venv/bin/activate - make requirements - git diff --exit-code requirements/dev-${VERSION_CODENAME}-requirements.txt - - &build_debian_package run: name: Build debian package @@ -149,6 +125,7 @@ common-steps: cd ~/packaging/securedrop-builder export PKG_VERSION=1000.0 export PKG_PATH=~/project/ + source .venv/bin/activate make securedrop-client version: 2.1 @@ -171,9 +148,10 @@ jobs: parameters: *parameters docker: *docker steps: + - *install_poetry + - checkout - *install_testing_dependencies - *configure_locales - - checkout - *run_unit_tests - store_test_results: path: test-results @@ -182,40 +160,45 @@ jobs: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *run_integration_tests functional-test: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *run_functional_tests lint: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *run_lint check-security: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *check_security check-python-security: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *check_python_dependencies_for_vulnerabilities @@ -223,19 +206,12 @@ jobs: parameters: *parameters docker: *docker steps: - - *install_testing_dependencies + - *install_poetry - checkout + - *install_testing_dependencies - *check_source_strings - *check_mo_repro - check-testing-requirements: - parameters: *parameters - docker: *docker - steps: - - *install_testing_dependencies - - checkout - - *check_testing_requirements - workflows: securedrop_client_ci: jobs: &jobs @@ -251,8 +227,6 @@ workflows: matrix: *matrix - lint: matrix: *matrix - - check-testing-requirements: - matrix: *matrix - check-security: matrix: *matrix - check-python-security: diff --git a/Makefile b/Makefile index 57fadba98..3b78b3e31 100644 --- a/Makefile +++ b/Makefile @@ -7,34 +7,6 @@ all: help PYTHON := $(if $(shell bash -c "command -v python3.9"), python3.9, python3) VERSION_CODENAME ?= bullseye -.PHONY: venv -venv: hooks ## Provision a Python 3 virtualenv for development on Linux - $(PYTHON) -m venv .venv - .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r "requirements/dev-${VERSION_CODENAME}-requirements.txt" - @echo "#################" - @echo "Make sure to run: source .venv/bin/activate" - -.PHONY: venv-sdw -venv-sdw: hooks ## Provision a Python 3 virtualenv for development on a prod-like system that has installed dependencies specified in https://github.com/freedomofpress/securedrop-builder/blob/main/securedrop-client/debian/control - $(PYTHON) -m venv .venv --system-site-packages - .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r "requirements/dev-sdw-requirements.txt" - @echo "#################" - @echo "Virtualenv with Debian system-packages is complete." - @echo "Make sure to install the apt packages for system Qt." - @echo "Then run: source .venv/bin/activate" - -.PHONY: venv-mac -venv-mac: hooks ## Provision a Python 3 virtualenv for development on macOS - $(PYTHON) -m venv .venv - .venv/bin/pip install --upgrade pip wheel - # There are no M1/arm wheels for the version of PyQt5 we require, and - # unfortunately it also doesn't compile. So we're forcing x86_64 mode here - arch -x86_64 .venv/bin/pip install -r "requirements/dev-mac-requirements.in" - @echo "#################" - @echo "Make sure to run: source .venv/bin/activate" - HOOKS_DIR=.githooks .PHONY: hooks @@ -49,40 +21,40 @@ semgrep:semgrep-community semgrep-local ## Run semgrep with both semgrep.dev co .PHONY: semgrep-community semgrep-community: @echo "Running semgrep with semgrep.dev community rules..." - @semgrep $(SEMGREP_FLAGS) --config "p/r2c-security-audit" + @poetry run semgrep $(SEMGREP_FLAGS) --config "p/r2c-security-audit" .PHONY: semgrep-local semgrep-local: @echo "Running semgrep with local rules..." - @semgrep $(SEMGREP_FLAGS) --config ".semgrep" + @poetry run semgrep $(SEMGREP_FLAGS) --config ".semgrep" .PHONY: black black: ## Format Python source code with black - @black \ + @poetry run black \ ./ \ scripts/*.py .PHONY: check-black check-black: ## Check Python source code formatting with black - @black --check --diff \ + @poetry run black --check --diff \ ./ \ scripts/*.py .PHONY: isort isort: ## Run isort to organize Python imports - @isort --skip-glob .venv \ + @poetry run isort --skip-glob .venv \ ./ \ scripts/*.py .PHONY: check-isort check-isort: ## Check Python import organization with isort - @isort --skip-glob .venv --check-only --diff \ + @poetry run isort --skip-glob .venv --check-only --diff \ ./ scripts \ /*.py .PHONY: mypy mypy: ## Run static type checker - @mypy --ignore-missing-imports \ + @poetry run mypy --ignore-missing-imports \ --disallow-incomplete-defs \ --disallow-untyped-defs \ --show-error-codes \ @@ -108,7 +80,7 @@ RANDOM_SEED ?= $(shell bash -c 'echo $$RANDOM') .PHONY: test test: ## Run the application tests in parallel (for rapid development) - @TEST_CMD="python -m pytest -v -n 4 --ignore=$(FTESTS) --ignore=$(ITESTS) $(TESTOPTS) $(TESTS)" ; \ + @TEST_CMD="poetry run pytest -v -n 4 --ignore=$(FTESTS) --ignore=$(ITESTS) $(TESTOPTS) $(TESTS)" ; \ source scripts/setup-tmp-directories.sh; \ if command -v xvfb-run > /dev/null; then \ xvfb-run -a $$TEST_CMD ; else \ @@ -116,14 +88,14 @@ test: ## Run the application tests in parallel (for rapid development) .PHONY: test-random test-random: ## Run the application tests in random order - @TEST_CMD="python -m pytest -v --junitxml=test-results/junit.xml --random-order-bucket=global --ignore=$(FTESTS) --ignore=$(ITESTS) $(TESTOPTS) $(TESTS)" ; \ + @TEST_CMD="poetry run pytest -v --junitxml=test-results/junit.xml --random-order-bucket=global --ignore=$(FTESTS) --ignore=$(ITESTS) $(TESTOPTS) $(TESTS)" ; \ if command -v xvfb-run > /dev/null; then \ xvfb-run -a $$TEST_CMD ; else \ $$TEST_CMD ; fi .PHONY: test-integration test-integration: ## Run the integration tests - @TEST_CMD="python -m pytest -v -n 4 $(ITESTS)" ; \ + @TEST_CMD="poetry run pytest -v -n 4 $(ITESTS)" ; \ if command -v xvfb-run > /dev/null; then \ xvfb-run -a $$TEST_CMD ; else \ $$TEST_CMD ; fi @@ -134,52 +106,27 @@ test-functional: ## Run the functional tests .PHONY: lint lint: ## Run the linters - @flake8 securedrop_client tests + @poetry run flake8 securedrop_client tests .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities - pip install --upgrade safety && \ - for req_file in `find . -type f -wholename '*requirements.txt'`; do \ - echo "Checking file $$req_file" \ - && safety check --full-report \ - --ignore 51668 \ - --ignore 61601 \ - --ignore 61893 \ - --ignore 62044 \ - -r $$req_file \ - && echo -e '\n' \ - || exit 1; \ - done + @echo "Checking build-requirements.txt with safety" + @poetry run safety check --full-report \ + --ignore 51668 \ + --ignore 61601 \ + --ignore 61893 \ + --ignore 62044 \ + -r build-requirements.txt # Bandit is a static code analysis tool to detect security vulnerabilities in Python applications # https://wiki.openstack.org/wiki/Security/Projects/Bandit .PHONY: bandit bandit: ## Run bandit with medium level excluding test-related folders - pip install --upgrade pip && \ - pip install --upgrade bandit && \ - bandit -ll --recursive . --exclude ./tests,./.venv + @poetry run bandit -ll --recursive . --exclude ./tests,./.venv .PHONY: check check: clean check-black check-isort semgrep bandit lint mypy test-random test-integration test-functional ## Run the full CI test suite -.PHONY: dev-requirements -dev-requirements: ## Update dev-*requirements.txt files if pinned versions do not comply with the dependency specifications in dev-*requirements.in - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-sdw-requirements.txt requirements/dev-sdw-requirements.in - -.PHONY: update-dev-dependencies -update-dev-dependencies: ## Update dev requirements in case there are newer versions of packages or updates to prod dependencies - if test -f "requirements/dev-bullseye-requirements.txt"; then rm -r requirements/dev-bullseye-requirements.txt; fi - if test -f "requirements/dev-bookworm-requirements.txt"; then rm -r requirements/dev-bookworm-requirements.txt; fi - if test -f "requirements/dev-sdw-requirements.txt"; then rm -r requirements/dev-sdw-requirements.txt; fi - $(MAKE) dev-requirements - -.PHONY: requirements -requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in - pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) dev-requirements - # Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets @@ -197,7 +144,7 @@ help: ## Print this message and exit. .PHONY: version version: - @python -c "import securedrop_client; print(securedrop_client.__version__)" + @poetry run python -c "import securedrop_client; print(securedrop_client.__version__)" .PHONY: docs @@ -215,12 +162,12 @@ docs: ## Generate browsable documentation and call/caller graphs (requires Doxy LOCALE_DIR=securedrop_client/locale POT=${LOCALE_DIR}/messages.pot -VERSION=$(shell python -c "import securedrop_client; print(securedrop_client.__version__)") +VERSION=$(shell poetry run python -c "import securedrop_client; print(securedrop_client.__version__)") .PHONY: check-strings check-strings: ## Check that the translation catalog is up to date with source code @make extract-strings - @git diff --quiet ${LOCALE_DIR} || { echo "Translation catalog is out of date. Please run \"make extract-strings\" and commit the changes."; exit 1; } + @git diff --exit-code ${LOCALE_DIR} || { echo "Translation catalog is out of date. Please run \"make extract-strings\" and commit the changes."; exit 1; } .PHONY: extract-strings extract-strings: ## Extract translatable strings from source code @@ -230,7 +177,7 @@ extract-strings: ## Extract translatable strings from source code $(POT): securedrop_client @echo "updating catalog template: $@" @mkdir -p ${LOCALE_DIR} - @pybabel extract \ + @poetry run pybabel extract \ -F babel.cfg \ --charset=utf-8 \ --output=${POT} \ @@ -247,6 +194,6 @@ $(POT): securedrop_client .PHONY: verify-mo verify-mo: ## Verify that all gettext machine objects (.mo) are reproducible from their catalogs (.po). - @TERM=dumb scripts/verify-mo.py ${LOCALE_DIR}/* + @TERM=dumb poetry run scripts/verify-mo.py ${LOCALE_DIR}/* @# All good; now clean up. @git restore "${LOCALE_DIR}/**/*.po" diff --git a/requirements/build-requirements.txt b/build-requirements.txt similarity index 94% rename from requirements/build-requirements.txt rename to build-requirements.txt index c972a0a2d..7f06b45c7 100644 --- a/requirements/build-requirements.txt +++ b/build-requirements.txt @@ -6,7 +6,6 @@ idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9 jinja2==3.0.2 --hash=sha256:d8075dbbb594058c565a74b6ca2b6a1822c9cdd949400b747f87ec004edca036 mako==1.2.2 --hash=sha256:f61384bcc80318821d1116891a82bb0ff18a9a4035c7c4eff72aced45ab590b5 markupsafe==2.0.1 --hash=sha256:e61445980f0dcd584d728844d8ad516c9e460bd71f53c14c0269d73de6fba6be --hash=sha256:9a055a175f351a559937fb80ebb2885d005283577a016c0139817e261fb759eb -pathlib2==2.3.2 --hash=sha256:90173e12465846173da76c62892b238c14a2a0e17aae580933041004fc01b713 python-dateutil==2.7.5 --hash=sha256:2961735b604e5165d923a4e39b9bcbde6a4c363f257f5477b6339459fd7c1679 python-editor==1.0.3 --hash=sha256:42e5b2a7583cd278dff00ae1fc6b8b735da0502ceeb0914991eaaf5f91ac84ac requests==2.31.0 --hash=sha256:9f7f0f507fe7a9e10ea51e666da60aafcfcda94c71f0cac477dbadd8d25de49f diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..b22bfda8d --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2413 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "alembic" +version = "1.1.0" +description = "A database migration tool for SQLAlchemy." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "alembic-1.1.0.tar.gz", hash = "sha256:4a4811119efbdc5259d1f4c8f6de977b36ad3bcc919f59a29c2960c5ef9149e4"}, +] + +[package.dependencies] +Mako = "*" +python-dateutil = "*" +python-editor = ">=0.3" +SQLAlchemy = ">=1.1.0" + +[[package]] +name = "arrow" +version = "0.12.1" +description = "Better dates and times for Python" +optional = false +python-versions = "*" +files = [ + {file = "arrow-0.12.1.tar.gz", hash = "sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd"}, +] + +[package.dependencies] +python-dateutil = "*" + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[[package]] +name = "bandit" +version = "1.7.5" +description = "Security oriented static analyser for python code." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, + {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +rich = "*" +stevedore = ">=1.20.0" + +[package.extras] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] + +[[package]] +name = "black" +version = "23.10.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, + {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, + {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, + {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, + {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, + {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, + {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, + {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, + {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, + {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, + {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "boltons" +version = "21.0.0" +description = "When they're not builtins, they're boltons." +optional = false +python-versions = "*" +files = [ + {file = "boltons-21.0.0-py2.py3-none-any.whl", hash = "sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b"}, + {file = "boltons-21.0.0.tar.gz", hash = "sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13"}, +] + +[[package]] +name = "bracex" +version = "2.4" +description = "Bash style brace expander." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"}, + {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"}, +] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "2.0.4" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.5.0" +files = [ + {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, + {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, +] + +[package.extras] +unicode-backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-option-group" +version = "0.5.6" +description = "Option groups missing in Click" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777"}, + {file = "click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7"}, +] + +[package.dependencies] +Click = ">=7.0,<9" + +[package.extras] +docs = ["Pallets-Sphinx-Themes", "m2r2", "sphinx"] +tests = ["pytest"] +tests-cov = ["coverage", "coveralls", "pytest", "pytest-cov"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.3.2" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "diffoscope" +version = "251" +description = "in-depth comparison of files, archives, and directories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "diffoscope-251.tar.gz", hash = "sha256:c9ba2fc24379b2ba4457dc7be6970884cc2ee94c20d44f3889c2a4741e6178d3"}, +] + +[package.dependencies] +libarchive-c = "*" +python-magic = "*" + +[package.extras] +cmdline = ["argcomplete", "progressbar"] +comparators = ["androguard", "binwalk", "defusedxml", "guestfs", "jsondiff", "pypdf", "python-debian", "pyxattr", "rpm-python", "tlsh"] +distro-detection = ["distro"] + +[[package]] +name = "dparse" +version = "0.6.3" +description = "A parser for Python dependency files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, + {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, +] + +[package.dependencies] +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +conda = ["pyyaml"] +pipenv = ["pipenv (<=2022.12.19)"] + +[[package]] +name = "easyprocess" +version = "1.1" +description = "Easy to use Python subprocess interface." +optional = false +python-versions = "*" +files = [ + {file = "EasyProcess-1.1-py3-none-any.whl", hash = "sha256:82eed523a0a5eb12a81fa4eacd9f342caeb3f900eb4b798740e6696ad07e63f9"}, + {file = "EasyProcess-1.1.tar.gz", hash = "sha256:885898302a57aab948973e8b5d32a4229392b9fb2d986ab1d4ffd590e5ba90ec"}, +] + +[[package]] +name = "entrypoint2" +version = "1.1" +description = "easy to use command-line interface for python modules" +optional = false +python-versions = "*" +files = [ + {file = "entrypoint2-1.1-py2.py3-none-any.whl", hash = "sha256:eeb8c327bdb65cdd1668c023a6b110b7e3d1a046fb05e043861ebd9264b3a257"}, + {file = "entrypoint2-1.1.tar.gz", hash = "sha256:fc0b7fe7b21acdab47a585ab9407ca7e5c4f96cb6888575db6b0ceb91f0e105a"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "execnet" +version = "2.0.2" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.7" +files = [ + {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, + {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + +[[package]] +name = "face" +version = "22.0.0" +description = "A command-line application framework (and CLI parser). Friendly for users, full-featured for developers." +optional = false +python-versions = "*" +files = [ + {file = "face-22.0.0-py3-none-any.whl", hash = "sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35"}, + {file = "face-22.0.0.tar.gz", hash = "sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d"}, +] + +[package.dependencies] +boltons = ">=20.0.0" + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "flaky" +version = "3.7.0" +description = "Plugin for nose or pytest that automatically reruns flaky tests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "flaky-3.7.0-py2.py3-none-any.whl", hash = "sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c"}, + {file = "flaky-3.7.0.tar.gz", hash = "sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d"}, +] + +[[package]] +name = "gitdb" +version = "4.0.11" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.40" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + +[[package]] +name = "glom" +version = "22.1.0" +description = "A declarative object transformer and formatter, for conglomerating nested data." +optional = false +python-versions = "*" +files = [ + {file = "glom-22.1.0-py2.py3-none-any.whl", hash = "sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772"}, + {file = "glom-22.1.0.tar.gz", hash = "sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5"}, +] + +[package.dependencies] +attrs = "*" +boltons = ">=19.3.0" +face = ">=20.1.0" + +[package.extras] +yaml = ["PyYAML"] + +[[package]] +name = "idna" +version = "3.2" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, + {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "jeepney" +version = "0.8.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, + {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, +] + +[package.extras] +test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["async_generator", "trio"] + +[[package]] +name = "jinja2" +version = "3.0.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"}, + {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jsonschema" +version = "4.19.2" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + +[[package]] +name = "libarchive-c" +version = "5.0" +description = "Python interface to libarchive" +optional = false +python-versions = "*" +files = [ + {file = "libarchive-c-5.0.tar.gz", hash = "sha256:d673f56673d87ec740d1a328fa205cafad1d60f5daca4685594deb039d32b159"}, + {file = "libarchive_c-5.0-py2.py3-none-any.whl", hash = "sha256:3ed7ee9b7d7d6fc200aecce63cee2084754cb6c00e946f6d007b80236e662bff"}, +] + +[[package]] +name = "lxml" +version = "4.9.3" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, + {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=0.29.35)"] + +[[package]] +name = "mako" +version = "1.2.2" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Mako-1.2.2-py3-none-any.whl", hash = "sha256:8efcb8004681b5f71d09c983ad5a9e6f5c40601a6ec469148753292abc0da534"}, + {file = "Mako-1.2.2.tar.gz", hash = "sha256:3724869b363ba630a272a5f89f68c070352137b8fd1757650017b7e06fda163f"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.6" +files = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mouseinfo" +version = "0.1.3" +description = "An application to display XY position and RGB color information for the pixel currently under the mouse. Works on Python 2 and 3." +optional = false +python-versions = "*" +files = [ + {file = "MouseInfo-0.1.3.tar.gz", hash = "sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7"}, +] + +[package.dependencies] +pyperclip = "*" +python3-Xlib = {version = "*", markers = "platform_system == \"Linux\" and python_version >= \"3.0\""} +rubicon-objc = {version = "*", markers = "platform_system == \"Darwin\""} + +[[package]] +name = "mss" +version = "9.0.1" +description = "An ultra fast cross-platform multiple screenshots module in pure python using ctypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mss-9.0.1-py3-none-any.whl", hash = "sha256:7ee44db7ab14cbea6a3eb63813c57d677a109ca5979d3b76046e4bddd3ca1a0b"}, + {file = "mss-9.0.1.tar.gz", hash = "sha256:6eb7b9008cf27428811fa33aeb35f3334db81e3f7cc2dd49ec7c6e5a94b39f12"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "mypy" +version = "1.6.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + +[[package]] +name = "pbr" +version = "6.0.0" +description = "Python Build Reasonableness" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, +] + +[[package]] +name = "peewee" +version = "3.17.0" +description = "a little orm" +optional = false +python-versions = "*" +files = [ + {file = "peewee-3.17.0.tar.gz", hash = "sha256:3a56967f28a43ca7a4287f4803752aeeb1a57a08dee2e839b99868181dfb5df8"}, +] + +[[package]] +name = "pillow" +version = "10.1.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "platformdirs" +version = "3.11.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "polib" +version = "1.2.0" +description = "A library to manipulate gettext files (po and mo files)." +optional = false +python-versions = "*" +files = [ + {file = "polib-1.2.0-py2.py3-none-any.whl", hash = "sha256:1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d"}, + {file = "polib-1.2.0.tar.gz", hash = "sha256:f3ef94aefed6e183e342a8a269ae1fc4742ba193186ad76f175938621dbfc26b"}, +] + +[[package]] +name = "pyautogui" +version = "0.9.54" +description = "PyAutoGUI lets Python control the mouse and keyboard, and other GUI automation tasks. For Windows, macOS, and Linux, on Python 3 and 2." +optional = false +python-versions = "*" +files = [ + {file = "PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2"}, +] + +[package.dependencies] +mouseinfo = "*" +pygetwindow = ">=0.0.5" +pymsgbox = "*" +pyobjc-core = {version = "*", markers = "platform_system == \"Darwin\""} +pyobjc-framework-quartz = {version = "*", markers = "platform_system == \"Darwin\""} +pyscreeze = ">=0.1.21" +python3-Xlib = {version = "*", markers = "platform_system == \"Linux\" and python_version >= \"3.0\""} +pytweening = ">=1.0.4" + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "pygetwindow" +version = "0.0.9" +description = "A simple, cross-platform module for obtaining GUI information on application's windows." +optional = false +python-versions = "*" +files = [ + {file = "PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688"}, +] + +[package.dependencies] +pyrect = "*" + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pymsgbox" +version = "1.0.9" +description = "A simple, cross-platform, pure Python module for JavaScript-like message boxes." +optional = false +python-versions = "*" +files = [ + {file = "PyMsgBox-1.0.9.tar.gz", hash = "sha256:2194227de8bff7a3d6da541848705a155dcbb2a06ee120d9f280a1d7f51263ff"}, +] + +[[package]] +name = "pyobjc-core" +version = "10.0" +description = "Python<->ObjC Interoperability Module" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-core-10.0.tar.gz", hash = "sha256:3dd0a7b3acd7e0b8ffd3f5331b29a3aaebe79a03323e61efeece38627a6020b3"}, + {file = "pyobjc_core-10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:61ea5112a672d21b5b0ed945778707c655b17c400672aef144705674c4b95499"}, + {file = "pyobjc_core-10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:99b72cda4593e0c66037b25a178f2bcc6efffb6d5d9dcd477ecca859a1f9ae8e"}, + {file = "pyobjc_core-10.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2843ca32e86a01ccee67d7ad82a325ddd72d754929d1f2c0d96bc8741dc9af09"}, + {file = "pyobjc_core-10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a886b9d2a93210cab4ae72601ab005ca6f627fa2f0cc62c43c03ef1405067a11"}, + {file = "pyobjc_core-10.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:166666b5c380a49e8aa1ad1dda978c581e29a00703d82203216f3c65a3f397a4"}, + {file = "pyobjc_core-10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:198a0360f64e4c0148eed07b42d1de0545f56c498c356d1d5524422bb3352907"}, +] + +[[package]] +name = "pyobjc-framework-cocoa" +version = "10.0" +description = "Wrappers for the Cocoa frameworks on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Cocoa-10.0.tar.gz", hash = "sha256:723421eff4f59e4ca9a9bb8ec6dafbc0f778141236fa85a49fdd86732d58a74c"}, + {file = "pyobjc_framework_Cocoa-10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:80c22a8fc7f085746d9cd222adeca8fe6790e3e6ad7eed5fc70b32aa87c10adb"}, + {file = "pyobjc_framework_Cocoa-10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0187cba228976a45f41116c74aab079b64bacb3ffc3c886a4bd8e472bf9be581"}, + {file = "pyobjc_framework_Cocoa-10.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a81dabdc40268591e3196087388e680c6570fed1b521df9b04733cb3ece0414e"}, + {file = "pyobjc_framework_Cocoa-10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a23db9ab99e338e1d8a268d873cc15408f78cec9946308393ca2241820c18b8"}, + {file = "pyobjc_framework_Cocoa-10.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a3c66fe56a5156a818fbf056c589f8140a5fdb1dcb1f1075cb34d3755474d900"}, + {file = "pyobjc_framework_Cocoa-10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bf9020e85ead569021b15272dcd90207aab6c754093f520b11d4210a2efbdd06"}, +] + +[package.dependencies] +pyobjc-core = ">=10.0" + +[[package]] +name = "pyobjc-framework-quartz" +version = "10.0" +description = "Wrappers for the Quartz frameworks on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Quartz-10.0.tar.gz", hash = "sha256:ff7c938d9c8adff87d577d63e58f9be6e4bc75274384715fa7a20032a1ce8b0e"}, + {file = "pyobjc_framework_Quartz-10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f06be24fdd2112c9f5b96ede54ec48ad7623e107b85ebbd5b4155d0b1da4d45f"}, + {file = "pyobjc_framework_Quartz-10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:52848a5e283a508c6895a73cb0c950bd4dca9b1186b70dd73ddc8f436d64fd42"}, + {file = "pyobjc_framework_Quartz-10.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f0cc89890de411a341e90d2c4148831b6d241fca66e734b5470d27869c04e33c"}, + {file = "pyobjc_framework_Quartz-10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc8d6edcdb0bb3dab4dbe6e6a6d420c28aa0caca53715a3e49d7f299601a723f"}, + {file = "pyobjc_framework_Quartz-10.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:c4b03fade2c4aff2682cd5eae8469f3f15e089c7dd09641e24e5b54d015edfae"}, + {file = "pyobjc_framework_Quartz-10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6975be7f776ad4c3a41655b90d67e45a9c7fa2d715b189d8599e8d227f790280"}, +] + +[package.dependencies] +pyobjc-core = ">=10.0" +pyobjc-framework-Cocoa = ">=10.0" + +[[package]] +name = "pyperclip" +version = "1.8.2" +description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" +optional = false +python-versions = "*" +files = [ + {file = "pyperclip-1.8.2.tar.gz", hash = "sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57"}, +] + +[[package]] +name = "pyqt5" +version = "5.15.2" +description = "Python bindings for the Qt cross platform application toolkit" +optional = false +python-versions = ">=3.5" +files = [ + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-macosx_10_13_intel.whl", hash = "sha256:894ca4ae767a8d6cf5903784b71f755073c78cb8c167eecf6e4ed6b3b055ac6a"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:29889845688a54d62820585ad5b2e0200a36b304ff3d7a555e95599f110ba4ce"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win32.whl", hash = "sha256:ea24f24b7679bf393dd2e4f53fe0ce65021be18304c1ff7a226c2fc5c356d0da"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl", hash = "sha256:faaecb76ec65e12673a968e7f5bc02495957e6996f0a3fa0d98895f9e4113746"}, + {file = "PyQt5-5.15.2.tar.gz", hash = "sha256:372b08dc9321d1201e4690182697c5e7ffb2e0770e6b4a45519025134b12e4fc"}, +] + +[package.dependencies] +PyQt5-sip = ">=12.8,<13" + +[[package]] +name = "pyqt5" +version = "5.15.8" +description = "Python bindings for the Qt cross platform application toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyQt5-5.15.8-cp37-abi3-macosx_10_13_x86_64.whl", hash = "sha256:c6ee352bef5ef6392039db2d09a376908ca6ed34d1892bfe8be08e28e1992a89"}, + {file = "PyQt5-5.15.8-cp37-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:85f72addcf430b958e156fe90b975aec5c2dfe0a53f5b13c69e072de989000f7"}, + {file = "PyQt5-5.15.8-cp37-abi3-win32.whl", hash = "sha256:7daa668d2c36b62da8fb3b68670b70455dba659fe5006400222280d6153dc035"}, + {file = "PyQt5-5.15.8-cp37-abi3-win_amd64.whl", hash = "sha256:e812ff1f9b994f592392f764246372d29dd3e8d800087064cab47109d9aad1f7"}, + {file = "PyQt5-5.15.8.tar.gz", hash = "sha256:bc85e3efb9135c56c8b88157c8825005fb7cd0f14babd93976778aae82eda360"}, +] + +[package.dependencies] +PyQt5-Qt5 = ">=5.15.2" +PyQt5-sip = ">=12.11,<13" + +[[package]] +name = "pyqt5-qt5" +version = "5.15.2" +description = "The subset of a Qt installation needed by PyQt5." +optional = false +python-versions = "*" +files = [ + {file = "PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154"}, + {file = "PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a"}, + {file = "PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327"}, + {file = "PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962"}, +] + +[[package]] +name = "pyqt5-sip" +version = "12.8.1" +description = "The sip module support for PyQt5" +optional = false +python-versions = ">=3.5" +files = [ + {file = "PyQt5_sip-12.8.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:bb5a87b66fc1445915104ee97f7a20a69decb42f52803e3b0795fa17ff88226c"}, + {file = "PyQt5_sip-12.8.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a29e2ac399429d3b7738f73e9081e50783e61ac5d29344e0802d0dcd6056c5a2"}, + {file = "PyQt5_sip-12.8.1-cp35-cp35m-win32.whl", hash = "sha256:0304ca9114b9817a270f67f421355075b78ff9fc25ac58ffd72c2601109d2194"}, + {file = "PyQt5_sip-12.8.1-cp35-cp35m-win_amd64.whl", hash = "sha256:84ba7746762bd223bed22428e8561aa267a229c28344c2d28c5d5d3f8970cffb"}, + {file = "PyQt5_sip-12.8.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:7b81382ce188d63890a0e35abe0f9bb946cabc873a31873b73583b0fc84ac115"}, + {file = "PyQt5_sip-12.8.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b6d42250baec52a5f77de64e2951d001c5501c3a2df2179f625b241cbaec3369"}, + {file = "PyQt5_sip-12.8.1-cp36-cp36m-win32.whl", hash = "sha256:6c1ebee60f1d2b3c70aff866b7933d8d8d7646011f7c32f9321ee88c290aa4f9"}, + {file = "PyQt5_sip-12.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:34dcd29be47553d5f016ff86e89e24cbc5eebae92eb2f96fb32d2d7ba028c43c"}, + {file = "PyQt5_sip-12.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed897c58acf4a3cdca61469daa31fe6e44c33c6c06a37c3f21fab31780b3b86a"}, + {file = "PyQt5_sip-12.8.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a1b8ef013086e224b8e86c93f880f776d01b59195bdfa2a8e0b23f0480678fec"}, + {file = "PyQt5_sip-12.8.1-cp37-cp37m-win32.whl", hash = "sha256:0cd969be528c27bbd4755bd323dff4a79a8fdda28215364e6ce3e069cb56c2a9"}, + {file = "PyQt5_sip-12.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c9800729badcb247765e4ffe2241549d02da1fa435b9db224845bc37c3e99cb0"}, + {file = "PyQt5_sip-12.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9312ec47cac4e33c11503bc1cbeeb0bdae619620472f38e2078c5a51020a930f"}, + {file = "PyQt5_sip-12.8.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2f35e82fd7ec1e1f6716e9154721c7594956a4f5bd4f826d8c6a6453833cc2f0"}, + {file = "PyQt5_sip-12.8.1-cp38-cp38-win32.whl", hash = "sha256:da9c9f1e65b9d09e73bd75befc82961b6b61b5a3b9d0a7c832168e1415f163c6"}, + {file = "PyQt5_sip-12.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:832fd60a264de4134c2824d393320838f3ab648180c9c357ec58a74524d24507"}, + {file = "PyQt5_sip-12.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c317ab1263e6417c498b81f5c970a9b1af7acefab1f80b4cc0f2f8e661f29fc5"}, + {file = "PyQt5_sip-12.8.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:c9d6d448c29dc6606bb7974696608f81f4316c8234f7c7216396ed110075e777"}, + {file = "PyQt5_sip-12.8.1-cp39-cp39-win32.whl", hash = "sha256:5a011aeff89660622a6d5c3388d55a9d76932f3b82c95e82fc31abd8b1d2990d"}, + {file = "PyQt5_sip-12.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:f168f0a7f32b81bfeffdf003c36f25d81c97dee5eb67072a5183e761fe250f13"}, + {file = "PyQt5_sip-12.8.1.tar.gz", hash = "sha256:30e944db9abee9cc757aea16906d4198129558533eb7fadbe48c5da2bd18e0bd"}, +] + +[[package]] +name = "pyqt5-sip" +version = "12.11.1" +description = "The sip module support for PyQt5" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyQt5_sip-12.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a40a39a6136a90e10c31510295c2be924564fc6260691501cdde669bdc5edea5"}, + {file = "PyQt5_sip-12.11.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:19b06164793177146c7f7604fe8389f44221a7bde196f2182457eb3e4229fa88"}, + {file = "PyQt5_sip-12.11.1-cp310-cp310-win32.whl", hash = "sha256:3afb1d1c07adcfef5c8bb12356a2ec2ec094f324af4417735d43b1ecaf1bb1a4"}, + {file = "PyQt5_sip-12.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:54dad6c2e5dab14e46f6822a889bbb1515bbd2061762273af10d26566d649bd9"}, + {file = "PyQt5_sip-12.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7218f6a1cefeb0b2fc26b89f15011f841aa4cd77786ccd863bf9792347fa38a8"}, + {file = "PyQt5_sip-12.11.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6b1113538082a7dd63b908587f61ce28ba4c7b8341e801fdf305d53a50a878ab"}, + {file = "PyQt5_sip-12.11.1-cp311-cp311-win32.whl", hash = "sha256:ac5f7ed06213d3bb203e33037f7c1a0716584c21f4f0922dcc044750e3659b80"}, + {file = "PyQt5_sip-12.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:4f0497e2f5eeaea9f5a67b0e55c501168efa86df4e53aace2a46498b87bc55c1"}, + {file = "PyQt5_sip-12.11.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b355d56483edc79dcba30be947a6b700856bb74beb90539e14cc4d92b9bad152"}, + {file = "PyQt5_sip-12.11.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dd163d9cffc4a56ebb9dd6908c0f0cb0caff8080294d41f4fb60fc3be63ca434"}, + {file = "PyQt5_sip-12.11.1-cp37-cp37m-win32.whl", hash = "sha256:b714f550ea6ddae94fd7acae531971e535f4a4e7277b62eb44e7c649cf3f03d0"}, + {file = "PyQt5_sip-12.11.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d09b2586235deab7a5f2e28e4bde9a70c0b3730fa84f2590804a9932414136a3"}, + {file = "PyQt5_sip-12.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a6f9c058564d0ac573561036299f54c452ae78b7d2a65d7c2d01685e6dca50d"}, + {file = "PyQt5_sip-12.11.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fc920c0e0d5050474d2d6282b478e4957548bf1dce58e1b0678914514dc70064"}, + {file = "PyQt5_sip-12.11.1-cp38-cp38-win32.whl", hash = "sha256:3358c584832f0ac9fd1ad3623d8a346c705f43414df1fcd0cb285a6ef51fec08"}, + {file = "PyQt5_sip-12.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:f9691c6f4d899ca762dd54442a1be158c3e52017f583183da6ef37d5bae86595"}, + {file = "PyQt5_sip-12.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0bc81cb9e171d29302d393775f95cfa01b7a15f61b199ab1812976e5c4cb2cb9"}, + {file = "PyQt5_sip-12.11.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b077fb4383536f51382f5516f0347328a4f338c6ccc4c268cc358643bef1b838"}, + {file = "PyQt5_sip-12.11.1-cp39-cp39-win32.whl", hash = "sha256:5c152878443c3e951d5db7df53509d444708dc06a121c267b548146be06b87f8"}, + {file = "PyQt5_sip-12.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd935cc46dfdbb89c21042c1db2e46a71f25693af57272f146d6d9418e2934f1"}, + {file = "PyQt5_sip-12.11.1.tar.gz", hash = "sha256:97d3fbda0f61edb1be6529ec2d5c7202ae83aee4353e4b264a159f8c9ada4369"}, +] + +[[package]] +name = "pyqt5-stubs" +version = "5.15.6.0" +description = "PEP561 stub files for the PyQt5 framework" +optional = false +python-versions = ">= 3.5" +files = [ + {file = "PyQt5-stubs-5.15.6.0.tar.gz", hash = "sha256:91270ac23ebf38a1dc04cd97aa852cd08af82dc839100e5395af1447e3e99707"}, + {file = "PyQt5_stubs-5.15.6.0-py3-none-any.whl", hash = "sha256:7fb8177c72489a8911f021b7bd7c33f12c87f6dba92dcef3fdcdb5d9400f0f3f"}, +] + +[package.extras] +dev = ["mypy (==0.930)", "pytest", "pytest-xvfb"] + +[[package]] +name = "pyrect" +version = "0.2.0" +description = "PyRect is a simple module with a Rect class for Pygame-like rectangular areas." +optional = false +python-versions = "*" +files = [ + {file = "PyRect-0.2.0.tar.gz", hash = "sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78"}, +] + +[[package]] +name = "pyscreenshot" +version = "3.1" +description = "python screenshot" +optional = false +python-versions = ">=3.4" +files = [ + {file = "pyscreenshot-3.1-py3-none-any.whl", hash = "sha256:73d406d41a0977125bdfd2f6488f0caf1394e84d1d4c1065d5e8b1400b307096"}, + {file = "pyscreenshot-3.1.tar.gz", hash = "sha256:8c0e93f0aef66a6bfe55a86abfced6bd396ae4b4f6cc1e36f04a28ad2625594d"}, +] + +[package.dependencies] +EasyProcess = "*" +entrypoint2 = "*" +jeepney = {version = "*", markers = "python_version > \"3.4\" and platform_system == \"Linux\""} +mss = {version = "*", markers = "python_version > \"3.4\""} + +[[package]] +name = "pyscreeze" +version = "0.1.29" +description = "A simple, cross-platform screenshot module for Python 2 and 3." +optional = false +python-versions = "*" +files = [ + {file = "PyScreeze-0.1.29.tar.gz", hash = "sha256:d074547795e128da176599a6d4470500e425d49b05cf22e9808a7984c3612836"}, +] + +[package.dependencies] +Pillow = [ + {version = ">=9.2.0", markers = "python_version == \"3.10\" or python_version == \"3.9\""}, + {version = ">=9.3.0", markers = "python_version == \"3.11\""}, +] +pyscreenshot = "*" + +[[package]] +name = "pytest" +version = "7.4.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.12.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, + {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-qt" +version = "4.2.0" +description = "pytest support for PyQt and PySide applications" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-qt-4.2.0.tar.gz", hash = "sha256:00a17b586dd530b6d7a9399923a40489ca4a9a309719011175f55dc6b5dc8f41"}, + {file = "pytest_qt-4.2.0-py2.py3-none-any.whl", hash = "sha256:a7659960a1ab2af8fc944655a157ff45d714b80ed7a6af96a4b5bb99ecf40a22"}, +] + +[package.dependencies] +pytest = ">=3.0.0" + +[package.extras] +dev = ["pre-commit", "tox"] +doc = ["sphinx", "sphinx-rtd-theme"] + +[[package]] +name = "pytest-random-order" +version = "1.1.0" +description = "Randomise the order in which pytest tests are run with some control over the randomness" +optional = false +python-versions = ">=3.5.0" +files = [ + {file = "pytest-random-order-1.1.0.tar.gz", hash = "sha256:dbe6debb9353a7af984cc9eddbeb3577dd4dbbcc1529a79e3d21f68ed9b45605"}, + {file = "pytest_random_order-1.1.0-py3-none-any.whl", hash = "sha256:6cb1e59ab0f798bb0c3488c11ae0c70d7d3340306a466d28b28ccd8ef8c20b7e"}, +] + +[package.dependencies] +pytest = ">=3.0.0" + +[[package]] +name = "pytest-vcr" +version = "1.0.2" +description = "Plugin for managing VCR.py cassettes" +optional = false +python-versions = "*" +files = [ + {file = "pytest-vcr-1.0.2.tar.gz", hash = "sha256:23ee51b75abbcc43d926272773aae4f39f93aceb75ed56852d0bf618f92e1896"}, + {file = "pytest_vcr-1.0.2-py2.py3-none-any.whl", hash = "sha256:2f316e0539399bea0296e8b8401145c62b6f85e9066af7e57b6151481b0d6d9c"}, +] + +[package.dependencies] +pytest = ">=3.6.0" +vcrpy = "*" + +[[package]] +name = "pytest-xdist" +version = "3.3.1" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, + {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, +] + +[package.dependencies] +execnet = ">=1.1" +pytest = ">=6.2.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "python-dateutil" +version = "2.7.5" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "python-dateutil-2.7.5.tar.gz", hash = "sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02"}, + {file = "python_dateutil-2.7.5-py2.py3-none-any.whl", hash = "sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-editor" +version = "1.0.3" +description = "Programmatically open an editor, capture the result." +optional = false +python-versions = "*" +files = [ + {file = "python-editor-1.0.3.tar.gz", hash = "sha256:a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565"}, +] + +[[package]] +name = "python-magic" +version = "0.4.27" +description = "File type identification using libmagic" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, + {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, +] + +[[package]] +name = "python3-xlib" +version = "0.15" +description = "Python3 X Library" +optional = false +python-versions = "*" +files = [ + {file = "python3-xlib-0.15.tar.gz", hash = "sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8"}, +] + +[[package]] +name = "pytweening" +version = "1.0.7" +description = "A collection of tweening / easing functions." +optional = false +python-versions = "*" +files = [ + {file = "pytweening-1.0.7.tar.gz", hash = "sha256:767134f1bf57b76c1ce9f692dd1cfc776d9a279de6724e8d04854508fd7ededb"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.6.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.12.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, +] + +[[package]] +name = "ruamel-yaml" +version = "0.17.40" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3" +files = [ + {file = "ruamel.yaml-0.17.40-py3-none-any.whl", hash = "sha256:b16b6c3816dff0a93dca12acf5e70afd089fa5acb80604afd1ffa8b465b7722c"}, + {file = "ruamel.yaml-0.17.40.tar.gz", hash = "sha256:6024b986f06765d482b5b07e086cc4b4cd05dd22ddcbc758fa23d54873cf313d"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "rubicon-objc" +version = "0.4.7" +description = "A bridge between an Objective C runtime environment and Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "rubicon-objc-0.4.7.tar.gz", hash = "sha256:be937d864bd1229f860defabb89b40c53634eedc36448d89ad3c14eb3286e509"}, + {file = "rubicon_objc-0.4.7-py3-none-any.whl", hash = "sha256:f37108e35d5da1a78ab3eed2d03b095934f5f618329a939e4bd2ada9894eff6e"}, +] + +[package.extras] +dev = ["pre-commit (==3.5.0)", "pytest (==7.4.2)", "pytest-tldr (==0.2.5)", "setuptools-scm[toml] (==8.0.4)", "tox (==4.11.3)"] +docs = ["furo (==2023.9.10)", "pyenchant (==3.2.2)", "sphinx (==7.1.2)", "sphinx (==7.2.6)", "sphinx-autobuild (==2021.3.14)", "sphinx-copybutton (==0.5.2)", "sphinx-tabs (==3.4.1)", "sphinxcontrib-spelling (==8.0.0)"] + +[[package]] +name = "safety" +version = "2.3.4" +description = "Checks installed dependencies for known vulnerabilities and licenses." +optional = false +python-versions = "*" +files = [ + {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, + {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, +] + +[package.dependencies] +Click = ">=8.0.2" +dparse = ">=0.6.2" +packaging = ">=21.0" +requests = "*" +"ruamel.yaml" = ">=0.17.21" +setuptools = ">=19.3" + +[package.extras] +github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +gitlab = ["python-gitlab (>=1.3.0)"] + +[[package]] +name = "securedrop-sdk" +version = "0.4.0" +description = "Python client API to access SecureDrop Journalist REST API" +optional = false +python-versions = ">=3.5" +files = [ + {file = "securedrop-sdk-0.4.0.tar.gz", hash = "sha256:c08f77bae5f900b1fbcd3b5aae1c931dc877e7289d69aa5a8b1e3c3f4e0dc561"}, +] + +[package.dependencies] +requests = "*" +urllib3 = "*" + +[[package]] +name = "semgrep" +version = "1.48.0" +description = "Lightweight static analysis for many languages. Find bug variants with patterns that look like source code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-any.whl", hash = "sha256:35999402ada6cc9ae03642eb2fb1011fcaf46f23a85d56335d2a8de8a04db38f"}, + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_10_14_x86_64.whl", hash = "sha256:111a0a9675735f7ba0b4a47f5c17c989c9243f2cf4a35e92cbfb0cd8ca24c497"}, + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_11_0_arm64.whl", hash = "sha256:7a669e8b4beb977f7fe76cce887c15c5af9522f0bd8b9bc60929d3135a23b90e"}, + {file = "semgrep-1.48.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-musllinux_1_0_aarch64.manylinux2014_aarch64.whl", hash = "sha256:516706163a1a6d128dbcb5fec5a0d175371bf0a25a2c0afe70517f1081aa463e"}, + {file = "semgrep-1.48.0.tar.gz", hash = "sha256:9db8547dadd3f65e62c96a74d756be4469559a8a9e11f39549316cbe6930e5a6"}, +] + +[package.dependencies] +attrs = ">=21.3" +boltons = ">=21.0,<22.0" +click = ">=8.1,<9.0" +click-option-group = ">=0.5,<1.0" +colorama = ">=0.4.0,<0.5.0" +defusedxml = ">=0.7.1,<0.8.0" +glom = ">=22.1,<23.0" +jsonschema = ">=4.6,<5.0" +packaging = ">=21.0" +peewee = ">=3.14,<4.0" +requests = ">=2.22,<3.0" +rich = ">=12.6.0" +"ruamel.yaml" = ">=0.16.0,<0.18" +tomli = ">=2.0.1,<2.1.0" +typing-extensions = ">=4.2,<5.0" +urllib3 = ">=1.26,<2.0" +wcmatch = ">=8.3,<9.0" + +[package.extras] +experiments = ["jsonnet (>=0.18,<1.0)"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.11.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "*" +files = [ + {file = "six-1.11.0-py2.py3-none-any.whl", hash = "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"}, + {file = "six-1.11.0.tar.gz", hash = "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"}, +] + +[[package]] +name = "smmap" +version = "5.0.1" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[package]] +name = "sqlalchemy" +version = "1.3.3" +description = "Database Abstraction Library" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "SQLAlchemy-1.3.3.tar.gz", hash = "sha256:91c54ca8345008fceaec987e10924bf07dcab36c442925357e5a467b36a38319"}, +] + +[package.extras] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mysql = ["mysqlclient"] +oracle = ["cx_oracle"] +postgresql = ["psycopg2"] +postgresql-pg8000 = ["pg8000"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql"] + +[[package]] +name = "stevedore" +version = "5.1.0" +description = "Manage dynamic plugins for Python applications" +optional = false +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "translate-toolkit" +version = "3.10.1" +description = "Tools and API for translation and localization engineering." +optional = false +python-versions = ">=3.8" +files = [ + {file = "translate-toolkit-3.10.1.tar.gz", hash = "sha256:642e8597c55c3a31b8a6506194f0e64095965d5a1e7e0261d045a2865783a366"}, + {file = "translate_toolkit-3.10.1-py3-none-any.whl", hash = "sha256:ce0f7702259b4469868883d58176b65845dd1cf75179e0ebb9e95cdc65d5b2b0"}, +] + +[package.dependencies] +lxml = ">=4.6.3" + +[package.extras] +all = ["BeautifulSoup4 (>=4.3)", "aeidon (==1.12)", "charset-normalizer (==3.2.0)", "cheroot (==10.0.0)", "fluent.syntax (==0.19.0)", "iniparse (==0.5)", "mistletoe (==1.2.1)", "phply (==1.2.6)", "pyenchant (==3.2.2)", "pyparsing (==3.1.1)", "python-Levenshtein (>=0.12)", "ruamel.yaml (==0.17.32)", "vobject (==0.9.6.1)"] +chardet = ["charset-normalizer (==3.2.0)"] +fluent = ["fluent.syntax (==0.19.0)"] +ical = ["vobject (==0.9.6.1)"] +ini = ["iniparse (==0.5)"] +levenshtein = ["python-Levenshtein (>=0.12)"] +markdown = ["mistletoe (==1.2.1)"] +php = ["phply (==1.2.6)"] +rc = ["pyparsing (==3.1.1)"] +spellcheck = ["pyenchant (==3.2.2)"] +subtitles = ["aeidon (==1.12)"] +tmserver = ["cheroot (==10.0.0)"] +trados = ["BeautifulSoup4 (>=4.3)"] +yaml = ["ruamel.yaml (==0.17.32)"] + +[[package]] +name = "types-polib" +version = "1.2.0.1" +description = "Typing stubs for polib" +optional = false +python-versions = "*" +files = [ + {file = "types-polib-1.2.0.1.tar.gz", hash = "sha256:bd7f90ac43f26572b427a9d341a9363e0fa3084d5c0a79447246a579d47405f1"}, + {file = "types_polib-1.2.0.1-py3-none-any.whl", hash = "sha256:af01929cc4c9d61827f2c869ec90cf28c20e3247093bb7181b384ec593e5bef6"}, +] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[[package]] +name = "types-setuptools" +version = "68.2.0.0" +description = "Typing stubs for setuptools" +optional = false +python-versions = "*" +files = [ + {file = "types-setuptools-68.2.0.0.tar.gz", hash = "sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"}, + {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "urllib3" +version = "1.26.6" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +files = [ + {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, + {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, +] + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "vcrpy" +version = "5.1.0" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "vcrpy-5.1.0-py2.py3-none-any.whl", hash = "sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e"}, + {file = "vcrpy-5.1.0.tar.gz", hash = "sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2"}, +] + +[package.dependencies] +PyYAML = "*" +urllib3 = {version = "<2", markers = "python_version < \"3.10\""} +wrapt = "*" +yarl = "*" + +[[package]] +name = "wcmatch" +version = "8.5" +description = "Wildcard/glob file name matcher." +optional = false +python-versions = ">=3.8" +files = [ + {file = "wcmatch-8.5-py3-none-any.whl", hash = "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5"}, + {file = "wcmatch-8.5.tar.gz", hash = "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3"}, +] + +[package.dependencies] +bracex = ">=2.1.1" + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "a2ca85aa97bdfd06a669c40521a5d90b27024786c5d44aa589c8362677e390c1" diff --git a/pyproject.toml b/pyproject.toml index 81c891231..ce8b54f1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,57 @@ +[tool.poetry] +name = "securedrop-client" +version = "0.1.0" +description = "SecureDrop Workstation client application" +authors = ["SecureDrop Team"] +license = "AGPLv3+" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.9" +Jinja2 = "^3.0.2" +SQLAlchemy = "^1.3.3" +alembic = "^1.1.0" +arrow = "^0.12.1" +python-dateutil = "^2.7.5" +requests = "^2.31.0" +securedrop-sdk = "^0.4.0" + +[tool.poetry.group.dev.dependencies] +# In production these two are installed using a system package +# so match those versions exactly +PyQt5 = [ + {version = "=5.15.8", python = ">=3.10"}, # bookworm + {version = "=5.15.2", python = "< 3.10"}, # bullseye +] +PyQt5-sip = [ + {version = "=12.11.1", python = ">=3.10"}, # bookworm + {version = "=12.8.1", python = "< 3.10"}, # bullseye +] +PyAutoGUI = "*" +babel = "^2.12.1" +bandit = "*" +black = "^23.7.0" +diffoscope = "*" +flake8 = "^6.0.0" +flaky = "*" +isort = "*" +mypy = "^1.4.1" +polib = "*" +pyqt5-stubs = "*" +pytest = "^7.2.0" +pytest-cov = "*" +pytest-mock = "*" +pytest-qt = "^4.2.0" +pytest-random-order = "*" +pytest-vcr = "*" +pytest-xdist = "^3.0.2" +safety = "*" +semgrep = "*" +translate-toolkit = "*" +types-polib = "*" +types-python-dateutil = "*" +types-setuptools = "^68.0.0" + [tool.black] line-length = 100 diff --git a/requirements/dev-bookworm-requirements.in b/requirements/dev-bookworm-requirements.in deleted file mode 100644 index 1b9e0ed67..000000000 --- a/requirements/dev-bookworm-requirements.in +++ /dev/null @@ -1,3 +0,0 @@ --r dev-sdw-requirements.in -PyQt5==5.15.8 -PyQt5.sip==12.11.1 diff --git a/requirements/dev-bookworm-requirements.txt b/requirements/dev-bookworm-requirements.txt deleted file mode 100644 index f62039d39..000000000 --- a/requirements/dev-bookworm-requirements.txt +++ /dev/null @@ -1,1345 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bookworm-requirements.txt requirements/dev-bookworm-requirements.in -# -alembic==1.1.0 \ - --hash=sha256:4a4811119efbdc5259d1f4c8f6de977b36ad3bcc919f59a29c2960c5ef9149e4 - # via -r requirements/requirements.in -argcomplete==3.1.2 \ - --hash=sha256:d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b \ - --hash=sha256:d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99 - # via wlc -arrow==0.12.1 \ - --hash=sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd - # via -r requirements/requirements.in -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 - # via - # glom - # jsonschema - # referencing - # semgrep -babel==2.12.1 \ - --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ - --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 - # via -r requirements/dev-sdw-requirements.in -black==23.9.1 \ - --hash=sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f \ - --hash=sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7 \ - --hash=sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100 \ - --hash=sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573 \ - --hash=sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d \ - --hash=sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f \ - --hash=sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9 \ - --hash=sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300 \ - --hash=sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948 \ - --hash=sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325 \ - --hash=sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9 \ - --hash=sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71 \ - --hash=sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186 \ - --hash=sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f \ - --hash=sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe \ - --hash=sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855 \ - --hash=sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80 \ - --hash=sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393 \ - --hash=sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c \ - --hash=sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204 \ - --hash=sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377 \ - --hash=sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301 - # via -r requirements/dev-sdw-requirements.in -boltons==21.0.0 \ - --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ - --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b - # via - # face - # glom - # semgrep -bracex==2.4 \ - --hash=sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb \ - --hash=sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418 - # via wcmatch -build==1.0.3 \ - --hash=sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b \ - --hash=sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa - # via - # -r requirements/requirements.in - # requests -click==8.1.7 \ - --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ - --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de - # via - # black - # click-option-group - # pip-tools - # semgrep -click-option-group==0.5.6 \ - --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ - --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 - # via semgrep -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via semgrep -coverage[toml]==7.3.1 \ - --hash=sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375 \ - --hash=sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344 \ - --hash=sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e \ - --hash=sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745 \ - --hash=sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f \ - --hash=sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194 \ - --hash=sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a \ - --hash=sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f \ - --hash=sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760 \ - --hash=sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8 \ - --hash=sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392 \ - --hash=sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d \ - --hash=sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc \ - --hash=sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40 \ - --hash=sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981 \ - --hash=sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0 \ - --hash=sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92 \ - --hash=sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3 \ - --hash=sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0 \ - --hash=sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086 \ - --hash=sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7 \ - --hash=sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465 \ - --hash=sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140 \ - --hash=sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952 \ - --hash=sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3 \ - --hash=sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8 \ - --hash=sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f \ - --hash=sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593 \ - --hash=sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0 \ - --hash=sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204 \ - --hash=sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037 \ - --hash=sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276 \ - --hash=sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9 \ - --hash=sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26 \ - --hash=sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce \ - --hash=sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7 \ - --hash=sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136 \ - --hash=sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a \ - --hash=sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4 \ - --hash=sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c \ - --hash=sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f \ - --hash=sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832 \ - --hash=sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3 \ - --hash=sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969 \ - --hash=sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520 \ - --hash=sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887 \ - --hash=sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3 \ - --hash=sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6 \ - --hash=sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1 \ - --hash=sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff \ - --hash=sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981 \ - --hash=sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e - # via pytest-cov -defusedxml==0.7.1 \ - --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ - --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - # via semgrep -diffoscope==249 \ - --hash=sha256:bc4d8cb3198025013784ef7e3fa61b7a642de39e5b790c45d7c29d153306fbdd - # via -r requirements/dev-sdw-requirements.in -easyprocess==1.1 \ - --hash=sha256:82eed523a0a5eb12a81fa4eacd9f342caeb3f900eb4b798740e6696ad07e63f9 \ - --hash=sha256:885898302a57aab948973e8b5d32a4229392b9fb2d986ab1d4ffd590e5ba90ec - # via pyscreenshot -entrypoint2==1.1 \ - --hash=sha256:eeb8c327bdb65cdd1668c023a6b110b7e3d1a046fb05e043861ebd9264b3a257 \ - --hash=sha256:fc0b7fe7b21acdab47a585ab9407ca7e5c4f96cb6888575db6b0ceb91f0e105a - # via pyscreenshot -execnet==2.0.2 \ - --hash=sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41 \ - --hash=sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af - # via pytest-xdist -face==22.0.0 \ - --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ - --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d - # via glom -flake8==6.1.0 \ - --hash=sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23 \ - --hash=sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5 - # via -r requirements/dev-sdw-requirements.in -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c - # via -r requirements/dev-sdw-requirements.in -glom==22.1.0 \ - --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ - --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 - # via semgrep -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 - # via - # -r requirements/requirements.in - # requests - # yarl -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via pytest -isort==5.12.0 \ - --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ - --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 - # via -r requirements/dev-sdw-requirements.in -jeepney==0.8.0 \ - --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ - --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 - # via pyscreenshot -jinja2==3.0.2 \ - --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ - --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c - # via -r requirements/requirements.in -jsonschema==4.19.1 \ - --hash=sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e \ - --hash=sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf - # via semgrep -jsonschema-specifications==2023.7.1 \ - --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ - --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb - # via jsonschema -libarchive-c==5.0 \ - --hash=sha256:3ed7ee9b7d7d6fc200aecce63cee2084754cb6c00e946f6d007b80236e662bff \ - --hash=sha256:d673f56673d87ec740d1a328fa205cafad1d60f5daca4685594deb039d32b159 - # via diffoscope -lxml==4.9.3 \ - --hash=sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 \ - --hash=sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d \ - --hash=sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a \ - --hash=sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 \ - --hash=sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 \ - --hash=sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 \ - --hash=sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 \ - --hash=sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 \ - --hash=sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f \ - --hash=sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 \ - --hash=sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 \ - --hash=sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f \ - --hash=sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 \ - --hash=sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef \ - --hash=sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 \ - --hash=sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 \ - --hash=sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc \ - --hash=sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 \ - --hash=sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da \ - --hash=sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a \ - --hash=sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 \ - --hash=sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 \ - --hash=sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd \ - --hash=sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 \ - --hash=sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c \ - --hash=sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be \ - --hash=sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 \ - --hash=sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c \ - --hash=sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 \ - --hash=sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc \ - --hash=sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 \ - --hash=sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 \ - --hash=sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 \ - --hash=sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d \ - --hash=sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 \ - --hash=sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d \ - --hash=sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e \ - --hash=sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 \ - --hash=sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 \ - --hash=sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 \ - --hash=sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf \ - --hash=sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b \ - --hash=sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 \ - --hash=sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 \ - --hash=sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 \ - --hash=sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 \ - --hash=sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d \ - --hash=sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce \ - --hash=sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d \ - --hash=sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f \ - --hash=sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db \ - --hash=sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 \ - --hash=sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 \ - --hash=sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac \ - --hash=sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 \ - --hash=sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 \ - --hash=sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 \ - --hash=sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d \ - --hash=sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b \ - --hash=sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a \ - --hash=sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 \ - --hash=sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 \ - --hash=sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 \ - --hash=sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 \ - --hash=sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c \ - --hash=sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c \ - --hash=sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 \ - --hash=sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 \ - --hash=sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 \ - --hash=sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 \ - --hash=sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf \ - --hash=sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb \ - --hash=sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b \ - --hash=sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 \ - --hash=sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 \ - --hash=sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 \ - --hash=sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e \ - --hash=sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 \ - --hash=sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 \ - --hash=sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 \ - --hash=sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b \ - --hash=sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 \ - --hash=sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 \ - --hash=sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 \ - --hash=sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa \ - --hash=sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 \ - --hash=sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 \ - --hash=sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 \ - --hash=sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b \ - --hash=sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 \ - --hash=sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 \ - --hash=sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 - # via translate-toolkit -mako==1.2.2 \ - --hash=sha256:3724869b363ba630a272a5f89f68c070352137b8fd1757650017b7e06fda163f \ - --hash=sha256:8efcb8004681b5f71d09c983ad5a9e6f5c40601a6ec469148753292abc0da534 - # via - # -r requirements/requirements.in - # alembic -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb - # via rich -markupsafe==2.1.3 \ - --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ - --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ - --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ - --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ - --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ - --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ - --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ - --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ - --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ - --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ - --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ - --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ - --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ - --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ - --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ - --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ - --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ - --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ - --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ - --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ - --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ - --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ - --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ - --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ - --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ - --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ - --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ - --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ - --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ - --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ - --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ - --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ - --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ - --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ - --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ - --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ - --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ - --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ - --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ - --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ - --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ - --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ - --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ - --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ - --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ - --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ - --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ - --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ - --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ - --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ - --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ - --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ - --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ - --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ - --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ - --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ - --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ - --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 - # via - # -r requirements/dev-sdw-requirements.in - # -r requirements/requirements.in - # jinja2 - # mako -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba - # via markdown-it-py -mouseinfo==0.1.3 \ - --hash=sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7 - # via pyautogui -mss==9.0.1 \ - --hash=sha256:6eb7b9008cf27428811fa33aeb35f3334db81e3f7cc2dd49ec7c6e5a94b39f12 \ - --hash=sha256:7ee44db7ab14cbea6a3eb63813c57d677a109ca5979d3b76046e4bddd3ca1a0b - # via pyscreenshot -multidict==6.0.4 \ - --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ - --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ - --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ - --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ - --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ - --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ - --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ - --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ - --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ - --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ - --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ - --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ - --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ - --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ - --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ - --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ - --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ - --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ - --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ - --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ - --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ - --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ - --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ - --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ - --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ - --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ - --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ - --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ - --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ - --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ - --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ - --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ - --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ - --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ - --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ - --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ - --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ - --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ - --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ - --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ - --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ - --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ - --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ - --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ - --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ - --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ - --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ - --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ - --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ - --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ - --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ - --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ - --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ - --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ - --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ - --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ - --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ - --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ - --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ - --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ - --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ - --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ - --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ - --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ - --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ - --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ - --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ - --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ - --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ - --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ - --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ - --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ - --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ - --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba - # via yarl -mypy==1.5.1 \ - --hash=sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315 \ - --hash=sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0 \ - --hash=sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373 \ - --hash=sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a \ - --hash=sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161 \ - --hash=sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275 \ - --hash=sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693 \ - --hash=sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb \ - --hash=sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65 \ - --hash=sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4 \ - --hash=sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb \ - --hash=sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243 \ - --hash=sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14 \ - --hash=sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4 \ - --hash=sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1 \ - --hash=sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a \ - --hash=sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160 \ - --hash=sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25 \ - --hash=sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12 \ - --hash=sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d \ - --hash=sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92 \ - --hash=sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770 \ - --hash=sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2 \ - --hash=sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70 \ - --hash=sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb \ - --hash=sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5 \ - --hash=sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f - # via -r requirements/dev-sdw-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build - # pytest - # semgrep -pathlib2==2.3.2 \ - --hash=sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83 \ - --hash=sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a - # via -r requirements/requirements.in -pathspec==0.11.2 \ - --hash=sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20 \ - --hash=sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3 - # via black -peewee==3.16.3 \ - --hash=sha256:12b30e931193bc37b11f7c2ac646e3f67125a8b1a543ad6ab37ad124c8df7d16 - # via semgrep -pillow==10.0.1 \ - --hash=sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff \ - --hash=sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f \ - --hash=sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21 \ - --hash=sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635 \ - --hash=sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a \ - --hash=sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f \ - --hash=sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1 \ - --hash=sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d \ - --hash=sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db \ - --hash=sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849 \ - --hash=sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7 \ - --hash=sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876 \ - --hash=sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3 \ - --hash=sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317 \ - --hash=sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91 \ - --hash=sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d \ - --hash=sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b \ - --hash=sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd \ - --hash=sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed \ - --hash=sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500 \ - --hash=sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7 \ - --hash=sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a \ - --hash=sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a \ - --hash=sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0 \ - --hash=sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf \ - --hash=sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f \ - --hash=sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1 \ - --hash=sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088 \ - --hash=sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971 \ - --hash=sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a \ - --hash=sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205 \ - --hash=sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54 \ - --hash=sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08 \ - --hash=sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21 \ - --hash=sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d \ - --hash=sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08 \ - --hash=sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e \ - --hash=sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf \ - --hash=sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b \ - --hash=sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145 \ - --hash=sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2 \ - --hash=sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d \ - --hash=sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d \ - --hash=sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf \ - --hash=sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad \ - --hash=sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d \ - --hash=sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1 \ - --hash=sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4 \ - --hash=sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2 \ - --hash=sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19 \ - --hash=sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37 \ - --hash=sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4 \ - --hash=sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68 \ - --hash=sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1 - # via - # -r requirements/dev-sdw-requirements.in - # pyscreeze -pip-tools==7.3.0 \ - --hash=sha256:8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e \ - --hash=sha256:8e9c99127fe024c025b46a0b2d15c7bd47f18f33226cf7330d35493663fc1d1d - # via -r requirements/dev-sdw-requirements.in -platformdirs==3.10.0 \ - --hash=sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d \ - --hash=sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d - # via black -pluggy==1.3.0 \ - --hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \ - --hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 - # via pytest -polib==1.2.0 \ - --hash=sha256:1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d \ - --hash=sha256:f3ef94aefed6e183e342a8a269ae1fc4742ba193186ad76f175938621dbfc26b - # via -r requirements/dev-sdw-requirements.in -pyautogui==0.9.54 \ - --hash=sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2 - # via -r requirements/dev-sdw-requirements.in -pycodestyle==2.11.0 \ - --hash=sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0 \ - --hash=sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8 - # via flake8 -pyflakes==3.1.0 \ - --hash=sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774 \ - --hash=sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc - # via flake8 -pygetwindow==0.0.9 \ - --hash=sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688 - # via pyautogui -pygments==2.16.1 \ - --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ - --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 - # via rich -pymsgbox==1.0.9 \ - --hash=sha256:2194227de8bff7a3d6da541848705a155dcbb2a06ee120d9f280a1d7f51263ff - # via pyautogui -pyperclip==1.8.2 \ - --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 - # via mouseinfo -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pyqt5==5.15.8 \ - --hash=sha256:7daa668d2c36b62da8fb3b68670b70455dba659fe5006400222280d6153dc035 \ - --hash=sha256:85f72addcf430b958e156fe90b975aec5c2dfe0a53f5b13c69e072de989000f7 \ - --hash=sha256:bc85e3efb9135c56c8b88157c8825005fb7cd0f14babd93976778aae82eda360 \ - --hash=sha256:c6ee352bef5ef6392039db2d09a376908ca6ed34d1892bfe8be08e28e1992a89 \ - --hash=sha256:e812ff1f9b994f592392f764246372d29dd3e8d800087064cab47109d9aad1f7 - # via -r requirements/dev-bookworm-requirements.in -pyqt5-qt5==5.15.2 \ - --hash=sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a \ - --hash=sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962 \ - --hash=sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154 \ - --hash=sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327 - # via pyqt5 -pyqt5-sip==12.11.1 \ - --hash=sha256:0bc81cb9e171d29302d393775f95cfa01b7a15f61b199ab1812976e5c4cb2cb9 \ - --hash=sha256:19b06164793177146c7f7604fe8389f44221a7bde196f2182457eb3e4229fa88 \ - --hash=sha256:3358c584832f0ac9fd1ad3623d8a346c705f43414df1fcd0cb285a6ef51fec08 \ - --hash=sha256:3afb1d1c07adcfef5c8bb12356a2ec2ec094f324af4417735d43b1ecaf1bb1a4 \ - --hash=sha256:4f0497e2f5eeaea9f5a67b0e55c501168efa86df4e53aace2a46498b87bc55c1 \ - --hash=sha256:54dad6c2e5dab14e46f6822a889bbb1515bbd2061762273af10d26566d649bd9 \ - --hash=sha256:5c152878443c3e951d5db7df53509d444708dc06a121c267b548146be06b87f8 \ - --hash=sha256:6b1113538082a7dd63b908587f61ce28ba4c7b8341e801fdf305d53a50a878ab \ - --hash=sha256:7218f6a1cefeb0b2fc26b89f15011f841aa4cd77786ccd863bf9792347fa38a8 \ - --hash=sha256:97d3fbda0f61edb1be6529ec2d5c7202ae83aee4353e4b264a159f8c9ada4369 \ - --hash=sha256:9a6f9c058564d0ac573561036299f54c452ae78b7d2a65d7c2d01685e6dca50d \ - --hash=sha256:a40a39a6136a90e10c31510295c2be924564fc6260691501cdde669bdc5edea5 \ - --hash=sha256:ac5f7ed06213d3bb203e33037f7c1a0716584c21f4f0922dcc044750e3659b80 \ - --hash=sha256:b077fb4383536f51382f5516f0347328a4f338c6ccc4c268cc358643bef1b838 \ - --hash=sha256:b355d56483edc79dcba30be947a6b700856bb74beb90539e14cc4d92b9bad152 \ - --hash=sha256:b714f550ea6ddae94fd7acae531971e535f4a4e7277b62eb44e7c649cf3f03d0 \ - --hash=sha256:bd935cc46dfdbb89c21042c1db2e46a71f25693af57272f146d6d9418e2934f1 \ - --hash=sha256:d09b2586235deab7a5f2e28e4bde9a70c0b3730fa84f2590804a9932414136a3 \ - --hash=sha256:dd163d9cffc4a56ebb9dd6908c0f0cb0caff8080294d41f4fb60fc3be63ca434 \ - --hash=sha256:f9691c6f4d899ca762dd54442a1be158c3e52017f583183da6ef37d5bae86595 \ - --hash=sha256:fc920c0e0d5050474d2d6282b478e4957548bf1dce58e1b0678914514dc70064 - # via - # -r requirements/dev-bookworm-requirements.in - # pyqt5 -pyqt5-stubs==5.15.6.0 \ - --hash=sha256:7fb8177c72489a8911f021b7bd7c33f12c87f6dba92dcef3fdcdb5d9400f0f3f \ - --hash=sha256:91270ac23ebf38a1dc04cd97aa852cd08af82dc839100e5395af1447e3e99707 - # via -r requirements/dev-sdw-requirements.in -pyrect==0.2.0 \ - --hash=sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78 - # via pygetwindow -pyscreenshot==3.1 \ - --hash=sha256:73d406d41a0977125bdfd2f6488f0caf1394e84d1d4c1065d5e8b1400b307096 \ - --hash=sha256:8c0e93f0aef66a6bfe55a86abfced6bd396ae4b4f6cc1e36f04a28ad2625594d - # via pyscreeze -pyscreeze==0.1.29 \ - --hash=sha256:d074547795e128da176599a6d4470500e425d49b05cf22e9808a7984c3612836 - # via pyautogui -pytest==7.4.2 \ - --hash=sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002 \ - --hash=sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069 - # via - # -r requirements/dev-sdw-requirements.in - # pytest-cov - # pytest-mock - # pytest-qt - # pytest-random-order - # pytest-vcr - # pytest-xdist -pytest-cov==4.1.0 \ - --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ - --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a - # via -r requirements/dev-sdw-requirements.in -pytest-mock==3.11.1 \ - --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ - --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f - # via -r requirements/dev-sdw-requirements.in -pytest-qt==4.2.0 \ - --hash=sha256:00a17b586dd530b6d7a9399923a40489ca4a9a309719011175f55dc6b5dc8f41 \ - --hash=sha256:a7659960a1ab2af8fc944655a157ff45d714b80ed7a6af96a4b5bb99ecf40a22 - # via -r requirements/dev-sdw-requirements.in -pytest-random-order==1.1.0 \ - --hash=sha256:6cb1e59ab0f798bb0c3488c11ae0c70d7d3340306a466d28b28ccd8ef8c20b7e \ - --hash=sha256:dbe6debb9353a7af984cc9eddbeb3577dd4dbbcc1529a79e3d21f68ed9b45605 - # via -r requirements/dev-sdw-requirements.in -pytest-vcr==1.0.2 \ - --hash=sha256:23ee51b75abbcc43d926272773aae4f39f93aceb75ed56852d0bf618f92e1896 \ - --hash=sha256:2f316e0539399bea0296e8b8401145c62b6f85e9066af7e57b6151481b0d6d9c - # via -r requirements/dev-sdw-requirements.in -pytest-xdist==3.3.1 \ - --hash=sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93 \ - --hash=sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2 - # via -r requirements/dev-sdw-requirements.in -python-dateutil==2.7.5 \ - --hash=sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93 \ - --hash=sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02 - # via - # -r requirements/requirements.in - # alembic - # arrow - # wlc -python-editor==1.0.3 \ - --hash=sha256:a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565 - # via - # -r requirements/requirements.in - # alembic -python-lsp-jsonrpc==1.0.0 \ - --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ - --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd - # via semgrep -python-magic==0.4.27 \ - --hash=sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b \ - --hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3 - # via diffoscope -python3-xlib==0.15 \ - --hash=sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8 - # via - # mouseinfo - # pyautogui -pytweening==1.0.7 \ - --hash=sha256:767134f1bf57b76c1ce9f692dd1cfc776d9a279de6724e8d04854508fd7ededb - # via pyautogui -pyxdg==0.28 \ - --hash=sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4 \ - --hash=sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab - # via wlc -pyyaml==6.0.1 \ - --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ - --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ - --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ - --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ - --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ - --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ - --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ - --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ - --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ - --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ - --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ - --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ - --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ - --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ - --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ - --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ - --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ - --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ - --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ - --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ - --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ - --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ - --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ - --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ - --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ - --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ - --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ - --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ - --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ - --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ - --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ - --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ - --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ - --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ - --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ - --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ - --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ - --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ - --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ - --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ - --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ - --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ - --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ - --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ - --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ - --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ - --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ - --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ - --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f - # via vcrpy -referencing==0.30.2 \ - --hash=sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf \ - --hash=sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via - # -r requirements/requirements.in - # securedrop-sdk - # semgrep - # wlc -rich==13.5.3 \ - --hash=sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6 \ - --hash=sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9 - # via semgrep -rpds-py==0.10.3 \ - --hash=sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9 \ - --hash=sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637 \ - --hash=sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5 \ - --hash=sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9 \ - --hash=sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c \ - --hash=sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957 \ - --hash=sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6 \ - --hash=sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154 \ - --hash=sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8 \ - --hash=sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569 \ - --hash=sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2 \ - --hash=sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c \ - --hash=sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453 \ - --hash=sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1 \ - --hash=sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7 \ - --hash=sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b \ - --hash=sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9 \ - --hash=sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496 \ - --hash=sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3 \ - --hash=sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b \ - --hash=sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6 \ - --hash=sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da \ - --hash=sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842 \ - --hash=sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd \ - --hash=sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294 \ - --hash=sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71 \ - --hash=sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093 \ - --hash=sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e \ - --hash=sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c \ - --hash=sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e \ - --hash=sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b \ - --hash=sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97 \ - --hash=sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac \ - --hash=sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf \ - --hash=sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a \ - --hash=sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc \ - --hash=sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0 \ - --hash=sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623 \ - --hash=sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6 \ - --hash=sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8 \ - --hash=sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b \ - --hash=sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d \ - --hash=sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff \ - --hash=sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb \ - --hash=sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08 \ - --hash=sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33 \ - --hash=sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5 \ - --hash=sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a \ - --hash=sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a \ - --hash=sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762 \ - --hash=sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860 \ - --hash=sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73 \ - --hash=sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a \ - --hash=sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065 \ - --hash=sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c \ - --hash=sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c \ - --hash=sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec \ - --hash=sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515 \ - --hash=sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72 \ - --hash=sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd \ - --hash=sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec \ - --hash=sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12 \ - --hash=sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1 \ - --hash=sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557 \ - --hash=sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25 \ - --hash=sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff \ - --hash=sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8 \ - --hash=sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9 \ - --hash=sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d \ - --hash=sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a \ - --hash=sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e \ - --hash=sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c \ - --hash=sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0 \ - --hash=sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48 \ - --hash=sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e \ - --hash=sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314 \ - --hash=sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717 \ - --hash=sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95 \ - --hash=sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8 \ - --hash=sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57 \ - --hash=sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33 \ - --hash=sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1 \ - --hash=sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f \ - --hash=sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f \ - --hash=sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9 \ - --hash=sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599 \ - --hash=sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41 \ - --hash=sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391 \ - --hash=sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475 \ - --hash=sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882 \ - --hash=sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740 \ - --hash=sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f \ - --hash=sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee \ - --hash=sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836 \ - --hash=sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c \ - --hash=sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a \ - --hash=sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb - # via - # jsonschema - # referencing -ruamel-yaml==0.17.32 \ - --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ - --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 - # via semgrep -ruamel-yaml-clib==0.2.7 \ - --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ - --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ - --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ - --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ - --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ - --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ - --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ - --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ - --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ - --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ - --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ - --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ - --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ - --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ - --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ - --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ - --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ - --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ - --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ - --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ - --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ - --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ - --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ - --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ - --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ - --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ - --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ - --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ - --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ - --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ - --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ - --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ - --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ - --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ - --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 - # via ruamel-yaml -securedrop-sdk==0.4.0 \ - --hash=sha256:c08f77bae5f900b1fbcd3b5aae1c931dc877e7289d69aa5a8b1e3c3f4e0dc561 - # via -r requirements/requirements.in -semgrep==1.41.0 \ - --hash=sha256:0ebb2f992618f145c49e5c8de56ed7aec57819b9736128c3690a95213fa0da79 \ - --hash=sha256:551dc331001674d742afd80aa3b7e8a0ee5ede28f3502ca915338d6548e161d6 \ - --hash=sha256:bb1679826cb14a9444e5cfb5dcb1cd9c20071baf9ae541eed200076721362ad6 \ - --hash=sha256:d7231b5a65a77da14af9da66d95044ee41137b03da1380f6c646b1e2b60ef81d \ - --hash=sha256:fbcc2ea85e828023f2da51dcf93684d09b95b062716f585587d27485b0af5c37 - # via -r requirements/dev-sdw-requirements.in -six==1.11.0 \ - --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb - # via - # -r requirements/requirements.in - # pathlib2 - # python-dateutil -sqlalchemy==1.3.3 \ - --hash=sha256:91c54ca8345008fceaec987e10924bf07dcab36c442925357e5a467b36a38319 - # via - # -r requirements/requirements.in - # alembic -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f - # via -r requirements/dev-sdw-requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via semgrep -translate-toolkit==3.10.1 \ - --hash=sha256:642e8597c55c3a31b8a6506194f0e64095965d5a1e7e0261d045a2865783a366 \ - --hash=sha256:ce0f7702259b4469868883d58176b65845dd1cf75179e0ebb9e95cdc65d5b2b0 - # via -r requirements/dev-sdw-requirements.in -types-polib==1.2.0.1 \ - --hash=sha256:af01929cc4c9d61827f2c869ec90cf28c20e3247093bb7181b384ec593e5bef6 \ - --hash=sha256:bd7f90ac43f26572b427a9d341a9363e0fa3084d5c0a79447246a579d47405f1 - # via -r requirements/dev-sdw-requirements.in -types-python-dateutil==2.8.19.14 \ - --hash=sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b \ - --hash=sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 - # via -r requirements/dev-sdw-requirements.in -types-setuptools==68.2.0.0 \ - --hash=sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b \ - --hash=sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85 - # via -r requirements/dev-sdw-requirements.in -typing-extensions==4.8.0 \ - --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ - --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef - # via - # mypy - # semgrep -ujson==5.8.0 \ - --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ - --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ - --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ - --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ - --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ - --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ - --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ - --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ - --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ - --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ - --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ - --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ - --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ - --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ - --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ - --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ - --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ - --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ - --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ - --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ - --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ - --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ - --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ - --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ - --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ - --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ - --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ - --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ - --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ - --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ - --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ - --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ - --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ - --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ - --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ - --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ - --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ - --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ - --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ - --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ - --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ - --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ - --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ - --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ - --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ - --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ - --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ - --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ - --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ - --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ - --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ - --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ - --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ - --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ - --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ - --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ - --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ - --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ - --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ - --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ - --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c - # via python-lsp-jsonrpc -urllib3==1.26.16 \ - --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ - --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 - # via - # -r requirements/requirements.in - # requests - # securedrop-sdk - # semgrep -vcrpy==5.1.0 \ - --hash=sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e \ - --hash=sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2 - # via pytest-vcr -wcmatch==8.5 \ - --hash=sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5 \ - --hash=sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3 - # via semgrep -wheel==0.41.2 \ - --hash=sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985 \ - --hash=sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8 - # via pip-tools -wlc==1.13 \ - --hash=sha256:319e9abee30d4f91c82175bb7b3ba400978eef4a3e4ab8099c19c68cdcb8b581 \ - --hash=sha256:97a618abd2764884da9e7ffa1b2e623a45e469760e014590fb7c1064188910d6 - # via -r requirements/dev-sdw-requirements.in -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 - # via vcrpy -yarl==1.9.2 \ - --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ - --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ - --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ - --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ - --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ - --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ - --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ - --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ - --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ - --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ - --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ - --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ - --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ - --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ - --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ - --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ - --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ - --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ - --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ - --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ - --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ - --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ - --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ - --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ - --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ - --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ - --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ - --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ - --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ - --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ - --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ - --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ - --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ - --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ - --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ - --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ - --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ - --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ - --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ - --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ - --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ - --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ - --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ - --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ - --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ - --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ - --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ - --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ - --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ - --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ - --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ - --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ - --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ - --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ - --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ - --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ - --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ - --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ - --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ - --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ - --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ - --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ - --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ - --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ - --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ - --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ - --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ - --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ - --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ - --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ - --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ - --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ - --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ - --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 - # via vcrpy - -# The following packages are considered to be unsafe in a requirements file: -pip==23.2.1 \ - --hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \ - --hash=sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2 - # via pip-tools -setuptools==68.2.2 \ - --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ - --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a - # via pip-tools diff --git a/requirements/dev-bullseye-requirements.in b/requirements/dev-bullseye-requirements.in deleted file mode 100644 index 082b9ecf2..000000000 --- a/requirements/dev-bullseye-requirements.in +++ /dev/null @@ -1,3 +0,0 @@ --r dev-sdw-requirements.in -PyQt5==5.15.2 # Match version of system package on Bullseye -PyQt5.sip==12.8.1 # Match version of system package on Bullseye diff --git a/requirements/dev-bullseye-requirements.txt b/requirements/dev-bullseye-requirements.txt deleted file mode 100644 index 86bdd933c..000000000 --- a/requirements/dev-bullseye-requirements.txt +++ /dev/null @@ -1,1361 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-bullseye-requirements.txt requirements/dev-bullseye-requirements.in -# -alembic==1.1.0 \ - --hash=sha256:4a4811119efbdc5259d1f4c8f6de977b36ad3bcc919f59a29c2960c5ef9149e4 - # via -r requirements/requirements.in -argcomplete==3.1.2 \ - --hash=sha256:d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b \ - --hash=sha256:d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99 - # via wlc -arrow==0.12.1 \ - --hash=sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd - # via -r requirements/requirements.in -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 - # via - # glom - # jsonschema - # referencing - # semgrep -babel==2.12.1 \ - --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ - --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 - # via -r requirements/dev-sdw-requirements.in -black==23.9.1 \ - --hash=sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f \ - --hash=sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7 \ - --hash=sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100 \ - --hash=sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573 \ - --hash=sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d \ - --hash=sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f \ - --hash=sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9 \ - --hash=sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300 \ - --hash=sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948 \ - --hash=sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325 \ - --hash=sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9 \ - --hash=sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71 \ - --hash=sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186 \ - --hash=sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f \ - --hash=sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe \ - --hash=sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855 \ - --hash=sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80 \ - --hash=sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393 \ - --hash=sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c \ - --hash=sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204 \ - --hash=sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377 \ - --hash=sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301 - # via -r requirements/dev-sdw-requirements.in -boltons==21.0.0 \ - --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ - --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b - # via - # face - # glom - # semgrep -bracex==2.4 \ - --hash=sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb \ - --hash=sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418 - # via wcmatch -build==1.0.3 \ - --hash=sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b \ - --hash=sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa - # via - # -r requirements/requirements.in - # requests -click==8.1.7 \ - --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ - --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de - # via - # black - # click-option-group - # pip-tools - # semgrep -click-option-group==0.5.6 \ - --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ - --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 - # via semgrep -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via semgrep -coverage[toml]==7.3.1 \ - --hash=sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375 \ - --hash=sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344 \ - --hash=sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e \ - --hash=sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745 \ - --hash=sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f \ - --hash=sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194 \ - --hash=sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a \ - --hash=sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f \ - --hash=sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760 \ - --hash=sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8 \ - --hash=sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392 \ - --hash=sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d \ - --hash=sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc \ - --hash=sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40 \ - --hash=sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981 \ - --hash=sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0 \ - --hash=sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92 \ - --hash=sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3 \ - --hash=sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0 \ - --hash=sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086 \ - --hash=sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7 \ - --hash=sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465 \ - --hash=sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140 \ - --hash=sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952 \ - --hash=sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3 \ - --hash=sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8 \ - --hash=sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f \ - --hash=sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593 \ - --hash=sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0 \ - --hash=sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204 \ - --hash=sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037 \ - --hash=sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276 \ - --hash=sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9 \ - --hash=sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26 \ - --hash=sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce \ - --hash=sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7 \ - --hash=sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136 \ - --hash=sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a \ - --hash=sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4 \ - --hash=sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c \ - --hash=sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f \ - --hash=sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832 \ - --hash=sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3 \ - --hash=sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969 \ - --hash=sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520 \ - --hash=sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887 \ - --hash=sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3 \ - --hash=sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6 \ - --hash=sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1 \ - --hash=sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff \ - --hash=sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981 \ - --hash=sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e - # via pytest-cov -defusedxml==0.7.1 \ - --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ - --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - # via semgrep -diffoscope==249 \ - --hash=sha256:bc4d8cb3198025013784ef7e3fa61b7a642de39e5b790c45d7c29d153306fbdd - # via -r requirements/dev-sdw-requirements.in -easyprocess==1.1 \ - --hash=sha256:82eed523a0a5eb12a81fa4eacd9f342caeb3f900eb4b798740e6696ad07e63f9 \ - --hash=sha256:885898302a57aab948973e8b5d32a4229392b9fb2d986ab1d4ffd590e5ba90ec - # via pyscreenshot -entrypoint2==1.1 \ - --hash=sha256:eeb8c327bdb65cdd1668c023a6b110b7e3d1a046fb05e043861ebd9264b3a257 \ - --hash=sha256:fc0b7fe7b21acdab47a585ab9407ca7e5c4f96cb6888575db6b0ceb91f0e105a - # via pyscreenshot -exceptiongroup==1.1.3 \ - --hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \ - --hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3 - # via pytest -execnet==2.0.2 \ - --hash=sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41 \ - --hash=sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af - # via pytest-xdist -face==22.0.0 \ - --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ - --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d - # via glom -flake8==6.1.0 \ - --hash=sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23 \ - --hash=sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5 - # via -r requirements/dev-sdw-requirements.in -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c - # via -r requirements/dev-sdw-requirements.in -glom==22.1.0 \ - --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ - --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 - # via semgrep -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 - # via - # -r requirements/requirements.in - # requests - # yarl -importlib-metadata==6.8.0 \ - --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ - --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 - # via build -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via pytest -isort==5.12.0 \ - --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ - --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 - # via -r requirements/dev-sdw-requirements.in -jeepney==0.8.0 \ - --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ - --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 - # via pyscreenshot -jinja2==3.0.2 \ - --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ - --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c - # via -r requirements/requirements.in -jsonschema==4.19.1 \ - --hash=sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e \ - --hash=sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf - # via semgrep -jsonschema-specifications==2023.7.1 \ - --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ - --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb - # via jsonschema -libarchive-c==5.0 \ - --hash=sha256:3ed7ee9b7d7d6fc200aecce63cee2084754cb6c00e946f6d007b80236e662bff \ - --hash=sha256:d673f56673d87ec740d1a328fa205cafad1d60f5daca4685594deb039d32b159 - # via diffoscope -lxml==4.9.3 \ - --hash=sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 \ - --hash=sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d \ - --hash=sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a \ - --hash=sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 \ - --hash=sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 \ - --hash=sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 \ - --hash=sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 \ - --hash=sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 \ - --hash=sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f \ - --hash=sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 \ - --hash=sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 \ - --hash=sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f \ - --hash=sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 \ - --hash=sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef \ - --hash=sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 \ - --hash=sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 \ - --hash=sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc \ - --hash=sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 \ - --hash=sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da \ - --hash=sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a \ - --hash=sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 \ - --hash=sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 \ - --hash=sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd \ - --hash=sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 \ - --hash=sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c \ - --hash=sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be \ - --hash=sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 \ - --hash=sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c \ - --hash=sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 \ - --hash=sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc \ - --hash=sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 \ - --hash=sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 \ - --hash=sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 \ - --hash=sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d \ - --hash=sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 \ - --hash=sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d \ - --hash=sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e \ - --hash=sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 \ - --hash=sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 \ - --hash=sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 \ - --hash=sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf \ - --hash=sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b \ - --hash=sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 \ - --hash=sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 \ - --hash=sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 \ - --hash=sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 \ - --hash=sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d \ - --hash=sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce \ - --hash=sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d \ - --hash=sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f \ - --hash=sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db \ - --hash=sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 \ - --hash=sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 \ - --hash=sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac \ - --hash=sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 \ - --hash=sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 \ - --hash=sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 \ - --hash=sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d \ - --hash=sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b \ - --hash=sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a \ - --hash=sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 \ - --hash=sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 \ - --hash=sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 \ - --hash=sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 \ - --hash=sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c \ - --hash=sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c \ - --hash=sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 \ - --hash=sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 \ - --hash=sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 \ - --hash=sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 \ - --hash=sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf \ - --hash=sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb \ - --hash=sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b \ - --hash=sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 \ - --hash=sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 \ - --hash=sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 \ - --hash=sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e \ - --hash=sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 \ - --hash=sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 \ - --hash=sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 \ - --hash=sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b \ - --hash=sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 \ - --hash=sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 \ - --hash=sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 \ - --hash=sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa \ - --hash=sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 \ - --hash=sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 \ - --hash=sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 \ - --hash=sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b \ - --hash=sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 \ - --hash=sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 \ - --hash=sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 - # via translate-toolkit -mako==1.2.2 \ - --hash=sha256:3724869b363ba630a272a5f89f68c070352137b8fd1757650017b7e06fda163f \ - --hash=sha256:8efcb8004681b5f71d09c983ad5a9e6f5c40601a6ec469148753292abc0da534 - # via - # -r requirements/requirements.in - # alembic -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb - # via rich -markupsafe==2.1.3 \ - --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ - --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ - --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ - --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ - --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ - --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ - --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ - --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ - --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ - --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ - --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ - --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ - --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ - --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ - --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ - --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ - --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ - --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ - --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ - --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ - --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ - --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ - --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ - --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ - --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ - --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ - --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ - --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ - --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ - --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ - --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ - --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ - --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ - --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ - --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ - --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ - --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ - --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ - --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ - --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ - --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ - --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ - --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ - --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ - --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ - --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ - --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ - --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ - --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ - --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ - --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ - --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ - --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ - --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ - --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ - --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ - --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ - --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 - # via - # -r requirements/dev-sdw-requirements.in - # -r requirements/requirements.in - # jinja2 - # mako -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba - # via markdown-it-py -mouseinfo==0.1.3 \ - --hash=sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7 - # via pyautogui -mss==9.0.1 \ - --hash=sha256:6eb7b9008cf27428811fa33aeb35f3334db81e3f7cc2dd49ec7c6e5a94b39f12 \ - --hash=sha256:7ee44db7ab14cbea6a3eb63813c57d677a109ca5979d3b76046e4bddd3ca1a0b - # via pyscreenshot -multidict==6.0.4 \ - --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ - --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ - --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ - --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ - --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ - --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ - --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ - --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ - --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ - --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ - --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ - --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ - --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ - --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ - --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ - --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ - --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ - --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ - --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ - --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ - --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ - --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ - --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ - --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ - --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ - --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ - --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ - --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ - --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ - --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ - --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ - --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ - --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ - --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ - --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ - --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ - --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ - --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ - --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ - --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ - --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ - --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ - --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ - --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ - --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ - --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ - --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ - --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ - --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ - --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ - --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ - --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ - --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ - --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ - --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ - --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ - --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ - --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ - --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ - --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ - --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ - --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ - --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ - --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ - --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ - --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ - --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ - --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ - --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ - --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ - --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ - --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ - --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ - --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba - # via yarl -mypy==1.5.1 \ - --hash=sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315 \ - --hash=sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0 \ - --hash=sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373 \ - --hash=sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a \ - --hash=sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161 \ - --hash=sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275 \ - --hash=sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693 \ - --hash=sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb \ - --hash=sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65 \ - --hash=sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4 \ - --hash=sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb \ - --hash=sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243 \ - --hash=sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14 \ - --hash=sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4 \ - --hash=sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1 \ - --hash=sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a \ - --hash=sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160 \ - --hash=sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25 \ - --hash=sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12 \ - --hash=sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d \ - --hash=sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92 \ - --hash=sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770 \ - --hash=sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2 \ - --hash=sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70 \ - --hash=sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb \ - --hash=sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5 \ - --hash=sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f - # via -r requirements/dev-sdw-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build - # pytest - # semgrep -pathlib2==2.3.2 \ - --hash=sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83 \ - --hash=sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a - # via -r requirements/requirements.in -pathspec==0.11.2 \ - --hash=sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20 \ - --hash=sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3 - # via black -peewee==3.16.3 \ - --hash=sha256:12b30e931193bc37b11f7c2ac646e3f67125a8b1a543ad6ab37ad124c8df7d16 - # via semgrep -pillow==10.0.1 \ - --hash=sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff \ - --hash=sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f \ - --hash=sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21 \ - --hash=sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635 \ - --hash=sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a \ - --hash=sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f \ - --hash=sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1 \ - --hash=sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d \ - --hash=sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db \ - --hash=sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849 \ - --hash=sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7 \ - --hash=sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876 \ - --hash=sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3 \ - --hash=sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317 \ - --hash=sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91 \ - --hash=sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d \ - --hash=sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b \ - --hash=sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd \ - --hash=sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed \ - --hash=sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500 \ - --hash=sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7 \ - --hash=sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a \ - --hash=sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a \ - --hash=sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0 \ - --hash=sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf \ - --hash=sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f \ - --hash=sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1 \ - --hash=sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088 \ - --hash=sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971 \ - --hash=sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a \ - --hash=sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205 \ - --hash=sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54 \ - --hash=sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08 \ - --hash=sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21 \ - --hash=sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d \ - --hash=sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08 \ - --hash=sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e \ - --hash=sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf \ - --hash=sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b \ - --hash=sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145 \ - --hash=sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2 \ - --hash=sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d \ - --hash=sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d \ - --hash=sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf \ - --hash=sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad \ - --hash=sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d \ - --hash=sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1 \ - --hash=sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4 \ - --hash=sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2 \ - --hash=sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19 \ - --hash=sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37 \ - --hash=sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4 \ - --hash=sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68 \ - --hash=sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1 - # via - # -r requirements/dev-sdw-requirements.in - # pyscreeze -pip-tools==7.3.0 \ - --hash=sha256:8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e \ - --hash=sha256:8e9c99127fe024c025b46a0b2d15c7bd47f18f33226cf7330d35493663fc1d1d - # via -r requirements/dev-sdw-requirements.in -platformdirs==3.10.0 \ - --hash=sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d \ - --hash=sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d - # via black -pluggy==1.3.0 \ - --hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \ - --hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 - # via pytest -polib==1.2.0 \ - --hash=sha256:1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d \ - --hash=sha256:f3ef94aefed6e183e342a8a269ae1fc4742ba193186ad76f175938621dbfc26b - # via -r requirements/dev-sdw-requirements.in -pyautogui==0.9.54 \ - --hash=sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2 - # via -r requirements/dev-sdw-requirements.in -pycodestyle==2.11.0 \ - --hash=sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0 \ - --hash=sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8 - # via flake8 -pyflakes==3.1.0 \ - --hash=sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774 \ - --hash=sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc - # via flake8 -pygetwindow==0.0.9 \ - --hash=sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688 - # via pyautogui -pygments==2.16.1 \ - --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ - --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 - # via rich -pymsgbox==1.0.9 \ - --hash=sha256:2194227de8bff7a3d6da541848705a155dcbb2a06ee120d9f280a1d7f51263ff - # via pyautogui -pyperclip==1.8.2 \ - --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 - # via mouseinfo -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pyqt5==5.15.2 \ - --hash=sha256:29889845688a54d62820585ad5b2e0200a36b304ff3d7a555e95599f110ba4ce \ - --hash=sha256:372b08dc9321d1201e4690182697c5e7ffb2e0770e6b4a45519025134b12e4fc \ - --hash=sha256:894ca4ae767a8d6cf5903784b71f755073c78cb8c167eecf6e4ed6b3b055ac6a \ - --hash=sha256:ea24f24b7679bf393dd2e4f53fe0ce65021be18304c1ff7a226c2fc5c356d0da \ - --hash=sha256:faaecb76ec65e12673a968e7f5bc02495957e6996f0a3fa0d98895f9e4113746 - # via -r requirements/dev-bullseye-requirements.in -pyqt5-sip==12.8.1 \ - --hash=sha256:0304ca9114b9817a270f67f421355075b78ff9fc25ac58ffd72c2601109d2194 \ - --hash=sha256:0cd969be528c27bbd4755bd323dff4a79a8fdda28215364e6ce3e069cb56c2a9 \ - --hash=sha256:2f35e82fd7ec1e1f6716e9154721c7594956a4f5bd4f826d8c6a6453833cc2f0 \ - --hash=sha256:30e944db9abee9cc757aea16906d4198129558533eb7fadbe48c5da2bd18e0bd \ - --hash=sha256:34dcd29be47553d5f016ff86e89e24cbc5eebae92eb2f96fb32d2d7ba028c43c \ - --hash=sha256:5a011aeff89660622a6d5c3388d55a9d76932f3b82c95e82fc31abd8b1d2990d \ - --hash=sha256:6c1ebee60f1d2b3c70aff866b7933d8d8d7646011f7c32f9321ee88c290aa4f9 \ - --hash=sha256:7b81382ce188d63890a0e35abe0f9bb946cabc873a31873b73583b0fc84ac115 \ - --hash=sha256:832fd60a264de4134c2824d393320838f3ab648180c9c357ec58a74524d24507 \ - --hash=sha256:84ba7746762bd223bed22428e8561aa267a229c28344c2d28c5d5d3f8970cffb \ - --hash=sha256:9312ec47cac4e33c11503bc1cbeeb0bdae619620472f38e2078c5a51020a930f \ - --hash=sha256:a1b8ef013086e224b8e86c93f880f776d01b59195bdfa2a8e0b23f0480678fec \ - --hash=sha256:a29e2ac399429d3b7738f73e9081e50783e61ac5d29344e0802d0dcd6056c5a2 \ - --hash=sha256:b6d42250baec52a5f77de64e2951d001c5501c3a2df2179f625b241cbaec3369 \ - --hash=sha256:bb5a87b66fc1445915104ee97f7a20a69decb42f52803e3b0795fa17ff88226c \ - --hash=sha256:c317ab1263e6417c498b81f5c970a9b1af7acefab1f80b4cc0f2f8e661f29fc5 \ - --hash=sha256:c9800729badcb247765e4ffe2241549d02da1fa435b9db224845bc37c3e99cb0 \ - --hash=sha256:c9d6d448c29dc6606bb7974696608f81f4316c8234f7c7216396ed110075e777 \ - --hash=sha256:da9c9f1e65b9d09e73bd75befc82961b6b61b5a3b9d0a7c832168e1415f163c6 \ - --hash=sha256:ed897c58acf4a3cdca61469daa31fe6e44c33c6c06a37c3f21fab31780b3b86a \ - --hash=sha256:f168f0a7f32b81bfeffdf003c36f25d81c97dee5eb67072a5183e761fe250f13 - # via - # -r requirements/dev-bullseye-requirements.in - # pyqt5 -pyqt5-stubs==5.15.6.0 \ - --hash=sha256:7fb8177c72489a8911f021b7bd7c33f12c87f6dba92dcef3fdcdb5d9400f0f3f \ - --hash=sha256:91270ac23ebf38a1dc04cd97aa852cd08af82dc839100e5395af1447e3e99707 - # via -r requirements/dev-sdw-requirements.in -pyrect==0.2.0 \ - --hash=sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78 - # via pygetwindow -pyscreenshot==3.1 \ - --hash=sha256:73d406d41a0977125bdfd2f6488f0caf1394e84d1d4c1065d5e8b1400b307096 \ - --hash=sha256:8c0e93f0aef66a6bfe55a86abfced6bd396ae4b4f6cc1e36f04a28ad2625594d - # via pyscreeze -pyscreeze==0.1.29 \ - --hash=sha256:d074547795e128da176599a6d4470500e425d49b05cf22e9808a7984c3612836 - # via pyautogui -pytest==7.4.2 \ - --hash=sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002 \ - --hash=sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069 - # via - # -r requirements/dev-sdw-requirements.in - # pytest-cov - # pytest-mock - # pytest-qt - # pytest-random-order - # pytest-vcr - # pytest-xdist -pytest-cov==4.1.0 \ - --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ - --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a - # via -r requirements/dev-sdw-requirements.in -pytest-mock==3.11.1 \ - --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ - --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f - # via -r requirements/dev-sdw-requirements.in -pytest-qt==4.2.0 \ - --hash=sha256:00a17b586dd530b6d7a9399923a40489ca4a9a309719011175f55dc6b5dc8f41 \ - --hash=sha256:a7659960a1ab2af8fc944655a157ff45d714b80ed7a6af96a4b5bb99ecf40a22 - # via -r requirements/dev-sdw-requirements.in -pytest-random-order==1.1.0 \ - --hash=sha256:6cb1e59ab0f798bb0c3488c11ae0c70d7d3340306a466d28b28ccd8ef8c20b7e \ - --hash=sha256:dbe6debb9353a7af984cc9eddbeb3577dd4dbbcc1529a79e3d21f68ed9b45605 - # via -r requirements/dev-sdw-requirements.in -pytest-vcr==1.0.2 \ - --hash=sha256:23ee51b75abbcc43d926272773aae4f39f93aceb75ed56852d0bf618f92e1896 \ - --hash=sha256:2f316e0539399bea0296e8b8401145c62b6f85e9066af7e57b6151481b0d6d9c - # via -r requirements/dev-sdw-requirements.in -pytest-xdist==3.3.1 \ - --hash=sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93 \ - --hash=sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2 - # via -r requirements/dev-sdw-requirements.in -python-dateutil==2.7.5 \ - --hash=sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93 \ - --hash=sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02 - # via - # -r requirements/requirements.in - # alembic - # arrow - # wlc -python-editor==1.0.3 \ - --hash=sha256:a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565 - # via - # -r requirements/requirements.in - # alembic -python-lsp-jsonrpc==1.0.0 \ - --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ - --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd - # via semgrep -python-magic==0.4.27 \ - --hash=sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b \ - --hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3 - # via diffoscope -python3-xlib==0.15 \ - --hash=sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8 - # via - # mouseinfo - # pyautogui -pytweening==1.0.7 \ - --hash=sha256:767134f1bf57b76c1ce9f692dd1cfc776d9a279de6724e8d04854508fd7ededb - # via pyautogui -pyxdg==0.28 \ - --hash=sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4 \ - --hash=sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab - # via wlc -pyyaml==6.0.1 \ - --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ - --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ - --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ - --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ - --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ - --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ - --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ - --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ - --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ - --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ - --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ - --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ - --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ - --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ - --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ - --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ - --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ - --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ - --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ - --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ - --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ - --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ - --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ - --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ - --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ - --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ - --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ - --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ - --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ - --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ - --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ - --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ - --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ - --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ - --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ - --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ - --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ - --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ - --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ - --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ - --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ - --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ - --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ - --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ - --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ - --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ - --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ - --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ - --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f - # via vcrpy -referencing==0.30.2 \ - --hash=sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf \ - --hash=sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via - # -r requirements/requirements.in - # securedrop-sdk - # semgrep - # wlc -rich==13.5.3 \ - --hash=sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6 \ - --hash=sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9 - # via semgrep -rpds-py==0.10.3 \ - --hash=sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9 \ - --hash=sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637 \ - --hash=sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5 \ - --hash=sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9 \ - --hash=sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c \ - --hash=sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957 \ - --hash=sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6 \ - --hash=sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154 \ - --hash=sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8 \ - --hash=sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569 \ - --hash=sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2 \ - --hash=sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c \ - --hash=sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453 \ - --hash=sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1 \ - --hash=sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7 \ - --hash=sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b \ - --hash=sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9 \ - --hash=sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496 \ - --hash=sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3 \ - --hash=sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b \ - --hash=sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6 \ - --hash=sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da \ - --hash=sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842 \ - --hash=sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd \ - --hash=sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294 \ - --hash=sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71 \ - --hash=sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093 \ - --hash=sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e \ - --hash=sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c \ - --hash=sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e \ - --hash=sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b \ - --hash=sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97 \ - --hash=sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac \ - --hash=sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf \ - --hash=sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a \ - --hash=sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc \ - --hash=sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0 \ - --hash=sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623 \ - --hash=sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6 \ - --hash=sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8 \ - --hash=sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b \ - --hash=sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d \ - --hash=sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff \ - --hash=sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb \ - --hash=sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08 \ - --hash=sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33 \ - --hash=sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5 \ - --hash=sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a \ - --hash=sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a \ - --hash=sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762 \ - --hash=sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860 \ - --hash=sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73 \ - --hash=sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a \ - --hash=sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065 \ - --hash=sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c \ - --hash=sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c \ - --hash=sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec \ - --hash=sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515 \ - --hash=sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72 \ - --hash=sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd \ - --hash=sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec \ - --hash=sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12 \ - --hash=sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1 \ - --hash=sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557 \ - --hash=sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25 \ - --hash=sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff \ - --hash=sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8 \ - --hash=sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9 \ - --hash=sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d \ - --hash=sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a \ - --hash=sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e \ - --hash=sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c \ - --hash=sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0 \ - --hash=sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48 \ - --hash=sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e \ - --hash=sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314 \ - --hash=sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717 \ - --hash=sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95 \ - --hash=sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8 \ - --hash=sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57 \ - --hash=sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33 \ - --hash=sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1 \ - --hash=sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f \ - --hash=sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f \ - --hash=sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9 \ - --hash=sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599 \ - --hash=sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41 \ - --hash=sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391 \ - --hash=sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475 \ - --hash=sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882 \ - --hash=sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740 \ - --hash=sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f \ - --hash=sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee \ - --hash=sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836 \ - --hash=sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c \ - --hash=sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a \ - --hash=sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb - # via - # jsonschema - # referencing -ruamel-yaml==0.17.32 \ - --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ - --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 - # via semgrep -ruamel-yaml-clib==0.2.7 \ - --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ - --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ - --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ - --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ - --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ - --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ - --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ - --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ - --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ - --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ - --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ - --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ - --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ - --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ - --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ - --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ - --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ - --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ - --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ - --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ - --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ - --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ - --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ - --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ - --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ - --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ - --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ - --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ - --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ - --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ - --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ - --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ - --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ - --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ - --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 - # via ruamel-yaml -securedrop-sdk==0.4.0 \ - --hash=sha256:c08f77bae5f900b1fbcd3b5aae1c931dc877e7289d69aa5a8b1e3c3f4e0dc561 - # via -r requirements/requirements.in -semgrep==1.41.0 \ - --hash=sha256:0ebb2f992618f145c49e5c8de56ed7aec57819b9736128c3690a95213fa0da79 \ - --hash=sha256:551dc331001674d742afd80aa3b7e8a0ee5ede28f3502ca915338d6548e161d6 \ - --hash=sha256:bb1679826cb14a9444e5cfb5dcb1cd9c20071baf9ae541eed200076721362ad6 \ - --hash=sha256:d7231b5a65a77da14af9da66d95044ee41137b03da1380f6c646b1e2b60ef81d \ - --hash=sha256:fbcc2ea85e828023f2da51dcf93684d09b95b062716f585587d27485b0af5c37 - # via -r requirements/dev-sdw-requirements.in -six==1.11.0 \ - --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb - # via - # -r requirements/requirements.in - # pathlib2 - # python-dateutil -sqlalchemy==1.3.3 \ - --hash=sha256:91c54ca8345008fceaec987e10924bf07dcab36c442925357e5a467b36a38319 - # via - # -r requirements/requirements.in - # alembic -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f - # via -r requirements/dev-sdw-requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # black - # build - # coverage - # mypy - # pip-tools - # pyproject-hooks - # pytest - # semgrep -translate-toolkit==3.10.1 \ - --hash=sha256:642e8597c55c3a31b8a6506194f0e64095965d5a1e7e0261d045a2865783a366 \ - --hash=sha256:ce0f7702259b4469868883d58176b65845dd1cf75179e0ebb9e95cdc65d5b2b0 - # via -r requirements/dev-sdw-requirements.in -types-polib==1.2.0.1 \ - --hash=sha256:af01929cc4c9d61827f2c869ec90cf28c20e3247093bb7181b384ec593e5bef6 \ - --hash=sha256:bd7f90ac43f26572b427a9d341a9363e0fa3084d5c0a79447246a579d47405f1 - # via -r requirements/dev-sdw-requirements.in -types-python-dateutil==2.8.19.14 \ - --hash=sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b \ - --hash=sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 - # via -r requirements/dev-sdw-requirements.in -types-setuptools==68.2.0.0 \ - --hash=sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b \ - --hash=sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85 - # via -r requirements/dev-sdw-requirements.in -typing-extensions==4.8.0 \ - --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ - --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef - # via - # black - # mypy - # semgrep -ujson==5.8.0 \ - --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ - --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ - --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ - --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ - --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ - --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ - --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ - --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ - --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ - --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ - --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ - --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ - --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ - --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ - --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ - --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ - --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ - --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ - --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ - --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ - --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ - --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ - --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ - --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ - --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ - --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ - --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ - --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ - --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ - --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ - --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ - --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ - --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ - --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ - --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ - --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ - --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ - --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ - --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ - --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ - --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ - --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ - --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ - --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ - --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ - --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ - --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ - --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ - --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ - --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ - --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ - --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ - --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ - --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ - --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ - --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ - --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ - --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ - --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ - --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ - --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c - # via python-lsp-jsonrpc -urllib3==1.26.16 \ - --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ - --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 - # via - # -r requirements/requirements.in - # requests - # securedrop-sdk - # semgrep - # vcrpy -vcrpy==5.1.0 \ - --hash=sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e \ - --hash=sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2 - # via pytest-vcr -wcmatch==8.5 \ - --hash=sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5 \ - --hash=sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3 - # via semgrep -wheel==0.41.2 \ - --hash=sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985 \ - --hash=sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8 - # via pip-tools -wlc==1.13 \ - --hash=sha256:319e9abee30d4f91c82175bb7b3ba400978eef4a3e4ab8099c19c68cdcb8b581 \ - --hash=sha256:97a618abd2764884da9e7ffa1b2e623a45e469760e014590fb7c1064188910d6 - # via -r requirements/dev-sdw-requirements.in -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 - # via vcrpy -yarl==1.9.2 \ - --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ - --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ - --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ - --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ - --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ - --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ - --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ - --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ - --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ - --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ - --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ - --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ - --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ - --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ - --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ - --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ - --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ - --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ - --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ - --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ - --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ - --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ - --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ - --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ - --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ - --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ - --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ - --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ - --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ - --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ - --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ - --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ - --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ - --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ - --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ - --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ - --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ - --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ - --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ - --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ - --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ - --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ - --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ - --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ - --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ - --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ - --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ - --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ - --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ - --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ - --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ - --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ - --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ - --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ - --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ - --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ - --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ - --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ - --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ - --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ - --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ - --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ - --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ - --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ - --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ - --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ - --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ - --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ - --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ - --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ - --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ - --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ - --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ - --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 - # via vcrpy -zipp==3.17.0 \ - --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ - --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==23.2.1 \ - --hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \ - --hash=sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2 - # via pip-tools -setuptools==68.2.2 \ - --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ - --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a - # via pip-tools diff --git a/requirements/dev-mac-requirements.in b/requirements/dev-mac-requirements.in deleted file mode 100644 index 907429866..000000000 --- a/requirements/dev-mac-requirements.in +++ /dev/null @@ -1,2 +0,0 @@ --r dev-bullseye-requirements.in -rubicon-objc==0.4.2 diff --git a/requirements/dev-sdw-requirements.in b/requirements/dev-sdw-requirements.in deleted file mode 100644 index ad29f63a2..000000000 --- a/requirements/dev-sdw-requirements.in +++ /dev/null @@ -1,30 +0,0 @@ --r requirements.in -babel -black -diffoscope -flake8 -flaky -isort -MarkupSafe -mypy -Pillow>=9.0.1 # for mouseinfo, pyscreeze as of CVE-2022-{22817,24303} -pip-tools>=6.8.0 # for jazzband/piptools#1617 -polib -PyAutoGUI -pyobjc-core;platform_system=="Darwin" -pyobjc;platform_system=="Darwin" -pyqt5-stubs -pytest>=7.2.0 # CVE-2022-42969 -pytest-cov -pytest-mock -pytest-qt>=4.2.0 # to drop requirement of deprecated py package -pytest-random-order -pytest-vcr -pytest-xdist>=3.0.2 # CVE-2022-42969 -semgrep -toml -translate-toolkit -types-polib -types-python-dateutil -types-setuptools -wlc diff --git a/requirements/dev-sdw-requirements.txt b/requirements/dev-sdw-requirements.txt deleted file mode 100644 index 0a3572808..000000000 --- a/requirements/dev-sdw-requirements.txt +++ /dev/null @@ -1,1329 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-sdw-requirements.txt requirements/dev-sdw-requirements.in -# -alembic==1.1.0 \ - --hash=sha256:4a4811119efbdc5259d1f4c8f6de977b36ad3bcc919f59a29c2960c5ef9149e4 - # via -r requirements/requirements.in -argcomplete==3.1.2 \ - --hash=sha256:d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b \ - --hash=sha256:d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99 - # via wlc -arrow==0.12.1 \ - --hash=sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd - # via -r requirements/requirements.in -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 - # via - # glom - # jsonschema - # referencing - # semgrep -babel==2.12.1 \ - --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ - --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 - # via -r requirements/dev-sdw-requirements.in -black==23.9.1 \ - --hash=sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f \ - --hash=sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7 \ - --hash=sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100 \ - --hash=sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573 \ - --hash=sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d \ - --hash=sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f \ - --hash=sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9 \ - --hash=sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300 \ - --hash=sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948 \ - --hash=sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325 \ - --hash=sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9 \ - --hash=sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71 \ - --hash=sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186 \ - --hash=sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f \ - --hash=sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe \ - --hash=sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855 \ - --hash=sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80 \ - --hash=sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393 \ - --hash=sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c \ - --hash=sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204 \ - --hash=sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377 \ - --hash=sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301 - # via -r requirements/dev-sdw-requirements.in -boltons==21.0.0 \ - --hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \ - --hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b - # via - # face - # glom - # semgrep -bracex==2.4 \ - --hash=sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb \ - --hash=sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418 - # via wcmatch -build==1.0.3 \ - --hash=sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b \ - --hash=sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa - # via - # -r requirements/requirements.in - # requests -click==8.1.7 \ - --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ - --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de - # via - # black - # click-option-group - # pip-tools - # semgrep -click-option-group==0.5.6 \ - --hash=sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7 \ - --hash=sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777 - # via semgrep -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via semgrep -coverage[toml]==7.3.1 \ - --hash=sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375 \ - --hash=sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344 \ - --hash=sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e \ - --hash=sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745 \ - --hash=sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f \ - --hash=sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194 \ - --hash=sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a \ - --hash=sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f \ - --hash=sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760 \ - --hash=sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8 \ - --hash=sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392 \ - --hash=sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d \ - --hash=sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc \ - --hash=sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40 \ - --hash=sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981 \ - --hash=sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0 \ - --hash=sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92 \ - --hash=sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3 \ - --hash=sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0 \ - --hash=sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086 \ - --hash=sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7 \ - --hash=sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465 \ - --hash=sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140 \ - --hash=sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952 \ - --hash=sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3 \ - --hash=sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8 \ - --hash=sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f \ - --hash=sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593 \ - --hash=sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0 \ - --hash=sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204 \ - --hash=sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037 \ - --hash=sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276 \ - --hash=sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9 \ - --hash=sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26 \ - --hash=sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce \ - --hash=sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7 \ - --hash=sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136 \ - --hash=sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a \ - --hash=sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4 \ - --hash=sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c \ - --hash=sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f \ - --hash=sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832 \ - --hash=sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3 \ - --hash=sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969 \ - --hash=sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520 \ - --hash=sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887 \ - --hash=sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3 \ - --hash=sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6 \ - --hash=sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1 \ - --hash=sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff \ - --hash=sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981 \ - --hash=sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e - # via pytest-cov -defusedxml==0.7.1 \ - --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ - --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - # via semgrep -diffoscope==249 \ - --hash=sha256:bc4d8cb3198025013784ef7e3fa61b7a642de39e5b790c45d7c29d153306fbdd - # via -r requirements/dev-sdw-requirements.in -easyprocess==1.1 \ - --hash=sha256:82eed523a0a5eb12a81fa4eacd9f342caeb3f900eb4b798740e6696ad07e63f9 \ - --hash=sha256:885898302a57aab948973e8b5d32a4229392b9fb2d986ab1d4ffd590e5ba90ec - # via pyscreenshot -entrypoint2==1.1 \ - --hash=sha256:eeb8c327bdb65cdd1668c023a6b110b7e3d1a046fb05e043861ebd9264b3a257 \ - --hash=sha256:fc0b7fe7b21acdab47a585ab9407ca7e5c4f96cb6888575db6b0ceb91f0e105a - # via pyscreenshot -exceptiongroup==1.1.3 \ - --hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \ - --hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3 - # via pytest -execnet==2.0.2 \ - --hash=sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41 \ - --hash=sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af - # via pytest-xdist -face==22.0.0 \ - --hash=sha256:344fe31562d0f6f444a45982418f3793d4b14f9abb98ccca1509d22e0a3e7e35 \ - --hash=sha256:d5d692f90bc8f5987b636e47e36384b9bbda499aaf0a77aa0b0bbe834c76923d - # via glom -flake8==6.1.0 \ - --hash=sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23 \ - --hash=sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5 - # via -r requirements/dev-sdw-requirements.in -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c - # via -r requirements/dev-sdw-requirements.in -glom==22.1.0 \ - --hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \ - --hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772 - # via semgrep -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 - # via - # -r requirements/requirements.in - # requests - # yarl -importlib-metadata==6.8.0 \ - --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ - --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 - # via build -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via pytest -isort==5.12.0 \ - --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ - --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 - # via -r requirements/dev-sdw-requirements.in -jeepney==0.8.0 \ - --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ - --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 - # via pyscreenshot -jinja2==3.0.2 \ - --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ - --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c - # via -r requirements/requirements.in -jsonschema==4.19.1 \ - --hash=sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e \ - --hash=sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf - # via semgrep -jsonschema-specifications==2023.7.1 \ - --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ - --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb - # via jsonschema -libarchive-c==5.0 \ - --hash=sha256:3ed7ee9b7d7d6fc200aecce63cee2084754cb6c00e946f6d007b80236e662bff \ - --hash=sha256:d673f56673d87ec740d1a328fa205cafad1d60f5daca4685594deb039d32b159 - # via diffoscope -lxml==4.9.3 \ - --hash=sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 \ - --hash=sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d \ - --hash=sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a \ - --hash=sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120 \ - --hash=sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305 \ - --hash=sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287 \ - --hash=sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23 \ - --hash=sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52 \ - --hash=sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f \ - --hash=sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4 \ - --hash=sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584 \ - --hash=sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f \ - --hash=sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693 \ - --hash=sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef \ - --hash=sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5 \ - --hash=sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02 \ - --hash=sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc \ - --hash=sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7 \ - --hash=sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da \ - --hash=sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a \ - --hash=sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40 \ - --hash=sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8 \ - --hash=sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd \ - --hash=sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601 \ - --hash=sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c \ - --hash=sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be \ - --hash=sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2 \ - --hash=sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c \ - --hash=sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129 \ - --hash=sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc \ - --hash=sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2 \ - --hash=sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1 \ - --hash=sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7 \ - --hash=sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d \ - --hash=sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477 \ - --hash=sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d \ - --hash=sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e \ - --hash=sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7 \ - --hash=sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2 \ - --hash=sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574 \ - --hash=sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf \ - --hash=sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b \ - --hash=sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98 \ - --hash=sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12 \ - --hash=sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42 \ - --hash=sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35 \ - --hash=sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d \ - --hash=sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce \ - --hash=sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d \ - --hash=sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f \ - --hash=sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db \ - --hash=sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4 \ - --hash=sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694 \ - --hash=sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac \ - --hash=sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2 \ - --hash=sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7 \ - --hash=sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96 \ - --hash=sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d \ - --hash=sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b \ - --hash=sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a \ - --hash=sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13 \ - --hash=sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340 \ - --hash=sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6 \ - --hash=sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458 \ - --hash=sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c \ - --hash=sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c \ - --hash=sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9 \ - --hash=sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432 \ - --hash=sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991 \ - --hash=sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69 \ - --hash=sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf \ - --hash=sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb \ - --hash=sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b \ - --hash=sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833 \ - --hash=sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76 \ - --hash=sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85 \ - --hash=sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e \ - --hash=sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50 \ - --hash=sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8 \ - --hash=sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4 \ - --hash=sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b \ - --hash=sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5 \ - --hash=sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190 \ - --hash=sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7 \ - --hash=sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa \ - --hash=sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0 \ - --hash=sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9 \ - --hash=sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0 \ - --hash=sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b \ - --hash=sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5 \ - --hash=sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7 \ - --hash=sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4 - # via translate-toolkit -mako==1.2.2 \ - --hash=sha256:3724869b363ba630a272a5f89f68c070352137b8fd1757650017b7e06fda163f \ - --hash=sha256:8efcb8004681b5f71d09c983ad5a9e6f5c40601a6ec469148753292abc0da534 - # via - # -r requirements/requirements.in - # alembic -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb - # via rich -markupsafe==2.1.3 \ - --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ - --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ - --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ - --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ - --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ - --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ - --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ - --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ - --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ - --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ - --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ - --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ - --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ - --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ - --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ - --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ - --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ - --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ - --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ - --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ - --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ - --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ - --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ - --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ - --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ - --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ - --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ - --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ - --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ - --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ - --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ - --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ - --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ - --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ - --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ - --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ - --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ - --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ - --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ - --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ - --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ - --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ - --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ - --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ - --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ - --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ - --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ - --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ - --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ - --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ - --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ - --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ - --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ - --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ - --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ - --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ - --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ - --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 - # via - # -r requirements/dev-sdw-requirements.in - # -r requirements/requirements.in - # jinja2 - # mako -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba - # via markdown-it-py -mouseinfo==0.1.3 \ - --hash=sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7 - # via pyautogui -mss==9.0.1 \ - --hash=sha256:6eb7b9008cf27428811fa33aeb35f3334db81e3f7cc2dd49ec7c6e5a94b39f12 \ - --hash=sha256:7ee44db7ab14cbea6a3eb63813c57d677a109ca5979d3b76046e4bddd3ca1a0b - # via pyscreenshot -multidict==6.0.4 \ - --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ - --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ - --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ - --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ - --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ - --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ - --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ - --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ - --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ - --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ - --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ - --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ - --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ - --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ - --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ - --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ - --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ - --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ - --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ - --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ - --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ - --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ - --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ - --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ - --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ - --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ - --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ - --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ - --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ - --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ - --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ - --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ - --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ - --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ - --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ - --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ - --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ - --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ - --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ - --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ - --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ - --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ - --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ - --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ - --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ - --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ - --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ - --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ - --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ - --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ - --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ - --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ - --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ - --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ - --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ - --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ - --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ - --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ - --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ - --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ - --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ - --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ - --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ - --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ - --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ - --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ - --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ - --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ - --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ - --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ - --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ - --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ - --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ - --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba - # via yarl -mypy==1.5.1 \ - --hash=sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315 \ - --hash=sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0 \ - --hash=sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373 \ - --hash=sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a \ - --hash=sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161 \ - --hash=sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275 \ - --hash=sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693 \ - --hash=sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb \ - --hash=sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65 \ - --hash=sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4 \ - --hash=sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb \ - --hash=sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243 \ - --hash=sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14 \ - --hash=sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4 \ - --hash=sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1 \ - --hash=sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a \ - --hash=sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160 \ - --hash=sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25 \ - --hash=sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12 \ - --hash=sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d \ - --hash=sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92 \ - --hash=sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770 \ - --hash=sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2 \ - --hash=sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70 \ - --hash=sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb \ - --hash=sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5 \ - --hash=sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f - # via -r requirements/dev-sdw-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build - # pytest - # semgrep -pathlib2==2.3.2 \ - --hash=sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83 \ - --hash=sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a - # via -r requirements/requirements.in -pathspec==0.11.2 \ - --hash=sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20 \ - --hash=sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3 - # via black -peewee==3.16.3 \ - --hash=sha256:12b30e931193bc37b11f7c2ac646e3f67125a8b1a543ad6ab37ad124c8df7d16 - # via semgrep -pillow==10.0.1 \ - --hash=sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff \ - --hash=sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f \ - --hash=sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21 \ - --hash=sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635 \ - --hash=sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a \ - --hash=sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f \ - --hash=sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1 \ - --hash=sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d \ - --hash=sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db \ - --hash=sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849 \ - --hash=sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7 \ - --hash=sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876 \ - --hash=sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3 \ - --hash=sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317 \ - --hash=sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91 \ - --hash=sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d \ - --hash=sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b \ - --hash=sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd \ - --hash=sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed \ - --hash=sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500 \ - --hash=sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7 \ - --hash=sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a \ - --hash=sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a \ - --hash=sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0 \ - --hash=sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf \ - --hash=sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f \ - --hash=sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1 \ - --hash=sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088 \ - --hash=sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971 \ - --hash=sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a \ - --hash=sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205 \ - --hash=sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54 \ - --hash=sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08 \ - --hash=sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21 \ - --hash=sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d \ - --hash=sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08 \ - --hash=sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e \ - --hash=sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf \ - --hash=sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b \ - --hash=sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145 \ - --hash=sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2 \ - --hash=sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d \ - --hash=sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d \ - --hash=sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf \ - --hash=sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad \ - --hash=sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d \ - --hash=sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1 \ - --hash=sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4 \ - --hash=sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2 \ - --hash=sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19 \ - --hash=sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37 \ - --hash=sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4 \ - --hash=sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68 \ - --hash=sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1 - # via - # -r requirements/dev-sdw-requirements.in - # pyscreeze -pip-tools==7.3.0 \ - --hash=sha256:8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e \ - --hash=sha256:8e9c99127fe024c025b46a0b2d15c7bd47f18f33226cf7330d35493663fc1d1d - # via -r requirements/dev-sdw-requirements.in -platformdirs==3.10.0 \ - --hash=sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d \ - --hash=sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d - # via black -pluggy==1.3.0 \ - --hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \ - --hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 - # via pytest -polib==1.2.0 \ - --hash=sha256:1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d \ - --hash=sha256:f3ef94aefed6e183e342a8a269ae1fc4742ba193186ad76f175938621dbfc26b - # via -r requirements/dev-sdw-requirements.in -pyautogui==0.9.54 \ - --hash=sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2 - # via -r requirements/dev-sdw-requirements.in -pycodestyle==2.11.0 \ - --hash=sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0 \ - --hash=sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8 - # via flake8 -pyflakes==3.1.0 \ - --hash=sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774 \ - --hash=sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc - # via flake8 -pygetwindow==0.0.9 \ - --hash=sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688 - # via pyautogui -pygments==2.16.1 \ - --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ - --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 - # via rich -pymsgbox==1.0.9 \ - --hash=sha256:2194227de8bff7a3d6da541848705a155dcbb2a06ee120d9f280a1d7f51263ff - # via pyautogui -pyperclip==1.8.2 \ - --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 - # via mouseinfo -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pyqt5-stubs==5.15.6.0 \ - --hash=sha256:7fb8177c72489a8911f021b7bd7c33f12c87f6dba92dcef3fdcdb5d9400f0f3f \ - --hash=sha256:91270ac23ebf38a1dc04cd97aa852cd08af82dc839100e5395af1447e3e99707 - # via -r requirements/dev-sdw-requirements.in -pyrect==0.2.0 \ - --hash=sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78 - # via pygetwindow -pyscreenshot==3.1 \ - --hash=sha256:73d406d41a0977125bdfd2f6488f0caf1394e84d1d4c1065d5e8b1400b307096 \ - --hash=sha256:8c0e93f0aef66a6bfe55a86abfced6bd396ae4b4f6cc1e36f04a28ad2625594d - # via pyscreeze -pyscreeze==0.1.29 \ - --hash=sha256:d074547795e128da176599a6d4470500e425d49b05cf22e9808a7984c3612836 - # via pyautogui -pytest==7.4.2 \ - --hash=sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002 \ - --hash=sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069 - # via - # -r requirements/dev-sdw-requirements.in - # pytest-cov - # pytest-mock - # pytest-qt - # pytest-random-order - # pytest-vcr - # pytest-xdist -pytest-cov==4.1.0 \ - --hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \ - --hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a - # via -r requirements/dev-sdw-requirements.in -pytest-mock==3.11.1 \ - --hash=sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39 \ - --hash=sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f - # via -r requirements/dev-sdw-requirements.in -pytest-qt==4.2.0 \ - --hash=sha256:00a17b586dd530b6d7a9399923a40489ca4a9a309719011175f55dc6b5dc8f41 \ - --hash=sha256:a7659960a1ab2af8fc944655a157ff45d714b80ed7a6af96a4b5bb99ecf40a22 - # via -r requirements/dev-sdw-requirements.in -pytest-random-order==1.1.0 \ - --hash=sha256:6cb1e59ab0f798bb0c3488c11ae0c70d7d3340306a466d28b28ccd8ef8c20b7e \ - --hash=sha256:dbe6debb9353a7af984cc9eddbeb3577dd4dbbcc1529a79e3d21f68ed9b45605 - # via -r requirements/dev-sdw-requirements.in -pytest-vcr==1.0.2 \ - --hash=sha256:23ee51b75abbcc43d926272773aae4f39f93aceb75ed56852d0bf618f92e1896 \ - --hash=sha256:2f316e0539399bea0296e8b8401145c62b6f85e9066af7e57b6151481b0d6d9c - # via -r requirements/dev-sdw-requirements.in -pytest-xdist==3.3.1 \ - --hash=sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93 \ - --hash=sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2 - # via -r requirements/dev-sdw-requirements.in -python-dateutil==2.7.5 \ - --hash=sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93 \ - --hash=sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02 - # via - # -r requirements/requirements.in - # alembic - # arrow - # wlc -python-editor==1.0.3 \ - --hash=sha256:a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565 - # via - # -r requirements/requirements.in - # alembic -python-lsp-jsonrpc==1.0.0 \ - --hash=sha256:079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 \ - --hash=sha256:7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd - # via semgrep -python-magic==0.4.27 \ - --hash=sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b \ - --hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3 - # via diffoscope -python3-xlib==0.15 \ - --hash=sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8 - # via - # mouseinfo - # pyautogui -pytweening==1.0.7 \ - --hash=sha256:767134f1bf57b76c1ce9f692dd1cfc776d9a279de6724e8d04854508fd7ededb - # via pyautogui -pyxdg==0.28 \ - --hash=sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4 \ - --hash=sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab - # via wlc -pyyaml==6.0.1 \ - --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ - --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ - --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ - --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ - --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ - --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ - --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ - --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ - --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ - --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ - --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ - --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ - --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ - --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ - --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ - --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ - --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ - --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ - --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ - --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ - --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ - --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ - --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ - --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ - --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ - --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ - --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ - --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ - --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ - --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ - --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ - --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ - --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ - --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ - --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ - --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ - --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ - --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ - --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ - --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ - --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ - --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ - --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ - --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ - --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ - --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ - --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ - --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ - --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f - # via vcrpy -referencing==0.30.2 \ - --hash=sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf \ - --hash=sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0 - # via - # jsonschema - # jsonschema-specifications -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via - # -r requirements/requirements.in - # securedrop-sdk - # semgrep - # wlc -rich==13.5.3 \ - --hash=sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6 \ - --hash=sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9 - # via semgrep -rpds-py==0.10.3 \ - --hash=sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9 \ - --hash=sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637 \ - --hash=sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5 \ - --hash=sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9 \ - --hash=sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c \ - --hash=sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957 \ - --hash=sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6 \ - --hash=sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154 \ - --hash=sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8 \ - --hash=sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569 \ - --hash=sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2 \ - --hash=sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c \ - --hash=sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453 \ - --hash=sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1 \ - --hash=sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7 \ - --hash=sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b \ - --hash=sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9 \ - --hash=sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496 \ - --hash=sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3 \ - --hash=sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b \ - --hash=sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6 \ - --hash=sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da \ - --hash=sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842 \ - --hash=sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd \ - --hash=sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294 \ - --hash=sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71 \ - --hash=sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093 \ - --hash=sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e \ - --hash=sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c \ - --hash=sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e \ - --hash=sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b \ - --hash=sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97 \ - --hash=sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac \ - --hash=sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf \ - --hash=sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a \ - --hash=sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc \ - --hash=sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0 \ - --hash=sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623 \ - --hash=sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6 \ - --hash=sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8 \ - --hash=sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b \ - --hash=sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d \ - --hash=sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff \ - --hash=sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb \ - --hash=sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08 \ - --hash=sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33 \ - --hash=sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5 \ - --hash=sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a \ - --hash=sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a \ - --hash=sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762 \ - --hash=sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860 \ - --hash=sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73 \ - --hash=sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a \ - --hash=sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065 \ - --hash=sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c \ - --hash=sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c \ - --hash=sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec \ - --hash=sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515 \ - --hash=sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72 \ - --hash=sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd \ - --hash=sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec \ - --hash=sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12 \ - --hash=sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1 \ - --hash=sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557 \ - --hash=sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25 \ - --hash=sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff \ - --hash=sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8 \ - --hash=sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9 \ - --hash=sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d \ - --hash=sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a \ - --hash=sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e \ - --hash=sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c \ - --hash=sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0 \ - --hash=sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48 \ - --hash=sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e \ - --hash=sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314 \ - --hash=sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717 \ - --hash=sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95 \ - --hash=sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8 \ - --hash=sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57 \ - --hash=sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33 \ - --hash=sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1 \ - --hash=sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f \ - --hash=sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f \ - --hash=sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9 \ - --hash=sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599 \ - --hash=sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41 \ - --hash=sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391 \ - --hash=sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475 \ - --hash=sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882 \ - --hash=sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740 \ - --hash=sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f \ - --hash=sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee \ - --hash=sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836 \ - --hash=sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c \ - --hash=sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a \ - --hash=sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb - # via - # jsonschema - # referencing -ruamel-yaml==0.17.32 \ - --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ - --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 - # via semgrep -ruamel-yaml-clib==0.2.7 \ - --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ - --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ - --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ - --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ - --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ - --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ - --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ - --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ - --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ - --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ - --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ - --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ - --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ - --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ - --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ - --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ - --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ - --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ - --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ - --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ - --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ - --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ - --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ - --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ - --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ - --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ - --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ - --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ - --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ - --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ - --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ - --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ - --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ - --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ - --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ - --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ - --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 - # via ruamel-yaml -securedrop-sdk==0.4.0 \ - --hash=sha256:c08f77bae5f900b1fbcd3b5aae1c931dc877e7289d69aa5a8b1e3c3f4e0dc561 - # via -r requirements/requirements.in -semgrep==1.41.0 \ - --hash=sha256:0ebb2f992618f145c49e5c8de56ed7aec57819b9736128c3690a95213fa0da79 \ - --hash=sha256:551dc331001674d742afd80aa3b7e8a0ee5ede28f3502ca915338d6548e161d6 \ - --hash=sha256:bb1679826cb14a9444e5cfb5dcb1cd9c20071baf9ae541eed200076721362ad6 \ - --hash=sha256:d7231b5a65a77da14af9da66d95044ee41137b03da1380f6c646b1e2b60ef81d \ - --hash=sha256:fbcc2ea85e828023f2da51dcf93684d09b95b062716f585587d27485b0af5c37 - # via -r requirements/dev-sdw-requirements.in -six==1.11.0 \ - --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb - # via - # -r requirements/requirements.in - # pathlib2 - # python-dateutil -sqlalchemy==1.3.3 \ - --hash=sha256:91c54ca8345008fceaec987e10924bf07dcab36c442925357e5a467b36a38319 - # via - # -r requirements/requirements.in - # alembic -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f - # via -r requirements/dev-sdw-requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # black - # build - # coverage - # mypy - # pip-tools - # pyproject-hooks - # pytest - # semgrep -translate-toolkit==3.10.1 \ - --hash=sha256:642e8597c55c3a31b8a6506194f0e64095965d5a1e7e0261d045a2865783a366 \ - --hash=sha256:ce0f7702259b4469868883d58176b65845dd1cf75179e0ebb9e95cdc65d5b2b0 - # via -r requirements/dev-sdw-requirements.in -types-polib==1.2.0.1 \ - --hash=sha256:af01929cc4c9d61827f2c869ec90cf28c20e3247093bb7181b384ec593e5bef6 \ - --hash=sha256:bd7f90ac43f26572b427a9d341a9363e0fa3084d5c0a79447246a579d47405f1 - # via -r requirements/dev-sdw-requirements.in -types-python-dateutil==2.8.19.14 \ - --hash=sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b \ - --hash=sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9 - # via -r requirements/dev-sdw-requirements.in -types-setuptools==68.2.0.0 \ - --hash=sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b \ - --hash=sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85 - # via -r requirements/dev-sdw-requirements.in -typing-extensions==4.8.0 \ - --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ - --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef - # via - # black - # mypy - # semgrep -ujson==5.8.0 \ - --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ - --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ - --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ - --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ - --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ - --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ - --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ - --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ - --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ - --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ - --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ - --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ - --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ - --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ - --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ - --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ - --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ - --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ - --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ - --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ - --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ - --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ - --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ - --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ - --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ - --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ - --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ - --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ - --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ - --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ - --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ - --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ - --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ - --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ - --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ - --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ - --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ - --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ - --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ - --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ - --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ - --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ - --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ - --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ - --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ - --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ - --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ - --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ - --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ - --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ - --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ - --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ - --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ - --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ - --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ - --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ - --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ - --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ - --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ - --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ - --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c - # via python-lsp-jsonrpc -urllib3==1.26.16 \ - --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ - --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 - # via - # -r requirements/requirements.in - # requests - # securedrop-sdk - # semgrep - # vcrpy -vcrpy==5.1.0 \ - --hash=sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e \ - --hash=sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2 - # via pytest-vcr -wcmatch==8.5 \ - --hash=sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5 \ - --hash=sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3 - # via semgrep -wheel==0.41.2 \ - --hash=sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985 \ - --hash=sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8 - # via pip-tools -wlc==1.13 \ - --hash=sha256:319e9abee30d4f91c82175bb7b3ba400978eef4a3e4ab8099c19c68cdcb8b581 \ - --hash=sha256:97a618abd2764884da9e7ffa1b2e623a45e469760e014590fb7c1064188910d6 - # via -r requirements/dev-sdw-requirements.in -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 - # via vcrpy -yarl==1.9.2 \ - --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ - --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ - --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ - --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ - --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ - --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ - --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ - --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ - --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ - --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ - --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ - --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ - --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ - --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ - --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ - --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ - --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ - --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ - --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ - --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ - --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ - --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ - --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ - --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ - --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ - --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ - --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ - --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ - --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ - --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ - --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ - --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ - --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ - --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ - --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ - --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ - --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ - --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ - --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ - --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ - --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ - --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ - --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ - --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ - --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ - --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ - --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ - --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ - --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ - --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ - --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ - --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ - --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ - --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ - --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ - --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ - --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ - --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ - --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ - --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ - --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ - --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ - --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ - --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ - --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ - --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ - --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ - --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ - --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ - --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ - --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ - --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ - --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ - --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 - # via vcrpy -zipp==3.17.0 \ - --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ - --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==23.2.1 \ - --hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \ - --hash=sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2 - # via pip-tools -setuptools==68.2.2 \ - --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ - --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a - # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index fce459341..000000000 --- a/requirements/requirements.in +++ /dev/null @@ -1,16 +0,0 @@ -alembic==1.1.0 -arrow==0.12.1 -certifi>=2023.7.22 -charset-normalizer>=2.0.4 -idna>=2.7 -mako==1.2.2 -markupsafe>=1.1 -pathlib2==2.3.2 -python-dateutil==2.7.5 -python-editor==1.0.3 -requests>=2.31.0 -securedrop-sdk==0.4.0 -six==1.11.0 -sqlalchemy==1.3.3 -urllib3>=1.26.5 -jinja2==3.0.2 # per freedomofpress/securedrop#4829953 diff --git a/requirements/requirements.txt b/requirements/requirements.txt deleted file mode 100644 index 2c924dc38..000000000 --- a/requirements/requirements.txt +++ /dev/null @@ -1,143 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: -# -# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in -# -alembic==1.1.0 \ - --hash=sha256:4a4811119efbdc5259d1f4c8f6de977b36ad3bcc919f59a29c2960c5ef9149e4 - # via -r requirements/requirements.in -arrow==0.12.1 \ - --hash=sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd - # via -r requirements/requirements.in -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via - # -r requirements/requirements.in - # requests -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 - # via - # -r requirements/requirements.in - # requests -jinja2==3.0.2 \ - --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ - --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c - # via -r requirements/requirements.in -mako==1.2.2 \ - --hash=sha256:3724869b363ba630a272a5f89f68c070352137b8fd1757650017b7e06fda163f \ - --hash=sha256:8efcb8004681b5f71d09c983ad5a9e6f5c40601a6ec469148753292abc0da534 - # via - # -r requirements/requirements.in - # alembic -markupsafe==2.0.1 \ - --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ - --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ - --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ - --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ - --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ - --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ - --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ - --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ - --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ - --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ - --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ - --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ - --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ - --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ - --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ - --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ - --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ - --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ - --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ - --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ - --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ - --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ - --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ - --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ - --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ - --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ - --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ - --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ - --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ - --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ - --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ - --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ - --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ - --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ - --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ - --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ - --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ - --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ - --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ - --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ - --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ - --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ - --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ - --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ - --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ - --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ - --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ - --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ - --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ - --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ - --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ - --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ - --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ - --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 - # via - # -r requirements/requirements.in - # jinja2 - # mako -pathlib2==2.3.2 \ - --hash=sha256:8eb170f8d0d61825e09a95b38be068299ddeda82f35e96c3301a8a5e7604cb83 \ - --hash=sha256:d1aa2a11ba7b8f7b21ab852b1fb5afb277e1bb99d5dfc663380b5015c0d80c5a - # via -r requirements/requirements.in -python-dateutil==2.7.5 \ - --hash=sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93 \ - --hash=sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02 - # via - # -r requirements/requirements.in - # alembic - # arrow -python-editor==1.0.3 \ - --hash=sha256:a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565 - # via - # -r requirements/requirements.in - # alembic -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via - # -r requirements/requirements.in - # securedrop-sdk -securedrop-sdk==0.4.0 \ - --hash=sha256:c08f77bae5f900b1fbcd3b5aae1c931dc877e7289d69aa5a8b1e3c3f4e0dc561 - # via -r requirements/requirements.in -six==1.11.0 \ - --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 \ - --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb - # via - # -r requirements/requirements.in - # pathlib2 - # python-dateutil -sqlalchemy==1.3.3 \ - --hash=sha256:91c54ca8345008fceaec987e10924bf07dcab36c442925357e5a467b36a38319 - # via - # -r requirements/requirements.in - # alembic -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f - # via - # -r requirements/requirements.in - # requests - # securedrop-sdk diff --git a/run.sh b/run.sh index a7fd50383..5a62ba629 100755 --- a/run.sh +++ b/run.sh @@ -19,7 +19,7 @@ done source scripts/setup-tmp-directories.sh -PYTHON="python" +PYTHON="poetry run python" if [[ $OSTYPE == 'darwin'* ]] && [[ "$(uname -m)" == "arm64" ]]; then PYTHON="arch -x86_64 ${PYTHON}" fi @@ -42,7 +42,7 @@ cleanup gpg --allow-secret-key-import --import tests/files/securedrop.gpg.asc & # create the database and config for local testing -./create_dev_data.py "$SDC_HOME" & +poetry run python create_dev_data.py "$SDC_HOME" & # check whether current env is qubes is_qubes="$(printenv | grep ^QUBES_)" || true diff --git a/scripts/codename b/scripts/codename deleted file mode 100755 index c450c7109..000000000 --- a/scripts/codename +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# Returns the Debian version's codename (e.g. "bullseye") in a way that should -# work across both released versions and unreleased ones. -# See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008735 - -source /etc/os-release - -if [[ "$VERSION_CODENAME" != "" ]]; then - echo $VERSION_CODENAME -else - # PRETTY_NAME="Debian GNU/Linux bookworm/sid" - # Use awk to split on spaces and / - echo $PRETTY_NAME | awk '{split($0, a, "[ /]"); print a[4]}' -fi diff --git a/test-functional.sh b/test-functional.sh index 46d5210be..85182d31f 100755 --- a/test-functional.sh +++ b/test-functional.sh @@ -7,7 +7,7 @@ TESTFILES=$(find tests/functional/test_*.py -print | sort -R) for f in $TESTFILES do - TEST_CMD=(python -m pytest -v --random-order-bucket global "$f") + TEST_CMD=(poetry run pytest -v --random-order-bucket global "$f") echo "${TEST_CMD[@]}" if command -v xvfb-run > /dev/null; then xvfb-run --server-args="-screen 0, 1680x1050x24" -a "${TEST_CMD[@]}" From b956a6cf76978b00c51b62d906e39a46dcacd78c Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 7 Dec 2023 11:59:00 -0500 Subject: [PATCH 609/751] Update README for Poetry changes --- README.md | 68 +++++++++++++++---------------------------------------- 1 file changed, 18 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 0c35c6bf3..d5c3b07db 100644 --- a/README.md +++ b/README.md @@ -74,17 +74,16 @@ Tor is not used in the developer environment. If you want to use a Tor connectio See [SecureDrop docs](https://docs.securedrop.org/en/latest/development/setup_development.html) for setup instructions, including post-installation steps for allowing docker to be run as a non-root user, which is a requirement on Qubes. -3. In a new terminal tab, clone the SecureDrop Client repo and set up its virtual environment +3. In a new terminal tab, clone the SecureDrop Client repo and install its dependencies: ``` git clone git@github.com:freedomofpress/securedrop-client.git cd securedrop-client -make venv -source .venv/bin/activate +poetry install ``` - * You will need Python 3.9 to run the client. If it's not the default `python3` on your installation, you can use `PYTHON=python3.9 make venv` to explicitly use a `python3.9` binary. - * `make venv` will also run `make hooks`, which will configure Git to use the hooks found in `.githooks/` to check certain code-quality standards on new commits in this repository. These checks are also enforced in CI. + * You will need Python 3.9 to run the client. If it's not the default `python3` on your installation, you can set `poetry env use python3.9`. + * You may also want to run `make hooks`, which will configure Git to use the hooks found in `.githooks/` to check certain code-quality standards on new commits in this repository. These checks are also enforced in CI. 4. Run SecureDrop Client @@ -112,16 +111,15 @@ Tor is not used in the developer environment. If you want to use a Tor connectio See [SecureDrop docs](https://docs.securedrop.org/en/latest/development/setup_development.html) for setup instructions. -3. In a new terminal tab, clone the SecureDrop Client repo and set up its virtual environment +3. In a new terminal tab, clone the SecureDrop Client repo and install its dependencies ``` git clone git@github.com:freedomofpress/securedrop-client.git cd securedrop-client -make venv -source .venv/bin/activate +poetry install ``` - * `make venv` will also run `make hooks`, which will configure Git to use the hooks found in `.githooks/` to check certain code-quality standards on new commits in this repository. These checks are also enforced in CI. + * You may also want to run `make hooks`, which will configure Git to use the hooks found in `.githooks/` to check certain code-quality standards on new commits in this repository. These checks are also enforced in CI. 4. Run SecureDrop Client @@ -164,20 +162,19 @@ socat TCP4-LISTEN:8081,fork,reuseaddr TCP4:A.B.C.D:8081 2. Install Homebrew a. If you use an Intel based machine, follow the instructions at https://brew.sh/ b. If you use an Apple Silicon based machine (M1 or M2 Macs): - 1. (Informational) If you already have a native `arm64` version of Homebrew, you will wind up with a separate Homebrew installation for each architecture. While they do not conflict, combining them in your `PATH` permanently may cause confusion about which brews are installed where. You may want to modify your `PATH` temporarily to perform this installation. The virtual environment you create in this session will continue to work in subsequent sessions. + 1. (Informational) If you already have a native `arm64` version of Homebrew, you will wind up with a separate Homebrew installation for each architecture. While they do not conflict, combining them in your `PATH` permanently may cause confusion about which brews are installed where. You may want to modify your `PATH` temporarily to perform this installation. The environment you create in this session will continue to work in subsequent sessions. 2. Run `/usr/sbin/softwareupdate --install-rosetta` to allow you to run `x86_64` binaries 3. Enter a shell in `x86_64` mode with `arch -x86_64 bash` 4. Install Homebrew via the instructions at https://brew.sh/ 5. Install the dependencies below in the same `x86_64` shell session 3. Install dependencies via Homebrew: `brew install python@3.9 gnupg oath-toolkit` -4. clone the SecureDrop Client repo and set up its virtual environment +4. clone the SecureDrop Client repo and install its dependencies ``` git clone git@github.com:freedomofpress/securedrop-client.git cd securedrop-client - make venv-mac - source .venv/bin/activate + poetry install ``` - * `make venv-mac` will also run `make hooks`, which will configure Git to use the hooks found in `.githooks/` to check certain code-quality standards on new commits in this repository. These checks are also enforced in CI. + * You may also want to run `make hooks`, which will configure Git to use the hooks found in `.githooks/` to check certain code-quality standards on new commits in this repository. These checks are also enforced in CI. 5. Run SecureDrop Client ``` @@ -230,18 +227,16 @@ Or [manually initialize](https://github.com/freedomofpress/securedrop-client/blo 8. To run a different version of the client, say the version from a branch called ``, first add a NetVM (`sys-firewall`) to `sd-app` via its Qubes Settings so you can clone the client repository, and then follow these steps: ``` -sudo apt-get install git virtualenv # NB. won't persist across "sd-app" reboots +sudo apt-get install git python3-poetry # NB. won't persist across "sd-app" reboots git clone -b https://github.com/freedomofpress/securedrop-client.git cd securedrop-client -virtualenv --python=python3.9 .venv -source .venv/bin/activate -pip install --require-hashes -r requirements/dev-bullseye-requirements.txt +poetry install ``` 9. Run the client ``` -python -m securedrop_client +poetry run securedrop_client ``` ### Production environment @@ -280,40 +275,13 @@ securedrop-client ## Updating dependencies -`dev-*-requirements.txt` and `requirements.txt` point to python software foundation hashes, and `build-requirements.txt` points to our builds of the wheels from our own pip mirror (https://github.com/freedomofpress/securedrop-builder/tree/main/localwheels). Whenever a dependency in `build-requirements.txt` changes, our team needs to manually review the code in the dependency diff with a focus on spotting vulnerabilities. - -### Production +`pyproject.toml` and `Poetry.lock` point to hashes of artifacts hosted on PyPI, and `build-requirements.txt` points to our reproducible builds of the wheels (https://github.com/freedomofpress/securedrop-builder/). Whenever a dependency in `build-requirements.txt` changes, our team needs to manually review the code in the dependency diff with a focus on spotting vulnerabilities. If you're adding or updating a production dependency, you need to: -1. Modify `requirements.in` -2. Activate a Python 3.9 virtual environment (default version on Debian Bullseye, used in production) -3. Run `make requirements`. This will generate `requirements.txt`. Review and commit the changes. - -### Development - -In addition to supporting Debian Bullseye, we keep track of changes in the next version of Debian (Bookworm). In order to do that we need to maintain requirement files for both. If you're adding or updating a development dependency, you need to: - -1. Modify `dev-sdw-requirements.in` when possible. If needed modify `dev-bullseye-requirements.in` or `dev-bookworm-requirements.in`. -2. Activate a Python 3.9 virtual environment (default version on Debian Bullseye, used in production) -3. Run `make dev-requirements`. This will generate `dev-*-requirements.txt`. Only commit `dev-bullseye-requirements.txt` and `dev-sdw-requirements.txt`. -4. Discard the other changes. -5. Activate a Python 3.10 virtual environment (default version on Debian Bookworm). - If needed you can create one and activate it by running `python3.10 -m venv .venv310 && source .venv310/bin/activate`. -6. Run `make dev-requirements`. This will generate `dev-*-requirements.txt`. Only commit `dev-bookworm-requirements.txt`. -7. Discard the other changes. - -### Build dependencies - -1. For building a debian package from this project, we use the requirements in -`build-requirements.txt` which uses our pip mirror, i.e. the hashes in that file point to -wheels on our pip mirror. - -2. A maintainer will need to add -the updated dependency to our pip mirror (you can request this in the PR). - -3. Once the pip mirror is updated, you should checkout the [securedrop-builder repo](https://github.com/freedomofpress/securedrop-builder) and run `make requirements`. Commit the `build-requirements.txt` that results and add it to your PR. - +1. Modify `pyproject.toml`. +2. Build the relevant wheels in the `securedrop-builder` Git repository. +3. Synchronize `build-requirements.txt` with hashes of the newly built wheels. ## Generating and running database migrations From 9973f9e43b1b58dd4910f8b956639b0c6837e6b9 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 16:38:56 -0500 Subject: [PATCH 610/751] Move client files into client/ folder --- {.circleci => client/.circleci}/config.yml | 0 .coveragerc => client/.coveragerc | 0 .../.git-blame-ignore-revs | 0 {.githooks => client/.githooks}/pre-commit | 0 {.github => client/.github}/CODEOWNERS | 0 .../.github}/ISSUE_TEMPLATE/bug_report.md | 0 .../.github}/ISSUE_TEMPLATE/feature_request.md | 0 .../.github}/ISSUE_TEMPLATE/release.md | 0 .../.github}/pull_request_template.md | 0 .gitignore => client/.gitignore | 0 {.semgrep => client/.semgrep}/custom-rules.yml | 0 CONTRIBUTING.md => client/CONTRIBUTING.md | 0 Doxyfile => client/Doxyfile | 0 LICENSE => client/LICENSE | 0 MANIFEST.in => client/MANIFEST.in | 0 Makefile => client/Makefile | 0 README.md => client/README.md | 0 SECURITY.md => client/SECURITY.md | 0 alembic.ini => client/alembic.ini | 0 {alembic => client/alembic}/README | 0 {alembic => client/alembic}/env.py | 0 {alembic => client/alembic}/script.py.mako | 0 ...7c04463_draftreply_add_column_for_sending_pid.py | 0 .../alembic}/versions/d7c8af95bc8e_initial.py | 0 babel.cfg => client/babel.cfg | 0 .../build-requirements.txt | 0 changelog.md => client/changelog.md | 0 create_dev_data.py => client/create_dev_data.py | 0 {files => client/files}/alembic.ini | 0 .../files}/press.freedom.SecureDropClient.desktop | 0 {files => client/files}/sd-app-qubes-gpg-domain.sh | 0 {files => client/files}/securedrop-client | 0 {files => client/files}/securedrop-client.desktop | 0 {files => client/files}/usr.bin.securedrop-client | 0 poetry.lock => client/poetry.lock | 0 project.json => client/project.json | 0 pyproject.toml => client/pyproject.toml | 0 pytest.ini => client/pytest.ini | 0 run.sh => client/run.sh | 0 .../scripts}/setup-tmp-directories.sh | 0 {scripts => client/scripts}/verify-mo.py | 0 .../securedrop_client}/__init__.py | 0 .../securedrop_client}/__main__.py | 0 .../securedrop_client}/api_jobs/__init__.py | 0 .../securedrop_client}/api_jobs/base.py | 0 .../securedrop_client}/api_jobs/downloads.py | 0 .../securedrop_client}/api_jobs/seen.py | 0 .../securedrop_client}/api_jobs/sources.py | 0 .../securedrop_client}/api_jobs/sync.py | 0 .../securedrop_client}/api_jobs/updatestar.py | 0 .../securedrop_client}/api_jobs/uploads.py | 0 .../securedrop_client}/app.py | 0 .../securedrop_client}/config.py | 0 .../securedrop_client}/conversation/__init__.py | 0 .../conversation/transcript/__init__.py | 0 .../conversation/transcript/items/__init__.py | 0 .../conversation/transcript/items/factory.py | 0 .../conversation/transcript/items/file.py | 0 .../conversation/transcript/items/item.py | 0 .../conversation/transcript/items/message.py | 0 .../transcript/templates/transcript.txt.jinja | 0 .../conversation/transcript/transcript.py | 0 .../securedrop_client}/crypto.py | 0 .../securedrop_client}/database.py | 0 .../securedrop_client}/db.py | 0 .../securedrop_client}/export.py | 0 .../securedrop_client}/gui/__init__.py | 0 .../securedrop_client}/gui/actions.py | 0 .../securedrop_client}/gui/auth/__init__.py | 0 .../securedrop_client}/gui/auth/dialog.css | 0 .../securedrop_client}/gui/auth/dialog.py | 0 .../securedrop_client}/gui/auth/sign_in/__init__.py | 0 .../securedrop_client}/gui/auth/sign_in/button.css | 0 .../securedrop_client}/gui/auth/sign_in/button.py | 0 .../gui/auth/sign_in/error_bar.css | 0 .../gui/auth/sign_in/error_bar.py | 0 .../gui/auth/use_offline/__init__.py | 0 .../gui/auth/use_offline/button.py | 0 .../securedrop_client}/gui/base/__init__.py | 0 .../securedrop_client}/gui/base/buttons.py | 0 .../securedrop_client}/gui/base/checkbox.css | 0 .../securedrop_client}/gui/base/checkbox.py | 0 .../securedrop_client}/gui/base/dialog_button.css | 0 .../securedrop_client}/gui/base/dialog_message.css | 0 .../securedrop_client}/gui/base/dialogs.css | 0 .../securedrop_client}/gui/base/dialogs.py | 0 .../securedrop_client}/gui/base/inputs.py | 0 .../securedrop_client}/gui/base/misc.py | 0 .../securedrop_client}/gui/conversation/__init__.py | 0 .../gui/conversation/delete/__init__.py | 0 .../gui/conversation/delete/dialog.py | 0 .../gui/conversation/export/__init__.py | 0 .../gui/conversation/export/device.py | 0 .../gui/conversation/export/dialog.css | 0 .../gui/conversation/export/dialog.py | 0 .../gui/conversation/export/file_dialog.py | 0 .../gui/conversation/export/print_dialog.py | 0 .../conversation/export/print_transcript_dialog.py | 0 .../gui/conversation/export/transcript_dialog.py | 0 .../securedrop_client}/gui/datetime_helpers.py | 0 .../securedrop_client}/gui/main.py | 0 .../securedrop_client}/gui/source/__init__.py | 0 .../gui/source/delete/__init__.py | 0 .../securedrop_client}/gui/source/delete/dialog.py | 0 .../securedrop_client}/gui/widgets.py | 0 .../locale/ca/LC_MESSAGES/messages.mo | Bin .../locale/ca/LC_MESSAGES/messages.po | 0 .../locale/de/LC_MESSAGES/messages.mo | Bin .../locale/de/LC_MESSAGES/messages.po | 0 .../locale/es/LC_MESSAGES/messages.mo | Bin .../locale/es/LC_MESSAGES/messages.po | 0 .../locale/hr/LC_MESSAGES/messages.mo | Bin .../locale/hr/LC_MESSAGES/messages.po | 0 .../locale/is/LC_MESSAGES/messages.mo | Bin .../locale/is/LC_MESSAGES/messages.po | 0 .../locale/it/LC_MESSAGES/messages.mo | Bin .../locale/it/LC_MESSAGES/messages.po | 0 .../securedrop_client}/locale/messages.pot | 0 .../locale/pt_BR/LC_MESSAGES/messages.mo | Bin .../locale/pt_BR/LC_MESSAGES/messages.po | 0 .../locale/pt_PT/LC_MESSAGES/messages.mo | Bin .../locale/pt_PT/LC_MESSAGES/messages.po | 0 .../locale/ru/LC_MESSAGES/messages.mo | Bin .../locale/ru/LC_MESSAGES/messages.po | 0 .../locale/sk/LC_MESSAGES/messages.mo | Bin .../locale/sk/LC_MESSAGES/messages.po | 0 .../locale/sv/LC_MESSAGES/messages.mo | Bin .../locale/sv/LC_MESSAGES/messages.po | 0 .../locale/tr/LC_MESSAGES/messages.mo | Bin .../locale/tr/LC_MESSAGES/messages.po | 0 .../locale/zh_Hans/LC_MESSAGES/messages.mo | Bin .../locale/zh_Hans/LC_MESSAGES/messages.po | 0 .../securedrop_client}/logic.py | 0 .../securedrop_client}/queue.py | 0 .../securedrop_client}/resources/__init__.py | 0 .../securedrop_client}/resources/css/button.css | 0 .../resources/css/checker_tooltip.css | 0 .../resources/css/file_download_button.css | 0 .../securedrop_client}/resources/css/sdclient.css | 0 .../resources/css/sender_icon.css | 0 .../resources/css/source_menu.css | 0 .../resources/css/source_name.css | 0 .../resources/css/source_preview.css | 0 .../resources/css/source_timestamp.css | 0 .../resources/css/speech_bubble_message.css | 0 .../resources/css/speech_bubble_status_bar.css | 0 .../resources/fonts/Montserrat/Montserrat-Black.ttf | Bin .../fonts/Montserrat/Montserrat-BlackItalic.ttf | Bin .../resources/fonts/Montserrat/Montserrat-Bold.ttf | Bin .../fonts/Montserrat/Montserrat-BoldItalic.ttf | Bin .../fonts/Montserrat/Montserrat-ExtraBold.ttf | Bin .../fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf | Bin .../fonts/Montserrat/Montserrat-ExtraLight.ttf | Bin .../Montserrat/Montserrat-ExtraLightItalic.ttf | Bin .../resources/fonts/Montserrat/Montserrat-Light.ttf | Bin .../fonts/Montserrat/Montserrat-LightItalic.ttf | Bin .../fonts/Montserrat/Montserrat-Medium.ttf | Bin .../fonts/Montserrat/Montserrat-MediumItalic.ttf | Bin .../fonts/Montserrat/Montserrat-Regular.ttf | Bin .../fonts/Montserrat/Montserrat-RegularItalic.ttf | Bin .../fonts/Montserrat/Montserrat-SemiBold.ttf | Bin .../fonts/Montserrat/Montserrat-SemiBoldItalic.ttf | Bin .../resources/fonts/Montserrat/Montserrat-Thin.ttf | Bin .../fonts/Montserrat/Montserrat-ThinItalic.ttf | Bin .../resources/fonts/Montserrat/OFL.txt | 0 .../resources/fonts/Source_Sans_Pro/OFL.txt | 0 .../fonts/Source_Sans_Pro/SourceSansPro-Black.ttf | Bin .../Source_Sans_Pro/SourceSansPro-BlackItalic.ttf | Bin .../fonts/Source_Sans_Pro/SourceSansPro-Bold.ttf | Bin .../Source_Sans_Pro/SourceSansPro-BoldItalic.ttf | Bin .../Source_Sans_Pro/SourceSansPro-ExtraLight.ttf | Bin .../SourceSansPro-ExtraLightItalic.ttf | Bin .../fonts/Source_Sans_Pro/SourceSansPro-Light.ttf | Bin .../Source_Sans_Pro/SourceSansPro-LightItalic.ttf | Bin .../fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf | Bin .../Source_Sans_Pro/SourceSansPro-RegularItalic.ttf | Bin .../Source_Sans_Pro/SourceSansPro-SemiBold.ttf | Bin .../SourceSansPro-SemiBoldItalic.ttf | Bin .../resources/images/activestate-wide.gif | Bin .../securedrop_client}/resources/images/blank.svg | 0 .../resources/images/checkmark.svg | 0 .../resources/images/checkmark_hover.svg | 0 .../securedrop_client}/resources/images/cross.svg | 0 .../securedrop_client}/resources/images/delete.png | Bin .../resources/images/delete_close.svg | 0 .../resources/images/deleted-user.svg | 0 .../resources/images/download_active.svg | 0 .../resources/images/download_file.gif | Bin .../resources/images/download_file.svg | 0 .../resources/images/download_file_hover.svg | 0 .../resources/images/dropdown_arrow.svg | 0 .../resources/images/ellipsis.svg | 0 .../resources/images/error_icon.svg | 0 .../resources/images/error_icon_white.svg | 0 .../resources/images/eye_hidden.svg | 0 .../resources/images/eye_visible.svg | 0 .../resources/images/header_animation.gif | Bin .../resources/images/header_logo.png | Bin .../securedrop_client}/resources/images/hexes.svg | 0 .../securedrop_client}/resources/images/icon.png | Bin .../resources/images/left_pane.svg | 0 .../resources/images/left_pane_offline.svg | 0 .../resources/images/loading-bar.gif | Bin .../resources/images/loading-cubes.gif | Bin .../resources/images/login_bg.svg | 0 .../securedrop_client}/resources/images/logo.png | Bin .../resources/images/paperclip-disabled.svg | 0 .../resources/images/paperclip.svg | 0 .../securedrop_client}/resources/images/printer.svg | 0 .../securedrop_client}/resources/images/refresh.svg | 0 .../resources/images/refresh_active.svg | 0 .../resources/images/refresh_offline.svg | 0 .../resources/images/savetodisk.svg | 0 .../resources/images/send-disabled.svg | 0 .../securedrop_client}/resources/images/send.svg | 0 .../resources/images/star_hover.svg | 0 .../resources/images/star_off.svg | 0 .../securedrop_client}/resources/images/star_on.svg | 0 .../securedrop_client}/resources/images/sync.gif | Bin .../securedrop_client}/resources/images/sync.svg | 0 .../resources/images/sync_active.gif | Bin .../resources/images/sync_disabled.gif | Bin .../resources/images/tear-big.svg | 0 .../resources/images/tear-left.svg | 0 .../resources/images/tear-right.svg | 0 .../securedrop_client}/resources/images/trash.png | Bin .../securedrop_client}/state/__init__.py | 0 .../securedrop_client}/state/domain.py | 0 .../securedrop_client}/state/state.py | 0 .../securedrop_client}/storage.py | 0 .../securedrop_client}/sync.py | 0 .../securedrop_client}/utils.py | 0 setup.cfg => client/setup.cfg | 0 setup.py => client/setup.py | 0 test-functional.sh => client/test-functional.sh | 0 {tests => client/tests}/__init__.py | 0 {tests => client/tests}/api_jobs/__init__.py | 0 {tests => client/tests}/api_jobs/test_base.py | 0 {tests => client/tests}/api_jobs/test_downloads.py | 0 {tests => client/tests}/api_jobs/test_seen.py | 0 {tests => client/tests}/api_jobs/test_sources.py | 0 {tests => client/tests}/api_jobs/test_sync.py | 0 {tests => client/tests}/api_jobs/test_updatestar.py | 0 {tests => client/tests}/api_jobs/test_uploads.py | 0 {tests => client/tests}/conftest.py | 0 {tests => client/tests}/factory.py | 0 {tests => client/tests}/files/securedrop.gpg.asc | 0 .../tests}/files/securedrop.gpg.pub.asc | 0 {tests => client/tests}/files/test-doc.gz.gpg | 0 {tests => client/tests}/files/test-key.gpg.asc | 0 {tests => client/tests}/files/test-key.gpg.pub.asc | 0 {tests => client/tests}/functional/__init__.py | 0 .../functional/cassettes/test_delete_source.yaml | 0 .../functional/cassettes/test_download_file.yaml | 0 .../cassettes/test_export_file_dialog.yaml | 0 .../cassettes/test_login_as_journalist.yaml | 0 .../cassettes/test_login_from_offline.yaml | 0 .../cassettes/test_logout_as_journalist.yaml | 0 .../test_offline_delete_source_attempt.yaml | 0 .../cassettes/test_offline_read_conversation.yaml | 0 .../test_offline_send_reply_to_source.yaml | 0 .../cassettes/test_offline_star_source.yaml | 0 .../cassettes/test_receive_message_from_source.yaml | 0 .../functional/cassettes/test_seen_and_unseen.yaml | 0 .../cassettes/test_send_reply_to_source.yaml | 0 .../functional/cassettes/test_star_source.yaml | 0 .../test_unseen_source_becomes_seen_on_click.yaml | 0 .../functional/cassettes/test_user_icon_click.yaml | 0 .../tests}/functional/test_delete_source.py | 0 .../tests}/functional/test_download_file.py | 0 .../tests}/functional/test_export_file_dialog.py | 0 {tests => client/tests}/functional/test_login.py | 0 {tests => client/tests}/functional/test_logout.py | 0 .../tests}/functional/test_offline_delete_source.py | 0 .../tests}/functional/test_offline_login.py | 0 .../functional/test_offline_read_conversation.py | 0 .../tests}/functional/test_offline_send_reply.py | 0 .../tests}/functional/test_offline_star_source.py | 0 .../tests}/functional/test_receive_message.py | 0 {tests => client/tests}/functional/test_seen.py | 0 .../tests}/functional/test_send_reply.py | 0 .../tests}/functional/test_star_source.py | 0 .../tests}/functional/test_user_profile_menu.py | 0 {tests => client/tests}/gui/__init__.py | 0 .../tests}/gui/auth/sign_in/test_error_bar.py | 0 {tests => client/tests}/gui/auth/test_dialog.py | 0 {tests => client/tests}/gui/base/test_dialogs.py | 0 {tests => client/tests}/gui/base/test_inputs.py | 0 {tests => client/tests}/gui/base/test_misc.py | 0 {tests => client/tests}/gui/base/test_sdcheckbox.py | 0 .../tests}/gui/conversation/delete/__init__.py | 0 .../tests}/gui/conversation/delete/test_dialog.py | 0 .../tests}/gui/conversation/export/__init__.py | 0 .../tests}/gui/conversation/export/test_device.py | 0 .../tests}/gui/conversation/export/test_dialog.py | 0 .../gui/conversation/export/test_file_dialog.py | 0 .../gui/conversation/export/test_print_dialog.py | 0 .../export/test_print_transcript_dialog.py | 0 .../conversation/export/test_transcript_dialog.py | 0 {tests => client/tests}/gui/source/__init__.py | 0 .../tests}/gui/source/delete/__init__.py | 0 .../tests}/gui/source/delete/test_dialog.py | 0 {tests => client/tests}/gui/test_actions.py | 0 .../tests}/gui/test_datetime_helpers.py | 0 {tests => client/tests}/gui/test_main.py | 0 {tests => client/tests}/gui/test_widgets.py | 0 {tests => client/tests}/helper.py | 0 {tests => client/tests}/integration/conftest.py | 0 .../tests}/integration/test_placeholder.py | 0 .../integration/test_styles_file_download_button.py | 0 .../integration/test_styles_modal_dialog_button.py | 0 .../test_styles_modal_dialog_error_details.py | 0 .../integration/test_styles_reply_status_bar.py | 0 .../tests}/integration/test_styles_sdclient.py | 0 .../test_styles_speech_bubble_message.py | 0 .../test_styles_speech_bubble_status_bar.py | 0 {tests => client/tests}/migrations/__init__.py | 0 .../tests}/migrations/test_d7c8af95bc8e.py | 0 {tests => client/tests}/state/__init__.py | 0 {tests => client/tests}/state/test_domain.py | 0 {tests => client/tests}/state/test_state.py | 0 {tests => client/tests}/test_alembic.py | 0 {tests => client/tests}/test_app.py | 0 {tests => client/tests}/test_config.py | 0 {tests => client/tests}/test_conversation.py | 0 {tests => client/tests}/test_crypto.py | 0 {tests => client/tests}/test_export.py | 0 {tests => client/tests}/test_logic.py | 0 {tests => client/tests}/test_models.py | 0 {tests => client/tests}/test_queue.py | 0 {tests => client/tests}/test_resources.py | 0 {tests => client/tests}/test_storage.py | 0 {tests => client/tests}/test_sync.py | 0 {tests => client/tests}/test_utils.py | 0 update_version.sh => client/update_version.sh | 0 335 files changed, 0 insertions(+), 0 deletions(-) rename {.circleci => client/.circleci}/config.yml (100%) rename .coveragerc => client/.coveragerc (100%) rename .git-blame-ignore-revs => client/.git-blame-ignore-revs (100%) rename {.githooks => client/.githooks}/pre-commit (100%) rename {.github => client/.github}/CODEOWNERS (100%) rename {.github => client/.github}/ISSUE_TEMPLATE/bug_report.md (100%) rename {.github => client/.github}/ISSUE_TEMPLATE/feature_request.md (100%) rename {.github => client/.github}/ISSUE_TEMPLATE/release.md (100%) rename {.github => client/.github}/pull_request_template.md (100%) rename .gitignore => client/.gitignore (100%) rename {.semgrep => client/.semgrep}/custom-rules.yml (100%) rename CONTRIBUTING.md => client/CONTRIBUTING.md (100%) rename Doxyfile => client/Doxyfile (100%) rename LICENSE => client/LICENSE (100%) rename MANIFEST.in => client/MANIFEST.in (100%) rename Makefile => client/Makefile (100%) rename README.md => client/README.md (100%) rename SECURITY.md => client/SECURITY.md (100%) rename alembic.ini => client/alembic.ini (100%) rename {alembic => client/alembic}/README (100%) rename {alembic => client/alembic}/env.py (100%) rename {alembic => client/alembic}/script.py.mako (100%) rename {alembic => client/alembic}/versions/414627c04463_draftreply_add_column_for_sending_pid.py (100%) rename {alembic => client/alembic}/versions/d7c8af95bc8e_initial.py (100%) rename babel.cfg => client/babel.cfg (100%) rename build-requirements.txt => client/build-requirements.txt (100%) rename changelog.md => client/changelog.md (100%) rename create_dev_data.py => client/create_dev_data.py (100%) rename {files => client/files}/alembic.ini (100%) rename {files => client/files}/press.freedom.SecureDropClient.desktop (100%) rename {files => client/files}/sd-app-qubes-gpg-domain.sh (100%) rename {files => client/files}/securedrop-client (100%) rename {files => client/files}/securedrop-client.desktop (100%) rename {files => client/files}/usr.bin.securedrop-client (100%) rename poetry.lock => client/poetry.lock (100%) rename project.json => client/project.json (100%) rename pyproject.toml => client/pyproject.toml (100%) rename pytest.ini => client/pytest.ini (100%) rename run.sh => client/run.sh (100%) rename {scripts => client/scripts}/setup-tmp-directories.sh (100%) rename {scripts => client/scripts}/verify-mo.py (100%) rename {securedrop_client => client/securedrop_client}/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/__main__.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/base.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/downloads.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/seen.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/sources.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/sync.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/updatestar.py (100%) rename {securedrop_client => client/securedrop_client}/api_jobs/uploads.py (100%) rename {securedrop_client => client/securedrop_client}/app.py (100%) rename {securedrop_client => client/securedrop_client}/config.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/items/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/items/factory.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/items/file.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/items/item.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/items/message.py (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/templates/transcript.txt.jinja (100%) rename {securedrop_client => client/securedrop_client}/conversation/transcript/transcript.py (100%) rename {securedrop_client => client/securedrop_client}/crypto.py (100%) rename {securedrop_client => client/securedrop_client}/database.py (100%) rename {securedrop_client => client/securedrop_client}/db.py (100%) rename {securedrop_client => client/securedrop_client}/export.py (100%) rename {securedrop_client => client/securedrop_client}/gui/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/actions.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/dialog.css (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/sign_in/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/sign_in/button.css (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/sign_in/button.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/sign_in/error_bar.css (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/sign_in/error_bar.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/use_offline/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/auth/use_offline/button.py (100%) rename {securedrop_client => client/securedrop_client}/gui/base/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/base/buttons.py (100%) rename {securedrop_client => client/securedrop_client}/gui/base/checkbox.css (100%) rename {securedrop_client => client/securedrop_client}/gui/base/checkbox.py (100%) rename {securedrop_client => client/securedrop_client}/gui/base/dialog_button.css (100%) rename {securedrop_client => client/securedrop_client}/gui/base/dialog_message.css (100%) rename {securedrop_client => client/securedrop_client}/gui/base/dialogs.css (100%) rename {securedrop_client => client/securedrop_client}/gui/base/dialogs.py (100%) rename {securedrop_client => client/securedrop_client}/gui/base/inputs.py (100%) rename {securedrop_client => client/securedrop_client}/gui/base/misc.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/delete/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/delete/dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/device.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/dialog.css (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/file_dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/print_dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/print_transcript_dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/conversation/export/transcript_dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/datetime_helpers.py (100%) rename {securedrop_client => client/securedrop_client}/gui/main.py (100%) rename {securedrop_client => client/securedrop_client}/gui/source/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/source/delete/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/gui/source/delete/dialog.py (100%) rename {securedrop_client => client/securedrop_client}/gui/widgets.py (100%) rename {securedrop_client => client/securedrop_client}/locale/ca/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/ca/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/de/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/de/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/es/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/es/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/hr/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/hr/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/is/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/is/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/it/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/it/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/messages.pot (100%) rename {securedrop_client => client/securedrop_client}/locale/pt_BR/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/pt_BR/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/pt_PT/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/pt_PT/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/ru/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/ru/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/sk/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/sk/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/sv/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/sv/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/tr/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/tr/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/zh_Hans/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/zh_Hans/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/logic.py (100%) rename {securedrop_client => client/securedrop_client}/queue.py (100%) rename {securedrop_client => client/securedrop_client}/resources/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/resources/css/button.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/checker_tooltip.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/file_download_button.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/sdclient.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/sender_icon.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/source_menu.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/source_name.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/source_preview.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/source_timestamp.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/speech_bubble_message.css (100%) rename {securedrop_client => client/securedrop_client}/resources/css/speech_bubble_status_bar.css (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-Black.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-BlackItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-Bold.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-BoldItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-ExtraBold.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-ExtraLight.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-Light.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-LightItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-Medium.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-MediumItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-Regular.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-RegularItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-SemiBold.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-Thin.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/Montserrat-ThinItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Montserrat/OFL.txt (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/OFL.txt (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-Black.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-BlackItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-Bold.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-BoldItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLight.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLightItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-Light.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-LightItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-RegularItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBold.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBoldItalic.ttf (100%) rename {securedrop_client => client/securedrop_client}/resources/images/activestate-wide.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/blank.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/checkmark.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/checkmark_hover.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/cross.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/delete.png (100%) rename {securedrop_client => client/securedrop_client}/resources/images/delete_close.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/deleted-user.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/download_active.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/download_file.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/download_file.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/download_file_hover.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/dropdown_arrow.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/ellipsis.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/error_icon.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/error_icon_white.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/eye_hidden.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/eye_visible.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/header_animation.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/header_logo.png (100%) rename {securedrop_client => client/securedrop_client}/resources/images/hexes.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/icon.png (100%) rename {securedrop_client => client/securedrop_client}/resources/images/left_pane.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/left_pane_offline.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/loading-bar.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/loading-cubes.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/login_bg.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/logo.png (100%) rename {securedrop_client => client/securedrop_client}/resources/images/paperclip-disabled.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/paperclip.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/printer.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/refresh.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/refresh_active.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/refresh_offline.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/savetodisk.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/send-disabled.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/send.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/star_hover.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/star_off.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/star_on.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/sync.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/sync.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/sync_active.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/sync_disabled.gif (100%) rename {securedrop_client => client/securedrop_client}/resources/images/tear-big.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/tear-left.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/tear-right.svg (100%) rename {securedrop_client => client/securedrop_client}/resources/images/trash.png (100%) rename {securedrop_client => client/securedrop_client}/state/__init__.py (100%) rename {securedrop_client => client/securedrop_client}/state/domain.py (100%) rename {securedrop_client => client/securedrop_client}/state/state.py (100%) rename {securedrop_client => client/securedrop_client}/storage.py (100%) rename {securedrop_client => client/securedrop_client}/sync.py (100%) rename {securedrop_client => client/securedrop_client}/utils.py (100%) rename setup.cfg => client/setup.cfg (100%) rename setup.py => client/setup.py (100%) rename test-functional.sh => client/test-functional.sh (100%) rename {tests => client/tests}/__init__.py (100%) rename {tests => client/tests}/api_jobs/__init__.py (100%) rename {tests => client/tests}/api_jobs/test_base.py (100%) rename {tests => client/tests}/api_jobs/test_downloads.py (100%) rename {tests => client/tests}/api_jobs/test_seen.py (100%) rename {tests => client/tests}/api_jobs/test_sources.py (100%) rename {tests => client/tests}/api_jobs/test_sync.py (100%) rename {tests => client/tests}/api_jobs/test_updatestar.py (100%) rename {tests => client/tests}/api_jobs/test_uploads.py (100%) rename {tests => client/tests}/conftest.py (100%) rename {tests => client/tests}/factory.py (100%) rename {tests => client/tests}/files/securedrop.gpg.asc (100%) rename {tests => client/tests}/files/securedrop.gpg.pub.asc (100%) rename {tests => client/tests}/files/test-doc.gz.gpg (100%) rename {tests => client/tests}/files/test-key.gpg.asc (100%) rename {tests => client/tests}/files/test-key.gpg.pub.asc (100%) rename {tests => client/tests}/functional/__init__.py (100%) rename {tests => client/tests}/functional/cassettes/test_delete_source.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_download_file.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_export_file_dialog.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_login_as_journalist.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_login_from_offline.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_logout_as_journalist.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_offline_delete_source_attempt.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_offline_read_conversation.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_offline_send_reply_to_source.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_offline_star_source.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_receive_message_from_source.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_seen_and_unseen.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_send_reply_to_source.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_star_source.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_unseen_source_becomes_seen_on_click.yaml (100%) rename {tests => client/tests}/functional/cassettes/test_user_icon_click.yaml (100%) rename {tests => client/tests}/functional/test_delete_source.py (100%) rename {tests => client/tests}/functional/test_download_file.py (100%) rename {tests => client/tests}/functional/test_export_file_dialog.py (100%) rename {tests => client/tests}/functional/test_login.py (100%) rename {tests => client/tests}/functional/test_logout.py (100%) rename {tests => client/tests}/functional/test_offline_delete_source.py (100%) rename {tests => client/tests}/functional/test_offline_login.py (100%) rename {tests => client/tests}/functional/test_offline_read_conversation.py (100%) rename {tests => client/tests}/functional/test_offline_send_reply.py (100%) rename {tests => client/tests}/functional/test_offline_star_source.py (100%) rename {tests => client/tests}/functional/test_receive_message.py (100%) rename {tests => client/tests}/functional/test_seen.py (100%) rename {tests => client/tests}/functional/test_send_reply.py (100%) rename {tests => client/tests}/functional/test_star_source.py (100%) rename {tests => client/tests}/functional/test_user_profile_menu.py (100%) rename {tests => client/tests}/gui/__init__.py (100%) rename {tests => client/tests}/gui/auth/sign_in/test_error_bar.py (100%) rename {tests => client/tests}/gui/auth/test_dialog.py (100%) rename {tests => client/tests}/gui/base/test_dialogs.py (100%) rename {tests => client/tests}/gui/base/test_inputs.py (100%) rename {tests => client/tests}/gui/base/test_misc.py (100%) rename {tests => client/tests}/gui/base/test_sdcheckbox.py (100%) rename {tests => client/tests}/gui/conversation/delete/__init__.py (100%) rename {tests => client/tests}/gui/conversation/delete/test_dialog.py (100%) rename {tests => client/tests}/gui/conversation/export/__init__.py (100%) rename {tests => client/tests}/gui/conversation/export/test_device.py (100%) rename {tests => client/tests}/gui/conversation/export/test_dialog.py (100%) rename {tests => client/tests}/gui/conversation/export/test_file_dialog.py (100%) rename {tests => client/tests}/gui/conversation/export/test_print_dialog.py (100%) rename {tests => client/tests}/gui/conversation/export/test_print_transcript_dialog.py (100%) rename {tests => client/tests}/gui/conversation/export/test_transcript_dialog.py (100%) rename {tests => client/tests}/gui/source/__init__.py (100%) rename {tests => client/tests}/gui/source/delete/__init__.py (100%) rename {tests => client/tests}/gui/source/delete/test_dialog.py (100%) rename {tests => client/tests}/gui/test_actions.py (100%) rename {tests => client/tests}/gui/test_datetime_helpers.py (100%) rename {tests => client/tests}/gui/test_main.py (100%) rename {tests => client/tests}/gui/test_widgets.py (100%) rename {tests => client/tests}/helper.py (100%) rename {tests => client/tests}/integration/conftest.py (100%) rename {tests => client/tests}/integration/test_placeholder.py (100%) rename {tests => client/tests}/integration/test_styles_file_download_button.py (100%) rename {tests => client/tests}/integration/test_styles_modal_dialog_button.py (100%) rename {tests => client/tests}/integration/test_styles_modal_dialog_error_details.py (100%) rename {tests => client/tests}/integration/test_styles_reply_status_bar.py (100%) rename {tests => client/tests}/integration/test_styles_sdclient.py (100%) rename {tests => client/tests}/integration/test_styles_speech_bubble_message.py (100%) rename {tests => client/tests}/integration/test_styles_speech_bubble_status_bar.py (100%) rename {tests => client/tests}/migrations/__init__.py (100%) rename {tests => client/tests}/migrations/test_d7c8af95bc8e.py (100%) rename {tests => client/tests}/state/__init__.py (100%) rename {tests => client/tests}/state/test_domain.py (100%) rename {tests => client/tests}/state/test_state.py (100%) rename {tests => client/tests}/test_alembic.py (100%) rename {tests => client/tests}/test_app.py (100%) rename {tests => client/tests}/test_config.py (100%) rename {tests => client/tests}/test_conversation.py (100%) rename {tests => client/tests}/test_crypto.py (100%) rename {tests => client/tests}/test_export.py (100%) rename {tests => client/tests}/test_logic.py (100%) rename {tests => client/tests}/test_models.py (100%) rename {tests => client/tests}/test_queue.py (100%) rename {tests => client/tests}/test_resources.py (100%) rename {tests => client/tests}/test_storage.py (100%) rename {tests => client/tests}/test_sync.py (100%) rename {tests => client/tests}/test_utils.py (100%) rename update_version.sh => client/update_version.sh (100%) diff --git a/.circleci/config.yml b/client/.circleci/config.yml similarity index 100% rename from .circleci/config.yml rename to client/.circleci/config.yml diff --git a/.coveragerc b/client/.coveragerc similarity index 100% rename from .coveragerc rename to client/.coveragerc diff --git a/.git-blame-ignore-revs b/client/.git-blame-ignore-revs similarity index 100% rename from .git-blame-ignore-revs rename to client/.git-blame-ignore-revs diff --git a/.githooks/pre-commit b/client/.githooks/pre-commit similarity index 100% rename from .githooks/pre-commit rename to client/.githooks/pre-commit diff --git a/.github/CODEOWNERS b/client/.github/CODEOWNERS similarity index 100% rename from .github/CODEOWNERS rename to client/.github/CODEOWNERS diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/client/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from .github/ISSUE_TEMPLATE/bug_report.md rename to client/.github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/client/.github/ISSUE_TEMPLATE/feature_request.md similarity index 100% rename from .github/ISSUE_TEMPLATE/feature_request.md rename to client/.github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/release.md b/client/.github/ISSUE_TEMPLATE/release.md similarity index 100% rename from .github/ISSUE_TEMPLATE/release.md rename to client/.github/ISSUE_TEMPLATE/release.md diff --git a/.github/pull_request_template.md b/client/.github/pull_request_template.md similarity index 100% rename from .github/pull_request_template.md rename to client/.github/pull_request_template.md diff --git a/.gitignore b/client/.gitignore similarity index 100% rename from .gitignore rename to client/.gitignore diff --git a/.semgrep/custom-rules.yml b/client/.semgrep/custom-rules.yml similarity index 100% rename from .semgrep/custom-rules.yml rename to client/.semgrep/custom-rules.yml diff --git a/CONTRIBUTING.md b/client/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to client/CONTRIBUTING.md diff --git a/Doxyfile b/client/Doxyfile similarity index 100% rename from Doxyfile rename to client/Doxyfile diff --git a/LICENSE b/client/LICENSE similarity index 100% rename from LICENSE rename to client/LICENSE diff --git a/MANIFEST.in b/client/MANIFEST.in similarity index 100% rename from MANIFEST.in rename to client/MANIFEST.in diff --git a/Makefile b/client/Makefile similarity index 100% rename from Makefile rename to client/Makefile diff --git a/README.md b/client/README.md similarity index 100% rename from README.md rename to client/README.md diff --git a/SECURITY.md b/client/SECURITY.md similarity index 100% rename from SECURITY.md rename to client/SECURITY.md diff --git a/alembic.ini b/client/alembic.ini similarity index 100% rename from alembic.ini rename to client/alembic.ini diff --git a/alembic/README b/client/alembic/README similarity index 100% rename from alembic/README rename to client/alembic/README diff --git a/alembic/env.py b/client/alembic/env.py similarity index 100% rename from alembic/env.py rename to client/alembic/env.py diff --git a/alembic/script.py.mako b/client/alembic/script.py.mako similarity index 100% rename from alembic/script.py.mako rename to client/alembic/script.py.mako diff --git a/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py b/client/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py similarity index 100% rename from alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py rename to client/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py diff --git a/alembic/versions/d7c8af95bc8e_initial.py b/client/alembic/versions/d7c8af95bc8e_initial.py similarity index 100% rename from alembic/versions/d7c8af95bc8e_initial.py rename to client/alembic/versions/d7c8af95bc8e_initial.py diff --git a/babel.cfg b/client/babel.cfg similarity index 100% rename from babel.cfg rename to client/babel.cfg diff --git a/build-requirements.txt b/client/build-requirements.txt similarity index 100% rename from build-requirements.txt rename to client/build-requirements.txt diff --git a/changelog.md b/client/changelog.md similarity index 100% rename from changelog.md rename to client/changelog.md diff --git a/create_dev_data.py b/client/create_dev_data.py similarity index 100% rename from create_dev_data.py rename to client/create_dev_data.py diff --git a/files/alembic.ini b/client/files/alembic.ini similarity index 100% rename from files/alembic.ini rename to client/files/alembic.ini diff --git a/files/press.freedom.SecureDropClient.desktop b/client/files/press.freedom.SecureDropClient.desktop similarity index 100% rename from files/press.freedom.SecureDropClient.desktop rename to client/files/press.freedom.SecureDropClient.desktop diff --git a/files/sd-app-qubes-gpg-domain.sh b/client/files/sd-app-qubes-gpg-domain.sh similarity index 100% rename from files/sd-app-qubes-gpg-domain.sh rename to client/files/sd-app-qubes-gpg-domain.sh diff --git a/files/securedrop-client b/client/files/securedrop-client similarity index 100% rename from files/securedrop-client rename to client/files/securedrop-client diff --git a/files/securedrop-client.desktop b/client/files/securedrop-client.desktop similarity index 100% rename from files/securedrop-client.desktop rename to client/files/securedrop-client.desktop diff --git a/files/usr.bin.securedrop-client b/client/files/usr.bin.securedrop-client similarity index 100% rename from files/usr.bin.securedrop-client rename to client/files/usr.bin.securedrop-client diff --git a/poetry.lock b/client/poetry.lock similarity index 100% rename from poetry.lock rename to client/poetry.lock diff --git a/project.json b/client/project.json similarity index 100% rename from project.json rename to client/project.json diff --git a/pyproject.toml b/client/pyproject.toml similarity index 100% rename from pyproject.toml rename to client/pyproject.toml diff --git a/pytest.ini b/client/pytest.ini similarity index 100% rename from pytest.ini rename to client/pytest.ini diff --git a/run.sh b/client/run.sh similarity index 100% rename from run.sh rename to client/run.sh diff --git a/scripts/setup-tmp-directories.sh b/client/scripts/setup-tmp-directories.sh similarity index 100% rename from scripts/setup-tmp-directories.sh rename to client/scripts/setup-tmp-directories.sh diff --git a/scripts/verify-mo.py b/client/scripts/verify-mo.py similarity index 100% rename from scripts/verify-mo.py rename to client/scripts/verify-mo.py diff --git a/securedrop_client/__init__.py b/client/securedrop_client/__init__.py similarity index 100% rename from securedrop_client/__init__.py rename to client/securedrop_client/__init__.py diff --git a/securedrop_client/__main__.py b/client/securedrop_client/__main__.py similarity index 100% rename from securedrop_client/__main__.py rename to client/securedrop_client/__main__.py diff --git a/securedrop_client/api_jobs/__init__.py b/client/securedrop_client/api_jobs/__init__.py similarity index 100% rename from securedrop_client/api_jobs/__init__.py rename to client/securedrop_client/api_jobs/__init__.py diff --git a/securedrop_client/api_jobs/base.py b/client/securedrop_client/api_jobs/base.py similarity index 100% rename from securedrop_client/api_jobs/base.py rename to client/securedrop_client/api_jobs/base.py diff --git a/securedrop_client/api_jobs/downloads.py b/client/securedrop_client/api_jobs/downloads.py similarity index 100% rename from securedrop_client/api_jobs/downloads.py rename to client/securedrop_client/api_jobs/downloads.py diff --git a/securedrop_client/api_jobs/seen.py b/client/securedrop_client/api_jobs/seen.py similarity index 100% rename from securedrop_client/api_jobs/seen.py rename to client/securedrop_client/api_jobs/seen.py diff --git a/securedrop_client/api_jobs/sources.py b/client/securedrop_client/api_jobs/sources.py similarity index 100% rename from securedrop_client/api_jobs/sources.py rename to client/securedrop_client/api_jobs/sources.py diff --git a/securedrop_client/api_jobs/sync.py b/client/securedrop_client/api_jobs/sync.py similarity index 100% rename from securedrop_client/api_jobs/sync.py rename to client/securedrop_client/api_jobs/sync.py diff --git a/securedrop_client/api_jobs/updatestar.py b/client/securedrop_client/api_jobs/updatestar.py similarity index 100% rename from securedrop_client/api_jobs/updatestar.py rename to client/securedrop_client/api_jobs/updatestar.py diff --git a/securedrop_client/api_jobs/uploads.py b/client/securedrop_client/api_jobs/uploads.py similarity index 100% rename from securedrop_client/api_jobs/uploads.py rename to client/securedrop_client/api_jobs/uploads.py diff --git a/securedrop_client/app.py b/client/securedrop_client/app.py similarity index 100% rename from securedrop_client/app.py rename to client/securedrop_client/app.py diff --git a/securedrop_client/config.py b/client/securedrop_client/config.py similarity index 100% rename from securedrop_client/config.py rename to client/securedrop_client/config.py diff --git a/securedrop_client/conversation/__init__.py b/client/securedrop_client/conversation/__init__.py similarity index 100% rename from securedrop_client/conversation/__init__.py rename to client/securedrop_client/conversation/__init__.py diff --git a/securedrop_client/conversation/transcript/__init__.py b/client/securedrop_client/conversation/transcript/__init__.py similarity index 100% rename from securedrop_client/conversation/transcript/__init__.py rename to client/securedrop_client/conversation/transcript/__init__.py diff --git a/securedrop_client/conversation/transcript/items/__init__.py b/client/securedrop_client/conversation/transcript/items/__init__.py similarity index 100% rename from securedrop_client/conversation/transcript/items/__init__.py rename to client/securedrop_client/conversation/transcript/items/__init__.py diff --git a/securedrop_client/conversation/transcript/items/factory.py b/client/securedrop_client/conversation/transcript/items/factory.py similarity index 100% rename from securedrop_client/conversation/transcript/items/factory.py rename to client/securedrop_client/conversation/transcript/items/factory.py diff --git a/securedrop_client/conversation/transcript/items/file.py b/client/securedrop_client/conversation/transcript/items/file.py similarity index 100% rename from securedrop_client/conversation/transcript/items/file.py rename to client/securedrop_client/conversation/transcript/items/file.py diff --git a/securedrop_client/conversation/transcript/items/item.py b/client/securedrop_client/conversation/transcript/items/item.py similarity index 100% rename from securedrop_client/conversation/transcript/items/item.py rename to client/securedrop_client/conversation/transcript/items/item.py diff --git a/securedrop_client/conversation/transcript/items/message.py b/client/securedrop_client/conversation/transcript/items/message.py similarity index 100% rename from securedrop_client/conversation/transcript/items/message.py rename to client/securedrop_client/conversation/transcript/items/message.py diff --git a/securedrop_client/conversation/transcript/templates/transcript.txt.jinja b/client/securedrop_client/conversation/transcript/templates/transcript.txt.jinja similarity index 100% rename from securedrop_client/conversation/transcript/templates/transcript.txt.jinja rename to client/securedrop_client/conversation/transcript/templates/transcript.txt.jinja diff --git a/securedrop_client/conversation/transcript/transcript.py b/client/securedrop_client/conversation/transcript/transcript.py similarity index 100% rename from securedrop_client/conversation/transcript/transcript.py rename to client/securedrop_client/conversation/transcript/transcript.py diff --git a/securedrop_client/crypto.py b/client/securedrop_client/crypto.py similarity index 100% rename from securedrop_client/crypto.py rename to client/securedrop_client/crypto.py diff --git a/securedrop_client/database.py b/client/securedrop_client/database.py similarity index 100% rename from securedrop_client/database.py rename to client/securedrop_client/database.py diff --git a/securedrop_client/db.py b/client/securedrop_client/db.py similarity index 100% rename from securedrop_client/db.py rename to client/securedrop_client/db.py diff --git a/securedrop_client/export.py b/client/securedrop_client/export.py similarity index 100% rename from securedrop_client/export.py rename to client/securedrop_client/export.py diff --git a/securedrop_client/gui/__init__.py b/client/securedrop_client/gui/__init__.py similarity index 100% rename from securedrop_client/gui/__init__.py rename to client/securedrop_client/gui/__init__.py diff --git a/securedrop_client/gui/actions.py b/client/securedrop_client/gui/actions.py similarity index 100% rename from securedrop_client/gui/actions.py rename to client/securedrop_client/gui/actions.py diff --git a/securedrop_client/gui/auth/__init__.py b/client/securedrop_client/gui/auth/__init__.py similarity index 100% rename from securedrop_client/gui/auth/__init__.py rename to client/securedrop_client/gui/auth/__init__.py diff --git a/securedrop_client/gui/auth/dialog.css b/client/securedrop_client/gui/auth/dialog.css similarity index 100% rename from securedrop_client/gui/auth/dialog.css rename to client/securedrop_client/gui/auth/dialog.css diff --git a/securedrop_client/gui/auth/dialog.py b/client/securedrop_client/gui/auth/dialog.py similarity index 100% rename from securedrop_client/gui/auth/dialog.py rename to client/securedrop_client/gui/auth/dialog.py diff --git a/securedrop_client/gui/auth/sign_in/__init__.py b/client/securedrop_client/gui/auth/sign_in/__init__.py similarity index 100% rename from securedrop_client/gui/auth/sign_in/__init__.py rename to client/securedrop_client/gui/auth/sign_in/__init__.py diff --git a/securedrop_client/gui/auth/sign_in/button.css b/client/securedrop_client/gui/auth/sign_in/button.css similarity index 100% rename from securedrop_client/gui/auth/sign_in/button.css rename to client/securedrop_client/gui/auth/sign_in/button.css diff --git a/securedrop_client/gui/auth/sign_in/button.py b/client/securedrop_client/gui/auth/sign_in/button.py similarity index 100% rename from securedrop_client/gui/auth/sign_in/button.py rename to client/securedrop_client/gui/auth/sign_in/button.py diff --git a/securedrop_client/gui/auth/sign_in/error_bar.css b/client/securedrop_client/gui/auth/sign_in/error_bar.css similarity index 100% rename from securedrop_client/gui/auth/sign_in/error_bar.css rename to client/securedrop_client/gui/auth/sign_in/error_bar.css diff --git a/securedrop_client/gui/auth/sign_in/error_bar.py b/client/securedrop_client/gui/auth/sign_in/error_bar.py similarity index 100% rename from securedrop_client/gui/auth/sign_in/error_bar.py rename to client/securedrop_client/gui/auth/sign_in/error_bar.py diff --git a/securedrop_client/gui/auth/use_offline/__init__.py b/client/securedrop_client/gui/auth/use_offline/__init__.py similarity index 100% rename from securedrop_client/gui/auth/use_offline/__init__.py rename to client/securedrop_client/gui/auth/use_offline/__init__.py diff --git a/securedrop_client/gui/auth/use_offline/button.py b/client/securedrop_client/gui/auth/use_offline/button.py similarity index 100% rename from securedrop_client/gui/auth/use_offline/button.py rename to client/securedrop_client/gui/auth/use_offline/button.py diff --git a/securedrop_client/gui/base/__init__.py b/client/securedrop_client/gui/base/__init__.py similarity index 100% rename from securedrop_client/gui/base/__init__.py rename to client/securedrop_client/gui/base/__init__.py diff --git a/securedrop_client/gui/base/buttons.py b/client/securedrop_client/gui/base/buttons.py similarity index 100% rename from securedrop_client/gui/base/buttons.py rename to client/securedrop_client/gui/base/buttons.py diff --git a/securedrop_client/gui/base/checkbox.css b/client/securedrop_client/gui/base/checkbox.css similarity index 100% rename from securedrop_client/gui/base/checkbox.css rename to client/securedrop_client/gui/base/checkbox.css diff --git a/securedrop_client/gui/base/checkbox.py b/client/securedrop_client/gui/base/checkbox.py similarity index 100% rename from securedrop_client/gui/base/checkbox.py rename to client/securedrop_client/gui/base/checkbox.py diff --git a/securedrop_client/gui/base/dialog_button.css b/client/securedrop_client/gui/base/dialog_button.css similarity index 100% rename from securedrop_client/gui/base/dialog_button.css rename to client/securedrop_client/gui/base/dialog_button.css diff --git a/securedrop_client/gui/base/dialog_message.css b/client/securedrop_client/gui/base/dialog_message.css similarity index 100% rename from securedrop_client/gui/base/dialog_message.css rename to client/securedrop_client/gui/base/dialog_message.css diff --git a/securedrop_client/gui/base/dialogs.css b/client/securedrop_client/gui/base/dialogs.css similarity index 100% rename from securedrop_client/gui/base/dialogs.css rename to client/securedrop_client/gui/base/dialogs.css diff --git a/securedrop_client/gui/base/dialogs.py b/client/securedrop_client/gui/base/dialogs.py similarity index 100% rename from securedrop_client/gui/base/dialogs.py rename to client/securedrop_client/gui/base/dialogs.py diff --git a/securedrop_client/gui/base/inputs.py b/client/securedrop_client/gui/base/inputs.py similarity index 100% rename from securedrop_client/gui/base/inputs.py rename to client/securedrop_client/gui/base/inputs.py diff --git a/securedrop_client/gui/base/misc.py b/client/securedrop_client/gui/base/misc.py similarity index 100% rename from securedrop_client/gui/base/misc.py rename to client/securedrop_client/gui/base/misc.py diff --git a/securedrop_client/gui/conversation/__init__.py b/client/securedrop_client/gui/conversation/__init__.py similarity index 100% rename from securedrop_client/gui/conversation/__init__.py rename to client/securedrop_client/gui/conversation/__init__.py diff --git a/securedrop_client/gui/conversation/delete/__init__.py b/client/securedrop_client/gui/conversation/delete/__init__.py similarity index 100% rename from securedrop_client/gui/conversation/delete/__init__.py rename to client/securedrop_client/gui/conversation/delete/__init__.py diff --git a/securedrop_client/gui/conversation/delete/dialog.py b/client/securedrop_client/gui/conversation/delete/dialog.py similarity index 100% rename from securedrop_client/gui/conversation/delete/dialog.py rename to client/securedrop_client/gui/conversation/delete/dialog.py diff --git a/securedrop_client/gui/conversation/export/__init__.py b/client/securedrop_client/gui/conversation/export/__init__.py similarity index 100% rename from securedrop_client/gui/conversation/export/__init__.py rename to client/securedrop_client/gui/conversation/export/__init__.py diff --git a/securedrop_client/gui/conversation/export/device.py b/client/securedrop_client/gui/conversation/export/device.py similarity index 100% rename from securedrop_client/gui/conversation/export/device.py rename to client/securedrop_client/gui/conversation/export/device.py diff --git a/securedrop_client/gui/conversation/export/dialog.css b/client/securedrop_client/gui/conversation/export/dialog.css similarity index 100% rename from securedrop_client/gui/conversation/export/dialog.css rename to client/securedrop_client/gui/conversation/export/dialog.css diff --git a/securedrop_client/gui/conversation/export/dialog.py b/client/securedrop_client/gui/conversation/export/dialog.py similarity index 100% rename from securedrop_client/gui/conversation/export/dialog.py rename to client/securedrop_client/gui/conversation/export/dialog.py diff --git a/securedrop_client/gui/conversation/export/file_dialog.py b/client/securedrop_client/gui/conversation/export/file_dialog.py similarity index 100% rename from securedrop_client/gui/conversation/export/file_dialog.py rename to client/securedrop_client/gui/conversation/export/file_dialog.py diff --git a/securedrop_client/gui/conversation/export/print_dialog.py b/client/securedrop_client/gui/conversation/export/print_dialog.py similarity index 100% rename from securedrop_client/gui/conversation/export/print_dialog.py rename to client/securedrop_client/gui/conversation/export/print_dialog.py diff --git a/securedrop_client/gui/conversation/export/print_transcript_dialog.py b/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py similarity index 100% rename from securedrop_client/gui/conversation/export/print_transcript_dialog.py rename to client/securedrop_client/gui/conversation/export/print_transcript_dialog.py diff --git a/securedrop_client/gui/conversation/export/transcript_dialog.py b/client/securedrop_client/gui/conversation/export/transcript_dialog.py similarity index 100% rename from securedrop_client/gui/conversation/export/transcript_dialog.py rename to client/securedrop_client/gui/conversation/export/transcript_dialog.py diff --git a/securedrop_client/gui/datetime_helpers.py b/client/securedrop_client/gui/datetime_helpers.py similarity index 100% rename from securedrop_client/gui/datetime_helpers.py rename to client/securedrop_client/gui/datetime_helpers.py diff --git a/securedrop_client/gui/main.py b/client/securedrop_client/gui/main.py similarity index 100% rename from securedrop_client/gui/main.py rename to client/securedrop_client/gui/main.py diff --git a/securedrop_client/gui/source/__init__.py b/client/securedrop_client/gui/source/__init__.py similarity index 100% rename from securedrop_client/gui/source/__init__.py rename to client/securedrop_client/gui/source/__init__.py diff --git a/securedrop_client/gui/source/delete/__init__.py b/client/securedrop_client/gui/source/delete/__init__.py similarity index 100% rename from securedrop_client/gui/source/delete/__init__.py rename to client/securedrop_client/gui/source/delete/__init__.py diff --git a/securedrop_client/gui/source/delete/dialog.py b/client/securedrop_client/gui/source/delete/dialog.py similarity index 100% rename from securedrop_client/gui/source/delete/dialog.py rename to client/securedrop_client/gui/source/delete/dialog.py diff --git a/securedrop_client/gui/widgets.py b/client/securedrop_client/gui/widgets.py similarity index 100% rename from securedrop_client/gui/widgets.py rename to client/securedrop_client/gui/widgets.py diff --git a/securedrop_client/locale/ca/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/ca/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/ca/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/ca/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/ca/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/ca/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/de/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/de/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/de/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/de/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/de/LC_MESSAGES/messages.po b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/de/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/de/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/es/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/es/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/es/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.po b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/es/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/es/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/hr/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/hr/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/hr/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/hr/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/is/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/is/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/is/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/is/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/is/LC_MESSAGES/messages.po b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/is/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/is/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/it/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/it/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/it/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.po b/client/securedrop_client/locale/it/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/it/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/it/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot similarity index 100% rename from securedrop_client/locale/messages.pot rename to client/securedrop_client/locale/messages.pot diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/ru/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/ru/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/ru/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/ru/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/sk/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/sk/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/sk/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/sk/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/sv/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/sv/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/sv/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/sv/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/tr/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/tr/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/tr/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/tr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/tr/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/tr/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po diff --git a/securedrop_client/logic.py b/client/securedrop_client/logic.py similarity index 100% rename from securedrop_client/logic.py rename to client/securedrop_client/logic.py diff --git a/securedrop_client/queue.py b/client/securedrop_client/queue.py similarity index 100% rename from securedrop_client/queue.py rename to client/securedrop_client/queue.py diff --git a/securedrop_client/resources/__init__.py b/client/securedrop_client/resources/__init__.py similarity index 100% rename from securedrop_client/resources/__init__.py rename to client/securedrop_client/resources/__init__.py diff --git a/securedrop_client/resources/css/button.css b/client/securedrop_client/resources/css/button.css similarity index 100% rename from securedrop_client/resources/css/button.css rename to client/securedrop_client/resources/css/button.css diff --git a/securedrop_client/resources/css/checker_tooltip.css b/client/securedrop_client/resources/css/checker_tooltip.css similarity index 100% rename from securedrop_client/resources/css/checker_tooltip.css rename to client/securedrop_client/resources/css/checker_tooltip.css diff --git a/securedrop_client/resources/css/file_download_button.css b/client/securedrop_client/resources/css/file_download_button.css similarity index 100% rename from securedrop_client/resources/css/file_download_button.css rename to client/securedrop_client/resources/css/file_download_button.css diff --git a/securedrop_client/resources/css/sdclient.css b/client/securedrop_client/resources/css/sdclient.css similarity index 100% rename from securedrop_client/resources/css/sdclient.css rename to client/securedrop_client/resources/css/sdclient.css diff --git a/securedrop_client/resources/css/sender_icon.css b/client/securedrop_client/resources/css/sender_icon.css similarity index 100% rename from securedrop_client/resources/css/sender_icon.css rename to client/securedrop_client/resources/css/sender_icon.css diff --git a/securedrop_client/resources/css/source_menu.css b/client/securedrop_client/resources/css/source_menu.css similarity index 100% rename from securedrop_client/resources/css/source_menu.css rename to client/securedrop_client/resources/css/source_menu.css diff --git a/securedrop_client/resources/css/source_name.css b/client/securedrop_client/resources/css/source_name.css similarity index 100% rename from securedrop_client/resources/css/source_name.css rename to client/securedrop_client/resources/css/source_name.css diff --git a/securedrop_client/resources/css/source_preview.css b/client/securedrop_client/resources/css/source_preview.css similarity index 100% rename from securedrop_client/resources/css/source_preview.css rename to client/securedrop_client/resources/css/source_preview.css diff --git a/securedrop_client/resources/css/source_timestamp.css b/client/securedrop_client/resources/css/source_timestamp.css similarity index 100% rename from securedrop_client/resources/css/source_timestamp.css rename to client/securedrop_client/resources/css/source_timestamp.css diff --git a/securedrop_client/resources/css/speech_bubble_message.css b/client/securedrop_client/resources/css/speech_bubble_message.css similarity index 100% rename from securedrop_client/resources/css/speech_bubble_message.css rename to client/securedrop_client/resources/css/speech_bubble_message.css diff --git a/securedrop_client/resources/css/speech_bubble_status_bar.css b/client/securedrop_client/resources/css/speech_bubble_status_bar.css similarity index 100% rename from securedrop_client/resources/css/speech_bubble_status_bar.css rename to client/securedrop_client/resources/css/speech_bubble_status_bar.css diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-Black.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-Black.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-Black.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-Black.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-BlackItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-BlackItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-BlackItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-BlackItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-Bold.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-Bold.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-Bold.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-Bold.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-BoldItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-BoldItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-BoldItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-BoldItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBold.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBold.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBold.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBold.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLight.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLight.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLight.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLight.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-Light.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-Light.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-Light.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-Light.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-LightItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-LightItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-LightItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-LightItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-Medium.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-Medium.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-Medium.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-Medium.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-MediumItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-MediumItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-MediumItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-MediumItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-Regular.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-Regular.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-Regular.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-Regular.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-RegularItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-RegularItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-RegularItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-RegularItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBold.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBold.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBold.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBold.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-Thin.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-Thin.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-Thin.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-Thin.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/Montserrat-ThinItalic.ttf b/client/securedrop_client/resources/fonts/Montserrat/Montserrat-ThinItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/Montserrat-ThinItalic.ttf rename to client/securedrop_client/resources/fonts/Montserrat/Montserrat-ThinItalic.ttf diff --git a/securedrop_client/resources/fonts/Montserrat/OFL.txt b/client/securedrop_client/resources/fonts/Montserrat/OFL.txt similarity index 100% rename from securedrop_client/resources/fonts/Montserrat/OFL.txt rename to client/securedrop_client/resources/fonts/Montserrat/OFL.txt diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/OFL.txt b/client/securedrop_client/resources/fonts/Source_Sans_Pro/OFL.txt similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/OFL.txt rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/OFL.txt diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Black.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Black.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Black.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Black.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BlackItalic.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BlackItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BlackItalic.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BlackItalic.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Bold.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Bold.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Bold.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Bold.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BoldItalic.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BoldItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BoldItalic.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-BoldItalic.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLight.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLight.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLight.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLight.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLightItalic.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLightItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLightItalic.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-ExtraLightItalic.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Light.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Light.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Light.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Light.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-LightItalic.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-LightItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-LightItalic.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-LightItalic.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-RegularItalic.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-RegularItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-RegularItalic.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-RegularItalic.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBold.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBold.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBold.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBold.ttf diff --git a/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBoldItalic.ttf b/client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBoldItalic.ttf similarity index 100% rename from securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBoldItalic.ttf rename to client/securedrop_client/resources/fonts/Source_Sans_Pro/SourceSansPro-SemiBoldItalic.ttf diff --git a/securedrop_client/resources/images/activestate-wide.gif b/client/securedrop_client/resources/images/activestate-wide.gif similarity index 100% rename from securedrop_client/resources/images/activestate-wide.gif rename to client/securedrop_client/resources/images/activestate-wide.gif diff --git a/securedrop_client/resources/images/blank.svg b/client/securedrop_client/resources/images/blank.svg similarity index 100% rename from securedrop_client/resources/images/blank.svg rename to client/securedrop_client/resources/images/blank.svg diff --git a/securedrop_client/resources/images/checkmark.svg b/client/securedrop_client/resources/images/checkmark.svg similarity index 100% rename from securedrop_client/resources/images/checkmark.svg rename to client/securedrop_client/resources/images/checkmark.svg diff --git a/securedrop_client/resources/images/checkmark_hover.svg b/client/securedrop_client/resources/images/checkmark_hover.svg similarity index 100% rename from securedrop_client/resources/images/checkmark_hover.svg rename to client/securedrop_client/resources/images/checkmark_hover.svg diff --git a/securedrop_client/resources/images/cross.svg b/client/securedrop_client/resources/images/cross.svg similarity index 100% rename from securedrop_client/resources/images/cross.svg rename to client/securedrop_client/resources/images/cross.svg diff --git a/securedrop_client/resources/images/delete.png b/client/securedrop_client/resources/images/delete.png similarity index 100% rename from securedrop_client/resources/images/delete.png rename to client/securedrop_client/resources/images/delete.png diff --git a/securedrop_client/resources/images/delete_close.svg b/client/securedrop_client/resources/images/delete_close.svg similarity index 100% rename from securedrop_client/resources/images/delete_close.svg rename to client/securedrop_client/resources/images/delete_close.svg diff --git a/securedrop_client/resources/images/deleted-user.svg b/client/securedrop_client/resources/images/deleted-user.svg similarity index 100% rename from securedrop_client/resources/images/deleted-user.svg rename to client/securedrop_client/resources/images/deleted-user.svg diff --git a/securedrop_client/resources/images/download_active.svg b/client/securedrop_client/resources/images/download_active.svg similarity index 100% rename from securedrop_client/resources/images/download_active.svg rename to client/securedrop_client/resources/images/download_active.svg diff --git a/securedrop_client/resources/images/download_file.gif b/client/securedrop_client/resources/images/download_file.gif similarity index 100% rename from securedrop_client/resources/images/download_file.gif rename to client/securedrop_client/resources/images/download_file.gif diff --git a/securedrop_client/resources/images/download_file.svg b/client/securedrop_client/resources/images/download_file.svg similarity index 100% rename from securedrop_client/resources/images/download_file.svg rename to client/securedrop_client/resources/images/download_file.svg diff --git a/securedrop_client/resources/images/download_file_hover.svg b/client/securedrop_client/resources/images/download_file_hover.svg similarity index 100% rename from securedrop_client/resources/images/download_file_hover.svg rename to client/securedrop_client/resources/images/download_file_hover.svg diff --git a/securedrop_client/resources/images/dropdown_arrow.svg b/client/securedrop_client/resources/images/dropdown_arrow.svg similarity index 100% rename from securedrop_client/resources/images/dropdown_arrow.svg rename to client/securedrop_client/resources/images/dropdown_arrow.svg diff --git a/securedrop_client/resources/images/ellipsis.svg b/client/securedrop_client/resources/images/ellipsis.svg similarity index 100% rename from securedrop_client/resources/images/ellipsis.svg rename to client/securedrop_client/resources/images/ellipsis.svg diff --git a/securedrop_client/resources/images/error_icon.svg b/client/securedrop_client/resources/images/error_icon.svg similarity index 100% rename from securedrop_client/resources/images/error_icon.svg rename to client/securedrop_client/resources/images/error_icon.svg diff --git a/securedrop_client/resources/images/error_icon_white.svg b/client/securedrop_client/resources/images/error_icon_white.svg similarity index 100% rename from securedrop_client/resources/images/error_icon_white.svg rename to client/securedrop_client/resources/images/error_icon_white.svg diff --git a/securedrop_client/resources/images/eye_hidden.svg b/client/securedrop_client/resources/images/eye_hidden.svg similarity index 100% rename from securedrop_client/resources/images/eye_hidden.svg rename to client/securedrop_client/resources/images/eye_hidden.svg diff --git a/securedrop_client/resources/images/eye_visible.svg b/client/securedrop_client/resources/images/eye_visible.svg similarity index 100% rename from securedrop_client/resources/images/eye_visible.svg rename to client/securedrop_client/resources/images/eye_visible.svg diff --git a/securedrop_client/resources/images/header_animation.gif b/client/securedrop_client/resources/images/header_animation.gif similarity index 100% rename from securedrop_client/resources/images/header_animation.gif rename to client/securedrop_client/resources/images/header_animation.gif diff --git a/securedrop_client/resources/images/header_logo.png b/client/securedrop_client/resources/images/header_logo.png similarity index 100% rename from securedrop_client/resources/images/header_logo.png rename to client/securedrop_client/resources/images/header_logo.png diff --git a/securedrop_client/resources/images/hexes.svg b/client/securedrop_client/resources/images/hexes.svg similarity index 100% rename from securedrop_client/resources/images/hexes.svg rename to client/securedrop_client/resources/images/hexes.svg diff --git a/securedrop_client/resources/images/icon.png b/client/securedrop_client/resources/images/icon.png similarity index 100% rename from securedrop_client/resources/images/icon.png rename to client/securedrop_client/resources/images/icon.png diff --git a/securedrop_client/resources/images/left_pane.svg b/client/securedrop_client/resources/images/left_pane.svg similarity index 100% rename from securedrop_client/resources/images/left_pane.svg rename to client/securedrop_client/resources/images/left_pane.svg diff --git a/securedrop_client/resources/images/left_pane_offline.svg b/client/securedrop_client/resources/images/left_pane_offline.svg similarity index 100% rename from securedrop_client/resources/images/left_pane_offline.svg rename to client/securedrop_client/resources/images/left_pane_offline.svg diff --git a/securedrop_client/resources/images/loading-bar.gif b/client/securedrop_client/resources/images/loading-bar.gif similarity index 100% rename from securedrop_client/resources/images/loading-bar.gif rename to client/securedrop_client/resources/images/loading-bar.gif diff --git a/securedrop_client/resources/images/loading-cubes.gif b/client/securedrop_client/resources/images/loading-cubes.gif similarity index 100% rename from securedrop_client/resources/images/loading-cubes.gif rename to client/securedrop_client/resources/images/loading-cubes.gif diff --git a/securedrop_client/resources/images/login_bg.svg b/client/securedrop_client/resources/images/login_bg.svg similarity index 100% rename from securedrop_client/resources/images/login_bg.svg rename to client/securedrop_client/resources/images/login_bg.svg diff --git a/securedrop_client/resources/images/logo.png b/client/securedrop_client/resources/images/logo.png similarity index 100% rename from securedrop_client/resources/images/logo.png rename to client/securedrop_client/resources/images/logo.png diff --git a/securedrop_client/resources/images/paperclip-disabled.svg b/client/securedrop_client/resources/images/paperclip-disabled.svg similarity index 100% rename from securedrop_client/resources/images/paperclip-disabled.svg rename to client/securedrop_client/resources/images/paperclip-disabled.svg diff --git a/securedrop_client/resources/images/paperclip.svg b/client/securedrop_client/resources/images/paperclip.svg similarity index 100% rename from securedrop_client/resources/images/paperclip.svg rename to client/securedrop_client/resources/images/paperclip.svg diff --git a/securedrop_client/resources/images/printer.svg b/client/securedrop_client/resources/images/printer.svg similarity index 100% rename from securedrop_client/resources/images/printer.svg rename to client/securedrop_client/resources/images/printer.svg diff --git a/securedrop_client/resources/images/refresh.svg b/client/securedrop_client/resources/images/refresh.svg similarity index 100% rename from securedrop_client/resources/images/refresh.svg rename to client/securedrop_client/resources/images/refresh.svg diff --git a/securedrop_client/resources/images/refresh_active.svg b/client/securedrop_client/resources/images/refresh_active.svg similarity index 100% rename from securedrop_client/resources/images/refresh_active.svg rename to client/securedrop_client/resources/images/refresh_active.svg diff --git a/securedrop_client/resources/images/refresh_offline.svg b/client/securedrop_client/resources/images/refresh_offline.svg similarity index 100% rename from securedrop_client/resources/images/refresh_offline.svg rename to client/securedrop_client/resources/images/refresh_offline.svg diff --git a/securedrop_client/resources/images/savetodisk.svg b/client/securedrop_client/resources/images/savetodisk.svg similarity index 100% rename from securedrop_client/resources/images/savetodisk.svg rename to client/securedrop_client/resources/images/savetodisk.svg diff --git a/securedrop_client/resources/images/send-disabled.svg b/client/securedrop_client/resources/images/send-disabled.svg similarity index 100% rename from securedrop_client/resources/images/send-disabled.svg rename to client/securedrop_client/resources/images/send-disabled.svg diff --git a/securedrop_client/resources/images/send.svg b/client/securedrop_client/resources/images/send.svg similarity index 100% rename from securedrop_client/resources/images/send.svg rename to client/securedrop_client/resources/images/send.svg diff --git a/securedrop_client/resources/images/star_hover.svg b/client/securedrop_client/resources/images/star_hover.svg similarity index 100% rename from securedrop_client/resources/images/star_hover.svg rename to client/securedrop_client/resources/images/star_hover.svg diff --git a/securedrop_client/resources/images/star_off.svg b/client/securedrop_client/resources/images/star_off.svg similarity index 100% rename from securedrop_client/resources/images/star_off.svg rename to client/securedrop_client/resources/images/star_off.svg diff --git a/securedrop_client/resources/images/star_on.svg b/client/securedrop_client/resources/images/star_on.svg similarity index 100% rename from securedrop_client/resources/images/star_on.svg rename to client/securedrop_client/resources/images/star_on.svg diff --git a/securedrop_client/resources/images/sync.gif b/client/securedrop_client/resources/images/sync.gif similarity index 100% rename from securedrop_client/resources/images/sync.gif rename to client/securedrop_client/resources/images/sync.gif diff --git a/securedrop_client/resources/images/sync.svg b/client/securedrop_client/resources/images/sync.svg similarity index 100% rename from securedrop_client/resources/images/sync.svg rename to client/securedrop_client/resources/images/sync.svg diff --git a/securedrop_client/resources/images/sync_active.gif b/client/securedrop_client/resources/images/sync_active.gif similarity index 100% rename from securedrop_client/resources/images/sync_active.gif rename to client/securedrop_client/resources/images/sync_active.gif diff --git a/securedrop_client/resources/images/sync_disabled.gif b/client/securedrop_client/resources/images/sync_disabled.gif similarity index 100% rename from securedrop_client/resources/images/sync_disabled.gif rename to client/securedrop_client/resources/images/sync_disabled.gif diff --git a/securedrop_client/resources/images/tear-big.svg b/client/securedrop_client/resources/images/tear-big.svg similarity index 100% rename from securedrop_client/resources/images/tear-big.svg rename to client/securedrop_client/resources/images/tear-big.svg diff --git a/securedrop_client/resources/images/tear-left.svg b/client/securedrop_client/resources/images/tear-left.svg similarity index 100% rename from securedrop_client/resources/images/tear-left.svg rename to client/securedrop_client/resources/images/tear-left.svg diff --git a/securedrop_client/resources/images/tear-right.svg b/client/securedrop_client/resources/images/tear-right.svg similarity index 100% rename from securedrop_client/resources/images/tear-right.svg rename to client/securedrop_client/resources/images/tear-right.svg diff --git a/securedrop_client/resources/images/trash.png b/client/securedrop_client/resources/images/trash.png similarity index 100% rename from securedrop_client/resources/images/trash.png rename to client/securedrop_client/resources/images/trash.png diff --git a/securedrop_client/state/__init__.py b/client/securedrop_client/state/__init__.py similarity index 100% rename from securedrop_client/state/__init__.py rename to client/securedrop_client/state/__init__.py diff --git a/securedrop_client/state/domain.py b/client/securedrop_client/state/domain.py similarity index 100% rename from securedrop_client/state/domain.py rename to client/securedrop_client/state/domain.py diff --git a/securedrop_client/state/state.py b/client/securedrop_client/state/state.py similarity index 100% rename from securedrop_client/state/state.py rename to client/securedrop_client/state/state.py diff --git a/securedrop_client/storage.py b/client/securedrop_client/storage.py similarity index 100% rename from securedrop_client/storage.py rename to client/securedrop_client/storage.py diff --git a/securedrop_client/sync.py b/client/securedrop_client/sync.py similarity index 100% rename from securedrop_client/sync.py rename to client/securedrop_client/sync.py diff --git a/securedrop_client/utils.py b/client/securedrop_client/utils.py similarity index 100% rename from securedrop_client/utils.py rename to client/securedrop_client/utils.py diff --git a/setup.cfg b/client/setup.cfg similarity index 100% rename from setup.cfg rename to client/setup.cfg diff --git a/setup.py b/client/setup.py similarity index 100% rename from setup.py rename to client/setup.py diff --git a/test-functional.sh b/client/test-functional.sh similarity index 100% rename from test-functional.sh rename to client/test-functional.sh diff --git a/tests/__init__.py b/client/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to client/tests/__init__.py diff --git a/tests/api_jobs/__init__.py b/client/tests/api_jobs/__init__.py similarity index 100% rename from tests/api_jobs/__init__.py rename to client/tests/api_jobs/__init__.py diff --git a/tests/api_jobs/test_base.py b/client/tests/api_jobs/test_base.py similarity index 100% rename from tests/api_jobs/test_base.py rename to client/tests/api_jobs/test_base.py diff --git a/tests/api_jobs/test_downloads.py b/client/tests/api_jobs/test_downloads.py similarity index 100% rename from tests/api_jobs/test_downloads.py rename to client/tests/api_jobs/test_downloads.py diff --git a/tests/api_jobs/test_seen.py b/client/tests/api_jobs/test_seen.py similarity index 100% rename from tests/api_jobs/test_seen.py rename to client/tests/api_jobs/test_seen.py diff --git a/tests/api_jobs/test_sources.py b/client/tests/api_jobs/test_sources.py similarity index 100% rename from tests/api_jobs/test_sources.py rename to client/tests/api_jobs/test_sources.py diff --git a/tests/api_jobs/test_sync.py b/client/tests/api_jobs/test_sync.py similarity index 100% rename from tests/api_jobs/test_sync.py rename to client/tests/api_jobs/test_sync.py diff --git a/tests/api_jobs/test_updatestar.py b/client/tests/api_jobs/test_updatestar.py similarity index 100% rename from tests/api_jobs/test_updatestar.py rename to client/tests/api_jobs/test_updatestar.py diff --git a/tests/api_jobs/test_uploads.py b/client/tests/api_jobs/test_uploads.py similarity index 100% rename from tests/api_jobs/test_uploads.py rename to client/tests/api_jobs/test_uploads.py diff --git a/tests/conftest.py b/client/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to client/tests/conftest.py diff --git a/tests/factory.py b/client/tests/factory.py similarity index 100% rename from tests/factory.py rename to client/tests/factory.py diff --git a/tests/files/securedrop.gpg.asc b/client/tests/files/securedrop.gpg.asc similarity index 100% rename from tests/files/securedrop.gpg.asc rename to client/tests/files/securedrop.gpg.asc diff --git a/tests/files/securedrop.gpg.pub.asc b/client/tests/files/securedrop.gpg.pub.asc similarity index 100% rename from tests/files/securedrop.gpg.pub.asc rename to client/tests/files/securedrop.gpg.pub.asc diff --git a/tests/files/test-doc.gz.gpg b/client/tests/files/test-doc.gz.gpg similarity index 100% rename from tests/files/test-doc.gz.gpg rename to client/tests/files/test-doc.gz.gpg diff --git a/tests/files/test-key.gpg.asc b/client/tests/files/test-key.gpg.asc similarity index 100% rename from tests/files/test-key.gpg.asc rename to client/tests/files/test-key.gpg.asc diff --git a/tests/files/test-key.gpg.pub.asc b/client/tests/files/test-key.gpg.pub.asc similarity index 100% rename from tests/files/test-key.gpg.pub.asc rename to client/tests/files/test-key.gpg.pub.asc diff --git a/tests/functional/__init__.py b/client/tests/functional/__init__.py similarity index 100% rename from tests/functional/__init__.py rename to client/tests/functional/__init__.py diff --git a/tests/functional/cassettes/test_delete_source.yaml b/client/tests/functional/cassettes/test_delete_source.yaml similarity index 100% rename from tests/functional/cassettes/test_delete_source.yaml rename to client/tests/functional/cassettes/test_delete_source.yaml diff --git a/tests/functional/cassettes/test_download_file.yaml b/client/tests/functional/cassettes/test_download_file.yaml similarity index 100% rename from tests/functional/cassettes/test_download_file.yaml rename to client/tests/functional/cassettes/test_download_file.yaml diff --git a/tests/functional/cassettes/test_export_file_dialog.yaml b/client/tests/functional/cassettes/test_export_file_dialog.yaml similarity index 100% rename from tests/functional/cassettes/test_export_file_dialog.yaml rename to client/tests/functional/cassettes/test_export_file_dialog.yaml diff --git a/tests/functional/cassettes/test_login_as_journalist.yaml b/client/tests/functional/cassettes/test_login_as_journalist.yaml similarity index 100% rename from tests/functional/cassettes/test_login_as_journalist.yaml rename to client/tests/functional/cassettes/test_login_as_journalist.yaml diff --git a/tests/functional/cassettes/test_login_from_offline.yaml b/client/tests/functional/cassettes/test_login_from_offline.yaml similarity index 100% rename from tests/functional/cassettes/test_login_from_offline.yaml rename to client/tests/functional/cassettes/test_login_from_offline.yaml diff --git a/tests/functional/cassettes/test_logout_as_journalist.yaml b/client/tests/functional/cassettes/test_logout_as_journalist.yaml similarity index 100% rename from tests/functional/cassettes/test_logout_as_journalist.yaml rename to client/tests/functional/cassettes/test_logout_as_journalist.yaml diff --git a/tests/functional/cassettes/test_offline_delete_source_attempt.yaml b/client/tests/functional/cassettes/test_offline_delete_source_attempt.yaml similarity index 100% rename from tests/functional/cassettes/test_offline_delete_source_attempt.yaml rename to client/tests/functional/cassettes/test_offline_delete_source_attempt.yaml diff --git a/tests/functional/cassettes/test_offline_read_conversation.yaml b/client/tests/functional/cassettes/test_offline_read_conversation.yaml similarity index 100% rename from tests/functional/cassettes/test_offline_read_conversation.yaml rename to client/tests/functional/cassettes/test_offline_read_conversation.yaml diff --git a/tests/functional/cassettes/test_offline_send_reply_to_source.yaml b/client/tests/functional/cassettes/test_offline_send_reply_to_source.yaml similarity index 100% rename from tests/functional/cassettes/test_offline_send_reply_to_source.yaml rename to client/tests/functional/cassettes/test_offline_send_reply_to_source.yaml diff --git a/tests/functional/cassettes/test_offline_star_source.yaml b/client/tests/functional/cassettes/test_offline_star_source.yaml similarity index 100% rename from tests/functional/cassettes/test_offline_star_source.yaml rename to client/tests/functional/cassettes/test_offline_star_source.yaml diff --git a/tests/functional/cassettes/test_receive_message_from_source.yaml b/client/tests/functional/cassettes/test_receive_message_from_source.yaml similarity index 100% rename from tests/functional/cassettes/test_receive_message_from_source.yaml rename to client/tests/functional/cassettes/test_receive_message_from_source.yaml diff --git a/tests/functional/cassettes/test_seen_and_unseen.yaml b/client/tests/functional/cassettes/test_seen_and_unseen.yaml similarity index 100% rename from tests/functional/cassettes/test_seen_and_unseen.yaml rename to client/tests/functional/cassettes/test_seen_and_unseen.yaml diff --git a/tests/functional/cassettes/test_send_reply_to_source.yaml b/client/tests/functional/cassettes/test_send_reply_to_source.yaml similarity index 100% rename from tests/functional/cassettes/test_send_reply_to_source.yaml rename to client/tests/functional/cassettes/test_send_reply_to_source.yaml diff --git a/tests/functional/cassettes/test_star_source.yaml b/client/tests/functional/cassettes/test_star_source.yaml similarity index 100% rename from tests/functional/cassettes/test_star_source.yaml rename to client/tests/functional/cassettes/test_star_source.yaml diff --git a/tests/functional/cassettes/test_unseen_source_becomes_seen_on_click.yaml b/client/tests/functional/cassettes/test_unseen_source_becomes_seen_on_click.yaml similarity index 100% rename from tests/functional/cassettes/test_unseen_source_becomes_seen_on_click.yaml rename to client/tests/functional/cassettes/test_unseen_source_becomes_seen_on_click.yaml diff --git a/tests/functional/cassettes/test_user_icon_click.yaml b/client/tests/functional/cassettes/test_user_icon_click.yaml similarity index 100% rename from tests/functional/cassettes/test_user_icon_click.yaml rename to client/tests/functional/cassettes/test_user_icon_click.yaml diff --git a/tests/functional/test_delete_source.py b/client/tests/functional/test_delete_source.py similarity index 100% rename from tests/functional/test_delete_source.py rename to client/tests/functional/test_delete_source.py diff --git a/tests/functional/test_download_file.py b/client/tests/functional/test_download_file.py similarity index 100% rename from tests/functional/test_download_file.py rename to client/tests/functional/test_download_file.py diff --git a/tests/functional/test_export_file_dialog.py b/client/tests/functional/test_export_file_dialog.py similarity index 100% rename from tests/functional/test_export_file_dialog.py rename to client/tests/functional/test_export_file_dialog.py diff --git a/tests/functional/test_login.py b/client/tests/functional/test_login.py similarity index 100% rename from tests/functional/test_login.py rename to client/tests/functional/test_login.py diff --git a/tests/functional/test_logout.py b/client/tests/functional/test_logout.py similarity index 100% rename from tests/functional/test_logout.py rename to client/tests/functional/test_logout.py diff --git a/tests/functional/test_offline_delete_source.py b/client/tests/functional/test_offline_delete_source.py similarity index 100% rename from tests/functional/test_offline_delete_source.py rename to client/tests/functional/test_offline_delete_source.py diff --git a/tests/functional/test_offline_login.py b/client/tests/functional/test_offline_login.py similarity index 100% rename from tests/functional/test_offline_login.py rename to client/tests/functional/test_offline_login.py diff --git a/tests/functional/test_offline_read_conversation.py b/client/tests/functional/test_offline_read_conversation.py similarity index 100% rename from tests/functional/test_offline_read_conversation.py rename to client/tests/functional/test_offline_read_conversation.py diff --git a/tests/functional/test_offline_send_reply.py b/client/tests/functional/test_offline_send_reply.py similarity index 100% rename from tests/functional/test_offline_send_reply.py rename to client/tests/functional/test_offline_send_reply.py diff --git a/tests/functional/test_offline_star_source.py b/client/tests/functional/test_offline_star_source.py similarity index 100% rename from tests/functional/test_offline_star_source.py rename to client/tests/functional/test_offline_star_source.py diff --git a/tests/functional/test_receive_message.py b/client/tests/functional/test_receive_message.py similarity index 100% rename from tests/functional/test_receive_message.py rename to client/tests/functional/test_receive_message.py diff --git a/tests/functional/test_seen.py b/client/tests/functional/test_seen.py similarity index 100% rename from tests/functional/test_seen.py rename to client/tests/functional/test_seen.py diff --git a/tests/functional/test_send_reply.py b/client/tests/functional/test_send_reply.py similarity index 100% rename from tests/functional/test_send_reply.py rename to client/tests/functional/test_send_reply.py diff --git a/tests/functional/test_star_source.py b/client/tests/functional/test_star_source.py similarity index 100% rename from tests/functional/test_star_source.py rename to client/tests/functional/test_star_source.py diff --git a/tests/functional/test_user_profile_menu.py b/client/tests/functional/test_user_profile_menu.py similarity index 100% rename from tests/functional/test_user_profile_menu.py rename to client/tests/functional/test_user_profile_menu.py diff --git a/tests/gui/__init__.py b/client/tests/gui/__init__.py similarity index 100% rename from tests/gui/__init__.py rename to client/tests/gui/__init__.py diff --git a/tests/gui/auth/sign_in/test_error_bar.py b/client/tests/gui/auth/sign_in/test_error_bar.py similarity index 100% rename from tests/gui/auth/sign_in/test_error_bar.py rename to client/tests/gui/auth/sign_in/test_error_bar.py diff --git a/tests/gui/auth/test_dialog.py b/client/tests/gui/auth/test_dialog.py similarity index 100% rename from tests/gui/auth/test_dialog.py rename to client/tests/gui/auth/test_dialog.py diff --git a/tests/gui/base/test_dialogs.py b/client/tests/gui/base/test_dialogs.py similarity index 100% rename from tests/gui/base/test_dialogs.py rename to client/tests/gui/base/test_dialogs.py diff --git a/tests/gui/base/test_inputs.py b/client/tests/gui/base/test_inputs.py similarity index 100% rename from tests/gui/base/test_inputs.py rename to client/tests/gui/base/test_inputs.py diff --git a/tests/gui/base/test_misc.py b/client/tests/gui/base/test_misc.py similarity index 100% rename from tests/gui/base/test_misc.py rename to client/tests/gui/base/test_misc.py diff --git a/tests/gui/base/test_sdcheckbox.py b/client/tests/gui/base/test_sdcheckbox.py similarity index 100% rename from tests/gui/base/test_sdcheckbox.py rename to client/tests/gui/base/test_sdcheckbox.py diff --git a/tests/gui/conversation/delete/__init__.py b/client/tests/gui/conversation/delete/__init__.py similarity index 100% rename from tests/gui/conversation/delete/__init__.py rename to client/tests/gui/conversation/delete/__init__.py diff --git a/tests/gui/conversation/delete/test_dialog.py b/client/tests/gui/conversation/delete/test_dialog.py similarity index 100% rename from tests/gui/conversation/delete/test_dialog.py rename to client/tests/gui/conversation/delete/test_dialog.py diff --git a/tests/gui/conversation/export/__init__.py b/client/tests/gui/conversation/export/__init__.py similarity index 100% rename from tests/gui/conversation/export/__init__.py rename to client/tests/gui/conversation/export/__init__.py diff --git a/tests/gui/conversation/export/test_device.py b/client/tests/gui/conversation/export/test_device.py similarity index 100% rename from tests/gui/conversation/export/test_device.py rename to client/tests/gui/conversation/export/test_device.py diff --git a/tests/gui/conversation/export/test_dialog.py b/client/tests/gui/conversation/export/test_dialog.py similarity index 100% rename from tests/gui/conversation/export/test_dialog.py rename to client/tests/gui/conversation/export/test_dialog.py diff --git a/tests/gui/conversation/export/test_file_dialog.py b/client/tests/gui/conversation/export/test_file_dialog.py similarity index 100% rename from tests/gui/conversation/export/test_file_dialog.py rename to client/tests/gui/conversation/export/test_file_dialog.py diff --git a/tests/gui/conversation/export/test_print_dialog.py b/client/tests/gui/conversation/export/test_print_dialog.py similarity index 100% rename from tests/gui/conversation/export/test_print_dialog.py rename to client/tests/gui/conversation/export/test_print_dialog.py diff --git a/tests/gui/conversation/export/test_print_transcript_dialog.py b/client/tests/gui/conversation/export/test_print_transcript_dialog.py similarity index 100% rename from tests/gui/conversation/export/test_print_transcript_dialog.py rename to client/tests/gui/conversation/export/test_print_transcript_dialog.py diff --git a/tests/gui/conversation/export/test_transcript_dialog.py b/client/tests/gui/conversation/export/test_transcript_dialog.py similarity index 100% rename from tests/gui/conversation/export/test_transcript_dialog.py rename to client/tests/gui/conversation/export/test_transcript_dialog.py diff --git a/tests/gui/source/__init__.py b/client/tests/gui/source/__init__.py similarity index 100% rename from tests/gui/source/__init__.py rename to client/tests/gui/source/__init__.py diff --git a/tests/gui/source/delete/__init__.py b/client/tests/gui/source/delete/__init__.py similarity index 100% rename from tests/gui/source/delete/__init__.py rename to client/tests/gui/source/delete/__init__.py diff --git a/tests/gui/source/delete/test_dialog.py b/client/tests/gui/source/delete/test_dialog.py similarity index 100% rename from tests/gui/source/delete/test_dialog.py rename to client/tests/gui/source/delete/test_dialog.py diff --git a/tests/gui/test_actions.py b/client/tests/gui/test_actions.py similarity index 100% rename from tests/gui/test_actions.py rename to client/tests/gui/test_actions.py diff --git a/tests/gui/test_datetime_helpers.py b/client/tests/gui/test_datetime_helpers.py similarity index 100% rename from tests/gui/test_datetime_helpers.py rename to client/tests/gui/test_datetime_helpers.py diff --git a/tests/gui/test_main.py b/client/tests/gui/test_main.py similarity index 100% rename from tests/gui/test_main.py rename to client/tests/gui/test_main.py diff --git a/tests/gui/test_widgets.py b/client/tests/gui/test_widgets.py similarity index 100% rename from tests/gui/test_widgets.py rename to client/tests/gui/test_widgets.py diff --git a/tests/helper.py b/client/tests/helper.py similarity index 100% rename from tests/helper.py rename to client/tests/helper.py diff --git a/tests/integration/conftest.py b/client/tests/integration/conftest.py similarity index 100% rename from tests/integration/conftest.py rename to client/tests/integration/conftest.py diff --git a/tests/integration/test_placeholder.py b/client/tests/integration/test_placeholder.py similarity index 100% rename from tests/integration/test_placeholder.py rename to client/tests/integration/test_placeholder.py diff --git a/tests/integration/test_styles_file_download_button.py b/client/tests/integration/test_styles_file_download_button.py similarity index 100% rename from tests/integration/test_styles_file_download_button.py rename to client/tests/integration/test_styles_file_download_button.py diff --git a/tests/integration/test_styles_modal_dialog_button.py b/client/tests/integration/test_styles_modal_dialog_button.py similarity index 100% rename from tests/integration/test_styles_modal_dialog_button.py rename to client/tests/integration/test_styles_modal_dialog_button.py diff --git a/tests/integration/test_styles_modal_dialog_error_details.py b/client/tests/integration/test_styles_modal_dialog_error_details.py similarity index 100% rename from tests/integration/test_styles_modal_dialog_error_details.py rename to client/tests/integration/test_styles_modal_dialog_error_details.py diff --git a/tests/integration/test_styles_reply_status_bar.py b/client/tests/integration/test_styles_reply_status_bar.py similarity index 100% rename from tests/integration/test_styles_reply_status_bar.py rename to client/tests/integration/test_styles_reply_status_bar.py diff --git a/tests/integration/test_styles_sdclient.py b/client/tests/integration/test_styles_sdclient.py similarity index 100% rename from tests/integration/test_styles_sdclient.py rename to client/tests/integration/test_styles_sdclient.py diff --git a/tests/integration/test_styles_speech_bubble_message.py b/client/tests/integration/test_styles_speech_bubble_message.py similarity index 100% rename from tests/integration/test_styles_speech_bubble_message.py rename to client/tests/integration/test_styles_speech_bubble_message.py diff --git a/tests/integration/test_styles_speech_bubble_status_bar.py b/client/tests/integration/test_styles_speech_bubble_status_bar.py similarity index 100% rename from tests/integration/test_styles_speech_bubble_status_bar.py rename to client/tests/integration/test_styles_speech_bubble_status_bar.py diff --git a/tests/migrations/__init__.py b/client/tests/migrations/__init__.py similarity index 100% rename from tests/migrations/__init__.py rename to client/tests/migrations/__init__.py diff --git a/tests/migrations/test_d7c8af95bc8e.py b/client/tests/migrations/test_d7c8af95bc8e.py similarity index 100% rename from tests/migrations/test_d7c8af95bc8e.py rename to client/tests/migrations/test_d7c8af95bc8e.py diff --git a/tests/state/__init__.py b/client/tests/state/__init__.py similarity index 100% rename from tests/state/__init__.py rename to client/tests/state/__init__.py diff --git a/tests/state/test_domain.py b/client/tests/state/test_domain.py similarity index 100% rename from tests/state/test_domain.py rename to client/tests/state/test_domain.py diff --git a/tests/state/test_state.py b/client/tests/state/test_state.py similarity index 100% rename from tests/state/test_state.py rename to client/tests/state/test_state.py diff --git a/tests/test_alembic.py b/client/tests/test_alembic.py similarity index 100% rename from tests/test_alembic.py rename to client/tests/test_alembic.py diff --git a/tests/test_app.py b/client/tests/test_app.py similarity index 100% rename from tests/test_app.py rename to client/tests/test_app.py diff --git a/tests/test_config.py b/client/tests/test_config.py similarity index 100% rename from tests/test_config.py rename to client/tests/test_config.py diff --git a/tests/test_conversation.py b/client/tests/test_conversation.py similarity index 100% rename from tests/test_conversation.py rename to client/tests/test_conversation.py diff --git a/tests/test_crypto.py b/client/tests/test_crypto.py similarity index 100% rename from tests/test_crypto.py rename to client/tests/test_crypto.py diff --git a/tests/test_export.py b/client/tests/test_export.py similarity index 100% rename from tests/test_export.py rename to client/tests/test_export.py diff --git a/tests/test_logic.py b/client/tests/test_logic.py similarity index 100% rename from tests/test_logic.py rename to client/tests/test_logic.py diff --git a/tests/test_models.py b/client/tests/test_models.py similarity index 100% rename from tests/test_models.py rename to client/tests/test_models.py diff --git a/tests/test_queue.py b/client/tests/test_queue.py similarity index 100% rename from tests/test_queue.py rename to client/tests/test_queue.py diff --git a/tests/test_resources.py b/client/tests/test_resources.py similarity index 100% rename from tests/test_resources.py rename to client/tests/test_resources.py diff --git a/tests/test_storage.py b/client/tests/test_storage.py similarity index 100% rename from tests/test_storage.py rename to client/tests/test_storage.py diff --git a/tests/test_sync.py b/client/tests/test_sync.py similarity index 100% rename from tests/test_sync.py rename to client/tests/test_sync.py diff --git a/tests/test_utils.py b/client/tests/test_utils.py similarity index 100% rename from tests/test_utils.py rename to client/tests/test_utils.py diff --git a/update_version.sh b/client/update_version.sh similarity index 100% rename from update_version.sh rename to client/update_version.sh From c519b082d81833fddf8c79a1eb5d9fcd6ddb8a12 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 16:46:09 -0500 Subject: [PATCH 611/751] Move export files into export/ folder --- {.circleci => export/.circleci}/config.yml | 0 .flake8 => export/.flake8 | 0 .gitignore => export/.gitignore | 0 {.semgrep => export/.semgrep}/custom-rules.yaml | 0 LICENSE => export/LICENSE | 0 MANIFEST.in => export/MANIFEST.in | 0 Makefile => export/Makefile | 0 README.md => export/README.md | 0 SECURITY.md => export/SECURITY.md | 0 .../build-requirements.txt | 0 changelog.md => export/changelog.md | 0 {files => export/files}/application-x-sd-export.xml | 0 {files => export/files}/sd-logo.png | Bin {files => export/files}/send-to-usb.desktop | 0 poetry.lock => export/poetry.lock | 0 pyproject.toml => export/pyproject.toml | 0 .../securedrop_export}/VERSION | 0 .../securedrop_export}/__init__.py | 0 .../securedrop_export}/archive.py | 0 .../securedrop_export}/command.py | 0 .../securedrop_export}/directory.py | 0 .../securedrop_export}/disk/__init__.py | 0 .../securedrop_export}/disk/cli.py | 0 .../securedrop_export}/disk/legacy_service.py | 0 .../securedrop_export}/disk/legacy_status.py | 0 .../securedrop_export}/disk/service.py | 0 .../securedrop_export}/disk/status.py | 0 .../securedrop_export}/disk/volume.py | 0 .../securedrop_export}/exceptions.py | 0 .../securedrop_export}/main.py | 0 .../securedrop_export}/print/__init__.py | 0 .../securedrop_export}/print/service.py | 0 .../securedrop_export}/print/status.py | 0 .../securedrop_export}/status.py | 0 setup.py => export/setup.py | 0 {tests => export/tests}/__init__.py | 0 {tests => export/tests}/disk/__init__.py | 0 {tests => export/tests}/disk/test_cli.py | 0 {tests => export/tests}/disk/test_service.py | 0 {tests => export/tests}/disk/test_volume.py | 0 {tests => export/tests}/print/__init__.py | 0 {tests => export/tests}/print/test_service.py | 0 {tests => export/tests}/test_archive.py | 0 {tests => export/tests}/test_directory.py | 0 {tests => export/tests}/test_exceptions.py | 0 {tests => export/tests}/test_main.py | 0 update_version.sh => export/update_version.sh | 0 47 files changed, 0 insertions(+), 0 deletions(-) rename {.circleci => export/.circleci}/config.yml (100%) rename .flake8 => export/.flake8 (100%) rename .gitignore => export/.gitignore (100%) rename {.semgrep => export/.semgrep}/custom-rules.yaml (100%) rename LICENSE => export/LICENSE (100%) rename MANIFEST.in => export/MANIFEST.in (100%) rename Makefile => export/Makefile (100%) rename README.md => export/README.md (100%) rename SECURITY.md => export/SECURITY.md (100%) rename build-requirements.txt => export/build-requirements.txt (100%) rename changelog.md => export/changelog.md (100%) rename {files => export/files}/application-x-sd-export.xml (100%) rename {files => export/files}/sd-logo.png (100%) rename {files => export/files}/send-to-usb.desktop (100%) rename poetry.lock => export/poetry.lock (100%) rename pyproject.toml => export/pyproject.toml (100%) rename {securedrop_export => export/securedrop_export}/VERSION (100%) rename {securedrop_export => export/securedrop_export}/__init__.py (100%) rename {securedrop_export => export/securedrop_export}/archive.py (100%) rename {securedrop_export => export/securedrop_export}/command.py (100%) rename {securedrop_export => export/securedrop_export}/directory.py (100%) rename {securedrop_export => export/securedrop_export}/disk/__init__.py (100%) rename {securedrop_export => export/securedrop_export}/disk/cli.py (100%) rename {securedrop_export => export/securedrop_export}/disk/legacy_service.py (100%) rename {securedrop_export => export/securedrop_export}/disk/legacy_status.py (100%) rename {securedrop_export => export/securedrop_export}/disk/service.py (100%) rename {securedrop_export => export/securedrop_export}/disk/status.py (100%) rename {securedrop_export => export/securedrop_export}/disk/volume.py (100%) rename {securedrop_export => export/securedrop_export}/exceptions.py (100%) rename {securedrop_export => export/securedrop_export}/main.py (100%) rename {securedrop_export => export/securedrop_export}/print/__init__.py (100%) rename {securedrop_export => export/securedrop_export}/print/service.py (100%) rename {securedrop_export => export/securedrop_export}/print/status.py (100%) rename {securedrop_export => export/securedrop_export}/status.py (100%) rename setup.py => export/setup.py (100%) rename {tests => export/tests}/__init__.py (100%) rename {tests => export/tests}/disk/__init__.py (100%) rename {tests => export/tests}/disk/test_cli.py (100%) rename {tests => export/tests}/disk/test_service.py (100%) rename {tests => export/tests}/disk/test_volume.py (100%) rename {tests => export/tests}/print/__init__.py (100%) rename {tests => export/tests}/print/test_service.py (100%) rename {tests => export/tests}/test_archive.py (100%) rename {tests => export/tests}/test_directory.py (100%) rename {tests => export/tests}/test_exceptions.py (100%) rename {tests => export/tests}/test_main.py (100%) rename update_version.sh => export/update_version.sh (100%) diff --git a/.circleci/config.yml b/export/.circleci/config.yml similarity index 100% rename from .circleci/config.yml rename to export/.circleci/config.yml diff --git a/.flake8 b/export/.flake8 similarity index 100% rename from .flake8 rename to export/.flake8 diff --git a/.gitignore b/export/.gitignore similarity index 100% rename from .gitignore rename to export/.gitignore diff --git a/.semgrep/custom-rules.yaml b/export/.semgrep/custom-rules.yaml similarity index 100% rename from .semgrep/custom-rules.yaml rename to export/.semgrep/custom-rules.yaml diff --git a/LICENSE b/export/LICENSE similarity index 100% rename from LICENSE rename to export/LICENSE diff --git a/MANIFEST.in b/export/MANIFEST.in similarity index 100% rename from MANIFEST.in rename to export/MANIFEST.in diff --git a/Makefile b/export/Makefile similarity index 100% rename from Makefile rename to export/Makefile diff --git a/README.md b/export/README.md similarity index 100% rename from README.md rename to export/README.md diff --git a/SECURITY.md b/export/SECURITY.md similarity index 100% rename from SECURITY.md rename to export/SECURITY.md diff --git a/build-requirements.txt b/export/build-requirements.txt similarity index 100% rename from build-requirements.txt rename to export/build-requirements.txt diff --git a/changelog.md b/export/changelog.md similarity index 100% rename from changelog.md rename to export/changelog.md diff --git a/files/application-x-sd-export.xml b/export/files/application-x-sd-export.xml similarity index 100% rename from files/application-x-sd-export.xml rename to export/files/application-x-sd-export.xml diff --git a/files/sd-logo.png b/export/files/sd-logo.png similarity index 100% rename from files/sd-logo.png rename to export/files/sd-logo.png diff --git a/files/send-to-usb.desktop b/export/files/send-to-usb.desktop similarity index 100% rename from files/send-to-usb.desktop rename to export/files/send-to-usb.desktop diff --git a/poetry.lock b/export/poetry.lock similarity index 100% rename from poetry.lock rename to export/poetry.lock diff --git a/pyproject.toml b/export/pyproject.toml similarity index 100% rename from pyproject.toml rename to export/pyproject.toml diff --git a/securedrop_export/VERSION b/export/securedrop_export/VERSION similarity index 100% rename from securedrop_export/VERSION rename to export/securedrop_export/VERSION diff --git a/securedrop_export/__init__.py b/export/securedrop_export/__init__.py similarity index 100% rename from securedrop_export/__init__.py rename to export/securedrop_export/__init__.py diff --git a/securedrop_export/archive.py b/export/securedrop_export/archive.py similarity index 100% rename from securedrop_export/archive.py rename to export/securedrop_export/archive.py diff --git a/securedrop_export/command.py b/export/securedrop_export/command.py similarity index 100% rename from securedrop_export/command.py rename to export/securedrop_export/command.py diff --git a/securedrop_export/directory.py b/export/securedrop_export/directory.py similarity index 100% rename from securedrop_export/directory.py rename to export/securedrop_export/directory.py diff --git a/securedrop_export/disk/__init__.py b/export/securedrop_export/disk/__init__.py similarity index 100% rename from securedrop_export/disk/__init__.py rename to export/securedrop_export/disk/__init__.py diff --git a/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py similarity index 100% rename from securedrop_export/disk/cli.py rename to export/securedrop_export/disk/cli.py diff --git a/securedrop_export/disk/legacy_service.py b/export/securedrop_export/disk/legacy_service.py similarity index 100% rename from securedrop_export/disk/legacy_service.py rename to export/securedrop_export/disk/legacy_service.py diff --git a/securedrop_export/disk/legacy_status.py b/export/securedrop_export/disk/legacy_status.py similarity index 100% rename from securedrop_export/disk/legacy_status.py rename to export/securedrop_export/disk/legacy_status.py diff --git a/securedrop_export/disk/service.py b/export/securedrop_export/disk/service.py similarity index 100% rename from securedrop_export/disk/service.py rename to export/securedrop_export/disk/service.py diff --git a/securedrop_export/disk/status.py b/export/securedrop_export/disk/status.py similarity index 100% rename from securedrop_export/disk/status.py rename to export/securedrop_export/disk/status.py diff --git a/securedrop_export/disk/volume.py b/export/securedrop_export/disk/volume.py similarity index 100% rename from securedrop_export/disk/volume.py rename to export/securedrop_export/disk/volume.py diff --git a/securedrop_export/exceptions.py b/export/securedrop_export/exceptions.py similarity index 100% rename from securedrop_export/exceptions.py rename to export/securedrop_export/exceptions.py diff --git a/securedrop_export/main.py b/export/securedrop_export/main.py similarity index 100% rename from securedrop_export/main.py rename to export/securedrop_export/main.py diff --git a/securedrop_export/print/__init__.py b/export/securedrop_export/print/__init__.py similarity index 100% rename from securedrop_export/print/__init__.py rename to export/securedrop_export/print/__init__.py diff --git a/securedrop_export/print/service.py b/export/securedrop_export/print/service.py similarity index 100% rename from securedrop_export/print/service.py rename to export/securedrop_export/print/service.py diff --git a/securedrop_export/print/status.py b/export/securedrop_export/print/status.py similarity index 100% rename from securedrop_export/print/status.py rename to export/securedrop_export/print/status.py diff --git a/securedrop_export/status.py b/export/securedrop_export/status.py similarity index 100% rename from securedrop_export/status.py rename to export/securedrop_export/status.py diff --git a/setup.py b/export/setup.py similarity index 100% rename from setup.py rename to export/setup.py diff --git a/tests/__init__.py b/export/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to export/tests/__init__.py diff --git a/tests/disk/__init__.py b/export/tests/disk/__init__.py similarity index 100% rename from tests/disk/__init__.py rename to export/tests/disk/__init__.py diff --git a/tests/disk/test_cli.py b/export/tests/disk/test_cli.py similarity index 100% rename from tests/disk/test_cli.py rename to export/tests/disk/test_cli.py diff --git a/tests/disk/test_service.py b/export/tests/disk/test_service.py similarity index 100% rename from tests/disk/test_service.py rename to export/tests/disk/test_service.py diff --git a/tests/disk/test_volume.py b/export/tests/disk/test_volume.py similarity index 100% rename from tests/disk/test_volume.py rename to export/tests/disk/test_volume.py diff --git a/tests/print/__init__.py b/export/tests/print/__init__.py similarity index 100% rename from tests/print/__init__.py rename to export/tests/print/__init__.py diff --git a/tests/print/test_service.py b/export/tests/print/test_service.py similarity index 100% rename from tests/print/test_service.py rename to export/tests/print/test_service.py diff --git a/tests/test_archive.py b/export/tests/test_archive.py similarity index 100% rename from tests/test_archive.py rename to export/tests/test_archive.py diff --git a/tests/test_directory.py b/export/tests/test_directory.py similarity index 100% rename from tests/test_directory.py rename to export/tests/test_directory.py diff --git a/tests/test_exceptions.py b/export/tests/test_exceptions.py similarity index 100% rename from tests/test_exceptions.py rename to export/tests/test_exceptions.py diff --git a/tests/test_main.py b/export/tests/test_main.py similarity index 100% rename from tests/test_main.py rename to export/tests/test_main.py diff --git a/update_version.sh b/export/update_version.sh similarity index 100% rename from update_version.sh rename to export/update_version.sh From 5a01a429204e56786a37f1cd5b140c10ea63df8a Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 16:50:10 -0500 Subject: [PATCH 612/751] Move log files into log/ folder --- {.circleci => log/.circleci}/config.yml | 0 .flake8 => log/.flake8 | 0 .gitignore => log/.gitignore | 0 LICENSE => log/LICENSE | 0 MANIFEST.in => log/MANIFEST.in | 0 Makefile => log/Makefile | 0 README.md => log/README.md | 0 VERSION => log/VERSION | 0 build-requirements.txt => log/build-requirements.txt | 0 changelog.md => log/changelog.md | 0 ex1.py => log/ex1.py | 0 ex2.py => log/ex2.py | 0 example.py => log/example.py | 0 journal-example.py => log/journal-example.py | 0 poetry.lock => log/poetry.lock | 0 project.json => log/project.json | 0 pyproject.toml => log/pyproject.toml | 0 sd-rsyslog => log/sd-rsyslog | 0 sd-rsyslog-example.conf => log/sd-rsyslog-example.conf | 0 sdlog.conf => log/sdlog.conf | 0 securedrop-log => log/securedrop-log | 0 securedrop-log-saver => log/securedrop-log-saver | 0 securedrop-log.service => log/securedrop-log.service | 0 securedrop-redis-log => log/securedrop-redis-log | 0 securedrop.Log => log/securedrop.Log | 0 {securedrop_log => log/securedrop_log}/__init__.py | 0 setup.py => log/setup.py | 0 {tests => log/tests}/__init__.py | 0 {tests => log/tests}/test_logger.py | 0 update_version.sh => log/update_version.sh | 0 30 files changed, 0 insertions(+), 0 deletions(-) rename {.circleci => log/.circleci}/config.yml (100%) rename .flake8 => log/.flake8 (100%) rename .gitignore => log/.gitignore (100%) rename LICENSE => log/LICENSE (100%) rename MANIFEST.in => log/MANIFEST.in (100%) rename Makefile => log/Makefile (100%) rename README.md => log/README.md (100%) rename VERSION => log/VERSION (100%) rename build-requirements.txt => log/build-requirements.txt (100%) rename changelog.md => log/changelog.md (100%) rename ex1.py => log/ex1.py (100%) rename ex2.py => log/ex2.py (100%) rename example.py => log/example.py (100%) rename journal-example.py => log/journal-example.py (100%) rename poetry.lock => log/poetry.lock (100%) rename project.json => log/project.json (100%) rename pyproject.toml => log/pyproject.toml (100%) rename sd-rsyslog => log/sd-rsyslog (100%) rename sd-rsyslog-example.conf => log/sd-rsyslog-example.conf (100%) rename sdlog.conf => log/sdlog.conf (100%) rename securedrop-log => log/securedrop-log (100%) rename securedrop-log-saver => log/securedrop-log-saver (100%) rename securedrop-log.service => log/securedrop-log.service (100%) rename securedrop-redis-log => log/securedrop-redis-log (100%) rename securedrop.Log => log/securedrop.Log (100%) rename {securedrop_log => log/securedrop_log}/__init__.py (100%) rename setup.py => log/setup.py (100%) rename {tests => log/tests}/__init__.py (100%) rename {tests => log/tests}/test_logger.py (100%) rename update_version.sh => log/update_version.sh (100%) diff --git a/.circleci/config.yml b/log/.circleci/config.yml similarity index 100% rename from .circleci/config.yml rename to log/.circleci/config.yml diff --git a/.flake8 b/log/.flake8 similarity index 100% rename from .flake8 rename to log/.flake8 diff --git a/.gitignore b/log/.gitignore similarity index 100% rename from .gitignore rename to log/.gitignore diff --git a/LICENSE b/log/LICENSE similarity index 100% rename from LICENSE rename to log/LICENSE diff --git a/MANIFEST.in b/log/MANIFEST.in similarity index 100% rename from MANIFEST.in rename to log/MANIFEST.in diff --git a/Makefile b/log/Makefile similarity index 100% rename from Makefile rename to log/Makefile diff --git a/README.md b/log/README.md similarity index 100% rename from README.md rename to log/README.md diff --git a/VERSION b/log/VERSION similarity index 100% rename from VERSION rename to log/VERSION diff --git a/build-requirements.txt b/log/build-requirements.txt similarity index 100% rename from build-requirements.txt rename to log/build-requirements.txt diff --git a/changelog.md b/log/changelog.md similarity index 100% rename from changelog.md rename to log/changelog.md diff --git a/ex1.py b/log/ex1.py similarity index 100% rename from ex1.py rename to log/ex1.py diff --git a/ex2.py b/log/ex2.py similarity index 100% rename from ex2.py rename to log/ex2.py diff --git a/example.py b/log/example.py similarity index 100% rename from example.py rename to log/example.py diff --git a/journal-example.py b/log/journal-example.py similarity index 100% rename from journal-example.py rename to log/journal-example.py diff --git a/poetry.lock b/log/poetry.lock similarity index 100% rename from poetry.lock rename to log/poetry.lock diff --git a/project.json b/log/project.json similarity index 100% rename from project.json rename to log/project.json diff --git a/pyproject.toml b/log/pyproject.toml similarity index 100% rename from pyproject.toml rename to log/pyproject.toml diff --git a/sd-rsyslog b/log/sd-rsyslog similarity index 100% rename from sd-rsyslog rename to log/sd-rsyslog diff --git a/sd-rsyslog-example.conf b/log/sd-rsyslog-example.conf similarity index 100% rename from sd-rsyslog-example.conf rename to log/sd-rsyslog-example.conf diff --git a/sdlog.conf b/log/sdlog.conf similarity index 100% rename from sdlog.conf rename to log/sdlog.conf diff --git a/securedrop-log b/log/securedrop-log similarity index 100% rename from securedrop-log rename to log/securedrop-log diff --git a/securedrop-log-saver b/log/securedrop-log-saver similarity index 100% rename from securedrop-log-saver rename to log/securedrop-log-saver diff --git a/securedrop-log.service b/log/securedrop-log.service similarity index 100% rename from securedrop-log.service rename to log/securedrop-log.service diff --git a/securedrop-redis-log b/log/securedrop-redis-log similarity index 100% rename from securedrop-redis-log rename to log/securedrop-redis-log diff --git a/securedrop.Log b/log/securedrop.Log similarity index 100% rename from securedrop.Log rename to log/securedrop.Log diff --git a/securedrop_log/__init__.py b/log/securedrop_log/__init__.py similarity index 100% rename from securedrop_log/__init__.py rename to log/securedrop_log/__init__.py diff --git a/setup.py b/log/setup.py similarity index 100% rename from setup.py rename to log/setup.py diff --git a/tests/__init__.py b/log/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to log/tests/__init__.py diff --git a/tests/test_logger.py b/log/tests/test_logger.py similarity index 100% rename from tests/test_logger.py rename to log/tests/test_logger.py diff --git a/update_version.sh b/log/update_version.sh similarity index 100% rename from update_version.sh rename to log/update_version.sh From 1666d1e67a68ff9cb67ae12cb6e586d58de26d80 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 17:03:35 -0500 Subject: [PATCH 613/751] Move proxy files into proxy/ folder --- {.circleci => proxy/.circleci}/config.yml | 0 .git-blame-ignore-revs => proxy/.git-blame-ignore-revs | 0 .gitignore => proxy/.gitignore | 0 LICENSE => proxy/LICENSE | 0 MANIFEST.in => proxy/MANIFEST.in | 0 Makefile => proxy/Makefile | 0 README.md => proxy/README.md | 0 build-requirements.txt => proxy/build-requirements.txt | 0 changelog.md => proxy/changelog.md | 0 config-example.yaml => proxy/config-example.yaml | 0 entrypoint.sh => proxy/entrypoint.sh | 0 {examples => proxy/examples}/bad.json | 0 {examples => proxy/examples}/html.json | 0 {examples => proxy/examples}/posts.json | 0 {fixtures => proxy/fixtures}/basic_proxy_functionality.yaml | 0 {fixtures => proxy/fixtures}/main_error_response.yaml | 0 {fixtures => proxy/fixtures}/main_input_body.yaml | 0 {fixtures => proxy/fixtures}/main_input_headers.yaml | 0 {fixtures => proxy/fixtures}/main_json_response.yaml | 0 {fixtures => proxy/fixtures}/main_json_response_with_timeout.yaml | 0 {fixtures => proxy/fixtures}/main_non_json_response.yaml | 0 {fixtures => proxy/fixtures}/proxy_200_valid_path.yaml | 0 {fixtures => proxy/fixtures}/proxy_404.yaml | 0 {fixtures => proxy/fixtures}/proxy_bad_request.yaml | 0 {fixtures => proxy/fixtures}/proxy_callbacks.yaml | 0 {fixtures => proxy/fixtures}/proxy_cannot_connect.yaml | 0 {fixtures => proxy/fixtures}/proxy_internal_error.yaml | 0 {fixtures => proxy/fixtures}/proxy_internal_server_error.yaml | 0 {fixtures => proxy/fixtures}/proxy_parameters.yaml | 0 {fixtures => proxy/fixtures}/proxy_unofficial_status.yaml | 0 poetry.lock => proxy/poetry.lock | 0 pyproject.toml => proxy/pyproject.toml | 0 {qubes => proxy/qubes}/securedrop.Proxy | 0 {securedrop_proxy => proxy/securedrop_proxy}/VERSION | 0 {securedrop_proxy => proxy/securedrop_proxy}/__init__.py | 0 {securedrop_proxy => proxy/securedrop_proxy}/entrypoint.py | 0 {securedrop_proxy => proxy/securedrop_proxy}/json.py | 0 {securedrop_proxy => proxy/securedrop_proxy}/main.py | 0 {securedrop_proxy => proxy/securedrop_proxy}/proxy.py | 0 {securedrop_proxy => proxy/securedrop_proxy}/version.py | 0 setup.cfg => proxy/setup.cfg | 0 setup.py => proxy/setup.py | 0 {tests => proxy/tests}/__init__.py | 0 {tests => proxy/tests}/files/badgateway-config.yaml | 0 {tests => proxy/tests}/files/dev-config.yaml | 0 {tests => proxy/tests}/files/invalid-config.yaml | 0 {tests => proxy/tests}/files/invalid_yaml.yaml | 0 {tests => proxy/tests}/files/local-config.yaml | 0 {tests => proxy/tests}/files/missing-key.yaml | 0 {tests => proxy/tests}/files/missing-target-vm.yaml | 0 {tests => proxy/tests}/files/valid-config.yaml | 0 {tests => proxy/tests}/test_entrypoint.py | 0 {tests => proxy/tests}/test_json.py | 0 {tests => proxy/tests}/test_main.py | 0 {tests => proxy/tests}/test_proxy.py | 0 update_version.sh => proxy/update_version.sh | 0 56 files changed, 0 insertions(+), 0 deletions(-) rename {.circleci => proxy/.circleci}/config.yml (100%) rename .git-blame-ignore-revs => proxy/.git-blame-ignore-revs (100%) rename .gitignore => proxy/.gitignore (100%) rename LICENSE => proxy/LICENSE (100%) rename MANIFEST.in => proxy/MANIFEST.in (100%) rename Makefile => proxy/Makefile (100%) rename README.md => proxy/README.md (100%) rename build-requirements.txt => proxy/build-requirements.txt (100%) rename changelog.md => proxy/changelog.md (100%) rename config-example.yaml => proxy/config-example.yaml (100%) rename entrypoint.sh => proxy/entrypoint.sh (100%) rename {examples => proxy/examples}/bad.json (100%) rename {examples => proxy/examples}/html.json (100%) rename {examples => proxy/examples}/posts.json (100%) rename {fixtures => proxy/fixtures}/basic_proxy_functionality.yaml (100%) rename {fixtures => proxy/fixtures}/main_error_response.yaml (100%) rename {fixtures => proxy/fixtures}/main_input_body.yaml (100%) rename {fixtures => proxy/fixtures}/main_input_headers.yaml (100%) rename {fixtures => proxy/fixtures}/main_json_response.yaml (100%) rename {fixtures => proxy/fixtures}/main_json_response_with_timeout.yaml (100%) rename {fixtures => proxy/fixtures}/main_non_json_response.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_200_valid_path.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_404.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_bad_request.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_callbacks.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_cannot_connect.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_internal_error.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_internal_server_error.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_parameters.yaml (100%) rename {fixtures => proxy/fixtures}/proxy_unofficial_status.yaml (100%) rename poetry.lock => proxy/poetry.lock (100%) rename pyproject.toml => proxy/pyproject.toml (100%) rename {qubes => proxy/qubes}/securedrop.Proxy (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/VERSION (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/__init__.py (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/entrypoint.py (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/json.py (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/main.py (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/proxy.py (100%) rename {securedrop_proxy => proxy/securedrop_proxy}/version.py (100%) rename setup.cfg => proxy/setup.cfg (100%) rename setup.py => proxy/setup.py (100%) rename {tests => proxy/tests}/__init__.py (100%) rename {tests => proxy/tests}/files/badgateway-config.yaml (100%) rename {tests => proxy/tests}/files/dev-config.yaml (100%) rename {tests => proxy/tests}/files/invalid-config.yaml (100%) rename {tests => proxy/tests}/files/invalid_yaml.yaml (100%) rename {tests => proxy/tests}/files/local-config.yaml (100%) rename {tests => proxy/tests}/files/missing-key.yaml (100%) rename {tests => proxy/tests}/files/missing-target-vm.yaml (100%) rename {tests => proxy/tests}/files/valid-config.yaml (100%) rename {tests => proxy/tests}/test_entrypoint.py (100%) rename {tests => proxy/tests}/test_json.py (100%) rename {tests => proxy/tests}/test_main.py (100%) rename {tests => proxy/tests}/test_proxy.py (100%) rename update_version.sh => proxy/update_version.sh (100%) diff --git a/.circleci/config.yml b/proxy/.circleci/config.yml similarity index 100% rename from .circleci/config.yml rename to proxy/.circleci/config.yml diff --git a/.git-blame-ignore-revs b/proxy/.git-blame-ignore-revs similarity index 100% rename from .git-blame-ignore-revs rename to proxy/.git-blame-ignore-revs diff --git a/.gitignore b/proxy/.gitignore similarity index 100% rename from .gitignore rename to proxy/.gitignore diff --git a/LICENSE b/proxy/LICENSE similarity index 100% rename from LICENSE rename to proxy/LICENSE diff --git a/MANIFEST.in b/proxy/MANIFEST.in similarity index 100% rename from MANIFEST.in rename to proxy/MANIFEST.in diff --git a/Makefile b/proxy/Makefile similarity index 100% rename from Makefile rename to proxy/Makefile diff --git a/README.md b/proxy/README.md similarity index 100% rename from README.md rename to proxy/README.md diff --git a/build-requirements.txt b/proxy/build-requirements.txt similarity index 100% rename from build-requirements.txt rename to proxy/build-requirements.txt diff --git a/changelog.md b/proxy/changelog.md similarity index 100% rename from changelog.md rename to proxy/changelog.md diff --git a/config-example.yaml b/proxy/config-example.yaml similarity index 100% rename from config-example.yaml rename to proxy/config-example.yaml diff --git a/entrypoint.sh b/proxy/entrypoint.sh similarity index 100% rename from entrypoint.sh rename to proxy/entrypoint.sh diff --git a/examples/bad.json b/proxy/examples/bad.json similarity index 100% rename from examples/bad.json rename to proxy/examples/bad.json diff --git a/examples/html.json b/proxy/examples/html.json similarity index 100% rename from examples/html.json rename to proxy/examples/html.json diff --git a/examples/posts.json b/proxy/examples/posts.json similarity index 100% rename from examples/posts.json rename to proxy/examples/posts.json diff --git a/fixtures/basic_proxy_functionality.yaml b/proxy/fixtures/basic_proxy_functionality.yaml similarity index 100% rename from fixtures/basic_proxy_functionality.yaml rename to proxy/fixtures/basic_proxy_functionality.yaml diff --git a/fixtures/main_error_response.yaml b/proxy/fixtures/main_error_response.yaml similarity index 100% rename from fixtures/main_error_response.yaml rename to proxy/fixtures/main_error_response.yaml diff --git a/fixtures/main_input_body.yaml b/proxy/fixtures/main_input_body.yaml similarity index 100% rename from fixtures/main_input_body.yaml rename to proxy/fixtures/main_input_body.yaml diff --git a/fixtures/main_input_headers.yaml b/proxy/fixtures/main_input_headers.yaml similarity index 100% rename from fixtures/main_input_headers.yaml rename to proxy/fixtures/main_input_headers.yaml diff --git a/fixtures/main_json_response.yaml b/proxy/fixtures/main_json_response.yaml similarity index 100% rename from fixtures/main_json_response.yaml rename to proxy/fixtures/main_json_response.yaml diff --git a/fixtures/main_json_response_with_timeout.yaml b/proxy/fixtures/main_json_response_with_timeout.yaml similarity index 100% rename from fixtures/main_json_response_with_timeout.yaml rename to proxy/fixtures/main_json_response_with_timeout.yaml diff --git a/fixtures/main_non_json_response.yaml b/proxy/fixtures/main_non_json_response.yaml similarity index 100% rename from fixtures/main_non_json_response.yaml rename to proxy/fixtures/main_non_json_response.yaml diff --git a/fixtures/proxy_200_valid_path.yaml b/proxy/fixtures/proxy_200_valid_path.yaml similarity index 100% rename from fixtures/proxy_200_valid_path.yaml rename to proxy/fixtures/proxy_200_valid_path.yaml diff --git a/fixtures/proxy_404.yaml b/proxy/fixtures/proxy_404.yaml similarity index 100% rename from fixtures/proxy_404.yaml rename to proxy/fixtures/proxy_404.yaml diff --git a/fixtures/proxy_bad_request.yaml b/proxy/fixtures/proxy_bad_request.yaml similarity index 100% rename from fixtures/proxy_bad_request.yaml rename to proxy/fixtures/proxy_bad_request.yaml diff --git a/fixtures/proxy_callbacks.yaml b/proxy/fixtures/proxy_callbacks.yaml similarity index 100% rename from fixtures/proxy_callbacks.yaml rename to proxy/fixtures/proxy_callbacks.yaml diff --git a/fixtures/proxy_cannot_connect.yaml b/proxy/fixtures/proxy_cannot_connect.yaml similarity index 100% rename from fixtures/proxy_cannot_connect.yaml rename to proxy/fixtures/proxy_cannot_connect.yaml diff --git a/fixtures/proxy_internal_error.yaml b/proxy/fixtures/proxy_internal_error.yaml similarity index 100% rename from fixtures/proxy_internal_error.yaml rename to proxy/fixtures/proxy_internal_error.yaml diff --git a/fixtures/proxy_internal_server_error.yaml b/proxy/fixtures/proxy_internal_server_error.yaml similarity index 100% rename from fixtures/proxy_internal_server_error.yaml rename to proxy/fixtures/proxy_internal_server_error.yaml diff --git a/fixtures/proxy_parameters.yaml b/proxy/fixtures/proxy_parameters.yaml similarity index 100% rename from fixtures/proxy_parameters.yaml rename to proxy/fixtures/proxy_parameters.yaml diff --git a/fixtures/proxy_unofficial_status.yaml b/proxy/fixtures/proxy_unofficial_status.yaml similarity index 100% rename from fixtures/proxy_unofficial_status.yaml rename to proxy/fixtures/proxy_unofficial_status.yaml diff --git a/poetry.lock b/proxy/poetry.lock similarity index 100% rename from poetry.lock rename to proxy/poetry.lock diff --git a/pyproject.toml b/proxy/pyproject.toml similarity index 100% rename from pyproject.toml rename to proxy/pyproject.toml diff --git a/qubes/securedrop.Proxy b/proxy/qubes/securedrop.Proxy similarity index 100% rename from qubes/securedrop.Proxy rename to proxy/qubes/securedrop.Proxy diff --git a/securedrop_proxy/VERSION b/proxy/securedrop_proxy/VERSION similarity index 100% rename from securedrop_proxy/VERSION rename to proxy/securedrop_proxy/VERSION diff --git a/securedrop_proxy/__init__.py b/proxy/securedrop_proxy/__init__.py similarity index 100% rename from securedrop_proxy/__init__.py rename to proxy/securedrop_proxy/__init__.py diff --git a/securedrop_proxy/entrypoint.py b/proxy/securedrop_proxy/entrypoint.py similarity index 100% rename from securedrop_proxy/entrypoint.py rename to proxy/securedrop_proxy/entrypoint.py diff --git a/securedrop_proxy/json.py b/proxy/securedrop_proxy/json.py similarity index 100% rename from securedrop_proxy/json.py rename to proxy/securedrop_proxy/json.py diff --git a/securedrop_proxy/main.py b/proxy/securedrop_proxy/main.py similarity index 100% rename from securedrop_proxy/main.py rename to proxy/securedrop_proxy/main.py diff --git a/securedrop_proxy/proxy.py b/proxy/securedrop_proxy/proxy.py similarity index 100% rename from securedrop_proxy/proxy.py rename to proxy/securedrop_proxy/proxy.py diff --git a/securedrop_proxy/version.py b/proxy/securedrop_proxy/version.py similarity index 100% rename from securedrop_proxy/version.py rename to proxy/securedrop_proxy/version.py diff --git a/setup.cfg b/proxy/setup.cfg similarity index 100% rename from setup.cfg rename to proxy/setup.cfg diff --git a/setup.py b/proxy/setup.py similarity index 100% rename from setup.py rename to proxy/setup.py diff --git a/tests/__init__.py b/proxy/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to proxy/tests/__init__.py diff --git a/tests/files/badgateway-config.yaml b/proxy/tests/files/badgateway-config.yaml similarity index 100% rename from tests/files/badgateway-config.yaml rename to proxy/tests/files/badgateway-config.yaml diff --git a/tests/files/dev-config.yaml b/proxy/tests/files/dev-config.yaml similarity index 100% rename from tests/files/dev-config.yaml rename to proxy/tests/files/dev-config.yaml diff --git a/tests/files/invalid-config.yaml b/proxy/tests/files/invalid-config.yaml similarity index 100% rename from tests/files/invalid-config.yaml rename to proxy/tests/files/invalid-config.yaml diff --git a/tests/files/invalid_yaml.yaml b/proxy/tests/files/invalid_yaml.yaml similarity index 100% rename from tests/files/invalid_yaml.yaml rename to proxy/tests/files/invalid_yaml.yaml diff --git a/tests/files/local-config.yaml b/proxy/tests/files/local-config.yaml similarity index 100% rename from tests/files/local-config.yaml rename to proxy/tests/files/local-config.yaml diff --git a/tests/files/missing-key.yaml b/proxy/tests/files/missing-key.yaml similarity index 100% rename from tests/files/missing-key.yaml rename to proxy/tests/files/missing-key.yaml diff --git a/tests/files/missing-target-vm.yaml b/proxy/tests/files/missing-target-vm.yaml similarity index 100% rename from tests/files/missing-target-vm.yaml rename to proxy/tests/files/missing-target-vm.yaml diff --git a/tests/files/valid-config.yaml b/proxy/tests/files/valid-config.yaml similarity index 100% rename from tests/files/valid-config.yaml rename to proxy/tests/files/valid-config.yaml diff --git a/tests/test_entrypoint.py b/proxy/tests/test_entrypoint.py similarity index 100% rename from tests/test_entrypoint.py rename to proxy/tests/test_entrypoint.py diff --git a/tests/test_json.py b/proxy/tests/test_json.py similarity index 100% rename from tests/test_json.py rename to proxy/tests/test_json.py diff --git a/tests/test_main.py b/proxy/tests/test_main.py similarity index 100% rename from tests/test_main.py rename to proxy/tests/test_main.py diff --git a/tests/test_proxy.py b/proxy/tests/test_proxy.py similarity index 100% rename from tests/test_proxy.py rename to proxy/tests/test_proxy.py diff --git a/update_version.sh b/proxy/update_version.sh similarity index 100% rename from update_version.sh rename to proxy/update_version.sh From aed4155a266dc8a1fc5bf1f6f5b27231e842adb3 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 17:29:21 -0500 Subject: [PATCH 614/751] Merge CircleCI manifests into one This is a very naive complete merge by prefixing anchors and job names with component names. De-duplication and consolidation will happen in future commits. --- .circleci/config.yml | 679 ++++++++++++++++++++++++++++++++++++ client/.circleci/config.yml | 247 ------------- export/.circleci/config.yml | 171 --------- log/.circleci/config.yml | 90 ----- proxy/.circleci/config.yml | 179 ---------- 5 files changed, 679 insertions(+), 687 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 client/.circleci/config.yml delete mode 100644 export/.circleci/config.yml delete mode 100644 log/.circleci/config.yml delete mode 100644 proxy/.circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..b9f6468d4 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,679 @@ +--- +common-steps: + - &client_install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + + - &client_install_testing_dependencies + run: + name: Install testing dependencies + command: | + set -e + apt update && apt install -y git gnupg libarchive13 libmagic1 libqt5x11extras5 make python3-tk python3-dev gnupg python3-venv sqlite3 xvfb + cd client + poetry install --no-ansi + + - &client_configure_locales + run: + name: Configure locales + command: | + set -e + apt update && apt install -y locales + echo "en_US ISO-8859-1" >> /etc/locale.gen + echo "en_US UTF-8" >> /etc/locale.gen + locale-gen + + - &client_install_build_dependencies + run: + name: Install build dependencies + command: | + set -e + apt update && apt install -y git make sudo + + - &client_run_unit_tests + run: + name: Install requirements and run unit tests + command: | + set -e + cd client + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test-random + + - &client_run_integration_tests + run: + name: Install requirements and run integration tests + command: | + set -e + cd client + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test-integration + + - &client_run_functional_tests + run: + name: Install requirements and run functional tests + command: | + set -e + cd client + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test-functional + + - &client_run_lint + run: + name: Run lint, type checking, code formatting + command: | + set -e + make -C client check-black check-isort lint mypy + + - &client_check_security + run: + name: Run static analysis on source code to find security issues + command: | + set -e + make -C client semgrep bandit + + - &client_check_source_strings + run: + name: Check that source strings are updated + command: | + set -e + make -C client check-strings + + - &client_check_mo_repro + run: + name: Check that translation machine objects are reproducible + command: | + set -e + make -C client verify-mo + + - &client_check_python_dependencies_for_vulnerabilities + run: + name: Check Python dependencies for known vulnerabilities + command: | + set -e + make -C client safety + + - &client_install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download Python wheels + command: | + set -x + mkdir ~/packaging && cd ~/packaging + # local builds may not have an ssh url, so || true + git config --global --unset url.ssh://git@github.com.insteadof || true + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder + apt-get update && apt-get install -y sudo make + make install-deps + source .venv/bin/activate + PKG_DIR=~/project/client make requirements + + - &client_check_packaging_requirements + run: + name: Ensure that the same Python requirements are used for packaging and production. + command: | + cd ~/project/client + # Fail if unstaged changes exist that are not comments (after `make requirements` in the previous run step). + git diff --ignore-matching-lines=# --exit-code + + - &client_build_debian_package + run: + name: Build debian package + command: | + cd ~/project/client + ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here + cd ~/packaging/securedrop-builder + export PKG_VERSION=1000.0 + export PKG_PATH=~/project/client + source .venv/bin/activate + make securedrop-client + + - &export_install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + + - &export_install_testing_dependencies + run: + name: Install testing dependencies + command: | + apt update && apt install -y git gnupg make python3-dev gnupg python3-venv libnotify-bin + cd export + poetry install --no-ansi + + - &export_install_build_dependencies + run: + name: Install build dependencies + command: | + apt update && apt install -y git make sudo + + - &export_run_unit_tests + run: + name: Install requirements and run unit tests + command: | + cd export + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test + + - &export_run_lint + run: + name: Run lint, type checking, code formatting + command: | + make -C export check-black lint + + - &export_check_security + run: + name: Run static analysis on source code to find security issues + command: | + make -C export semgrep + + - &export_check_python_dependencies_for_vulnerabilities + run: + name: Check Python dependencies for known vulnerabilities + command: | + make -C export safety + + - &export_install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download Python wheels + command: | + set -x + mkdir ~/packaging && cd ~/packaging + # local builds may not have an ssh url, so || true + git config --global --unset url.ssh://git@github.com.insteadof || true + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder + make install-deps + source .venv/bin/activate + PKG_DIR=~/project/export make requirements + + - &export_check_packaging_requirements + run: + name: Ensure that the same Python requirements are used for packaging and production. + command: | + cd ~/project/export + # Fail if unstaged changes exist (after `make requirements` in the previous run step). + git diff --ignore-matching-lines=# --exit-code + + - &export_build_debian_package + run: + name: Build debian package + command: | + cd ~/packaging/securedrop-builder + export PKG_VERSION=1000.0 + export PKG_PATH=~/project/export + source .venv/bin/activate + make securedrop-export + + - &log_install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + + - &log_install_testing_dependencies + run: + name: Install testing dependencies + command: | + apt-get install --yes --no-install-recommends git gnupg make + cd log + poetry install --no-ansi + + - &log_run_tests + run: + name: Install requirements and run tests + command: | + make -C log check + + - &log_install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download wheels + command: | + apt-get update && apt-get install -y git git-lfs make sudo + mkdir ~/packaging && cd ~/packaging + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder + make install-deps + source .venv/bin/activate + PKG_DIR=~/project/log make requirements + + - &log_verify_requirements + run: + name: Ensure that build-requirements.txt and requirements.txt are in sync. + command: | + cd ~/project/log + # Return 1 if unstaged changes exist (after `make requirements` in the + # previous run step), else return 0. + git diff --quiet + + - &log_build_debian_package + run: + name: Build debian package + command: | + cd ~/packaging/securedrop-builder + export PKG_VERSION=1000.0 + export PKG_PATH=~/project/log + source .venv/bin/activate + make securedrop-log + + - &proxy_install_poetry + run: + name: Install Poetry + command: | + set -e + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get update && apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get update && apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + + - &proxy_install_testing_dependencies + run: + name: Install testing dependencies + command: | + apt-get install --yes --no-install-recommends git gnupg make + cd proxy + poetry install --no-ansi + + - &proxy_install_build_dependencies + run: + name: Install build dependencies + command: | + set -e + apt-get update && apt-get install --yes git make sudo + + - &proxy_run_unit_tests + run: + name: Install requirements and run unit tests + command: | + cd proxy + export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata + make test + + - &proxy_run_lint + run: + name: Run lint, type checking, code formatting + command: | + make -C proxy lint + + - &proxy_check_security + run: + name: Run static analysis on source code to find security issues + command: | + set -e + cd proxy + poetry update bandit + make bandit + + - &proxy_check_python_dependencies_for_vulnerabilities + run: + name: Check Python dependencies for known vulnerabilities + command: | + set -e + cd proxy + poetry update safety + make safety + + - &proxy_install_packaging_dependencies + run: + name: Install Debian packaging dependencies and download Python wheels + command: | + set -x + mkdir ~/packaging && cd ~/packaging + # local builds may not have an ssh url, so || true + git config --global --unset url.ssh://git@github.com.insteadof || true + git clone https://github.com/freedomofpress/securedrop-builder.git + cd securedrop-builder + apt-get update && apt-get install -y sudo make + make install-deps + source .venv/bin/activate + PKG_DIR=~/project/proxy make requirements + + - &proxy_verify_requirements + run: + name: Ensure that build-requirements.txt and requirements.txt are in sync. + command: | + cd ~/project/proxy + # Return 1 if unstaged changes exist (after `make requirements` in the + # previous run step), else return 0. + git diff --quiet + + - &proxy_build_debian_package + run: + name: Build debian package + command: | + cd ~/packaging/securedrop-builder + export PKG_VERSION=1000.0 + export PKG_PATH=~/project/proxy + source .venv/bin/activate + make securedrop-proxy + + +version: 2.1 + +jobs: + client_build: + parameters: ¶meters + image: + type: string + docker: &docker + - image: debian:<< parameters.image >> + steps: + - *client_install_build_dependencies + - checkout + - *client_install_packaging_dependencies + - *client_check_packaging_requirements + - *client_build_debian_package + + client_unit-test: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_configure_locales + - *client_run_unit_tests + - store_test_results: + path: test-results + + client_integration-test: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_run_integration_tests + + client_functional-test: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_run_functional_tests + + client_lint: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_run_lint + + client_check-security: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_check_security + + client_check-python-security: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_check_python_dependencies_for_vulnerabilities + + + client_check-internationalization: + parameters: *parameters + docker: *docker + steps: + - *client_install_poetry + - checkout + - *client_install_testing_dependencies + - *client_check_source_strings + - *client_check_mo_repro + + export_build: + parameters: *parameters + docker: *docker + steps: + - *export_install_build_dependencies + - checkout + - *export_install_packaging_dependencies + - *export_check_packaging_requirements + - *export_build_debian_package + + export_unit-test: + parameters: *parameters + docker: *docker + steps: + - *export_install_poetry + - checkout + - *export_install_testing_dependencies + - *export_run_unit_tests + - store_test_results: + path: test-results + + export_lint: + parameters: *parameters + docker: *docker + steps: + - *export_install_poetry + - checkout + - *export_install_testing_dependencies + - *export_run_lint + + export_check-security: + parameters: *parameters + docker: *docker + steps: + - *export_install_poetry + - checkout + - *export_install_testing_dependencies + - *export_check_security + + export_check-python-security: + parameters: *parameters + docker: *docker + steps: + - *export_install_poetry + - checkout + - *export_install_testing_dependencies + - *export_check_python_dependencies_for_vulnerabilities + + log_test-bullseye: + docker: + - image: debian:bullseye + steps: + - checkout + - *log_install_poetry + - *log_install_testing_dependencies + - *log_run_tests + + log_build-bullseye: + docker: + - image: debian:bullseye + steps: + - checkout + - *log_install_packaging_dependencies + - *log_verify_requirements + - *log_build_debian_package + + proxy_build: + parameters: *parameters + docker: *docker + steps: + - checkout + - *proxy_install_build_dependencies + - *proxy_install_packaging_dependencies + - *proxy_verify_requirements + - *proxy_build_debian_package + + proxy_unit-test: + parameters: *parameters + docker: *docker + steps: + - checkout + - *proxy_install_poetry + - *proxy_install_testing_dependencies + - *proxy_run_unit_tests + - store_test_results: + path: test-results + + proxy_lint: + parameters: *parameters + docker: *docker + steps: + - checkout + - *proxy_install_poetry + - *proxy_install_testing_dependencies + - *proxy_run_lint + + proxy_check-security: + parameters: *parameters + docker: *docker + steps: + - checkout + - *proxy_install_poetry + - *proxy_install_testing_dependencies + - *proxy_check_security + + proxy_check-python-security: + parameters: *parameters + docker: *docker + steps: + - checkout + - *proxy_install_poetry + - *proxy_install_testing_dependencies + - *proxy_check_python_dependencies_for_vulnerabilities + + +workflows: + securedrop_client_ci: + jobs: &client_jobs + - client_unit-test: + matrix: &matrix + parameters: + image: + - bullseye + - bookworm + - client_integration-test: + matrix: *matrix + - client_functional-test: + matrix: *matrix + - client_lint: + matrix: *matrix + - client_check-security: + matrix: *matrix + - client_check-python-security: + matrix: *matrix + - client_check-internationalization: + matrix: *matrix + - client_build: + matrix: *matrix + + securedrop_export_ci: + jobs: &export_jobs + - export_unit-test: + matrix: *matrix + - export_lint: + matrix: *matrix + - export_check-security: + matrix: *matrix + - export_check-python-security: + matrix: *matrix + - export_build: + matrix: *matrix + + securedrop_log_ci: + jobs: + - log_test-bullseye + - log_build-bullseye + + securedrop_proxy_ci: + jobs: &proxy_jobs + - proxy_unit-test: + matrix: *matrix + - proxy_lint: + matrix: *matrix + - proxy_check-security: + matrix: *matrix + - proxy_check-python-security: + matrix: *matrix + - proxy_build: + matrix: *matrix + + client_nightly: + triggers: + - schedule: + cron: "0 6 * * *" + filters: + branches: + only: + - main + jobs: *client_jobs + + export_nightly: + triggers: + - schedule: + cron: "0 6 * * *" + filters: + branches: + only: + - main + jobs: *export_jobs + + proxy_nightly: + triggers: + - schedule: + cron: "0 6 * * *" + filters: + branches: + only: + - main + jobs: *proxy_jobs diff --git a/client/.circleci/config.yml b/client/.circleci/config.yml deleted file mode 100644 index c7ee1e2c3..000000000 --- a/client/.circleci/config.yml +++ /dev/null @@ -1,247 +0,0 @@ ---- -common-steps: - - &install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &install_testing_dependencies - run: - name: Install testing dependencies - command: | - set -e - apt update && apt install -y git gnupg libarchive13 libmagic1 libqt5x11extras5 make python3-tk python3-dev gnupg python3-venv sqlite3 xvfb - poetry install --no-ansi - - - &configure_locales - run: - name: Configure locales - command: | - set -e - apt update && apt install -y locales - echo "en_US ISO-8859-1" >> /etc/locale.gen - echo "en_US UTF-8" >> /etc/locale.gen - locale-gen - - - &install_build_dependencies - run: - name: Install build dependencies - command: | - apt update && apt install -y git make sudo - - - &run_unit_tests - run: - name: Install requirements and run unit tests - command: | - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test-random - - - &run_integration_tests - run: - name: Install requirements and run integration tests - command: | - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test-integration - - - &run_functional_tests - run: - name: Install requirements and run functional tests - command: | - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test-functional - - - &run_lint - run: - name: Run lint, type checking, code formatting - command: | - make check-black check-isort lint mypy - - - &check_security - run: - name: Run static analysis on source code to find security issues - command: | - make semgrep bandit - - - &check_source_strings - run: - name: Check that source strings are updated - command: | - make check-strings - - - &check_mo_repro - run: - name: Check that translation machine objects are reproducible - command: | - make verify-mo - - - &check_python_dependencies_for_vulnerabilities - run: - name: Check Python dependencies for known vulnerabilities - command: | - make safety - - - &install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download Python wheels - command: | - set -x - mkdir ~/packaging && cd ~/packaging - # local builds may not have an ssh url, so || true - git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - apt-get update && apt-get install -y sudo make - make install-deps - source .venv/bin/activate - PKG_DIR=~/project make requirements - - - &check_packaging_requirements - run: - name: Ensure that the same Python requirements are used for packaging and production. - command: | - cd ~/project - # Fail if unstaged changes exist that are not comments (after `make requirements` in the previous run step). - git diff --ignore-matching-lines=# --exit-code - - - &build_debian_package - run: - name: Build debian package - command: | - cd ~/project - ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/ - source .venv/bin/activate - make securedrop-client - -version: 2.1 - -jobs: - build: - parameters: ¶meters - image: - type: string - docker: &docker - - image: debian:<< parameters.image >> - steps: - - *install_build_dependencies - - checkout - - *install_packaging_dependencies - - *check_packaging_requirements - - *build_debian_package - - unit-test: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *configure_locales - - *run_unit_tests - - store_test_results: - path: test-results - - integration-test: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *run_integration_tests - - functional-test: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *run_functional_tests - - lint: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *run_lint - - check-security: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *check_security - - check-python-security: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *check_python_dependencies_for_vulnerabilities - - - check-internationalization: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *check_source_strings - - *check_mo_repro - -workflows: - securedrop_client_ci: - jobs: &jobs - - unit-test: - matrix: &matrix - parameters: - image: - - bullseye - - bookworm - - integration-test: - matrix: *matrix - - functional-test: - matrix: *matrix - - lint: - matrix: *matrix - - check-security: - matrix: *matrix - - check-python-security: - matrix: *matrix - - check-internationalization: - matrix: *matrix - - build: - matrix: *matrix - - nightly: - triggers: - - schedule: - cron: "0 6 * * *" - filters: - branches: - only: - - main - jobs: *jobs diff --git a/export/.circleci/config.yml b/export/.circleci/config.yml deleted file mode 100644 index f1549fb15..000000000 --- a/export/.circleci/config.yml +++ /dev/null @@ -1,171 +0,0 @@ ---- -common-steps: - - &install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &install_testing_dependencies - run: - name: Install testing dependencies - command: | - apt update && apt install -y git gnupg make python3-dev gnupg python3-venv libnotify-bin - poetry install --no-ansi - - - &install_build_dependencies - run: - name: Install build dependencies - command: | - apt update && apt install -y git make sudo - - - &run_unit_tests - run: - name: Install requirements and run unit tests - command: | - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test - - - &run_lint - run: - name: Run lint, type checking, code formatting - command: | - make check-black lint - - - &check_security - run: - name: Run static analysis on source code to find security issues - command: | - make semgrep - - - &check_python_dependencies_for_vulnerabilities - run: - name: Check Python dependencies for known vulnerabilities - command: | - make safety - - - &install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download Python wheels - command: | - set -x - mkdir ~/packaging && cd ~/packaging - # local builds may not have an ssh url, so || true - git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - make install-deps - source .venv/bin/activate - PKG_DIR=~/project make requirements - - - &check_packaging_requirements - run: - name: Ensure that the same Python requirements are used for packaging and production. - command: | - cd ~/project - # Fail if unstaged changes exist (after `make requirements` in the previous run step). - git diff --ignore-matching-lines=# --exit-code - - - &build_debian_package - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/ - source .venv/bin/activate - make securedrop-export - -version: 2.1 - -jobs: - build: - parameters: ¶meters - image: - type: string - docker: &docker - - image: debian:<< parameters.image >> - steps: - - *install_build_dependencies - - checkout - - *install_packaging_dependencies - - *check_packaging_requirements - - *build_debian_package - - unit-test: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *run_unit_tests - - store_test_results: - path: test-results - - lint: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *run_lint - - check-security: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *check_security - - check-python-security: - parameters: *parameters - docker: *docker - steps: - - *install_poetry - - checkout - - *install_testing_dependencies - - *check_python_dependencies_for_vulnerabilities - -workflows: - securedrop_export_ci: - jobs: &jobs - - unit-test: - matrix: &matrix - parameters: - image: - - bullseye - - bookworm - - lint: - matrix: *matrix - - check-security: - matrix: *matrix - - check-python-security: - matrix: *matrix - - build: - matrix: *matrix - - nightly: - triggers: - - schedule: - cron: "0 6 * * *" - filters: - branches: - only: - - main - jobs: *jobs diff --git a/log/.circleci/config.yml b/log/.circleci/config.yml deleted file mode 100644 index 2391acf1b..000000000 --- a/log/.circleci/config.yml +++ /dev/null @@ -1,90 +0,0 @@ ---- -common-steps: - - &install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &install_testing_dependencies - run: - name: Install testing dependencies - command: | - apt-get install --yes --no-install-recommends git gnupg make - poetry install --no-ansi - - - &run_tests - run: - name: Install requirements and run tests - command: | - make check - - - &install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download wheels - command: | - apt-get update && apt-get install -y git git-lfs make sudo - mkdir ~/packaging && cd ~/packaging - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - make install-deps - source .venv/bin/activate - PKG_DIR=~/project make requirements - - - &verify_requirements - run: - name: Ensure that build-requirements.txt and requirements.txt are in sync. - command: | - cd ~/project - # Return 1 if unstaged changes exist (after `make requirements` in the - # previous run step), else return 0. - git diff --quiet - - - &build_debian_package - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/ - source .venv/bin/activate - make securedrop-log - -version: 2 -jobs: - test-bullseye: - docker: - - image: debian:bullseye - steps: - - checkout - - *install_poetry - - *install_testing_dependencies - - *run_tests - - build-bullseye: - docker: - - image: debian:bullseye - steps: - - checkout - - *install_packaging_dependencies - - *verify_requirements - - *build_debian_package - -workflows: - version: 2 - per_pr: - jobs: - - test-bullseye - - build-bullseye diff --git a/proxy/.circleci/config.yml b/proxy/.circleci/config.yml deleted file mode 100644 index a39a4c5b3..000000000 --- a/proxy/.circleci/config.yml +++ /dev/null @@ -1,179 +0,0 @@ ---- -common-steps: - - &install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &install_testing_dependencies - run: - name: Install testing dependencies - command: | - apt-get install --yes --no-install-recommends git gnupg make - poetry install --no-ansi - - - &install_build_dependencies - run: - name: Install build dependencies - command: | - set -e - apt-get update && apt-get install --yes git make sudo - - - &run_unit_tests - run: - name: Install requirements and run unit tests - command: | - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test - - - &run_lint - run: - name: Run lint, type checking, code formatting - command: | - make lint - - - &check_security - run: - name: Run static analysis on source code to find security issues - command: | - set -e - poetry update bandit - make bandit - - - &check_python_dependencies_for_vulnerabilities - run: - name: Check Python dependencies for known vulnerabilities - command: | - set -e - poetry update safety - make safety - - - &install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download Python wheels - command: | - set -x - mkdir ~/packaging && cd ~/packaging - # local builds may not have an ssh url, so || true - git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - apt-get update && apt-get install -y sudo make - make install-deps - source .venv/bin/activate - PKG_DIR=~/project make requirements - - - &verify_requirements - run: - name: Ensure that build-requirements.txt and requirements.txt are in sync. - command: | - cd ~/project - # Return 1 if unstaged changes exist (after `make requirements` in the - # previous run step), else return 0. - git diff --quiet - - - &build_debian_package - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/ - source .venv/bin/activate - make securedrop-proxy - -version: 2.1 - -jobs: - build: - parameters: ¶meters - image: - type: string - docker: &docker - - image: debian:<< parameters.image >> - steps: - - checkout - - *install_build_dependencies - - *install_packaging_dependencies - - *verify_requirements - - *build_debian_package - - unit-test: - parameters: *parameters - docker: *docker - steps: - - checkout - - *install_poetry - - *install_testing_dependencies - - *run_unit_tests - - store_test_results: - path: test-results - - lint: - parameters: *parameters - docker: *docker - steps: - - checkout - - *install_poetry - - *install_testing_dependencies - - *run_lint - - check-security: - parameters: *parameters - docker: *docker - steps: - - checkout - - *install_poetry - - *install_testing_dependencies - - *check_security - - check-python-security: - parameters: *parameters - docker: *docker - steps: - - checkout - - *install_poetry - - *install_testing_dependencies - - *check_python_dependencies_for_vulnerabilities - - -workflows: - securedrop_proxy_ci: - jobs: &jobs - - unit-test: - matrix: &matrix - parameters: - image: - - bullseye - - bookworm - - lint: - matrix: *matrix - - check-security: - matrix: *matrix - - check-python-security: - matrix: *matrix - - build: - matrix: *matrix - - nightly: - triggers: - - schedule: - cron: "0 6 * * *" - filters: - branches: - only: - - main - jobs: *jobs From d313d0d850609ed4e7a05f3be52f4a2df9a31e1e Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 17:48:46 -0500 Subject: [PATCH 615/751] Centralize some files back into the repository root --- .git-blame-ignore-revs | 3 + client/.gitignore => .gitignore | 0 client/CONTRIBUTING.md => CONTRIBUTING.md | 0 client/SECURITY.md => SECURITY.md | 0 client/.git-blame-ignore-revs | 2 - export/.gitignore | 106 ------------------ export/SECURITY.md | 8 -- log/.gitignore | 130 ---------------------- proxy/.git-blame-ignore-revs | 1 - proxy/.gitignore | 106 ------------------ 10 files changed, 3 insertions(+), 353 deletions(-) create mode 100644 .git-blame-ignore-revs rename client/.gitignore => .gitignore (100%) rename client/CONTRIBUTING.md => CONTRIBUTING.md (100%) rename client/SECURITY.md => SECURITY.md (100%) delete mode 100644 client/.git-blame-ignore-revs delete mode 100644 export/.gitignore delete mode 100644 export/SECURITY.md delete mode 100644 log/.gitignore delete mode 100644 proxy/.git-blame-ignore-revs delete mode 100644 proxy/.gitignore diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..07cafc0a1 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,3 @@ +8859979ca1ce036c1bf9ad4a96334326af2e1b4c +361ba8821de684b077dcad34bea3d16df246a8c4 +787844dc339e090aa0e9ac2241895365522c4119 diff --git a/client/.gitignore b/.gitignore similarity index 100% rename from client/.gitignore rename to .gitignore diff --git a/client/CONTRIBUTING.md b/CONTRIBUTING.md similarity index 100% rename from client/CONTRIBUTING.md rename to CONTRIBUTING.md diff --git a/client/SECURITY.md b/SECURITY.md similarity index 100% rename from client/SECURITY.md rename to SECURITY.md diff --git a/client/.git-blame-ignore-revs b/client/.git-blame-ignore-revs deleted file mode 100644 index 40638b97f..000000000 --- a/client/.git-blame-ignore-revs +++ /dev/null @@ -1,2 +0,0 @@ -8859979ca1ce036c1bf9ad4a96334326af2e1b4c -361ba8821de684b077dcad34bea3d16df246a8c4 \ No newline at end of file diff --git a/export/.gitignore b/export/.gitignore deleted file mode 100644 index 5c46f9c06..000000000 --- a/export/.gitignore +++ /dev/null @@ -1,106 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ -.venv39 -.venv310 - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ diff --git a/export/SECURITY.md b/export/SECURITY.md deleted file mode 100644 index 1e84430bb..000000000 --- a/export/SECURITY.md +++ /dev/null @@ -1,8 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -If you have found a vulnerability, please **DO NOT** file a public issue. Please send us your report privately either via: - -- SecureDrop's public bug bounty program managed by [Bugcrowd](https://bugcrowd.com/freedomofpress) -- Email to security@freedom.press (Optionally GPG-encrypted to [734F6E707434ECA6C007E1AE82BD6C9616DABB79](https://securedrop.org/documents/6/fpf-email.asc) diff --git a/log/.gitignore b/log/.gitignore deleted file mode 100644 index aa44ee2ad..000000000 --- a/log/.gitignore +++ /dev/null @@ -1,130 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - diff --git a/proxy/.git-blame-ignore-revs b/proxy/.git-blame-ignore-revs deleted file mode 100644 index dbeda0ff0..000000000 --- a/proxy/.git-blame-ignore-revs +++ /dev/null @@ -1 +0,0 @@ -787844dc339e090aa0e9ac2241895365522c4119 diff --git a/proxy/.gitignore b/proxy/.gitignore deleted file mode 100644 index dea2de221..000000000 --- a/proxy/.gitignore +++ /dev/null @@ -1,106 +0,0 @@ -*.sqlite - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ From 24dd559e834d0dff5f46dd48a3f309c91607aee3 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 11 Dec 2023 17:50:12 -0500 Subject: [PATCH 616/751] Add a short README that covers the monorepo The language is roughly taken from the client README. --- README.md | 23 +++++++++++++++++++++++ client/README.md | 5 ----- export/README.md | 4 ---- log/README.md | 2 -- proxy/README.md | 5 ----- 5 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..44d36c1ae --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +> [There are many ways to contribute, and we welcome your help!](CONTRIBUTING.md) By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). + +[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-client.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-client) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/freedomofpress/securedrop) + +# securedrop-client + +The SecureDrop Client is a desktop application for journalists to communicate with sources and work with submissions on the +[SecureDrop Workstation](https://github.com/freedomofpress/securedrop-workstation). It runs within a [Qubes OS](https://www.qubes-os.org/intro/) +virtual machine that has no direct network access and opens files within individual, non-networked, disposable VMs. + +This repository contains multiple components, including: +* `client`: desktop GUI application +* `export`: logic for exporting submissions +* `log`: centralized logging +* `proxy`: restricted HTTP proxy + +Each component's folder has a README with more detail. + +To learn more about architecture and our rationale behind our Qubes OS approach, see the +[SecureDrop Workstation readme](https://github.com/freedomofpress/securedrop-workstation/blob/main/README.md). + +**IMPORTANT:** This project is currently undergoing a pilot study and should not be used in production environments. diff --git a/client/README.md b/client/README.md index d5c3b07db..0e3730190 100644 --- a/client/README.md +++ b/client/README.md @@ -1,8 +1,3 @@ -> [There are many ways to contribute, and we welcome your help!](CONTRIBUTING.md) By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). - -[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-client.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-client) -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/freedomofpress/securedrop?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - # securedrop-client The SecureDrop Client is a desktop application for journalists to communicate with sources and work with submissions on the [SecureDrop Workstation](https://github.com/freedomofpress/securedrop-workstation). diff --git a/export/README.md b/export/README.md index 241f97b19..852a7f04f 100644 --- a/export/README.md +++ b/export/README.md @@ -1,7 +1,3 @@ -> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). - -[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-export.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-export) - # securedrop-export Code for exporting and printing files from the SecureDrop Qubes Workstation. diff --git a/log/README.md b/log/README.md index 88e0398db..55a645f40 100644 --- a/log/README.md +++ b/log/README.md @@ -1,5 +1,3 @@ -> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). - # securedrop-log `securedrop-log` is part of the [SecureDrop diff --git a/proxy/README.md b/proxy/README.md index 2204be5bc..afec296b6 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -1,9 +1,4 @@ -> By contributing to this project, you agree to abide by our [Code of Conduct](https://github.com/freedomofpress/.github/blob/main/CODE_OF_CONDUCT.md). - ## securedrop workstation proxy - -[![CircleCI](https://circleci.com/gh/freedomofpress/securedrop-proxy.svg?style=svg)](https://circleci.com/gh/freedomofpress/securedrop-proxy) - `securedrop-proxy` is part of the [SecureDrop Workstation](https://github.com/freedomofpress/securedrop-workstation) project. From 201824f78b76940e0f1cba320e57128cfc2a94d0 Mon Sep 17 00:00:00 2001 From: Cory Francis Myers Date: Thu, 14 Dec 2023 17:46:12 -0800 Subject: [PATCH 617/751] chore: restore "securedrop_client/locale" from 9973f9e^ --- .../locale/ca/LC_MESSAGES/messages.mo | Bin 0 -> 12136 bytes .../locale/ca/LC_MESSAGES/messages.po | 334 +++++++++++++++++ .../locale/de/LC_MESSAGES/messages.mo | Bin 0 -> 12597 bytes .../locale/de/LC_MESSAGES/messages.po | 340 +++++++++++++++++ .../locale/es/LC_MESSAGES/messages.mo | Bin 0 -> 12266 bytes .../locale/es/LC_MESSAGES/messages.po | 348 +++++++++++++++++ .../locale/hr/LC_MESSAGES/messages.mo | Bin 0 -> 11722 bytes .../locale/hr/LC_MESSAGES/messages.po | 351 +++++++++++++++++ .../locale/is/LC_MESSAGES/messages.mo | Bin 0 -> 12335 bytes .../locale/is/LC_MESSAGES/messages.po | 340 +++++++++++++++++ .../locale/it/LC_MESSAGES/messages.mo | Bin 0 -> 1739 bytes .../locale/it/LC_MESSAGES/messages.po | 323 ++++++++++++++++ securedrop_client/locale/messages.pot | 353 ++++++++++++++++++ .../locale/pt_BR/LC_MESSAGES/messages.mo | Bin 0 -> 11972 bytes .../locale/pt_BR/LC_MESSAGES/messages.po | 348 +++++++++++++++++ .../locale/pt_PT/LC_MESSAGES/messages.mo | Bin 0 -> 12218 bytes .../locale/pt_PT/LC_MESSAGES/messages.po | 340 +++++++++++++++++ .../locale/ru/LC_MESSAGES/messages.mo | Bin 0 -> 15719 bytes .../locale/ru/LC_MESSAGES/messages.po | 349 +++++++++++++++++ .../locale/sk/LC_MESSAGES/messages.mo | Bin 0 -> 11550 bytes .../locale/sk/LC_MESSAGES/messages.po | 348 +++++++++++++++++ .../locale/sv/LC_MESSAGES/messages.mo | Bin 0 -> 11897 bytes .../locale/sv/LC_MESSAGES/messages.po | 331 ++++++++++++++++ .../locale/tr/LC_MESSAGES/messages.mo | Bin 0 -> 12069 bytes .../locale/tr/LC_MESSAGES/messages.po | 340 +++++++++++++++++ .../locale/zh_Hans/LC_MESSAGES/messages.mo | Bin 0 -> 10874 bytes .../locale/zh_Hans/LC_MESSAGES/messages.po | 337 +++++++++++++++++ 27 files changed, 4782 insertions(+) create mode 100644 securedrop_client/locale/ca/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/ca/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/de/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/de/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/es/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/es/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/hr/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/hr/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/is/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/is/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/it/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/it/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/messages.pot create mode 100644 securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/ru/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/ru/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/sk/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/sk/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/sv/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/sv/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/tr/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/tr/LC_MESSAGES/messages.po create mode 100644 securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo create mode 100644 securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/ca/LC_MESSAGES/messages.mo b/securedrop_client/locale/ca/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..5d6ff67b1e2b353cab61960557e67ebabe9757d8 GIT binary patch literal 12136 zcmbuFU5q5xRmaPY?Kl%V33k3i$hCu+d`!=HZG)HbdhOnso^>blwbMQ8brM)=x@%@? z-CfnLs@~c0YKavA5kQ2g7}Dd-~kCFEPh z1%48|3hKF+KpqYL1^f~4Kg!QHy*&tK`TTb99`Iq1uY#w*cZ2(21NS0=HXTF8L$ri8F&uVO1@tNO<&-{eEuHzIQUVNs^_nO zKLdUf)Vl9t6K@6Y110|{Q2Jj4?*}h{vd`y0+4DESkANfaI`~~s^6g^;>HF6~@$|33 z9|yk;eh9qteXIf2z?;Dq_*39T@XI#^!SkT>RpVjl=^;?#n;>5WDd>3cm%+aQzXnMk z-{Y#{r?xJ{k#Hde{W_J^0&LeL-2kO*9*P|O5eW?{sj1kpacI2)IMJU zKMKy?>-BO0lsx;Op8FiAai0fIgD-;8!*@Yc6TAnf5N{ViOc8tnd;t78a31^uh>3%j zK*|3PpzQuX;3=@lP5I+>kgW$_0yWAsbB%rJ{|{e1>2zX z^eGSu1O=%5J`YNte*$X!zk$-r_d(6`4!-;}cn`P;-TeCZ<-5&4tNogKPRF zoBt%&XSie^>Fjnc)MfmWEu@c6aQ!rwY_1pTvi&r{N4PF={VbPWn_QReo&Vzi%xS!m zE@fBfVEzaguZ7E859?GSM z&WSUa#C%V7dMno*T(WtKt9r?Ys@DbHJjwM*F2ypaXt@zE&I=#nf`ayXl)v%~d%5L} zC)Zau>dV3SU32}s3*2s&_FW!jSEI}osf&_urx&>_8ua2Q4|J=O_6KPmxin*3(siMI zdl;PAf8gv|n1p+AvgZa_oD}J>a9Nx`ou66YyE8jyFKqF2H_Bbea|h9m3%lJc%JYa3 zI}FI&!rAr6mOdOrE>3JGG&E%;MsZkx?fc7IB*7^RBt;4%49vv&apTdD3$+D(h8z19;%2(!YayQr}ed!WVo;h~?N z{lr~15$_&K^f=i~vwkR%d4Dy|W7!8Gi~YzY;nQq8I*jIAKJ4tfFfS+d3(vdFQf~IR zJM8sriJa-Nb+tKnurGC|nQ2OjleP!LonD;poAOY+6kVA(pEuKQCrpzUvaCcgyStqT zX(Jb18>CsGhj-(ijP2>L7WNL1WMccagwWE=V>|3c7*9qq4%oxqcv0_gY_O^CP)eAj zte+W8hp2pxJBKdn??l}$QuqCurr#X%hlrbc1B%#sLi)3+nGXEK%yP#_khlM)XR);m= zFT}mX^OizMw49}bGHOnoY(MHe?U^;xl=Gtx+icr2LOPKbo5y4rVvhheA1rUIH~3RV z=j8|&h@7Lmxa+mnCFB2Ofi@MV@9%>gN8*K zw;SR#-Rcvu5O2wec;y{-zv!;t2v%&E?CoWhqmq4cAAI1FPlT@?SCaFj5z2{E4-5ym zU*rgA*?b@qk^6%wKMB+|fqHI$?VD?&F!#3bw!DyPh9UU87tb_qA; zFWqSTVC*-QCKMsNrahlv{Kk~?QYA*d@49>tb>iK)6Dr$@E61Gn$w{_he(Ic%Ol|x1 zb1s%CJReYQVsiMNLNunW~`#Sa-2`Q;ZEFBVWXX1_Z+w(1+C`!b=O??xUt=~H!75MZ~NR@lRJ|HutX$G3U?L1dG%ep zX*ugysc5#^k9vc7p6V$Dhh>7VvSH+?y^1-MzQ_PD6|m2KNftlhYq%obLkjpI|t zlAL14p$`;B#7Q=@2dCWnARSLJ(Qq!eCi;CB~Rqyc-wxK znLekXvOY|eWN;ff_b~!7JB(WKX=aIC1luj@oRyW;CWY8`nVW)(F^>{diN1;y-U4~> zqz+4HfDBuZyvLDR@ptUTsG&^Ii@{Tk)|^{ztTx&W*P#B~YPiTz!4ntutYAaa8QiegNI6}$Kl656TmHxGp!1i<5YTp~a4h{5ODSdFgd{d36c4dQ%fProQ zuo_V6BDfw7=z4Ta{>$R_4G}u*nHRfkm?Y%OfVlqhbH8d8v+4Cny7tw2+^B7lv-DtX znId!1J=Lgh)z&s@%XRm}#^PG@Mlz*6PjG z$Lq_>Tkz{FLzBHB2eDc^3i}gj&g>V(AYWWqpl8Dz(R^-6ugj@t9xE>pRR4T`Lv_J<6R&ED+~W@#uDY zrFMEUPTSgzvRWe{0%4CucX}r-W;T06B7SWJugEEG2lg?4^npic-RPS~6L-&}?$jeQ zmulyugzR97dD3ssJv4vn!I{9Ft2Zyz1J{~uwA!QR{Kxe+A(%cHu4AWzxQnObe{SEG zUZFw+xtSD8yG&n1c_)k2O;Q+F)~4lU9h38%X5-O|n#%f0os>8+8~5o-!2i*URhxvM z1n+2d#q^lS1Qa#cVbUO23u7`q2jlK=^o=2-(j69@9_x}=VuVSw7Y!Av{d`&oW#Wyn30XbB=adtVm9cP(TvhhaI#PbwTf@ys+;enUXUZiqfZ;{F~OALu_*o&_wfg&E#;t>H2Ufrd>aX&03Ds5n! zN)Zw43E`{UzDwUGqa!SHqCn9Y9vVAj)?+jb`((9l$X@-KP7h%#Gm1Sm;b}%bWPbIF z>DcWtQIEminaY*S*{op)A@Ll-5q)Bv3{}QcN#WU;lE6jt**m)0$a1ualCoG%MDxuv zjtG$E-a4fki5|lq4PPBtdb13})w{D}0$5n_mI~UqJSw*paQb0P*rp<3ZBe@)bKEM_ z{`2OQwsaVRZl;7VzBc+jH~OkZ+YS6Z8a@`ZX5sPZ1*S#el7p>wdf`yhT#I)J>U&Yy z?0e~(tM#hkSLe8=IIKuCZuId%p<@zb)UTlZ;quviDR7Tp55g>qcf_x$&@YWma`n7Z zFOl|x*Si@doUz*dn%s>A)byYeI45ECaGU%QqYG|I9zATWqDDJ7r~I>A4_ZS}IEt@L zR8}!Ao+!_T`OIMxmr-bF30854JE8l5mI#ZCqy=&R<_$aC0+=5l4pQmkO5 z*}l}+a+jJbTlKc9uR1jio68$j+ptb6%)%C1pI9Fg5+PE~d*#9ffpC=uQDVf!*S)>X zw&pA%l{b*jeg$J)lw~9mT3_RoC|Q+k2r4~_GfAj*G zknnUY+KgEU(Fo-Vfl57N&Qj~Y?)GIx?Bi3Gc{F>&%}hx*2_tNmbWO*xt5l%eGf8|g zMxf-RlucB?ln27mi(~$=!*O#{Dk&?;sW^Pptx6l4OAoUmSnXNfRKO=LSjWF?+Y$nP zXbo<9V^lMZ75DmWu|?Y_>!Ju>Fz`!LNd8mm^tGfi2DS8bJxi(PX;SLMN~kiT^I*E8 zsmv17c{fRidC**ME;Z|JwNA8dwVIz8HLA@peceW=2^>uh_5JVQPuyy0Zk7zwUpe``Gv$-l{`^SiI!z7EP1X{ zdyHhRGttMkeouQ9U)w)vTcGCvUxp-oTxHlFrX zi_ujbeI<)K|L+{rf%AxTM?$Kd9?j$Zn;wiEgw=DGi?sl_H+&Hm#ny8UMp{}j$Y^?A&1H1<)B%?PL)P`#w$dk1rj9b z0dpLWmE|Fuvx*8wO{`-j2f)$SZ7tf?XoTYfWI0lVt1DYJFvN1$Vf5!Dr62Xn$P?-@ zzXad=V!&oc$2{R%wRZT_-u7{rDaMzTg;x#pQXp4Fvp@3~e?9FOWEqtLO+N(A6E&1> zXZc?{7==t(9b>1{FD=}9?THPyvawaC+3HqDs)|JIye(p;?j|Uec-<9z(aeUw< zd{p(Pokh#K*Yr;P*oiWJg&93R=UUrkap4-P5Oi&mmTrsR%lUEq*!R91Zn>sgYtqJT ztB<=xWYccVZfv-WKxO)&r8O>}Xt9#HrVm7R{+S5*Lp5|o+vzP<;OlPVu>9X^nEN95)|OUwH-{@8nvEsjsUe!mE3^)ya`j z<&R, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-23 12:33+0000\n" +"Last-Translator: Benet (BennyBeat) R. i Camps \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} ja s'ha iniciat" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "No es pot arribar al servidor del SecureDrop. S'intenta de nou..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"No s'ha pogut arribar al servidor del SecureDrop. Comproveu la vostra\n" +"connexió a internet, la del Tor i torneu a provar." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Aquestes credencials no han funcionat. Proveu de nou, i\n" +"comproveu que useu un codi de doble factor." + +msgid "That didn't work. Please check everything and try again." +msgstr "Això no ha funcionat. Comproveu-ho tot i torneu a provar." + +msgid "You must sign in to perform this action." +msgstr "Cal que inicieu sessió per a fer aquesta acció." + +msgid "Your session expired. Please log in again." +msgstr "La sessió ha caducat. Torneu a iniciar-hi sessió." + +msgid "Failed to update star." +msgstr "No s'ha pogut actualitzar l'estrela." + +msgid "Retrieving new messages" +msgstr "S'estan obtenint els missatges nous" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Els fitxers no existeixen al directori de dades. Proveu baixant-los novament." + +msgid "The file download failed. Please try again." +msgstr "Ha fallat la baixada del fitxer. Proveu-ho de nou." + +msgid "Failed to delete conversation at server" +msgstr "Ha fallat la supressió de la conversa al servidor" + +msgid "Failed to delete source at server" +msgstr "Ha fallat la supressió de la font al servidor" + +msgid "Download All Files" +msgstr "Baixa tots els fitxers" + +msgid "Delete Source Account" +msgstr "Supressió del compte de la font" + +msgid "Delete All Files and Messages" +msgstr "Suprimeix tots els fitxers i missatges" + +msgid "SecureDrop Client {}" +msgstr "Client del SecureDrop {}" + +msgid "Quit" +msgstr "Surt" + +msgid "Last Refresh: {}" +msgstr "Última actualització: {}" + +msgid "Last Refresh: never" +msgstr "Última actualització: mai" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "TANCA LA SESSIÓ" + +msgid "SIGN IN" +msgstr "INICIA LA SESSIÓ" + +msgid "Nothing to see just yet!" +msgstr "Encara no hi ha res per mostrar" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Els enviaments de les fonts es llistaran a l'esquerra, una vegada es baixen i es desxifren." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Aquí és on llegireu els missatges, respostes a les fonts, i on treballareu amb els fitxers." + +msgid "Select a source from the list, to:" +msgstr "Seleccioneu una font de la llista, per a:" + +msgid "Read a conversation" +msgstr "Llegir una conversa" + +msgid "View or retrieve files" +msgstr "Veure o obtenir fitxers" + +msgid "Send a response" +msgstr "Enviar una resposta" + +msgid "Deleting files and messages..." +msgstr "S'estan suprimint fitxers i missatges..." + +msgid "Deleting source account..." +msgstr "S'està suprimint el compte de la font..." + +msgid "— All files and messages deleted for this source —" +msgstr "— S'han suprimit tots els fitxers i missatges d'aquesta font —" + +msgid "Failed to send" +msgstr "Ha fallat en enviar" + +msgid " DOWNLOAD" +msgstr " BAIXA" + +msgid "EXPORT" +msgstr "EXPORTA" + +msgid "PRINT" +msgstr "IMPRIMEIX" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "FITXER XIFRAT AL SERVIDOR" + +msgid "DOWNLOAD" +msgstr "BAIXADA" + +msgid " DOWNLOADING " +msgstr " S'ESTÀ BAIXANT... " + +msgid "Earlier files and messages deleted." +msgstr "Fitxers i missatges anteriors suprimits." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Fitxers i missatges suprimits\n" +" per a aquesta font" + +msgid "Compose a reply to " +msgstr "Responeu a " + +msgid "Awaiting encryption key" +msgstr "S'està esperant la clau de xifratge" + +msgid " from server to enable replies" +msgstr " del servidor per habilitar respostes" + +msgid "Sign in" +msgstr "Inici de sessió" + +msgid " to compose or send a reply" +msgstr " per escriure o respondre" + +msgid "Username" +msgstr "Nom d’usuari" + +msgid "Passphrase" +msgstr "Contrasenya" + +msgid "Two-Factor Code" +msgstr "Codi d'autenticació de factor doble" + +msgid "SecureDrop Client v{}" +msgstr "Client del SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"No es pot utilitzar aquest nom d'usuari.\n" +"Indiqueu un nom d'usuari d'almenys 3 caràcters." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"No es pot utilitzar aquesta contrasenya.\n" +"Indiqueu una contrasenya de 14 a 128 caràcters." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"No es pot utilitzar aquest codi.\n" +"El codi ha de ser només numèric." + +msgid "SIGNING IN" +msgstr "S'ESTÀ INICIANT..." + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Inseriu un nom d'usuari, contrasenya i codi de factor doble." + +msgid "USE OFFLINE" +msgstr "USA-HO FORA DE LÍNIA" + +msgid "Show Passphrase" +msgstr "Mostra la contrasenya" + +msgid "CANCEL" +msgstr "CANCEL·LA" + +msgid "CONTINUE" +msgstr "CONTINUA" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "SÍ, SUPRIMEIX FITXERS I MISSATGES" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Segur que voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte font {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Preservant el compte es mantindran les metadades i podreu iniciar sessió novament a {source} del vostre SecureDrop." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "un fitxer" +msgstr[1] "{file_count} fitxers" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "una resposta" +msgstr[1] "{reply_count} respostes" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "un missatge" +msgstr[1] "{message_count} missatges" + +msgid "Preparing to export:
{}" +msgstr "S'està preparant per a exportar:
{}" + +msgid "Ready to export:
{}" +msgstr "Preparat per a exportar:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Inseriu la unitat USB xifrada" + +msgid "Enter passphrase for USB drive" +msgstr "Introduïu la contrasenya de la unitat USB" + +msgid "Export successful" +msgstr "S'ha exportat correctament" + +msgid "Export failed" +msgstr "Ha fallat l'exportació" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entenent els riscos abans d'exportar fitxers

Fitxers perjudicials
Aquesta estació de treball us permet obrir fitxers de forma segura. Si obriu fitxers des d'altre ordinador, qualsevol fitxer perillós o perjudicial podria afectar el vostre equip o cap altre de la xarxa. Si no sabeu com manegar aquest risc, imprimiu el fitxer o bé contacteu amb el vostre administrador.

Anonimat
Els fitxers enviats per determinades fonts poden contenir informació amagada o metadades que us poden identificar. Per a protegir les vostres fonts, considereu la possibilitat de censurar parts sensibles del fitxer original abans de posar el fitxer resultant a l'abast d'ordinadors en xarxa." + +msgid "Exporting: {}" +msgstr "S'està exportant: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Inseriu una de les unitats d'exportació proveïdes específicament per a la màquina del SecureDrop." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "La unitat no està xifrada o bé s'ha produït un error." + +msgid "The passphrase provided did not work. Please try again." +msgstr "La contrasenya que he inserit no és vàlida. Torneu a provar." + +msgid "See your administrator for help." +msgstr "Contacteu amb l'administrador si us cal ajuda." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "El botó CONTINUA romandrà desactivat fins que la informació no estigui enllestida" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Recordeu tenir cura quan treballeu amb informació fora del vostre equip." + +msgid "SUBMIT" +msgstr "ENVIA" + +msgid "DONE" +msgstr "FET" + +msgid "Preparing to print:
{}" +msgstr "S'està preparant per a imprimir:
{}" + +msgid "Ready to print:
{}" +msgstr "Preparat per a imprimir:
{}" + +msgid "Connect USB printer" +msgstr "Connecteu una impressora USB" + +msgid "Printing failed" +msgstr "Ha fallat la impressió" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Gestió dels riscos d'impressió

Codis QR i adreces web
Mai introduïu i obriu adreces web ni escanegeu codis QR presents en documents impresos sense prendre precaucions de seguretat. Si no sabeu com gestionar aquest risc, contacteu amb el vostre administrador.

Punts de la impressora
Qualsevol part d'una pàgina impresa podria contenir informació identificable, invisible a simple vista, com ara punts de la impressora. Tingueu en compte aquest risc en treballar o publicar impressions escanejades." + +msgid "Please connect your printer to a USB port." +msgstr "Connecteu la impressora a un port USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "SÍ, SUPRIMEIX EL COMPTE SENCER" + +msgid "Are you sure this is what you want?" +msgstr "Segur que això és el que voleu?" + +msgid "When the entire account for a source is deleted:" +msgstr "En suprimir el compte font sencer:" + +msgid "The source will not be able to log in with their codename again." +msgstr "El compte font no podrà mai més iniciar sessió amb el mateix àlies." + +msgid "Your organization will not be able to send them replies." +msgstr "La vostra organització no podrà enviar respostes." + +msgid "All files and messages from that source will also be destroyed." +msgstr "També es destruiran tots els missatges de la font." + +#~ msgid "DELETE" +#~ msgstr "SUPRIMEIX" diff --git a/securedrop_client/locale/de/LC_MESSAGES/messages.mo b/securedrop_client/locale/de/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..584fd390774c76802c671de97a837dfc6a84d899 GIT binary patch literal 12597 zcmbuFU5q5xRmaPTLz0P|1m`;>@wI^@cBW^&>wK8;dhMQ>p55`z^z3%e?8ch}tET(* zbY;4$Csoxuo?T1;g|8q2NCbqED2igFJn+KH1|*A!47@}L1iT>;DUpy6M1+Vu0T2BC z=T>$1?1vSH*4F&Ht8d+V?m7SSaZm5J@4Nf+5wB;t-o^FiS4PpN!Fzs!KfGS^nkafL z_*(E@@J--*zz4ve0-pl^`>rVZIC$z6QFM7Oik{^DXYYxkp9a4Lz76~jP*eT{lQ1;8 z7km@=))F5EyL>(a-VJ^g)VQyK?*{)Ad<*z@pw|Bv@SWh@uaBbp!27|sgQq~Pa~{e71VRz1bH<24)~Mc_sh?By&;O;$LBYI4}c#5`6_w_d@I-o8{ntG4}gCSYW*L8 z+Q&U_j3WL;jz5y)B={=uX%Lk}7r=+XkAaVYzXnR@-vC#@`w?at?1G;HzXmdO^iDP> zeLM_mofF_w;4&yZe+F!We+5dY|4*&TGK)C2oP@(gmb13^V_yzDh z_+MZQK8Z4$;8(y4;D3S*uwDz#{W|!&eEug;{MthZTt4~*@E-7Upm_2HP#d zDwpiC$u;|uEk4909o)?&Zc0y>!R#d&pW%9%OY)rN(hK!kd|Cq^=lUqu&vWT@flINl zdO6-e1LId6lwP2V@f$Gz7Orr8L~nSB6MBh*ujP`h^g0*7_WTs@n_P-Z;`H1ZFIxg|zBv+fOdWnP8>mqN&Me*>%T(bLpTzV1q?DawZLQ#8( zC$B2sM{Z^Fa&vvNzA}Bc);#MX*ULsjm;3Ch&s;HbK8<$<-erD&koY{(tsSbi>JFjcQMZ$_#GE_ zyP3~(&xjocWbVY7rnjXJ_q|I}8#vnc>G9FFb|+5VWWvrUE#f5gT|H!r^R_$cjE6og za(9pveMwWqdy+2qopF{Fhm7={cw8i-G+%IQJ$E=7yEyZ1oaSSoKRVEkhuW2QML)@H zKl5&X;A2!^t9A-Kma&&%k|ueP#lpwjNBnAvMRMT9sj+^B~dE3x;r z*f2f})3cwX%O;ZEp+ry8-Y6T!5}Ef`lRS}q5VGidm&SW++aLOQmybJr7w6@qVc`XL zp_H3F_Qr#OEs--lwyrkk4*F8}C^Jn-anknwcxRC0eN!Ham!c~Z=L=@~?UZTqLY9>% zW_P#ak=8r^-2Nyl^l&d3$k>4n8}Z-(Nv5{nk`P*&d2ELRkMU#_2s#JzOceq`!gPlW{!?zAMkC9}C7%bUO*ly~EzKFYV5hG7r zR7Ap)v9eL-P;_5#TO-UlDtyJ|a)DW*2byHQ8+WFbtPFgNE~tO#utcfD8oN)K8PO{Z zLz((u5XfLIJ|qah`aFamlQoEd=Q1!JS&X?dl09^ zlTrO3PE1yxcCy2LW7M8MjF#)o<;HrnyxH7ZYi>89=M8hqLs~N zgFj_-Uh%kqchXkifktnX+KS3=+eQah?{r4vvYprYJ+_sKEO z9Qxvc=t66)xfNZQ*deM?OX)Y35<^C_LLv^HL>gGAhLY4^MeN3in8rgw<&0U)D-K4r z9^uCPrRygTCSg;flp>^O+6xILY)mT?<4~iHrna+z=7vwyunDNgWj28W};RZb}pzu(R!up zTpTAw)KYqkk9mdNJJdu!u6{JBP4Hvtrsapq=Ef>=LMOIb<~C)E(r@l4`;@xG6x;fY z!O5Q;*bT8-zQ_`9`cC};dJX9)YOkGby0vD&&Fw9Fqe5BtwwE^6xHC-v%S6Joa98o0 zTkqOU%UL&-ie{_6AM7vi)IcdXE)#r}4ZWlGD&|r8B15pW5>>uW(dwhNYSbAwY$v-a z45Kn9SlN)v7gPk3MbMZg!!t0Ud|}{wOg&0FicBH=^QHLI^_Df2ZMT$IyGb{FUt#sx zBtCU4$tiXmhCpFNoMtn7aK^0qK`?$O%`;aycZxSerP zkisj?c9UGkr7q`(A{m%^%Y<}kLrG8N<{{g-P1yjCQzZpfx8ee=yRFPhehfug2ysZ!WAI>%iHe_|!oNOWu}? zlWm7t=7yYx%KC7mB!kkY<+IMYP?f&RJbuU!xG)E^||KDdACqD$!Sw zB3K}gF6*#_2FS1l$$Jv16@Mpgj2g-Wy%;^yXwSQq#(HC`;TqJRt%hrFZnu^juD-my zxlK-;9if`5?dr`Hx6x>~>t`G7=o!k}q0(?3JYCw`_ZbTg5rm~wpN}XcHSoaPYmlG_ zhLuImb<^sz#pu~^XUV#fqDueTNo4zZ)@tA9Lme9FyHfh-dikarQSHhG z837~P{$Vws)J1eX-lyx)G5Mbrx1SfGHdaT~A?0$1y z=6HlcVf0DDeQm8AAL%?a(s(zoZH*S)+=b0r zird5JR$9>O3`5i1G3T(_mXC)MVNUmpVn1Izae|HwQ}~74QeKxc&jL0+K~T{? z@)OhhGjD4h%Zewu{={^FMHDl)v9{5e?)>D!BXbWl(zf!F@NIJ<1}vc%@e76 z;0br~@wt!I&ia(xV0yV6w&y;$aPrZ)Xqnni*>dL^E!?xwqDgj@9$DLZWb-PnaUM21M;dMb=+hz5`=dz8(LCfH=UBR^oU8fY!-xyM&KK4IQ* z-p$4xeeRQ2`|*xXtKP}QR!zYwC)IQvlEip=^Ts(1IgA-{Omx!rLmktTCfG46U3K@+Tu_N<-8+uV9UDRo1i&9$}Jj5JW>R|(y|k8kWUimeqC zXFZ=TuyPti$QkTX{wRX!IUw!M6Yn(G^faj@b6cLQEqi6N`);!_@Ak;glLpE)j=Yk?txdZwEDm@3 zv6MZpZMfdii!|P7!tD%3M_+~nV;Xz37Pa}Ecy{C07TnUpbj?ycZrbK(UHMcjnCK@D z3R2$8c6&!J42opeR1?O~DPl4+k_KSbCtC zq%tb`qSGIYb9~ZQzF^HrKT(1LYLkOuRw~C-r=XOTa$}oJx>WG&(O1abH7V!lhI$)q zg4rZEsr!uo=fQCa1P4ZeCnNSo+uu9oedIZMk$f;;$z+;IEYeW8F4b0yT$!@W4x*4&RuFtzPSir)a(kR75FjwwXMqak&Z@X`^diUX z{p{#PV#A!+DwiSTga-Be`d+X&Jqj<%Rn{234(`}yB?PCj*jX1gaY!FLv zbUEA0=hlzD*lsu0Dc4u(Ta7hW-(GdcTcE3G$eNdTSe;NDqz&!M14}h({V6r9!&Qqm z!4lHigb+HHD;A)kR2p6Nv2lI;AkerZ({xtk_G_DG08F22)XH8>#6 zO;fbRx#Ogb_lj{$FM|j`Q^H)5=C*QD=&aiPpdxB1eWBj&HN`xBrmHx9jHbjOxSEbS zeXE=*I$RqYASe<6={KM4_x;>mfv#hlX@mg%8C{6+%N3 zw_Zifh4Rr*IGSTKD0NFd9TUW@jZ2``lQT^z)0gh0?h0*F4%>Sa+*ZG8Xf^4;t7xny z)tQ+RY2Oq52mDrKwG`HwhO%Ro1d)nV4WkQ2E2o9V%b;{GB9IokG@|~|Kt-uAs}zWgaBWwBxb-b7^E@l_2;D=ATdo|`^r(r#9b5D_PBUaL?;&10cfhlp8q z#p%!w@GW>;Rv^)Aju)b)ANylfK$-L7on3MS`7o+CHyZ1f zx|Yf}m)BY=^lHvF>@z=&tuI6Cs5tKBE@qU~Zty=WCOJ$0Q^TsG5dQdilUhukJV?S3Mg_HQk`yHiIdKK*tG^s#bx$WVdKwDf zRgj)7L~LtRUBtVWEHkKjIY-Xy=pf1Hd0NVxSp%h6X%mW1ckLjtQbT=cO|L%m6{QSx zI-omZzKF=79=s)*-Fb}$vCIzQE~PbgCE>h9LYoxOlPPB-DQDt4i9DT-|8%0C#XSxF zNADo2Ytu>}6g{#y8*$TeGAz*b#N*_u6iy+nW+mJU;j>2HIz%^GU;1S^n+YhBQc@@5 zpx9dqNo7A(fuVTkQ&l2TIl>Au>@|9sglzO{zd*x<;|vpbLRMGFbUb2J{2-IvzShJ} zR7<-g7UJkJHoP?9UUI^+f-&RF90!N=J<4J%!%tQ?EU9UzANWJub>;DDA!O~+Pvohy z#|??9LX zIn_MVpE{P!nKB$)7owYeBPv_!jl>8s7q=Vh>*qI{TbnfW{(#CJ3Bnl4`bN`j z(`9egm(R5b*;{;`43Z9pc0?l;6AGpVB?;mygc*u9LYCs{wJ~LdI#D_b>bV=?i2eU+ zx`*gJ41@^hA1huasXv@AeEMW$N3>1ryqEutAvCT?aC89Vse4vUOna80`?wIEY$wGv z)kg9), 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-22 22:22+0000\n" +"Last-Translator: Kevin Kandlbinder \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} läuft bereits" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Der SecureDrop-Server kann nicht erreicht werden. Versuche, die Verbindung wiederherzustellen ..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Der SecureDrop-Server konnte nicht erreicht werden. Bitte überprüfen\n" +"Sie Ihre Internet- sowie die Tor-Verbindung und versuchen Sie es erneut." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Diese Anmeldedaten haben nicht funktioniert. Bitte versuchen Sie es erneut und\n" +"stellen Sie sicher, dass Sie einen neuen 2-Faktor-Code verwenden." + +msgid "That didn't work. Please check everything and try again." +msgstr "Das hat nicht funktioniert. Bitte überprüfen Sie alles und versuchen Sie es erneut." + +msgid "You must sign in to perform this action." +msgstr "Sie müssen sich anmelden um diese Aktion auszuführen." + +msgid "Your session expired. Please log in again." +msgstr "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an." + +msgid "Failed to update star." +msgstr "Stern konnte nicht aktualisiert werden." + +msgid "Retrieving new messages" +msgstr "Neue Nachrichten werden abgerufen" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Datei existiert nicht im Datenverzeichnis. Bitte versuchen Sie, sie nochmals herunterzuladen." + +msgid "The file download failed. Please try again." +msgstr "Das Herunterladen der Datei ist fehlgeschlagen. Bitte versuchen Sie es erneut." + +msgid "Failed to delete conversation at server" +msgstr "Löschen der Konversation am Server fehlgeschlagen" + +msgid "Failed to delete source at server" +msgstr "Löschen der Quelle am Server fehlgeschlagen" + +msgid "Download All Files" +msgstr "Alle Dateien herunterladen" + +msgid "Delete Source Account" +msgstr "Quellkonto löschen" + +msgid "Delete All Files and Messages" +msgstr "Alle Dateien und Nachrichten löschen" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop-Client {}" + +msgid "Quit" +msgstr "Beenden" + +msgid "Last Refresh: {}" +msgstr "Letzte Aktualisierung: {}" + +msgid "Last Refresh: never" +msgstr "Letzte Aktualisierung: nie" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "ABMELDEN" + +msgid "SIGN IN" +msgstr "ANMELDEN" + +msgid "Nothing to see just yet!" +msgstr "Hier gibt es noch nichts zu sehen!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Nach dem Herunterladen und Entschlüsseln werden Quellen auf der linken Seite aufgelistet." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Hier werden Sie Nachrichten lesen, auf Quellen antworten und mit Dateien arbeiten." + +msgid "Select a source from the list, to:" +msgstr "Wählen Sie eine Quelle aus der Liste aus, um:" + +msgid "Read a conversation" +msgstr "Lesen Sie eine Konversation" + +msgid "View or retrieve files" +msgstr "Dateien ansehen oder abrufen" + +msgid "Send a response" +msgstr "Antwort senden" + +msgid "Deleting files and messages..." +msgstr "Löschen von Dateien und Nachrichten..." + +msgid "Deleting source account..." +msgstr "Quellkonto löschen..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Alle Dateien und Nachrichten für diese Quelle sind gelöscht —" + +msgid "Failed to send" +msgstr "Senden fehlgeschlagen" + +msgid " DOWNLOAD" +msgstr " DOWNLOAD" + +msgid "EXPORT" +msgstr "EXPORT" + +msgid "PRINT" +msgstr "DRUCKEN" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "VERSCHLÜSSELTE DATEI AUF SERVER" + +msgid "DOWNLOAD" +msgstr "HERUNTERLADEN" + +msgid " DOWNLOADING " +msgstr " LÄDT HERUNTER " + +msgid "Earlier files and messages deleted." +msgstr "Frühere Dateien und Nachrichten gelöscht." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Dateien und Nachrichten gelöscht\n" +"für diese Quelle" + +msgid "Compose a reply to " +msgstr "Eine Antwort verfassen für " + +msgid "Awaiting encryption key" +msgstr "Erwarte Verschlüsselungsschlüssel" + +msgid " from server to enable replies" +msgstr " vom Server, um Antworten zu ermöglichen" + +msgid "Sign in" +msgstr "Anmelden" + +msgid " to compose or send a reply" +msgstr " um eine Antwort zu verfassen oder zu senden" + +msgid "Username" +msgstr "Benutzername" + +msgid "Passphrase" +msgstr "Passphrase" + +msgid "Two-Factor Code" +msgstr "Zwei-Faktor-Code" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop Client v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Dieser Benutzername wird nicht funktionieren.\n" +"Er sollte mindestens 3 Zeichen lang sein." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Diese Passphrase wird nicht funktionieren.\n" +"Sie sollte zwischen 14 und 128 Zeichen lang sein." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Dieser Zwei-Faktor-Code wird nicht funktionieren.\n" +"Er sollte nur Ziffern enthalten." + +msgid "SIGNING IN" +msgstr "WIRD ANGEMELDET" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Bitte geben Sie einen Benutzernamen, eine Passphrase und einen Zwei-Faktor-Code ein." + +msgid "USE OFFLINE" +msgstr "OFFLINE VERWENDEN" + +msgid "Show Passphrase" +msgstr "Passphrase zeigen" + +msgid "CANCEL" +msgstr "ABBRECHEN" + +msgid "CONTINUE" +msgstr "FORTSETZEN" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "JA, DATEIEN UND NACHRICHTEN LÖSCHEN" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Sie möchten {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Wenn Sie das Konto behalten, bleiben seine Metadaten erhalten, und {source} kann sich erneut bei SecureDrop anmelden." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "Eine Datei" +msgstr[1] "{file_count} Dateien" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "Eine Antwort" +msgstr[1] "{reply_count} Antworten" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "Eine Nachricht" +msgstr[1] "{message_count} Nachrichten" + +msgid "Preparing to export:
{}" +msgstr "Vorbereitung für den Export:
{}" + +msgid "Ready to export:
{}" +msgstr "Bereit zum Exportieren:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Verschlüsseltes USB-Laufwerk einstecken" + +msgid "Enter passphrase for USB drive" +msgstr "Passphrase für USB-Laufwerk eingeben" + +msgid "Export successful" +msgstr "Export erfolgreich" + +msgid "Export failed" +msgstr "Export fehlgeschlagen" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Kennen Sie die Risiken, bevor Sie Dateien exportieren

Malware
Mit dieser Workstation können Sie Dateien sicher öffnen. Wenn Sie Dateien auf einem anderen Computer öffnen, kann sich eingebettete Malware auf Ihren Computer oder Ihr Netzwerk ausbreiten. Wenn Sie sich nicht sicher sind, wie Sie mit diesen Risiken umgehen sollen, drucken Sie die Datei bitte aus oder wenden Sie sich an Ihren Administrator.

Anonymität
Die von den Quellen eingereichten Dateien können Informationen oder versteckte Metadaten enthalten, die ihre Identität erkennen lassen. Um Ihre Quellen zu schützen, sollten Sie in Erwägung ziehen, die Dateien zu redigieren, bevor Sie sie auf Computern mit Netzwerkanschluss bearbeiten." + +msgid "Exporting: {}" +msgstr "Exportieren läuft: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Bitte legen Sie eines der speziell für die SecureDrop Workstation bereitgestellten Exportlaufwerke ein." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Entweder ist das Laufwerk nicht verschlüsselt, oder es stimmt etwas anderes nicht mit ihm." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Die angegebene Passphrase hat nicht funktioniert. Bitte versuchen Sie es erneut." + +msgid "See your administrator for help." +msgstr "Wenden Sie sich an Ihren Administrator, um Hilfe zu erhalten." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "Die Schaltfläche FORTSETZEN wird deaktiviert, bis die Export-VM bereit ist" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Seien Sie vorsichtig, wenn Sie mit Dateien außerhalb Ihres Workstation-Rechners arbeiten." + +msgid "SUBMIT" +msgstr "EINREICHEN" + +msgid "DONE" +msgstr "FERTIG" + +msgid "Preparing to print:
{}" +msgstr "Druckvorbereitung:
{}" + +msgid "Ready to print:
{}" +msgstr "Bereit zum Drucken:
{}" + +msgid "Connect USB printer" +msgstr "USB-Drucker verbinden" + +msgid "Printing failed" +msgstr "Drucken fehlgeschlagen" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Risiken beim Ausdrucken handhaben

QR-Codes und Webadressen
Niemals sollten Sie Webadressen eingeben und öffnen oder QR-Codes in gedruckten Dokumenten scannen, ohne Sicherheitsvorkehrungen zu treffen. Wenn Sie sich nicht sicher sind, wie Sie diese Risiken handhaben sollen, wenden Sie sich bitte an Ihren Administrator.

Gedruckte Punkte
Jeder Teil einer gedruckten Seite kann identifizierende Informationen enthalten, die für das bloße Auge unsichtbar sind, wie z. B. gedruckte Punkte. Bitte bedenken Sie dieses Risiko sorgfältig, wenn Sie mit gescannten Ausdrucken arbeiten oder diese veröffentlichen." + +msgid "Please connect your printer to a USB port." +msgstr "Bitte verbinden Sie Ihren Drucker mit einem USB-Anschluss." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "JA, DAS GESAMTE QUELLKONTO LÖSCHEN" + +msgid "Are you sure this is what you want?" +msgstr "Sind Sie sicher, dass Sie das wollen?" + +msgid "When the entire account for a source is deleted:" +msgstr "Wenn das gesamte Konto einer Quelle gelöscht wird:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Die Quelle wird sich nicht mehr mit ihrem Decknamen anmelden können." + +msgid "Your organization will not be able to send them replies." +msgstr "Ihre Organisation kann ihnen dann keine Antworten senden." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Alle Dateien und Nachrichten von dieser Quelle werden ebenfalls zerstört." + +#~ msgid "Entire source account" +#~ msgstr "Gesamtes Quellkonto" + +#~ msgid "Files and messages" +#~ msgstr "Dateien und Nachrichten" + +#~ msgid "DELETE" +#~ msgstr "LÖSCHEN" diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.mo b/securedrop_client/locale/es/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..53df98f8fc3fc8122a4bb3d1c4b08b5782f2ead0 GIT binary patch literal 12266 zcmbuFTZ|;vS;xzl5PNJVzQ#aeICf0z#M86c_2SETZ@n`;yKT?(jJs!cy}_`m>8_b6 zySu7gRXyYOYPm=Vl*oC3@L~|sK0p#8gNTEGAQa&NUI0Z%0fCS}2?+6mKtc);Acf!m zoKxLByS>6$T3hq4t~%H6^8dc`_5S_6xBgPV=OWifxbD9t2!0B@^ZWS2=eFB|;CAqK z@GkH^@Q1*M!4HF{!2h}_2wnz{+#CewXI%Tw+!+KXdH*@^qu@8d2f^=v8v1Sqqf780 zcpqpy9tAsmKMShe+u*I>S3tG@eNgki3;rPZP4N4{{{hwhfe*O(J_5eL_fw$SzX?77 zehH*$@JHZ1;Me{4Z-S5U{olZc!3RGW1l$JCf*%6Uf;I3WcrW;C;1l5Qfm+8uf!fD+ z!Mnlx_@i|_3ce3K4kDUh0sI8m0G|Pepk)7La1p$hMJ<5m!PmfF1{pHAi%BJihd|Bq z2zUy73Y47pz!vzspyYf9jouG_6qMYa05$(nP;xp6N*+t#{ou=>0bc_j0e=D1yuSl# zoIe3qz`p>s?hn&x8C(ae;1%#R_>cbk#~57e+5sh}FMv;j-vCd6cOq2vUjcs{d<)ck z-vRFcZ(|c$_x&J`f``CQf=5B=CjzC{p9dcYe;vF8ejU{MUO@Pg^Us2^)87Ig1^*2E zVesF<9|7em8)jE+O_P4KTCa(1z4 zg5V7A2cYKvLs0hdFQE2w3yYUO-3ih)_z6JO-=6?y!Dm73YYUVf-UQiF@GIa; z;8#IZAKZr!HSS}e=HCDjdGH#jaX$@ezF!5k-#_rr{}?>P_rC>W@OCB}f;m_R|JCEu zA9Hf}8Bp{6C-^?_4umf`-2*Oyk9+Ka8+`vVsP){25VZbBLGACT#|2PwZGsx-0w{U( zK|~q+9LT@m3;fYO{t|?$f`0}(;D3Ns@THHVcknInBKU3aJa`Uex4_>7&ww{$^e4dQ z!3OwgkADN6{WIWCf(#Mdj!-r4lOQf1oCPt_;8Wn!U=B)tUjk(Ze+M20{~MGX zD|4>h=RrOH2hf1`&ATah>K`<(mA+mY?E! znd?^n;&xDDzMo6Je1YqEu6eHGT>2muEB88hj7v846I}YNaouL`+#drV?f@6GAK3xw zwffV8XZ44V?BE%D=QvZhn78#?*@W!jESEmgvGgZhoZ>1!>)d>ROE&vKu4S&t&mDY0 zl=g#&Ea&LUllFE|ey^oKiG zzFPsMC)wg%T>8k)%1^Vr0bk^jExy1do59qABV3PiJ;)_J|0owGXFsw}`Ih~d#ntnT z<<;t9FuJQZ&X~Y#WoggkQMMaprbtbcgqz*SWKq8xM|q$}?X=fV^T?zb?UIfO?b~5+ zZ0E>{l`sjn<7C_Pvp6ZzL1D5ue>FdLh}PrTTqcPGkCNWZ;k(}bN)7Ug+Fi%lA2 z=Fo{oWTzhXBNHdKVcL(9gRSk{?JzN;0o!R(gmDse)X7fHZ6|FHdQnp3W-l&ww3;G( zRjbRR_8^OkAuXeJI4I&Y$>&Uc%M8r4TzGH=l;3eo%#rd37{YJttc_GbeDOT@hGh(%o ziC*ugS)tBbaaYQA=CBfW_gKkT_v>1Ore++w!)}D~q!eodwzE@S)E$l#Ht`Ojgh|T$ znKjb^BA?~S&_un>sMBH9JvXP7Z;tvymYX^S%COZ#`%R)k>ln@PJs5?RiV|@Yz|G1y|sCGz(^(xgDH1nwwstafsI!Fq=sx=mx7uMEmi)N|5Tr;Z; z)2cPk)tW)=rM1=OdQb~9I6iYOdSGCr&7_ib4LY!7fd;a87mCiU6uekbF*{Nd`zB8@ zKg$_W7q;BXQW(H8N?b6OCB%N1=lz{bYzkFaA={DlI%b%I`v_{5Nz7J=Q*_F2a2?)| z!)X2q@|ic6E(c4tnY8G3AV(y+v5OX+qwyWd-VDirbjNT&h^e`;N)`Q9Is>+o1xSjOr@yJUbotmJwK;Kc5G#Qj8bj7-SAxBG$91fi z!Q#pT2!NKxKBQXp5oJq%CrCM8iwjPbaeBP}IJzh}nrd$zz30!A2C-w$V#mF?7UmRhY6J zC){{19St#4hd@cZiIpsBlbk9dCpmo7&VBgEGp4;0W_UZ4jJb;Y>|mr`lO(`$rj3{; zE`PPIk&x(TBnN(kl3%XVmBp}G<-&z|a@ryyQ>FxFb5In-=2EhqIM<1&!x5o~yH>nD zCY@VRG*m`8WE)fR0qizWTwr#aH6V4fp4qG(MG+Ysk1AHHzifG=FYluxr6_KAH&)vT z@mnTTri(6Z7;<^+M7){k=i{8+oL`zf@39_FA2wWLM6t41GD=8$JTd#Vxt8L+O}1oy zlEBEFX8GDjPYmeh${lfOQ7#p*E~_2uOxY&C#Ghg`In@?N+jgVO^f>VN#4lA)!A<1M zR~ZnaV^K>ktSqpLV53C>w6wHbC$-w}u_!nf(-jhhZN&^u19@;>=OH9OM70@7$;{&0 zk=r5$pCru(7iz6pkm z$Xj~~ySejpNv|JeOxR-~Or;b&B|}uhJ?mcG7(vj?=Q)?GR4*3kMfc$HthwaR@CP53 z8OFrZGV{JV_c{<@PHJwQl(xepe#7Nc)2zr=2oPS++5ra-yJ%GoEMqC6kQ3nu-aft6 zc@tH**G>YvpNlq?z3dXyK=1tOgG>IVY*FsYHnIj7*zFI?23{7yrLa$7qixrJQMP?q z1|4>-7n^L5B*e!69{<))f6nO0V&ytDIrfg97>xvEm8)K z(&q7T!1(w~GtvpUvXXDdoyzIKc3xRe=grL8YNbhxQpd_7dFH&iP^&g8E31{osyVwl zzfynVQydRwl*ComvoOiKsy@t{rH$of)2Oc0%(2=^wZ43+y13ZHzE03I*&cAhs;oz0 zZ@ijgJ4MmY=MNpCEW;SlTyBG0hvUo~T0R7=Xearh@$-q>O54W4Ls5QcJj1++@|l(T zN^QLN!*idU;XGB~N|kj=JoBcAUM~*yyQDYISt8D(;`qk;QstR(J8f$#$||)420|b6 z=9$g7m|5!%VEoDwUXhc`_U+gF_>t$R&gjkY#5{c59DZ)*rOKHoAv##WoOjzZN9PV7 zo;xx_`K#7is5Z}3o8#NY;wqIeJjb37;tq~Zju@I9muiKgh`c}G2pUonv#)GXj7f}2 zX1g&>28j#VwwbMvoS_4XBz%fpRZ5ETZ4ll!agSPr&0j~=k@o&OomlTFat&ca0z{kc zI=e@kru4UzfAGMhrm#NVOJIq-&!N%3g_~zEbO>R@j z9vgDCGQR|}t32AKh}H>l-d0ScVTNM=3O)2Zg`=X3h0%}+d#T|}Z+D-mo$5o{Jo!Ju z-3oX4tF=IEA*5PRg&S4V5dSsRG=eW{V{E_9EF24DVGwp-8|Wmf(i$ODbgFalzP1KNPF}+5mwy{ln4M zE(>Ct+@LL@gp(35?SW*N=8zA%fO`xT#Le&(Bre0ysFdDFc_(eeYm?HBufElYO{9rr ze#oUXEJ`0NjfXC8XNWK(``t}PHg-(~u7*u(d7%>necftEB*`+Oj2aYc+{{P^%CTfQ z3Qfd9X+E^(Koh2(Y?3mN#6*dW?PlRDJ1-Sg7Ug0*Ji{VrFwzeRS43eo%xrYWGA71A zIyQJrvp<&p9t}@66qDBA?|#7~%M$*3HAfZg;vSYVHo|4pFtK|WK|W@UeIPyS-r8Sc zC%V=EsXDvT9o=xtuI&A_0R}%Z%!Kdp{uf0EImv)o6GcJOMYN4I%ZVtWxyi0_GjD~i zmWNfyW=4x08O;GRjJj%srYEFtnTwbpE7U8gB3Mtg(a8~~Jc7@#_B?#Wn`a*SmEujk zO>IidyMF~r!WJ_;B*o6({TkLe!7yl85}}2-hdCt>QqlZmP@@Jw*uae1-H=R9#t?7G zu6)T4y7w7AceT8o#bo6NDBJP6s(;#I>3!Iysu~nYSRt;-3}F{yeM8Qrc(H54#W=Jd zBmgXJ5N%rB%wS+th%BLpW>gj&nso>RJtqZXfLug1CK*J#>0EGnwb^97XKM>*S1Avc zf$Madxy_E0IF_$Y6QlQSnSFZx5~QYEgb`~Ba>;AQoGJ}GA5+AUg}rGObyw!@4yf+s{va=vEh84s1< zYGL^h6Y`Zr^+dyVpO%_!A<@w!dzwfV{50dn&I{!tQ(L)&Vcd%#2s4sZ+fbP~Dbz;f zWQC>DBHOSdmQ}^rZjC}C&N2==voa;C_T9A0nqdZb3y%(FBqStB9Mhc#>5?6@u zK8u2IR=LPn4W-6|{kOVBOlWjP$2P)Dl&?&APLloZl?GhmRN9L(MigO&J2>6LL4Ae# z<4V05EKM!zzauB?s(zz|VpMmYK?ZDf^A0G6|*3OAV5=N7#~m4Dta*L8ALq zo8xCQmz$|6KOZ7p0`w?iiU3^=Q^%djnXH_c$-7|gCFWVsmbU#c_7t!D5@w^Ex&OB6 znJz=H^2dLrg3+91l%60SUzM~h=yc{L$Zn`MsS(7db|e=u;~N_ZA?%`BcHrrV^ERmq zbk9kCRNzc06b#kKCEcPEggvTna?g*gZ6(?qC2h)vGobUa0My>|=E(1zMW}hu!o{e5 zM|gx30;h}}I#|ZN{9eo4>3f&j#2_~=uqMZ_D8nld+bCCr9tTz%PVLwa%O8hu_y$sB z`^aOOmFQ<8#{kmkC=y#?)_%}E$k7> zqNF-BwxEhsR8Mu3(uL)r_!?pJJu}wzCsf$AiE5q_3w^~^6sPg8;m+%i;|3u-VtI%X z;bY1$40rD+yJ6L_~l_7k?v6a2(6yb;L14-RGTDId;p8Hiq@DS zpsTVpEtc>=N4c5L=sGDs|GU^JKd}W`n+qyuS{{c{<{Jm+EmDkw`k$J~(S546eKf+~ zuV+rz9nPlu>gGh$4*TI762;X#DXPc^G_=7E)|@a6&zCiyQg>2&q=X}tsFg&any!9| z;QxE*vHWIq(!dPMbA#SZ(vs|ihOWd5bL-eV-eky+!;@Y!Wt$2JGo*dn`(LG)b$iWL3|<`zes*y z{Qne|+4%u6@WpenT}Bz)PX_D!haX>Ab{WpKR_&5zej$-9x>6j6PyQE3nGLA0e6=I) zzb(77q0w79w&OK*u*N)69}T?SPpLAyBWxgbj+SvvrMX<*v|{s6ab04E(<17t)JCA1 avfzB}SsD*0y>OI}yOd0EzLcga&;JX>QU@gf literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.po b/securedrop_client/locale/es/LC_MESSAGES/messages.po new file mode 100644 index 000000000..09b0bc87d --- /dev/null +++ b/securedrop_client/locale/es/LC_MESSAGES/messages.po @@ -0,0 +1,348 @@ +# Spanish translations for SecureDrop Client. +# Copyright (C) 2021 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-03-25 10:38+0000\n" +"Last-Translator: Zuhualime Akoochimoya \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} ya se está ejecutando" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "El servidor SecureDrop no puede ser alcanzado. Intentando reconectar..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"No se pudo alcanzar al sevidor SecureDrop. Por favor comprueba tus\n" +"conexiones a Internet y Tor e inténtalo de nuevo." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Esas credenciales no funcionaron. Por favor inténtalo de nuevo, y \n" +"asegúrate de usar un nuevo código de autenticación de dos factores." + +msgid "That didn't work. Please check everything and try again." +msgstr "Eso no funcionó. Por favor comprueba todo e inténtalo de nuevo." + +msgid "You must sign in to perform this action." +msgstr "Debes iniciar sesión para efectuar esta acción." + +msgid "Your session expired. Please log in again." +msgstr "Tu sesión expiró. Por favor iníciala de nuevo." + +msgid "Failed to update star." +msgstr "Fallo al actualizar estrella." + +msgid "Retrieving new messages" +msgstr "Descargando mensajes nuevos" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "El archivo no existe en el directorio de datos. Por favor, intenta volver a descargarlo." + +msgid "The file download failed. Please try again." +msgstr "La descarga del archivo falló. Por favor inténtalo de nuevo." + +msgid "Failed to delete conversation at server" +msgstr "Fallo al borrar conversación en el servidor" + +msgid "Failed to delete source at server" +msgstr "Fallo al borrar fuente en el servidor" + +#, fuzzy +#| msgid "All Files" +msgid "Download All Files" +msgstr "Todos los archivos" + +#, fuzzy +#| msgid "Deleting source account..." +msgid "Delete Source Account" +msgstr "Borrando cuenta de la fuente..." + +#, fuzzy +#| msgid "Deleting files and messages..." +msgid "Delete All Files and Messages" +msgstr "Borrando archivos y mensajes..." + +msgid "SecureDrop Client {}" +msgstr "Cliente SecureDrop {}" + +msgid "Quit" +msgstr "Salir" + +msgid "Last Refresh: {}" +msgstr "Último Refresco: {}" + +msgid "Last Refresh: never" +msgstr "Último Refresco: nunca" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "CERRAR SESIÓN" + +msgid "SIGN IN" +msgstr "INICIAR SESIÓN" + +msgid "Nothing to see just yet!" +msgstr "¡Nada para mirar por ahora!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Los envíos de la fuente serán listados a la izquierda, una vez que sean descargados y descifrados." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Esto es donde leerás mensajes, responderás a las fuentes y trabajarás con archivos." + +msgid "Select a source from the list, to:" +msgstr "Selecciona una fuente de la lista, para:" + +msgid "Read a conversation" +msgstr "Leer una conversación" + +msgid "View or retrieve files" +msgstr "Ver o descargar archivos" + +msgid "Send a response" +msgstr "Enviar una respuesta" + +msgid "Deleting files and messages..." +msgstr "Borrando archivos y mensajes..." + +msgid "Deleting source account..." +msgstr "Borrando cuenta de la fuente..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Todos los archivos y mensajes borrados para esta fuente —" + +msgid "Failed to send" +msgstr "Fallo al enviar" + +msgid " DOWNLOAD" +msgstr " DESCARGAR" + +msgid "EXPORT" +msgstr "EXPORTAR" + +msgid "PRINT" +msgstr "IMPRIMIR" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "ARCHIVO CIFRADO EN SERVIDOR" + +msgid "DOWNLOAD" +msgstr "DESCARGAR" + +msgid " DOWNLOADING " +msgstr " DESCARGANDO " + +msgid "Earlier files and messages deleted." +msgstr "Archivos y mensajes anteriores borrados." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Archivos y mensajes borrados\n" +"para esta fuente" + +msgid "Compose a reply to " +msgstr "Escribe una respuesta para " + +msgid "Awaiting encryption key" +msgstr "Esperando clave de cifrado" + +msgid " from server to enable replies" +msgstr " del servidor para habilitar respuestas" + +msgid "Sign in" +msgstr "Crear cuenta" + +msgid " to compose or send a reply" +msgstr " para componer o enviar una respuesta" + +msgid "Username" +msgstr "Nombre de Usuario" + +msgid "Passphrase" +msgstr "Frase de contraseña" + +msgid "Two-Factor Code" +msgstr "Código de autenticación de dos factores" + +msgid "SecureDrop Client v{}" +msgstr "Cliente SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Ese nombre de usuario no funcionará.\n" +"Debería tener al menos un largo de 3 caracteres." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Esa frase de contraseña no funcionará.\n" +"Debería tener entre 14 y 128 caracteres de largo." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Ese código de autenticación de dos factores no funcionará.\n" +"Debería contener solo numerales." + +msgid "SIGNING IN" +msgstr "CREANDO CUENTA" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Por favor ingresa un nombre de usuario, frase de contraseña y código de autenticación de dos factores." + +msgid "USE OFFLINE" +msgstr "USAR FUERA DE LÍNEA" + +#, fuzzy +#| msgid "Passphrase" +msgid "Show Passphrase" +msgstr "Frase de contraseña" + +msgid "CANCEL" +msgstr "CANCELAR" + +msgid "CONTINUE" +msgstr "CONTINUAR" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "SÍ, BORRAR ARCHIVOS Y MENSAJES" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Preservar la cuenta retendrá sus metadatos, y la habilidad de {source} de iniciar sesión en tu SecureDrop de nuevo." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "un archivo" +msgstr[1] "{file_count} archivos" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "una respuesta" +msgstr[1] "{reply_count} respuestas" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "un mensaje" +msgstr[1] "{message_count} mensajes" + +msgid "Preparing to export:
{}" +msgstr "Preparando para exportar:
{}" + +msgid "Ready to export:
{}" +msgstr "Listo para exportar:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Insertar unidad USB cifrada" + +msgid "Enter passphrase for USB drive" +msgstr "Ingresar frase de contraseña para unidad USB" + +msgid "Export successful" +msgstr "Exportación exitosa" + +msgid "Export failed" +msgstr "Fallo de exportación" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entiende los riesgos antes de exportar archivos

Malware
Esta estación de trabajo te permite abrir archivos en forma segura. Si abres archivos en otra computadora, cualquier malware incorporado podría diseminarse a tu computadora o red. Si no estás seguro de cómo gestionar este riesgo, por favor imprime el archivo, o contacta a tu administrador.

Anonimato
Los archivos enviados por fuentes podrían contener información o metadatos ocultos que identifican quiénes son. Para proteger a tus fuentes, por favor considera redactar los archivos antes de trabajar con ellos en computadoras conectadas en red." + +msgid "Exporting: {}" +msgstr "Exportando: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Por favor inserta una de las unidades de exportación provistas específicamente para la estación de trabajo SecureDrop." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "La unidad no está cifrada o bien hay algo más que no está correcto con ella." + +msgid "The passphrase provided did not work. Please try again." +msgstr "La frase de contraseña ingresada no funcionó. Por favor inténtalo de nuevo." + +msgid "See your administrator for help." +msgstr "Vé a tu administrador por ayuda." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "El botón CONTINUAR será deshabilitado hasta que la MV de Exportación esté lista" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Recuerda ser cuidadoso cuando trabajes con archivos fuera de tu estación de trabajo." + +msgid "SUBMIT" +msgstr "ENVIAR" + +msgid "DONE" +msgstr "HECHO" + +msgid "Preparing to print:
{}" +msgstr "Preparando para imprimir:
{}" + +msgid "Ready to print:
{}" +msgstr "Listo para imprimir:
{}" + +msgid "Connect USB printer" +msgstr "Conectar impresora USB" + +msgid "Printing failed" +msgstr "Fallo de impresión" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Gestionando los riesgos con impresiones

códigos QR y direcciones web
Nunca tipees ni abras direcciones web o escanees códigos QR contenidos en documentos impresos sin tomar precauciones de seguridad. Si no estás seguro acerca de cómo gestionar este riesgo, por favor contacta a tu administrador.

Puntos de impresora
Cualquier parte de una página impresa podría contener información identificatoria invisible al ojo desnudo, tales como puntos de impresora. Por favor considera este riesgo cuidadosamente al trabajar con o publicar impresiones escaneadas." + +msgid "Please connect your printer to a USB port." +msgstr "Por favor conecta tu impresora a un puerto USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "SÍ, BORRAR POR COMPLETO LA CUENTA DE LA FUENTE" + +msgid "Are you sure this is what you want?" +msgstr "¿Estás seguro de que esto es lo quieres?" + +msgid "When the entire account for a source is deleted:" +msgstr "Cuando la cuenta de una fuente es borrada por completo:" + +msgid "The source will not be able to log in with their codename again." +msgstr "La fuente no será capaz de iniciar sesión con su nombre en código de nuevo." + +msgid "Your organization will not be able to send them replies." +msgstr "Tu organización no será capaz de enviarle respuestas." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Todos los archivos y mensajes de esa fuente también serán destruidos." + +#~ msgid "Entire source account" +#~ msgstr "Cuenta de la fuente completa" + +#~ msgid "Files and messages" +#~ msgstr "Archivos y mensajes" + +#~ msgid "DELETE" +#~ msgstr "BORRAR" diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.mo b/securedrop_client/locale/hr/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7dc0e7e44d8e5ef0caed87c7e750a68f6d51ccd GIT binary patch literal 11722 zcmbuFTWn?5S;tq>v`L)=LXr}C39O`Tnh^WUcrv7kGdGWYX5!BH5?^MLkao0v&bGaM z&e{89Uyf@}M+H$72|5q0S_u^i$O8olaVZo6NJIj89soffh(JOWQlUISMc$|oqWu1A z?R_pDM`FTJw*ULGF5mt8);Ia5`|tRw;dh1WBU}%@$C%H9_q>lk{O-ETnD>M42k!+R z0Dl~O1pF{~2K=wvjCln-cDpf`$NczTxW|~&eE$mgQSdGBA@KX4mcEb0m|`9R9{_EM z$H6Ag&x0EG+u$AGH$jd66HxpA1^6NGJK&Fj{|##V2Y$%!_Yv>{&u2i5|04JS@V7vQ znm-4B1pHR{{2lNUJpTvy2>8$s8^f)67W`50d9V&%0q+NY9efh}V^DN_7Ze{q0Ph1I z;E(9~82DcBB#3Ct4EU4a0{9HL3rhCC56*)3L(~j-8GIG|WsoJ!y=*EuJPc}|N5M1T z)1c(M1FnE?fRgjw47wBiC@8r-32Oi2pyYHKlswLX4}!0N7JLDIyb<1 z@NYoT{b43u1Xsan@OAJk_%G%2V=OMZwm`}0H^EPWZ-HmPdl0JT&x4-^zXoc*?}K-P zcfo|{eh}o9c^Etj9tWkL5R_hD10M&!4qgSn1&Y242w!sk0w_EEUGQVzUxPmZz72jH zyzhg?+zvhsJ`Fw#e(yG8x*(=%KEq_$OA8zacR|_n*TD}l@vp$21ON45KR&YPn(sYO z_Vi6q_VH~{a{SK{e*hv1b0^H8dh;;Y1#6(j{VFIu{RSv`{0=Dp{8JFp%|C#Tfp3Gd zuZJG>dV3f=!}A$X<9`-JCFWN^?ehnq?0O%ReE$xVT)z!YfcL^2DmKr7lGh@57R*6R z(YyijpZQDvNRHnFVcp!zVDb4RXu)%!=-LFuPY2{bQ}E|G@N3{@@b5vbUqcyn@KrDa z-vCALlQ8*S@B}Ej&Vtk6r4oM$lwJNKD7ie2(6!$*_&#v1d|oP_Uj$`OS3t?72eOs< zMGz5~Z-BDHx4=8W?}Cfqzk|oX6Bye$Faghle+15g{{xDynJ0)9;Ln3kfqx51uD4^1 zp9GJB`o0BT0>1%@&%1CE?fbzJp8ze-&w_}^yj(ti9+bR)4V(nu1OxEx@_88}<<@)w zoC1HZ#D4=N_s1aS2)GX34t^Ot4t^E94U~>07x5^)i1*>2bSyu4h3k&;gYpAxI(dB> ze2ME*T-yI6mwvG6Wv-v*lAfh=`HyrVJzn8L^e(4h!cG^`t8DTp*F2Z>bPw0PT>7ne zaDSJF?qA?uK6QahwkA7}&B}fr;yTUsQ(TyW`<>#ie9Qgp?BeBxi;L5FKvCe?h9yzrTx~+G+p^aiU zFzJTz=xDchBZzH(!A272K@^8gO>&!a+e{ioCyevV?nL>PsL6wtsLR4ekw*D0Bf~~e zfX=sZ$D}b$JM;v#=RcQ0AD0BRb+ip7y5P{pZk!xBCFP$ikvOEp) zB&~U7s=ud}Bo9Q|O!6UKr(;M6(%dE+h_NEOtIayWu3sL0q9#m48@nPsiZ_z96NqH) zdr=liKM zJ5Vyv{i=x2)~w?=Y=m}$2JamCc5UTsMt%WF0Yz; zkP_ol@1i3MBW*U7tm}jW7c9^~8ubX#nUg{(R#Xf}8sffW3FhZwM%X4=?xYD3z(tfO zXDt^HyFr$9w^Bt@LWL8uTUnnYmKo*4)LkU88v#zyte%KB+ zi=G2HBH1PL!37KPiSFic)vkw(P|h2gP;_xG$jpPZW@ONWc&t~Z5q_3zpnN3ja8B5S zqXyZ5*i}a29CfGRL^Iim+ey%baKDOAk(FlM!lSP$os2oLIkWdfo4FXS*xg$?Dv{xO znO+PaXgS;<=Wb2mpUA?DzC&mW#7`L*Qp>{7ZWqki4f99L((>HGs#)qQ%v9N=bP$&X zeG+rEL*QM8$X~05lE*Ngz!s1g2OXm0kp7+d?<5l&L>T87&9FZ)@=PT$b;pJisLv^$ zF{QagxsdNon{~rRv=KD|B{&(?0q?v#NHDBVX%mo~9lw6fsWNM4T`G($-))B{AKjq7 znAi!U&8>VYRswE6dg|)66Gt@W)aW8k0`F=KS)-!_dnp~)N4=CNt~!8ZSOs*YHJ@pN z^{A~{Mx0*tHgHYKYbUA}bmtT^6rRfXvZR_s`<34GLJ{R=Ss5`HaTND%R|~yc`DjtM zz`K;qa@bJt4F#bf7wPy4nic-5Rsn%DO=n z=v@6RgQeWc#}WDzL(sG`Qr4wT4b4ilsoKx1xGKO`2AOPMbuKv)328E(fXdub;RZ`3 zaYMn$2O2)gewv|6hYIbh%9zcl8Gj;oC0IX1HC*;mtl0H|;Xs;l6NlV*C+ROSHb(%Z z@FrJ6)H*d)NKG<%-0eMi>>1nG3R1kCkc_!1_PNCQcU1#Yx2vhE>QNM#!N*bMYR#7|_w`l!XkRJH8>Jg-?2!0fBvhq~E?pY( zb?i{S8Jbt-ImcW{nmg}7PZ>U3y2gkiRk2i*1nt4b@at+V<$G6b$^0aNzB`Tc*hNn) z==aKe;1W^36mTvpj&-JNP+#It5t=;I7W-`bRmM6Tc*?>rQBuK8MP^c7jL#sVYytlD~oH(Gj%&XGqbox4jmq$Vr<1uFU;Ec`pU}m`TB}^iMq9;w3~TP zm-M<}%7z^XVJns32^FFS?l|{qM+kypWu0@?N%cyeT=6fijoYi`8GiI-RbdRhtt#(> zwbw|3Ijy~QQrZmSXwTPEhgp&95FoscvjYwuj%albT*OjFp(er+O8YFWt~61ldvRhM zKUZ8Sd(9W9M&C;6&DHXz8c}iO1~~&Xj{V(gKq(7zHR#gVXgK<>$hNP^po6yaVw)Cm zOnx-P@qhlAuUH*foLmnrj>}4e>7`RKg~A}&CcIC~H770+`V3O<%#*liP>rU{NmL7+>*eQm_n*~R#iPbRZ43TqU zE6=;x)R7}JW>_SwWiHJ%IndP5^AQ4zc*%|o-VfbQG+ZV;vXvegY%yiG(y{ru`TBtS z$=cB|PEMh`7kEaI2m8|g0jbJlasY$W5!ZU z7JCuxqU~_xfxcQse<#V>#f>+kJZx_VwiUEE$woHmB%8(lYf)m8=4R5PU1Iv*;-E{q zNh}4Po6T)G$hTa&Y0zUWwxi#&7d6-#`_-JP#X^Iul{Bf1ZB(|^8YNfHT8y0zq6eYhoQtPq4cy1+~aag4L z*CIMQlCvI_??^W;IM|L`P4=%7FkLx{HV4g?vr#)?x$TJbgWR1g;YwY-IHG>)KxCiY z9)8^KsWh}Zid5TDkveEZsD(3D)NF6-sJxl9X{{m>s=B>ijc7eW10gW!#MA-7UMC>| z!Mx)S)|IFt5Q%KggrT1c+L%A*W0g;YcDqA&TmxH~c6G?$?5yvXzM0>qtFVJC> zW>2ecB{wzV7JJm2K{G~Abo2<2_EG@t-c;GQQeSB(GQet0uRRPXaXgf-)tlt3R%{}I zG}ymh#6cTDWIYVMGu=U$>Mq{y3F|`Cljcx&`&34^@TF35^7(LIxbWny;e%8x}KjCh61D9 zuk?E9X*d@ZW=>(jEaT}geA5oZ8@l-f_nMhQ4c%l@&0P)kvUbZmUvc(=-l#+6>Kck` zzK)jYh+#T4vlfS$M! zkXRkXyuiv`R&`c8%JtzBN|U@vMk{US9**yFm(eY;F#b^qNwe!-4`TM3WDHueeX-;A zLcE%$)M3 zx#)Bpn9?m2CPa|2iB%^^iX+ zc~Esmm~xIPbyO#VQJTt$KF7M$+D-BAJ=N+Wv6qaK4=8f1i`x)`)QY_hS&L?ZQmHGe z@rG5^C zdm@P%v{`Hh>`Ya2(CZH@NJv_zo?^k_Iw}h&?^uif37~~m;ov}AIcybWkCLu+8qFO# zgd)cglhn-lqO)$xLc+PB6Dr+^vQUsksaj~+ITv~^%}*#sA~^kXGiSqFE-T9H(4)9P zJwA*^%I;WQl_M&bj#M97)l!ta z+wT0usjw)MJpXK661L_~$|X!O1ph z`pV5zNH-N8TuEIOOXdQnG+5T5&xJ-EamqrhO3hPbZMdg2p~gFO!rb^XR~(lVz~BF?F-T%{Q7GtVlG8@#v7p}vgniBc#fZ76 zBh`;ic%h#`15jfTna=sGcA$9T?aGBjZ>=g%28HWr8?chkp>G4@rxv-s$x;{lu2e{s`&j<|6F&uuEK_DbIFR HoyGqJVC`aL literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.po b/securedrop_client/locale/hr/LC_MESSAGES/messages.po new file mode 100644 index 000000000..5752db09c --- /dev/null +++ b/securedrop_client/locale/hr/LC_MESSAGES/messages.po @@ -0,0 +1,351 @@ +# Croatian translations for SecureDrop Client. +# Copyright (C) 2021 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-05-18 11:11+0000\n" +"Last-Translator: Igor K. \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "Aplikacija {application_name} je već pokrenuta" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Nije moguće doći do SecureDrop poslužitelja. Pokušavam se spojiti..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Nije moguće doći do SecureDrop poslužitelja. Molimo provjerite\n" +"svoju internet i Tor vezu, pa pokušajte opet." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Te vjerodajnice nisu uspjele. Molimo pokušajte opet\n" +"koristeći novi dvofaktorski kod." + +msgid "That didn't work. Please check everything and try again." +msgstr "To nije uspjelo. Provjerite sve i pokušajte opet." + +msgid "You must sign in to perform this action." +msgstr "Morate se prijaviti kako bi izvršili ovu radnju." + +msgid "Your session expired. Please log in again." +msgstr "Vaša sesija je istekla. Prijavite se opet." + +msgid "Failed to update star." +msgstr "Nije uspjelo ažuriranje zvijezdice." + +msgid "Retrieving new messages" +msgstr "Dohvaćanje novih poruka" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Datoteka ne postoji u direktoriju. Pokušajte ponovno preuzimanje." + +msgid "The file download failed. Please try again." +msgstr "Preuzimanje datoteke nije uspjelo. Pokušajte opet." + +msgid "Failed to delete conversation at server" +msgstr "Nije uspjelo brisanje razgovora na poslužitelju" + +msgid "Failed to delete source at server" +msgstr "Nije uspjelo brisanje izvora na poslužitelju" + +#, fuzzy +#| msgid "All Files" +msgid "Download All Files" +msgstr "Sve datoteke" + +#, fuzzy +#| msgid "Deleting source account..." +msgid "Delete Source Account" +msgstr "Brišem račun izvora..." + +#, fuzzy +#| msgid "Deleting files and messages..." +msgid "Delete All Files and Messages" +msgstr "Brišem datoteke i poruke..." + +msgid "SecureDrop Client {}" +msgstr "SecureDrop klijent{}" + +msgid "Quit" +msgstr "Izlaz" + +msgid "Last Refresh: {}" +msgstr "Posljednje osvježenje: {}" + +msgid "Last Refresh: never" +msgstr "Posljednje osvježenje: nikad" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "Odjava" + +msgid "SIGN IN" +msgstr "Prijava" + +msgid "Nothing to see just yet!" +msgstr "Trenutno nema ništa za vidjeti!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Predaje izvora će biti prikazane lijevo, nakon što se preuzmu i dekriptiraju." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Ovdje će te čitati poruke, odgovarati na izvore i raditi s datotekama." + +msgid "Select a source from the list, to:" +msgstr "Odaberite izvor sa popisa kako bi:" + +msgid "Read a conversation" +msgstr "Pročitali razgovor" + +msgid "View or retrieve files" +msgstr "Pogledali ili dohvatili datoteke" + +msgid "Send a response" +msgstr "Poslali odgovor" + +msgid "Deleting files and messages..." +msgstr "Brišem datoteke i poruke..." + +msgid "Deleting source account..." +msgstr "Brišem račun izvora..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Sve datoteke i poruke obrisane za ovaj izvor —" + +msgid "Failed to send" +msgstr "Slanje nije uspjelo" + +msgid " DOWNLOAD" +msgstr " Preuzimanje" + +msgid "EXPORT" +msgstr "Izvoz" + +msgid "PRINT" +msgstr "Ispis" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "Enkriptirana datoteka na poslužitelju" + +msgid "DOWNLOAD" +msgstr "Preuzimanje" + +msgid " DOWNLOADING " +msgstr " Preuzimanje " + +msgid "Earlier files and messages deleted." +msgstr "Ranije datoteke i poruke obrisane." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Datoteke i poruke obrisane\n" +"za izvor" + +msgid "Compose a reply to " +msgstr "Napišite odgovor za " + +msgid "Awaiting encryption key" +msgstr "Čekam enkripcisjki ključ" + +msgid " from server to enable replies" +msgstr " sa poslužitelja kako bi omogućio odgovore" + +msgid "Sign in" +msgstr "Prijava" + +msgid " to compose or send a reply" +msgstr " kako bi napisao ili poslao odgovor" + +msgid "Username" +msgstr "Korisničko ime" + +msgid "Passphrase" +msgstr "Lozinka" + +msgid "Two-Factor Code" +msgstr "Dvofaktorski kod" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop klijent v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"To korisničko ime neće raditi.\n" +"Trebalo bi biti barem 3 znaka dugo." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Ta lozinka neće raditi.\n" +"Morala bi biti između 14 i 128 znakova duga." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Taj dvofaktorski kod neće raditi.\n" +"Trebao bi sadržavati samo znamenke." + +msgid "SIGNING IN" +msgstr "Prijava" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Molimo unesite korisničko ime, lozinku i dvofaktorski kod." + +msgid "USE OFFLINE" +msgstr "Koristi offline" + +#, fuzzy +#| msgid "Passphrase" +msgid "Show Passphrase" +msgstr "Lozinka" + +msgid "CANCEL" +msgstr "Otkaži" + +msgid "CONTINUE" +msgstr "Nastavi" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "Da, obriši datoteke i poruke" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Očuvanje računa će zadržati njegove metapodatke i mogućnost da se {source} ponovno prijavi na Vaš SecureDrop." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "jedna datoteka" +msgstr[1] "{file_count} datoteke" +msgstr[2] "{file_count} datoteka" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "jedan odgovor" +msgstr[1] "{reply_count} odgovora" +msgstr[2] "{reply_count} odgovora" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "jedna poruka" +msgstr[1] "{message_count} poruke" +msgstr[2] "{message_count} poruka" + +msgid "Preparing to export:
{}" +msgstr "Priprema za izvoz:
{}" + +msgid "Ready to export:
{}" +msgstr "Spremno za izvoz:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Umetnite enkriptirani USB pogon" + +msgid "Enter passphrase for USB drive" +msgstr "Unesite lozinku za USB pogon" + +msgid "Export successful" +msgstr "Izvoz je uspio" + +msgid "Export failed" +msgstr "Izvoz nije uspio" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Razumijte rizike prije izvoza datoteka

Malware
Ova radna stanica Vam omogućuje sigurno otvaranje datoteka. Ako otvorite datoteke na drugom računalu, svaki će se usađeni malware moći proširiti na Vaše računalo ili mrežu. Ako niste sigurni kako upravljati ovim rizikom, molimo Vas da ispišete datoteku ili kontaktirate svog administratora.

Anonimnost
Datoteke koje je predao izvor mogu sadržavati informacije ili skrivene metapodatke koji identificiraju taj izvor. Kako bi zaštitili svoje izvore, razmotrite uređivanje datoteka prije nego radite s njima na računalima spojenim na mrežu." + +msgid "Exporting: {}" +msgstr "Izvoz:{}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Umetnite jedan od pogona za izvoz predviđenih specifično za SecureDrop radnu stanicu." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Ili pogon nije enkriptiran ili je nešto drugo pogrešno s njim." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Dana lozinka ne radi. Molimo pokušajte opet." + +msgid "See your administrator for help." +msgstr "Obratite se administratoru za pomoć." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "Gumb Nastavi će biti onemogućen sve dok Izvoz VM-a nije spreman" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Zapamtite - budite oprezni kad radite s datotekama izvan svoje radne stanice." + +msgid "SUBMIT" +msgstr "Predaj" + +msgid "DONE" +msgstr "Gotovo" + +msgid "Preparing to print:
{}" +msgstr "Pripremanje za ispis:
{}" + +msgid "Ready to print:
{}" +msgstr "Spremno za ispis:
{}" + +msgid "Connect USB printer" +msgstr "Spoji USB pisač" + +msgid "Printing failed" +msgstr "Ispis nije uspio" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Upravljanje rizicima ispisa

QR kodovi i web adrese
Nikad ne upisujte i ne otvarajte web adrese, i ne skenirajte QR kodove sadržane u ispisanim dokumentima bez poduzimanja sigurnosnih predstrožnosti. Ako niste sigurni kako upravljati ovim rizikom, kontaktirajte svog administratora.

Točke printera
Bilo koji dio ispisane stranice može sadržavati identificirajuće informacije nevidljive golom oku, tzv. točke printera. Pomno razmotrite rizik kad radite sa ili objavljujete skenirane ispise." + +msgid "Please connect your printer to a USB port." +msgstr "Molimo spojite pisač sa USB portom." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "Da, obriši cijeli račun izvora" + +msgid "Are you sure this is what you want?" +msgstr "Jeste li sigurni da to stvarno želite?" + +msgid "When the entire account for a source is deleted:" +msgstr "Kad je cijeli račun izvora obrisan:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Izvor se neće moći prijaviti sa svojim kodnim imenom." + +msgid "Your organization will not be able to send them replies." +msgstr "Vaša organizacija mu neće moći slati odgovore." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Sve datoteke i poruke tog izvora će također biti uništene." + +#~ msgid "Entire source account" +#~ msgstr "Cijeli račun izvora" + +#~ msgid "Files and messages" +#~ msgstr "Datoteke i poruke" + +#~ msgid "DELETE" +#~ msgstr "Obriši" diff --git a/securedrop_client/locale/is/LC_MESSAGES/messages.mo b/securedrop_client/locale/is/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..8873e11c45dc36201a86a48c6d26d65721f13118 GIT binary patch literal 12335 zcmcJVYm6klJcH5rm*`4m$_2#zJOjmc; zPIYyss(L1!%@T|f3xyyoh4@E=3>#pHC5((#S|lScQHp?skdX2VA%sLEB0vF@f0jXl z=RK$TGP~mh8`0XDx2x)0zVm(WcR8o`AKrS~S3N%Gxqh1K?YDZ~=fOMPz#l$udXwkf z4&Dyl3BC>dS@0h4r@%+Rmv8aBPk@JC=Xq!6Jnvzif9Vd-dk^?m;7@@64r<6ZFbGY( zJHfYs?=0|su*Ll`@HX&wLACn^_%q-igYN+U2Gsoj1il-*?Jb`7R`71{UEpC*^E?J> z{tfUka2Hg+Z-I36{t^6f@IQ+CTki6_4{(1Mcn|ndkXPP0@SR{6tb(5hKLmao)cijH zwT?S}%=7r?8U9F)L*VPdM?qBLodWL%KMp;1Vc3e*tWOe-28|@1oHg!3RL;??F)WS3v1y6_g$u;M>6vG~h3R_kzC- zYTj=Z_#IH=eHUB<{}q({57K!R{4`hruY<=y4X*noQ1X2dwE6-+%KZ<(N5K0~s`_65 zKMDQ`sCnPPBHj$X50w0eKUU?%>>-j2(3wW17t@DpSROwv@zW{y*lzq+n+`|Ga=d;{UILTJIIm zfZqny|9i#zmqFS2U67uky!U`junJ1`zDB~yuSq{&%c59fiHv7?|V^_#@z%B z7=r8Im%xvLe+Mc~yp=&E*8+&DytU%K18N;#1Qj>F49c&b2A9F>Un25B?%}7~{(xUja4W)dF7xrH{WX?!N=d9)Ayt zPcMNdz`IyH|GcyOQTr!A+2_mP?ci^LDR>1GKi&$dABU!GvNK8?DGi_Re7H+?!OLV0`HsP>%i}U(&xW`w}6<}@?!-&&b7`p z`;iVM&nLKU;}Tci#HG34$OVn;`W^*;f$IpDK9XJht8qQV^*Gn3xb%@;&f9P9j{zjJ z;;XnJK0pi02f+HbaG6V-)Mv?o^_koGzFFL#Ebt!i5w1Gd!(5-_(nmgWCzm+=7B1O# z_A|!~Dz_h0Y<*BS@^O8{z41qSdjS{Xr1#Z*Aw^_G2>{aJwI8ei#QWb+VK5wbkDq_JTM|&0d&w zB~9k9-i%$ zJnIQtEFx@=BzhRP`$^B2$b8=o(@^$7$gCTf*xzB2SMi{InR}e+uPb%;6RRmHPTC#}x1uoZTIHd5DSB+;v}{ek88b|p$+8l~+TCmg zNE?{oGlPDTsdGDwWNb%=H9y)zlBw;R5<*imj$L6CU_2Sca=>LV- znLn{K9isAio{UV;+X`AOr0%&nt$tI??;~#C8BoMl53M&2GRZNS<5iHt>c#3n^3H3t z|2TzD+((ibVlZVlWVx~F1)1OSGaq^UY)m9P z87o`Lj70acY4$N^KMTfOE+&{Ix}!-FwEXR_e6_HGY;F%TLY&MRMeTZknsAb?6 z5zoiH#PfziNwA#s2SwDJI$1Z^-f_&DtI7G%hh1#bF+w_#7h8`>Fhqv{R`!s9^~ z(Rn$*1p*^&IUcC>TA?kkc-ydaFqQ4?{xHtm(}}a~({H)V1RByhvg_u%ZuV7wFOK@S z#AH6NT3^~YcdA)kHY>H&s#&j_Ms?#%b;GMZerkQA=~exN%#a*p%a)ZLTU7}nHpF1T zB-|yir&f!FSs(@)Q4{+n?L%4{X@ZCtyO;Ed8#WGw8DrTnI`GqU&`lJB2{6`3c4V(= zBaLbMI8AGOM=Zo!QX*dQgw-#aig1SZ){3*8O;_FzVjr~KzZDhqy{T|GepGL?-43z%xb-2uU~2t zZmhqwf=S2FEvg?=gtV>pT!L{6Q_kxvG4j4;(m}8tw!>{-*-l)!!D-JqZSw&9R_H8Y5K-r@7n;ObKr7khWE`7$} zN{)uPz;VjoOL2sns2>Z#L~070P$LlW782A`-@#*~M>e zerg}uoOMH~Xl>OEqCuHnky5ZKt^PP3WqIOEoP{mBq>HR3B(IVlyPwkWs)3YJ43v2!0f{Gi$H`U&1o zJchmse0DJEve}@3I0uc`k6m$VT_t80kWfPuBaGwCD|AH|7OO%zGao)kh`@|12eUQI zGE(?hv#l`IcB#ewAqyj`-XbBLSyR$exjAAP2b2x)I95_%c3WJab<<32$&aB(3ofoI zORK-QJ+W8evlF8zX%ud)wlnItkx^wZwzN6O6}dCXW~N_}zf-(Ra047 zTHhq6&bCm^)i9O%vRSJ(8kG~(hIfwgwx=|lI!~AO20_AvJp^GY)#rT*Nj2QF?iGb7 zf@VdLbJ1$`eAYkj9$cC?7mE%4{)gi*IP-KGk_vW=Q`2n1d02C68`bgS@UyO%I*3K~ z_yFbgEDzX~SfO>SU?Y|?3_8UT3Vs%>D=4b;ua$UqJ?Cxhd&$+Ip57JGdl!o@;}+vp z*+!Oto?ZTE+@R2fchMhk>alI*KQC@y5~2Obda+4{aZJASi0j||<=?awv(@XqdV6g5 z8|yMd7Yc>`1;Tx))+(JL$YHcaQ`-(ALTI>cJ~&Mw_swkt+CZ1q(oWba9UpemQnSBk z=1#4bHpp7)T3V*eTr}sZm5tKcdTF_0POdMm)jsqwwi9zI>q^bUkJCtp6N_eLb9L3! zD{EDAq`FqAtv*s&UfzIV$7mXNhHS-3&A{)?%5$WfWrK8aVS#fSMhVKPO?)kOK4mPu zKxolw(uL{snXjd7n;RFxbYVKjBKn+LtF2Y1>pxU}V2-UCwXvaeSjU zM`QCobLatc&rx&8eC~6`-9BKBa)0QdxyMT|S`lZ%czk+tdZV2+ne(lrWJ%Qfrs#OzQWxRCU-+J48Ze%1}S7khEbO-*gx^jCV4>H;U7Y zFlEX^ahHTmqjj~>ksqicLFpRM?uHz8@rW1 z7s0x)Ykf0NP*ctZ9W^EX^q-Yi>Er&@WjXNIbK}XVzm8#`auVOJf zkR{Ppm>?C_<}t7B!elphK-bs_BSkEh3`r*gTeYcqI~rxs5u%AJ`DJ+Ij_Dc$GIvOT z=g4%br2H90X)D7p%dbVdK1xXteJ2XSHbpE$TBf)>)jv+E}VsXfB6u)1u4BVQOZ6+cIl&2hBD#ffJ7 zCBZ1qvGDy4JZgtY8{aF8FB%Y_FxN=&03YZvl{}yN%5k4Kj~EhVhW(B@>g{Yx`slQ9 zEXRRf*~_1fBJNXMz~AaKAP1EE3?QxbT+p^*jmJ}=VIlO^bedki-r;CH(-~AEjT8aR zlJRv zno8CkcIYrPbJCXLf~@0=WcxKKVNsI(-2#8nP}~lZ{A%0wOLzOmZxcbw-s<{e628cZ z)sZq9A;GEK>ey;~qI^$HLRpb$&0Lx=1-Z%V;lJssMyr2&HR~1^RLuv-pcB^=A-ESYaD2jGnFzA5W6sc#f8`IE+rYn z*Qrxm+Oc8X8CRCDE~PJy5;P1r!0+zrQ4yit+ui&*ZT%JF^%idhFBVvc5Ql%o=kn<83!CuI=@)t0YO;m(Jv78{M zpZUo09ly}*OoUNTcI5!!r0nsdV3=&>FV4>K>Q6%_qgV|M<5xdI!xfr}Hds#i1c392sy(DZ|g8ak0+nf$F$`7m2kIcPzB-%Y&&tOjqW|9?udbPr3Tt zOx^aRvZ3#-1}Uy#ozWwQO6Q6ZiU5yj%$o4|kDepgyoxJ1mNx!WO_@j3alPy~tQTfGWM}wn|G^3a(duM`(%6(su zlw;|j)rW7K+&aRz<6CTv0=?t5TAxIF7ZF7vezf6a7xx|~ul*xa@#CS!7W+`w#ukl_ z>+$PoIA2s5G8V+U!bV2Bq>1-lg>g2q`)wBz6mqGMp0Op2HmdX_;1QI|=A5g~q$IK_ z|4*UAQO!u(lp^yN-6pG$Y%ZYNk;-%VlWf>5myrO`RjlifmyvYFYj=!>BaaSsRk5YW zc7smmf={*L!k8744bu%HpCpO8a#GdVkUGL`OVOa+mGPT5H3%nVew!UoA?QrtylKE2 zMD@$P@=lo};C(XA7HFm$b40}dBtejIp_pIQ!nMb`UX*RK;kA_JFUqjH`LimuKR7uZ zzE6n|E82Mbnv1#(Y=g2@lv$N4Z(Jb0sVLf?){6{kJ(NIg)N^Xp&B34(*qUZ)*c+I! zzr)GNrUUXgg-pz4x5{=RWe;Md)a7KfTUWTyy}Gpf$!6)(pz zg8%D+JI!u4@@pg^TMOK@N0^Xok{j_G>?MXf%Fk39R*w*MuH*0QXa~xPNV=mftWGit z2YW&1=#*&+UBtNq$x9||9>i&{zE0s!1zK%3tMwC2{oFdv>%;?M%lLT66+AAWN;&o{ zz*X1{=GRNAoAlWdTNa^=>cJnJepLaUVkDY6LLWwQrB+xZu!X0iCnswXk^QDUqqAia*3|Kl zG>8wo^WL&)DCdhVcD0VjFuLp!gq$AsA4nHAb8m~v^rkcE37Hv%qRi%p{fE--=, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-09 04:11+0000\n" +"Last-Translator: Sveinn í Felli \n" +"Language-Team: Icelandic \n" +"Language: is\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} er þegar í gangi" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Tókst ekki að ná sambandi við SecureDrop-þjóninn. Reyni aftur að tengjast..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Tókst ekki að ná sambandi við SecureDrop-þjóninn. Athugaðu \n" +"tenginguna þína við Tor og internetið og prófaðu svo aftur." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Þessi auðkenni virkuðu ekki. Prófaðu aftur og \n" +"gakktu úr skugga um að þú notir nýjan tveggja-þátta kóða." + +msgid "That didn't work. Please check everything and try again." +msgstr "Þetta virkaði ekki. Yfirfarðu allt og reyndu aftur." + +msgid "You must sign in to perform this action." +msgstr "Þú verður að skrá þig inn til að framkvæma þessa aðgerð." + +msgid "Your session expired. Please log in again." +msgstr "Setan þin er útrunnin. Skráðu þig aftur inn." + +msgid "Failed to update star." +msgstr "Mistókst að uppfæra stjörnu." + +msgid "Retrieving new messages" +msgstr "Tek á móti nýjum skilaboðum" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Skráin er ekki til staðar í gagnamöppunni. Prófaðu að sækja hana aftur." + +msgid "The file download failed. Please try again." +msgstr "Mistókst að sækja skrána. Reyndu aftur." + +msgid "Failed to delete conversation at server" +msgstr "Mistókst að eyða samtali á netþjóni" + +msgid "Failed to delete source at server" +msgstr "Mistókst að eyða heimildarmanni á netþjóni" + +msgid "Download All Files" +msgstr "Sækja allar skrár" + +msgid "Delete Source Account" +msgstr "Eyði aðgangi heimildarmanns" + +msgid "Delete All Files and Messages" +msgstr "Eyða öllum skrám og skilaboðum" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop biðlari {}" + +msgid "Quit" +msgstr "Hætta" + +msgid "Last Refresh: {}" +msgstr "Síðasti endurlestur: {}" + +msgid "Last Refresh: never" +msgstr "Síðasti endurlestur: aldrei" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "SKRÁ ÚT" + +msgid "SIGN IN" +msgstr "SKRÁ INN" + +msgid "Nothing to see just yet!" +msgstr "Ekkert að sjá hér ennþá!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Innsendar skrár heimildarmanna munu birtast hér til vinstri, eftir að þær hafa verið sóttar og afkóðaðar." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Þetta er þar sem þú munt lesa skilaboð, svara heimildarmönnum og vinna með skrár." + +msgid "Select a source from the list, to:" +msgstr "Veldu heimildarmann af listanum, til að:" + +msgid "Read a conversation" +msgstr "Lesa samtal" + +msgid "View or retrieve files" +msgstr "Skoða eða sækja skrár" + +msgid "Send a response" +msgstr "Senda svar" + +msgid "Deleting files and messages..." +msgstr "Eyði skrám og skilaboðum..." + +msgid "Deleting source account..." +msgstr "Eyði aðgangi heimildarmanns..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Öllum skrám og skilaboðum eytt fyrir þennan heimildarmann —" + +msgid "Failed to send" +msgstr "Mistókst að senda" + +msgid " DOWNLOAD" +msgstr " SÆKJA" + +msgid "EXPORT" +msgstr "FLYTJA ÚT" + +msgid "PRINT" +msgstr "PRENTA" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "DULRITUÐ SKRÁ Á NETÞJÓNI" + +msgid "DOWNLOAD" +msgstr "SÆKJA" + +msgid " DOWNLOADING " +msgstr " SÆKI GÖGN " + +msgid "Earlier files and messages deleted." +msgstr "Eldri skrám og skilaboðum eytt." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Skrám og skilaboðum eytt\n" +" fyrir þennan heimildarmann" + +msgid "Compose a reply to " +msgstr "Semja svar til " + +msgid "Awaiting encryption key" +msgstr "Bíð eftir dulritunarlykli" + +msgid " from server to enable replies" +msgstr " frá netþjóni til að virkja svör" + +msgid "Sign in" +msgstr "Skrá inn" + +msgid " to compose or send a reply" +msgstr " til að semja eða senda svör" + +msgid "Username" +msgstr "Notandanafn" + +msgid "Passphrase" +msgstr "Lykilorð" + +msgid "Two-Factor Code" +msgstr "Teggja-þátta kóði" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop biðlari útg.{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Þetta notandanafn mun ekki virka.\n" +"Ætti að vera a.m.k. 3 stafa langt." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Þetta lykilorð mun ekki virka.\n" +"Ætti að vera milli 14 og 128 stafa langt." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Þessi tveggja-þátta kóði mun ekki virka.\n" +"Hann ætti einungis að innihalda tölustafi." + +msgid "SIGNING IN" +msgstr "SKRÁI INN" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Settu inn notandanafn, lykilorð og tvíþátta auðkenningarkóða." + +msgid "USE OFFLINE" +msgstr "NOTA ÓNETTENGT" + +msgid "Show Passphrase" +msgstr "Birta lykilorð" + +msgid "CANCEL" +msgstr "HÆTTA VIÐ" + +msgid "CONTINUE" +msgstr "HALDA ÁFRAM" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "JÁ, EYÐA SKRÁM OG SKILABOÐUM" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} úr aðgangi heimildarmannsins {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Sé aðgangnum haldið, geymast lýsigögn hans og möguleikinn fyrir {source} til að skrá sig aftur inn á SecureDrop hjá þér." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "ein skrá" +msgstr[1] "{file_count} skrár" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "eitt svar" +msgstr[1] "{reply_count} svör" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "ein skilaboð" +msgstr[1] "{message_count} skilaboð" + +msgid "Preparing to export:
{}" +msgstr "Undirbý útflutning:
{}" + +msgid "Ready to export:
{}" +msgstr "Tilbúið að flytja út:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Settu inn dulritað USB-drif" + +msgid "Enter passphrase for USB drive" +msgstr "Settu inn lykilorð fyrir USB-drifið" + +msgid "Export successful" +msgstr "Útflutningur tókst" + +msgid "Export failed" +msgstr "Útflutningur mistókst" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Skilningur á áhættu við að flytja út skrár

Spilliforrit
Þessi vinnutölva gerir kleift að opna skrár á öruggan máta. Ef þú opnar skrár á annarri tölvu, áttu á hættu að ígrædd spilliforrit smiti þá tölvu eða breiðist út á netkerfinu. Ef þú ert ekki viss um hvernig best sé að gæta öryggis svið þessar aðstæður, ættirðu að prenta skrána eða hafa samband við kerfisstjórann þinn.

Nafnleysi
Skrár sem heimildarmenn senda inn geta innihaldið upplýsingar eða falin lýsigögn sem gætu varpað ljósi á hverjir þeir eru. Til að vernda heimildarmenn þína ættirðu að yfirfara skrárnar og breyta þeim áður en þú ferð að vinna með skrárnar á nettengdum tölvum." + +msgid "Exporting: {}" +msgstr "Flyt út: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Settu inn eitt af útflutningsdrifunum sem útbúin hafa verið sérstaklega fyrir SecureDrop-vinnutölvuna." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Annað hvort er drifið ekki dulritað eða að það er eitthvað annað að því." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Uppgefið lykilorð virkaði ekki. Reyndu aftur." + +msgid "See your administrator for help." +msgstr "Hafðu samband við kerfisstjórann þinn til að fá frekari aðstoð." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "HALDA ÁFRAM hnappurinn verður óvirkur þar til útflutnings-sýndarvélin (Export VM) er tilbúin" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Mundu eftir að fara varlega þegar þú ert að vinna með skrár utan vinnutölvunnar þinnar." + +msgid "SUBMIT" +msgstr "SENDA INN" + +msgid "DONE" +msgstr "LOKIÐ" + +msgid "Preparing to print:
{}" +msgstr "Undirbý prentun:
{}" + +msgid "Ready to print:
{}" +msgstr "Tilbúið að prenta:
{}" + +msgid "Connect USB printer" +msgstr "Tengdu USB-prentara" + +msgid "Printing failed" +msgstr "Prentun mistókst" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Áhættumat við útprentun

QR-kóðar og vefslóðir
Aldrei skal skrifa og opna vefslóðir eða skanna QR-kóða úr prentuðu efni án þess að gera öryggisráðstafanir. Ef þú ert ekki viss um hvernig best sé að gæta öryggis svið þessar aðstæður, ættirðu að hafa samband við kerfisstjórann þinn.

Punktamynstur prentara
Allir hlutar útprentaðrar síðu geta innihaldið auðkennanleg mynstur prentdíla sem sjást ekki með berum augum. Mundu eftir þeirri áhættu þegar þú ert að vinna með eða birta skannað prentefni." + +msgid "Please connect your printer to a USB port." +msgstr "Tengdu prentarann þinn við USB-tengi." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "JÁ, EYÐA ÖLLUM AÐGANGI HEIMILDARMANNS" + +msgid "Are you sure this is what you want?" +msgstr "Ertu viss um að þetta sé það sem þú viljir?" + +msgid "When the entire account for a source is deleted:" +msgstr "Þegar öllum notandaaðgangi heimildarmanns er eytt:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Heimildarmaðurinn mun ekki geta skráð sig inn aftur með kóðanafninu sínu." + +msgid "Your organization will not be able to send them replies." +msgstr "Þið munið ekki geta sent þeim svör." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Öllum skilaboðum og skrám frá þessum heimildarmanni verður einnig eytt." + +#~ msgid "Entire source account" +#~ msgstr "Öllum aðgangi heimildarmanns" + +#~ msgid "Files and messages" +#~ msgstr "Skrár og skilaboð" + +#~ msgid "DELETE" +#~ msgstr "EYÐA" diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.mo b/securedrop_client/locale/it/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..fb32c62fb1d62d1ff1abf9bd7b3505d8213d5211 GIT binary patch literal 1739 zcmaKsO>Y}T7{>=%T3A4W!T}_Z9uBC1X4g&OP&o}?Vh1eQN$NPzA|W){eY~D#J+sWr z+D)s93ts`Q<%HnMol`HIxNzYDXAXP_{|f$LeUSFpas zdLHXftZ-d^Oo$BJ055=FgD-&JgU^9Kf@i^>!56__z<0qvz)RrT<3fB24#79UAHdha z-$4AtnKMG%$KG?`6wlwnS@84f6GFTUUIAYMdtiveVEBFuya9dzCg87N$n*R;*nkDN z2HpoloS#615l>@|tsniANYLDqYEbI5wel%Nc?zSvbm6rZ0M$8GHP1 zgY~-lXd;i99QqhyS8yOv<&6By#3Pydx?dS5;$~>3W9LHO_;#rf=hSIoa#CpLyp4Bd zSr#glp~atRIpKSx9LWMFmz|KUv_`1{-PyP17EU7WX7NXCgXbo7y)2Z}w6^T$8_|GE zV}0Crxys`AtK7vy)1+vBFCOqz1;e;4JvZrQr!|QCdvUu(AMQ2#-AkYB?RKJYi1E-$ z?FxyCnzVD+>(Oqj-=S-reyiJiuhni3ItK^uV5`n6nR7g3Iay|NZR~yNnvKSckKlt7 zS8FeW_7Y?BMmevs-PV;&n%{0| zdTom~HlrKy2dvr78}sqJJbF9XcqRI9m`P0-fqG=>LE<2rp_DV-^@3KmlsC*lA;;D>zWy&^?n0K{S8)xfG_SrBPpnbi7Guu&nfY#RYmhpV>Q@Syk^HRr(GzE%oZ|bz+Jn8i_wW z2tkE3Di^w4Y0`CyK>%rJY*sOiq=(iOa+(hs ZO(GsK!4JNpTs`, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.7.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-27 19:09+0000\n" +"Last-Translator: Claudio Arseni \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} è già in esecuzione" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Impossibile raggiungere il sevrer SecureDrop. Nuovo tentativo di connessione in corso..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Impossibile raggiungere il server SecureDrop. Verificare la propria \n" +"connessione a Internet e a Tor, quindi riprovare." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Quelle credenziali non funzionano. Riprovare, e \n" +"assicurarsi di usare un nuovo codice a due fattori." + +msgid "That didn't work. Please check everything and try again." +msgstr "" + +msgid "You must sign in to perform this action." +msgstr "" + +msgid "Your session expired. Please log in again." +msgstr "Sessione scaduta. Effettuare nuovamente l'accesso." + +msgid "Failed to update star." +msgstr "" + +msgid "Retrieving new messages" +msgstr "" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "" + +msgid "The file download failed. Please try again." +msgstr "Scaricamento del file non riuscito. Riprovare." + +msgid "Failed to delete conversation at server" +msgstr "" + +msgid "Failed to delete source at server" +msgstr "" + +msgid "Download All Files" +msgstr "Scarica tutti i file" + +msgid "Delete Source Account" +msgstr "" + +msgid "Delete All Files and Messages" +msgstr "" + +msgid "SecureDrop Client {}" +msgstr "Client SecureDrop {}" + +msgid "Quit" +msgstr "Esci" + +msgid "Last Refresh: {}" +msgstr "Ultimo aggiornamento: {}" + +msgid "Last Refresh: never" +msgstr "Ultimo aggiornamento: mai" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "" + +msgid "SIGN IN" +msgstr "" + +msgid "Nothing to see just yet!" +msgstr "" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "" + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "" + +msgid "Select a source from the list, to:" +msgstr "" + +msgid "Read a conversation" +msgstr "" + +msgid "View or retrieve files" +msgstr "" + +msgid "Send a response" +msgstr "" + +msgid "Deleting files and messages..." +msgstr "" + +msgid "Deleting source account..." +msgstr "" + +msgid "— All files and messages deleted for this source —" +msgstr "" + +msgid "Failed to send" +msgstr "" + +msgid " DOWNLOAD" +msgstr "" + +msgid "EXPORT" +msgstr "" + +msgid "PRINT" +msgstr "" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "" + +msgid "DOWNLOAD" +msgstr "" + +msgid " DOWNLOADING " +msgstr "" + +msgid "Earlier files and messages deleted." +msgstr "" + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" + +msgid "Compose a reply to " +msgstr "" + +msgid "Awaiting encryption key" +msgstr "" + +msgid " from server to enable replies" +msgstr "" + +msgid "Sign in" +msgstr "" + +msgid " to compose or send a reply" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "Passphrase" +msgstr "" + +msgid "Two-Factor Code" +msgstr "" + +msgid "SecureDrop Client v{}" +msgstr "" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" + +msgid "SIGNING IN" +msgstr "" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "" + +msgid "USE OFFLINE" +msgstr "" + +msgid "Show Passphrase" +msgstr "" + +msgid "CANCEL" +msgstr "" + +msgid "CONTINUE" +msgstr "" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "" + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "" +msgstr[1] "" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "" +msgstr[1] "" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "" +msgstr[1] "" + +msgid "Preparing to export:
{}" +msgstr "" + +msgid "Ready to export:
{}" +msgstr "" + +msgid "Insert encrypted USB drive" +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "" + +msgid "Export successful" +msgstr "" + +msgid "Export failed" +msgstr "" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "" + +msgid "Exporting: {}" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "" + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "" + +msgid "See your administrator for help." +msgstr "" + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "" + +msgid "SUBMIT" +msgstr "" + +msgid "DONE" +msgstr "" + +msgid "Preparing to print:
{}" +msgstr "" + +msgid "Ready to print:
{}" +msgstr "" + +msgid "Connect USB printer" +msgstr "" + +msgid "Printing failed" +msgstr "" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "" + +msgid "Please connect your printer to a USB port." +msgstr "" + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "" + +msgid "Are you sure this is what you want?" +msgstr "" + +msgid "When the entire account for a source is deleted:" +msgstr "" + +msgid "The source will not be able to log in with their codename again." +msgstr "" + +msgid "Your organization will not be able to send them replies." +msgstr "" + +msgid "All files and messages from that source will also be destroyed." +msgstr "" diff --git a/securedrop_client/locale/messages.pot b/securedrop_client/locale/messages.pot new file mode 100644 index 000000000..3b84630b6 --- /dev/null +++ b/securedrop_client/locale/messages.pot @@ -0,0 +1,353 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2023 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.9.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +msgid "{application_name} is already running" +msgstr "" + +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "" + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" + +msgid "That didn't work. Please check everything and try again." +msgstr "" + +msgid "You must sign in to perform this action." +msgstr "" + +msgid "Your session expired. Please log in again." +msgstr "" + +msgid "Failed to update star." +msgstr "" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "" + +msgid "The file download failed. Please try again." +msgstr "" + +msgid "Failed to delete conversation at server" +msgstr "" + +msgid "Failed to delete source at server" +msgstr "" + +msgid "No messages." +msgstr "" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" +msgstr "" + +msgid "Delete Source Account" +msgstr "" + +msgid "Delete All Files and Messages" +msgstr "" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" + +msgid "SecureDrop Client {}" +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "Last Refresh: {}" +msgstr "" + +msgid "Last Refresh: never" +msgstr "" + +msgid "{}" +msgstr "" + +msgid "SIGN OUT" +msgstr "" + +msgid "SIGN IN" +msgstr "" + +msgid "Nothing to see just yet!" +msgstr "" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "" + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "" + +msgid "Select a source from the list, to:" +msgstr "" + +msgid "Read a conversation" +msgstr "" + +msgid "View or retrieve files" +msgstr "" + +msgid "Send a response" +msgstr "" + +msgid "Deleting files and messages…" +msgstr "" + +msgid "Deleting source account…" +msgstr "" + +msgid "— All files and messages deleted for this source —" +msgstr "" + +msgid "Failed to send" +msgstr "" + +msgid " DOWNLOAD" +msgstr "" + +msgid "EXPORT" +msgstr "" + +msgid "PRINT" +msgstr "" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "" + +msgid "DOWNLOAD" +msgstr "" + +msgid " DOWNLOADING " +msgstr "" + +msgid "Earlier files and messages deleted." +msgstr "" + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" + +msgid "Compose a reply to " +msgstr "" + +msgid "Awaiting encryption key" +msgstr "" + +msgid " from server to enable replies" +msgstr "" + +msgid "Sign in" +msgstr "" + +msgid " to compose or send a reply" +msgstr "" + +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "Passphrase" +msgstr "" + +msgid "Two-Factor Code" +msgstr "" + +msgid "SecureDrop Client v{}" +msgstr "" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" + +msgid "SIGNING IN" +msgstr "" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "" + +msgid "USE OFFLINE" +msgstr "" + +msgid "Show Passphrase" +msgstr "" + +msgid "CANCEL" +msgstr "" + +msgid "CONTINUE" +msgstr "" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "" + +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "" + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "" +msgstr[1] "" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "" +msgstr[1] "" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "" +msgstr[1] "" + +msgid "SUBMIT" +msgstr "" + +msgid "Preparing to export:
{}" +msgstr "" + +msgid "Ready to export:
{}" +msgstr "" + +msgid "Insert encrypted USB drive" +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "" + +msgid "Export successful" +msgstr "" + +msgid "Export failed" +msgstr "" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "" + +msgid "Exporting: {}" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "" + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "" + +msgid "See your administrator for help." +msgstr "" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "" + +msgid "DONE" +msgstr "" + +msgid "Preparing to print:
{}" +msgstr "" + +msgid "Ready to print:
{}" +msgstr "" + +msgid "Connect USB printer" +msgstr "" + +msgid "Printing failed" +msgstr "" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "" + +msgid "Please connect your printer to a USB port." +msgstr "" + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "" + +msgid "Are you sure this is what you want?" +msgstr "" + +msgid "When the entire account for a source is deleted:" +msgstr "" + +msgid "The source will not be able to log in with their codename again." +msgstr "" + +msgid "Your organization will not be able to send them replies." +msgstr "" + +msgid "All files and messages from that source will also be destroyed." +msgstr "" + diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..79af2e7ab2fb486c04909bbbb4d123a16d2b52d7 GIT binary patch literal 11972 zcmbuFTZ|;vS;xzc9qh54IJScWvBR+w$2Ojs^{yRX#_P3vXL{C+XS&BTJ-c==EH&LV zGi7&IwX3RUJYK9s2yuxbBB3Cm2cR-DQ|9kv;H-V4y`B6~g zKMlSg{7sOd!JmNd1HVyz{uX#UpZ^oQ1-$XSLBQMKLGXLQ$G|#x9=s0xHSjL*4?)TC zub}qvUGQ4)dj3eRkARnh4}+*CSOk9%Y=RGf2cUHSd*Bjy9YQUF=fLN{&x1@ET*IQ$ z!_A=9xfOgAybqL~_rVSD4?yYpDh7QI_+e0by9?C%_kz;XBcSxL4Bh}f4La~S@K*5W zL9P20Q1kp5xC;IiD7in#Ln~k#tbs3qr@?D0nqW)$^<1 zkAR;8wcfYEtH3MRgyg;fed zegymr@CU&E0&fGa{k|Z$6ub|-4}1{(+9g3S0JZO9JS@H44?6HPsOLIhg9m>Wd;$EM zn?0YJ3=&U%4CGeuMNs_sI;j2p6DWWBH&FLq2N5~AhE4rAcpE7D{4#hs_)7WtOQ7TP zS3y1ZccA?Bbx`xZ_tqe|6Z`)QX@l25>Gj`1>Hh|lDmm@}HSZdz=biy2*H3}6=V!nZ;O9Z{=&!*( zc++j@5&Tq%uYtP%p^th$`!skNpMMF&6@p&{wZE^H_#JSQ&!=zq`}{@l8b1F{iC+UH z$6tc)2LBcmpZ)=aiot(_Oc7jphu7ELATAWNLCv!RJ`E1RkAdF=rH?C6_Tyj({xJ9| zsC`_CavlOV!27|^fQ#UtgD1hOQ1&_SF>nBW0hE2-H|zCuCn)`Y41}V=GB^*O2QgLf zbD#r%7vx{?P5$hG-vzba-ke|mw?W6}{{XeWtC$3p2PZ(b9Gn9$1wR4Sz@Gpw0i|Qv zd70}pSBq=%CGN>jq!ZaiuPeFOzWIxM`6;d+;#%N(m`g9VZ+e%GqzCEnN4fM`sc;b$2g++pxBRz zjB~Qny>wYp%3vOXGKq<{1~b?JVuPJj(W>%oVANl5ndRxhxv=;wTSvtCRKzX&$*W zV_ed8p?!N0oZLNeYBfy4ojBQXgDg&pbXd47&Y#Us9^<={Tc@5_=jm>gyO8Jhqb(P9 zyIGXy5hJ!3khx>0nvpGiFo;~7*uZoUCDWsA?M|4u(S)5eDZ)63x_ZbK=WRFb4Es@1 zEb?56wLabLTNT(KMH zwx3xy=tUtauvI&S9?RHEKThJj$igDc=KW@>zo*uu4^-Msi;2C~5=02I!lm1&u@ZZr z#rolapPv21T{aPKA4v2#*-o>5D3N);7w56;gOJ5;9891_K{?4`?iG8(#&H!>_r$)MllZ9!`^sN?_gxG ziSJNKn53+q8BK?%e3m;0F6wVZ-7Zr1{hFrV9P@{Wn|cF^*m^?yO`<|_jMjJyq%ggh z4kYiaX8Zs1q?V+~K_6<4m9i|AVb3jY7wll`z~%6*!_6s@Ob~-5cVo7jxPDZG-LMFe zCoC!=;mKIpD03jX&%1VtInyGlxLhtUNpw$>Eb4}xu_Y@5PtgVS_Z^lfbvVcF6J|#A zO2bg5*6TUjnZ5It6?giC1Nfi&Kx9&TVenxd343|UqK+U^Wa&ZFWhMwFikQb5jYT4D zS9kZrq~$SXBld+jni#*Kpb{-*>7b0CV|Uw)I?sBJ%`_AS(2Pa4w&#YlBY!sE$uP+d zp=>@_s;|`B^+6_lruPxlEt0tH5U1!? zpNMsMLrz31@1UOrcj3ig*@nrAeg|?yvPmz?v3NBRgV~`AF>06ae zW=w5HdoOg*NZ1vtd!}O&5!dTRy?=nRG`D!S64Els_h=@tpCpu2p-{`-e&TSK6 z%rUyr=)u@;Dov<6woRcvr}&L2&85nPeBX8XAnL^1aVJ!Q6R9rp&U51g!~B#sA<5bH z>*ri3vvxk9!pMt*Ui9#-+te3x`%%2JTP!3>z`a{fU3l^2F^xGjJ&9@HZOtJznk4Y0 zbX*_xGNQQZ0Fq%9(3RGFrVY2^o@yEG^n&NWi!xp>RkfgZW|)caRK}Mz)g)T4^rk0< zaS^O5BZgCsV)qU-(c9IJCbbFPrf$}wz7n{xis0V~t$aD6Qt^3&N>ABJOtGy`7@U;Z zf!z>mJu0#|GJPk}{wVJR8;vtf*JyfdZMN-=YGd8oJiXfB&N$L95;Bv*?cq0XylXct zIbBp8nyq%D-e8`mddj+C73i$~7GWv3idmGtzz{60jFbNQPrzh0RkY1iY0^<}@_~jg#h-3u=}@7)t&G`?yUFc^m0+U~)v@fQSaIM3 z!$oPz9-MIF{d6?NOoISQ;Z3eYs4Z%$h??a1y|(u86A!q~ZkXZigk4OG5clz+6^4)|s+HeThHCSn^0Nj<)S*ndx)jDGR?; zNd-5NGhaj?W`|MBKCLXWi(qqu0%&=8r9o-6S>~ePY|NtsQKGFPgSS8)oYQ#-4Ukc- zBB>&?;_b+7QA1fIEd)>1H)fqL-dvr+a=q?0TAS;Obyr(lY;BT5Cr79l+i zT`14+(>JRMW8!XAd0$+6O(mE|w6;!4J7E&P;OnWQSY#anl-D;NaPTmp)j6<;rHn#N zgd>#vELm4lROwzj32Z;-t(1My7pQ^0E2R%Ely9mL)vj!i5iqdrA5;TMT?7}x0ga80 z$$wtleo=%Dd*;P18zu?)F(8ir^Cv&+bYwBT9$6fhl?IQOPQ@b>2I(_|_qj%Q?kqtL zqb;~K3Zmi8FoLajoX)}*;@+L^j&bt1b7no#X?bon--)|(r-wWFTsvKGGi$B6b@G)a znOmafTyRg-YwL5Xt+}O|d#tsv+PLfE92I6%(9N~8Fv)xBL@c=F&6O3`tgY7F$@*%o zvGQnbX=xp}Ub4z|*jydyK{}|y$JIs%b z?@zp)>sWp~HYm=YUOzToaKYJ~nbpQ>eXN<|^LNj1+A46gxi$@;1y@AR7sm!Yil2up zOy^PY@Me2??t$?*ZFD=z=IROY32QC52e#s3X010QAIvS|GdZR1z&_>=pLmGgjlOv} zai`qzhi0CfI};_O4%5^*zejiP{PE-SCuRb7y4HBIwq9a$sYQdVtFqYIW7Lfyc_iKo z6*EZA90F*O+3hGNl#wzW9vac6VaTvw=5U5t$K(uQGwH;nQ=)&IcT&X=7x(E(BDGKj$z9`Z@yI?FGv%{AUzrt|D&7&REnH;_x&by7s?WLW=-*5@i zI~2qIJDf$L7Z6O{vVQ7z%1vjEO8CDzP2FbvdWMtV{8*i;_yAd9^$A+xkcKGUE zq!8iK9vzfqIP14XW%dSX2x`@~G%B$U3bvs%^Y(U~VcZS7X-?ol{VqglS-2JUsERbL z3}%ft3f@X)(>v_KiZpi0-dkNh(?urhPl`x%J-mH<$?61!aFfMh8StJDf5w}pq@c!&qWja|K_7QcT82_wiO9m*rC+A4+5Cl zQ(Zw$Z@c9xZ=fH0^Cvw$LL0j$c0uS-3lCrCBdvOv3DFda2*pK&e^C(8_|=IuqS_i0 z4`mS@ChRvN$u#RYkys=ctD4VDLzov?-QgF!-h*~((&esJ?y|Zwv4)a#qK+P?6Pk8; z=mnz_-`_fX#eQm#Z&^QYc=#$4QmsiVy36RDAP}kUj%H! zV>XSos^h|F088S;L;|zEeYO6?X5(y&LUeJxvDU7U!w za3h^)R$(6YA`;Sk9B-;@@s&|(oA8hhr|)gaEruP~4ki5IOxi0uf*Nm;7R@UxYG;;q z$W}S;k}AK`SAR%f=Mq_o7&>9&yCg^N%>nG zei=P0Nm(|S${U^_+u;lNHABkdJ5P=oGYTe3X#>8EEiHysoZ$8FV#iFAH7Xg1t`Bq2_c^>c}vh(rIonafaPQR2h+I{$22FZ z(w=j7x(%W;c}q^h#*=#zQL=ZR=B(T1w}j^@=ivdYtMt8u6q6cBADpVQ*( ztziku>ZHSZrC%?6QV?WAQc$)|}g| z{v{_IU0=-ytu3#3sYhxqGiFfJ?;1WlacGcw6x_`?`hmo(&JR0h8_Ich)SBu$sV#ZL zZQZ3DrKmWf&h}~!pBZ)uTGpN9z^R{>t*PiOV}Ve;`z%~Qjy=v3llk=`v0FqT#>kWO zBag}wV-}fFeafn)h;k+QZb)l~-ay}~9qmx3JNTziMwMW>KHbT}ZJ&>PvL+ZIWjdS+ zosfs00hEoaJj?oMIOVq|)w+|}$8y=WpC*L#^E3P~(4p67HWr;D^)30Mt|j|c(~^BK zqcRjlBxC%rdb*GkI>0TD7ZPpCU*%BPy3>4 zcPi)siIOvEf%aIUBIbZ>7z)oMU_LCS+T*_PN*z; zzSC2oPvqEWtj@anlZz{xjdj;Xutge*Cr}z9x1xU&?N{I<3;CTBXem z{q$yT3MtttmJ@GH=iZjO?|iX1ADp%B1g#Xtl4KCgq#>%lqlRe}k~LwP#XHoWysMJo zBf$oNzv`6w(qW2pWq-&hgJkeQMKS?E%=KPB(Q*+rZVl^uMUWGP{ip%}e1%XIT} zWGfk^By9hP25OaorsDd=P1LIAbwnHW8GHiW>+kbK2=o4`kvcjzR>HvDk?){7nauM= PsZ+|-2|y`8J=OmOjVGq` literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po new file mode 100644 index 000000000..dc1a24cd7 --- /dev/null +++ b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po @@ -0,0 +1,348 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.6.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-05-19 12:11+0000\n" +"Last-Translator: Flávio José de Siqueira Cavalcanti Veras \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} já está executando" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "SecureDrop não pode ser alcançado. Tentando reconectar..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Não foi possível conectar ao SecureDrop server. Por favor, cheque sua\n" +"conexão com a internet e com Tor e tente novamente." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"As credenciais não funcionaram. Por favor, tente novamente e \n" +"tenha certeza de usar um código de dois fatores." + +msgid "That didn't work. Please check everything and try again." +msgstr "Não funcionou. Por favor, verifique e tente de novo." + +msgid "You must sign in to perform this action." +msgstr "Precisa estar logado para fazer esta ação." + +msgid "Your session expired. Please log in again." +msgstr "Sua sessão expirou. Por favor, acesse sua conta novamente." + +msgid "Failed to update star." +msgstr "Falha ao atualizar estrela." + +msgid "Retrieving new messages" +msgstr "Obtendo novas mensagens" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Arquivo não existe no diretório de dados. Por favor, tente fazer o download novamente." + +msgid "The file download failed. Please try again." +msgstr "O download do arquivo falhou. Por favor, tente de novo." + +msgid "Failed to delete conversation at server" +msgstr "Falhou ao tentar apagar conversar no server" + +msgid "Failed to delete source at server" +msgstr "Falhou ao apagar fonte no server" + +#, fuzzy +#| msgid "All Files" +msgid "Download All Files" +msgstr "Todos os Arquivos" + +#, fuzzy +#| msgid "Deleting source account..." +msgid "Delete Source Account" +msgstr "Apagando conta da fonte..." + +#, fuzzy +#| msgid "Deleting files and messages..." +msgid "Delete All Files and Messages" +msgstr "Apagando arquivos e mensagens..." + +msgid "SecureDrop Client {}" +msgstr "Cliente SecureDrop {}" + +msgid "Quit" +msgstr "Sair" + +msgid "Last Refresh: {}" +msgstr "Última atualização: {}" + +msgid "Last Refresh: never" +msgstr "Última atualização: nunca" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "Sair da conta" + +msgid "SIGN IN" +msgstr "Acessar conta" + +msgid "Nothing to see just yet!" +msgstr "Nada para ver por enquanto!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Os envios de fontes serão listados à esquerda, assim que transferidos e descriptografados." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Aqui é onde irá ler mensagens, responder para as fontes, e trabalhar com os arquivos." + +msgid "Select a source from the list, to:" +msgstr "Selecione na lista uma fonte, para:" + +msgid "Read a conversation" +msgstr "Leia uma conversa" + +msgid "View or retrieve files" +msgstr "Veja ou obtenha arquivos" + +msgid "Send a response" +msgstr "Envie uma resposta" + +msgid "Deleting files and messages..." +msgstr "Apagando arquivos e mensagens..." + +msgid "Deleting source account..." +msgstr "Apagando conta da fonte..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Todos os arquivos e mensagens desta fonte foram deletados —" + +msgid "Failed to send" +msgstr "Falhou ao enviar" + +msgid " DOWNLOAD" +msgstr " BAIXAR" + +msgid "EXPORT" +msgstr "EXPORTAR" + +msgid "PRINT" +msgstr "IMPRIMIR" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "ARQUIVO ENCRIPTADO NO SERVER" + +msgid "DOWNLOAD" +msgstr "BAIXAR" + +msgid " DOWNLOADING " +msgstr " BAIXANDO " + +msgid "Earlier files and messages deleted." +msgstr "Arquivos e mensagens anteriores apagados." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Arquivos e mensagens apagados\n" +" desta fonte" + +msgid "Compose a reply to " +msgstr "Escreva uma resposta para " + +msgid "Awaiting encryption key" +msgstr "Esperando chave encriptada" + +msgid " from server to enable replies" +msgstr " do server para ativar respostas" + +msgid "Sign in" +msgstr "Acessar conta" + +msgid " to compose or send a reply" +msgstr " para escrever ou enviar uma resposta" + +msgid "Username" +msgstr "Nome de usuário" + +msgid "Passphrase" +msgstr "Frase-passe" + +msgid "Two-Factor Code" +msgstr "Código de Dois Fatores" + +msgid "SecureDrop Client v{}" +msgstr "Cliente SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Este nome de usuário não funcionará.\n" +"Precisa ter no mínimo 3 caracteres de comprimento." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Esta frase-passe não funcionará.\n" +"Precisa ter entre 14 e 128 caracteres de comprimento." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Este código de dois fatores não funcionará.\n" +"Deve conter apenas números." + +msgid "SIGNING IN" +msgstr "Entrando" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Por favor, insira um nome de usuário, frase-passe e código de dois fatores." + +msgid "USE OFFLINE" +msgstr "USE OFFLINE" + +#, fuzzy +#| msgid "Passphrase" +msgid "Show Passphrase" +msgstr "Frase-passe" + +msgid "CANCEL" +msgstr "CANCELAR" + +msgid "CONTINUE" +msgstr "CONTINUAR" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "SIM, APAGAR ARQUIVOS E MENSAGENS" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Mantendo a conta será retido os metadados, e a possibilidade de {source} entrar no seu SecureDrop novamente." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "um arquivo" +msgstr[1] "{file_count} arquivos" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "uma resposta" +msgstr[1] "{reply_count} respostas" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "uma mensagem" +msgstr[1] "{message_count} mensagens" + +msgid "Preparing to export:
{}" +msgstr "Preparando para exportar:
{}" + +msgid "Ready to export:
{}" +msgstr "Pronto para exportar:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Insira um USB drive encriptado" + +msgid "Enter passphrase for USB drive" +msgstr "Insira frase-passe para o USB drive" + +msgid "Export successful" +msgstr "Exportação bem sucedida" + +msgid "Export failed" +msgstr "Exportação falhou" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entenda os riscos antes de exportar arquivos

Malware
Esta estação de trabalho permite abrir arquivos com segurança. Se você abrir arquivos em outro computador, qualquer malware incorporado pode se espalhar para seu computador ou rede. Se você não tiver certeza de como gerenciar esse risco, imprima o arquivo ou entre em contato com seu administrador.

Anonimato
Os arquivos enviados por fontes podem conter informações ou metadados ocultos que identifica quem são. Para proteger suas fontes, considere redigir arquivos antes de trabalhar com eles em computadores conectados à rede." + +msgid "Exporting: {}" +msgstr "Exportando: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Por favor, insira um dos drivers de exportação provisionados especificamente para o SecureDrop Workstation." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Ou o drive não está encriptado ou há algum outro problema com ele." + +msgid "The passphrase provided did not work. Please try again." +msgstr "A frase-passe fornecida não funcionou. Por favor, tenta novamente." + +msgid "See your administrator for help." +msgstr "Consulte seu administrador para ajuda." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "O botão CONTINUAR será desabilitado até que o arquivo VM esteja pronto" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Lembre-se de ter cuidado ao trabalhar com arquivos fora de sua estação de trabalho." + +msgid "SUBMIT" +msgstr "ENVIAR" + +msgid "DONE" +msgstr "FEITO" + +msgid "Preparing to print:
{}" +msgstr "Preparando para imprimir:
{}" + +msgid "Ready to print:
{}" +msgstr "Pronto para imprimir:
{}" + +msgid "Connect USB printer" +msgstr "Conectar impressora USB" + +msgid "Printing failed" +msgstr "Falhou ao imprimir" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Gerenciando riscos de impressão

Códigos QR e endereços web
Nunca digite e abra endereços web ou escaneie códigos QR presentes em documentos impressos sem tomar precauções de segurança. Se você não tiver certeza de como gerenciar esse risco, por favor contate seu administrador.

Pontos de impressão
Qualquer parte de uma página impressa pode conter informações de identificação invisíveis a olho nu, como pontos de impressão. Por favor, considere este risco cuidadosamente ao trabalhar com ou publicar impressões escaneadas." + +msgid "Please connect your printer to a USB port." +msgstr "Por favor, conecte sua impressora a uma porta USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "SIM, EXCLUIR TODA A CONTA DE FONTE" + +msgid "Are you sure this is what you want?" +msgstr "Tem certeza de que quer isto?" + +msgid "When the entire account for a source is deleted:" +msgstr "Quando toda a conta de uma fonte é excluída:" + +msgid "The source will not be able to log in with their codename again." +msgstr "A fonte não poderá fazer login com seu codinome novamente." + +msgid "Your organization will not be able to send them replies." +msgstr "Sua organização não poderá enviar respostas a eles." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Todos or arquivos e mensagens dessa fonte também serão destruídos." + +#~ msgid "Entire source account" +#~ msgstr "Conta completa da fonte" + +#~ msgid "Files and messages" +#~ msgstr "Arquivos e mensagens" + +#~ msgid "DELETE" +#~ msgstr "APAGAR" diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo b/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a78c263435b98c13a110ebd853bf053f75f11c6 GIT binary patch literal 12218 zcmbuFYm6k5=f)9W)@P#0OB1J+Fff5OX5CR2|kPs65 z{^wTpV|F&grnNQy?&@3jo_o&!JnrfJ+q-W4#emmUuD5Z${^ddNaq!izhBE#{soRdlH)A+3h@0PDham0cYz-U&w)P$O6PwBu7Phym{qV3J_UXOWa{9p zY)<-k7pQfX!HeK3C_R4)?1Fy+O3!a*(D#7%gVNtQQ0v!0>16|y9=qV{!5DPlkAr8x zUjeo5S4#XEsQJDHZi4>=O8#>^ya7H1*1iZ5RWWv{;h#m9dD*;4SD zGoH`y0OhCe2jv%gp!V}=Q0x3USOdQdcEE3d=fGv0L2~bdm>~ERsC|77d;oj__fI0iNTc~ElvHHfN$|19yfC{=RY2TFerf*OAjY=b%Y3Gf(ff@>&i z9sCTKfnNuqSnw#DzZLulh${pk*Z}hqe;@o9pZ^Dxem({X#Gj`@Tq^h(P|y7mcpLbe zpm_88q3dGPN*`O(`JkrBKGO8$Qb#f#f9-d*6ELFxZK@I7D?WJvH6pyd5B zh$z9=z#;hG;6vcGC6B)WV*21)ASw-BvF!P~2Wk92h#7izRPp}C*ndOz2DxwL1!B&+t>#{!Zdeno(jElT)aVajzrh092-N7X;zlLjr zYxcFk2UKe>RB16sAH-?Bhb`I2kyx}$XL!Yp#*Bp(C&>7jN!)UF~|?8mw7XVHxY zQHTm`)n1{;GWIfzlQ=K3ut>8dznSXqg)Qj=mG;wOX0P=G5yGr+=`L!l#2#s}VR+=H zXFqYDO~kuL5M@P}3%g4Qa7v|-pe&HpzRm#mC zcgKT)Es--lwyrkk4)>+*G&4;}ankl^yfcXNeN!Ham!c~Z=Syb#%L&uug)A#k%Ny-F%HK2i_;nx@|z^M{C=dIO5sdP4h6qC#>^)_4)5Fuj-#B=4eT z`|f#CPtxRQ2sNilS(nPN=MJ|EcCd5ga`@Kc<{U|8h{2NkG22btFe<`+ScJ$E78Q~3 zWUOqIITGEM+;)mN(;}+4TrMz6bWf8k>W96lB`X8Z(FOGn9hN9{SY!7IGb4JXVJK4{ z3_Kak#fJm|SfBgwW3qY?@LUFlgFIy^N9ZWB^eF1{JhT!q%ukKHqK-DHyN6*?yf3I9 zhOx;SCB5uuWQ=+;Ito_nt<}axu-a~IH(Qq*!D<=N%19>msLWA;^gm<&=} zVzOS)Xsvdh*xGKax%K8o!?jzk+vr?rbb`hQx7wZUpb=(dhU_$3_Dyzd)gXvih{1wc zd_Z8&O^c;jAO;%I5c?)iA+1H4Xh4iT%u?cp#i6)hE(@chFwaN(nPM;j#*Ab$2Mvof zZa2hf`qd|5A>NV`@ya{we#KpXHdwb|vbUF2j!O2)eei)xJ`vtHt|aGaBa{H=b9QLSGZ2EqL-K7~%)rd0KU zX~Vq1OBgg0w!l)}0noJg>{Yc9vU(@lB?0fR;H+#sn7@aHS_D&Z1r_B{(1 zoGWDt&qtISd2uv|9zL^6u~9pW;=TQ1B~dmWoVjrQ+4IX9b76iG)4)rbL)0@#AV=w< zJ{V?%bQJ|;#wxli$N97y?!*HXHrnZR&w*!Uyg{ncLGR2kGf}GyJ6kGHv|i~tkB#FZ z=qNpgb6#Qhjx^Cr)sH5%30|UZI?+(s+*n0U=!I6xoKm(Z{pOCcPpL~xv8~S-oc!5? z-4Lr26z4~+%beor2uG#X~zPxR3R4D7-Sw6)JZaL)Di!wl~y9z$OR zKAViXY&Iw$&S^8Ii7#%=RT54C88t*XLltjs@+iWvSry8Kd-rKVM6RkF+|IZtNa2-c z`*E)0QlIlf5f4ngWkR~LsidcJ^N4MnQZ~TjL`i|wt++tzZacG*A48EAd|XwQ*7M@_ z#9pP(PK=_YQM$Fp&Zyraqsm}xX*tLjxiiUT=D9M-+2%^o>@bKtWjL{{42fcuxRjd& z@#(_s*Ge*_b*srlKWSj%UW&ieXBlS1rrnVW(uF^>{diN1;y-U4~> zxDHEbfDBuZyeE-b@pt0JsG&^IE5Q?u?xI_3Y&5nTu0j3TX}E6ta%Z*S>Z_~m%jDGA z5vsYmuHIU6n~iR_eyPz7o}j!PDh=n})1|#pl(FCtL0C%lc}gLvfrsW^gBV3HtSoY_ zn^vzD=~aK@*+qA~JmAmYtis^T-DyZF*-@pY*@W{xt*v9!UYNws_+sib7FqiM$_VlXaQn5ekL$ z8sWay?ANXkDp$#7x!zAjQ8@|cDmvg zw%WB08BEjE)+jkw+!Kv@r?%Oyt<~M5?Ul{ueIMdzv7i#Kww;AZK2W1##jRi7*l?}- zX2YFtY}T6_7wcEuV_9uG3Wqn7?fiaGjPjM`W%@bH7%k5?nX?ksFJHycy!oL#zqfrD9rv(>ig5Usc(db(I1 z4Je2nvQV8z#lx4k*K6md!2sA%fw+B&7u{Sd#3syZe zrqtSaChu}wwn&E|TeAk*@$<*OOR2^1JlaEf$?@~ylIzltI{rLW21h;;1m}?G89GvV zx ze{38Mo*HvsjW+f}b8m<>j-R7X8CHAZ29e*EWn|f7D|c0P-z*RuAis6pj=yveDHynP zKqDm?Q=El-wp~$}6)1`MN{vYg_gJ;d9`1iPc!fK&*(pzUNjjZ=0a9U3`|7$?Uhl|z`^gCl(H%@q!aWm%Zjh?eF`^0~3pLmy9*c$ebjc!G;;o158e{RZ1;wz~@1{Csw=TUnRil9KW5KytDHuUnlATa!`S&CK;<|7C^$` z&hZOFjD@+!$6w-M=3tdMJ8Ij-S?&7%c&cl=zbEa_^}G-O|1b8Z_><8>At*h7*Yr1XOt&FywDlZzSyQbd9gCwg9= zP%Ltrm7asixK(&SehA&V2ocm>RLw9o_>6&c2$>lpX4=zcG&`Y`IhQbSqX@xzbM?_i zv(u*jUF|ftw(Dzc*J?ZU6`O1AsO3T~21ZZ%^F4)Smj4`jLs?KoXcEvZo}mz-q0yHZXmb z{G1`*)QqK+m~O!bZ`LjSUR}!=|5Bp9sX^7qoLDjqjz2dj6r=0qPAo-H*QxTk*_YBY zInpnWEBc@x?vY~d4w{>^I5(;6)~B`)X0kRxO>tI%bT%es@775ta7db9Zc z-Ebq_(Y$C0icOq7XttWG&3cCz-|Zg%B+07L*=)9EZq(_h&JR(0l_m)p*-nUaEi-jk zPr0qTWMZlyPB}L%%DgGOoZ+=`pEz%QR}RkpY~U$DTu`Gl)UOg*xWW%l2eJPiY7y3p zFxcd;++a3BH0KEv)KzNn(=Bu=k4QE>bpq2yl%Zk}svjsJM7fHVK1U%@=pcGV7V#04 zQXb+`0Zn3_YI~n1h;ay?j^`rsw6rM3n)+nbAY;zO96PJYX`-ctHFdaTNOCNPHJY;g zQA-w8s3WUD!~{1DQ$AtLPA1<}S;YV4U?<7(AJCFj*0x!042L&Ppr@(e_}>^&f)mr3 zosp&OcG5zcEIYF>i^YipD2)Eifs`8-REMEE)9^nLUfDcjXBlRdhlXC444J0vQ%bpM zFj#VRs#&&0UC3{HRuWa#I{qRS!DVI+47(O2<}7rgjH}OC!+ztUmhp<%J=Mg10{NPS za1~{qyJkuq8>E7Rbbx?L?AVewsyh5ZNouc^iDoG{{#h43HIA)zwir4<;}aKFuU0=f z_D4=p>#f9mK_pByxA}4@WYgQjtHdW@H>@T3Jpnz#{Ud8Wh zZEh~Q#s-CjqTgzJbBj(ey|>mj4Paw$-L2K#dYc<323KWs z*EQ${x6}=8bt#odSUNuVd}V2d2Bk0NBKf#i%u;YkF)I@-sR^oD^8eKfhMjV2W<)je z@5xV&oV%~gTT5OKPw5Vqr%)SK33Wq<*k^$Jv>x#_?a7XEA-_@, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.6.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-27 23:09+0000\n" +"Last-Translator: deeplow \n" +"Language-Team: Portuguese (Portugal) \n" +"Language: pt_PT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.13\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} já está aberto" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Não é possível aceder ao servidor SecureDrop. A reconectar..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Não conseguimos aceder ao servidor do SecureDrop. Por favor, verifique se\n" +"está ligado à Internet e à rede Tor e tente de novo." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Essas credenciais não funcionaram. Por favor, tente novamente\n" +"e certifique-se insere um novo código de autenticação de dois fatores." + +msgid "That didn't work. Please check everything and try again." +msgstr "Não funcionou. Por favor, verifique tudo e tente de novo." + +msgid "You must sign in to perform this action." +msgstr "Inicie sessão para realizar esta ação." + +msgid "Your session expired. Please log in again." +msgstr "A sua sessão expirou. Por favor, inicie sessão novamente." + +msgid "Failed to update star." +msgstr "Falha ao atualizar a estrela." + +msgid "Retrieving new messages" +msgstr "A obter novas mensagens" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "O ficheiro não existe na pasta. Por favor, tente transferi-lo de novo." + +msgid "The file download failed. Please try again." +msgstr "A transferência do ficheiro falhou. Por favor, tente de novo." + +msgid "Failed to delete conversation at server" +msgstr "Não foi possível eliminar a conversa no servidor" + +msgid "Failed to delete source at server" +msgstr "Falha ao eliminar fonte no servidor" + +msgid "Download All Files" +msgstr "Transferir Todos os Ficheiros" + +msgid "Delete Source Account" +msgstr "Eliminar Conta da Fonte" + +msgid "Delete All Files and Messages" +msgstr "Eliminar Todos os Ficheiros e Mensagens" + +msgid "SecureDrop Client {}" +msgstr "Cliente SecureDrop {}" + +msgid "Quit" +msgstr "Sair" + +msgid "Last Refresh: {}" +msgstr "Última Atualização: {}" + +msgid "Last Refresh: never" +msgstr "Última Atualização: nunca" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "TERMINAR SESSÃO" + +msgid "SIGN IN" +msgstr "INICIAR SESSÃO" + +msgid "Nothing to see just yet!" +msgstr "Nada para ver, por agora!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "As submissões de fontes aparecerão do lado esquerdo, uma vez transferidas e desencriptadas." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "É aqui que irá ler mensagens, responder a fontes e trabalhar com ficheiros." + +msgid "Select a source from the list, to:" +msgstr "Selecione uma fonte da lista, para:" + +msgid "Read a conversation" +msgstr "Leia uma conversa" + +msgid "View or retrieve files" +msgstr "Veja ou transferira ficheiros" + +msgid "Send a response" +msgstr "Envie uma resposta" + +msgid "Deleting files and messages..." +msgstr "A eliminar ficheiros e mensagens..." + +msgid "Deleting source account..." +msgstr "A eliminar conta da fonte..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Todos os ficheiros e mensagens eliminados para esta fonte —" + +msgid "Failed to send" +msgstr "Falha no envio" + +msgid " DOWNLOAD" +msgstr " TRANSFERIR" + +msgid "EXPORT" +msgstr "EXPORTAR" + +msgid "PRINT" +msgstr "IMPRIMIR" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "FICHEIRO ENCRIPTADO NO SERVIDOR" + +msgid "DOWNLOAD" +msgstr "TRANSFERIR" + +msgid " DOWNLOADING " +msgstr " A TRANSFERIR " + +msgid "Earlier files and messages deleted." +msgstr "Ficheiros e mensagens anteriormente apagados." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Ficheiros e mensagens eliminados\n" +" para esta fonte" + +msgid "Compose a reply to " +msgstr "Responder a " + +msgid "Awaiting encryption key" +msgstr "Aguardando pela chave de encriptação" + +msgid " from server to enable replies" +msgstr " do servidor para permitir respostas" + +msgid "Sign in" +msgstr "Iniciar sessão" + +msgid " to compose or send a reply" +msgstr " para escrever ou responder" + +msgid "Username" +msgstr "Nome de utilizador" + +msgid "Passphrase" +msgstr "Frase-chave" + +msgid "Two-Factor Code" +msgstr "Código de dois fatores" + +msgid "SecureDrop Client v{}" +msgstr "Cliente SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Este nome de utilizador não serve.\n" +"Deve ter pelo menos 3 caracteres." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Esta frase-chave não serve.\n" +"Deve ter entre 14 e 128 caracteres." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Este código de dois fatores não serve.\n" +"Deve conter apenas números." + +msgid "SIGNING IN" +msgstr "A INICIAR SESSÃO" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Por favor, insira um nome de utilizador, frase-chave e código de dois fatores." + +msgid "USE OFFLINE" +msgstr "USAR OFFLINE" + +msgid "Show Passphrase" +msgstr "Mostrar Frase-chave" + +msgid "CANCEL" +msgstr "CANCELAR" + +msgid "CONTINUE" +msgstr "CONTINUAR" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "SIM, ELIMINAR FICHEIROS E MENSAGENS" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Manter a conta irá preservar os seus metadados e permite à fonte {source} iniciar sessão no SecureDrop de novo." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "um ficheiro" +msgstr[1] "{file_count} ficheiros" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "uma resposta" +msgstr[1] "{reply_count} respostas" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "uma mensagem" +msgstr[1] "{message_count} mensagens" + +msgid "Preparing to export:
{}" +msgstr "A preparar para exportar:
{}" + +msgid "Ready to export:
{}" +msgstr "Pronto para exportar:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Insira uma unidade de armazenamento USB encriptado" + +msgid "Enter passphrase for USB drive" +msgstr "Digite a frase-chave para a unidade de armazenamento USB" + +msgid "Export successful" +msgstr "Exportado com sucesso" + +msgid "Export failed" +msgstr "Não foi possível exportar" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entenda os riscos antes de exportar ficheiros

Malware
Esta estação de trabalho permite-lhe abrir ficheiros de forma segura. Se abrir ficheiros noutro computador, qualquer malware incorporado pode alastrar-se para o seu computador ou rede. Se não tiver a certeza de como gerir este risco, por favor, imprima o ficheiro ou contacte o administrador do sistema.

Anonimato
Os ficheiros submetidos por fontes podem conter informações ou metadados ocultos que as identificam. Para proteger as suas fontes, considere censurar partes sensíveis dos ficheiros antes de trabalhar com eles em computadores ligados à rede." + +msgid "Exporting: {}" +msgstr "A exportar: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Por favor insira uma unidade de armazenamento de exportação previstas especificamente para a Estação de Trabalho SecureDrop." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Ou a unidade de armazenamento não está encriptada ou há algo de errado com ela." + +msgid "The passphrase provided did not work. Please try again." +msgstr "A frase-chave inserida não funcionou. Por favor, tente novamente." + +msgid "See your administrator for help." +msgstr "Consulte o administrador do sistema para obter ajuda." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "O botão CONTINUAR será desativado até a \"Export VM\" estar pronta" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Lembre-se de ter cuidado quando trabalha com ficheiros fora da Estação de Trabalho SecureDrop." + +msgid "SUBMIT" +msgstr "SUBMETER" + +msgid "DONE" +msgstr "FEITO" + +msgid "Preparing to print:
{}" +msgstr "A preparar impressão:
{}" + +msgid "Ready to print:
{}" +msgstr "Pronto para imprimir:
{}" + +msgid "Connect USB printer" +msgstr "Conecte a impressora USB" + +msgid "Printing failed" +msgstr "A impressão falhou" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Gerir os riscos de imprimir

Códigos QR e endereços web
Nunca digite ou abra endereços web ou leia códigos QR de documentos impressos sem tomar precauções de segurança. Se não tiver certezas sobre como gerir o risco, por favor contacte a administrador do sistema.

\"Printer Dots\"
Qualquer parte de uma página impressa pode conter informações identificativas invisíveis a olho nu, tais como pontos de impressão (printer dots). Por favor, considere cuidadosamente este risco ao trabalhar com ou ao publicar impressões digitalizadas." + +msgid "Please connect your printer to a USB port." +msgstr "Por favor, ligue a sua impressora a uma porta USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "SIM, ELIMINAR COMPLETAMENTE A CONTA DA FONTE" + +msgid "Are you sure this is what you want?" +msgstr "Tem a certeza de que é isto que quer?" + +msgid "When the entire account for a source is deleted:" +msgstr "Quando a conta de uma fonte é completamente eliminada:" + +msgid "The source will not be able to log in with their codename again." +msgstr "A fonte não poderá voltar a entrar com o seu nome-código." + +msgid "Your organization will not be able to send them replies." +msgstr "A sua organização não lhes conseguirá enviar respostas." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Todos os ficheiros e mensagens da fonte serão também destruídos." + +#~ msgid "Entire source account" +#~ msgstr "Conta completa da fonte" + +#~ msgid "Files and messages" +#~ msgstr "Ficheiros e mensagens" + +#~ msgid "DELETE" +#~ msgstr "ELIMINAR" diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.mo b/securedrop_client/locale/ru/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..5cb71dd876681202bd7e44389d9d91f3b3776e9b GIT binary patch literal 15719 zcmb`NYj9j=dB;yK+(aq2a!G-5l5$CkSH2{WRIwc^(mJTIWJi}IhEiv>dt`00+EsT~ z5vt?XjvW%lCN?1^fe@1f$}OSDjup$XqqHCR($bl;P}=gLv@io7%CrnKZKng%p}+t0 zzGwIBY8@c3_SygLIq&Vc{h#N3SKocz#m53(w{g8y*F`~aK=@MLcwPSTAb16M1^6oP zO7Qov(<&{C)7hz&C+!W)Ka%4x~$PHTZgP zi^p-W!1rlT?fxFT82krN?Y{$R{_lgo3tsTsj0wIKRQvaWnr|a`BX}FA_D_Lt0RIl8 zYw$hrwcwBa_X}Pf1n=hitHDdbt3e(GJHa=C(_j|-3-EQ|*TMII{|ss!7r(~I@ph2^ z!IiveU4!6Dzz>0_Cdh+-0G7dPz)yj@z;A+s;06{o0M3Jd3Z4a-BFHeQ^sot(zODzi zfH#BE^F!bm_)nnp{2m&;3>*NZw;MstKMqPyyFlq<3j7`LE-(Z?4qgVH1U2usJ^ldH zc>fI!gZ~F={WsEi8+Z`x2OHq^;OiM&-){!BzK2267kD+_FGi_bz>T2#?*%^u{w=6^ zFGq-1g4cjr{~*YtU>IBn7C_nQ7%2Om1}_Ky5!?g*9Mt;uU9t+ zHQ>L1e-6G8WrpA}a2$LF90Xs9akY*epzM5~$5Wuz|8E}u1C+gg3QmGItOZ|ckyS>y$>$#ZgRxbH+@_N7ja1$t<>h;H5AGA---~C66p*Qg5rCcB4 zx}57GF8K^18>a!mDAyJ)+2As+8@bZ2A^+vK!Cn6ITftZP&+<7$x7T)$e*{8f0j?Kp z_V*?{$|vO4ui<(%mvoLPo3EGg={Bwpa7q7fwo;42N|koyLYT9s3&FdSNySi)CwA znT^Wrt!?gnt{gT8%vZ|wT(KM#)X662W1*6tn~BQxS~y>bXL$o?|_^ zdg4e#GFCR1S&+N;hT|2?S*b^fFZ&77j_%x~8WnQ+mL(Gdx48@Ip9!&q*I@?f%Z$v@ z6Aj}s{iRZ9lG!I`S^3Tkbb$ZY91+>7-C~Ggy5vf=3X_JANWEHFhzg8^gULlKV$F@^ zL=snb=X2%ybwU4pu4t={%K7TTtoha*(LylLKQfTr77T1386O&%$OZ$R+dQYqHMnQX z4=2X1Pojx?bEQIvr@?(W0!w1(O85rHU zV>~+;ZXMc|4Y!YkW7*N0v!g-w)*ahN$AfIH3ddJnh_(%kwwYAA&O!%97FeKKyc3G9 znHIcSF)Don{XvK|*1rd^I8 zYfKVOi_IoI81pbtR zp|x5Rg}2YqXCbOz8tfPy8W|6EGz}Ic*~ABkWkHw3taiw`kb(JolcwY`+$R^#vBYw2 z26jx@-`sz`l9_^GEHDaDvt!W-RVh<vr)b{Rm|s<;N(;t z(RoWN!7x6hO^)Pj^13nmeAcebQeo8U3#Dk&WmD7_nfa)=d%E6NRst?vwt3Iqjce6r zbNe8sffqG~ywO&Izxcp)tXGA_RR@p^6GB&7bD1_bSuClRk)(T^5A2okN)=TL`ecSl z(Ua$w9jZw*pO2=S=8E-TR2ebX7ASUaK?A*5{b*1d;6>_YG@4NYH?M;H^EoSDx>PDI zk5K6;Tgg*Q^pwF#nR&b$#~O|5)na7&E=Tjtyc3KK-7pdkjX2ysF>W7J8|&W0^}|El zX)*l(lv%EacM>u*=jl}&Gyo(q^z4uh|cP7IV|N?eGN+QqY0K)MykzH zr$)h;%FI3|^tUST&Rz;xo zaJ*_&K87MwI9^rmR)6_+(_TJin?_L{@nNmDDfJsOs`AB_mX=&yo60|_em?J+aDHjF z|6@I#PAq-nL`7A#RG5%>YhvWJ+DrN0iZ8jJG|&vMHGG}LP7LVgsyQOlqFiZUAuNft z$IMf25?@6u+0_@DV!Kg#X4nAvLa?GFL)a*|I~<77@u;mX%?uz#Ffm3!v~}yYAxf{zgqI(9~BxaJ~V+MA84OgO_rm`Wvi zg^E!P=PkTSMHE3ZU-#@Wt?sH2ml{v}CZ^6awGcCRZ~13mMr z5BB&ENsB}(Yh(@>nD`4x1FwrS?a+N@sF1lClEY|y;piNqQ)yh@N+4JCj7HiqXNGILi-pYf zbGvJq@k(FVvtxT^l$@oGnL+B#zHn!@e>5|^Ju}!JzJGh)@X&icz;>ZWMO|jRnk&~z zI*sTHw@z%^7LN1}XTy!z;r^j*TlxnFNAa)CG%fF*W5<;lk8(4u)oh%u*Jo>eYu9p2 z!x&L-&5~Y$?M*LMUJI>AlG@tV{nW=y-tyww>fGAa41FlDXLx8h+md~K@46oLS9L-u zGtQAuUs#VmTwgm|qTIRGh`1KjH%*Lh&0N!JC$XlYY9?ETfv`tkc+F(7-m{}L2jge9 z5*0Oy+gbZs+jQl%oYv^crt&-2uiLa~efX|-h5ESe(oO5vhu4McLR#~E^QH~Sqm7%c z(#OlK*~azj!n^KrU1+oJ3i_<4&xUJzZq3{fmB}-v;#-`e!mE1MukYQ^6NK?Y@zMAb z@niAl`1I-c=;}M1w>9?jKVE9=i%;77Vi=!_&o+*P@k)GxJNx73dA~Pail2*@b^9a_ zPRHkXe}-Etjs1W6D|9=MZn?q}4SF|^PBOV4_qlkH*2|2%n2fm`pVb)Z@H{J7 zq}#K}4L8D~o$(+^^8Bn@QM?q=L4!R@w{vt-|K_R}8Ih5a1D~5lGkjfPC9Eja42&M1 z$k6o^{Uj|9T1Ox8qw%tJc$zL~<~gS0Z4u2Z+d9uMKDQXi9!Y>_8~YlE7KE~{3n3Ih|Uc%ERzHGY0$kO?< zArm&OqR|_N!^X!nNqnwloR#<-9q=jX%~rq=NOG7_WQN7YeJt}_<3K25$db&2T^Y`G zSdof4k2T{baGHB%;+A|Gmo6zQKGL`!B`l&fQ)0^_GK!6Fgo6llT2c=VK*I0(^o9t~i@&(aOQQDov>3e`n*!H;BvCGH<)rWH)c z7|T3Jd#)J~mu?!->)1jJh05Crzx@`tX;)@a`M(zd+n5OxCUG(8f)zQ;!ItH{&$GxA z`rcIKvOC%}G0w;*+>D5C)5+*&?4|e=E{E%D4(U*ogYz9^6=xXHg4&(=#t*O<+H=ob zUGECv&&J179`jX3SZv9uAj5e~f7k^pD*{D%r;${|cZ7A^-6fVBsWmylJTF;Ra&Jl+I5>HV57vIxzQ_T+h$(B}1u zJXA_!<9X0gHvZ43r~r5L!P{je@_$*EA&{hTc$KuqnZF*RXh~-Egb5ScO_ZE00=a*~ z)N|C72}z-Ub0x``@}bW==M#&Y3eD-f51m9YNsKFh*loqJhVz+>ZX%$kiOus7&?a~9D|AhN)tar-1J6nX7}t zWkd;nil>ALI`@VU1(D3mS!0+7rr>jG>eY9UPaWWGoa>`DkTJt5d%_Hm+bJ`p@%6H6 z4h3k`L&~8lbff`zAFX&z$LFpK;^T0*(uD<|!Z%qt6m=h(I+*B6;x~?{!xQmm;$xIA z5A*4%0Cszfn-6k55`Qwe`M8T}h9w)Bnz`XiHW%9JnAVizU(Rzg<|0aO#yJ5qp(!L} zFz6O{#%BAWnIq;7n9%s5v)B}awRRo2kfvLeuN(n6{V)(S_VC3D2Is@=rldkj8&Veyg9|`$>G>jj|86IQJdOsG#Uu8S+xKbWppTNisi#(FQJk+s3vT_UJ zZcffZnzEW3KZ3*rqpDC#&sOL-I_PjxB`Dum)q};X2nIW3^yYf<37HiiGQEwedIJM3 zvR)>uT>jZ(5FIg*Zt;XvI}H`8(B=! zQ{F9`t6qCrmUfJ1dmGOUT8_9j*(;gKQvocUk$*^<`)G68hj23!E9TK)2VXbW_e=VE z4+~SKbGgt(XNQvGMbWye7f(9Q>KX|mdz|q+{(IQ?mjz41r_kn-v?8@ju}#ItOMTL8 zYNz_k_v0wZNZ0Jn1l~I=7NsgG5IhljkUw6kw#VWxLM=Y4G$YZC(uKNNXp5c`ie64Oix%XI88w3Binu3ew@SZ*(6G2`r|eH&5RUSoLYNop6>A8zx>7`C^- zNmEJDY4()dOoAY|*@{Y~jh-3@e)XUH%<^4EMx9AHz5HTEm3b}Buz0+dQBX8<9ea%iQAx$-(lf?ELKW_EZ9KArw1fB)O|!8Sxtv=3MvQl!k$+v|p&RXI zEL5%RcL^C4*mGvT={LTv@MT1oJVi^90uv|cnu8N9s9A)VW}T^4l_5*o&N(kV zovcCUK`B)^CUL?zc1nEO6Gv|kxz$R2G6d4w*@~*Hvldf?2-b2IASG!D&2Z7y6^rSY zY}UIH>Zfd0udT2hPf4`&vVKu|^sLveKAeFi9#@7;R%L~*qN{a6E$@*9EFDsghjv=V z4%PMu-Z(Fu&%LG;6PoCZjqc}`X_MI@)RayVrCDCFN`_P-_Qo(*cGJeEd8pljrBelX z#|GIup4rOcA=!0nRIDLIo2%;Rk_H^cS{!S<_S{TBsvPBb8|OYkm25Ytc8DrhHP~%E zRTXZdn*`?hZUL?IPigtMjiu^Dex)V9?%21Xr8l9X!97o8Q- zqI1IFH=n6GTQVo7t>|WT(riwrI7=1q9g&ml^`v88u&s(A1WJWYeD?f7E&I~;g(iHM z(QsE7#VY8;^Tozpst84se%680OfjZc?%~kdzc`20R*`Hs!d5!pIT}9^KNVWqS5@#R*Jt#uwlB0DNovC8=1Hyq zp*xppuTq+ZLDGQIK|zNVngyr(UBM#Ql9TyQ+ewg=V#ltX&ag;g=i~~-x1C^xNOlZa zkxU|66@*lFW^|Ml@H;Ub9@Vi>*WUhIDSndvAp;!e-^b%GGo}t3zouTc92w4RDlSlL ziG)6eaXhc6&~v{?i47q|HIsk1YCypQyT3ryj#VE}?x($(T$K;LBOgZDmM4F$zdFHa zrx}pgghN@Kd0E?jWtGMgTO@x4c^ykMPKOay96!z4#4@U+{BKA`l;$a(ZA==GmYu95 z1-9`^LINDDOL#wWLz!Sd@1{k!rX>P~D*C+P+NRbd;27kv^U+ii=xzT~m&9MY-{sV! z?GIy;*68l!s=tY0#ceznFa5$M9O!laWzDKl&UE}`jp@@>vh9Cz(|Vv~SM^t6$zS87 z9@)xQ|4|M)V~gqcuQ-W2`(H`^GDn9Caz{_Q;(OS(Ltq6&;;-T@8o5wThskOm)1UGD EKcF|ZWB>pF literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/securedrop_client/locale/ru/LC_MESSAGES/messages.po new file mode 100644 index 000000000..3de078a39 --- /dev/null +++ b/securedrop_client/locale/ru/LC_MESSAGES/messages.po @@ -0,0 +1,349 @@ +# Translations template for SecureDrop Client. +# Copyright (C) 2022 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.6.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-05-19 21:11+0000\n" +"Last-Translator: Andrey \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} уже запущено" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "С сервером SecureDrop не удается связаться. Попытка повторного подключения..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Не удалось связаться с сервером SecureDrop. Пожалуйста, проверьте\n" +"ваше подключение к сети интернет и Tor и повторите попытку." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Эти учетные данные не подходят. Пожалуйста, попробуйте еще раз, и\n" +"обязательно используйте новый код двухфакторной аутентификации." + +msgid "That didn't work. Please check everything and try again." +msgstr "Это не сработало. Пожалуйста, проверьте все данные и попробуйте еще раз." + +msgid "You must sign in to perform this action." +msgstr "Для выполнения этого действия необходимо авторизоваться." + +msgid "Your session expired. Please log in again." +msgstr "Ваша сессия истекла. Пожалуйста, авторизуйтесь повторно." + +msgid "Failed to update star." +msgstr "Ошибка добавления в избранное." + +msgid "Retrieving new messages" +msgstr "Получение новых сообщений" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Файл не существует в каталоге данных. Попробуйте повторить загрузку." + +msgid "The file download failed. Please try again." +msgstr "Загрузка файла не удалась. Попробуйте еще раз." + +msgid "Failed to delete conversation at server" +msgstr "Не удалось удалить беседу на сервере" + +msgid "Failed to delete source at server" +msgstr "Не удалось удалить источник на сервере" + +#, fuzzy +#| msgid "All Files" +msgid "Download All Files" +msgstr "Все файлы" + +#, fuzzy +#| msgid "Deleting source account..." +msgid "Delete Source Account" +msgstr "Удаление исходного аккаунта..." + +#, fuzzy +#| msgid "Deleting files and messages..." +msgid "Delete All Files and Messages" +msgstr "Удаление файлов и сообщений..." + +msgid "SecureDrop Client {}" +msgstr "Клиент SecureDrop {}" + +msgid "Quit" +msgstr "Выход" + +msgid "Last Refresh: {}" +msgstr "Последнее обновление: {}" + +msgid "Last Refresh: never" +msgstr "Последнее обновление: никогда" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "ВЫХОД" + +msgid "SIGN IN" +msgstr "ВХОД" + +msgid "Nothing to see just yet!" +msgstr "Пока не на что смотреть!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "После загрузки и расшифровки исходные материалы будут перечислены слева." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Здесь вы будете читать сообщения, отвечать на источники и работать с файлами." + +msgid "Select a source from the list, to:" +msgstr "Выберите источник из списка, чтобы:" + +msgid "Read a conversation" +msgstr "Прочитать беседу" + +msgid "View or retrieve files" +msgstr "Просмотр или получение файлов" + +msgid "Send a response" +msgstr "Отправить ответ" + +msgid "Deleting files and messages..." +msgstr "Удаление файлов и сообщений..." + +msgid "Deleting source account..." +msgstr "Удаление исходного аккаунта..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Все файлы и сообщения удалены для этого источника —" + +msgid "Failed to send" +msgstr "Ошибка при отправке" + +msgid " DOWNLOAD" +msgstr " ЗАГРУЗКА" + +msgid "EXPORT" +msgstr "ЭКСПОРТ" + +msgid "PRINT" +msgstr "ПЕЧАТЬ" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "ЗАШИФРОВАННЫЙ ФАЙЛ НА СЕРВЕРЕ" + +msgid "DOWNLOAD" +msgstr "ЗАГРУЗКА" + +msgid " DOWNLOADING " +msgstr " ЗАГРУЗКА " + +msgid "Earlier files and messages deleted." +msgstr "Предыдущие файлы и сообщения удалены." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Файлы и сообщения удалены\n" +"для этого источника" + +msgid "Compose a reply to " +msgstr "Составить ответ на " + +msgid "Awaiting encryption key" +msgstr "Ожидание ключа шифрования" + +msgid " from server to enable replies" +msgstr " с сервера для обеспечения возможности получения ответов" + +msgid "Sign in" +msgstr "Вход" + +msgid " to compose or send a reply" +msgstr " для написания или отправки ответа" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "Passphrase" +msgstr "Пароль" + +msgid "Two-Factor Code" +msgstr "Двухфакторный код" + +msgid "SecureDrop Client v{}" +msgstr "Клиент SecureDrop v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Это имя пользователя не подойдет.\n" +"Оно должно быть длиной не менее 3 символов." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Этот пароль не будет работать.\n" +"Его длина должна быть в пределах от 14 до 128 символов." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Этот двухфакторный код не сработает.\n" +"Он должен содержать только цифры." + +msgid "SIGNING IN" +msgstr "АВТОРИЗАЦИЯ" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Введите имя пользователя, пароль и двухфакторный код." + +msgid "USE OFFLINE" +msgstr "ИСПОЛЬЗОВАТЬ АВТОНОМНО" + +msgid "Show Passphrase" +msgstr "Показать пароль" + +msgid "CANCEL" +msgstr "ОТМЕНИТЬ" + +msgid "CONTINUE" +msgstr "ПРОДОЛЖИТЬ" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "ДА, УДАЛИТЬ ФАЙЛЫ И СООБЩЕНИЯ" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "При сохранении учетной записи ее метаданные будут сохранены, и {source} сможет снова авторизоваться в SecureDrop." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "{file_count} файл" +msgstr[1] "{file_count} файла" +msgstr[2] "{file_count} файлов" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "{reply_count} ответ" +msgstr[1] "{reply_count} ответа" +msgstr[2] "{reply_count} ответов" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "{message_count} сообщение" +msgstr[1] "{message_count} сообщения" +msgstr[2] "{message_count} сообщений" + +msgid "Preparing to export:
{}" +msgstr "Подготовка к экспорту:
{}" + +msgid "Ready to export:
{}" +msgstr "Готовность к экспорту:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Вставьте зашифрованный USB-накопитель" + +msgid "Enter passphrase for USB drive" +msgstr "Введите пароль для USB-накопителя" + +msgid "Export successful" +msgstr "Экспорт выполнен успешно" + +msgid "Export failed" +msgstr "Не удалось экспортировать" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Поймите риски перед экспортом файлов

Вредоносное ПО
Эта рабочая станция позволяет безопасно открывать файлы. Если вы открываете файлы на другом компьютере, любое встроенное вредоносное ПО может распространиться на ваш компьютер или сеть. Если вы не знаете, как управлять этим риском, распечатайте файл или обратитесь к вашему администратору.

Анонимность
Файлы, предоставленные источниками, могут содержать информацию или скрытые метаданные, позволяющие определить, чьи это источники. Для защиты источников просим вас отредактировать файлы перед работой с ними на компьютерах, подключенных к сети." + +msgid "Exporting: {}" +msgstr "Экспорт: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Вставьте один из дисков для экспорта, специально предназначенных для рабочей станции SecureDrop." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Либо диск не зашифрован, либо с ним что-то не так." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Введенный пароль не сработал. Пожалуйста, попробуйте еще раз." + +msgid "See your administrator for help." +msgstr "Обратитесь за помощью к вашему администратору." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "Кнопка ПРОДОЛЖИТЬ будет отключена до тех пор, пока экспортируемая виртуальная машина не будет готова" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Помните, что нужно проявлять осторожность при работе с файлами за пределами вашей рабочей станции." + +msgid "SUBMIT" +msgstr "ОТПРАВИТЬ" + +msgid "DONE" +msgstr "ГОТОВО" + +msgid "Preparing to print:
{}" +msgstr "Подготовка к печати:
{}" + +msgid "Ready to print:
{}" +msgstr "Готовность к печати:
{}" + +msgid "Connect USB printer" +msgstr "Подключите USB-принтер" + +msgid "Printing failed" +msgstr "Печать не удалась" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Управление рисками распечатки

QR-кодов и веб-адресов
Никогда не набирайте и не открывайте веб-адреса и не сканируйте QR-коды, содержащиеся в печатных документах, без принятия мер безопасности. Если вы не знаете, как управлять этим риском, обратитесь к вашему администратору.

Точки принтера
Любая часть печатной страницы может содержать идентификационную информацию, невидимую невооруженным глазом, например, точки принтера. Пожалуйста, тщательно учитывайте этот риск при работе с отсканированными распечатками или их публикации." + +msgid "Please connect your printer to a USB port." +msgstr "Пожалуйста, подключите принтер к порту USB." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "ДА, УДАЛИТЬ ВЕСЬ ИСХОДНЫЙ АККАУНТ" + +msgid "Are you sure this is what you want?" +msgstr "Вы уверены в этом?" + +msgid "When the entire account for a source is deleted:" +msgstr "Когда удаляется весь аккаунт для источника:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Источник не сможет снова войти под своим кодовым именем." + +msgid "Your organization will not be able to send them replies." +msgstr "Ваша организация не сможет отправлять им ответы." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Все файлы и сообщения источника будут очищены." + +#~ msgid "Entire source account" +#~ msgstr "Весь исходный аккаунт" + +#~ msgid "Files and messages" +#~ msgstr "Файлы и сообщения" + +#~ msgid "DELETE" +#~ msgstr "УДАЛИТЬ" diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.mo b/securedrop_client/locale/sk/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..c57fbb3c748db2e6a2864f2430bcc07194b908a9 GIT binary patch literal 11550 zcmbuFZER%MS;r400pieG08z<|r@!PUnqUg@tW6$-> z+&kQRXPlYU0+Cu8p`?{cE1>|Qt~Q_`839F5ZMFMlY#}}%ArJ_ts9IiBfm$GZXi6g? ze$P4g&Wv}xh%Bqk{(bK~FVE}$dCqaZdhZ>dQ~Y_J|9+JJ?)YAL8vgm_ol4!slsW|-eV0;C|A0~_c^{4`^?KOdzITCQpZ9}ehX=s-gOi{J&wz)(4N&&`Wl+|6 z4V(wR0E)c-0iFXN!3fh}2RsdaDSLh!6uFKgtk~x=_*38;;3@Fypv*tS<`QcWDEs{x zh|AR9gCh68fMWOm1Si0|5L)~)1&aTF7Ca1I0xyAAK#@-~N$h(8l(_sj_z?Jc@W;VD z@F&232HyqVjnSS2?*ZS-ixMdII)A^5lL{#D)B2JC^)gJS2u0cG6RK*_UjfFANU5PJ({|E`t9Bu7l5FOo{W~&+yyeCeKgf zB$@YHAg)wb!872WgOYdmVca?Jc~Ip1ZIDz^yP)X#mmn#tz7C50{tc9Mz5^0M>K>Hk zNA+P)=Ffp*k9APi*#cLr0-glF3MxIjaK3zQVS0A>(_HziR(d^-nmRFY z$HY2~vNYOw#Y}E=TyHlTc8i4N@pZ18-l~bYqu5$X3@6rZwJVJv zsafM;crkSD;-qL@zZ$Ykl8R?V6zg|gF-U8)d9fA6sZ3rE8scmh4)b1P3rU8)UlAc> zYu2$EHVn=ar`Q;l6(tU7Zkb zRbK83l99k*%UXcCp>CSg^S#tV9xu%UiA=`JHe|XI?nS*4;m#;Ec`Roej0U<3li2uP zb?C|5!TZ7m^EWk~$ZS|Z`;e6pJ-09+Gu>#oV6Z9PganBC#LBfTWfmxW5qY#g;R)*L2T%~b0yvc~2l z`LTypcEv@6*hI3}W=xDDHXyK~nk}6xt(4U4LRtRFNP50EIr-*dnYT4_m@er9oDX+@R17-o+T@`W#}imgkKfTajL z5C<#vr(w8o)Gj^DG(P<#*M@>l_r4S*myxlx5-}QhI zQt3t}v|A(Ha+Jd(2`lF($=QPN^GI_zr$!{ zSW^NFt0l(h%{FtoCVfyXF3pu!)Z)NlDz70~g4o*UN|)^zJeM-?eK8+O^&)&c-A2UF zYr=^m{ig@i{Wmm{*=I+#-*6K`s!7JhIBBZ=_MBfm&JLFNO}bM$vS3) zo-%$}luktU%d%-nN}#tdN0hwl${M$8n!y6MX_h6^l!|Qw3f`}JwqH4*HE}Hgt(}x7 z2@@u|G&NEbmrN&(HB@Nb)nV zWti#?DRc8%`_k5>8`?qZrkZKAip*+Ane}pxvkkYzD*aVDj?t$WlC{-Ii^kNb%343X5DUVo4CX)oX%r0ftSt<&v!b^^0_$Z;{8(Rs5)mNlg`hg#QB(*)) zfSszga0yLx9VgsSq3pzw4BmZcp$;a*9lSiM@)tVQR=&&)7 zDzs-8qt_bEf5bUx#VB+QtIdj#&OW9u$X3Xy-i$7C*+YN^9=#S>O|BTS5aorLai>-`MH7i4EEnq7A3DF8O zI1eQ1yc~eA0L9ccBRMGx)eh1YGi3eIl)6w_9@nmK(FJr7g;mPu z=m_bn+947li_a|TvJjO@FPbQ;&kMGTz3h5ZCEqgX)urr*d_=C59b^Mg zS@pa5fXo)^lGoxUqiW@UL1O!|1hm(%S*+uB7*ZM)JpK>A_*s36GfL+7tjS<{mQ+lk zCx|wo_rjcCScBwn+LXSzPD~V^C{Bzm895af=97)UFPv^~B!!h|3PZ_(!skG7ijK|r zQM1S~HA%)67gh>0$SILfn5F%k(nlwbP8KF73y)3c$tR~KCJPf!O-wMbutc4c&G(I) zC`>-3C!d&l{OF?-{27xTu&@$)VbYK*iz)pa2SvIAj~^1R5p_I$tnQ_CuUOBXPi-{m zt&1GvPB1&%Xme&m;`-pBuwuL>8q4ImK2}T9Rx)+u2v9y|WHyqx6a(Xsit`O?rWlemCWUP_i1R=94O(y4hdJ<@8>bUkfrL}Jq8?R35H z)Nq_wYu&_!QV2N`DpUHYN|277H6hiA3S2ndozkbhifQPh#g7&z$CO@PnVWv5yt;RV zANQ_IKePHQ^f1j;TTfbTxoCsKXpWoF-u2Lg0d0)miaN&c?>isX$(s^=^7Ipe>a9c%C zbs58F*ZJylP-jSJdY&(=91H%x{J_@2~F*p|VAU7|`7c(t&dvQHAp=dwZZbL0o&Gf|R^8(viyB4;nB3mt)$PcgQH$AwES7Hs9WiQud+$2gYGZ2= zS4Az%Zf)D&W>;DbcP@~d;{Mf2#3^j#N{{G@N5X2Qzb(~_t}p6@%$F-d2pBQ9n=a`0 zUT$wnv*-c<gKm?yETJ?QQpWY?Aqr$hEgkoD5g>GAkwl*CDqNjait8#h;6gq)wyH9DB&bTi&>?Qx7CoiJ3wCwm17%i+WA>`rGYIa*M#QAy1TV%Rswj z)EUH&ixeBAbS;TaB{~PXBO9s?jVz47VX;L;aQQDe&z)CMt%*ko|J>~u$fmHU%LNPC z;w`&5EYkM-S9LE8;6FZa+HzLUI73ns397X!o|I+04%B*5?Y`pGiArmIl;KF$@v8kD zUEjUlzqimw4EDRzF>+oOABk$<^FHz z<^F4@7nXE+TDxn-Qg*M%XSU>;#jn<&=$=RLREMdX@6?4un<9qz>U4Ye(;RG?{VUi- zyn(@TZ@?T-zAb@GNF)exbG6p3w9$_XZYe*)mPy*CbnUE$g z;^`oaST~CbDS@1~D9<8>3z3{Z25!lgmWCluwt=I@Y^*yTvudcd2CWMo7&`0PKC>^v zO2!vj3L$BsYHQ1oR-_TBTYSaR7wL7q-Rqk0lZ?({;z6}?ZhH3>Nyo*Z%eS4&J>F%t z-(?A6Nz$}OvynE$$|vnN0W_FF5x$dHr>hIh_Wx8sL zQ%JKXtJvn2UKg1OQ=zWBld~x;g*#}{iwNCs?)Q2*OCd{0-1iW6gp$irxvYQYT>qtI zl7lmbT9_Su%0HIMb0x)Ta&2i=l4xjM{oH|T%Q-HlDKCF0RT8r?_e0^TbnSkFG+x5j&f<&{p&|$Dz!TyVpIM)D{<= z(j?0%zzxYrO{S8TX2?ZUmVJ~x!ilz7WQBb-7RuXSK=TfEP+oGbfqB`R8;f?hLHO^z zUL50B+H@hD14Ku;_uRX#<=ztm(03EQw*5PRH4a`&mKyEdDjsJKN~u)J5?Gwno}4 zp{X3Ll_P$=!GY2t$kBsk^A2Ieh2lL}?|+#ty|mlQ+JK(Aia8x?VUS_?+J;$bfRqjn zptg22v2oj4kDPGjkJ(vS<(A$Z_9b3y$lIt!R5>rnOF72M9Q zdmRtRfg+65Mb0)}&$`w1ZzDZGrdiZc&l!5ZteuiBy?S$}Hl_M6l^4c!*3W8wg--+8 ze{J`b(u%$~yR`7^^bI3ib9zD3oGvc)Us}5Wy9}-zI0=|djM=~1h-#cJs7!4x4e-&3 zON(lTvqB?~9I`ES*1r9}u3LMy10D9%QseVlcv7vw`4k9u&njg>1j{o!3%&ifK<*c& zUh3*e&da$LSYDKF#ViYL=s~xW4?ts-&pJUm6}k==aQiP|-Mj9=FQviBTSf1t+u1DE zZ~5NM9#n+=H@8`Sa3yT-b@L0|;p>}kbjb!n(cKupRNMJ|?yXOf;)0QmmJ1hrZhLiM ICb`)CAEsWB$p8QV literal 0 HcmV?d00001 diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/securedrop_client/locale/sk/LC_MESSAGES/messages.po new file mode 100644 index 000000000..769eeb071 --- /dev/null +++ b/securedrop_client/locale/sk/LC_MESSAGES/messages.po @@ -0,0 +1,348 @@ +# Slovak translations for SecureDrop Client. +# Copyright (C) 2021 Freedom of the Press Foundation +# This file is distributed under the same license as the SecureDrop Client project. +# FIRST AUTHOR , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2021-10-18 15:42+0000\n" +"Last-Translator: Katarina Kasalova \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} je už otvorená" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "Nie je možné pripojiť sa na server SecureDrop. Pokus o opätovné pripojenie práve prebieha ..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Nie je možné pripojiť sa na server SecureDrop. Prosím skontrolujte vaše\n" +"pripojenie na internet a Tor a skúste znova." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Tieto prihlasovacie údaje sú nefunkčné. Prosíme skúste znova, a \n" +"nezabudnite použiť nový dvojfaktorový kód." + +msgid "That didn't work. Please check everything and try again." +msgstr "Nepodarilo sa. Prosíme všetko skontrolujte a skúste znova." + +msgid "You must sign in to perform this action." +msgstr "Na vykonanie tejto úlohy sa musíte prihlásiť." + +msgid "Your session expired. Please log in again." +msgstr "Platnosť vášho prihlásenia vypršala. Prosíme prihláste sa znova." + +msgid "Failed to update star." +msgstr "Zlyhalo aktualizovanie star." + +msgid "Retrieving new messages" +msgstr "Načítavanie nových správ" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Súbor neexistuje v adresári dát. Prosíme skúste ho stiahnuť znova." + +msgid "The file download failed. Please try again." +msgstr "Sťahovanie súboru sa nepodarilo. Prosíme skúste znova." + +msgid "Failed to delete conversation at server" +msgstr "Nepodarilo sa vymazať konverzáciu zo servera" + +msgid "Failed to delete source at server" +msgstr "Nepodarilo sa zmazať zdroj zo servera" + +msgid "Download All Files" +msgstr "" + +#, fuzzy +#| msgid "Deleting source account..." +msgid "Delete Source Account" +msgstr "Mazanie účtu zdroja ..." + +#, fuzzy +#| msgid "Deleting files and messages..." +msgid "Delete All Files and Messages" +msgstr "Mazanie súborov a správ ..." + +msgid "SecureDrop Client {}" +msgstr "SecureDrop Klient {}" + +msgid "Quit" +msgstr "" + +msgid "Last Refresh: {}" +msgstr "Posledné načítanie: {}" + +msgid "Last Refresh: never" +msgstr "Posledné načítanie: nebolo" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "ODHLÁSIŤ SA" + +msgid "SIGN IN" +msgstr "PRIHLÁSIŤ SA" + +msgid "Nothing to see just yet!" +msgstr "Zatiaľ tu nič nie je!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Nahraté zdroje budú uvedené naľavo po tom, ako budú stiahnuté a dešifrované." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Tu budete čítať správy, odpovedať zdrojom, a pracovať so súbormi." + +msgid "Select a source from the list, to:" +msgstr "Vyberte zdroj zo zoznamu na:" + +msgid "Read a conversation" +msgstr "Čítať konverzáciu" + +msgid "View or retrieve files" +msgstr "Zobrazenie alebo načítanie súborov" + +msgid "Send a response" +msgstr "Poslať odpoveď" + +msgid "Deleting files and messages..." +msgstr "Mazanie súborov a správ ..." + +msgid "Deleting source account..." +msgstr "Mazanie účtu zdroja ..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Všetky súbory a správy pre tento zdroj boli zmazané —" + +msgid "Failed to send" +msgstr "Zaslanie sa nepodarilo" + +msgid " DOWNLOAD" +msgstr " STIAHNUŤ" + +msgid "EXPORT" +msgstr "EXPORTOVAŤ" + +msgid "PRINT" +msgstr "TLAČIŤ" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "ŠIFROVANÝ SÚBOR NA SERVERE" + +msgid "DOWNLOAD" +msgstr "STIAHNUŤ" + +msgid " DOWNLOADING " +msgstr " SŤAHUJE SA " + +msgid "Earlier files and messages deleted." +msgstr "Predchádzajúce súbory a správy vymazané." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Súbory a správy vymazané\n" +" pre tento zdroj" + +msgid "Compose a reply to " +msgstr "Vytvoriť odpoveď pre " + +msgid "Awaiting encryption key" +msgstr "Čakanie na šifrovací kľúč" + +msgid " from server to enable replies" +msgstr " zo servera na umožnenie odpovedí" + +msgid "Sign in" +msgstr "Prihlásiť sa" + +msgid " to compose or send a reply" +msgstr " vytvoriť alebo poslať odpoveď" + +msgid "Username" +msgstr "Používateľské meno" + +msgid "Passphrase" +msgstr "Prístupová fráza" + +msgid "Two-Factor Code" +msgstr "Dvojfaktorový kód" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop Klient v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Prihlasovacie meno nebude fungovať\n" +"Malo by byť aspoň 3 znaky dlhé." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Táto prístupová fráza nebude fungovať.\n" +"Mala by mať 14 až 128 znakov." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Tento dvojfaktorový kód nebude fungovať.\n" +"Mal by obsahovať iba čísla." + +msgid "SIGNING IN" +msgstr "PRIHLÁSENIE" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Prosíme zadajte prihlasovacie meno, prihlasovaciu frázu a dvojfaktorový kód." + +msgid "USE OFFLINE" +msgstr "POUŽIŤ OFFLINE" + +#, fuzzy +#| msgid "Passphrase" +msgid "Show Passphrase" +msgstr "Prístupová fráza" + +msgid "CANCEL" +msgstr "ZRUŠIŤ" + +msgid "CONTINUE" +msgstr "ĎALEJ" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "ÁNO, ZMAZAŤ SÚBORY A SPRÁVY" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Chceli by ste zmazať {files_to_delete}, {replies_to_delete}, {messages_to_delete} z účtu zdroja pre {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Zachovanie účtu zachová jeho metadáta a možnosť {source} znova sa prihlásiť do vášho SecureDrop." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "jeden súbor" +msgstr[1] "{file_count} súbory" +msgstr[2] "{file_count} súbory" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "jedna odpoveď" +msgstr[1] "{reply_count} odpovede" +msgstr[2] "{reply_count} odpovede" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "jedna správa" +msgstr[1] "{message_count} správy" +msgstr[2] "{message_count} správy" + +msgid "Preparing to export:
{}" +msgstr "Príprava na export:
{}" + +msgid "Ready to export:
{}" +msgstr "Pripravené na export:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Vložte šifrovaný USB kľúč" + +msgid "Enter passphrase for USB drive" +msgstr "Zadajte prístupovú frázu na USB kľúč" + +msgid "Export successful" +msgstr "Export sa podaril" + +msgid "Export failed" +msgstr "Export zlyhal" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Pochopte riziká pred exportom súborov

Malvér
Táto pracovná stanica vám umožňuje bezpečne otvárať súbory. Ak otvoríte súbory na inom počítači, všetok zabudovaný škodlivý softvér sa môže rozšíriť do vášho počítača alebo siete. Ak si nie ste istí, ako zvládnuť toto riziko, vytlačte si tento súbor alebo sa obráťte na svojho správcu.

Anonymita
Súbory odoslané zdrojmi môžu obsahovať informácie alebo skryté metadáta, ktoré ich identifikujú. V záujme ochrany vašich zdrojov zvážte pred prácou s týmito súbormi na počítačoch pripojených k sieti." + +msgid "Exporting: {}" +msgstr "Exportovanie: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Prosíme vložte jednu z exportovacích pamätí získanú špeciálne len pre SecureDrop Workstation." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Buď pamäť nie je šifrovaná, alebo má inú chybu." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Zadaná prístupová fráza nefunguje. Prosíme skúste znova." + +msgid "See your administrator for help." +msgstr "Požiadajte vášho správcu o pomoc." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "Tlačidlo ĎALEJ bude deaktivované kým bude pripravený Export VM" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Nezabudnite na opatrnosť pri práci so súbormi mimo vašej Workstation." + +msgid "SUBMIT" +msgstr "POTVRDIŤ" + +msgid "DONE" +msgstr "HOTOVO" + +msgid "Preparing to print:
{}" +msgstr "Tlač sa pripravuje:
{}" + +msgid "Ready to print:
{}" +msgstr "Pripravený na tlač:
{}" + +msgid "Connect USB printer" +msgstr "Pripojiť USB tlačiareň" + +msgid "Printing failed" +msgstr "Tlač sa nepodarila" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Správa rizík tlače

QR kódy a webové adresy
Nikdy nezadávajte a neotvárajte webové adresy ani neskenujte QR kódy obsiahnuté v tlačených dokumentoch bez vykonania bezpečnostných opatrení. Ak si nie ste istí, ako zvládnuť toto riziko, prosíme kontaktujte svojho správcu.

Body tlačiarne
Akákoľvek časť vytlačenej strany môže obsahovať identifikačné informácie neviditeľné voľným okom, napríklad bodky tlačiarne. Pri práci so skenovanými výtlačkami alebo pri ich publikovaní toto riziko starostlivo zvážte." + +msgid "Please connect your printer to a USB port." +msgstr "Prosíme pripojte vašu tlačiareň do USB portu." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "ÁNO, ZMAZAŤ CELÝ ÚČET ZDROJA" + +msgid "Are you sure this is what you want?" +msgstr "Ste si istí, že to chcete spraviť?" + +msgid "When the entire account for a source is deleted:" +msgstr "Keď sa vymaže celý účet zdroja:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Zdroj sa nebude môcť znova prihlásiť s ich kódovacím menom." + +msgid "Your organization will not be able to send them replies." +msgstr "Vaša organizácia mu nebude môcť poslať odpovede." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Všetky súbory a správy od daného zdroja budú zničené." + +#~ msgid "Entire source account" +#~ msgstr "Celý účet zdroja" + +#~ msgid "Files and messages" +#~ msgstr "Súbory a správy" + +#~ msgid "DELETE" +#~ msgstr "ZMAZAŤ" diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.mo b/securedrop_client/locale/sv/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..90b461f1725630e39b0dcc48e7b594757b247985 GIT binary patch literal 11897 zcmbW7U5q5xRmaP*lQvCg^?w3N zj(gq`1pEsef3%M?;A_DrK~xf40Y3nK6g&rh7L?Av4K9NBvzZ031AYShI>^+)yAe+M z_yDMN=D>^K0w_Jd0B(YR0ZPyJG3fQ+!=Utc4%GS$PS19bgPP@VCJS!9N7G z?srQ30jT+20@uJFgWCT&9$p1M0XD!t2cG~nxjrv|+TUkD(--&%pML^g1mBNR_55?- z$H8xbTKAm@@ka1hK<)nwDE-fa4}(vEvd`~=vgb|kec%yz9sD;?`|Dx^>H907c=|o? zz2Luq_k;KTJZpe8@HOBj`0LIe}dw-oJ4wkGblS< z1W{qo2PMY~;3MESz_Z}Lf|Bb!C{z5O2Q_{h)cpY{yL|!F{9gp;z^{Ujfqw%&555&; zE`py2m%#6X;{ChWEEEYo2a0!J1|{d$zy*@NdD3;G^99HSo7U@#34H_VGOsss{f9O5V5EJ?|d@FYtLDyaU8Mrk^EH@@#NT zzch#D{}|U@T+)^Fgj&pAn)@2plU%>SC7tPodW7^`b%pC$d*}Z+0P`5X zq$@(9>ELysUgtcRUd2tl7CcxCdjs#c%g>ifd;q-2wa%ru^l>h|wz%%)Qto>b*DBZa zYlaV~%wDL-Y@iSF1-;~x)vL)H+3ZfPOXW@3Ks@~@m+X6$%ikQW>SM_RDZ@{Oxp5|KNQY@3*6+860&qMHG5X#w0{`lJRec%>1 zo?c(wXe>_NEw5j4f!oc}fy<+8KgwK@x+n>E`jN|`VLy)YK)2fIV3_8SOEbnL9T(cS zhr#*o*$Zo767I#xo*QOyQlz88WpUoi&(HDQ`JD?-wRpM{)b3i}SXVwnu{~DROrZ7hUb9 z2z%OH9<@hVTpThoYKNmDPLsUumUrD@I&xtaxlxjjfNpvqi3gG@az!`JO`cgd>_;Ig zuvOcI9?Otr5GQe7WMPqJbuUcy_rewF1C@5tVoKIV!WP1;aOo~;thPPWVuSF|Pmert z2O;9!Lv1}ycGGMSYRkOekMmgeVUtBSa!J@j?C3C>b@`~>bzxpk>KCrNE9JhCad*`3 z+Y&j`W9v#dchHr()66s_#Yx-4(M~_kyQVx8FGW`-&g*9S?SyIaLYCE5%6n3=6t8iq2Be&3V9 zTzo(ffc3c#KekuD1w5C5VLwk<$`Lw>EIo`mJP)lz4D(YXuc#v-b@w1lipPV-K^WU! zqokc34vkU0=rCAltS>ZIgN2Rtt>yLYX0T93v@(*35Ztp(yY0;6Ry;f=~D8Jn_I=Du=osN>i-yJ*KG5yx-ETAdPk^N(#f6Ts050ZY0ON`eG zn(GU#Yge|Ki*9Lowdpq2-Db0Owb=@q&s^DPZ3WFRBQs>D*|KAM$5u^(h=mv|n8o`9 z_T02sngwE@5e>0#@)Xiqq>1{(*n=!3Zde?O3+A#gIt=rC*v%A!2{2|Pn>lD&q;b0; zPSdGA5exB_oQPN6LHc=j{YJ24!(?y2S2-%#C-=bzF8M@w`?!*vr;SifoO)n1#Qh>i zK+EcZOh^iV=OR(`JlR6|N<1Xo)sWR&(Jl$NJCCy>cyRn48d@iqiYurnk0STnh-VI?;(_2w zYk7SuxH7gwP^FgAZ!9JHjAn&I=sk%vP_KrP)L=#EMr<(&2ZYKgvzk{Nq_thbjrmI_ z8b26&q0)pRWY@Ik6O0#3IWJXWj4x)IkTg)fQ#{CB`T)%OCPGc?{pTsoqs^$>&Y$uSTbWtA+ zGeWwG0y1M2-Ie2f+6{N&z6u*jdfjv2hK$!wRXXUM8D=VKm0{J9R-`qm)70#y2p*}EqkLvS@*V|SX<`KBmpcC36sL@<2Se8wVRf+ zPLzsft8UaE)_JP06daZbzRHG?qxLFhQTjYXu(T3YKBQ=kf=$(^Q*O8!@2M~h%A88ad2M2u6)26&t(DX_W~7iisWWmfWIDAIzDtIE=PUfdqr ztMu8iQIs@Fx7OGx^;=|A8H_D02l*m*D%nguS0*_VuH2d(2H8&;PAn@!qF5y^q=$mR6T3#J0=a6kLsYl%PuVRiyA1$b+YK zSV9A2*n;Fej?{|3V>d<(WrCg$t~EDj-C}dKxz%({>d#iwZEkG07MiZHu&}XBPMsd1 znrqWF))(Dcb91wCsks?kqr4p`4d>p|rM+R4vEYD>u$1caltNMi56r##F^XVVS>#+d ztv*|%&-xoTX5IDjfPegE6$Yp7PC`=2jw&@xC!EK%wvJJIVG@7R7gMLP$l3=eZ(uy& zRAQS}TfrihG7LJ!5lViRtSc$1^e;&Qljm8heQ)?WG|+eD?t|;)n`%TQl?^fi1}6St zHK5c*a6KH-^=RAvpB1-nh|po*yx3)oUh96bk8c zg!|fZr*@SfhtcNU=0QXd>ALq#63F{!T9J;=wY7XN?$n+b?d7$tbl%Ne*{HS1S$eRx zNRc`3t~DF2+S*2KvEeRn%&#qf@FN^1W>nPGwz4qE`)WYMUv!mllxO| zYi-MmbNT+dH=%Rj~vL)}u?H(T(Z^P6#yUcl2&rz%N;@u)w_aw@yKFL$9 zT93elM{(%H1k^JrUsfHnP0bE3DeJAs)2O2thr@(LtZ^1vldW1_i6*3TR?f+B3#Un_ z4~9p#;H&L{2^rH#d)7Z=mJy8|6OmRza`a+n|LA7YiT9B7=q5Yu(x*APRqP$z%-Cn$ zZ46vzUMTR8olF`JuMtt=Qr0K46b| zk6R(?-3zIjG_KSZpn~IF+!@a>bTVi5_?%lbD6roLuZl-sc%NM z$4U)!=y6Fw1#Z+EFZxP(l!VhvGNWL5uaenvg`dVRSM_Vvh^Aj%b>pI9id@pKc!cfy zM>hva$U#gji@Di5y4mlO`hN<&yrnxSWp8zSv$^aMt8aGcr-W`l?&BvA0BhBq>~4n6 zdxxElImdXlX_=?#CSH&}@v4dz>=4q+QpefXAq9(|ShCW6u5>{+w6v-<>`HQ37=n0m zFvv~(%M=au&g5tQUOJ%UW?+x7VEfKOxd9pe=mj4HENn%Zr%%6o_mO@%xVl z@*}y3HrG=NFVg8ePY&C?s2?=0KGC|i6)e$*+B|w;i?f(T!YZ5* zXOxf|cyEd>O^AiP7l<4hr09wf_Bj72lHjpX-)s)2I2D^!$p-zS7bzLjtds9TB_Eh& zQ+{_zqN>?9i1WM;KTv93-8=CaD^dkfxUEf%onon!Mf@q-fZ|@6>0kZ<`91disbhWO zzkQC;(0YVWD=(fy9mycf$f;1v_xf-!%g?65n0Pwm2QeQKj9T)a{@ALXVoQorw>fHM zBl?7jCup~dSz!{aq?Ee~5S6E4hlzIAk8YAIT(wuLw0y~-mIM_hg+nQaeTR0JlRb63 z*>%k^U7O|)06lLXSaA2)A(v_#}`BF$07_?!&+q^ z$CoDEMsHFYr6K2ag{pC*u^ipwXcVePK&1qo;;G?`GjFydye zcs=cgwCFmitvoJue)hKNcn;4eYJ;DBjurBLOxd_+o1y3hN^PvI_cNDWEyZ~r+ng$1}W)2o3P;#*2{bRR`3xLa^ckC9R>v ziYHaF#XQ_k6b$#rxrGe0NZjdY6y=br zpEA+codmD)IO)%4Ycrp6v=5z&Ft4kJkEa{sqg6E)hqc#o_WF$08ywwI5HvyzRQOsi zQ+rb{lb=?5%s`c$>=CraYZS)=5<|*KGs~Eony{(kA|Z{Y&(xVEk9Yac8vLrH)osJa zLLWCvwZ4M=@{5X^ohNoVF05+3#F9=mql7m>sd;teH74Y)>3@8q*D3Y&IDU~Es-H(| z)oIz+#=h+0e_besDUA_#G_4&&eB=++>|FPDR-uI^ro+YL(b90o6N&T&S7>O2`_u|2 zhybz6^X3Wbuc&(UBsB|QGV&Ew&p4dnnH(b7DhWh6rXF1OY`KYqDqR^+mBuhvdO{hR zl7oS9b?V$_u|X!}2L~n4Jx>43a&o(sl1$QBH=}73rN>-mJF4k@?qdR^=YKt%U>B{< z<8%ue>sOCnpu1SLI~&u<6XTV28tfu4`NA)t65ziVQ2W~sDA}aJvCe#nkuW8pGQ&c#K>t}iy%gGChSU23d(TSz2< z3h6+fbU@, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.7.0\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-13 14:02+0000\n" +"Last-Translator: Jonas Waga \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} är redan igång" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "SecureDrop-servern kan inte nås. Försöker att återansluta..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"Kunde inte nå SecureDrop-Servern. Vänligen kontrollera \n" +" din anslutning till internet och till Tor, försök sedan igen." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Dessa uppgifter fungerade inte. Försök igen, \n" +"och kontrollera att du använder en ny tvåfaktors-kod." + +msgid "That didn't work. Please check everything and try again." +msgstr "Det där fungerade inte. Kontrollera allt och försök igen." + +msgid "You must sign in to perform this action." +msgstr "Du måste logga in för att genomföra detta." + +msgid "Your session expired. Please log in again." +msgstr "Din session har gått ut. Försök att logga in igen." + +msgid "Failed to update star." +msgstr "Misslyckades att uppdatera stjärnmarkering." + +msgid "Retrieving new messages" +msgstr "Hämtar nya meddelanden" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Filen finns inte i mappen. Försök att ladda hem igen." + +msgid "The file download failed. Please try again." +msgstr "Nedladdningen misslyckades. Försök igen." + +msgid "Failed to delete conversation at server" +msgstr "Misslyckades att radera konversation på servern" + +msgid "Failed to delete source at server" +msgstr "Misslyckades att radera källan på servern" + +msgid "Download All Files" +msgstr "Ladda hem alla filer" + +msgid "Delete Source Account" +msgstr "Radera käll-konto" + +msgid "Delete All Files and Messages" +msgstr "Radera alla filer och meddelanden" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop Klient {}" + +msgid "Quit" +msgstr "Avsluta" + +msgid "Last Refresh: {}" +msgstr "Senaste uppdatering: {}" + +msgid "Last Refresh: never" +msgstr "Nästa uppdatering: aldrig" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "LOGGA UT" + +msgid "SIGN IN" +msgstr "LOGGA IN" + +msgid "Nothing to see just yet!" +msgstr "Inget att se, än så länge!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Källans inlämningar kommer att listas till vänster, så snart dom är nedladdade och avkrypterade." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "Här läser du meddelanden, svarar källor och arbetar med filer." + +msgid "Select a source from the list, to:" +msgstr "Välj en källa från listan, till:" + +msgid "Read a conversation" +msgstr "Läs en konversation" + +msgid "View or retrieve files" +msgstr "Se eller hämta filer" + +msgid "Send a response" +msgstr "Skicka ett svar" + +msgid "Deleting files and messages..." +msgstr "Radera filer och meddelanden…" + +msgid "Deleting source account..." +msgstr "Radera källans konto…" + +msgid "— All files and messages deleted for this source —" +msgstr "— Alla filer och meddelanden raderade för denna källan —" + +msgid "Failed to send" +msgstr "Misslyckades att skicka" + +msgid " DOWNLOAD" +msgstr " LADDA NED" + +msgid "EXPORT" +msgstr "EXPORTERA" + +msgid "PRINT" +msgstr "SKRIV UT" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "KRYPTERAD FIL PÅ SERVERN" + +msgid "DOWNLOAD" +msgstr "LADDA NED" + +msgid " DOWNLOADING " +msgstr " LADDAR NED " + +msgid "Earlier files and messages deleted." +msgstr "Tidigare filer och meddelanden raderade." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Filer och meddelanden raderade\n" +" för denna källan" + +msgid "Compose a reply to " +msgstr "Skriv ett svar till " + +msgid "Awaiting encryption key" +msgstr "Väntar på krypteringsnyckel" + +msgid " from server to enable replies" +msgstr " från servern för att aktivera svar" + +msgid "Sign in" +msgstr "Logga in" + +msgid " to compose or send a reply" +msgstr " för att skriva eller skicka ett svar" + +msgid "Username" +msgstr "Användarnamn" + +msgid "Passphrase" +msgstr "Lösenordsfras" + +msgid "Two-Factor Code" +msgstr "Tvåfaktors-kod" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop Klient v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Det här användarnamnet kommer inte att fungera.\n" +"Det måste vara minst 3 tecken långt." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Den här lösenordsfrasen kommer inte att fungera.\n" +"Det måste vara mellan 14 och 128 tecken långt." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"Den här tvåfaktors-koden fungerar inte.\n" +"Den ska endast innehålla siffror." + +msgid "SIGNING IN" +msgstr "LOGGAR IN" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Vänligen skriv användarnamn, lösenord och tvåfaktors-kod." + +msgid "USE OFFLINE" +msgstr "ANVÄND OFFLINE" + +msgid "Show Passphrase" +msgstr "Visa lösenordsfras" + +msgid "CANCEL" +msgstr "AVBRYT" + +msgid "CONTINUE" +msgstr "FORTSÄTT" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "JA, RADERA FILER OCH MEDDELANDEN" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Om du behåller kontot så kommer dess metadata att sparas, och {source} kommer kunna logga in i SecureDrop igen." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "En fil" +msgstr[1] "{file_count} filer" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "ett svar" +msgstr[1] "{reply_count} svar" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "ett meddelande" +msgstr[1] "{message_count} meddelanden" + +msgid "Preparing to export:
{}" +msgstr "Förbereder export:
{}" + +msgid "Ready to export:
{}" +msgstr "Redo att exportera:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Koppla in krypterat USB-minne" + +msgid "Enter passphrase for USB drive" +msgstr "Skriv in lösenordsfras för USB-minne" + +msgid "Export successful" +msgstr "Export lyckades" + +msgid "Export failed" +msgstr "Export misslyckades" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Förstå risken med att exportera filer

Malware
Den här arbetsstationen låter dig öppna filer säkert. Om du öppnar filerna på en annan dator, kan eventuella malware-program spridas till din dator eller ditt nätverk. Om du är osäker på hur du ska hantera riskerna, vänligen skriv ut filer, eller kontakta din administratör.

Anonymitet
Filerna som lämnats av dina källor kan innehålla information eller dold metadata som kan identifiera vilka de är. För att skydda dina källor, vänligen fundera på att redigera filerna innan du arbetar med dem på en nätverksansluten dator." + +msgid "Exporting: {}" +msgstr "Exporterar: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Vänligen stoppa in en av de export-enheterna som är provisionerade speciellt för den här SecureDrop-arbetsstationen." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Antingen är enheten inte krypterad eller så är det något annat fel på den." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Lösenordsfrasen som angavs fungerade inte. Vänligen försök igen." + +msgid "See your administrator for help." +msgstr "Kontakta din administratör för hjälp." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "FORTSÄTT-knappen kommer att vara inaktiv tills Export VM är klar" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "Kom ihåg att vara försiktig när du arbetar med filer utanför den här arbetsstationen." + +msgid "SUBMIT" +msgstr "SKICKA IN" + +msgid "DONE" +msgstr "KLAR" + +msgid "Preparing to print:
{}" +msgstr "Förbereder utskrift:
{}" + +msgid "Ready to print:
{}" +msgstr "Redo att skriva ut:
{}" + +msgid "Connect USB printer" +msgstr "Anslut en USB-skrivare" + +msgid "Printing failed" +msgstr "Utskrift misslyckades" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Hantera utskiftsrisker

QR-koder och websidor
Skriv aldrig in och öppna en webadress eller scanna QR-koder som finns på de utskrivna dokumenten utan att ta nödvändiga säkerhetsåtgärder. Om du är osäker på hur du ska hantera risker, vänligen kontakta din administratör.

Skrivarpunkter
Flera delar av den utskrivna sidan kan innehålla information som är osynlig för det mänskliga ögat, som t.ex skrivarpunkter. Vänligen fundera på risken när du arbetar med eller publicerar scannade dokument." + +msgid "Please connect your printer to a USB port." +msgstr "Vänligen anslut din skrivare till en USB-port." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "JA, RADERA HELA KÄLLANS KONTO" + +msgid "Are you sure this is what you want?" +msgstr "Är du säker på att detta är vad du vill?" + +msgid "When the entire account for a source is deleted:" +msgstr "När hela kontot för källan raderas:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Kan källan inte längre logga in med sitt kodnamn." + +msgid "Your organization will not be able to send them replies." +msgstr "Din organisation kommer inte att kunna skicka svar till källan." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Alla filer och meddelanden från den källan kommer också att raderas." diff --git a/securedrop_client/locale/tr/LC_MESSAGES/messages.mo b/securedrop_client/locale/tr/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..b53914ff076acad926c257c09f0fb20dd6640e7e GIT binary patch literal 12069 zcmb`MU5q5xRmZO#+leRsAa)!=2>9B3B(`UIylcl^#_RR=%=GSdcD~%xv+HqURyEx< z)8($N>Qq(lxMwkmP>c~04@e0QD0qYnIN|~Aych{B0cCn5K$egq9uQIx1R)`0u!4j@ zyuk0ATh-k&yS8kH*3|r~tM13S=lsvdz5Vz1-11Gs=MvXvxjy+3W4;RBaU1{meC%V! z+z#Fj-U;3d{xtXi_>J%5@;9|a!;MSmwinZFE*UKT*n<0|+`FaRz1%ix3HE-3SU zH^=XRGTslsMetuik^cmp7r?K8W$-)TEGUD^_c>7Hdj(W|flu=Nhu~@OA(SfpUj$zO z{}_~c?_&`k2Y(I}`Hz93{~7R6@L5po^DCg(^Y_5dgZtnW@NH1!YheV@_wRzj)3?B% z1^)%SAH4G?m;;;wZw6PvC%_Bf?oG!01}O7S(HT>iCqUuhIZ)=^1ZU~^3iy5SFL-&3 z=YL@71O6>2e7X%`Meik0`0xc#*7+2OsOCJ_0vq}Jw?NVN_dxN-zXMU3`7coBz4Jk1 z5Y0@2qL(wE%<}>$dV2+wb^a#!1@KK!^z$|-{x>)WmRa-`_zEcN_%~2^ejAGw|NaCh1#sL&jMH-m43!jpHvn?M;`ssa-|3G(b z|7GwNF2aHO3F=Wji!MbEU*!4)E|En(s7d)=1x0_)as48fd{($F>7Dy$0nDlKwG0Z+ zMCRMLqVc@4m9yQ`lH%@&UC$x*2 z*3-9rbFy{()S?%8TS2sCyGambaWAt;khas4)4V&maq8I`y_@7b!Amk5Z=%LR?5<4K@%nCf z))O>YM6lTx(Sv9+PCA~5%>Csc4a7bOnYDZyd2N>M_x(wm_8KkgrTL(4;*wp-J^zMz*hu5HdC6=n6w0luDmo?Suk_UOZDo~TE)!e5iO5oLI|Fz&~|Ngw(udI^}?owUqn0) z_Y$73N+|K?len8l&5@I}{6^a`YoaR7k3Mvd3B}=ep^ucsmMXTw*w% zsVvRa)>rD4d3&b1P_fHPcC}KwP^p>9b1TcWx~X^xnIXB6Et@JkwyF?BG{j)RB)Cjq zPgRS#Ss(@)ktX^kjUlZ@8b2h)ZYMEuL*r18F_wnWu9v3WRw6N&0Ha3IkxfM-jotKc znr88hSctczM7;b7tDmt~UN&d6nb_OODvnC_NnP-POD+*!-!3QTjao=f9P7~Q;(op* zpd}?ECL{&Gb0Lxc64^rXmGDTNv>A|($R5PDJW^*6Bk`x2xnU68jp9=1&~0*6PpCH3 z8=Qou8nFbXat?r|h0jh^3m&uA{7n*YYX)a!;pXr&G_*u86|SJ7)c5U+J^J+h>;bb< zt1i{e%Fqs`NG-YFXi9V$O$!Onc@k-$R5T^2!3xjz5Ha#Pgvv3qs#k2sQ=5bv^_QkU z>=?L3#SulwrfSb67`HIVd9fr$-ZyR9^&7!v(C{SN30ICd?Zr{HVSMTwk4&xWbz{!t zDLm~`Zlqa1^q+oklVW3P+Yh!{*-RwaIDGKbm6uOWOPf=N2T=`ts4;|kDhcGsUDO4` zgpe*p0hzIg?vmqN+VwVqPzoDa=@rL;m&JHtETx0osbR*VRvva%q(G7Ra@Tpb7i6X; z>Crpn75c0%1ASQi$e=pFhty5Y??^URR*@4Lp4KuqC|e}`rk1i#QkO7Amp*22@@E5f zL#&#gC4sN{j{I%(>e7)}t)5-7)g_0^YjwSmLRp@z%`R4XGD-k*M8YVum+_nHpXx)+ zSw~7mwN=XxyCr&sl7hWF!57)kx71$QBuby536_>bm3ApweX}Yx>X;j@23t}Xnmi|H z*^r7aND)jHL1Qu)o`DI)7earNq2s6_k;#RBUJ9R@zGh9ywslFY&7c{5F4OvK7@r!N zcE>O2jT8p@zsuDB{h#bVV2zD}{1qAG?tdzAY*TyV1)sQh1@+ zW{}EusmcB!3qnLy^=e5bXO%!Poi1XZH1L<(nt z)LfL!5*i@GW+d-nq?Y(QbYs+zC+HcoURj;A^Oc24y<#iWpS6lzU0$orRcv`~Zh4KI zI^IHRu2oxJnzxIU)z$LZ%BoqXyzNLDPMxQV_PTz;gdGH7Dyh$73Q1|Wt?m^DD1v5r zk#j}0dMS%9xd$&#+AH}6|M0^i430e=g`}JvMQR#PIM2x3vW?pEqF~1rQ#WFf9v`5* zj`DzAi3%;p3L3E_!=O_fA?Ih#x}2ht{$(Xb*KYmB;0;k2Zs=G1I&E1jyxGj?KSd8$Uv zl8#gJ6qz%2y;81CEiO;Zm+iUbnZ@cO&$F4BkfLs?o_J9j%F)D(J+rp3V3*2^6??L> zSgtOdF3-=`;MXadMq52LVpDbB>x`s1*~+qRIx{`ZnGIw3rBst%lU+{~R73OPbe2qyW|*;AGO<`)tc=!vtn}yv+pY{(nyPdDLlgg{Y`Pm#?mVS|IQ6rq z*Xn1cPK?^gvNru>suB@_u*Zx&u@PhwD`Ag_KXnGLNGWc+`Zay}_){F+$eX7l`@qxo z*i#eFO`Y{4vV$t-qFbJQymaib31bIWm*xjoYr~tt)rG;;_2nAJWPL9h>}8>sSU=;S zB=iq<@qgIZ@Y}^(8tn}BB7o}NZtcG*CnTh1IVfBAcAA4dN=H2?3FUcU`!w;h4hJH` z8(uot3z=iX54Wg5lBVAdVWem>6y#T(g(XNV@J*% ze9pokKM&Z$@odtD``5Bf-nc~u4QWXZLoLbvwS(RLYthj&GjufAYcO{dw=+-GFk1EO zP-v1*>h(9pAdzJg*@DA?-Qe-Y{+rC&Vdy5C3$@1K;p|qh5!n4V278dKEwYS6LWvxt z5!_|qPAK}4&eYdin3=(QVUNR6%I$|*OSgQ>pz zs(aqclR_;Ug-)A6yX|Gf9o5Z_*i#qaCT#YIJMO@3K2G~iD;6pp?0VKiO;AcqPA>+K zLpaBTNEZ+l%sRjSX10ILV$uCK#PX^eZaQNM?%9ClP%C~!>;Zke_Cu4)bo3;jr()s;g4(UZ9C&~@HFndM+F=-{9u4WIY=9N4lLC$YNNCih~$ zB3gt{q|mzr5kJ{~!*6q-&<;3b3!A;cZZGQX^u%|AB!sbOR)UaIkPuZlw}rF8^lQ`& z)aut0_=qelwH+rtDkvN5zY#=KR09aMAx7oh$a+YRSOv=o5Yp%X%a7BrSb!*yU?B0K zxqoekcqKj-Xq@m7KH~gCj=->0TXdtgv=Fu9bb#m<(J8GZxb_8jv(rF zRczVg1TG*^ok=+AkSYl}&zMzI*67)T-GIXnk%64;weTGTBmlZ@6oP}REA{e%nXgX)NSM+l@rRepw5gYHOkJYriw*;-yitU;cm>Y^p}HPO=G>QGIqL1>(H?Kz+AiH>dM z>9BR7(_Ei@e!eJ`icT#$aki@F=1t{%L`Pfe@qWiwwrc&%*9=j-K~nfF>KCnet~NyaVg=0sg)b^jVUqCrR~Ocrqj zAkoRC*0H#f!dk+t9JYyp(xN9f5=Q0MmN=Buff=3oA~Qc0Jtb~K-ND|`r#E;s*h3$B zj_3&0OeHDY*(TR7I__R@nw zqDHETlb(4dQmIGODjY2k)8t;36X&pd4fQ@z&>$!@59ghSM5=6w+eeiuzo?;1jvL7A z__i#9Iy7z{c|w(Z&c_0>EJ^qgUM(wgkt)HkexF@p`vJ3Fety1M<780`WeQIzlDC9< zELVs!au`=6h+*?ErQTQ?4j?_+{NyG6D;_I0mIFtbMOlaK2wWIn0vyp*YN=*C*iCxE z2&sj{`=y{84LT~)59dl3G)clcen^z2IB46J^ra-o%LJw$OW7l$N@&BVkt~sDmFu^3 zh>jX&hvUH)$HWhOQn_9fp}5ii!*F?cDKf|8p>z}IW64INb4g7tc3g=RgavWqj8dl~ zwSo8~8HatFD5NMXOfLP%WA|Sj?6u7-hE_X?6H3mG+r4+w-UmOJyd<;V2E-|wx ztj4mbh9#kxtLV7Vn4vBTi>|LHi((Oyxy6!kGQESP>-gg^U$Pm{(Fs{*xxQ9gTeRi< zSM%F7d%nCzj*n6vx8MI5h@-NFN6$HBMfn@NeVxL9dQ$fwc@gnm zrN3FwLrHjlu*?2T$_Q~-t&lhmkQ#)u6HUHQD9OWvn0Gv$nB^g9#OI0>RuogZE1KkV zRO$@UJav?m%2Cv1`;k(E zy=UGg{N`b2i*?Dyf2TCTu_v+9%CTo#MAu(N_|+WR9I42P=p%)fR#~%BS4+iN)D9BqZ)p4Ly5?0EnM1RU8n|dQif$yAzSr>D zV%%ZTM$D3j#b#zQ_XJmN6*cI13!(81!o=7ZC`UG}$|*GMistL{oR;=lU%%Hn?S!~z z@P5cBv@TXX)av`Il`ZJDP, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.5.1\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-23 05:17+0000\n" +"Last-Translator: tekrei \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} zaten çalışıyor" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "SecureDrop sunucusuna erişilemedi. Bağlantı yeniden kurulmaya çalışılıyor..." + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"SecureDrop sunucusuna erişilemedi. Lütfen internet\n" +"ve Tor bağlantınızı denetleyip yeniden deneyin." + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"Bu kimlik doğrulama bilgileri işe yaramadı. Lütfen yeni \n" +"bir iki aşamalı kimlik doğrulama kodu ile yeniden deneyin." + +msgid "That didn't work. Please check everything and try again." +msgstr "İşe yaramadı. Lütfen herseye denetleyip yeniden deneyin." + +msgid "You must sign in to perform this action." +msgstr "Bu işlemi yapmak için oturum açmalısınız." + +msgid "Your session expired. Please log in again." +msgstr "Oturumunuzun süresi dolmuş. Lütfen yeniden oturum açın." + +msgid "Failed to update star." +msgstr "Yıldız güncellenemedi." + +msgid "Retrieving new messages" +msgstr "Yeni iletiler alınıyor" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "Dosya data klasöründe bulunamadı. Lütfen yeniden indirmeyi deneyin." + +msgid "The file download failed. Please try again." +msgstr "Dosya indirilemedi. Lütfen yeniden deneyin." + +msgid "Failed to delete conversation at server" +msgstr "Sunucudaki yazışma silinemedi" + +msgid "Failed to delete source at server" +msgstr "Sunucudaki kaynak silinemedi" + +msgid "Download All Files" +msgstr "Tüm Dosyaları İndir" + +msgid "Delete Source Account" +msgstr "Kaynak Hesabını Sil" + +msgid "Delete All Files and Messages" +msgstr "Tüm Dosya ve İletileri Sil" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop İstemcisi {}" + +msgid "Quit" +msgstr "Çık" + +msgid "Last Refresh: {}" +msgstr "Son yenileme: {}" + +msgid "Last Refresh: never" +msgstr "Son yenileme: Yok" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "OTURUMU KAPAT" + +msgid "SIGN IN" +msgstr "OTURUM AÇ" + +msgid "Nothing to see just yet!" +msgstr "Henüz görüntülenecek bir şey yok!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "Kaynak gönderimleri, indirildikten ve şifresi çözüldükten sonra solda listelenir." + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "İletileri okuyacağınız, kaynakları yanıtlayacağınız ve dosyalarla çalışacağınız yer burasıdır." + +msgid "Select a source from the list, to:" +msgstr "Listeden şuraya bir kaynak seçin:" + +msgid "Read a conversation" +msgstr "Bir yazışmayı oku" + +msgid "View or retrieve files" +msgstr "Dosyaları görüntüle ya da al" + +msgid "Send a response" +msgstr "Yanıt ver" + +msgid "Deleting files and messages..." +msgstr "Dosya ve iletiler siliniyor..." + +msgid "Deleting source account..." +msgstr "Kaynak hesap siliniyor..." + +msgid "— All files and messages deleted for this source —" +msgstr "— Bu kaynağın tüm dosya ve iletileri silindi —" + +msgid "Failed to send" +msgstr "Gönderilemedi" + +msgid " DOWNLOAD" +msgstr " İNDİR" + +msgid "EXPORT" +msgstr "DIŞA AKTAR" + +msgid "PRINT" +msgstr "YAZDIR" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "SUNUCU ÜZERİNDE ŞİFRELENMİŞ DOSYA" + +msgid "DOWNLOAD" +msgstr "İNDİR" + +msgid " DOWNLOADING " +msgstr " İNDİRİLİYOR " + +msgid "Earlier files and messages deleted." +msgstr "Daha eski dosya ve iletiler silindi." + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"Bu kaynağın dosya ve \n" +"iletileri silindi" + +msgid "Compose a reply to " +msgstr "Şunu yanıtla " + +msgid "Awaiting encryption key" +msgstr "Sunucu şifreleme anahtarı geldiğinde" + +msgid " from server to enable replies" +msgstr " yanıtlar etkinleştirilecek" + +msgid "Sign in" +msgstr "Oturum açarak" + +msgid " to compose or send a reply" +msgstr " yanıt yazın ya da gönderin" + +msgid "Username" +msgstr "Kullanıcı adı" + +msgid "Passphrase" +msgstr "Parola" + +msgid "Two-Factor Code" +msgstr "İki aşamalı kimlik doğrulama kodu" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop istemcisi v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"Kullanıcı adı geçersiz.\n" +"En az 3 karakter uzunluğunda olmalı." + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"Bu parola geçersiz.\n" +"14 ile 128 karakter arasında olmalı." + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"İki aşamalı kimlik doğrulama kodu geçersiz.\n" +"Yalnızca rakamlardan oluşmalı." + +msgid "SIGNING IN" +msgstr "OTURUM AÇILIYOR" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "Lütfen bir kullanıcı adı, parola ve iki aşamalı kimlik doğrulama kodu yazın." + +msgid "USE OFFLINE" +msgstr "ÇEVRİMDIŞI KULLAN" + +msgid "Show Passphrase" +msgstr "Parolayı görüntüle" + +msgid "CANCEL" +msgstr "İPTAL" + +msgid "CONTINUE" +msgstr "DEVAM" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "EVET, DOSYALARI VE İLETİLERİ SİL" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "{source} hesabından {files_to_delete}, {replies_to_delete}, {messages_to_delete} silmek istiyor musunuz?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "Hesabı korumak, üst verileri korur ve {source} için SecureDrop ile yeniden oturum açılabilmesini sağlar." + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "bir dosya" +msgstr[1] "{file_count} dosya" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "bir yanıt" +msgstr[1] "{reply_count} yanıt" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "bir ileti" +msgstr[1] "{message_count} ileti" + +msgid "Preparing to export:
{}" +msgstr "Dışa aktarmaya hazırlanılıyor:
{}" + +msgid "Ready to export:
{}" +msgstr "Dışa aktarmaya hazır:
{}" + +msgid "Insert encrypted USB drive" +msgstr "Şifrelenmiş bir USB sürücüsü takın" + +msgid "Enter passphrase for USB drive" +msgstr "USB sürücüsünün parolasını yazın" + +msgid "Export successful" +msgstr "Dışa aktarıldı" + +msgid "Export failed" +msgstr "Dışa aktarılamadı" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Dosyaları dışa aktarmadan önce riskleri anlayın

Kötü amaçlı yazılım
Bu iş istasyonu, dosyaları güvenli bir şekilde açmanızı sağlar. Dosyaları başka bir bilgisayarda açarsanız, gömülü kötü amaçlı yazılımlar bilgisayarınıza veya ağınıza yayılabilir. Bu riski nasıl yöneteceğinizden emin değilseniz, lütfen dosyayı yazdırın veya yöneticinizle görüşün.

Anonimlik
Kaynaklarınız tarafından gönderilen dosyalarda gerçekte kim olduğunuzu belirleyebilecek bilgiler veya gizli üst veriler bulunabilir. Kaynaklarınızı korumak için, ağa bağlı bilgisayarlarda çalışmaya başlamadan önce dosyaları yeniden düzenlemeyi değerlendirin." + +msgid "Exporting: {}" +msgstr "Dışa aktarılıyor: {}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "Lütfen SecureDrop iş istasyonu için özel olarak hazırlanmış dışa aktarma sürücülerinden birini takın." + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "Sürücü şifrelenmemiş ya da başka bir sorun var." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Belirtilen parola işe yaramadı. Lütfen yeniden deneyin." + +msgid "See your administrator for help." +msgstr "Yardım almak için yöneticinizle görüşün." + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "Dışa aktarma sanal makinesi hazır olana kadar DEVAM düğmesi devre dışı görünür" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "İş İstasyonu bilgisayarınızın dışındaki dosyalarla çalışırken dikkatli olmayı unutmayın." + +msgid "SUBMIT" +msgstr "GÖNDER" + +msgid "DONE" +msgstr "TAMAM" + +msgid "Preparing to print:
{}" +msgstr "Yazdırmaya hazırlanılıyor:
{}" + +msgid "Ready to print:
{}" +msgstr "Yazdırmaya hazır:
{}" + +msgid "Connect USB printer" +msgstr "USB yazıcı bağlayın" + +msgid "Printing failed" +msgstr "Yazdırılamadı" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

Yazdırma risklerini yönetme

QR kodları ve web adresleri
Asla güvenlik önlemleri almadan web adreslerini açmayın veya basılı belgelerdeki QR kodlarını taramayın. Bu riski nasıl yöneteceğinizden emin değilseniz, lütfen yöneticinizle görüşün.

Yazıcı noktaları
Basılı bir sayfanın herhangi bir bölümünde, yazıcı noktaları gibi çıplak gözle görülemeyen tanımlayıcı bilgiler bulunabilir. Taranmış çıktılarla çalışırken veya yayınlarken lütfen bu riski dikkatlice göz önünde bulundurun." + +msgid "Please connect your printer to a USB port." +msgstr "Lütfen yazıcınızı bir USB bağlantı noktasına bağlayın." + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "EVET, TÜM KAYNAK HESABINI SİL" + +msgid "Are you sure this is what you want?" +msgstr "Bu işlemi yapmak istediğinize emin misiniz?" + +msgid "When the entire account for a source is deleted:" +msgstr "Bir kaynağın tüm hesabı silindiğinde:" + +msgid "The source will not be able to log in with their codename again." +msgstr "Kaynak kod adı ile yeniden oturum açamayacak." + +msgid "Your organization will not be able to send them replies." +msgstr "Kuruluşunuz onlara yanıt gönderemeyecek." + +msgid "All files and messages from that source will also be destroyed." +msgstr "Bu kaynağın tüm dosya ve iletileri de silinir." + +#~ msgid "Entire source account" +#~ msgstr "Tüm kaynak hesabı" + +#~ msgid "Files and messages" +#~ msgstr "Dosyalar ve iletiler" + +#~ msgid "DELETE" +#~ msgstr "SİL" diff --git a/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo b/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7d42b23d40a7093be7993760cd1c9c5d8dc0b1c GIT binary patch literal 10874 zcmbVRd2k$6etsN#DG)Zh?1qqo2ieUo;E}K)!7FTmkVZzJ3mrDz%W2KDtcIEHp}Pk$ zxEv(gx@^gk4U#P*V++eh*ysR^Ei{sqY&MljDpg5sRccd7Dpi5$o|#Q56#LgEsol!= zd+*I5TU1z2`RSYPdB^Ygen+?e?JGBrF?@Dm{2s>bH!=1y@RrZx4?bV~B4b|yehGLh z@Th&#vaA}gSRmDhrquD{xwW~pQugn_-vWNDu5Y-Fv2Wq}HsIaBhk^Ks?F4=u*a-{*Uk2U}{3{@x{|S)v zxaG@?;UDApLvm~ceh&B~5GG+w!25vT18xTP0mw!N5lKh*oxDNO{uo8F$_&AU@r|T*p$=3@M_5wbP>ra4>0q=!T zY5lXn9{?`{>D;eDiQfQz6G-xJ1d{#Bfe!$m29kgF0m+}!z;6Tp61WHWpFonY6HXv| zPXURie+T>qFax{`c7 zCV_Wi0~;iL5ch|%IaFkS0fbA~Pl06jpDFwVNdEW*knDdGXY5abcK~T#LSZ)$TeE&3 z?Q=$5Ujjk}_7fo8{|_L|`xTJZ-wET8o_7ODo*E#<&r3jrAUm$`ED#i9?*hq=KUVmW z`u#>IOM2V}r2W1LBzrvxr2S&*_rpNiXBtTITmq6Df1~gpfPaMRp90B$zXDPml_5AE z2gVgH0$XwYzd(|+35U`?KLFBo7)a}$S9lpn{`w`5&V2~N(fn-+8-SFz+SK(fAla=0 z2#T*NGoR@&a(|-Yi%IxPr()$(!1*pfq0lX1d4cr9W2E2jpV-PQEFvvfR z7{wntoAmuY#?2T=2O>@(hKLuqkL|>G5`*;If03yB#t1-w2^dVc)2lSGD7gvlup^$9#7)ApI`H6B4eTZ{Z52*H0 zzOTb5{*>T?>`I?f4Dtni$Y%5*TjoANd?BCRgt1NCB-?)%<9it7=j|BemvRh>Bl>K> z_%a44CSsQORe@24QIA1>q8vp0*oe`Bk^3~~z5t)b*n#mB25}HB6|n&j+$Vep<9_;r z&sL1jiEsGBs~dMT)HPOC7rxatY~ze~*jAJ~y8VJ~bJya!skKLRZtJm#p*xIjg{)}I za&&Ilm}iE$CVow@EuEVx>NQi_ZJ4`x%r;Edio4u4oadY^W%zANd&SeuSRK|Ku3=r5 z-p;jf*w!6K$BcGNuz6WUgD#Fv#B^?$Vxkq(&9$?|*&)s3`3*ys>1u|lhiQ>G9ACp$ zC?3^K*Wq1;+ey;6+H)kGqletu!HmX1m<# zfEjaQ$LO%AmXO;+A0rGUjE)3}ZkQdG9o0x=e1E}k4Dt_zbUSr!YR^G!J)v*lPCV4f zHAihK4=&|RN^a=b5syT~5e~M8uXD=ru1+$yWeZD@;mF#tczeWfI)(9IcrtX(#ZIYk zeVd7G9G5&xq6ok9b{*2{Tz@fU*)A>aFe2n^Nr!qZ(gjHhzHcQV=xFRCG>qtQ9yvvD zKrEKd(<6zz!-{@`Q8d%S`L>{G946m@I|;5w+x2i5Qb*;P!oCjNuR&Z(I*^D>D@b2c zcS(-?8NUW8gk6LUNZt*!+h^xVrD>UoD5zO5N)4F|{%pr>7aFuDxC6e0aB~ewiim+D zI}NC7@~G}=Va?SbkLKoxgh+;$1!WRM_fpk3iLHmVP{ETq2d|+E z%pc|OgtB1(+MC!JqUS6O%2Y-ok_;lmqeuc^y(80)kX4F+$i+l0;#fF}BXzj8mC(aj z4_Xm1M4Srp5_L#Py4$6h?xU=-OEZM5x*4()F~O+k^aQJ_Y^Vy>v8u*~*4l=)AgfXt zO=U771nvo;d0WflxfsH|cqGihFJwFo;YB=ep;V$*+g40v%|eiM>Y?W(vr1|y_+byB zY^!7h*@U84M2rnb>_!4BWz~%hLHtqKxmrgE=$x!2c|f!4m9?1qwMEc@SB64X+;rvL ze6X#tZ)qtGpe;op%VnBeCVsNI%!q}M$e+i84OPuMn_7d_yr#A;$Qv7YOR#x+u$cv) zX=-e4WkJnGWw6)tWmw1#Uj>mwM2dk2ZQ}(bc1KuIxdp_4MQDon#j!wIk!kb@a%`7v zA#aF0WVqN%q|un>II&KfaxfB%aFW=W1x2Re9U6iroV!9UM6@`_cBk&02x zv#2oQ_b_*2ddTQ7LK;;&;>uM)yQ5HTus`}74V7BxEB7o{CESUj-EiDQMBjQ(2bzsQ zmu~FtbjwYu#*up}_UzqKMsq6GZXzsjU3(Dqgd`w`3Q?I1ZKQN+3Q!qy*_~>fEW28} z5uwJ0G~FXPu$P<{v8Z*RZ^AJ}SxcpzCTdXVJQX@m#|@V?Q+d?ZM1{DQppCBAKD4RW z;5u#7tVgMu3s#{fgf!91tkbqo`E@wjJ}Oth=_M3wxV-7wjs_ z5o@X4*1&5UBsR9SiZ9eC)4jIG>uYhRPynis2~C&3fVjE#uDB^`)>W;d@KvWCiIrki zgi5fc3Vf~_>Kwh7y8%Wo#}s&)3Y8N>)2g!;>QRfru*KL-jUiJtL9`7H#R4_Ks3Nc! zZHCBz3n>;NdIz?)%n)TJnf~!3@hPl}s!7$hl?rRv2%Fz>MSqshPa#p{D0d`eq7XzZ zR5P)#D6G4z{1zp($gk+iQBomPI~pz>4a>%d#Mv7+ZRVj)%|`SiAA`P>_{3)D%Zif% z#941g%aqNn2o)1g0XBLFwL>o7e9BS?17)dEcKL(r38C{`=fK8{DxHX`3=$dC;-cL|5-%JK zeML(~WnJ`SL_e}XKD;*IG6p|kLwS}X6B!95E4~O}(wH7NLufwfK?t5)my3C|ak% z^sodApu)N+-uX;T`8OZNFoP=418E_q|`2EIo<;IF-zOM^vs3n@vlBUhS=3(li-Ha$k|)=c9i*-Wj+BJuhF z#)}Fb;Hg9iO|KP1#-a)Xn<5YtKNaf~MXCIgCQRtFOZ2{bWgp7uHzhsWqrT*3Jg~=?G_`7!#fN;d@nBYHRj%uW}Tj;1NF{sBOG`< zzS{}3TIIZ?sWH%u0!F(8s?l+l^PR!U=0JU8pt_Pj(O6zzd;fRwWKlvLUZB<1OeaF` zDav_GTU{M*sH_k2Ey4QA+PcRotE-zqwhBx&cgOKm7HHMA=%b-s*FZ>A%(9m{cRc}#$_i(eb9JwzzP3JCu+PTQ2TJg0 z<|5nzt$0UN&RzXQw=5PxOZ13H){gFOZELLwY%a_rZ98;35Hyjc;IneRx!rI}nj&#j zg+L7=$3X)e6PM1`jgR2<4*jzAfk#T732f6%6c1sl9a2aBQ0c~vrJG6^Pc0tGtgPfP zwK$6xXsP63e{$G6IOR>uq?S)-uDtT`@=#`V!asf49~{o?$Mp2_xYsw~9UbyUj%2%g zyw_g$riaB#l=R$GdbH0Ue8n4Hz)G)wDSPH{cH*tv8yg$B@K5@X`-|O|g50N2{H_-1LTBQ?u z&tfY&aJgG<=nsthgBSdf5h;Z~-tSMHfok4RuQz%D`{ZT#sC%DxZlC}9q`z+_wK$xf zn)BvP;7)2~Ec?a*obJy~OYzA9^OrL{ucqHiVlp<7ih4(mV-s}PW%Tlo{#2+_CzrA( zMq#A9dh$LDg2maX_p>M8AW@P@I&A-pH_(^ezv7L|!@g3`%)Y_&koJK)x6lhnKv?{l!M1-Gq1iW0$0E zspPBaWM8Ixe`exHUTy3nyh@wRFGF@1GnKrQ`rwc^I4swBy#uMGzRa6v*817+x#S-h z$*jy{dcg#<)86H?sg=p}g$b{>Co{JQTS`}ZlMAHDa<@F8*fVta$hp*Fw>Pqo0lnsq zLEF^g!Q%O34q-~~{UI;{>JW_@3mZnK`vDX?d2+w=HmoiHiQb~#h z$pRb(mSv8Oc)k1mu?2s44$`LPi3Lv{Lf@1K3~sOL`bKB`Jl%nbp_*!(_6& zEnr;fC+TQ!{sTIC^|j2@kQCk<8YgOiC+Vft)DltJAMExg2bJgu$V&rYDH(pDFZ0F) zZ{T!xVw%<<$TD-&nR7idqj)_hK3+b>(zAo!m0qyOgQoL+*`sF}vH&(=>ExT~s#`EN7{;|{kdt>q^IF}a+4$mhu7@!1E?4RlOPl1J}$&5=!$wMng)XJkn zc#~*zbv1f8+drI{A0xTFIkFNi0 zRPh-suL?W_>Ai!eVJx{hlL5*QkBCijh-6XD72f4{MW_N{lkgEPqQNVswn$=pnL zFD0nM3m_0u4R*;Mo6EjIIgZI(E6ko>PBP5*A)Bkyz3F!{7vVaYD+WfrgQq}}Gx_xK z@$w0D8^u~knIv1(>T7?Nw#;oVOO8AV@*`pTuU+)V7yRR={L}p;s#G1p>&+g=*^>Bh zB_>Iuib=)fU2Ch7ys?-+a+E5JFf_DXt3KFp(0_Z%8@P;}p_{0j=dZpCjWesq{dcD* zK15i2yxhYibzv%DKF|_@lBaWl$Mm)f(dmtx5k5c-5+yJF>Wn{d8ENDrR9~?LiePGS z+Mhj3(KX)#pQr^=1EkN?;(4To;>ai@W8pAt3Kdg}ui#7G#nMz~y#79Kx?egLn*Q4F zl!ygl3#sGvY=MlH9-HtMM@jPqN^o@9dnup$;OErJs(0mB;l&Y>XexQu>l=of(i2H< zWvoblp_(Y4idxz3ZqT1)kN0NglgN6R`IC&OAay^xa{cNT?{fVXpg0os69tgIPmfao zqH>OZplZF~F>1Qt(}=gaU%4-H_%h{F1c@LZleS<=VR?nL1G-ZU!aJJ${|R_=Z@}K^ z3-edM6)OBd1P6cTlm0vV@`aBiTb%O_zC{usFuZ|dnJE;V*=+Zqf9NeL=cB_iut5f7 z`=UnDKYk@Wy`(}zi7KZSYUIgLe|!Q)kO2+$tKu_8EdBPm?AWSMY;DLDR$dj0-pG0M zo+!~+P3!XUTUe35g_FF6BRKTIt51`)&>tGi9-V`hsH^F7Jy-{Q(yv`a*^>l?=`#~2 z{6nXRCX%}g@1&FGKWmYsqPO}wT=il1IsD6~Q+ia8ks=M4o*DjB>&Y2~@~PY>sx-n8 zLZ^~vP#UFo$t36pvi*3Vpn#PTD7i`*PCQ@8EpX|-GK?NlCV5(kHso6G=8vY5kF-GM z9bXXnt&k-lgG!WF`HQ8`C2^iVGvzIh6uiaIIG`gZwyA)kc372gf9xV0CZ&{hAJ!pm z`^V>TE-c~?9P#(Rr%K*6vsG)PeqLLV7}}NWWH;I-X)yofS=ozyoW|yq;q$M} zaq1dzL=(oZd3yqruJihY?&jV!6um$3Mvqa$CflcU@<2M-PaJ-43|{p{kED|0spQ+m z(JW*GS?5n831(LN{mD~#a*#(vR;Ed7-h#lAs;|ijk$bt}pPW)jZ0$=A3Ksbsy3T74 b%D, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SecureDrop Client 0.6.0-rc2\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2022-06-20 17:02+0000\n" +"Last-Translator: ff98sha \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.11.2\n" +"Generated-By: Babel 2.9.1\n" + +msgid "{application_name} is already running" +msgstr "{application_name} 已在运行" + +msgid "The SecureDrop server cannot be reached. Trying to reconnect..." +msgstr "无法连接到 SecureDrop 服务器,重连中……" + +msgid "" +"Could not reach the SecureDrop server. Please check your \n" +"Internet and Tor connection and try again." +msgstr "" +"无法连接到 SecureDrop 服务器,\n" +"请检查你的互联网连接和 Tor 连接后重试。" + +msgid "" +"Those credentials didn't work. Please try again, and \n" +"make sure to use a new two-factor code." +msgstr "" +"此凭证无效,请重试。\n" +"请使用新的两步认证代码。" + +msgid "That didn't work. Please check everything and try again." +msgstr "凭证无效,请检查后重试。" + +msgid "You must sign in to perform this action." +msgstr "你需要登录来进行操作。" + +msgid "Your session expired. Please log in again." +msgstr "会话已过期,请重新登录。" + +msgid "Failed to update star." +msgstr "未能更新星标。" + +msgid "Retrieving new messages" +msgstr "正获取新消息" + +msgid "File does not exist in the data directory. Please try re-downloading." +msgstr "文件不存在,请重新下载。" + +msgid "The file download failed. Please try again." +msgstr "文件下载失败,请稍后重试。" + +msgid "Failed to delete conversation at server" +msgstr "服务器上删除消息失败" + +msgid "Failed to delete source at server" +msgstr "服务器上删除线人失败" + +msgid "Download All Files" +msgstr "下载所有文件" + +msgid "Delete Source Account" +msgstr "删除线人账号" + +msgid "Delete All Files and Messages" +msgstr "删除所有文件和消息" + +msgid "SecureDrop Client {}" +msgstr "SecureDrop 客户端 {}" + +msgid "Quit" +msgstr "退出" + +msgid "Last Refresh: {}" +msgstr "上次刷新:{}" + +msgid "Last Refresh: never" +msgstr "上次刷新:从未" + +msgid "{}" +msgstr "{}" + +msgid "SIGN OUT" +msgstr "退出" + +msgid "SIGN IN" +msgstr "登录" + +msgid "Nothing to see just yet!" +msgstr "还没有消息!" + +msgid "Source submissions will be listed to the left, once downloaded and decrypted." +msgstr "线人提交的材料在下载和解密后会出现在左侧。" + +msgid "This is where you will read messages, reply to sources, and work with files." +msgstr "这里可以阅读消息、回复线人、操作文件。" + +msgid "Select a source from the list, to:" +msgstr "从列表中选择一名线人:" + +msgid "Read a conversation" +msgstr "阅读对话" + +msgid "View or retrieve files" +msgstr "查看和获取文件" + +msgid "Send a response" +msgstr "发送回复" + +msgid "Deleting files and messages..." +msgstr "文件和消息删除中..." + +msgid "Deleting source account..." +msgstr "删除线人账号中..." + +msgid "— All files and messages deleted for this source —" +msgstr "— 此线人的所有文件和消息已删除 —" + +msgid "Failed to send" +msgstr "发送失败" + +msgid " DOWNLOAD" +msgstr " 下载" + +msgid "EXPORT" +msgstr "导出" + +msgid "PRINT" +msgstr "打印" + +msgid "ENCRYPTED FILE ON SERVER" +msgstr "服务器上的加密文件" + +msgid "DOWNLOAD" +msgstr "下载" + +msgid " DOWNLOADING " +msgstr " 下载中 " + +msgid "Earlier files and messages deleted." +msgstr "先前的文件和消息已删除。" + +msgid "" +"Files and messages deleted\n" +" for this source" +msgstr "" +"此线人的文件和消息\n" +"已删除" + +msgid "Compose a reply to " +msgstr "回复给 " + +msgid "Awaiting encryption key" +msgstr "等待解密密钥" + +msgid " from server to enable replies" +msgstr " 从服务器传输,这样才能" + +msgid "Sign in" +msgstr "登录" + +msgid " to compose or send a reply" +msgstr " 编写和发送回复" + +msgid "Username" +msgstr "用户名" + +msgid "Passphrase" +msgstr "密码" + +msgid "Two-Factor Code" +msgstr "两步认证码" + +msgid "SecureDrop Client v{}" +msgstr "SecureDrop 客户端 v{}" + +msgid "" +"That username won't work.\n" +"It should be at least 3 characters long." +msgstr "" +"用户名无效。\n" +"用户名至少为3个字符长。" + +msgid "" +"That passphrase won't work.\n" +"It should be between 14 and 128 characters long." +msgstr "" +"密码无效。\n" +"密码为14至128个字符长。" + +msgid "" +"That two-factor code won't work.\n" +"It should only contain numerals." +msgstr "" +"两步认证码无效。\n" +"两步认证码只含数字。" + +msgid "SIGNING IN" +msgstr "登录中" + +msgid "Please enter a username, passphrase and two-factor code." +msgstr "请输入用户名、密码和两步认证码。" + +msgid "USE OFFLINE" +msgstr "离线模式" + +msgid "Show Passphrase" +msgstr "显示密码" + +msgid "CANCEL" +msgstr "取消" + +msgid "CONTINUE" +msgstr "继续" + +msgid "YES, DELETE FILES AND MESSAGES" +msgstr "确认删除文件和消息" + +msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" + +msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." +msgstr "保留帐户将保留其元数据,使得 {source} 可以再次登录 SecureDrop。" + +msgid "one file" +msgid_plural "{file_count} files" +msgstr[0] "{file_count} 个文件" + +msgid "one reply" +msgid_plural "{reply_count} replies" +msgstr[0] "{reply_count} 个回复" + +msgid "one message" +msgid_plural "{message_count} messages" +msgstr[0] "{message_count} 条消息" + +msgid "Preparing to export:
{}" +msgstr "正准备导出:
{}" + +msgid "Ready to export:
{}" +msgstr "已准备好导出:
{}" + +msgid "Insert encrypted USB drive" +msgstr "插入加密的 USB 驱动器" + +msgid "Enter passphrase for USB drive" +msgstr "输入 USB 驱动器的密码" + +msgid "Export successful" +msgstr "导出成功" + +msgid "Export failed" +msgstr "导出失败" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

在导出文件之前,请先了解风险

恶意软件
此工作站允许您安全地打开文件。如果您在另一台计算机上打开文件,任何嵌入的恶意软件都可能会传播到您的计算机或网络。如果您不确定如何预防此风险,请打印文件,或与管理员联系

匿名性
来源提交的文件可能包含识别其身份的信息或隐藏元数据。为了保护您的资源,请考虑在与网络连接的计算机上工作之前对其进行匿名化。" + +msgid "Exporting: {}" +msgstr "正在导出:{}" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgstr "请插入一个为 SecureDrop 工作站导出用的专用驱动器。" + +msgid "Either the drive is not encrypted or there is something else wrong with it." +msgstr "驱动器未加密,或者出现了别的问题。" + +msgid "The passphrase provided did not work. Please try again." +msgstr "密码无效,请重试。" + +msgid "See your administrator for help." +msgstr "请寻求管理员的帮助。" + +msgid "The CONTINUE button will be disabled until the Export VM is ready" +msgstr "继续按钮会被禁用,直到导出的虚拟机准备就绪" + +msgid "Remember to be careful when working with files outside of your Workstation machine." +msgstr "在工作机在外的地方处理文件时请小心。" + +msgid "SUBMIT" +msgstr "提交" + +msgid "DONE" +msgstr "完成" + +msgid "Preparing to print:
{}" +msgstr "正准备打印:
{}" + +msgid "Ready to print:
{}" +msgstr "已准备好打印:
{}" + +msgid "Connect USB printer" +msgstr "连接 USB 打印机" + +msgid "Printing failed" +msgstr "打印失败" + +msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." +msgstr "

管理打印输出风险

二维码和网址
在未采取安全防范措施的情况下,切勿输入和打开网址或扫描打印文档中包含的二维码。如果您不确定如何预防此风险,请联系您的管理员。

打印机隐写
打印出的页面的任何部分都可能包含肉眼看不见的识别信息,例如打印机隐写的点。在处理或发布扫描打印的输出时,请仔细考虑此风险。" + +msgid "Please connect your printer to a USB port." +msgstr "请将打印机连接到 USB 接口。" + +msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" +msgstr "是的,我想删除整个线人账号" + +msgid "Are you sure this is what you want?" +msgstr "确认要这样做?" + +msgid "When the entire account for a source is deleted:" +msgstr "删除整个线人账号后:" + +msgid "The source will not be able to log in with their codename again." +msgstr "线人无法再用代号登录。" + +msgid "Your organization will not be able to send them replies." +msgstr "你的组织无法再向他们发送回复。" + +msgid "All files and messages from that source will also be destroyed." +msgstr "此线人的所有文件和消息都将被删除。" + +#~ msgid "Entire source account" +#~ msgstr "整个线人账号" + +#~ msgid "Files and messages" +#~ msgstr "文件和消息" + +#~ msgid "DELETE" +#~ msgstr "删除" From c95f7ed2d7b4df80a9333b7cd42dd0e9ff53c4e1 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Dec 2023 11:43:29 -0500 Subject: [PATCH 618/751] Move sdk files into client/securedrop_client Instead of being a separate pip package, this will just be part of the client itself. --- .circleci/config.yml | 81 --- .git-blame-ignore-revs | 1 - .gitignore | 80 --- CHANGELOG.md | 117 --- CONTRIBUTING.md | 10 - Dockerfile.black | 14 - LICENSE | 674 ------------------ MANIFEST.in | 4 - Makefile | 91 --- .../securedrop_client/sdk}/__init__.py | 0 .../securedrop_client/sdk}/sdlocalobjects.py | 0 .../securedrop_client/sdk}/timestamps.py | 0 README.md => client/tests/sdk/README.md | 0 {tests => client/tests/sdk}/conftest.py | 0 .../tests/sdk/data}/setup_method.json | 0 .../tests/sdk/data}/test-badotp.yml | 0 .../tests/sdk/data}/test-badpassword.yml | 0 .../tests/sdk/data}/test-baduser.yml | 0 .../sdk/data}/test-delete-conversation.yml | 0 .../tests/sdk/data}/test-delete-reply.yml | 0 .../tests/sdk/data}/test-delete-source.yml | 0 .../test-delete-submission-from-string.yml | 0 .../sdk/data}/test-delete-submission.yml | 0 .../tests/sdk/data}/test-download-reply.yml | 0 .../sdk/data}/test-download-submission.yml | 0 .../data}/test-error-unencrypted-reply.yml | 0 .../sdk/data}/test-failed-single-source.yml | 0 .../tests/sdk/data}/test-flag-source.yml | 0 .../tests/sdk/data}/test-get-all-replies.yml | 0 .../sdk/data}/test-get-all-submissions.yml | 0 .../tests/sdk/data}/test-get-current-user.yml | 0 .../data}/test-get-replies-from-source.yml | 0 .../sdk/data}/test-get-reply-from-source.yml | 0 .../sdk/data}/test-get-single-source.yml | 0 .../tests/sdk/data}/test-get-sources.yml | 0 .../tests/sdk/data}/test-get-submission.yml | 0 .../tests/sdk/data}/test-get-submissions.yml | 0 .../tests/sdk/data}/test-get-users.yml | 0 .../sdk/data}/test-get-wrong-submissions.yml | 0 .../tests/sdk/data}/test-logout.yml | 0 .../sdk/data}/test-reply-source-with-uuid.yml | 0 .../tests/sdk/data}/test-reply-source.yml | 0 {data => client/tests/sdk/data}/test-seen.yml | 0 .../tests/sdk/data}/test-setup.yml | 0 .../tests/sdk/data}/test-star-add-remove.yml | 0 .../tests/sdk/data}/test_api_auth.json | 0 .../sdk/data}/test_delete_conversation.json | 0 .../tests/sdk/data}/test_delete_reply.json | 0 .../tests/sdk/data}/test_delete_source.json | 0 .../data}/test_delete_source_from_string.json | 0 .../sdk/data}/test_delete_submission.json | 0 .../test_delete_submission_from_string.json | 0 .../tests/sdk/data}/test_download_reply.json | 0 .../sdk/data}/test_download_submission.json | 0 .../data}/test_error_unencrypted_reply.json | 0 .../sdk/data}/test_failed_single_source.json | 0 .../tests/sdk/data}/test_flag_source.json | 0 .../tests/sdk/data}/test_get_all_replies.json | 0 .../sdk/data}/test_get_all_submissions.json | 0 .../sdk/data}/test_get_current_user.json | 0 .../data}/test_get_replies_from_source.json | 0 .../sdk/data}/test_get_reply_from_source.json | 0 .../sdk/data}/test_get_single_source.json | 0 .../test_get_single_source_from_string.json | 0 .../tests/sdk/data}/test_get_sources.json | 0 .../tests/sdk/data}/test_get_submission.json | 0 .../test_get_submission_from_string.json | 0 .../tests/sdk/data}/test_get_submissions.json | 0 .../tests/sdk/data}/test_get_users.json | 0 .../sdk/data}/test_get_wrong_submissions.json | 0 .../tests/sdk/data}/test_logout.json | 0 .../tests/sdk/data}/test_reply_source.json | 0 .../data}/test_reply_source_with_uuid.json | 0 .../tests/sdk/data}/test_seen.json | 0 .../tests/sdk/data}/test_star_add_remove.json | 0 {tests => client/tests/sdk}/encrypted_msg.asc | 0 {tests => client/tests/sdk}/test_api.py | 0 {tests => client/tests/sdk}/test_apiproxy.py | 0 {tests => client/tests/sdk}/test_shared.py | 0 .../tests/sdk}/test_timestamps.py | 0 {tests => client/tests/sdk}/utils.py | 0 pyproject.toml | 11 - requirements/dev-requirements.in | 13 - requirements/dev-requirements.txt | 542 -------------- requirements/requirements.in | 7 - requirements/requirements.txt | 34 - setup.cfg | 18 - setup.py | 26 - 88 files changed, 1723 deletions(-) delete mode 100644 .circleci/config.yml delete mode 100644 .git-blame-ignore-revs delete mode 100644 .gitignore delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTING.md delete mode 100644 Dockerfile.black delete mode 100644 LICENSE delete mode 100644 MANIFEST.in delete mode 100644 Makefile rename {sdclientapi => client/securedrop_client/sdk}/__init__.py (100%) rename {sdclientapi => client/securedrop_client/sdk}/sdlocalobjects.py (100%) rename {sdclientapi => client/securedrop_client/sdk}/timestamps.py (100%) rename README.md => client/tests/sdk/README.md (100%) rename {tests => client/tests/sdk}/conftest.py (100%) rename {data => client/tests/sdk/data}/setup_method.json (100%) rename {data => client/tests/sdk/data}/test-badotp.yml (100%) rename {data => client/tests/sdk/data}/test-badpassword.yml (100%) rename {data => client/tests/sdk/data}/test-baduser.yml (100%) rename {data => client/tests/sdk/data}/test-delete-conversation.yml (100%) rename {data => client/tests/sdk/data}/test-delete-reply.yml (100%) rename {data => client/tests/sdk/data}/test-delete-source.yml (100%) rename {data => client/tests/sdk/data}/test-delete-submission-from-string.yml (100%) rename {data => client/tests/sdk/data}/test-delete-submission.yml (100%) rename {data => client/tests/sdk/data}/test-download-reply.yml (100%) rename {data => client/tests/sdk/data}/test-download-submission.yml (100%) rename {data => client/tests/sdk/data}/test-error-unencrypted-reply.yml (100%) rename {data => client/tests/sdk/data}/test-failed-single-source.yml (100%) rename {data => client/tests/sdk/data}/test-flag-source.yml (100%) rename {data => client/tests/sdk/data}/test-get-all-replies.yml (100%) rename {data => client/tests/sdk/data}/test-get-all-submissions.yml (100%) rename {data => client/tests/sdk/data}/test-get-current-user.yml (100%) rename {data => client/tests/sdk/data}/test-get-replies-from-source.yml (100%) rename {data => client/tests/sdk/data}/test-get-reply-from-source.yml (100%) rename {data => client/tests/sdk/data}/test-get-single-source.yml (100%) rename {data => client/tests/sdk/data}/test-get-sources.yml (100%) rename {data => client/tests/sdk/data}/test-get-submission.yml (100%) rename {data => client/tests/sdk/data}/test-get-submissions.yml (100%) rename {data => client/tests/sdk/data}/test-get-users.yml (100%) rename {data => client/tests/sdk/data}/test-get-wrong-submissions.yml (100%) rename {data => client/tests/sdk/data}/test-logout.yml (100%) rename {data => client/tests/sdk/data}/test-reply-source-with-uuid.yml (100%) rename {data => client/tests/sdk/data}/test-reply-source.yml (100%) rename {data => client/tests/sdk/data}/test-seen.yml (100%) rename {data => client/tests/sdk/data}/test-setup.yml (100%) rename {data => client/tests/sdk/data}/test-star-add-remove.yml (100%) rename {data => client/tests/sdk/data}/test_api_auth.json (100%) rename {data => client/tests/sdk/data}/test_delete_conversation.json (100%) rename {data => client/tests/sdk/data}/test_delete_reply.json (100%) rename {data => client/tests/sdk/data}/test_delete_source.json (100%) rename {data => client/tests/sdk/data}/test_delete_source_from_string.json (100%) rename {data => client/tests/sdk/data}/test_delete_submission.json (100%) rename {data => client/tests/sdk/data}/test_delete_submission_from_string.json (100%) rename {data => client/tests/sdk/data}/test_download_reply.json (100%) rename {data => client/tests/sdk/data}/test_download_submission.json (100%) rename {data => client/tests/sdk/data}/test_error_unencrypted_reply.json (100%) rename {data => client/tests/sdk/data}/test_failed_single_source.json (100%) rename {data => client/tests/sdk/data}/test_flag_source.json (100%) rename {data => client/tests/sdk/data}/test_get_all_replies.json (100%) rename {data => client/tests/sdk/data}/test_get_all_submissions.json (100%) rename {data => client/tests/sdk/data}/test_get_current_user.json (100%) rename {data => client/tests/sdk/data}/test_get_replies_from_source.json (100%) rename {data => client/tests/sdk/data}/test_get_reply_from_source.json (100%) rename {data => client/tests/sdk/data}/test_get_single_source.json (100%) rename {data => client/tests/sdk/data}/test_get_single_source_from_string.json (100%) rename {data => client/tests/sdk/data}/test_get_sources.json (100%) rename {data => client/tests/sdk/data}/test_get_submission.json (100%) rename {data => client/tests/sdk/data}/test_get_submission_from_string.json (100%) rename {data => client/tests/sdk/data}/test_get_submissions.json (100%) rename {data => client/tests/sdk/data}/test_get_users.json (100%) rename {data => client/tests/sdk/data}/test_get_wrong_submissions.json (100%) rename {data => client/tests/sdk/data}/test_logout.json (100%) rename {data => client/tests/sdk/data}/test_reply_source.json (100%) rename {data => client/tests/sdk/data}/test_reply_source_with_uuid.json (100%) rename {data => client/tests/sdk/data}/test_seen.json (100%) rename {data => client/tests/sdk/data}/test_star_add_remove.json (100%) rename {tests => client/tests/sdk}/encrypted_msg.asc (100%) rename {tests => client/tests/sdk}/test_api.py (100%) rename {tests => client/tests/sdk}/test_apiproxy.py (100%) rename {tests => client/tests/sdk}/test_shared.py (100%) rename {tests => client/tests/sdk}/test_timestamps.py (100%) rename {tests => client/tests/sdk}/utils.py (100%) delete mode 100644 pyproject.toml delete mode 100644 requirements/dev-requirements.in delete mode 100644 requirements/dev-requirements.txt delete mode 100644 requirements/requirements.in delete mode 100644 requirements/requirements.txt delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 7da81f38a..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,81 +0,0 @@ -version: 2 -jobs: - test-run: - working_directory: ~/sdclientapi - docker: - - image: debian:bullseye - steps: - - checkout - - run: - name: Install dependencies - command: | - apt-get update && apt-get install python3 python3-venv make -y - make venv - source .venv/bin/activate - - run: - name: Run linter, tests, check for known CVEs - command: | - source .venv/bin/activate - make check - - test-against-latest-api: - working_directory: ~/project - machine: - enabled: true - # TODO: This should be migrated to a Debian container as part of moving to GitHub Actions - image: ubuntu-2004:2023.07.1 - environment: - DOCKER_API_VERSION: 1.23 - steps: - - checkout - - run: - name: Install dependencies - command: | - pyenv install 3.9 - pyenv global 3.9 - make venv - source .venv/bin/activate - - run: - name: Download SecureDrop server code - command: git clone https://github.com/freedomofpress/securedrop.git - - run: - name: Start spinning up the SecureDrop server container - command: | - cd securedrop - NUM_SOURCES=5 make dev - background: true - - run: # We use dockerize to wait until the dev server is listening and we're ready to run tests - name: Install dockerize - command: | - wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && - sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && - rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz - environment: - DOCKERIZE_VERSION: v0.7.0 - - run: - name: Wait for server to be up and for test sources to load - command: | - dockerize -wait http://127.0.0.1:8080 -timeout 30m - - run: - name: Remove VCR cassettes and run tests against latest API - command: | - rm data/*.yml # Removing VCR cassettes - source .venv/bin/activate - make test - -workflows: - version: 2 - securedrop_ci: - jobs: - - test-run - - test-against-latest-api - nightly: - triggers: - - schedule: - cron: "0 4 * * *" - filters: - branches: - only: - - main - jobs: - - test-against-latest-api diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs deleted file mode 100644 index 5976f002c..000000000 --- a/.git-blame-ignore-revs +++ /dev/null @@ -1 +0,0 @@ -a31be70d4082de90c54e6851659560c7bc51b453 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e4009c69c..000000000 --- a/.gitignore +++ /dev/null @@ -1,80 +0,0 @@ -testtoken.json -.mypy_cache - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Log files -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -#Ipython Notebook -.ipynb_checkpoints -*.ipynb - -*.DS_Store -.idea/ - -# vim -*.swp -*.swo - -# .env -*.env -.venv - -#VSCode -.vscode/ diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 9a7801c7a..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,117 +0,0 @@ -Changelog -========= - -0.4.0 ------ - -* Ensure support for common date string formats (#172) - -0.3.2 ------ - -* Update idna to 3.2 (#169) - -0.3.1 ------ - -* Update urllib3 to 1.26.6 to address CVE-2021-33503 (#166) -* Update certifi to 2021.5.30, idna to 2.8, requests to 2.26.0 (#167) - -0.3.0 ------ - -* Support "delete_conversation " endpoint (#158) - -0.2.0 ------ - -* Support "users" endpoint (#134). -* Update urllib3 from 1.25.8 to 1.25.10 (#136). -* Support "seen" endpoint (#140). -* Add "seen_by" as an attribute on the Submission and Reply objects (#140). - -0.1.1 ------ - -* Add journalist name to Reply object (#125). - -0.1.0 ------ - -* Pass timeout value to the proxy (#117). -* Update PyYAML to 5.3.1 (#120). - -0.0.13 ------- - -* Bug fix: return RequestTimeoutError and ServerConnectionError exceptions instead of AuthError, no longer raise KeyError when a file fails to download via the proxy (#109) -* Adds test cases and uses pip-tools for development dependency management (#112). - -0.0.12 ------- - -* Updates qrexec policy keyword character (#102). -* Expose journalist first and last name through the API (#105). - -0.0.11 ------- - -* Expose ETags in submission and reply downloads (#96). -* Update tests and test data for first and last name (#92). -* Bug fix: Ensure RequestTimeoutError is raised for submission and reply downloads (#95). - -0.0.10 ------- - -* Support logout endpoint (#88). - -0.0.9 ------ - -* Create a timeout exception to catch all possible timeouts from `requests` / Qubes RPC -* Remove mutable global state for the proxy VM name - -0.0.8 ------ - -* Revert return type of API.authenticate to bool - -0.0.7 ------ - -* Update PyYAML dependency to 5.1 - -0.0.6 ------ - -* Fix auth header to user "Token" and not "token" (#56). -* Parse the new required field `filename` in the response when posting a reply (#54). - -0.0.5 ------ - -* Allow clients to set UUID of replies via API (#49). - -0.0.4 ------ - -* Rename default proxy VM from sd-journalist to sd-proxy (#43). -* Get stderr text when using Qubes proxy (#38). -* Parse reply UUID (#42). -* Fix incorrect error message when downloading a file (#36). - -0.0.3 ------ - -* Support UUID-only creation of Replies (#31). - -0.0.2 ------ - -* Support SDK use in a Qubes vault AppVM via securedrop-proxy (#21). -* Add journalist UUID as an attribute on the Reply object (#19). - -0.0.1 ------ - -* Initial alpha release. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 63a45e294..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,10 +0,0 @@ -## How to Contribute to SecureDrop - -See the [introduction for contributors](https://docs.securedrop.org/en/latest/development/contributing.html) and [Contributing Guidelines](https://docs.securedrop.org/en/latest/development/contributor_guidelines.html). - -Check out our [Development Roadmap](https://github.com/freedomofpress/securedrop/wiki/Development-Roadmap) to see our plans and priorities for upcoming releases. - -For translators, see the [Translator Guide](https://docs.securedrop.org/en/stable/development/l10n.html) to learn how to get started with SecureDrop translations -in our [translation portal](https://weblate.securedrop.org/). - -We also have a public [Gitter channel](https://gitter.im/freedomofpress/securedrop) and a [public Discourse forum](https://forum.securedrop.org/) where you can discuss SecureDrop and ask questions. diff --git a/Dockerfile.black b/Dockerfile.black deleted file mode 100644 index a17927e1c..000000000 --- a/Dockerfile.black +++ /dev/null @@ -1,14 +0,0 @@ -FROM fedora:28 -LABEL MAINTAINER kushaldas@gmail.com - -RUN pip3 install black - -ENV HOME /home/kdas -RUN useradd --create-home --home-dir $HOME kdas \ - && mkdir $HOME/workplace \ - && chown -R kdas:kdas $HOME - - -WORKDIR $HOME/workplace -VOLUME $HOME/workplace -USER kdas diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702d2..000000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 2f7ba00d7..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,4 +0,0 @@ -include sdclientapi/*.py -include README.md -include LICENSE -include setup.py \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 322bd6151..000000000 --- a/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -DEFAULT_GOAL: help -OPEN=$(word 1, $(wildcard /usr/bin/xdg-open /usr/bin/open)) - -.PHONY: venv -venv: ## Provision a Python 3 virtualenv for **development** - python3 -m venv .venv - .venv/bin/pip install --upgrade pip wheel - .venv/bin/pip install --require-hashes -r requirements/dev-requirements.txt - -.PHONY: black -black: ## Format Python source code with black - @black setup.py sdclientapi tests - -.PHONY: check-black -check-black: ## Check Python source code formatting with black - @black --check --diff setup.py sdclientapi tests - -.PHONY: isort -isort: ## Run isort to organize Python imports - @isort --recursive setup.py sdclientapi tests - -.PHONY: check-isort -check-isort: ## Check Python import organization with isort - @isort --check-only --diff --recursive setup.py sdclientapi tests - -TESTS ?= tests -.PHONY: test -test: ## Run the test suite - @python -m pytest -v --cov sdclientapi --cov-report html --cov-report term-missing $(TESTS) - -.PHONY: lint -lint: ## Run the flake8 lints - @flake8 sdclientapi tests - -.PHONY: mypy -mypy: ## Run the mypy typechecker - @mypy sdclientapi - -.PHONY: check -check: check-black check-isort lint mypy safety test ## Run all checks and tests - -.PHONY: safety -safety: ## Runs `safety check` to check python dependencies for vulnerabilities - pip install --upgrade safety && \ - for req_file in `find . -type f -name '*requirements.txt'`; do \ - echo "Checking file $$req_file" \ - && safety check --full-report -r $$req_file \ - && echo -e '\n' \ - || exit 1; \ - done - -.PHONY: sync-requirements -sync-requirements: ## Update dev-requirements.txt to pin to the same versions of prod dependencies - rm -r requirements/dev-requirements.txt && cp requirements/requirements.txt requirements/dev-requirements.txt - pip-compile --allow-unsafe --generate-hashes --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in - -.PHONY: requirements -requirements: ## Update *requirements.txt files if pinned versions do not comply with the dependency specifications in *requirements.in - pip-compile --generate-hashes --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dependency -update-dependency: ## Add or upgrade a package to the latest version that complies with the dependency specifications in requirements.in - pip-compile --generate-hashes --upgrade-package $(PACKAGE) --output-file requirements/requirements.txt requirements/requirements.in - $(MAKE) sync-requirements - -.PHONY: update-dev-only-dependencies -update-dev-only-dependencies: ## Update dev-requirements.txt to pin to the latest versions of dev-only dependencies that comply with the dependency specifications in dev-requirements.in - $(MAKE) sync-requirements - @while read line; do \ - pip-compile --allow-unsafe --generate-hashes --upgrade-package $file --output-file requirements/dev-requirements.txt requirements/requirements.in requirements/dev-requirements.in; \ - done < 'requirements/dev-requirements.in' - -.PHONY: open-coverage-report -open-coverage-report: ## Open the coverage report in your browser - @$(OPEN) htmlcov/index.html - -# Explaination of the below shell command should it ever break. -# 1. Set the field separator to ": ##" and any make targets that might appear between : and ## -# 2. Use sed-like syntax to remove the make targets -# 3. Format the split fields into $$1) the target name (in blue) and $$2) the target descrption -# 4. Pass this file as an arg to awk -# 5. Sort it alphabetically -# 6. Format columns with colon as delimiter. -.PHONY: help -help: ## Print this message and exit. - @printf "Makefile for developing and testing the SecureDrop SDK.\n" - @printf "Subcommands:\n\n" - @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ - | sort \ - | column -s ':' -t diff --git a/sdclientapi/__init__.py b/client/securedrop_client/sdk/__init__.py similarity index 100% rename from sdclientapi/__init__.py rename to client/securedrop_client/sdk/__init__.py diff --git a/sdclientapi/sdlocalobjects.py b/client/securedrop_client/sdk/sdlocalobjects.py similarity index 100% rename from sdclientapi/sdlocalobjects.py rename to client/securedrop_client/sdk/sdlocalobjects.py diff --git a/sdclientapi/timestamps.py b/client/securedrop_client/sdk/timestamps.py similarity index 100% rename from sdclientapi/timestamps.py rename to client/securedrop_client/sdk/timestamps.py diff --git a/README.md b/client/tests/sdk/README.md similarity index 100% rename from README.md rename to client/tests/sdk/README.md diff --git a/tests/conftest.py b/client/tests/sdk/conftest.py similarity index 100% rename from tests/conftest.py rename to client/tests/sdk/conftest.py diff --git a/data/setup_method.json b/client/tests/sdk/data/setup_method.json similarity index 100% rename from data/setup_method.json rename to client/tests/sdk/data/setup_method.json diff --git a/data/test-badotp.yml b/client/tests/sdk/data/test-badotp.yml similarity index 100% rename from data/test-badotp.yml rename to client/tests/sdk/data/test-badotp.yml diff --git a/data/test-badpassword.yml b/client/tests/sdk/data/test-badpassword.yml similarity index 100% rename from data/test-badpassword.yml rename to client/tests/sdk/data/test-badpassword.yml diff --git a/data/test-baduser.yml b/client/tests/sdk/data/test-baduser.yml similarity index 100% rename from data/test-baduser.yml rename to client/tests/sdk/data/test-baduser.yml diff --git a/data/test-delete-conversation.yml b/client/tests/sdk/data/test-delete-conversation.yml similarity index 100% rename from data/test-delete-conversation.yml rename to client/tests/sdk/data/test-delete-conversation.yml diff --git a/data/test-delete-reply.yml b/client/tests/sdk/data/test-delete-reply.yml similarity index 100% rename from data/test-delete-reply.yml rename to client/tests/sdk/data/test-delete-reply.yml diff --git a/data/test-delete-source.yml b/client/tests/sdk/data/test-delete-source.yml similarity index 100% rename from data/test-delete-source.yml rename to client/tests/sdk/data/test-delete-source.yml diff --git a/data/test-delete-submission-from-string.yml b/client/tests/sdk/data/test-delete-submission-from-string.yml similarity index 100% rename from data/test-delete-submission-from-string.yml rename to client/tests/sdk/data/test-delete-submission-from-string.yml diff --git a/data/test-delete-submission.yml b/client/tests/sdk/data/test-delete-submission.yml similarity index 100% rename from data/test-delete-submission.yml rename to client/tests/sdk/data/test-delete-submission.yml diff --git a/data/test-download-reply.yml b/client/tests/sdk/data/test-download-reply.yml similarity index 100% rename from data/test-download-reply.yml rename to client/tests/sdk/data/test-download-reply.yml diff --git a/data/test-download-submission.yml b/client/tests/sdk/data/test-download-submission.yml similarity index 100% rename from data/test-download-submission.yml rename to client/tests/sdk/data/test-download-submission.yml diff --git a/data/test-error-unencrypted-reply.yml b/client/tests/sdk/data/test-error-unencrypted-reply.yml similarity index 100% rename from data/test-error-unencrypted-reply.yml rename to client/tests/sdk/data/test-error-unencrypted-reply.yml diff --git a/data/test-failed-single-source.yml b/client/tests/sdk/data/test-failed-single-source.yml similarity index 100% rename from data/test-failed-single-source.yml rename to client/tests/sdk/data/test-failed-single-source.yml diff --git a/data/test-flag-source.yml b/client/tests/sdk/data/test-flag-source.yml similarity index 100% rename from data/test-flag-source.yml rename to client/tests/sdk/data/test-flag-source.yml diff --git a/data/test-get-all-replies.yml b/client/tests/sdk/data/test-get-all-replies.yml similarity index 100% rename from data/test-get-all-replies.yml rename to client/tests/sdk/data/test-get-all-replies.yml diff --git a/data/test-get-all-submissions.yml b/client/tests/sdk/data/test-get-all-submissions.yml similarity index 100% rename from data/test-get-all-submissions.yml rename to client/tests/sdk/data/test-get-all-submissions.yml diff --git a/data/test-get-current-user.yml b/client/tests/sdk/data/test-get-current-user.yml similarity index 100% rename from data/test-get-current-user.yml rename to client/tests/sdk/data/test-get-current-user.yml diff --git a/data/test-get-replies-from-source.yml b/client/tests/sdk/data/test-get-replies-from-source.yml similarity index 100% rename from data/test-get-replies-from-source.yml rename to client/tests/sdk/data/test-get-replies-from-source.yml diff --git a/data/test-get-reply-from-source.yml b/client/tests/sdk/data/test-get-reply-from-source.yml similarity index 100% rename from data/test-get-reply-from-source.yml rename to client/tests/sdk/data/test-get-reply-from-source.yml diff --git a/data/test-get-single-source.yml b/client/tests/sdk/data/test-get-single-source.yml similarity index 100% rename from data/test-get-single-source.yml rename to client/tests/sdk/data/test-get-single-source.yml diff --git a/data/test-get-sources.yml b/client/tests/sdk/data/test-get-sources.yml similarity index 100% rename from data/test-get-sources.yml rename to client/tests/sdk/data/test-get-sources.yml diff --git a/data/test-get-submission.yml b/client/tests/sdk/data/test-get-submission.yml similarity index 100% rename from data/test-get-submission.yml rename to client/tests/sdk/data/test-get-submission.yml diff --git a/data/test-get-submissions.yml b/client/tests/sdk/data/test-get-submissions.yml similarity index 100% rename from data/test-get-submissions.yml rename to client/tests/sdk/data/test-get-submissions.yml diff --git a/data/test-get-users.yml b/client/tests/sdk/data/test-get-users.yml similarity index 100% rename from data/test-get-users.yml rename to client/tests/sdk/data/test-get-users.yml diff --git a/data/test-get-wrong-submissions.yml b/client/tests/sdk/data/test-get-wrong-submissions.yml similarity index 100% rename from data/test-get-wrong-submissions.yml rename to client/tests/sdk/data/test-get-wrong-submissions.yml diff --git a/data/test-logout.yml b/client/tests/sdk/data/test-logout.yml similarity index 100% rename from data/test-logout.yml rename to client/tests/sdk/data/test-logout.yml diff --git a/data/test-reply-source-with-uuid.yml b/client/tests/sdk/data/test-reply-source-with-uuid.yml similarity index 100% rename from data/test-reply-source-with-uuid.yml rename to client/tests/sdk/data/test-reply-source-with-uuid.yml diff --git a/data/test-reply-source.yml b/client/tests/sdk/data/test-reply-source.yml similarity index 100% rename from data/test-reply-source.yml rename to client/tests/sdk/data/test-reply-source.yml diff --git a/data/test-seen.yml b/client/tests/sdk/data/test-seen.yml similarity index 100% rename from data/test-seen.yml rename to client/tests/sdk/data/test-seen.yml diff --git a/data/test-setup.yml b/client/tests/sdk/data/test-setup.yml similarity index 100% rename from data/test-setup.yml rename to client/tests/sdk/data/test-setup.yml diff --git a/data/test-star-add-remove.yml b/client/tests/sdk/data/test-star-add-remove.yml similarity index 100% rename from data/test-star-add-remove.yml rename to client/tests/sdk/data/test-star-add-remove.yml diff --git a/data/test_api_auth.json b/client/tests/sdk/data/test_api_auth.json similarity index 100% rename from data/test_api_auth.json rename to client/tests/sdk/data/test_api_auth.json diff --git a/data/test_delete_conversation.json b/client/tests/sdk/data/test_delete_conversation.json similarity index 100% rename from data/test_delete_conversation.json rename to client/tests/sdk/data/test_delete_conversation.json diff --git a/data/test_delete_reply.json b/client/tests/sdk/data/test_delete_reply.json similarity index 100% rename from data/test_delete_reply.json rename to client/tests/sdk/data/test_delete_reply.json diff --git a/data/test_delete_source.json b/client/tests/sdk/data/test_delete_source.json similarity index 100% rename from data/test_delete_source.json rename to client/tests/sdk/data/test_delete_source.json diff --git a/data/test_delete_source_from_string.json b/client/tests/sdk/data/test_delete_source_from_string.json similarity index 100% rename from data/test_delete_source_from_string.json rename to client/tests/sdk/data/test_delete_source_from_string.json diff --git a/data/test_delete_submission.json b/client/tests/sdk/data/test_delete_submission.json similarity index 100% rename from data/test_delete_submission.json rename to client/tests/sdk/data/test_delete_submission.json diff --git a/data/test_delete_submission_from_string.json b/client/tests/sdk/data/test_delete_submission_from_string.json similarity index 100% rename from data/test_delete_submission_from_string.json rename to client/tests/sdk/data/test_delete_submission_from_string.json diff --git a/data/test_download_reply.json b/client/tests/sdk/data/test_download_reply.json similarity index 100% rename from data/test_download_reply.json rename to client/tests/sdk/data/test_download_reply.json diff --git a/data/test_download_submission.json b/client/tests/sdk/data/test_download_submission.json similarity index 100% rename from data/test_download_submission.json rename to client/tests/sdk/data/test_download_submission.json diff --git a/data/test_error_unencrypted_reply.json b/client/tests/sdk/data/test_error_unencrypted_reply.json similarity index 100% rename from data/test_error_unencrypted_reply.json rename to client/tests/sdk/data/test_error_unencrypted_reply.json diff --git a/data/test_failed_single_source.json b/client/tests/sdk/data/test_failed_single_source.json similarity index 100% rename from data/test_failed_single_source.json rename to client/tests/sdk/data/test_failed_single_source.json diff --git a/data/test_flag_source.json b/client/tests/sdk/data/test_flag_source.json similarity index 100% rename from data/test_flag_source.json rename to client/tests/sdk/data/test_flag_source.json diff --git a/data/test_get_all_replies.json b/client/tests/sdk/data/test_get_all_replies.json similarity index 100% rename from data/test_get_all_replies.json rename to client/tests/sdk/data/test_get_all_replies.json diff --git a/data/test_get_all_submissions.json b/client/tests/sdk/data/test_get_all_submissions.json similarity index 100% rename from data/test_get_all_submissions.json rename to client/tests/sdk/data/test_get_all_submissions.json diff --git a/data/test_get_current_user.json b/client/tests/sdk/data/test_get_current_user.json similarity index 100% rename from data/test_get_current_user.json rename to client/tests/sdk/data/test_get_current_user.json diff --git a/data/test_get_replies_from_source.json b/client/tests/sdk/data/test_get_replies_from_source.json similarity index 100% rename from data/test_get_replies_from_source.json rename to client/tests/sdk/data/test_get_replies_from_source.json diff --git a/data/test_get_reply_from_source.json b/client/tests/sdk/data/test_get_reply_from_source.json similarity index 100% rename from data/test_get_reply_from_source.json rename to client/tests/sdk/data/test_get_reply_from_source.json diff --git a/data/test_get_single_source.json b/client/tests/sdk/data/test_get_single_source.json similarity index 100% rename from data/test_get_single_source.json rename to client/tests/sdk/data/test_get_single_source.json diff --git a/data/test_get_single_source_from_string.json b/client/tests/sdk/data/test_get_single_source_from_string.json similarity index 100% rename from data/test_get_single_source_from_string.json rename to client/tests/sdk/data/test_get_single_source_from_string.json diff --git a/data/test_get_sources.json b/client/tests/sdk/data/test_get_sources.json similarity index 100% rename from data/test_get_sources.json rename to client/tests/sdk/data/test_get_sources.json diff --git a/data/test_get_submission.json b/client/tests/sdk/data/test_get_submission.json similarity index 100% rename from data/test_get_submission.json rename to client/tests/sdk/data/test_get_submission.json diff --git a/data/test_get_submission_from_string.json b/client/tests/sdk/data/test_get_submission_from_string.json similarity index 100% rename from data/test_get_submission_from_string.json rename to client/tests/sdk/data/test_get_submission_from_string.json diff --git a/data/test_get_submissions.json b/client/tests/sdk/data/test_get_submissions.json similarity index 100% rename from data/test_get_submissions.json rename to client/tests/sdk/data/test_get_submissions.json diff --git a/data/test_get_users.json b/client/tests/sdk/data/test_get_users.json similarity index 100% rename from data/test_get_users.json rename to client/tests/sdk/data/test_get_users.json diff --git a/data/test_get_wrong_submissions.json b/client/tests/sdk/data/test_get_wrong_submissions.json similarity index 100% rename from data/test_get_wrong_submissions.json rename to client/tests/sdk/data/test_get_wrong_submissions.json diff --git a/data/test_logout.json b/client/tests/sdk/data/test_logout.json similarity index 100% rename from data/test_logout.json rename to client/tests/sdk/data/test_logout.json diff --git a/data/test_reply_source.json b/client/tests/sdk/data/test_reply_source.json similarity index 100% rename from data/test_reply_source.json rename to client/tests/sdk/data/test_reply_source.json diff --git a/data/test_reply_source_with_uuid.json b/client/tests/sdk/data/test_reply_source_with_uuid.json similarity index 100% rename from data/test_reply_source_with_uuid.json rename to client/tests/sdk/data/test_reply_source_with_uuid.json diff --git a/data/test_seen.json b/client/tests/sdk/data/test_seen.json similarity index 100% rename from data/test_seen.json rename to client/tests/sdk/data/test_seen.json diff --git a/data/test_star_add_remove.json b/client/tests/sdk/data/test_star_add_remove.json similarity index 100% rename from data/test_star_add_remove.json rename to client/tests/sdk/data/test_star_add_remove.json diff --git a/tests/encrypted_msg.asc b/client/tests/sdk/encrypted_msg.asc similarity index 100% rename from tests/encrypted_msg.asc rename to client/tests/sdk/encrypted_msg.asc diff --git a/tests/test_api.py b/client/tests/sdk/test_api.py similarity index 100% rename from tests/test_api.py rename to client/tests/sdk/test_api.py diff --git a/tests/test_apiproxy.py b/client/tests/sdk/test_apiproxy.py similarity index 100% rename from tests/test_apiproxy.py rename to client/tests/sdk/test_apiproxy.py diff --git a/tests/test_shared.py b/client/tests/sdk/test_shared.py similarity index 100% rename from tests/test_shared.py rename to client/tests/sdk/test_shared.py diff --git a/tests/test_timestamps.py b/client/tests/sdk/test_timestamps.py similarity index 100% rename from tests/test_timestamps.py rename to client/tests/sdk/test_timestamps.py diff --git a/tests/utils.py b/client/tests/sdk/utils.py similarity index 100% rename from tests/utils.py rename to client/tests/sdk/utils.py diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 81c891231..000000000 --- a/pyproject.toml +++ /dev/null @@ -1,11 +0,0 @@ -[tool.black] -line-length = 100 - -[tool.isort] -line_length = 100 -indent = ' ' -multi_line_output = 3 -ensure_newline_before_comments = true -include_trailing_comma = true -force_grid_wrap = 0 -use_parentheses = true diff --git a/requirements/dev-requirements.in b/requirements/dev-requirements.in deleted file mode 100644 index ce7e52590..000000000 --- a/requirements/dev-requirements.in +++ /dev/null @@ -1,13 +0,0 @@ -black -coverage -flake8 -isort -mypy -pyotp -pytest>=7.2.0 -pytest-cov -vcrpy -pyyaml>=5.4.1,<6 -pytest-mock -pip-tools -types-requests diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt deleted file mode 100644 index 1440f6813..000000000 --- a/requirements/dev-requirements.txt +++ /dev/null @@ -1,542 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements/dev-requirements.txt requirements/dev-requirements.in requirements/requirements.in -# -black==23.3.0 \ - --hash=sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5 \ - --hash=sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915 \ - --hash=sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326 \ - --hash=sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940 \ - --hash=sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b \ - --hash=sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30 \ - --hash=sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c \ - --hash=sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c \ - --hash=sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab \ - --hash=sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27 \ - --hash=sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2 \ - --hash=sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961 \ - --hash=sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9 \ - --hash=sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb \ - --hash=sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70 \ - --hash=sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331 \ - --hash=sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2 \ - --hash=sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266 \ - --hash=sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d \ - --hash=sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6 \ - --hash=sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b \ - --hash=sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925 \ - --hash=sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8 \ - --hash=sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4 \ - --hash=sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3 - # via -r requirements/dev-requirements.in -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 - # via pip-tools -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via - # -r requirements/requirements.in - # requests -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 - # via - # black - # pip-tools -coverage[toml]==7.2.5 \ - --hash=sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3 \ - --hash=sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a \ - --hash=sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813 \ - --hash=sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0 \ - --hash=sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a \ - --hash=sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd \ - --hash=sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139 \ - --hash=sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b \ - --hash=sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252 \ - --hash=sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790 \ - --hash=sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045 \ - --hash=sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce \ - --hash=sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200 \ - --hash=sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718 \ - --hash=sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b \ - --hash=sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f \ - --hash=sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5 \ - --hash=sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade \ - --hash=sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5 \ - --hash=sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a \ - --hash=sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8 \ - --hash=sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33 \ - --hash=sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e \ - --hash=sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c \ - --hash=sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3 \ - --hash=sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969 \ - --hash=sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068 \ - --hash=sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2 \ - --hash=sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771 \ - --hash=sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed \ - --hash=sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212 \ - --hash=sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614 \ - --hash=sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88 \ - --hash=sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3 \ - --hash=sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c \ - --hash=sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84 \ - --hash=sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11 \ - --hash=sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1 \ - --hash=sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1 \ - --hash=sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e \ - --hash=sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1 \ - --hash=sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd \ - --hash=sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47 \ - --hash=sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a \ - --hash=sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c \ - --hash=sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31 \ - --hash=sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5 \ - --hash=sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6 \ - --hash=sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303 \ - --hash=sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5 \ - --hash=sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47 - # via - # -r requirements/dev-requirements.in - # pytest-cov -exceptiongroup==1.1.1 \ - --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ - --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 - # via pytest -flake8==6.0.0 \ - --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ - --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 - # via -r requirements/dev-requirements.in -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 - # via - # -r requirements/requirements.in - # requests - # yarl -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via pytest -isort==5.12.0 \ - --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ - --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 - # via -r requirements/dev-requirements.in -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -multidict==6.0.4 \ - --hash=sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9 \ - --hash=sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8 \ - --hash=sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03 \ - --hash=sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710 \ - --hash=sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161 \ - --hash=sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664 \ - --hash=sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569 \ - --hash=sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067 \ - --hash=sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313 \ - --hash=sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706 \ - --hash=sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2 \ - --hash=sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636 \ - --hash=sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 \ - --hash=sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 \ - --hash=sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603 \ - --hash=sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0 \ - --hash=sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60 \ - --hash=sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4 \ - --hash=sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e \ - --hash=sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1 \ - --hash=sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60 \ - --hash=sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951 \ - --hash=sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc \ - --hash=sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe \ - --hash=sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95 \ - --hash=sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d \ - --hash=sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8 \ - --hash=sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed \ - --hash=sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2 \ - --hash=sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775 \ - --hash=sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87 \ - --hash=sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c \ - --hash=sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2 \ - --hash=sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98 \ - --hash=sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3 \ - --hash=sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe \ - --hash=sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78 \ - --hash=sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660 \ - --hash=sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176 \ - --hash=sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e \ - --hash=sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988 \ - --hash=sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c \ - --hash=sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c \ - --hash=sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0 \ - --hash=sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449 \ - --hash=sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f \ - --hash=sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde \ - --hash=sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5 \ - --hash=sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d \ - --hash=sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac \ - --hash=sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a \ - --hash=sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9 \ - --hash=sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca \ - --hash=sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11 \ - --hash=sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35 \ - --hash=sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063 \ - --hash=sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b \ - --hash=sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982 \ - --hash=sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258 \ - --hash=sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1 \ - --hash=sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52 \ - --hash=sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480 \ - --hash=sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7 \ - --hash=sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461 \ - --hash=sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d \ - --hash=sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc \ - --hash=sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779 \ - --hash=sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a \ - --hash=sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547 \ - --hash=sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0 \ - --hash=sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171 \ - --hash=sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf \ - --hash=sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d \ - --hash=sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba - # via yarl -mypy==1.3.0 \ - --hash=sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703 \ - --hash=sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf \ - --hash=sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4 \ - --hash=sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85 \ - --hash=sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd \ - --hash=sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae \ - --hash=sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd \ - --hash=sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca \ - --hash=sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305 \ - --hash=sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409 \ - --hash=sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c \ - --hash=sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb \ - --hash=sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee \ - --hash=sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a \ - --hash=sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228 \ - --hash=sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897 \ - --hash=sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d \ - --hash=sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f \ - --hash=sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152 \ - --hash=sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf \ - --hash=sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8 \ - --hash=sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11 \ - --hash=sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017 \ - --hash=sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929 \ - --hash=sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e \ - --hash=sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a - # via -r requirements/dev-requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # black - # mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f - # via - # black - # build - # pytest -pathspec==0.11.1 \ - --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ - --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 - # via black -pip-tools==6.13.0 \ - --hash=sha256:50943f151d87e752abddec8158622c34ad7f292e193836e90e30d87da60b19d9 \ - --hash=sha256:61d46bd2eb8016ed4a924e196e6e5b0a268cd3babd79e593048720db23522bb1 - # via -r requirements/dev-requirements.in -platformdirs==3.5.1 \ - --hash=sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f \ - --hash=sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5 - # via black -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 - # via pytest -pycodestyle==2.10.0 \ - --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ - --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 - # via flake8 -pyflakes==3.0.1 \ - --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ - --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd - # via flake8 -pyotp==2.8.0 \ - --hash=sha256:889d037fdde6accad28531fc62a790f089e5dfd5b638773e9ee004cce074a2e5 \ - --hash=sha256:c2f5e17d9da92d8ec1f7de6331ab08116b9115adbabcba6e208d46fc49a98c5a - # via -r requirements/dev-requirements.in -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 - # via build -pytest==7.3.1 \ - --hash=sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362 \ - --hash=sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3 - # via - # -r requirements/dev-requirements.in - # pytest-cov - # pytest-mock -pytest-cov==4.0.0 \ - --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ - --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 - # via -r requirements/dev-requirements.in -pytest-mock==3.10.0 \ - --hash=sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b \ - --hash=sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f - # via -r requirements/dev-requirements.in -pyyaml==5.4.1 \ - --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ - --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ - --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ - --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ - --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ - --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ - --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ - --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ - --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ - --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ - --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ - --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ - --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ - --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ - --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ - --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ - --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ - --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ - --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ - --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ - --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ - --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ - --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ - --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ - --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ - --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ - --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 - # via - # -r requirements/dev-requirements.in - # vcrpy -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via -r requirements/requirements.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via vcrpy -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # black - # build - # coverage - # mypy - # pytest -types-requests==2.31.0.0 \ - --hash=sha256:7c5cea7940f8e92ec560bbc468f65bf684aa3dcf0554a6f8c4710f5f708dc598 \ - --hash=sha256:c1c29d20ab8d84dff468d7febfe8e0cb0b4664543221b386605e14672b44ea25 - # via -r requirements/dev-requirements.in -types-urllib3==1.26.25.13 \ - --hash=sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5 \ - --hash=sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c - # via types-requests -typing-extensions==4.6.0 \ - --hash=sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223 \ - --hash=sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768 - # via - # black - # mypy -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f - # via - # -r requirements/requirements.in - # requests -vcrpy==4.2.1 \ - --hash=sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013 \ - --hash=sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09 - # via -r requirements/dev-requirements.in -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 - # via pip-tools -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 - # via vcrpy -yarl==1.9.2 \ - --hash=sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571 \ - --hash=sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3 \ - --hash=sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3 \ - --hash=sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c \ - --hash=sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7 \ - --hash=sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04 \ - --hash=sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191 \ - --hash=sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea \ - --hash=sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4 \ - --hash=sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4 \ - --hash=sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095 \ - --hash=sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e \ - --hash=sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74 \ - --hash=sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef \ - --hash=sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33 \ - --hash=sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde \ - --hash=sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45 \ - --hash=sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf \ - --hash=sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b \ - --hash=sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac \ - --hash=sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0 \ - --hash=sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528 \ - --hash=sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716 \ - --hash=sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb \ - --hash=sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18 \ - --hash=sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72 \ - --hash=sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6 \ - --hash=sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582 \ - --hash=sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5 \ - --hash=sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368 \ - --hash=sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc \ - --hash=sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9 \ - --hash=sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be \ - --hash=sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a \ - --hash=sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80 \ - --hash=sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8 \ - --hash=sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6 \ - --hash=sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417 \ - --hash=sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574 \ - --hash=sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59 \ - --hash=sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608 \ - --hash=sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82 \ - --hash=sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1 \ - --hash=sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3 \ - --hash=sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d \ - --hash=sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8 \ - --hash=sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc \ - --hash=sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac \ - --hash=sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8 \ - --hash=sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955 \ - --hash=sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0 \ - --hash=sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367 \ - --hash=sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb \ - --hash=sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a \ - --hash=sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623 \ - --hash=sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2 \ - --hash=sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6 \ - --hash=sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7 \ - --hash=sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4 \ - --hash=sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051 \ - --hash=sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938 \ - --hash=sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8 \ - --hash=sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9 \ - --hash=sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3 \ - --hash=sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5 \ - --hash=sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9 \ - --hash=sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333 \ - --hash=sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185 \ - --hash=sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3 \ - --hash=sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560 \ - --hash=sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b \ - --hash=sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7 \ - --hash=sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78 \ - --hash=sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7 - # via vcrpy - -# The following packages are considered to be unsafe in a requirements file: -pip==23.1.2 \ - --hash=sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba \ - --hash=sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18 - # via pip-tools -setuptools==67.8.0 \ - --hash=sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f \ - --hash=sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102 - # via pip-tools diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index 8e8b7f628..000000000 --- a/requirements/requirements.in +++ /dev/null @@ -1,7 +0,0 @@ -# Ensure these match client production dependencies - -certifi>=2023.07.22 -charset-normalizer>=2.0.4 -idna>=2.7 -requests>=2.26.0 -urllib3>=1.26.5 diff --git a/requirements/requirements.txt b/requirements/requirements.txt deleted file mode 100644 index dab03b89d..000000000 --- a/requirements/requirements.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --generate-hashes --output-file=requirements/requirements.txt requirements/requirements.in -# -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 - # via - # -r requirements/requirements.in - # requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 - # via - # -r requirements/requirements.in - # requests -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 - # via - # -r requirements/requirements.in - # requests -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 - # via -r requirements/requirements.in -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f - # via - # -r requirements/requirements.in - # requests diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 7e4c8a6b0..000000000 --- a/setup.cfg +++ /dev/null @@ -1,18 +0,0 @@ -[flake8] -max_line_length = 100 - -[mypy] -python_version = 3.9 -show_column_numbers = True -show_error_context = True -disallow_subclassing_any = True -disallow_untyped_calls = True -disallow_untyped_defs = True -disallow_incomplete_defs = True -check_untyped_defs = True -disallow_untyped_decorators = True -no_implicit_optional = True -warn_redundant_casts = True -warn_return_any = True -warn_unused_configs = True -warn_unused_ignores = True diff --git a/setup.py b/setup.py deleted file mode 100644 index 312bccd25..000000000 --- a/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -import setuptools - -with open("README.md", "r") as fh: - long_description = fh.read() - -setuptools.setup( - name="securedrop-sdk", - version="0.4.0", - author="Freedom of the Press Foundation", - author_email="securedrop@freedom.press", - description="Python client API to access SecureDrop Journalist REST API", - long_description=long_description, - long_description_content_type="text/markdown", - license="GPLv3+", - install_requires=["requests", "urllib3"], - python_requires=">=3.9", - url="https://github.com/freedomofpress/securedrop-sdk", - packages=setuptools.find_packages(exclude=["docs", "tests"]), - classifiers=( - "Programming Language :: Python :: 3", - "Topic :: Software Development :: Libraries :: Python Modules", - "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", - "Intended Audience :: Developers", - "Operating System :: OS Independent", - ), -) From 006a4a7ac8906910760ab13a1233231b9bd0483d Mon Sep 17 00:00:00 2001 From: Cory Francis Myers Date: Mon, 18 Dec 2023 12:48:11 -0800 Subject: [PATCH 619/751] chore: remove stale "messages.mo" for Esperanto (eo) Per WeblateOrg/weblate#8936: > If a translation is added and subsequently removed, only its .po file, > not its generated .mo file, is removed from the repository. --- .../locale/eo/LC_MESSAGES/messages.mo | Bin 479 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 securedrop_client/locale/eo/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/eo/LC_MESSAGES/messages.mo b/securedrop_client/locale/eo/LC_MESSAGES/messages.mo deleted file mode 100644 index cde80e5a1ae4de44fed0289998df0b7a5931fb58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmYjN%TB{E5Cp*~N6s9K!~q1GP{g6QEh3N(Mq0gLVxgD918S2i$ysPh z)IwUtjwYB?8UwA$V`q$|(iS3<r6arz9v**wsLo|fIXZJ%M z^-f-fgV5;t^OnY5Q9~#bmF6 Date: Mon, 18 Dec 2023 13:07:21 -0800 Subject: [PATCH 620/751] chore: merge "securedrop_client/locale" in monorepository layout This would be slightly if I'd removed "client/securedrop_client/locale" when I restored "securedrop_client/locale" in 201824f78b76940e0f1cba320e57128cfc2a94d0, but it all comes out the same. --- .../locale/bn/LC_MESSAGES/messages.mo | Bin .../locale/bn/LC_MESSAGES/messages.po | 0 .../locale/ca/LC_MESSAGES/messages.mo | Bin 12136 -> 13062 bytes .../locale/ca/LC_MESSAGES/messages.po | 97 ++++- .../locale/de/LC_MESSAGES/messages.mo | Bin 12597 -> 13589 bytes .../locale/de/LC_MESSAGES/messages.po | 90 +++- .../locale/el/LC_MESSAGES/messages.mo | Bin .../locale/el/LC_MESSAGES/messages.po | 0 .../locale/en_XA/LC_MESSAGES/messages.mo | Bin .../locale/en_XA/LC_MESSAGES/messages.po | 0 .../locale/es/LC_MESSAGES/messages.mo | Bin 12266 -> 11672 bytes .../locale/es/LC_MESSAGES/messages.po | 104 +++-- .../locale/fi/LC_MESSAGES/messages.mo | Bin .../locale/fi/LC_MESSAGES/messages.po | 0 .../locale/fr/LC_MESSAGES/messages.mo | Bin .../locale/fr/LC_MESSAGES/messages.po | 0 .../locale/hr/LC_MESSAGES/messages.mo | Bin 11722 -> 12741 bytes .../locale/hr/LC_MESSAGES/messages.po | 107 +++-- .../locale/is/LC_MESSAGES/messages.mo | Bin 12335 -> 13283 bytes .../locale/is/LC_MESSAGES/messages.po | 102 ++++- .../locale/it/LC_MESSAGES/messages.mo | Bin 1739 -> 7025 bytes .../locale/it/LC_MESSAGES/messages.po | 190 ++++++--- .../locale/pl/LC_MESSAGES/messages.mo | Bin .../locale/pl/LC_MESSAGES/messages.po | 0 .../locale/pt_BR/LC_MESSAGES/messages.mo | Bin 11972 -> 12446 bytes .../locale/pt_BR/LC_MESSAGES/messages.po | 105 +++-- .../locale/pt_PT/LC_MESSAGES/messages.mo | Bin 12218 -> 13180 bytes .../locale/pt_PT/LC_MESSAGES/messages.po | 88 +++- .../locale/ru/LC_MESSAGES/messages.mo | Bin 15719 -> 16490 bytes .../locale/ru/LC_MESSAGES/messages.po | 103 +++-- .../locale/sk/LC_MESSAGES/messages.mo | Bin 11550 -> 11273 bytes .../locale/sk/LC_MESSAGES/messages.po | 99 +++-- .../locale/sv/LC_MESSAGES/messages.mo | Bin 11897 -> 12838 bytes .../locale/sv/LC_MESSAGES/messages.po | 98 ++++- .../locale/tr/LC_MESSAGES/messages.mo | Bin 12069 -> 13010 bytes .../locale/tr/LC_MESSAGES/messages.po | 90 +++- .../locale/zh_Hans/LC_MESSAGES/messages.mo | Bin 10874 -> 11739 bytes .../locale/zh_Hans/LC_MESSAGES/messages.po | 91 +++- .../locale/zh_Hant/LC_MESSAGES/messages.mo | Bin .../locale/zh_Hant/LC_MESSAGES/messages.po | 0 .../locale/ca/LC_MESSAGES/messages.mo | Bin 13062 -> 0 bytes .../locale/ca/LC_MESSAGES/messages.po | 387 ----------------- .../locale/de/LC_MESSAGES/messages.mo | Bin 13589 -> 0 bytes .../locale/de/LC_MESSAGES/messages.po | 390 ----------------- .../locale/es/LC_MESSAGES/messages.mo | Bin 11672 -> 0 bytes .../locale/es/LC_MESSAGES/messages.po | 390 ----------------- .../locale/hr/LC_MESSAGES/messages.mo | Bin 12741 -> 0 bytes .../locale/hr/LC_MESSAGES/messages.po | 394 ----------------- .../locale/is/LC_MESSAGES/messages.mo | Bin 13283 -> 0 bytes .../locale/is/LC_MESSAGES/messages.po | 396 ------------------ .../locale/it/LC_MESSAGES/messages.mo | Bin 7025 -> 0 bytes .../locale/it/LC_MESSAGES/messages.po | 375 ----------------- securedrop_client/locale/messages.pot | 353 ---------------- .../locale/pt_BR/LC_MESSAGES/messages.mo | Bin 12446 -> 0 bytes .../locale/pt_BR/LC_MESSAGES/messages.po | 393 ----------------- .../locale/pt_PT/LC_MESSAGES/messages.mo | Bin 13180 -> 0 bytes .../locale/pt_PT/LC_MESSAGES/messages.po | 390 ----------------- .../locale/ru/LC_MESSAGES/messages.mo | Bin 16490 -> 0 bytes .../locale/ru/LC_MESSAGES/messages.po | 396 ------------------ .../locale/sk/LC_MESSAGES/messages.mo | Bin 11273 -> 0 bytes .../locale/sk/LC_MESSAGES/messages.po | 391 ----------------- .../locale/sv/LC_MESSAGES/messages.mo | Bin 12838 -> 0 bytes .../locale/sv/LC_MESSAGES/messages.po | 387 ----------------- .../locale/tr/LC_MESSAGES/messages.mo | Bin 13010 -> 0 bytes .../locale/tr/LC_MESSAGES/messages.po | 390 ----------------- .../locale/zh_Hans/LC_MESSAGES/messages.mo | Bin 11739 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/messages.po | 386 ----------------- 67 files changed, 1000 insertions(+), 5782 deletions(-) rename {securedrop_client => client/securedrop_client}/locale/bn/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/bn/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/el/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/el/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/en_XA/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/en_XA/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/fi/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/fi/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/fr/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/fr/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/pl/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/pl/LC_MESSAGES/messages.po (100%) rename {securedrop_client => client/securedrop_client}/locale/zh_Hant/LC_MESSAGES/messages.mo (100%) rename {securedrop_client => client/securedrop_client}/locale/zh_Hant/LC_MESSAGES/messages.po (100%) delete mode 100644 securedrop_client/locale/ca/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/ca/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/de/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/de/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/es/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/es/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/hr/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/hr/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/is/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/is/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/it/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/it/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/messages.pot delete mode 100644 securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/ru/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/ru/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/sk/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/sk/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/sv/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/sv/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/tr/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/tr/LC_MESSAGES/messages.po delete mode 100644 securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo delete mode 100644 securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/bn/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/bn/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/bn/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/bn/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/bn/LC_MESSAGES/messages.po b/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/bn/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/bn/LC_MESSAGES/messages.po diff --git a/client/securedrop_client/locale/ca/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.mo index 5d6ff67b1e2b353cab61960557e67ebabe9757d8..303dc113df28a82a1c07e9526d24cbd66c824e0c 100644 GIT binary patch delta 3447 zcmZwIdu$xV9l-H9+X2UMoH)j@oe(w zb+{S3a6L|7B^vy;wF3tSyO$8wOB@!vQ7g^0C(Vi)>j7@$b(+4* z`57>$+Km$NFiOOq##NX?32YJXz!TVo-^D4sg8ev1+5-3`d=M|8%)9RvrAUGbp=2F@ztYEO3y#-i%*FN%@l~fqV_+O`kzY=?lm|^$H(6s@_D6SFj#S zNrwc`QgAoQy!$tj{}BcuZpeaXa2S7yedwn`_Mwdu;CYl3{slX+mNf0fF_hd>xAU5L+cHwE1)W3$zt^S5m{pEZ# zVl#dMM{p~~k)l^FehQz$Gd^knC1Xh{S28u9WgrinLSj(gM@i-D1%HQ{nf{3{a=%tH z3D=i!7uVmUlqK*tQ3AP&vPE@V$Qw7JWS|Y@c;AIfIElrWy~IHF;w@~#U!%riqH4uP z+=d5Hit{*1peIqDdm1HE&!c4O=O~#fXELdgPLzxdAiJifkmRWadxX$`~i|2^(Q2|s+4GCfku?$+l!K+5#%>XB~dc6giUh( zzrdh}8|TsBdpM4xy!JtS8XdffGO^9;$(uZaCHQre7dV4M_(H+|7965t@8!OWm3SHD zSpF5g^Y0_i@`q|%g?^M2x1pqN5G5lIATg-ZC=0%XQY&wuO!#{|f>*H{$J+P}!BZH( zKNPOFFJoo!5OT;hfp$c3hVJK9>brY zoQ4keNA8a!|5Sz#DcWZX{%R-rr(o4OqL5>^3#lJ9jm3HBq=LKNNQs#)9m1gx*h=0-~P0?YJ4s z>C&V=q_J~e(Mp!2JwTUJat~b^he-|4Z=%bVu>)Ss$olFK{WEl_ZfVqs_y52r@w4=` z^iukAD=Q3al%pq2wo&$03U9f|PpzB?De9T!n<%GE3XqmnyYmC@le+PKzu8`|k~tyD zqHmx}GxWRZ0s1gKNUx{&(xu6%kh;0Ct>FfT!fTvvb%5SQ*WNDygGu^o*H?O^ert2u zBqAoYEv*?i-D<^+g;dfp-Di)K7G*=pxY09q%%t^#9gFEi($UjKo5i_g$}y3i?a_`s zE50+6O2)MlwV5=TNrjD$TJy$xXvxTfCZQwAg+wfAMNFhsTZzd3owmJaI;FSo>6z{o zCX$8qnAzxXCY2)K*wTub@)5S`aLf)L)AfO5!m$$>(_WvOEPKAV<(9|R!tyz<9&+S2h@&%6yGG zm%pLLjgzv?yhM1s@YIwS;lplIm4EH%q47Xa_XPr@hYn2S_E-JKmwUYW1K;ZVl9^aU zFC{bX-)kKAL`}>+R%_K->{Nc!B*V_NcgVe7J5^NN)!yN@Y(CnuV#lMFHi>!Ly1owN zuDra{ojbX?sVLhQo6RKB%sCL4;m&bt}hq& zp2m}F1J<05+ti9PYueqPHP-p8+?B@SqD@2bxs)9@_TtA@%DvZA?Q7*_QYM_4Gi-pP zDW}3D`Bx>yEB@-f+P=x%(%e}Y7#$g#2HCS53%K1<=o6HJ0(}An3Y3=eD70+5({{*q2X<#^kzkb| zMhuC`gb#i~<0Ax(qN^f_VnQ`0MiC$J0}&I58bXLj{9wSO_&>A7aMQEDJG=9^_ndpD z#|Cfoj{lmId{WW+h)0OLB&EhNeHtIM)KsO?Fby*>7azsBI2#-Ao=2%&Sm#x0+YF^v z@%{01rRL+;Scre3+;SQ>;Z&7@x$>xjL`PL%kRMiJGQN&-;%O|!_c0&8Lm9yDSc1v3 zl*++5ScG*b4_c2hfGxNl51?Fk5xG=d!)%%A?Wr$3nM(QjArt4~QsgJK0}F5%TX7s0 z;+H4`xP#0@rDrL{pVEBDKx#1s*C9z!o3R3WupW`$eH1(K3zSqBanf|GLCIh}$^aTsGP40Clbtx8N5`b2@fnbZCW?#D*FfK4cOm*ZxX0X~mz#&9Xecd!8$6p(+p!Cvya8_%IU zIG<_EL?6lwYEeqC9BZ%xr9?+iYWfD2;{+bUTPOn@rVf(w*H9MgH~1Ldz&V&vO#Xdz zDvOo!VkbU<-FV8Q)CrW7RdTgtY6;5uZOBi`Ld}IQ;0iA*DXPhlk*vj6we*}@l>u>12)^!gJ6nvQK8&z{nl z@;zj1>MpWzR4LPEW2tJCi8NpecA;cyCl<;6x9P}?PoSjqQ7 z<#-r(;3wFOIpkN4yRi$;Vk4%o^d+-va3wyCYw$eo=K0FANT~trL$ahMP#$~(O1POB&p_D^1vW{3rNZqB8Fn2<2QvWA8*iQ5k z(l!%)ZZGknfs(q5OVTN|Wl6Z(65Q1-wh&9DLz8kylgXtKTjhYZHi7%@XrRAQ>c5JP zynLid-7*N-lCy{n#KUa{2V~c6B+X5$97uhoNm(AWRytC~Btq&ft(e$J$U4d-x_N%$ z&4#j_q)~2n!AY&8e)7hXg+o=`Ehwd$Nu(1}_fFzLlb!USbs zO3Yru2Mf_{EBH)t?xyy{N7L?m;>*(COiHS%s&cMn78Rgsu|~roD-hI;p^#o}hK#6_ zmUYg#npN%;WuJF`%ibIB$+_i;Z_i8iB!!Jp=h=LJ%GRd#wl3%U{M`7Z{Og_-&6_rM zwQbzms{3QMZH4uy$-Vjw9Wo>|U>Du`^QI8~>-&=Z*iQ`;*HCO?%9UM760$%xE-V z4;fLJMW^40+7qwpXl!4^95J0ezQPjuzA0di1+;D1QEh~xdg^ND1>aexudL0vUG}JR zrED}gVuS)tr@z~|;D63(FE5G@m3zJMqZN6c(m+^S{k9P{!?t^i{~xQvR?PWj;j*}Y z(JpUSD-*WtiMXE1MWc>bBY|)*!k~giG%#SB2Ld(&2uJn)n4v=fZH5P}$Vgzo\n" +"PO-Revision-Date: 2023-10-19 13:30+0000\n" +"Last-Translator: \"Benet (BennyBeat) R. i Camps\" \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} ja s'ha iniciat" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "S'està recuperant 1 missatge" +msgstr[1] "S'estan recuperant {message_count} missatges" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "No es pot arribar al servidor del SecureDrop. S'intenta de nou..." @@ -48,10 +53,7 @@ msgid "Your session expired. Please log in again." msgstr "La sessió ha caducat. Torneu a iniciar-hi sessió." msgid "Failed to update star." -msgstr "No s'ha pogut actualitzar l'estrela." - -msgid "Retrieving new messages" -msgstr "S'estan obtenint els missatges nous" +msgstr "No s'ha pogut actualitzar l'estel." msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Els fitxers no existeixen al directori de dades. Proveu baixant-los novament." @@ -65,8 +67,23 @@ msgstr "Ha fallat la supressió de la conversa al servidor" msgid "Failed to delete source at server" msgstr "Ha fallat la supressió de la font al servidor" -msgid "Download All Files" -msgstr "Baixa tots els fitxers" +msgid "No messages." +msgstr "Cap missatge." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s ha escrit:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s ha enviat:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Fitxer: %(filename)s" + +msgid "Download All" +msgstr "Baixa-ho tot" msgid "Delete Source Account" msgstr "Supressió del compte de la font" @@ -74,6 +91,21 @@ msgstr "Supressió del compte de la font" msgid "Delete All Files and Messages" msgstr "Suprimeix tots els fitxers i missatges" +msgid "Print Transcript" +msgstr "Imprimeix la transcripció" + +msgid "Export Transcript" +msgstr "Exporta la transcripció" + +msgid "Export All" +msgstr "Exporta-ho tot" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Alguns fitxers no s'exportaran

Alguns fitxers d'aquesta font encara no s'han baixat, i no s'exportaran.

Per a exportar els fitxers baixats, feu clic a «Continua»." + +msgid "all files and transcript" +msgstr "tots els fitxers i la transcripció" + msgid "SecureDrop Client {}" msgstr "Client del SecureDrop {}" @@ -96,7 +128,7 @@ msgid "SIGN IN" msgstr "INICIA LA SESSIÓ" msgid "Nothing to see just yet!" -msgstr "Encara no hi ha res per mostrar" +msgstr "Encara no hi ha res per a mostrar" msgid "Source submissions will be listed to the left, once downloaded and decrypted." msgstr "Els enviaments de les fonts es llistaran a l'esquerra, una vegada es baixen i es desxifren." @@ -116,11 +148,11 @@ msgstr "Veure o obtenir fitxers" msgid "Send a response" msgstr "Enviar una resposta" -msgid "Deleting files and messages..." -msgstr "S'estan suprimint fitxers i missatges..." +msgid "Deleting files and messages…" +msgstr "S'estan suprimint els fitxers i missatges…" -msgid "Deleting source account..." -msgstr "S'està suprimint el compte de la font..." +msgid "Deleting source account…" +msgstr "S'està eliminant el compte de la font…" msgid "— All files and messages deleted for this source —" msgstr "— S'han suprimit tots els fitxers i missatges d'aquesta font —" @@ -171,6 +203,12 @@ msgstr "Inici de sessió" msgid " to compose or send a reply" msgstr " per escriure o respondre" +msgid "FILES AND MESSAGES" +msgstr "FITXERS I MISSATGES" + +msgid "SOURCE ACCOUNT" +msgstr "COMPTE DE LA FONT" + msgid "Username" msgstr "Nom d’usuari" @@ -225,8 +263,8 @@ msgstr "CONTINUA" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SÍ, SUPRIMEIX FITXERS I MISSATGES" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Segur que voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte font {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte de la font {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Preservant el compte es mantindran les metadades i podreu iniciar sessió novament a {source} del vostre SecureDrop." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "un missatge" msgstr[1] "{message_count} missatges" +msgid "SUBMIT" +msgstr "ENVIA" + msgid "Preparing to export:
{}" msgstr "S'està preparant per a exportar:
{}" @@ -282,15 +323,9 @@ msgstr "La contrasenya que he inserit no és vàlida. Torneu a provar." msgid "See your administrator for help." msgstr "Contacteu amb l'administrador si us cal ajuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "El botó CONTINUA romandrà desactivat fins que la informació no estigui enllestida" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Recordeu tenir cura quan treballeu amb informació fora del vostre equip." -msgid "SUBMIT" -msgstr "ENVIA" - msgid "DONE" msgstr "FET" @@ -330,5 +365,23 @@ msgstr "La vostra organització no podrà enviar respostes." msgid "All files and messages from that source will also be destroyed." msgstr "També es destruiran tots els missatges de la font." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Segur que voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte font {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "S'estan suprimint fitxers i missatges..." + +#~ msgid "Deleting source account..." +#~ msgstr "S'està suprimint el compte de la font..." + +#~ msgid "Download All Files" +#~ msgstr "Baixa tots els fitxers" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Imprimeix la transcripció de la conversa" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "El botó CONTINUA romandrà desactivat fins que la informació no estigui enllestida" + #~ msgid "DELETE" #~ msgstr "SUPRIMEIX" diff --git a/client/securedrop_client/locale/de/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/de/LC_MESSAGES/messages.mo index 584fd390774c76802c671de97a837dfc6a84d899..6e4ecc735ff0e62e36fd4d13be1a8e2208dee43c 100644 GIT binary patch delta 3465 zcmZwIZEPGz8Nl&5J1>so*s0yrb{xXgiDSDleo0f3IwtnTz9x>}68oH&hSXi(jeU#H zdtvXcwn?K)RkgSkQkt&H2Pi=mB7%}4)T2caAR)qsN(2#6i4O?1k(E#okt$TEpb&}w zvv;nKh>_=hvva#Mv-3Q2erxiTFJ<1VT=j~g*wii5Xt7e#ab*o3Qr7u@Du5ffT#s9^ z7VB^?Zp1L&hXy|hC^d(_9w}3*o9kG)Qrqx*Sglk>U8f;)-NF+5D^}s( z^OjVwD6Y5QDtrdzzUT2XcmX%z8z>9AhMRE-nN!`x8Z2d%GS4=Y1w4cU%&&%N$b;X& zQoM@tCci>?AwGU;*gD5LLiL22?S=c;2gwNt${2@-@2iS)P*|uK%8h#mXpp1Lqex=w1HHNZ- z5tJQ{VWx-1(=;SDKgTh=i!#Ac_H`}3h_dA`qb%f`C~tZhWlP^e{?yO-;8FEE)c66` zV+q?K3)q==AIi7`53v73G{)$V317oO`~wEDkqkM2Hp&98plsnC+=Df2Qx6_NdF~>f z#`jPr?5ZVUaS-JNP9Q@o3)^wNmi<3VyfH}&4RlJVs!@)0JxYkW@dA#cgf4TNhGh92uEQR7H7)ftqDUc`F*7Our# zpzO>$*eU1#T^eCJ$_a1`BPdCE9S`7UUN4QOQ3iY$<&FM?GT>b#tZFr@K8O#Z977u) z$2ao*C7;VB;gP&2v4Z*4Bn?@SoA(^bn=hgqr%U(+%wjA44dwW0E@X?_umpoB6CTEK z{4RbG|Ba(~qD`se_ye@Cm?MxGreSCt!5?D?S9jzd7{HgfzJwdGjrhofJy?dLD7i6# z5{joWg+D?`#s)g&bo8SfR|g-(%P22&^I`U1wr=b0-0|r|c3nM=^5AnwqN~@Dq*vEb z7Wi8XpcL6DNjP}{DKdeCQI4?``5lm>DLFAf9ia|U%c=7J$KMip3t6EQdBX|6mHX&{ zCkn1l(v~>yr#9yMWs%F}C=JP*;(W&moTkc)E*B!;{}fM3{KNTP`Js3u-xkPA|36Z#pSDOFU-n|sT8Iyi-XY2s6oUVhfK|KEYeG3q)m zP;#oip($ycsBxQ98v#-`&D9Q|3PK4d>vr@(;igU(|f@4QwseE*79e4U0YvU<=w2W z-m|{F5h3t)nJw=rT zlSJLL>{ND5)3(6oj+J|J%eE$`3B;6fyv6n{-lNUCOOK9+1_uX5hQlM-c=KXWwx{Jv nQQ6S7xBcN|zrBSv+q={HjJMP_Uq{}pq=>|DWoGYW`yc-cuq|U2 delta 2486 zcmYk+drXye9LMqBIiP?Zda}{*zPcAJ=Twe>L53*<7*Aiw4yTEj$`R`d~_^)85iP*sEMym`8{gD z+qfQoMeSfEH@D(Gti`Xe4mG+y*P|BrDn>GfEBJgLYp^hr{A++cwCznZ?2q)ctL!ly_nm9z>0E z6E$B9X`o!pST-FEv=}R}9<{R()P-kI6JA0c(F9gvHKQrzL#PFOfF#RYMAl?(plap; zYRCUz6~^To(}8u^r|17YIw~s7QU`4~jPIfr7RM|aXg-o_FAjF4RH>P#fEi>3aT;(OJzGXRs6}P|tmGkzNoK3TnV|)I?R-i6?L;{)U@z zE&1MxC$Ru3Tg(iLxJ$MXNEGJQ^{}MSy zGl`srNnR3ttd?Pj&jYv$Z=*Igw=7!iJCL=S1E~AXq3X|EqvOU&)XMIm3w05Xv}q!A zG#iM=n~q}{p)AA_Do|yLlZYId7P*~hCbXcZ2{jTNc~Py?`9H;nZN#&L+D2k`q!;~X z0i_TrvRYJTD49r=L*zM^4a5p{XsQb}6=DLR<5F82B~m9f^xJg))pS(ZYO2gcLg}7G zv=WcE8GPWBB8}`vUOxJuCr2$eO60#XsX~h(RIqA#LR3R~B$J3O%pZNT;XFc(`iRs4 zPfX;zISsRh;5Z{sijHa~q1q@X+KER^h4`p#qN9RTG3uqJvri?|cmYOQ%2J?EBTdCJ z&G{?7D?FO;pDVn|b1o*Pw6xTjNXp7Y(-0gD_=DYEtJd$gntXnH$Vo`P=-f za(+(P6Yff#bcMI2$GTzy_NenpM!~esy7lWioEsTw;p-Wuj`ohC`uX zz#8>2R*!9YeM8+ne%ose2SPr-73#CC#{GMPgCT3nddoLt4cgt_=ffY*{@3N? zMuWqCuk(3!$T^2_5*{qsWMxcSH2;kOo?kM*>UUl{7`vjf&hFyLIt&nnO! zHVxZ;e}6C#3R?cD-}N;+vaN>hknOVr&Y}D}&hdhp@ZAEJ%ZbfTbCL@WgijSNcZYu| zUg(N#vxjY`qNFDLQppi_v(L8Ld;7Zmq38VLXPM4w+OWB!y|H6QV;h?r^jcoKyFcU` z@!5l+#a0hn@p4OaZzb%l#~!qOA+{I_yURXxJ9(7{J?&gEFn*!8FT`rDWUp}^RunrQ LRql7Hmj3iVa%Vra diff --git a/client/securedrop_client/locale/de/LC_MESSAGES/messages.po b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po index 9b4fa553f..c4a4f91bb 100644 --- a/client/securedrop_client/locale/de/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-22 22:22+0000\n" -"Last-Translator: Kevin Kandlbinder \n" +"PO-Revision-Date: 2023-06-13 21:56+0000\n" +"Last-Translator: Ettore Atalan \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} läuft bereits" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "1 Nachricht wird abgerufen" +msgstr[1] "{message_count} Nachrichten werden abgerufen" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Der SecureDrop-Server kann nicht erreicht werden. Versuche, die Verbindung wiederherzustellen ..." @@ -50,9 +55,6 @@ msgstr "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an." msgid "Failed to update star." msgstr "Stern konnte nicht aktualisiert werden." -msgid "Retrieving new messages" -msgstr "Neue Nachrichten werden abgerufen" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Datei existiert nicht im Datenverzeichnis. Bitte versuchen Sie, sie nochmals herunterzuladen." @@ -65,8 +67,23 @@ msgstr "Löschen der Konversation am Server fehlgeschlagen" msgid "Failed to delete source at server" msgstr "Löschen der Quelle am Server fehlgeschlagen" -msgid "Download All Files" -msgstr "Alle Dateien herunterladen" +msgid "No messages." +msgstr "Keine Nachrichten." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s schrieb:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s sendete:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Datei: %(filename)s" + +msgid "Download All" +msgstr "Alles herunterladen" msgid "Delete Source Account" msgstr "Quellkonto löschen" @@ -74,6 +91,21 @@ msgstr "Quellkonto löschen" msgid "Delete All Files and Messages" msgstr "Alle Dateien und Nachrichten löschen" +msgid "Print Transcript" +msgstr "Transkript drucken" + +msgid "Export Transcript" +msgstr "Transkript exportieren" + +msgid "Export All" +msgstr "Alles exportieren" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Manche Dateien werden nicht exportiert

Manche Dateien aus dieser Quelle wurden noch nicht heruntergeladen und werden daher nicht exportiert.

Klicken Sie auf „Weiter“, um die aktuell heruntergeladenen Dateien zu exportieren." + +msgid "all files and transcript" +msgstr "alle Dateien und Transkript" + msgid "SecureDrop Client {}" msgstr "SecureDrop-Client {}" @@ -116,11 +148,11 @@ msgstr "Dateien ansehen oder abrufen" msgid "Send a response" msgstr "Antwort senden" -msgid "Deleting files and messages..." -msgstr "Löschen von Dateien und Nachrichten..." +msgid "Deleting files and messages…" +msgstr "Dateien und Nachrichten werden gelöscht…" -msgid "Deleting source account..." -msgstr "Quellkonto löschen..." +msgid "Deleting source account…" +msgstr "Quellkonto wird gelöscht…" msgid "— All files and messages deleted for this source —" msgstr "— Alle Dateien und Nachrichten für diese Quelle sind gelöscht —" @@ -171,6 +203,12 @@ msgstr "Anmelden" msgid " to compose or send a reply" msgstr " um eine Antwort zu verfassen oder zu senden" +msgid "FILES AND MESSAGES" +msgstr "DATEIEN UND NACHRICHTEN" + +msgid "SOURCE ACCOUNT" +msgstr "QUELLKONTO" + msgid "Username" msgstr "Benutzername" @@ -225,8 +263,8 @@ msgstr "FORTSETZEN" msgid "YES, DELETE FILES AND MESSAGES" msgstr "JA, DATEIEN UND NACHRICHTEN LÖSCHEN" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Sie möchten {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Möchten Sie {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Wenn Sie das Konto behalten, bleiben seine Metadaten erhalten, und {source} kann sich erneut bei SecureDrop anmelden." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "Eine Nachricht" msgstr[1] "{message_count} Nachrichten" +msgid "SUBMIT" +msgstr "EINREICHEN" + msgid "Preparing to export:
{}" msgstr "Vorbereitung für den Export:
{}" @@ -282,15 +323,9 @@ msgstr "Die angegebene Passphrase hat nicht funktioniert. Bitte versuchen Sie es msgid "See your administrator for help." msgstr "Wenden Sie sich an Ihren Administrator, um Hilfe zu erhalten." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Die Schaltfläche FORTSETZEN wird deaktiviert, bis die Export-VM bereit ist" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Seien Sie vorsichtig, wenn Sie mit Dateien außerhalb Ihres Workstation-Rechners arbeiten." -msgid "SUBMIT" -msgstr "EINREICHEN" - msgid "DONE" msgstr "FERTIG" @@ -330,6 +365,21 @@ msgstr "Ihre Organisation kann ihnen dann keine Antworten senden." msgid "All files and messages from that source will also be destroyed." msgstr "Alle Dateien und Nachrichten von dieser Quelle werden ebenfalls zerstört." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Sie möchten {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Löschen von Dateien und Nachrichten..." + +#~ msgid "Deleting source account..." +#~ msgstr "Quellkonto löschen..." + +#~ msgid "Download All Files" +#~ msgstr "Alle Dateien herunterladen" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Die Schaltfläche FORTSETZEN wird deaktiviert, bis die Export-VM bereit ist" + #~ msgid "Entire source account" #~ msgstr "Gesamtes Quellkonto" diff --git a/securedrop_client/locale/el/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/el/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/el/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/el/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/el/LC_MESSAGES/messages.po b/client/securedrop_client/locale/el/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/el/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/el/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po b/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/en_XA/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po diff --git a/client/securedrop_client/locale/es/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/es/LC_MESSAGES/messages.mo index 53df98f8fc3fc8122a4bb3d1c4b08b5782f2ead0..58951b67c7a1f48e26189e74abcf002dbc0b6afa 100644 GIT binary patch delta 2270 zcmYk+3v5$W9LMp~Zll{MFqxa%K)meXCWAeYm!NK4+YN=Sa~m?5W)@c1bgbBJF_@Sd zFopm|$d!l?pBOM9k<1$v$P73WU$__rNsz>-k%Sl|B)$?K!SAo_5>EQ>=ib|U?>Xmx z{-?k6?(a!_KQnWmp{*lk6Ia~EBycQ?FWPaBF*$ewr{Tvq2fxNycn$w{8RN}1W+Bgd za*b)=`f{%^W%v}{g0JEfd>^^he2Dq#>XX!g`40Q|;VNcgC%x&$ZoC!4SbzyE!hNV0 zzJu!MJzRwsPy?)(o*HlfZ{oZoecp$aoX2pkrh0$_K4y%sLOg>({0XbEYKAc-*oBPP zL@^JyBV#o$q6YK^DrqN?B$(4U56|E-{1bbzmWKoQ0{WHea~wQ@MGTXB%uZAW4xl=G z4I9xxrS^C1#6>enH|{`XY7eU8mrcr$*47M{ma{0kH6u!LUZJk$%9V=FeH zM!pAEctzlURipPy=#PQA+I!R1t2(a@>Zu;SsFBPtlFP;u5@uuT!j*td}zNSuy#i zUd-9zR8jnhdN79t@8QW>+>N`~8ZBHe;_d4AQB+OrLQUW>YL^^C4d?_iR`V^6;1yJD zthZA4^`izHOK?D+<|WjFqo@~7pk{m?LwFq*V2HGkMe{V0ZDXT~_idbyAD|}iGb+`& zrK#Ohg58`iL%nA&s=vf34#Exi!!_)C7X)#r4>SQS{+C?9u)&e&M7xChyxW(!hhW*aWWgQ(1%MascsuwM1_Z^}5(4Qq4(pGON%Az3v) zAd@qhESx&3MmMg(2JA)`DhuksPw4t8;>M=I+(~GXnS_=lkPqvr6q@WAbmc` z91iXw?kDb^yol|@G(tN_wX%}9vE_0?wv&w{CM#Yi`j1hYt@WR5O&qKyG6*U&*;HsM zO0BoHQwL!YS}yH>HI_fQW7s&!<*UIJ1gnzV30kVDgqKhYrAU6a-8h@p^bab&MFe$d z_=`?9Rl3?jLN%ba-1*P5H`DeN=Q~He8Lq}qThIhTYui?bd;t@P3`T|{mTz#-Y91Jj z#I5j9pVbS5=USW7_trRNd6(UG zS^gn!fAmSKJsgj3>5qk-@%(<5Ggz?E?X(q*xw976)YsHId9(Vm?9;Vg$F}CXidF{w zD?=s_?DYFOT6`U*DH@A~W7e>Jtaf&Z2@Vcy9vI@>KN1-l4qJT@t64`8yP$N!xn5f7 zvd`4!*#7dKytb&-AKuE4hT`GJBJmpMmGZ|k?DDE{Pir(j%scJ6iUQ|S)t4?OtGX(~ JIa1?y{SU)T4Y2?K delta 2819 zcmbu=X>3$g6u|L2U7)osr3)>!6mAzOOQ}+7p(1oIEp)+BT9#__+Igh|(|PT@8A?-e zqA?N(AJoCbpfMpXpad5NqiB>!l`lw$2^x)w2Dca!qlpO+HNpRRGu0CP=1uSWz5U*M z&Uw?PcmC8L`YJQwDMjn2FQ8|~D;2`jS!`%YNlGPSGNxe`F2q92$6EZ|rBokQ#3|K# zTlD@zsY=yw{RkH070ksOD6gK&%XlQDa@on^gpOH>ZjM_}Zajqvcm{buokf|zdAuF3 z;(YuQ<^Fkdq603#O&r&v+f^VUOI)$5NV=+qPmZMCd5+zbK7?O}Qvy+W|sBsL7@JW<` z-$Z%QN7#;+a1G}3P#bn*9UjAa{5E#Hn3v1MhEXDQ0$1Y|ti{wE;x8{~C%*UNQIr91 zUbIdnh&X zBg%r}nZ0~fsUdcFR^_0qumXeFijt#qD8+LD<$;e;X8u{sYv?>*6n$|8N+i}|C%SP3 zoPUH7wD1iKbg@cIALQe{v31l;%FouMj7xrCSnTlmq=w`BQA+K zf?GL0jWVGm!XOJML0MpB%m$RmcA?at+Rl!IWE6>}dJOqfC)mhJK0$u8)DP&!->?q1 zEhYDO6#MZS_F@kS--55=28^Th*W*U)z=JVA#~#L4rNsRZK7_nOB@GkA#XsR|^Rss}?d;C^=E@Hp1sE9gQQ zTqe>?ucvp?XEv#5`C9tu39$>wDDRw2mrr^-eIxxI`Z~Ha0^_8xRq}r?2U1uM(4}pr zCpml3jRqpF_!6BawLprU9LkAm+0djG);N37Ur*Vk$eqtu>OyLwg)U9fEGg`e{MWKG z-MZPCLzl`;r?=5(wiFJCrqc+L^W!52tDG~@bi{U@{}obK@pP#JX-*nZ>V{wYX#OQ9 zYw7Zt_0vhC^AARHR7sZ{@=-XyeC;Tyl7dX5OOs-oZe7zmcpqH~auZ$ZhI&&K^b&e5 zT~eKPHyi5CY3n1WWlr7T(+&Cf6&y%;Gh-s1-KMGlJ-WnFW~W;`qpdVhB?>cRCDE80k7%SjOy{~z_6*C_KjNpfbMD69$WiO!#xo>n!P73q{pqG*R8#tJ*Ey= z+AS+H^`x_~{(#jVJ+Z$`Px{SKugA1+JvqJX8E5s7-x_hoymg6s$nxvS=(+thYCEyf zRwOC+Y}~BM@|7#gD-5K)P`Ly@Q#G+w020ik$X$PiWCe+*&S-P|=K6L&ZgPVqb>Xc#Y0a+Fi`ahwM ZhT=csqDKwCF(dljL2daXJIdC({sMU+wz2>K diff --git a/client/securedrop_client/locale/es/LC_MESSAGES/messages.po b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po index 09b0bc87d..abc28fd01 100644 --- a/client/securedrop_client/locale/es/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-03-25 10:38+0000\n" -"Last-Translator: Zuhualime Akoochimoya \n" +"PO-Revision-Date: 2023-11-22 19:12+0000\n" +"Last-Translator: Cory Francis Myers \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 5.1.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} ya se está ejecutando" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "El servidor SecureDrop no puede ser alcanzado. Intentando reconectar..." @@ -50,9 +55,6 @@ msgstr "Tu sesión expiró. Por favor iníciala de nuevo." msgid "Failed to update star." msgstr "Fallo al actualizar estrella." -msgid "Retrieving new messages" -msgstr "Descargando mensajes nuevos" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "El archivo no existe en el directorio de datos. Por favor, intenta volver a descargarlo." @@ -65,20 +67,44 @@ msgstr "Fallo al borrar conversación en el servidor" msgid "Failed to delete source at server" msgstr "Fallo al borrar fuente en el servidor" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Todos los archivos" +msgid "No messages." +msgstr "No hay mensajes." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" +msgstr "" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Borrando cuenta de la fuente..." +msgstr "Eliminar Cuenta de Fuente" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Borrando archivos y mensajes..." +msgstr "Borrar todos los archivos y mensajes" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -122,11 +148,11 @@ msgstr "Ver o descargar archivos" msgid "Send a response" msgstr "Enviar una respuesta" -msgid "Deleting files and messages..." -msgstr "Borrando archivos y mensajes..." +msgid "Deleting files and messages…" +msgstr "" -msgid "Deleting source account..." -msgstr "Borrando cuenta de la fuente..." +msgid "Deleting source account…" +msgstr "" msgid "— All files and messages deleted for this source —" msgstr "— Todos los archivos y mensajes borrados para esta fuente —" @@ -177,6 +203,12 @@ msgstr "Crear cuenta" msgid " to compose or send a reply" msgstr " para componer o enviar una respuesta" +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Nombre de Usuario" @@ -219,10 +251,8 @@ msgstr "Por favor ingresa un nombre de usuario, frase de contraseña y código d msgid "USE OFFLINE" msgstr "USAR FUERA DE LÍNEA" -#, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Frase de contraseña" +msgstr "Mostrar frase de contraseña" msgid "CANCEL" msgstr "CANCELAR" @@ -233,8 +263,8 @@ msgstr "CONTINUAR" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SÍ, BORRAR ARCHIVOS Y MENSAJES" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Preservar la cuenta retendrá sus metadatos, y la habilidad de {source} de iniciar sesión en tu SecureDrop de nuevo." @@ -254,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "un mensaje" msgstr[1] "{message_count} mensajes" +msgid "SUBMIT" +msgstr "ENVIAR" + msgid "Preparing to export:
{}" msgstr "Preparando para exportar:
{}" @@ -290,15 +323,9 @@ msgstr "La frase de contraseña ingresada no funcionó. Por favor inténtalo de msgid "See your administrator for help." msgstr "Vé a tu administrador por ayuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "El botón CONTINUAR será deshabilitado hasta que la MV de Exportación esté lista" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Recuerda ser cuidadoso cuando trabajes con archivos fuera de tu estación de trabajo." -msgid "SUBMIT" -msgstr "ENVIAR" - msgid "DONE" msgstr "HECHO" @@ -338,6 +365,21 @@ msgstr "Tu organización no será capaz de enviarle respuestas." msgid "All files and messages from that source will also be destroyed." msgstr "Todos los archivos y mensajes de esa fuente también serán destruidos." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Borrando archivos y mensajes..." + +#~ msgid "Deleting source account..." +#~ msgstr "Borrando cuenta de la fuente..." + +#~ msgid "Download All Files" +#~ msgstr "Descargar todos los archivos" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "El botón CONTINUAR será deshabilitado hasta que la MV de Exportación esté lista" + #~ msgid "Entire source account" #~ msgstr "Cuenta de la fuente completa" diff --git a/securedrop_client/locale/fi/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/fi/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/fi/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/fi/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/fi/LC_MESSAGES/messages.po b/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/fi/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/fi/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/fr/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/fr/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/fr/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/fr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/fr/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/fr/LC_MESSAGES/messages.po diff --git a/client/securedrop_client/locale/hr/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.mo index c7dc0e7e44d8e5ef0caed87c7e750a68f6d51ccd..a4853983ab60a09d974ca750fdfc4328d27ea04e 100644 GIT binary patch delta 3616 zcmZwIZEO_B8Nl&58?Z69!5Fa3OBox8jR6~IXDDP1B$#&_v4Xhg7Z7C{h2< z-X1b2BR}_>-P_%ndFI*k%ZFzZGgp?*dqmMJVl^>RtdyL1aseOG7W#iGgcTev!mnT* zuEI84f&*BECjKv^)CqinV|S5K+l!RiQLa=w$77XBt;3&TjZ!n}&vaz0Ygmf!V>SLe zuyiq#;&?UA!|$M6cNW*+1GpT2fikf_;!1oQ8B=|ZwOGb1Wt?>=6KKYLjIW|}F`Xo3uVT=C^Nnb=c9`czk zWOxi`I_P|xj_l2I7{||12Dp>Fmf#OiQvNW?L>@(1=@Td^eH!^wzvF{j)!$I#yV!uG zq(dgKDR39cbN8(v|NH60IUxgHz+U_ZhOv?U>_fTlAv}Ut zPzKyxN5Nt*$^s4{k5&e5#gld9|1_PSb3*oT0~;f?(2Y$vif#A+O6p%ko~=GXss3_4 z)?*W{#r?PeCy}C89)2Bvgdc{e0hBF%mdcgddU1x%W;(B;RAn)v%K(kYoKy#{n2oz-Lf?NB)aaE6cc8wqh;H1X@vQrvurN85N_$ z8=(%N?8!K8!ADW5^d)3Y>P_5>MJ!kLFoKe?yHQeqACg4%7)mCdM@jYTsPP?~k0tDD z30B~GdH^_&&;mKf@RnQ&8J6 zj<@4k?8aBH3zw7LZ{iTne3j1Qbof)R@gc9({FeL$x8VVf&!VjSO_YH@3j6{!$Ca)5 zEow!F;{lZOmr=IlU$_m6*EysP`0F=tGQPl!6H15U&9A6 zgwmu~B|Cj`K>G$UMo95WTTDoO$lJ7!h!OjVNO6gz^xKt1{Y`DD-TAgCXe zAWDdGLYn+mNMk2dKOtF?b`K%7Bl|3km&dOKDLlzI3G}yA##e*H5FxLPG^vF+A*sHb zs34>;3#}~ZSSb4|O5!LsQzc zM@)BPTGPqwRC7+8aGi{~^YO!_MKf_{($u3?(oE|URx+t=C!>c=ZJtayZpIwh-8!~? z&zx&UU1w5f#w;G{WZi_R$BZe{zv+}IH=4E{aZcDt#~3k3HfzHk`O?R>>>hS?>z>`i z?ZSW)jK`BroyfW_6HcC*^Q8O?H|s>wN=)d6PRGtzcGhfZ$Q>waEAqm1)wzr1#i5Q^ zG@`m<2cx~QaF^;blV--$VODj!zd)JIelwjmj+^PixAFWk!ij{FwKLuyDpnW2ecuz_ zTNSlSP;~{1k*9c{Rs3?LpBFh&k$iW+HSBc4wNl>iE4Nkk^hV-39PQHkBk_2+I}-Ok zs(iL$r{2&cIkt^SbEEgn;#8TQ4Cc|2Tesxn&?0^PF_~QX(z4L{ZG|gTznO6@bIP)h z>(jwq$Nb5j@#?A@D`JEFoe>@G?2HXY2fRJi-!C6?PUt=(olcFpM(%~`u~06#{L|3F zgHAR%qE9(l@9#AkZ?q=qMQe>(gY4wDU$T=aEGCn?RC}=~)aDJXN^PH0Ipd~IIq9U~ zv?h%kN{TORBW0!Y-{f9erHf{w=7gz7j10v_$2KpYGxe~Qv9vWkWlo#6=~vf{S6S2A znR1THC5~(8acA~|wyktlr(82TE&FMG*^{mpl+@FZ;orV(n)R4=He)-5yREUpd<;F2 zv?gqe2R1~FbjFynsHSUc9xC#_tM6S9jt_(n^mq&Ee>~IeWSEialku%d!yY$P&-Acs z&0er{n&Q8{K#SD4*$Gp{f^S{p^7*VCEJf{g$qsiHZeWu68w@R#cKz%8UHK)DfyMHr zKlr3Sp7(M6Q!9HUf&L+L@w+M48aK(m_p65Hs;=-rY#_2PqI+~-tbcG{#CxORYL#(A z8S(~rKiyL2U0s(bkD8N4Fqf8GWc_=ga#`HgN`#fCY{*W>1hEp^~8cJ3G6;w?4h zH=pprjWsL!!Wj@j7Vf>H$2;11uF{z>W}mlo(wVmGiEQp_<2@m- zrG9Jf>5VUkDrTQEld?xiDH`w7O_4QeeN%#_4ShQQV|1q7yLXf8^>02}bMwXo*~vY% Hc~$8DJjtAP delta 2621 zcmYk-d2Ccg9Ki9}?LiAI^rWRw7_OFD=>Zj}9KF~=rI%33QJ~p&U)o2v`^p}zKy)!; zng}L_Cy8RB@`q?7h_GnIL=#Q>hZrHmMiWDbD4G}{@}Hmt{Qh=VWzu<{dFRahely#N z-b-EK>sg7%6{VXxhnkb1R2b8eIZ#qkluE@^Ovh}Ti}P_d*5Y3drFP*mr&8Od#-4vE zO{p60zlsZS67%pb%BM5<7_Wp?9*t}+=(ttr;d~>?gJ&=iFCZ_dizoy55)1GK=Hq>o z=X0mWI-G->IIl%{{wU_+Y2;D$1!l@ruf#9hz+!Ivf%7qMhEglAOl;3Nw^jXj%vWiuoYKHsQ1(8#`Cxyvod)Ix8Xi~1No*(r&ozY zAxcLJuohRKgn9(G;227%r}5AfT!<36Qj`Hyp+u?%!xEB48acQNHSWU&cnqcEk5E1| zfi3tAuEN>8)QlZihbOTfe~zCQ@o^bgKT4$D!<9IRwU{=O_{#@ci0^JZfzsh!oQ5e( zLq?v1l7d34z$%m!87R3O#U*$O58@S+0d6Ax66(V!i}frn!mn{2-pLOuwU|c6ETx>d z0#{%)-gYQ8ge+LKhqqX8g%7g}yKNaGzTK4}58r!(=9ZCmfzXqbr_$-599uhgkBXfns7Od9vV(OhE;eR9VmI0$jB@u zH8T50i{x2$%PwkS{D%CmV4~58?ZzF{r>HW3wNxq0GrFCdB>!tT*-qUuaztD(t)xq zWXnhjnyHVLX`GbBFG%F%$483fSBmU}e~XKTZ0!W9tPd%&Fn3bBsFLbV$-itP$%o{! zn@aSf|6o|i(R4^|WnorOTd0z%G-^6k%9a?>9P$&=ILlTkcG4G`&VZ)p@;kWkyaUJUzjYnSauQ5m zAD6Qe%F4>@8#D5wre>VW_61G9p#xUP-)m@hZ?6^d*^?QSc7Eo?^niBzJbKUw1l)aw zeLZt1(v@|~5!s%T=t%GxBle-(;-szhElnNv)!c0Ra;`7ZJk#S?+tAk9(bT%trF%lb zpykserq`=`4DB%k?jEn<(IGnZ>R`X2UC#_z{-Ew`(PlvV4Yy~1<$Fo!=}A%(d+GPJ$`fI zq^UMoL2KAj?S3P4z#Me@_8O{Q?ihpG;|^LuW5Cd+rt8pvK|uby>35I69P(-Nz_8_a zOQej&XB`dp)$$y>yr{(9TlCY^|6jDbil2-8TKt>C{;}j<=6b7t*gZZfeQBRHZ1&p~ zrSp;*fyceqHcCe$_e=LU>NbQ1dvt4T#Cm+x&^>0*)RxZ}wE9Av`*dKKKv@I2i7^}? zFiYLqXY$R!kl$b?ksV9_cG%4ST3Kfv8yV&Bd040 G9RC3HuW\n" +"PO-Revision-Date: 2023-10-14 20:30+0000\n" +"Last-Translator: \"Igor K.\" \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "Aplikacija {application_name} je već pokrenuta" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Preuzimanje jedne poruke" +msgstr[1] "Preuzimanje {message_count} poruka" +msgstr[2] "Preuzimanje {message_count} poruka" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Nije moguće doći do SecureDrop poslužitelja. Pokušavam se spojiti..." @@ -50,9 +56,6 @@ msgstr "Vaša sesija je istekla. Prijavite se opet." msgid "Failed to update star." msgstr "Nije uspjelo ažuriranje zvijezdice." -msgid "Retrieving new messages" -msgstr "Dohvaćanje novih poruka" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Datoteka ne postoji u direktoriju. Pokušajte ponovno preuzimanje." @@ -65,20 +68,44 @@ msgstr "Nije uspjelo brisanje razgovora na poslužitelju" msgid "Failed to delete source at server" msgstr "Nije uspjelo brisanje izvora na poslužitelju" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Sve datoteke" +msgid "No messages." +msgstr "Nema poruka." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s je napisao/la:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s je poslao/la:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Datoteka: %(filename)s" + +msgid "Download All" +msgstr "Preuzmi sve" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Brišem račun izvora..." +msgstr "Obriši račun izvora" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Brišem datoteke i poruke..." +msgstr "Izbriši sve datoteke i poruke" + +msgid "Print Transcript" +msgstr "Ispiši prijepis" + +msgid "Export Transcript" +msgstr "Izvezi prijepis" + +msgid "Export All" +msgstr "Izvezi sve" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Neke datoteke neće biti izvezene

Neke datoteke iz ovog izvora još nisu preuzete i neće biti izvezene.

Za izvoz trenutno preuzetih datoteka kliknite \"Nastavi.\"" + +msgid "all files and transcript" +msgstr "sve datoteke i prijepis" msgid "SecureDrop Client {}" msgstr "SecureDrop klijent{}" @@ -122,11 +149,11 @@ msgstr "Pogledali ili dohvatili datoteke" msgid "Send a response" msgstr "Poslali odgovor" -msgid "Deleting files and messages..." -msgstr "Brišem datoteke i poruke..." +msgid "Deleting files and messages…" +msgstr "Brisanje datoteka i poruka …" -msgid "Deleting source account..." -msgstr "Brišem račun izvora..." +msgid "Deleting source account…" +msgstr "Brisanje računa izvora …" msgid "— All files and messages deleted for this source —" msgstr "— Sve datoteke i poruke obrisane za ovaj izvor —" @@ -177,6 +204,12 @@ msgstr "Prijava" msgid " to compose or send a reply" msgstr " kako bi napisao ili poslao odgovor" +msgid "FILES AND MESSAGES" +msgstr "DATOTEKE I PORUKE" + +msgid "SOURCE ACCOUNT" +msgstr "RAČUN IZVORA" + msgid "Username" msgstr "Korisničko ime" @@ -219,22 +252,20 @@ msgstr "Molimo unesite korisničko ime, lozinku i dvofaktorski kod." msgid "USE OFFLINE" msgstr "Koristi offline" -#, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Lozinka" +msgstr "Pokaži lozinku" msgid "CANCEL" msgstr "Otkaži" msgid "CONTINUE" -msgstr "Nastavi" +msgstr "NASTAVI" msgid "YES, DELETE FILES AND MESSAGES" msgstr "Da, obriši datoteke i poruke" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Želite li izbrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} s računa izvora za {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Očuvanje računa će zadržati njegove metapodatke i mogućnost da se {source} ponovno prijavi na Vaš SecureDrop." @@ -257,6 +288,9 @@ msgstr[0] "jedna poruka" msgstr[1] "{message_count} poruke" msgstr[2] "{message_count} poruka" +msgid "SUBMIT" +msgstr "POŠALJI" + msgid "Preparing to export:
{}" msgstr "Priprema za izvoz:
{}" @@ -293,15 +327,9 @@ msgstr "Dana lozinka ne radi. Molimo pokušajte opet." msgid "See your administrator for help." msgstr "Obratite se administratoru za pomoć." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Gumb Nastavi će biti onemogućen sve dok Izvoz VM-a nije spreman" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Zapamtite - budite oprezni kad radite s datotekama izvan svoje radne stanice." -msgid "SUBMIT" -msgstr "Predaj" - msgid "DONE" msgstr "Gotovo" @@ -341,6 +369,21 @@ msgstr "Vaša organizacija mu neće moći slati odgovore." msgid "All files and messages from that source will also be destroyed." msgstr "Sve datoteke i poruke tog izvora će također biti uništene." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Brišem datoteke i poruke..." + +#~ msgid "Deleting source account..." +#~ msgstr "Brišem račun izvora..." + +#~ msgid "Download All Files" +#~ msgstr "Preuzmi sve datoteke" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Gumb Nastavi će biti onemogućen sve dok Izvoz VM-a nije spreman" + #~ msgid "Entire source account" #~ msgstr "Cijeli račun izvora" diff --git a/client/securedrop_client/locale/is/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/is/LC_MESSAGES/messages.mo index 8873e11c45dc36201a86a48c6d26d65721f13118..e18e44b3edba10de43786f53a58bb22f6b140e65 100644 GIT binary patch delta 3469 zcmZvce{38_702i7q_rK#c5KqvP0~)zcI+gMorE?R$BpA37svIl#^=Nh4vp9Lp1t+n zUAnjD#7e8fYN0ALO3I1~^`|V5MXLgq4pg;)Amxex0TM*05(wI=6pBP8{%8p#ZB;&R z@0>a+PxtmSGq*GI=DqLi56AvGm3pIm)wdL8;hXTue5GXIrJHz&75YCFfNSZlfw#db zxDhtPGB^y^K@(mJD0K>6qVKFxYEPb0cNQzvMt{0QscQH=xIw9u`V9@)>m67C{|PJL z2RRm$5)}PSa21?~^4{0rW_S*+hu?=1SO(q---hg|K8BUBh$v;BYA6A0hrR5t2588{ zr(h9$1C*YUi8&EcEtwOM{56S`Vg)FTMxC@@HBL8P-yug6eu$IDz7P?_QjKF4i4od2O z30Ygc4@LdOJZfM)ydCz#S{Q|hUU_gYd=g#=paCc+e+=b{ww_4QkO|L2S>WdoeW<@d zN$G#!5G$=Est@UpX{A1)f1GF~bH~|z4}1}_w)zW{6JLd*rPVAhnJ9-+^B{Z#?uAmi z)P-E*5)3l%E6ASeJt&zd+M2E9HYf|<4dwr%P_*De$y^E!!v)Axbp^`Co46wAQ#C-U zrrMxrWCRjmO4&3dvN^a7o`q7ImviI)fSUeCa1d^$F7kd9iU#JPe7IhL64>jIYN`*Q zsK10oW&Cz{6TAx+!Y)|n-+vli49r3sUVtH3Pr=(^41N_ZK~eo)6euMML0NDFN@nhZ zJ@9@g^M3@#;58`Mahx3`MQ~h25}pXEsA4P*Oh+ zCB=`!Lih|!z(pvcyR|WUD-Od^`p-dG=Nb&djwbR?aOz1KlJZON9{4^y2D=!Xh0j3= zWc}{!h7E8H{Z=TcJ_PTC<4^+lHYACv7-ed>7fJ?3AXQOMLtas@?IHiNz!e6hMrEJR zeo`BuFES`%a-m$Or=X_=4Eot13qe@da`RJdUr$3-DzV@rhZulu4`_rz)yNIyn=~^x&)UNN!Bfip$NyQfgne z;Xl!t|NTY|zG6k3240SfnfP6JC*FsP7UZMVhKp6;HGb>HhlrI+9V3Pyvq^$9aJX*$~ynugn=Rt%hS;;z~9oza54R5%_rb;PpGgg#~2wvNSJJ#K3A z^vSs6nv<cqih-quQOeSTvq=CQLnT%$okBIa4N@F+CYS6|>{Uq&eB3jo9S> zUAD1x+|f<@TgTf3!|~jHtZeFuq~j2V!vvjyfN6kdSm@*TM>0M?2 z3anYNT)L{fC{VL|`3*H>x{hVeN`z-}vrhOCKICn!s9QUDWT-Qw+dDf4j|>c_dn-N) zq#s*$TTyRO zf^~xe5;Kk!F)~Y5OZvMTkL9J3QNz&;W)>VhYdV=FLz^=*mX6p-*X6IwtFAAFkPMoR z9?!gLWtKE6=tO35=6*vbRxS}?A)UEMa*|O!ZCX*wo-~}O5sO(mKDE3<=3-`%r7va{ zQlHuFxu_&RUwg-3=Dc^c`tKz->d5 zNbR$MfaT@ar3ww5TQ~h+T}@#7?oVG!M%A!6Bj<@`(ysLxK`qudRJ3Q#cef989~shz zLOuOGeO>KC>EG8skmp_A(wu&C$1{PztaoPTy!Va9{;fttk~U=!%=KzXu@Y7+q0eM* g`a^Brhda-Efu_+aj{m7zD5oE$5wjd`wCNB314eLq2LJ#7 delta 2509 zcmYk-du$X{6u{v--BP;H+6VMO5jq7*AC#6Bl!rpQeL;bOZ7D6bP`2z!w=CPTkCsPp z#ZaOMfjEH}G%6?v(I`5JM3hQck;E8{H73TW2`EGjYWS~KBmU0pVz}8e-<|Hx%)RHH zJN;?vJDbBlrpF&sv@YU7VzN!CFeW8%pd}_MWk)+E<0PDpc{mlTa7}=^{O~MJ!*?+QzeE|pP0Ydg z2b4<3T+GG_ln1Rs89+0x!U2@)t{|7H>zF1}{WJClEk&sUzDU75T!?(7Hee?9U>$~W z4qinWz#U{JDk)VdK1$~x11ZOGxDrW!+$OK=`Gp)AqUC~NvU7GebV;BAxv_OK3;@{=gV`Z>MN*H|#9HG1CTWxbbrSJ})Jq~E4r9Px4C=IJ7z}n|xEg^*|ttN`KbL{k6W9KVk=3y1FM%KTQ z&PGC-Y?Wj}DqG(DvcC7X37n91tC3}EE6R!Nb!oX#tfOQygRl`&7t&-IA19<-|Ju#(MGHyq+qE_>pvw} z|DeRQ1so_$t1aa?&iE^_!yL5V)y&07r){><(o*AkN_Hly+P*=bx6kR)9bT_q@A0|= zhCTIy@k45%k)8H|@pD?Q*^z!*GutP}Yc`*I(0D4NU|ef;W5YV*tBgtJ7a2FSr8R5U ztZP`)TBmo1g26tYKIq|I-EQ6G2{^mGZkHbN1wCFp*yGmgcJ}xAgZlbL-4oFLZl`OP z`DWI?nvtKgJwYGr3wd3}dsBkO(VQ)2($t-CTDdVaZL^s?y*GeAOdSIJBa?)?K&c0?;7A!Fi7u+-s6h3R}MK5Z`N5x@t z<(%nSf-iEZH?-Y&zNEw)Dd~@Mt#GWab?A|O_05h(y~pS5?+^JsKA%3|_D9Z#{CdP3 z@c6e$XP8IGd?FWvPk2K?pU1Z~FgFmn diff --git a/client/securedrop_client/locale/is/LC_MESSAGES/messages.po b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po index 269dbfe6d..ef21c86e3 100644 --- a/client/securedrop_client/locale/is/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-09 04:11+0000\n" -"Last-Translator: Sveinn í Felli \n" +"PO-Revision-Date: 2023-10-26 02:30+0000\n" +"Last-Translator: Oktavia \n" "Language-Team: Icelandic \n" "Language: is\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} er þegar í gangi" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Tek á móti 1 skilaboðum" +msgstr[1] "Tek á móti {message_count} skilaboðum" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Tókst ekki að ná sambandi við SecureDrop-þjóninn. Reyni aftur að tengjast..." @@ -50,9 +55,6 @@ msgstr "Setan þin er útrunnin. Skráðu þig aftur inn." msgid "Failed to update star." msgstr "Mistókst að uppfæra stjörnu." -msgid "Retrieving new messages" -msgstr "Tek á móti nýjum skilaboðum" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Skráin er ekki til staðar í gagnamöppunni. Prófaðu að sækja hana aftur." @@ -65,15 +67,45 @@ msgstr "Mistókst að eyða samtali á netþjóni" msgid "Failed to delete source at server" msgstr "Mistókst að eyða heimildarmanni á netþjóni" -msgid "Download All Files" -msgstr "Sækja allar skrár" +msgid "No messages." +msgstr "Engin skilaboð." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s skrifaði:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s sendi:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Skrá: %(filename)s" + +msgid "Download All" +msgstr "Sækja allt" msgid "Delete Source Account" -msgstr "Eyði aðgangi heimildarmanns" +msgstr "Eyða aðgangi heimildarmanns" msgid "Delete All Files and Messages" msgstr "Eyða öllum skrám og skilaboðum" +msgid "Print Transcript" +msgstr "Prenta umritun" + +msgid "Export Transcript" +msgstr "Flytja umritun út" + +msgid "Export All" +msgstr "Flytja allt út" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Sumar skrár verða ekki fluttar út

Ekki er búið að sækja sumar skrár frá þessum heimildarmanni og verða þær þá ekki fluttar út.

Til að flytja út þær skrár sem búið er að sækja skaltu smella á \"Halda áfram.\"" + +msgid "all files and transcript" +msgstr "allar skrár og umritanir" + msgid "SecureDrop Client {}" msgstr "SecureDrop biðlari {}" @@ -116,11 +148,11 @@ msgstr "Skoða eða sækja skrár" msgid "Send a response" msgstr "Senda svar" -msgid "Deleting files and messages..." -msgstr "Eyði skrám og skilaboðum..." +msgid "Deleting files and messages…" +msgstr "Eyði skrám og skilaboðum…" -msgid "Deleting source account..." -msgstr "Eyði aðgangi heimildarmanns..." +msgid "Deleting source account…" +msgstr "Eyði aðgangi heimildarmanns…" msgid "— All files and messages deleted for this source —" msgstr "— Öllum skrám og skilaboðum eytt fyrir þennan heimildarmann —" @@ -171,6 +203,12 @@ msgstr "Skrá inn" msgid " to compose or send a reply" msgstr " til að semja eða senda svör" +msgid "FILES AND MESSAGES" +msgstr "SKRÁR OG SKILABOÐ" + +msgid "SOURCE ACCOUNT" +msgstr "AÐGANGUR HEIMILDAR" + msgid "Username" msgstr "Notandanafn" @@ -178,7 +216,7 @@ msgid "Passphrase" msgstr "Lykilorð" msgid "Two-Factor Code" -msgstr "Teggja-þátta kóði" +msgstr "Tveggja-þátta kóði" msgid "SecureDrop Client v{}" msgstr "SecureDrop biðlari útg.{}" @@ -225,11 +263,11 @@ msgstr "HALDA ÁFRAM" msgid "YES, DELETE FILES AND MESSAGES" msgstr "JÁ, EYÐA SKRÁM OG SKILABOÐUM" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} úr aðgangi heimildarmannsins {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} af aðgangi heimildamannsins {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Sé aðgangnum haldið, geymast lýsigögn hans og möguleikinn fyrir {source} til að skrá sig aftur inn á SecureDrop hjá þér." +msgstr "Sé aðganginum haldið, geymast lýsigögn hans og möguleikinn fyrir {source} til að skrá sig aftur inn á SecureDrop hjá þér." msgid "one file" msgid_plural "{file_count} files" @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "ein skilaboð" msgstr[1] "{message_count} skilaboð" +msgid "SUBMIT" +msgstr "SENDA INN" + msgid "Preparing to export:
{}" msgstr "Undirbý útflutning:
{}" @@ -282,15 +323,9 @@ msgstr "Uppgefið lykilorð virkaði ekki. Reyndu aftur." msgid "See your administrator for help." msgstr "Hafðu samband við kerfisstjórann þinn til að fá frekari aðstoð." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "HALDA ÁFRAM hnappurinn verður óvirkur þar til útflutnings-sýndarvélin (Export VM) er tilbúin" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Mundu eftir að fara varlega þegar þú ert að vinna með skrár utan vinnutölvunnar þinnar." -msgid "SUBMIT" -msgstr "SENDA INN" - msgid "DONE" msgstr "LOKIÐ" @@ -330,6 +365,27 @@ msgstr "Þið munið ekki geta sent þeim svör." msgid "All files and messages from that source will also be destroyed." msgstr "Öllum skilaboðum og skrám frá þessum heimildarmanni verður einnig eytt." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} úr aðgangi heimildarmannsins {source}?" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "

Sumar skrár verða ekki fluttar út

Ekki er búið að sækja sumar skrár frá þessum heimildarmanni og verða þær þá ekki fluttar út.

Til að flytja út þær skrár sem búið er að sækja skaltu smella á \"Halda áfram.\"" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Eyði skrám og skilaboðum..." + +#~ msgid "Deleting source account..." +#~ msgstr "Eyði aðgangi heimildarmanns..." + +#~ msgid "Download All Files" +#~ msgstr "Sækja allar skrár" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Prenta umritun samtals" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "HALDA ÁFRAM hnappurinn verður óvirkur þar til útflutnings-sýndarvélin (Export VM) er tilbúin" + #~ msgid "Entire source account" #~ msgstr "Öllum aðgangi heimildarmanns" diff --git a/client/securedrop_client/locale/it/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/it/LC_MESSAGES/messages.mo index fb32c62fb1d62d1ff1abf9bd7b3505d8213d5211..ee29e7b307ea5183493015db697f90623fef6d44 100644 GIT binary patch literal 7025 zcmaKwTZ|-C8OM)`g3Wrv3!eRV>=llNO|9rh~U310v6<3q{dhVy+uhdy^-v{}__40?5`Y`wk_!00T_yzC{@bln5 zz>kCbu2kw1;0@pja2EU$7=qV=Pl0q*&x2QiFM^*0e+Bly-{tK``FI2G$H7m74}-Ga zW8mk&?}Gcl=fTf{FM~4g8=$QBCRhOf3yM8gV!YUW9VqVy^Y^>JYj|G<4}uSY`@wI3 z9|fNS9q=Vk`u!Wc1>DEvV)r~K`>ugv&m*AN^C&2;`zFXg^=2s{aX z8T>jZ{`dtbJh=$o1ilS^5xjy)Zw7Ayp`5xOyaTL*&%RHoZ-KJT0fHv{nFXc)GAQ#5 zKw1BLIsP2{D(|m?2f%#+e0&n5 zi+T=}`1~3aKKvOJo?gXZ;oTf4emDw3J9|l-=ecFvVQz`D>`g9NOD@q$xo+cTN_)w? zavkRu-!!;oPn!E4Zn=uwVwYUvXW@eQ<1TKoUpP9tmU$pu>~#l!7xQPN$j0~>IKwUc z8C{ZlAK zL%n8n&%{X-Zkt|7l_R6K!&Jv956OlXYyNG?Kxy4_gXDxNZ@FIL1$|8KM%%;03j=-D zY^zGSQE_Uj(rk39ja5fg@@?ei%g$&^{hkiOge|$<4VEyvZMv+s7=^>!EhW9;8y5$3 zH%#}etQ_e=HAqYpn8a?ZgKN5B5SXrAUG|zp+uH5BUQkkF&o3I^Bu0xy{!mYp$-JYzcoJOT}dZptm>ZNMU(anZ# zJFSyWOF5@jnyrp<+=zHbd#pk@#A<@!oEwHwl1-OAb|N>3yOB3cMjzK*Hr5-x#c8+8 z_SRDjup`*Wg1+#$5+mBW+*s6gr`;|uJ8iXOM@m$(1;wFoGIleULKVx=OZ$y>zDEz? zrxI7|UI^_Z&gPsKC)x{asC#bW>Yf)7w=mis$5~<*nPM+@AV!z$EDQSPLlTC-9hk$h zZQ4cb+*bv?4kIjIGwW2%W!08hk4(I=paa9scD3P^MmSE95-*G=?l>eiMn9S|!L~{E ztCd!@(NQaI91k}lXsL2`l7a-#)hUh=3up9j+{dys*$Rv6u51gH-5(77J&84lj(I;})no}T`6{CG(JcH*J7?%rHJPZST)!qoV z^px+~UO#{hs-0zBoURSLI7UK{8PO!C%#}4+4!Fa%o zbzNcLo;CRa6H4;Hr@(CKU5>*N(q}14p9<-tR@><4(o(J3aMWs^bLynWP!cT45+<`f zR;Qizj9zqVPRFqVyi5B|bC?Yz!Q+gMLbjoa5RpNqA}k9hONx$i2wR3CWkaM3*X07> zhkX&Y{M2!G9KFdzsly<%N?i~w8)d9LUX*;xQ(0X$r=^qB2ixj`h0zqFn&E;wqzCeJq+#IHW=dyAs5o!I;t6hY=w`K_r+?jcoMeb zm<3%;T;Fp8eP|*ShYKwu2Uf8j_q|^6-n1VVJK=&ZtTc-)v`hvT7hTE}ecCCviuGo3 zv8?ZFF4U{HJk)GB1<~xHRY%`NG#B*JYOSUl<+`KqcIxG7?Vj@DVvFAWe&0)jzI^h=PMpxbq)7^I zo&2K%_QSDZY%sH-K<)srwGnnlK7)3P~g_{g6sZkUi-y3-N{IYISqaOaj zya3JjYMnRwdY**C<^U%}RQjwXiLXbB)Ayum&1c%(7tifAwTx)9Q+8{u3vFeoE7he| z8N#(!YkE}Ywx!N3XVu_jN!&vSyK-J=lWkK%>)`!}7|M>r$s6SsM6$Mx8Z$!!!X9~P z+=awDzqp&5CP~}7nZ6fQG4a^vP zxdBxeA5t2RHxR07_M^=^9I2lkvn--%In~m>i-}^-Fdx{d;S%ft0O4UBM z(b$pLN`utbQhwCRda2pyII7w>Sw(HK`g)=rw$#3~H7~WrP;|liA>$M(?jPjmA-?6; zhKUvsyFDbjj+*29iSHD@ZcWcq%YLS~=&hwyHtSex2aJPp9(f~Ci@iX^*Ucia8KSNu z>PhxW0d57A06dVoem6vNh1cl+dKy^klW>PT+Vp1Rl;+i@?X<%o&nCr1&n*=esoXW< zojbuthBwUl^AgJeLc)5oPik_bZADH&j`9m5NU6Q3vSWcTUjSmjI9VhPZAwv&XH!hk zanF%^nTE`|J{cKGbv|X#|2tAPBhKUrElRpUTJ!sdJRtFTlEX`C^!zv(X}T2bxg3iI z(9cXsNiL9tpfx#TYNLYvJO#UFcQp!DFx_(opBDH%>+zp6E=8Z1kj5Dut?J1CQ|*RxgJ*kb>G De#6Hy delta 448 zcmXBPy-Pw-7{~GByJ==>f%e87Dl8)`sm6$2rk1QBh@i{$7AFoGdaWVC#ijXBTetnBZUCC`X94R)HbgQ1V?>f!8yH&4USPbiCZ$o=cS1Dc2 No#^sdNk_*QegO\n" "Language-Team: Italian \n" "Language: it\n" @@ -15,12 +15,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} è già in esecuzione" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Recupero di 1 messaggio" +msgstr[1] "Recupero di {message_count} messaggi" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Impossibile raggiungere il sevrer SecureDrop. Nuovo tentativo di connessione in corso..." @@ -35,14 +40,14 @@ msgid "" "Those credentials didn't work. Please try again, and \n" "make sure to use a new two-factor code." msgstr "" -"Quelle credenziali non funzionano. Riprovare, e \n" +"Le credenziali non funzionano. Riprovare, e \n" "assicurarsi di usare un nuovo codice a due fattori." msgid "That didn't work. Please check everything and try again." -msgstr "" +msgstr "Qualcosa non ha funzionato. Verificare tutto e riprovare." msgid "You must sign in to perform this action." -msgstr "" +msgstr "Devi effettuare l'accesso per eseguire questa azione." msgid "Your session expired. Please log in again." msgstr "Sessione scaduta. Effettuare nuovamente l'accesso." @@ -50,30 +55,57 @@ msgstr "Sessione scaduta. Effettuare nuovamente l'accesso." msgid "Failed to update star." msgstr "" -msgid "Retrieving new messages" -msgstr "" - msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "" +msgstr "Il file non esiste nella cartella dati. Prova a scaricarlo nuovamente." msgid "The file download failed. Please try again." msgstr "Scaricamento del file non riuscito. Riprovare." msgid "Failed to delete conversation at server" -msgstr "" +msgstr "Eliminazione della conversazione sul server non riuscita" msgid "Failed to delete source at server" -msgstr "" +msgstr "Eliminazione della fonte sul server non riuscita" + +msgid "No messages." +msgstr "Nessun messaggio." -msgid "Download All Files" -msgstr "Scarica tutti i file" +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s ha scritto:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s ha inviato:" + +#, python-format +msgid "File: %(filename)s" +msgstr "File: %(filename)s" + +msgid "Download All" +msgstr "Scarica tutto" msgid "Delete Source Account" -msgstr "" +msgstr "Elimina l'account della fonte" msgid "Delete All Files and Messages" +msgstr "Elimina tutti i file e i messaggi" + +msgid "Print Transcript" +msgstr "Stampa trascrizione" + +msgid "Export Transcript" +msgstr "Esporta trascrizione" + +msgid "Export All" +msgstr "Esporta tutto" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" msgstr "" +msgid "all files and transcript" +msgstr "tutti i file e la trascrizione" + msgid "SecureDrop Client {}" msgstr "Client SecureDrop {}" @@ -90,134 +122,148 @@ msgid "{}" msgstr "{}" msgid "SIGN OUT" -msgstr "" +msgstr "ESCI" msgid "SIGN IN" -msgstr "" +msgstr "ACCEDI" msgid "Nothing to see just yet!" -msgstr "" +msgstr "Non c'è ancora nulla da vedere!" msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "" +msgstr "Gli invii della fonte verranno mostarti sulla sinistra, una volta scaricati e decifrati." msgid "This is where you will read messages, reply to sources, and work with files." msgstr "" msgid "Select a source from the list, to:" -msgstr "" +msgstr "Selezionare una fonte dall'elenco, per:" msgid "Read a conversation" -msgstr "" +msgstr "Leggere una conversazione" msgid "View or retrieve files" -msgstr "" +msgstr "Visualizzare o recuperare i file" msgid "Send a response" -msgstr "" +msgstr "Inviare una risposta" -msgid "Deleting files and messages..." -msgstr "" +msgid "Deleting files and messages…" +msgstr "Eliminazione in corso di file e messaggi…" -msgid "Deleting source account..." -msgstr "" +msgid "Deleting source account…" +msgstr "Eliminazione in corso dell'account della fonte…" msgid "— All files and messages deleted for this source —" -msgstr "" +msgstr "— Tutti i file e i messaggi eliminati per questa fonte —" msgid "Failed to send" -msgstr "" +msgstr "Invio non riuscito" msgid " DOWNLOAD" -msgstr "" +msgstr " SCARICA" msgid "EXPORT" -msgstr "" +msgstr "ESPORTA" msgid "PRINT" -msgstr "" +msgstr "STAMPA" msgid "ENCRYPTED FILE ON SERVER" -msgstr "" +msgstr "FILE CIFRATO SUL SERVER" msgid "DOWNLOAD" -msgstr "" +msgstr "SCARICA" msgid " DOWNLOADING " -msgstr "" +msgstr " SCARICAMENTO IN CORSO " msgid "Earlier files and messages deleted." -msgstr "" +msgstr "File e messaggi predecenti eliminati." msgid "" "Files and messages deleted\n" " for this source" msgstr "" +"File e messaggi eliminati\n" +" per questa fonte" msgid "Compose a reply to " -msgstr "" +msgstr "Rispondere a " msgid "Awaiting encryption key" -msgstr "" +msgstr "In attesa della chiave di cifratura" msgid " from server to enable replies" -msgstr "" +msgstr " dal server per abilitare le risposte" msgid "Sign in" -msgstr "" +msgstr "Accedi" msgid " to compose or send a reply" -msgstr "" +msgstr " per scrivere o inviare una risposta" + +msgid "FILES AND MESSAGES" +msgstr "FILE E MESSAGGI" + +msgid "SOURCE ACCOUNT" +msgstr "ACCOUNT DELLA FONTE" msgid "Username" -msgstr "" +msgstr "Nome utente" msgid "Passphrase" -msgstr "" +msgstr "Passphrase" msgid "Two-Factor Code" -msgstr "" +msgstr "Codice a due fattori" msgid "SecureDrop Client v{}" -msgstr "" +msgstr "Client SecureDrop v{}" msgid "" "That username won't work.\n" "It should be at least 3 characters long." msgstr "" +"Il nome utente non è valido.\n" +"Deve avere una lunghezza di almeno 3 caratteri." msgid "" "That passphrase won't work.\n" "It should be between 14 and 128 characters long." msgstr "" +"La passphrase non è valida.\n" +"Deve avere una lunghezza compresa tra 14 e 128 caratteri." msgid "" "That two-factor code won't work.\n" "It should only contain numerals." msgstr "" +"Il codice a due fattori non è valido.\n" +"Deve contenere solo numeri." msgid "SIGNING IN" -msgstr "" +msgstr "ACCESSO IN CORSO" msgid "Please enter a username, passphrase and two-factor code." -msgstr "" +msgstr "Inserire un nome utente, una passphrase e un codice a due fattori." msgid "USE OFFLINE" -msgstr "" +msgstr "USA OFFLINE" msgid "Show Passphrase" -msgstr "" +msgstr "Mostra passphrase" msgid "CANCEL" -msgstr "" +msgstr "ANNULLA" msgid "CONTINUE" -msgstr "" +msgstr "CONTINUA" msgid "YES, DELETE FILES AND MESSAGES" -msgstr "" +msgstr "SI, ELIMINA FILE E MESSAGGI" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." @@ -225,18 +271,21 @@ msgstr "" msgid "one file" msgid_plural "{file_count} files" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "un file" +msgstr[1] "{file_count} file" msgid "one reply" msgid_plural "{reply_count} replies" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "una risposta" +msgstr[1] "{reply_count} risposte" msgid "one message" msgid_plural "{message_count} messages" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "un messaggio" +msgstr[1] "{message_count} messaggi" + +msgid "SUBMIT" +msgstr "INVIA" msgid "Preparing to export:
{}" msgstr "" @@ -251,16 +300,16 @@ msgid "Enter passphrase for USB drive" msgstr "" msgid "Export successful" -msgstr "" +msgstr "Esportazione avvenuta con successo" msgid "Export failed" -msgstr "" +msgstr "Esportazione non riuscita" msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." msgstr "" msgid "Exporting: {}" -msgstr "" +msgstr "Esportazione: {}" msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." msgstr "" @@ -274,15 +323,9 @@ msgstr "" msgid "See your administrator for help." msgstr "" -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "" -msgid "SUBMIT" -msgstr "" - msgid "DONE" msgstr "" @@ -308,7 +351,7 @@ msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "" msgid "Are you sure this is what you want?" -msgstr "" +msgstr "Procedere veramente con questa scelta?" msgid "When the entire account for a source is deleted:" msgstr "" @@ -320,4 +363,13 @@ msgid "Your organization will not be able to send them replies." msgstr "" msgid "All files and messages from that source will also be destroyed." -msgstr "" +msgstr "Anche tutti i file e i messaggi inviati da quella fonte verranno distrutti." + +#~ msgid "Deleting files and messages..." +#~ msgstr "Eliminare file e messaggi..." + +#~ msgid "Deleting source account..." +#~ msgstr "Eliminare gli account delle fonti..." + +#~ msgid "Download All Files" +#~ msgstr "Scarica tutti i file" diff --git a/securedrop_client/locale/pl/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/pl/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/pl/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/pl/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/pl/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/pl/LC_MESSAGES/messages.po diff --git a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo index 79af2e7ab2fb486c04909bbbb4d123a16d2b52d7..4e15aeedce740948e76cd2199f82f08147708687 100644 GIT binary patch delta 3305 zcmZwIe{9ru9mny{9fftJEv03XLN`9NFn+bgvN^EpfTKNVx6(qdFtFhK_U_wqa(CbI zy}JS%T9$1Ix>v=BY>jQJEETEGvE)78e@h!0^MK8CmA zIb4oE#s+)^7vmfF&yX?yz~{OCON}v`!p8hyp)uRI{sV)w;o5p*K48p@8RSHBC6IT_ zQEb9o;2G57zKm5ET2y{+0p7y(BGiI9uoee#DIP?P>!T(-iTC2;sOR6r8s<0EEMF^c zLhW#MaD97l9mPiO$8Zf!;7a@qvL^FgycsWI6n}|&zJ)C!|gq_4~=)Pm2T zN^urHh)&M{2WrRL`Gl0QezX`vy_ZAv#FtQ+`xXu`(DO5#{DK>`%<=#?UPm?2SZlevpFqYo z7g0O>73y=m7To_6k`z--i=RS^>Y>L`CA)yy$Tx8vzJ$uyJIK^#W}T-+K8>`)jH$Y< zT!Lk&8bwhnOQ0rr2sPn()BxW>E%-&$PF}%H_&TcDn)pW3=->dp6xdARbw7^U$jjKM z@BbPnRowV{@Qdph<+_e^$QbU!bJ&A#p)%4=rtImx(4EILdR}mYw1k+=b${LLp8sVP&a>!h!Z;Mi7H|n(MsrlzMX`cP7T^d z=olsFxzbnDr5nL9fA$1x3EHLfhis9mu!9SIzY7bY>ao_cmXln!nRDZ~ z@8#U?3uD#cnV6S$?L;!=X6^B0DrGZX&W^j*Ju&6^IXBU>@yMpFbDo*-y|m38NiwLH z_v5ZT;!L}xmrlBR(aqR|cRZ8woP?Wbw@xPUzQcC*jQe)u)}HZgV$=)fV`SIH^S;l5 zQzz$)R9<1bji-|Fqqeoz%jA-oyxZAY++VXLT!=I`6`!u17g|3&6g7Rr_YDmWNBT^k zn{somjj*eor44E|yWMQonRK&-OLZ*`zd!wT(-$mP&lRrMeQ#N5=ejb{^69AWWU_HT zIaRn=-?eyPFdDOwp+37i8jD4CMPr3O*FRg=ZC9^V7Bf!TU03+wqNy624rb~swl%yJ zT4*c711ZoJ{Y`pf85Jwa-S$RH!ThqQ#Vb73qwntr4Cyu z*GgN-&8{m~{PxmQ;dys-b`?67A6he~&~9cr>E+*5dzY=a({8@IcxL%2r- zOE1}EHtV(j-|&0hGO~By!2aQwjnX?q>Ybt3 z=i9C}ysLLuMB#ItOA7yKOE;3$g6u|L2(}FE+X-f+&P~diDZ=viewA0ekTG}Ell)b*rJj%dyUYU8rV#P@e zaUnz!MiV26iVF&gfTJieAxbfRa3MjA1`SH!gBlYJevlZF`af@m0Dkpm?)%-h-+Rt^ z^OA9XWAw_X)aMngn_fiEPf;q0nZw!8($bVl$8^lXJe-KdI38>9AD2=au-dIu*NDXR z`!bcP;rw%0ikGkeZ=yUphlg=XR24AD&7k%tEpwDqk%<=;VGH}UDA(`D(fBrUsrnRiWvLgE2d?5|PW*wzSdgt0L$wIUU=ucAH;%$L za5{d3GLh>j3mL*3%wr=HE5l*97zvK5$7$Gx3nkRM8Fb@&xD-d_auIgnc07bUQ)Tg1 ziNpky7nNWw&PNILPVB%BQ9_-;MfYJTO5~=aOkgfbq-roKA!%fgj~h_qb}YezC@=m1 zO%VXVVz$^8l*E)&~=5~;Uv0basd%p61f# zfoUv5W}c6df(bYa=c1&@M9J+_I0cX30A4_uU<>h=Q13-4))QEUU*IJCvoNYuIfITG%F3&_TSB)0HP)fr=f!4jdiA}$a$0n z{e<#W{Ssv$CvG56H45d^b*SPi4}>@Z9k^6|1wI5Uq@Nt z>7=)C75jCQ6DxfIv)DhG^eoCmzQp19ElT~V9~n@P>M!IODt$^KWV4VjNp+$;s24Y2 z1n1#Jl!&Ae?-n$0Jsw9{NIKzp06TC29>9A193R9C!rjIDRTG1Ld<7*(xib=>nu?Nw zc}T&kMy$kcBwOlP)OZT{sf%oO;1J3Scg##o;9b=0|Aw-_3?4$zRW(LgwCZBu#wdF5 z33Q=^S#sS-ucNoq?`~3n^0i1*BsJ2~=>)*}YUGn%OMi%dKYcM>8Ub)VXQC8!LLp(? zBxh(V=xNRQoS;1$)U7G37mh*!J^lG@dh zf4(56P~?xIn@*aX!joLhrO&4GF*yHxtthF=q-W8kbtG`MEAJXV%(#o*LYI1=yqr%@ zaxZmOL(i2;re2)3gzd1{?zHvszte_X@iQ57+`}9F0W+*(ZQ}~!Ls==VVGYY0IvWmV z=f|qE$4soOtW-UHzmT8nUR>Ya*4f;)szLWeY}*Rzo&G>T z_n6w}4;wuJ)2DfvKcMX`rf%5PZ-s2Vx>ftbI%FEY-SHpBY;#BTPAd}d>41NmsclR9 zWX7f**epxywyo~Ofju+yK*;P5`2Tw_Il;Rx)tf_BpYzUpSFJZ&Aw7^dwx>p|B_!I4 zHILmC|77fdJ7sodb!s2Tsqnb`RxPRYXxmX`wU(iv`qSL Ct+iPI diff --git a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po index dc1a24cd7..58c52201a 100644 --- a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po @@ -7,20 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.6.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-05-19 12:11+0000\n" -"Last-Translator: Flávio José de Siqueira Cavalcanti Veras \n" +"PO-Revision-Date: 2023-06-13 19:56+0000\n" +"Last-Translator: Guilherme \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} já está executando" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Recuperando 1 mensagem" +msgstr[1] "Recuperando {message_count} mensagens" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "SecureDrop não pode ser alcançado. Tentando reconectar..." @@ -50,9 +55,6 @@ msgstr "Sua sessão expirou. Por favor, acesse sua conta novamente." msgid "Failed to update star." msgstr "Falha ao atualizar estrela." -msgid "Retrieving new messages" -msgstr "Obtendo novas mensagens" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Arquivo não existe no diretório de dados. Por favor, tente fazer o download novamente." @@ -65,20 +67,44 @@ msgstr "Falhou ao tentar apagar conversar no server" msgid "Failed to delete source at server" msgstr "Falhou ao apagar fonte no server" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Todos os Arquivos" +msgid "No messages." +msgstr "Não há mensagens." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s escreveu:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s enviou:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Arquivo: %(filename)s" + +msgid "Download All" +msgstr "Baixar tudo" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Apagando conta da fonte..." +msgstr "" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Apagando arquivos e mensagens..." +msgstr "Apagar Todos os Arquivos e Mensagens" + +msgid "Print Transcript" +msgstr "Imprimir conversa" + +msgid "Export Transcript" +msgstr "Exportar Conversa" + +msgid "Export All" +msgstr "Exportar tudo" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Alguns arquivos não serão exportados

Alguns arquivos dessa fonte ainda não foram baixados, e, por isso, não serão exportados.

Para exportar os arquivos já baixados clique em \"Continuar.\"" + +msgid "all files and transcript" +msgstr "todos os arquivos e a conversa" msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -122,11 +148,11 @@ msgstr "Veja ou obtenha arquivos" msgid "Send a response" msgstr "Envie uma resposta" -msgid "Deleting files and messages..." -msgstr "Apagando arquivos e mensagens..." +msgid "Deleting files and messages…" +msgstr "Apagando todos os arquivos e mensagens…" -msgid "Deleting source account..." -msgstr "Apagando conta da fonte..." +msgid "Deleting source account…" +msgstr "" msgid "— All files and messages deleted for this source —" msgstr "— Todos os arquivos e mensagens desta fonte foram deletados —" @@ -177,6 +203,12 @@ msgstr "Acessar conta" msgid " to compose or send a reply" msgstr " para escrever ou enviar uma resposta" +msgid "FILES AND MESSAGES" +msgstr "ARQUIVOS E MENSAGENS" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Nome de usuário" @@ -220,9 +252,8 @@ msgid "USE OFFLINE" msgstr "USE OFFLINE" #, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Frase-passe" +msgstr "Mostrar Frase-senha" msgid "CANCEL" msgstr "CANCELAR" @@ -233,8 +264,8 @@ msgstr "CONTINUAR" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SIM, APAGAR ARQUIVOS E MENSAGENS" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Mantendo a conta será retido os metadados, e a possibilidade de {source} entrar no seu SecureDrop novamente." @@ -254,6 +285,9 @@ msgid_plural "{message_count} messages" msgstr[0] "uma mensagem" msgstr[1] "{message_count} mensagens" +msgid "SUBMIT" +msgstr "ENVIAR" + msgid "Preparing to export:
{}" msgstr "Preparando para exportar:
{}" @@ -290,15 +324,9 @@ msgstr "A frase-passe fornecida não funcionou. Por favor, tenta novamente." msgid "See your administrator for help." msgstr "Consulte seu administrador para ajuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "O botão CONTINUAR será desabilitado até que o arquivo VM esteja pronto" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Lembre-se de ter cuidado ao trabalhar com arquivos fora de sua estação de trabalho." -msgid "SUBMIT" -msgstr "ENVIAR" - msgid "DONE" msgstr "FEITO" @@ -338,6 +366,23 @@ msgstr "Sua organização não poderá enviar respostas a eles." msgid "All files and messages from that source will also be destroyed." msgstr "Todos or arquivos e mensagens dessa fonte também serão destruídos." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Apagando arquivos e mensagens..." + +#~ msgid "Deleting source account..." +#~ msgstr "Apagando conta da fonte..." + +#, fuzzy +#~| msgid "All Files" +#~ msgid "Download All Files" +#~ msgstr "Todos os Arquivos" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "O botão CONTINUAR será desabilitado até que o arquivo VM esteja pronto" + #~ msgid "Entire source account" #~ msgstr "Conta completa da fonte" diff --git a/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo index 2a78c263435b98c13a110ebd853bf053f75f11c6..d741437dd32d6f849ff098c45b5e12a2b21afa55 100644 GIT binary patch delta 3426 zcmZvdYiv}<701WM0b|U=b{*S5%3v@y!7<=MA;tw8+ZY!=h}YyriF>^}wwJ8;lDoUc zh(sn034KW^U6l`Ml`5i&NSgLTS4q>R4=J>2q^43t)kzYo($T_a zU>W=g)Jc8?b>cr3#@7qu4`3zpCA`!KYv6jg4-&KS;O+1P?1AT?-v1rk0 z{!Jqt_B4B-BJPKZ_yKqu44?v=fp@|u;BNRsI0|pTZrDrOy5QI0Bk(P#efNLL7?NNj zP#KIuWq1C2Em^D}-}YOX*F zZ@_w3N;(w4mIC)c?R)5U@;^W)!h{??2m9flVJB=vA^Tw*D!`YZQuq$s1#3xD2Rsb5 z?mRpO--dG7UWZ^|Khy#4hiq*;xDC$Kk^j?lUSL8sY@jgGLN9EB<8U{88Y=Z~K=wB8 zL#e-S@B)0j2n|35^bM4&41Q;pjyCu{h)C^SMPr@(3XQ8w;yPj}W(?%#Y zw?eXO9)!9k0aQjVK&A9$sFVI0%F*B9UGQBv4A&BcGUh|wo=XtHn^&L?_y&|#u0t{~ zYd$PYEX8{(57t3B9)?QMG$a}3N!SZ7Le=ml+zyMWlh*Bk`hZP9s%g#^_-ui%!cyk1 zK$YMxuvPc}2Av@$R&O@u3_K3|;7xb{?xgSmd=%;=??IKQ2ql)lYN+|uum?657{D(w zeigRCy5@WaN1(1{3|8RZWa#Lm=b$3I0CmFeLZ#{zxD&n!m6>AlT?scq1#&l3X$Igi zcnr$nYp?@;02SD-mOLMWn!gNZ_tGiZn!jdUu$}Q!a6m7>FT)D%iZt;IEQddW3gDMe zrMUui9sdC*VH0&BR&yRI;9o$JX|BONu$+2{2bF(`=`0iV@OuzBnBPDIYTkv~pz1UE z>$D5%yU+%?O<_}p(4IM*ADX+Nf{uZ1~uJjHA)#?zv6I|7oNT!2Mc3mRbpO@sgzVA6ruc^BiMr&AGNTdm+=3< z4)_IZIaZ3zwX#Ad4po0Om5Hi^!qZqyBJRU(!^W|>CXK0#wAoMy`F{SJECo|`a}?v| z7!Rw&)ExFXtPAVMq-yDAAEs7?NjINt%b1WL)tazDOdly5ehKK@i!IF-l^(5cXiB+c z%mtfMmQK3OESNYM_-WU6@n~uBY{Z{(c08VNDSI-WNZ6#Gwqwq^nG=4HcCq%YldXFf zyfYs7Q#L&rXH!2DM4g@Vrd_z`l+!|&v@!o=GU0nM7i+d&GWLJBZD}71?AE>QWBY^= zzu=FZosDLKfPfRH7VMOdu-Qfv@#w?0zRORhD%_XRofmZD>-ClHQctoH7Tpqjh!Jzpfl9vr{gW@+MrWCAV$Wdqv9@Y?rI6EGyc$ zeeMl2?9xHpO)J9Fg;k?rgpXx6RW&XjIx^hVV>`RLhK>x5SnJ%5JWZ)?vKFWS+vJ=?$Lp{4~Dcgg9v7xQjW zf#ck6+GW~uFRU3Vo;`T^IrfZBx_IEH>?0YNcCNjy?g7;%C zmGlx4Cu3fI^|&8+2u1;pyCBYT>zXavvhh^PZ_d9oEeFSNw7|=}LL`vGUf|6= z3oLv5H_qckearSpM6tW6d6{?tI(h$&NJ*>2&}m&FJ{3=Tf%R;Zcs)z7Vc>ck>Or9f zHl2z2*|YW6*X5x=3osPM%pPU4TH zN!lmnG||+(qHAbyq|cYaxXTu6zA4%am9d`GpE(s za^-in)!LdxawDmDP0CT5~n4t<_xieBGVR&+hYme7@hi`+nb_ z_viij-s^k6JMw*Q@^M4!rcb3$N-`#bnW-FTX=%o!V>)KxM4XN@a0=GpKQ3c-V2#_D zE#r(?!Sxq1jd>J5#mV?9>Xxb8grAx$oTx|T#|LH(dii2GCgVxe56|EfmO4_b!`pdHuYe$@XiA%8VDF-KGVEpfq>ZOkmb$i^AC2>Hrv!+h+= zCX8S?evAs>E;197Il&k{#&S>~)tG{7k))UnI0w717N5m#rTRk#jaZyxOappxAD%(( zZHkzlGBOACpt)Fw4X9Kf#tyuUN_7E0dIaa8GFXcWpdOW(7E~rXFfxgOpMk}vu>{{h zJ@`_>tEd~^!dCnRHG^9I+=BbC9zVd9sJrXD0Ttj8jAaZLaef!;aCScV*9`{9?@qjc zdT<`o$iPz6460E}umtDfM${4=Lapg3EW>WkV%>GCGo1BiQ2AfQM=_ z@1rubn?g_xjUpS%JdgU{tC)u8P_^_P=4t<5VemK?ZlY#Bd3OATvJ@3S8|sEVs3HyG z68sYDFoOzHKrIQ6VFTyaQQuFc^q1pKT#2va6ZiwR@_aM3f+%qSHG@A;#gV}R=3)VA z3CeL1HX}bV&!7T6kHliG;vT$*OL3qo?wiQ+n_EayP0HMO5m#VDH`vI)jl)=vqv%4G z(&+u5Wl`ko=?^y*k}|i0t|d~o(&!{I_P)@)x6#+q7t=LsH3h4QHf#MA=~ntKy4nVM zcWe|tSYT;muUZACwbU$9>1wKKwMM$Kqo(w$Y1ZlVO*)~ii4%Kw)G=<;`mbQ1bye%6 zXVF#B+7&JIhub(#$Zo8W&DhIFC#r0<;yAIRYC>BqiM~2^CB8$pGwz~i(>L?{_?r#2 z#%fwyRW2LD%%|&(rvhSCVy|B->UU67BaF)%VT81Q&){otToP4)%rs==<|4=ik_SN zugfVd+LLNW0>gt|=iS1v^HNc7G;>PC?V9f#owh5QH@(drZJg1Tyj&sITi>96kAKJ$ zw7r3$u*Z5mwvT~NUv>sPL!mxj&>ys&0dF8=`KuYCR z+41PbvW4!btK7Pr#)^jMD;1UQhV`~55FR@ju!&jKx7&~}ICjE%eIZZSzu)5xSWkHD xto7KE|7TNTeW5V%>\n" "Language-Team: Portuguese (Portugal) \n" "Language: pt_PT\n" @@ -15,12 +15,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} já está aberto" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "A obter 1 mensagem" +msgstr[1] "A obter {message_count} novas mensagens" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Não é possível aceder ao servidor SecureDrop. A reconectar..." @@ -50,9 +55,6 @@ msgstr "A sua sessão expirou. Por favor, inicie sessão novamente." msgid "Failed to update star." msgstr "Falha ao atualizar a estrela." -msgid "Retrieving new messages" -msgstr "A obter novas mensagens" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "O ficheiro não existe na pasta. Por favor, tente transferi-lo de novo." @@ -65,8 +67,23 @@ msgstr "Não foi possível eliminar a conversa no servidor" msgid "Failed to delete source at server" msgstr "Falha ao eliminar fonte no servidor" -msgid "Download All Files" -msgstr "Transferir Todos os Ficheiros" +msgid "No messages." +msgstr "Não há ainda mensagens." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s escreveu:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s enviada:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Ficheiro: %(filename)s" + +msgid "Download All" +msgstr "Transferir tudo" msgid "Delete Source Account" msgstr "Eliminar Conta da Fonte" @@ -74,6 +91,21 @@ msgstr "Eliminar Conta da Fonte" msgid "Delete All Files and Messages" msgstr "Eliminar Todos os Ficheiros e Mensagens" +msgid "Print Transcript" +msgstr "Imprimir conversa" + +msgid "Export Transcript" +msgstr "Exportar Conversa" + +msgid "Export All" +msgstr "Exportar tudo" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Há ficheiros que não serão exportados

Alguns ficheiros desta fonte ainda não foram transferidos e, por isso, não vão ser exportados.

Para exportar os ficheiros já transferidos clique em \"Continuar.\"" + +msgid "all files and transcript" +msgstr "todos os ficheiros e a conversa" + msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -116,11 +148,11 @@ msgstr "Veja ou transferira ficheiros" msgid "Send a response" msgstr "Envie uma resposta" -msgid "Deleting files and messages..." -msgstr "A eliminar ficheiros e mensagens..." +msgid "Deleting files and messages…" +msgstr "A eliminar ficheiros e mensagens…" -msgid "Deleting source account..." -msgstr "A eliminar conta da fonte..." +msgid "Deleting source account…" +msgstr "A eliminar a conta da fonte…" msgid "— All files and messages deleted for this source —" msgstr "— Todos os ficheiros e mensagens eliminados para esta fonte —" @@ -171,6 +203,12 @@ msgstr "Iniciar sessão" msgid " to compose or send a reply" msgstr " para escrever ou responder" +msgid "FILES AND MESSAGES" +msgstr "FICHEIROS E MENSAGENS" + +msgid "SOURCE ACCOUNT" +msgstr "CONTA DA FONTE" + msgid "Username" msgstr "Nome de utilizador" @@ -225,8 +263,8 @@ msgstr "CONTINUAR" msgid "YES, DELETE FILES AND MESSAGES" msgstr "SIM, ELIMINAR FICHEIROS E MENSAGENS" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Deseja eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Manter a conta irá preservar os seus metadados e permite à fonte {source} iniciar sessão no SecureDrop de novo." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "uma mensagem" msgstr[1] "{message_count} mensagens" +msgid "SUBMIT" +msgstr "SUBMETER" + msgid "Preparing to export:
{}" msgstr "A preparar para exportar:
{}" @@ -282,15 +323,9 @@ msgstr "A frase-chave inserida não funcionou. Por favor, tente novamente." msgid "See your administrator for help." msgstr "Consulte o administrador do sistema para obter ajuda." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "O botão CONTINUAR será desativado até a \"Export VM\" estar pronta" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Lembre-se de ter cuidado quando trabalha com ficheiros fora da Estação de Trabalho SecureDrop." -msgid "SUBMIT" -msgstr "SUBMETER" - msgid "DONE" msgstr "FEITO" @@ -330,6 +365,21 @@ msgstr "A sua organização não lhes conseguirá enviar respostas." msgid "All files and messages from that source will also be destroyed." msgstr "Todos os ficheiros e mensagens da fonte serão também destruídos." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "A eliminar ficheiros e mensagens..." + +#~ msgid "Deleting source account..." +#~ msgstr "A eliminar conta da fonte..." + +#~ msgid "Download All Files" +#~ msgstr "Transferir Todos os Ficheiros" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "O botão CONTINUAR será desativado até a \"Export VM\" estar pronta" + #~ msgid "Entire source account" #~ msgstr "Conta completa da fonte" diff --git a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.mo index 5cb71dd876681202bd7e44389d9d91f3b3776e9b..96b7fb3b7dbf932d3ac534cb6310b2030a06236a 100644 GIT binary patch delta 3562 zcmaKudr(x@8Nkm1r33{8L_tsw2nvcANR5gpAfWXDKEP;`5WBzyw}oBVUA1Zr_?Q?6 zV-jy-{zy{CF_Y*Y&Zz4qD=29*ooP%=d+%f>ZIjftHcp)yho;lVwA0t`ySq3z+8+J( zch0%zeCK$jwn8y10H?rXa6CKNXUM{|Uw7huHNsSOCSaVmKQ<0vE!k;1>7_tcQPtb+C%?^}>EAdjACRQN>S;Mlcgf zgtK8^4V_XtlA9jb49`M2z(riY4lALgW*HPiRznHpW01e9l^?dK0MzhVSOCvJIrv(P zpF`32C2WL$&LaMD&@$q+2JV5i@O`)pCQ~6|SR<6sJqH)SORxrh1!Z3a;cA6_P!9YR zq~6pWD2D$XN=o8#lzJHEKuOuE9O5sz?`EPH4#0)*B9u_yf$UY;BuuKk92UYxI34<7 z5j+MdautD(!XbFuMd%^fRM)v$WJmoGdSE=2>qNYdj$FI5khSUq_*bsrP1uWq&oOfs zW#2@}Zshy>RGfy>uvR>&hLYoLP*SiDN_8KHQk;YEm+%IZ+PYj4U4Ipdp?#myDWj8) zyP~iLmcw31n$#)igd9qBe+8wgB_Er?a<~|tfO7C>a6bGG6n*ncqxw6cMBrtp;b~YW z_x~!L6-=bejfQq3loafSPs0$D+*M#@3tS1M+J6AWu-`$>Qn~Y@5nKUf+y=+PqcOe; z*DyW}+u&c|8M*(PG4oqY#NoDt_(}LfcmZ;@3RFZbJ_(ZcuK4`%KxPdSpgx6sUY+pp3zzFPuC6&bgIXW-W8G+MDB=x4!s-ht*hvI1~ zlu+-5>tGlzfrv=7DNhfH8R>H-)j-kArF`|F-)2iAtk1skU^|Xj4@I2KiX!{ zX+&lr;zc$h1@jalO>!vpppg_L2Z=|xSN@fwITLFqA9IQ&L@3N zLFB`!h%~uUk~40nnu&~U%f}1~=ubx;N64b{ypkQ~^;`)jBTpjIvJeAVFN0Wf{FfA@ zBe}>Fg!DO&N;Q-wIj@mUtWoez?I^=sS@>zZNM(s6X{hg!HQ>L|)8Q z$R?TM8alM0nf}-Mp;q5T|B>_z*SgFQL z?DYGBM&+qJNpXG6z8*t&db*8(-s$P?)?Qyww;9^_-Zq~AnR@LU$^Ojb%RSQ~tvGdSu z==SY?KL&U28lx#{VX1EK_OyRj7u5N@L63L4QC1Mzk-RX@?9IsxeKEizZ=l`p*=GJawLE?0nucaw+f=U`8=9MIS2Q%6scAzg zmAa@{LhN<-7$xQ>Y1@)@Pt1(6P~C(P*EoGwO)ylNk?blgA6=m~7(u_s*x~VZ={>Ps zTO3>Wh8AV!$AwWnj=&UR;G?!Snrr$&Yo7Kt+0LAe(|oZ0c*&LXzLvg331{9 z>uoGRXQ`Iy`wz^Ok9SK;D$9BcCx
0E4Ek*HIn!sg!;9xWfq&fw!&8#9%+43ak@^ zYS_An3^C8FeT4E`ua6{zMhd@hnKx$6Omb$mb;0~iVNr^*PO+Tu$zt<(apAbw*nZwV zYNjm7Uo90jx=1E9s|WdW4l}RV`|;A=C-&QiuqGlOoE;~fC5Kps4V*@j!l9m7g)Y}w z^Jm3Vl4DcKa)vpYWs>D9tQ({kA?wee`l#tEnPmR7c#C;sQNGz*G9$FEq|udrPq7A+ z^@cfN$z1d1Y%7N(Via12osb@uWT5R*Stv9oQ_4e1CXBHd7BlXD9Ub~{*|4kl94?pN zuQ05v6B1_XNOT?5rn^dK*v~&;dPeBb))&8wpU4aD7fK^BLn9!vLmkHlr8GliJkG`mScMnh5}b~Wc-j)V z3+JVYbY~{-fBJlp#e6@A7vbM=Di+X*c3puy5|@QkCecuvvL0Kw-h_JNF%056$OG~L z>I6Q)X=qKPQ=EZ%{{qwj7vTzQM7{qIPR2KpN982uGQND9YOu0JO86ohXW~NSD_MtA za1+*H9P{v1yafM*I+0*bav{aYzf|#|6I+hyxE@K4G~*m>!)nHtUsGwow{bbn%N1FM z-S`U}MaGaz8C5e;gPO6WSc_{>Q+)t$#P?BCeF-<6hs#hiw*qwn^{AO@z__NQl}bL| zg$5tO3-K`O!0)C!h1%gia25Ust8oPnuf(0W1U+1eljvNp*P>4FQS>v03%L$XA^){h z7Li}=U>mN-H&6#IWf@smjk<#6s9UiLE3gH1tM;Sr@e5dr?_m#~L7iX^`=BWwL_M@0 z;Vk^VfczIzF@+*O!CFkiR=fIvPUYZCU|0!w48mz&6NT2c+ZpO6BMGoRt zT!%RvfK9j=b!(4fTpOk@N_Mmp*+zL6^)1j|n<0P}E+Li?`mlCL=KZ42=!AmA&4eE4 zAIi^DmFrQns^vD~R=-C6_0<1R7E_r_j3d?)r9^ZSI-7p z>lZyAT6kIfA2N=Bf2d2e@tnfW`lnx;a)|}{v#F(+-~gX3>C~1I9B%*p*7Go)m`YUH z&t}}@l#D-PIe*EjN*i}&I1=g<`{=Z(&fJLsE4^-IU45Nhk)0n1w{5gfW={%~mzUcQ zWf%AkXAewji-kKvrZd{r(Ht^O&CSuSHhX7IrTu!&@Ptm&)Yf9QhB`Z&Hiqndx$RC? z-d`;zBR^;b+Ctq<#pIc3HOsDDU4QlJHFah~S1cB7Gu`1x#B2zemT+g&hDfNzbTLH4 z#5RRY-5u@Gj+j}y%7i;jN2sagPG{xREopJn9qo#=m`Hd_$i$+iB@_w8LZ+ux7t;`n zHY6Lim6@K7PA<75zKl+<4LMpe1%@ZK?COl4I6{$K6NV2i@PgkGcolL-y$GQv0z*`PUnF z$auZ(7=HuaeQv^i(H(M!$+5VPyMu1OJDO@saHrSn?c&BkZW?nPcg*np2!H+F4);Z` z&+X?qXK2nWEB#?N;q}@@b7t9}mgd{nlr^Z%iL%=)`~8xFfVh9Ky^>;kbNLCUd2VjN zIXLf#m6sfxfwcR>-X3q4^V^Jn$#LB(B4D2`S zxA&45E}7jlmpPs@12REROxf*sKCI46Z}j#UO_bj~(=h&IHI+kNpSSnNoeO61f_<#= b0=w$s++1DiDDyshAnea-UUA;L;t}h=tZ`oH diff --git a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po index 3de078a39..93436b2fd 100644 --- a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po @@ -7,20 +7,26 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.6.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-05-19 21:11+0000\n" -"Last-Translator: Andrey \n" +"PO-Revision-Date: 2023-10-15 16:30+0000\n" +"Last-Translator: Alexey Peschany \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} уже запущено" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Получаю 1 сообщение" +msgstr[1] "Получаю {message_count} сообщения" +msgstr[2] "Получаю {message_count} сообщений" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "С сервером SecureDrop не удается связаться. Попытка повторного подключения..." @@ -50,9 +56,6 @@ msgstr "Ваша сессия истекла. Пожалуйста, автори msgid "Failed to update star." msgstr "Ошибка добавления в избранное." -msgid "Retrieving new messages" -msgstr "Получение новых сообщений" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Файл не существует в каталоге данных. Попробуйте повторить загрузку." @@ -65,20 +68,44 @@ msgstr "Не удалось удалить беседу на сервере" msgid "Failed to delete source at server" msgstr "Не удалось удалить источник на сервере" -#, fuzzy -#| msgid "All Files" -msgid "Download All Files" -msgstr "Все файлы" +msgid "No messages." +msgstr "Нет сообщений." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s написал:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s отправил:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Файл: %(filename)s" + +msgid "Download All" +msgstr "Скачать все" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Удаление исходного аккаунта..." +msgstr "Удалить исходный аккаунт" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Удаление файлов и сообщений..." +msgstr "Удалить все файлы и сообщения" + +msgid "Print Transcript" +msgstr "Напечатать транскрипцию" + +msgid "Export Transcript" +msgstr "Экспортировать транскрипцию" + +msgid "Export All" +msgstr "Экспортировать все" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Некоторые файлы не будут экспортированы

Некоторые файлы из этого источника ещё не были загружены, и не будут экспортированы.

Чтобы экспортировать уже загруженные файлы, нажмите \"Продолжить.\"" + +msgid "all files and transcript" +msgstr "все файлы и транскрипции" msgid "SecureDrop Client {}" msgstr "Клиент SecureDrop {}" @@ -122,11 +149,11 @@ msgstr "Просмотр или получение файлов" msgid "Send a response" msgstr "Отправить ответ" -msgid "Deleting files and messages..." -msgstr "Удаление файлов и сообщений..." +msgid "Deleting files and messages…" +msgstr "Удаляю файлы и сообщения…" -msgid "Deleting source account..." -msgstr "Удаление исходного аккаунта..." +msgid "Deleting source account…" +msgstr "Удаляю аккаунт источника…" msgid "— All files and messages deleted for this source —" msgstr "— Все файлы и сообщения удалены для этого источника —" @@ -177,6 +204,12 @@ msgstr "Вход" msgid " to compose or send a reply" msgstr " для написания или отправки ответа" +msgid "FILES AND MESSAGES" +msgstr "ФАЙЛЫ И СООБЩЕНИЯ" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Имя пользователя" @@ -231,8 +264,8 @@ msgstr "ПРОДОЛЖИТЬ" msgid "YES, DELETE FILES AND MESSAGES" msgstr "ДА, УДАЛИТЬ ФАЙЛЫ И СООБЩЕНИЯ" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "При сохранении учетной записи ее метаданные будут сохранены, и {source} сможет снова авторизоваться в SecureDrop." @@ -255,6 +288,9 @@ msgstr[0] "{message_count} сообщение" msgstr[1] "{message_count} сообщения" msgstr[2] "{message_count} сообщений" +msgid "SUBMIT" +msgstr "ОТПРАВИТЬ" + msgid "Preparing to export:
{}" msgstr "Подготовка к экспорту:
{}" @@ -291,15 +327,9 @@ msgstr "Введенный пароль не сработал. Пожалуйс msgid "See your administrator for help." msgstr "Обратитесь за помощью к вашему администратору." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Кнопка ПРОДОЛЖИТЬ будет отключена до тех пор, пока экспортируемая виртуальная машина не будет готова" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Помните, что нужно проявлять осторожность при работе с файлами за пределами вашей рабочей станции." -msgid "SUBMIT" -msgstr "ОТПРАВИТЬ" - msgid "DONE" msgstr "ГОТОВО" @@ -339,6 +369,23 @@ msgstr "Ваша организация не сможет отправлять msgid "All files and messages from that source will also be destroyed." msgstr "Все файлы и сообщения источника будут очищены." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Удаление файлов и сообщений..." + +#~ msgid "Deleting source account..." +#~ msgstr "Удаление исходного аккаунта..." + +#, fuzzy +#~| msgid "All Files" +#~ msgid "Download All Files" +#~ msgstr "Все файлы" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Кнопка ПРОДОЛЖИТЬ будет отключена до тех пор, пока экспортируемая виртуальная машина не будет готова" + #~ msgid "Entire source account" #~ msgstr "Весь исходный аккаунт" diff --git a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.mo index c57fbb3c748db2e6a2864f2430bcc07194b908a9..529eee7b15420ba0b2e0888561b75245ecb4548c 100644 GIT binary patch delta 2249 zcmYk+TWl0n9LMp~?G4)k<=QO>9a?A$xP_L|))t`)+tR{rw{%;s0bSZDDVN>4y`Ui3 zARr+G6SGl_B8f&K@j^6{Xao}zTObl2e85CsOf(Ur@xceB1QX-;H(P|0{^xUMr!(iA z|M|~c+<9hu^2eE3uNvA`;&I{|k11-p1_6p3eLxm@qPyPVGZ}* zaL@`WQK_y*o^2YCXP8brg8L`0|AKm3{y-LK?&1P0u+kY> zhCa^gP!sM;($PxaL<-g1K(^c5M(V@d!77}1B*TPIuWKK+;ckdQCJ;^bl$q-~IMWHKks&R0h;kjFg01 z{W`DFfu@x`Xj+{bFO9pmA@}UzL4~NTXeFL}__MwpNw+xkIn^Eq9=WJ)9znLw7n_HhT z^I&{5dcdlT*u5hOJCKMEE=>&<6-Dwo!@e$ibYN&89`gmF!*-*!qs8Cl3x$0Fztt9Q z47D%c$?$o>=+LmQI}wcy9gGgg6OC4DPcUe8_(Lt$nwF5iJ=p9I1iD%xk+rEN@7{u7 zG`4Rfx{t>V9Z3D;U7gv}-I^*cE=#@T4J>HN+wR+F$LvJZPE7xa)3h5zDJ(Tb_LosGump+1+UwI-OZ(XBTLL zi}8s8KCqA&H7W!jm}t~ZltA#ywlSJ$j7H-l5{(j~0Tn-3g~a$jT@>-Fo9_PZ+};^%a^Qe(M1gB3V}*JJr*N=?S;c&K#^uGmnOc;*WlsN>nsnVF@uixa4Md~N}Ry#8mz-M zyaTH+i?eYr%0}KnB2i!9)p!PFV}ByaQUM-DjOseP8E4{LT!R}~U+tpNil;G(k*k!t zAJfR6I>nDHFoMlEo>e5p?YIVap``d5yc~Z=$(V#G3y(#~P&G;>CSx^5Fso@Sp;3pu zC<{J;@}Q@%0}rC?_!n%)S)`!_Gq@O!T(~}uvatp1Rx-35Z^y&fjNhW%U&rcFZ*Dc` zFAIJ^2gjzqM%nofD5?Jy!#I|0%h5EU)WE$s69;h+520*ObCaa_Zj|DD7^ma&cmodO zjd&7EaeRRM&!JIC{;r{?4JBpkYKz4ZLn*2x$_Dn~Ju z9wm^;TuADtqa4v}ytmyj1m4WUH(3G(KuZ&5P%6UuXbN6JW55-v?O4dwpjcs2E>dT7XlwqQ3t ziVN^7T#2>(b69~UF2UC^iX#}uc{3?Yd=3}lm)L@}vx=F#2QyqBLJ4p(=OjmQE7q{S zYNjDOTZaUzwj)_r2a)4fLnx{I9+OzZyVZz~;Zi(~QUm3jlWcrGN>L6V$yIM-DSm~E z@B}K|+O@8;y(_=t@_pqUZS8H{ZK}1aQ+}korB$_>w&`0=ukNvIGo=kDq5I8L%IGyy zp-|}JaLP@4aZ?-dxSMu-hH`T%-l%qb%QN+*W4V(RBc*Cd?!JoJ{P&d&Wr5YE?^$L> z7IDli|2#e)sJfzbLA0y0dwJ)bZ910reb>=jEZf#GQzxvH5wp#NW;M&!{w7nmZB4qK zuh({HE2TZtNNmebs_rYz>Md^CPH5ZeGqvyPghXWO!O?&=`tHVJ$M#$Fpl2p+%S>I` z`FFVg>eW4-+dsPIrJ?B_*VBW=zU_sm6;rKcnY7B*Q z9|i*1)aY1(vF0AnG!t%rDCv>oajUwzgHZzUE!PRQ8ot@2>%;YtU?dW}EvzGRn!=G_ zcy2h%#NcWYnELO$a4<4gM;eSu@fjB7Viez4m!oRn?&uGgej8otr!S&l&~W!P@U z(DVBYzt0HuUAS)U?Kdnt6nFa6jk-OavEiYtoC2m}%?!&>f*jK34nCWvkYAw5)F#KBSg)b$6}pQfs=Gw=CwZ`xPL%Uut@eLI6J8s@t@)t)4{lEYK diff --git a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po index 769eeb071..132362d3d 100644 --- a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po @@ -7,19 +7,26 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2021-10-18 15:42+0000\n" -"Last-Translator: Katarina Kasalova \n" +"PO-Revision-Date: 2023-10-13 16:30+0000\n" +"Last-Translator: 1000101 \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} je už otvorená" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "Nie je možné pripojiť sa na server SecureDrop. Pokus o opätovné pripojenie práve prebieha ..." @@ -49,9 +56,6 @@ msgstr "Platnosť vášho prihlásenia vypršala. Prosíme prihláste sa znova." msgid "Failed to update star." msgstr "Zlyhalo aktualizovanie star." -msgid "Retrieving new messages" -msgstr "Načítavanie nových správ" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Súbor neexistuje v adresári dát. Prosíme skúste ho stiahnuť znova." @@ -64,18 +68,44 @@ msgstr "Nepodarilo sa vymazať konverzáciu zo servera" msgid "Failed to delete source at server" msgstr "Nepodarilo sa zmazať zdroj zo servera" -msgid "Download All Files" +msgid "No messages." +msgstr "" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "" + +#, python-format +msgid "%(sender)s sent:" +msgstr "" + +#, python-format +msgid "File: %(filename)s" +msgstr "" + +msgid "Download All" msgstr "" -#, fuzzy -#| msgid "Deleting source account..." msgid "Delete Source Account" -msgstr "Mazanie účtu zdroja ..." +msgstr "Zmazať účet zdroja" -#, fuzzy -#| msgid "Deleting files and messages..." msgid "Delete All Files and Messages" -msgstr "Mazanie súborov a správ ..." +msgstr "" + +msgid "Print Transcript" +msgstr "" + +msgid "Export Transcript" +msgstr "" + +msgid "Export All" +msgstr "" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "" + +msgid "all files and transcript" +msgstr "" msgid "SecureDrop Client {}" msgstr "SecureDrop Klient {}" @@ -119,11 +149,11 @@ msgstr "Zobrazenie alebo načítanie súborov" msgid "Send a response" msgstr "Poslať odpoveď" -msgid "Deleting files and messages..." -msgstr "Mazanie súborov a správ ..." +msgid "Deleting files and messages…" +msgstr "" -msgid "Deleting source account..." -msgstr "Mazanie účtu zdroja ..." +msgid "Deleting source account…" +msgstr "" msgid "— All files and messages deleted for this source —" msgstr "— Všetky súbory a správy pre tento zdroj boli zmazané —" @@ -174,6 +204,12 @@ msgstr "Prihlásiť sa" msgid " to compose or send a reply" msgstr " vytvoriť alebo poslať odpoveď" +msgid "FILES AND MESSAGES" +msgstr "" + +msgid "SOURCE ACCOUNT" +msgstr "" + msgid "Username" msgstr "Používateľské meno" @@ -216,10 +252,8 @@ msgstr "Prosíme zadajte prihlasovacie meno, prihlasovaciu frázu a dvojfaktorov msgid "USE OFFLINE" msgstr "POUŽIŤ OFFLINE" -#, fuzzy -#| msgid "Passphrase" msgid "Show Passphrase" -msgstr "Prístupová fráza" +msgstr "" msgid "CANCEL" msgstr "ZRUŠIŤ" @@ -230,8 +264,8 @@ msgstr "ĎALEJ" msgid "YES, DELETE FILES AND MESSAGES" msgstr "ÁNO, ZMAZAŤ SÚBORY A SPRÁVY" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Chceli by ste zmazať {files_to_delete}, {replies_to_delete}, {messages_to_delete} z účtu zdroja pre {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Zachovanie účtu zachová jeho metadáta a možnosť {source} znova sa prihlásiť do vášho SecureDrop." @@ -254,6 +288,9 @@ msgstr[0] "jedna správa" msgstr[1] "{message_count} správy" msgstr[2] "{message_count} správy" +msgid "SUBMIT" +msgstr "POTVRDIŤ" + msgid "Preparing to export:
{}" msgstr "Príprava na export:
{}" @@ -290,15 +327,9 @@ msgstr "Zadaná prístupová fráza nefunguje. Prosíme skúste znova." msgid "See your administrator for help." msgstr "Požiadajte vášho správcu o pomoc." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Tlačidlo ĎALEJ bude deaktivované kým bude pripravený Export VM" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Nezabudnite na opatrnosť pri práci so súbormi mimo vašej Workstation." -msgid "SUBMIT" -msgstr "POTVRDIŤ" - msgid "DONE" msgstr "HOTOVO" @@ -338,6 +369,18 @@ msgstr "Vaša organizácia mu nebude môcť poslať odpovede." msgid "All files and messages from that source will also be destroyed." msgstr "Všetky súbory a správy od daného zdroja budú zničené." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Chceli by ste zmazať {files_to_delete}, {replies_to_delete}, {messages_to_delete} z účtu zdroja pre {source}?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Mazanie súborov a správ ..." + +#~ msgid "Deleting source account..." +#~ msgstr "Mazanie účtu zdroja ..." + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Tlačidlo ĎALEJ bude deaktivované kým bude pripravený Export VM" + #~ msgid "Entire source account" #~ msgstr "Celý účet zdroja" diff --git a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.mo index 90b461f1725630e39b0dcc48e7b594757b247985..3f104b468ef3853a5bbb814324e5807f00686998 100644 GIT binary patch delta 3429 zcmZ|QeQZ@{9l-JDwrrFF<)wDLg$^Ft(iUh7Wo%=m(q7uzj`g->y#)le)x*7~z1RD4 z%DJa4FOs_jBhip7+ll)_jS($GCtEZ(VpL4jyFWe$Vf@_k*V{$MbKmUGgn@p7f)#+Cc|kh0ACQvqB_b2)Cn zI$V#taW#(P8Z`04fKqe#Yufg5rFNDn_3#R%dT1xAlxoE9VXabm^&2i^tUFkNf5U2g z&$nU~lcHUZOYk|A=e~>&;`3O8ub@nOtpg#J3xw|W;P`&aPM zgsr#{hjBAzkfc{GK7udd#Q-^g567-zrlq(coQW8Z=xj4 zN2qZnvy;8;K-u$tBv>kn@?HidQgb+p-$q%;KTw{pr6F6SHclgJ#wotQ#d`L~c=QP)u3`vb~z@A&@@FiXjSjVKdq z#qDzbALZh++?c|XcnSM)!xp6mFotrRUPgJbo5Ak;A!7;xQy}D1uiP_CAonYQ3m({O2@xK=A_<0wpV?O64FM(A|ZVUrQ<;~@c?$? zRgB@g7{SBsoB*81Uc85SCa3mxlvbR?hiJcwA-s)K*tESg;051r;!5scL7C{!klj%? zF^&I1IYn{yQ{y>gEH#h4_&Pp})t$s&I@sS?N~#Hz37tYtike4R@h_32S9fqP-o*e) zk@v|pbwC=F$EXRaOhC#isvJ#8+9B#Fb(mU3mHbnOL4NrpxumS2PIyX`TK1s$Ws1h03 z&!yBAR4Ks{ik(tpREd(5&r>CL9;Zr??U7`@pDL$=0D8w<##aZalBsfhq{v>$@4znV zQ&ib&Nw9@d>0cyKj-C|RCdr*HY4}CHaQ0L0qfYww1W8WGFG^nRDP4G<7nRgwv-M^;DW+n~tTEv6OD;v$9SyJ7ab<6b@CsT)yr0vzJxB znKrpOwJUs#9w`bH0qj2DKgKMEASQu9Gz z*)h7H*FK#;AzkBs+<2nOAU)!7laLX@jzYSrzN{*mvXirV#wqn)IN!W6P$Oxy z@SJ+QIG=F{u=`efy?eE#zH+GerATCGbYy(A@Vl0$%L*s9ei&GKNKSKn#=X_H&aDl$ tZ;*ZR7VfRl(UTJ0Go@2}w#WTK+qB!=K3gNp_0yoVThmF)c7N1<{Xe5@Q?&p9 delta 2529 zcmYk-d2AF_9Ki9nyQQ?y+PiGa(J9b_mTnJ^mU8t*pylWV*g`X~BV9VXTejN+5f=ps zLQG5s68^#vkdW{Xuu)=+l2D8W2?Pv(n1F^xqasl;CI&I!_cvP-UizEQo7tH+@BQ9; z)6?EZy^-(JeprTacoOBtGdLU1V;0^(>A+8zi*YX~ zm5zDn#wwH-tw!lUJFdnNl;tBUp-G zqIBRPG7^=PsuX`p;~*WW#3{H6Ns3yBCD?;CcmVq()t9I=VP2Y2jp)Ulcm`=(c)6)R9OScB4mdX&txqGYlIBbiiuR5W}G=i-MbFTOnK zEtCc)unq5{jG%^xTX84W;}_U~(z={CqIB?Gv@?d)oIk`mT#!xvrGXvfcQal@d2trQ zn2rS~BdA1~f?BM=^(a&H4$7RK!eSi9-S_~dgZ<2dr2GWRV!ej*@fXa)1j;A^NeH2an(${G64#g6oSlr555ol*M}vCH2=) zcGGPnS?Y%f6&cyz_y$gASTffKP;NYo{HdcHm|k@erRP_XL8$vE4Y}qjMPHR0<+&=9 zj4Z*mXrOfXV`TQ!9h6K*{-h$ST=t5jHU(v_>X0ld6J;d(u^P`~75<7cvRUL)c0n!5 z{aq;6{U}p+7^VFqSdJ%gDSnG%vj5Y_XA>6=VGG_sS^e2`mvy2JqAb4SC?h?MjriH5 zPw_R*8;fEcIF9n-PbR&Dl98_`y@k^59n6&d{}&ZW)l?1)N>!kwrV}MqUQEC-H1KU) zf`Dy^Am6T+&?6`&BoU?RX63#gcC^73E8% zq4d~;3|2Lvtoi}e@DP^aS=8}6ti#1zd>P+FSsNEnI&uwJuj(I+$cQsMvDIIV%Q&w^ z2Qo!=%3DxIw3c|jNF(xsULuZ=Y)Pg_j6G%2_9kK#v51hYNg+Y@T3IRcznBwA+ZIB~ zI-<|6#SR)UL-r!8M?Q*n7UEG#O$DD}_Nnz_+Ky;X`U6LFV`iMg6);Avy;((5x*FP6c3L;HGNRYBCLBu}*RJVYxu&aG z+d3Q$2LsxukG8fNn%6g^Z#50CHXI21OfB4RXw74T!BAN1Zqs~2TFB77yP{`jJaJeB zx&C-x0~F(WIGMoUTewmF1tkJ^FZdnKK%nKjCzZ=-%jW^W2W~f$>wO zSvC+1goCPG_ZlJHiWFp9B?Z%pH2XI_Fr?W(PwYLdT6M2i*ZK{=rkkd&z0OEOR(ruW z){??9>s(=ub*%7;wXa~N^XaEN?|Hepnmf z9_vYYZszWgF=+aXp}ugi&uf@Q*x0ks@>FO^dO+Jf6dVq1GxjXEZdQz0eU)GR4+N1< A1^@s6 diff --git a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po index f5707b646..17eb1972b 100644 --- a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.7.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2022-06-13 14:02+0000\n" +"PO-Revision-Date: 2023-04-24 08:13+0000\n" "Last-Translator: Jonas Waga \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -15,12 +15,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} är redan igång" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "Hämtar 1 meddelande" +msgstr[1] "Hämtar {message_count} meddelanden" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "SecureDrop-servern kan inte nås. Försöker att återansluta..." @@ -50,9 +55,6 @@ msgstr "Din session har gått ut. Försök att logga in igen." msgid "Failed to update star." msgstr "Misslyckades att uppdatera stjärnmarkering." -msgid "Retrieving new messages" -msgstr "Hämtar nya meddelanden" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Filen finns inte i mappen. Försök att ladda hem igen." @@ -65,15 +67,45 @@ msgstr "Misslyckades att radera konversation på servern" msgid "Failed to delete source at server" msgstr "Misslyckades att radera källan på servern" -msgid "Download All Files" -msgstr "Ladda hem alla filer" +msgid "No messages." +msgstr "Inga meddelanden." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s skrev:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s skickade:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Fil: %(filename)s" + +msgid "Download All" +msgstr "Ladda hem alla" msgid "Delete Source Account" -msgstr "Radera käll-konto" +msgstr "Radera en källa" msgid "Delete All Files and Messages" msgstr "Radera alla filer och meddelanden" +msgid "Print Transcript" +msgstr "Skriv ut kopia" + +msgid "Export Transcript" +msgstr "Exportera kopia" + +msgid "Export All" +msgstr "Exportera alla" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Vissa filer kommer inte att exporteras

Vissa filer från den här källan har inte laddats ned , och kommer inte att exporteras.

För att exportera de redan nedladdade filerna, klicka på \"Fortsätt.\"" + +msgid "all files and transcript" +msgstr "alla filer och kopior" + msgid "SecureDrop Client {}" msgstr "SecureDrop Klient {}" @@ -116,11 +148,11 @@ msgstr "Se eller hämta filer" msgid "Send a response" msgstr "Skicka ett svar" -msgid "Deleting files and messages..." -msgstr "Radera filer och meddelanden…" +msgid "Deleting files and messages…" +msgstr "Raderar filer och meddelanden…" -msgid "Deleting source account..." -msgstr "Radera källans konto…" +msgid "Deleting source account…" +msgstr "Raderar källkonto…" msgid "— All files and messages deleted for this source —" msgstr "— Alla filer och meddelanden raderade för denna källan —" @@ -171,6 +203,12 @@ msgstr "Logga in" msgid " to compose or send a reply" msgstr " för att skriva eller skicka ett svar" +msgid "FILES AND MESSAGES" +msgstr "FILER och MEDDELANDEN" + +msgid "SOURCE ACCOUNT" +msgstr "KÄLLKONTO" + msgid "Username" msgstr "Användarnamn" @@ -225,8 +263,8 @@ msgstr "FORTSÄTT" msgid "YES, DELETE FILES AND MESSAGES" msgstr "JA, RADERA FILER OCH MEDDELANDEN" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "Vill du radera {files_to_delete}, {replies_to_delete}, {messages_to_delete} från källkontot för {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Om du behåller kontot så kommer dess metadata att sparas, och {source} kommer kunna logga in i SecureDrop igen." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "ett meddelande" msgstr[1] "{message_count} meddelanden" +msgid "SUBMIT" +msgstr "SKICKA IN" + msgid "Preparing to export:
{}" msgstr "Förbereder export:
{}" @@ -282,15 +323,9 @@ msgstr "Lösenordsfrasen som angavs fungerade inte. Vänligen försök igen." msgid "See your administrator for help." msgstr "Kontakta din administratör för hjälp." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "FORTSÄTT-knappen kommer att vara inaktiv tills Export VM är klar" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Kom ihåg att vara försiktig när du arbetar med filer utanför den här arbetsstationen." -msgid "SUBMIT" -msgstr "SKICKA IN" - msgid "DONE" msgstr "KLAR" @@ -316,7 +351,7 @@ msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "JA, RADERA HELA KÄLLANS KONTO" msgid "Are you sure this is what you want?" -msgstr "Är du säker på att detta är vad du vill?" +msgstr "Är du säker på att detta är det du vill?" msgid "When the entire account for a source is deleted:" msgstr "När hela kontot för källan raderas:" @@ -329,3 +364,24 @@ msgstr "Din organisation kommer inte att kunna skicka svar till källan." msgid "All files and messages from that source will also be destroyed." msgstr "Alla filer och meddelanden från den källan kommer också att raderas." + +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" + +#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" +#~ msgstr "

Vissa filer kommer inte att exporteras

Vissa filer från den här källan har inte laddats hem ännu och kommer därför inte exporteras.

För att exportera the nedladdade filerna, klicka på \"Fortsätt.\"" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Radera filer och meddelanden…" + +#~ msgid "Deleting source account..." +#~ msgstr "Radera källans konto…" + +#~ msgid "Download All Files" +#~ msgstr "Ladda hem alla filer" + +#~ msgid "Print Conversation Transcript" +#~ msgstr "Skriv ut konversations-kopia" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "FORTSÄTT-knappen kommer att vara inaktiv tills Export VM är klar" diff --git a/client/securedrop_client/locale/tr/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.mo index b53914ff076acad926c257c09f0fb20dd6640e7e..a7af7eca89f670800e57ad6d93ff696fcd9808ba 100644 GIT binary patch delta 3538 zcmZvd4Qw1o8HVQ^w{;xbN$mXCbpz8&96Nt@;x?^uOzg9Lv0MKow&NxZ)Lq|g?B(wE z%-&t%vm0HZ2$Z(apA|*WmZ~Zwp(;@8L=hrw5q1Sqh=i&NBqT}|Dk=dIi6}@xt>F3g z?#j99$lpD)v%53jyx%+P@89>PnR&aq^qY!i5w{TGRZ7XgOE>Z(ZMFBOe6W(sHSklg z4%WjqxDJlP_0WX>@hNp0{*r5FjZ&>8O6{*us*~%PDy6o<3vjbi8TA`Fvevt>4E_z) z!1wbkTT4=0-vUeFm!LfNRk#H{1~I$DT3Ak&vd&g03G9RetgnXY z$cx{B_s7l!qGOW_T;?gygIYxCzd}Ap9DX=P$!u@Es@# zRxnt@`l^u*bE*SSG9HAI@o{(qbf6?Q2Y14UU>p1qoP_VeUf73hJ@8TZMfh7N^LB4g z3K7&86a_<26rO>ZE;E+gB0T>k|t?}4>sA!a-Tr6e{K@1&q8u>cWGJpyOo3;Fw* z3euHYR6{xcH$zF_PAG~DLBvsUD5v2pl!d+pMcUUPbE!*kKfDS>x$WC?UKoL*SQyH@ zXP|7%&5dW&IXYsR*P%%G7L-KZhhnnztR@L)*azF8xcAF&2Yf2eUqF%cuTWh70Ti=V zk_}U-T6iPu%<~ZJlJh@AXPg_~fDZgKlv6Ol?8ERyXv6E!J2n_W7I*;O0KX1p11{`` z7oZ%&Yj7Iw$FZM*&%$!}dnig?f$LabU8N)E-nTnfiYh3QZOXF+ws74K<;yh(Wuj-G zxcNL3rCx*gz{{`$Heieca0-sX@4{|)4a$aZZ|3~-tU61l9lio(p=&S>Z{=bhJ^?AK zs^HAXPFtZU&<8a<2HC7i!&C5kP)b>kL&X~hpv-$eWUuORC<$KNhyI)hb)5mJ`Nr1V zi>-N%LaChtF}?aW6q7vzIZa*@Q%Q1%bC;gfGxX&&Nn1-uGUA~DVuTnXstEc2<4Goq z%Lhf;dScS+<$k)reMQ&D>Gu%_2|VUCIVpv9gpSC(DnD=xiVtL?g(hm05>u@2)k1E_ zheCE&XyWcL(M#M-h{Pe{CZd9nCO(ly#k?AeO49Bpq*P)^X`r;KPZ*sE zVzuilJK=9=N|<)obao^(on*Tz8aVC5lVX18GSLgm|?RdG4nTdokZ6=ztd)NKL zx29;iY+ZG^Z`;1Y6Kd2CqLRl_EPO+$*Q*IR(DtZy-h_G zpI&-J%n-I#_#kb}hnE-IvtOz2FUfQp^UI59o=6)}!_nM$<2geck)+`)FGgcV+6WmD z&kx-x9Wm0j+=^IwYUO(~roD7=UR!q9a;#{~3|kt9eDZ7`*#H+*9$bDo_l|hTy}YG% zXGB{|=Pg_Nd(BfuOqOQqxFtc46C*lA7Y#b0u-Im$v(TcX;mM zQL2|nn#d`eQ6IBUZofs(xFt=^6$63e!+`T5$5M%uotkgg3!ddBlkv&095(aJf@97`Ei+L(R5%eu oW1T8E5ggyG$CuouJu&ycd#w88(#6>Sy++YI4|@u`)6K8_4|bZ1p#T5? delta 2537 zcmYk-X>3$g6u|L2(*+7$=rY{^dyBR}3#Bar1*H1|l$NEXP|A`A^Q66b_JNj)-@+n2xN6aJgl9U?7^i)15GiNH5hH03Ax%d#4;#_RRe;i8f##*ORJ7y`> z!1d?Tm3kOI!vg#jrO8wp;Z~J_xzbhsbVXI5n;+^i8Be3!coyel6kYfQ$^d@EVoc6d zDhErj5NlC7>O>j9HtfX1D9>F%9#yw6Tc&y^alw(L)Ixs9!cts?{G|FZ9|y4wN3jyG zq72|JG82_PM=Ac4=0gTjgDJQXNs8Kn6*z!(_$=;|RDVdN6-%;}YC$(1!m~)*s+j3X zMk-J`T853-f|BZ!*n@GDR2Op746H`UU>(W;nou&c2_=&~IGRVrLq+3LxB$mdI=+(d zI!c4Lu?v4jnL!;7Z^A>^gqN`yrFHq=kJ%{(}UH}MmGtl|3GnrHB9ls%QoXeISk zD0^ZB%0$;$xJ&+M|)5*H-<9P zmvIGNK*`V)N;@u&2HQoAR#G7wsvadJJ5V|tLD~JUqI7f`JMa=N#uQo?m!V{)AKAxh z7|ZcE%8XAZdre#9fNZIJIH?z7e2sl%;af5?m=nr8cND;BKu2ykL&R-Y{4d` zeGtb`Ch`l)Zck;pa?Z0++9|;qSdDUDoh|FXmC7~}{a^=^6pH&Bt6 zj}%$23}POUNo*n>EVKARR_#KP?4u}OYV9l2=}lDa{}po7l8BDPML9{khyfyt=%fGX zHyg@}MGDJnueoc=tfyTIQ?@sEZRoYWbmhiAcincZYuVi0 zyPvSx)eDin3ew*LnjHQ>hCl~3%re=^dX9ji1 z1@Pgip5yLPrd*5sXK5{Jix_*(K{ld9!t+{G9dL!jV|vqAkwY z@rqK1tKal{{%_Cl#-sjt)cUHjDwesV+}Yn6k6s-&v@skuf<8ls48P&kK4aM9H$xsh zXdI14gF4{lvK}_vMo_o5^)+>A_vA!;+$XoV&BHdm-);D\n" +"PO-Revision-Date: 2023-10-13 13:30+0000\n" +"Last-Translator: Alper Gunay \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13\n" +"X-Generator: Weblate 4.18.2\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} zaten çalışıyor" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "1 mesaj gösteriliyor" +msgstr[1] "{message_count} mesaj gösteriliyor" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "SecureDrop sunucusuna erişilemedi. Bağlantı yeniden kurulmaya çalışılıyor..." @@ -50,9 +55,6 @@ msgstr "Oturumunuzun süresi dolmuş. Lütfen yeniden oturum açın." msgid "Failed to update star." msgstr "Yıldız güncellenemedi." -msgid "Retrieving new messages" -msgstr "Yeni iletiler alınıyor" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "Dosya data klasöründe bulunamadı. Lütfen yeniden indirmeyi deneyin." @@ -65,8 +67,23 @@ msgstr "Sunucudaki yazışma silinemedi" msgid "Failed to delete source at server" msgstr "Sunucudaki kaynak silinemedi" -msgid "Download All Files" -msgstr "Tüm Dosyaları İndir" +msgid "No messages." +msgstr "Mesaj yok." + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s yazdı:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s gönderdi:" + +#, python-format +msgid "File: %(filename)s" +msgstr "Dosya: %(filename)s" + +msgid "Download All" +msgstr "Hepsini indir" msgid "Delete Source Account" msgstr "Kaynak Hesabını Sil" @@ -74,6 +91,21 @@ msgstr "Kaynak Hesabını Sil" msgid "Delete All Files and Messages" msgstr "Tüm Dosya ve İletileri Sil" +msgid "Print Transcript" +msgstr "Transkripti yazdır" + +msgid "Export Transcript" +msgstr "Transkripti dışa aktar" + +msgid "Export All" +msgstr "Hepsini dışa aktar" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

Bazı dosyalar dışa aktarılmayacak

Bu kaynaktaki bazı dosyalar henüz indirilmedi ve dışa aktarılmayacak.

İndirilen dosyaları dışa aktarmak için \"Devam et.\" seçeneğine tıklayın." + +msgid "all files and transcript" +msgstr "tüm dosyalar ve transkript" + msgid "SecureDrop Client {}" msgstr "SecureDrop İstemcisi {}" @@ -116,11 +148,11 @@ msgstr "Dosyaları görüntüle ya da al" msgid "Send a response" msgstr "Yanıt ver" -msgid "Deleting files and messages..." -msgstr "Dosya ve iletiler siliniyor..." +msgid "Deleting files and messages…" +msgstr "Dosyalar ve mesajlar siliniyor…" -msgid "Deleting source account..." -msgstr "Kaynak hesap siliniyor..." +msgid "Deleting source account…" +msgstr "Kaynak hesap siliniyor…" msgid "— All files and messages deleted for this source —" msgstr "— Bu kaynağın tüm dosya ve iletileri silindi —" @@ -171,6 +203,12 @@ msgstr "Oturum açarak" msgid " to compose or send a reply" msgstr " yanıt yazın ya da gönderin" +msgid "FILES AND MESSAGES" +msgstr "DOSYALAR VE MESAJLAR" + +msgid "SOURCE ACCOUNT" +msgstr "KAYNAK HESAP" + msgid "Username" msgstr "Kullanıcı adı" @@ -225,8 +263,8 @@ msgstr "DEVAM" msgid "YES, DELETE FILES AND MESSAGES" msgstr "EVET, DOSYALARI VE İLETİLERİ SİL" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "{source} hesabından {files_to_delete}, {replies_to_delete}, {messages_to_delete} silmek istiyor musunuz?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "{source} kaynak hesabından bunları silmek istiyor musunuz: {files_to_delete}{replies_to_delete}{messages_to_delete}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Hesabı korumak, üst verileri korur ve {source} için SecureDrop ile yeniden oturum açılabilmesini sağlar." @@ -246,6 +284,9 @@ msgid_plural "{message_count} messages" msgstr[0] "bir ileti" msgstr[1] "{message_count} ileti" +msgid "SUBMIT" +msgstr "GÖNDER" + msgid "Preparing to export:
{}" msgstr "Dışa aktarmaya hazırlanılıyor:
{}" @@ -282,15 +323,9 @@ msgstr "Belirtilen parola işe yaramadı. Lütfen yeniden deneyin." msgid "See your administrator for help." msgstr "Yardım almak için yöneticinizle görüşün." -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "Dışa aktarma sanal makinesi hazır olana kadar DEVAM düğmesi devre dışı görünür" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "İş İstasyonu bilgisayarınızın dışındaki dosyalarla çalışırken dikkatli olmayı unutmayın." -msgid "SUBMIT" -msgstr "GÖNDER" - msgid "DONE" msgstr "TAMAM" @@ -330,6 +365,21 @@ msgstr "Kuruluşunuz onlara yanıt gönderemeyecek." msgid "All files and messages from that source will also be destroyed." msgstr "Bu kaynağın tüm dosya ve iletileri de silinir." +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "{source} hesabından {files_to_delete}, {replies_to_delete}, {messages_to_delete} silmek istiyor musunuz?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "Dosya ve iletiler siliniyor..." + +#~ msgid "Deleting source account..." +#~ msgstr "Kaynak hesap siliniyor..." + +#~ msgid "Download All Files" +#~ msgstr "Tüm Dosyaları İndir" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "Dışa aktarma sanal makinesi hazır olana kadar DEVAM düğmesi devre dışı görünür" + #~ msgid "Entire source account" #~ msgstr "Tüm kaynak hesabı" diff --git a/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo index e7d42b23d40a7093be7993760cd1c9c5d8dc0b1c..aa0e4ffe41b9d333a3f83fc81de6aa37c92e52cb 100644 GIT binary patch delta 3358 zcmZvdeQ;D)6~ONj2uTQm64E54$Rm(1J_13i2q_^XDbfT&*+8jj8a5k)l_^e#;ZnzWH!)_?^e*@>kkD)l2&0sG3t5Otf zsufT?ZiM3TBX9x?LUC+2oCo*8W$+wqg-KWk*ATW^co2RKegMVp>gh@m1m%PhK{u2L zx53CNly9I&ZbqOJ-iETlL&S9=d=5&;UxebwaVRG}10|#vAU`$CgQe<2sKF#Gf*FKE z9GGu&1r)mtcN710C{6}s!&9&kUWPTWlnPl5y-*x{14;=04!;Ns2-7OK0m{1Xz{lWK zC>vH4Qn0WQ$^o`OOe+^$40jh2|EExXz<}hin8Zjetbt{4J6r}2K?(gYAhy*%p;Ui1 zkGZf6&VuV;F>Hqvy)xhz;1T$)gBpNx@^4eQ;@FW0iiGHUP(1q?ln{Po^B?e!EKJ9% z(=yI3_h5Oirqt)@pJ1_s{`ZhFP)R5$xn&^_Its;5 z6iOt1ZjZ;I6sLpZ%DfyX2IfJDKqU`xXfwoT^&FJ>eKs%Hykzrtkc$veAE8LDZa~@a zzcyzQM=?+Z<%DY?uT-nue+KeX$9Tww@7m*6A%@i_P}ZlHSO?05;&6%0g|I~K|56kw zh89>455m>(Lz{VA@@D#5pcw48ISA9~zi;<{3uXNko3kk($^8yU@YHvq%)eywmoSt4 z)dwhI__F;X38lzxKnh(=EVm*v3rdl$gff4t&2}h;zYeQm7nDf-1j@k@P;N^;6?`9T zg5ubI7{OUJj3POWLD@j=*q1;Ntc8z4Nzq9t8@~xN;Ruw}ybmRHe}+5Zr%>#+FR<($ zhGO@Ja3TBy6bBs(iN6>qVN|NW3UU*b6UxckAqB7Y!*TF5Tmt(bm%?nao>Z$1R@ZdA z4P6|PCXR~@vD<(&A?pzNfJyzShk^X_Nrq)B2DT$;{|I4LgH%aMQWCF6?9urg{HC8{OR#=MplxlqpksP-m)RA%_@bh%?ZxYumj(J*4gO`h1!{5Z1Qon!bByAQ;v?Rg2n|tW24+Js4=$!fjrR z20DUnU2Ahashf-T=(14vYo5R^zc1kO=$-|d%kTNWW-F?;1+_&htF~1OngjNJSk^Un zM=*%PzC9_HEDslGZlBlvgjQ4=@Q1zr4!xo%x;g7?+Wc#sXH=c;(;3_`=9tUv4s`g# z<}2GHt;XjwDsu+%psF`ds5J*&{*XK9-5EAM&RKld+QxdPR zpMB+em%(84_>3!#NbF)~Z18yENOx@Lt;ErjiRj_@`C(R>HDJFyaeB1-Y@+}5+DSqeLp$Wf35RG)IYN>ts!w>KqdNLi}&`$51hRI%Inse z_=^V)cggt4}$JzEZJy1;3p7m7|f(rrUcb8k%lY|6F7iBra^;#t|L z{zV@ze$^4ZzjU`_!rnfDWN76NY8u<$SsiK(2UMP`rgo8Z=-CULdljR!c=w)A3DB zWy123lbM%wkO0%vrm1PVIMdi@HKVe-Xikp)r8a8c-|{-+8J_)|_uY5Tm`)Gv`K;ZYNb(dw#GYsDmEAzzHdP~3xh@BnthqZo_7pa$T>cnp2Yn2y*3 z<8UylqfFEQreY?(f%@GUf*7$iEs`NPg$y2~@|iOyfyR zM9p9jY6)JzftZV0qW4g1x)+o1EWV95Py;Mx9hCAq6v*W{Kko)RNstbv%U8>G_F{ z*{B!TbmzJNmATijv(CSVie|nYnY5`xb@Yd$57ppp9EEq0zDyd^(M;yyP~3#i;rFQL z?xO}af|m+^rh*SGQ4Ok}dQ78#bCF6q#;}F8`)8pBP>dRRC29#gsDW-peqxTJ8vGO0 z;2m6q@qO9QxE3|gI@D&pgzRT?8#y2*f}^4RXA-D{;5ZzN6Vavngf`~{LQ6D-c)X}{ z&3FzGO7L0;9#_T@JT3BA?Jw&!GR-Hyi3WsiY7c2=-a<>}r#Z zBnA*!gqBJ#Bkhqv#5Cejnfj=Lxx`E&lh8(FRf8u4f+s*m4dJ7oYLpQ~8~bkCd~a3w zLzg!#VxQZcnwn}~ZXeeP&A9TaveNSTh1QtTQfop?AJY0><`<=%sxAGqwq_(fq> zRe5D;p?$1Ng}picRc}PscS78QQU}``y5)Gox?gm8*I2{dnZ8XYjDK5ob7P%v%Lael zTK~$!zO}or?bzE~e@GK*y$Cd%YHny~IliCAoiCc}*SDNJ>0h_PU$d^Y0Xs6G#y*>n zVn0k+WA93Q-5cF|x63}=C*byPJ7PB`_3#FgK5>l-G=3gvJmlZ7?%I~GnwxgEe0DIf ze`VmK12>yC1a=+wtv%v9+~lin2<%+dvSX)zeXYNy!B@S;x3}7N\n" +"PO-Revision-Date: 2023-06-15 05:56+0000\n" +"Last-Translator: Kishin Sagume \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.11.2\n" +"X-Generator: Weblate 4.14.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" msgstr "{application_name} 已在运行" +msgid "Retrieving 1 message" +msgid_plural "Retrieving {message_count} messages" +msgstr[0] "正获取 {message_count} 条消息" + msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "无法连接到 SecureDrop 服务器,重连中……" @@ -50,9 +54,6 @@ msgstr "会话已过期,请重新登录。" msgid "Failed to update star." msgstr "未能更新星标。" -msgid "Retrieving new messages" -msgstr "正获取新消息" - msgid "File does not exist in the data directory. Please try re-downloading." msgstr "文件不存在,请重新下载。" @@ -65,15 +66,45 @@ msgstr "服务器上删除消息失败" msgid "Failed to delete source at server" msgstr "服务器上删除线人失败" -msgid "Download All Files" -msgstr "下载所有文件" +msgid "No messages." +msgstr "无消息。" + +#, python-format +msgid "%(sender)s wrote:" +msgstr "%(sender)s 写道:" + +#, python-format +msgid "%(sender)s sent:" +msgstr "%(sender)s 送出:" + +#, python-format +msgid "File: %(filename)s" +msgstr "文件:%(filename)s" + +msgid "Download All" +msgstr "全部下载" msgid "Delete Source Account" -msgstr "删除线人账号" +msgstr "删除线人账户" msgid "Delete All Files and Messages" msgstr "删除所有文件和消息" +msgid "Print Transcript" +msgstr "打印记录" + +msgid "Export Transcript" +msgstr "导出记录" + +msgid "Export All" +msgstr "全部导出" + +msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" +msgstr "

一些文件无法导出

一些来自此线人的文件还未下载,且无法导出。

要导出目前已下载文件,请点击“继续”。" + +msgid "all files and transcript" +msgstr "所有文件和记录" + msgid "SecureDrop Client {}" msgstr "SecureDrop 客户端 {}" @@ -116,11 +147,11 @@ msgstr "查看和获取文件" msgid "Send a response" msgstr "发送回复" -msgid "Deleting files and messages..." -msgstr "文件和消息删除中..." +msgid "Deleting files and messages…" +msgstr "正在删除文件和消息…" -msgid "Deleting source account..." -msgstr "删除线人账号中..." +msgid "Deleting source account…" +msgstr "正在删除线人账号…" msgid "— All files and messages deleted for this source —" msgstr "— 此线人的所有文件和消息已删除 —" @@ -171,6 +202,12 @@ msgstr "登录" msgid " to compose or send a reply" msgstr " 编写和发送回复" +msgid "FILES AND MESSAGES" +msgstr "文件和消息" + +msgid "SOURCE ACCOUNT" +msgstr "线人账号" + msgid "Username" msgstr "用户名" @@ -225,8 +262,8 @@ msgstr "继续" msgid "YES, DELETE FILES AND MESSAGES" msgstr "确认删除文件和消息" -msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" +msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +msgstr "您要为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete} 和 {messages_to_delete} 吗?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "保留帐户将保留其元数据,使得 {source} 可以再次登录 SecureDrop。" @@ -243,6 +280,9 @@ msgid "one message" msgid_plural "{message_count} messages" msgstr[0] "{message_count} 条消息" +msgid "SUBMIT" +msgstr "提交" + msgid "Preparing to export:
{}" msgstr "正准备导出:
{}" @@ -279,15 +319,9 @@ msgstr "密码无效,请重试。" msgid "See your administrator for help." msgstr "请寻求管理员的帮助。" -msgid "The CONTINUE button will be disabled until the Export VM is ready" -msgstr "继续按钮会被禁用,直到导出的虚拟机准备就绪" - msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "在工作机在外的地方处理文件时请小心。" -msgid "SUBMIT" -msgstr "提交" - msgid "DONE" msgstr "完成" @@ -327,6 +361,21 @@ msgstr "你的组织无法再向他们发送回复。" msgid "All files and messages from that source will also be destroyed." msgstr "此线人的所有文件和消息都将被删除。" +#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" +#~ msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" + +#~ msgid "Deleting files and messages..." +#~ msgstr "文件和消息删除中..." + +#~ msgid "Deleting source account..." +#~ msgstr "删除线人账号中..." + +#~ msgid "Download All Files" +#~ msgstr "下载所有文件" + +#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" +#~ msgstr "继续按钮会被禁用,直到导出的虚拟机准备就绪" + #~ msgid "Entire source account" #~ msgstr "整个线人账号" diff --git a/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.mo similarity index 100% rename from securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.mo rename to client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.mo diff --git a/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po b/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po similarity index 100% rename from securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po rename to client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po diff --git a/securedrop_client/locale/ca/LC_MESSAGES/messages.mo b/securedrop_client/locale/ca/LC_MESSAGES/messages.mo deleted file mode 100644 index 303dc113df28a82a1c07e9526d24cbd66c824e0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13062 zcmbuFdyFL4RmRJ)lQm;4^&AULFJ|UlasyyDbRL@_GA}LGUK< zW8mw+KLhosuYk9L{{ntH_?*XEU&WmG{08tA@W()1_mklFfbR!i3w{#Ry!OHG0-ptW zWbifcc5sSG>N#%$_53%3?*NxU-S;7I3j7?Xb^IZy_5P**{1yNCKf%{<{uVBp244r> z0iFe!au9;w2@b&~_*0;+{{r|H@b5s)?>0_qozoyg1`mLm?;@!AJ_5cN%s|a+7ko4L zUhow7Ti_M&tKd9%p26n8p9LQSzX)pFbKemJm>_6_vR@a}bGN~V!1sXi%kP72@N1yP zzkpF+3jPczdw&4bJboF}IzI}^o}U5v7kr*S+!}ldG~idkW8keAL(hMU#|J=-`wnmk zY=e5<)8HcbS6~C2h8*X>7}Wee0m^>=3f>Rij*%V$S3%wPbKnnyUk3HO)31lC;3BB` zUj`XE2*J04yWn;3PcY zo!~v-1yH=a4r-o14eGuRgR;|afU?t{gR;|Y3?_cu56WH(ATA58fS4}W0kzH#fa2lD zz?0zT!8-VF{`?!K9e+-O;>kKFyL|*a0sbzCX@Y+SF>P=wlhOEhf{NR-pzN~*B1J(8 z${u?lj|hGOJPm#VjKF^a*T5APeF6M1Sb)!g8aHNfTE~xrw}8I_YW`1yE$}lQ|JP#+ zvi<<)KM1}W{4%I`{C80I-Gq^K{LY-g@ z)bn;h-T$i~bPxUjJO}QBH-UO-KDuXBA9%f;W1B81GBTx8F8aIA1FacKT}UE)wo z+^-M3Ud?gEzH@&b0)C|OS@x8TWH0DuU*cBzy1*OFQE{c$WsWTl@v?kjPRpAOu;Wik zAKvEQ3*_e>$2^C)1C^{VUJBmEp_jO!7jCnBm5uaz7l-2GVGg~-@db{TaL8Yn-SPzp z);ZqEAzteRMXdJU2mTPpD>!cDC|^_lO$;jL^pX$dS8=X%XtdwMeaUWx~C=J4y~oFE+Ri?9xsIZkmH z4!tgNyv)AikC|V&w7j^|n4i3BEuS}m+04>`$)oIAl$jzmQ4((SBa=nLejMe2PIc44 zFwG;AW?Yx_OlZH|3+}pGAEWG^T<43~>WQ5!Euz`r^!CX!OJNdj#mSZ#W^q!aqrzly zelZ1A0+zLWbUnHcZ&-Wl^3-T(Q9gnK^!DIkL0c8%8Eh?1kwtN)BFa zr`HV=Gaj&;CPf%0QBOD7hx4|Vc1Htdo12}u*w$={@Tz8)N8M2t7kgY8b;D5+r%7Hn ztxdC+j!c+EW|ZV3U_0HBQ3hI7WQy%Lx9gcP!+sQECHvHFq1!UnGKiBnFS4*mv$|VM z`S;AK?19yLX;E2gBVh_*R+w}XOPA9g>S2R$&kfId;vS2LH}^F4IN40IL8vM7{#u;J zav_r}wj+~-S6Ozn7tNS_)ZI2=?gw=buA5aqZ`Qau>i6vJiFw#=Po)>1N@ ztUVlU^y7Tn8V|$E(4~v>x^;a!9Ykg`?&IB^xZgKPT9}Qc(_W+-nL{t#N&0Eni+VGTFh>k~z|I{gZ69Zifr~Tj#v&&Jxe3mgZa?l` zHOJ;)O`MFP`Z2qNbum0IL{3@LQkSV<@Nykmzg=U==%ui~gE1%c?Z}R@9^+Ui^&|Kv zURfGD16lq>{k<{gD&OJP5HoD!69wZ4)@b>ACK_x+J&XZ0>@zJzau^&k-PCcgyhAQa zqC)c+KjWL=wRNqvf#y4-(Y|r2HEFJpXFwu$ah%mA0Hr0}TVGkRM9mfdSL_%aE zCc_b1XmCB4Us-PQ$LFB=h!BX3tmSy1tCzgB0{?B>i9n;mECD&~)NuXYSs1vM|ZJSv)MtFE>MCsaJkN<-1rCE%#@5@~pZ3c%b#RO=Ef9EH&Hh z#`$JDSg?1B8E$O~X;N+OWD3@~!r;d1N+Ta}g^Gg84Wl7}8X2T7s|Rv6(n~~GbM2BE zm7K*m8_vC$G>P&QdTqYcGaOXf4{L0NI`;(y>Kw@EmqrCi{D;*7@LEiwW~6GLMcJfNXU~u)5Y- z?gXo2zXoNV^$}vN!8r3!#lRRZ7lOg@ad@n+l&mHNfKL*ajElD8P2x-g_{*%D>kn6ti~ z$%oWld9l}z9z3>54z2A(@z!=Ro2WGDA3JmX@zck3&6$IPSPQ(MF+@!}6UgI(-BlSG z$w3toIkwCbu2|5@!i~7EDo-oD?pXY|7Sm5vN9mn)Ohx~^fUT-pGnL@8Co};ceiue@ z5v(cmh6lpPp4b$Qgat2 zgK29~k;Rd9z=<*(swc1e5V>N-`|1uvl$7 z3UlvKlQ^ROfVGKo2KU-31)C9!cKd^w$r?^p>vc`RZ92x*_7OTZsd9>sYF%3~o)t#b z(|E$BC|504a#7_zp98Bq8@qR&sEJMTP#{*VOx=oxPaaIoU~4;73B*~cUFb)dU1nI< z5GymFdsgl@JxH=EAZ);D#oC{DsbYza7(X1zr17%dC{qJ=hQ82Dm17`%60x~G=zd1$ z#DdE*bF3m*Z&NlcEG)LD=+=E|3NFUnil!pI(gnZm3odEns36e9SZFEKlHYLl(TCWu86?fwC8FSrtDGr`2tyeia33KnW>NLtMa5i|P*`6`; z&BbP?X_^$#YfW=Vk*Zf5QBFO=v;NOMOl>k!s$nk7u+~s z)=?}{B_-nxEDzY;_#5esNN<#Yu_=Mz`RQ|*rzi=%QpD1ND62-51u|w}OE^{UDy?o{&6uq>=U@;v22tiq|E@ie)fr!wZ)VNH z`r@KlZY(v;>E=?SwfInDetwNw`V5yQTO+o5wN4ZcCbK!cT@=H7_V{rcTZ|FabDPV0 z?5pay|2TT1mE^}K=PPe(v?Pd|9tW zTO1$uDT5xc`kF_@gX^7z+NsHP;=^W?)tU*?gg<7@sg1apTJ4Vz^4bEF&8dKg_GA9w z$p`3f>6-@=bH{_`!~;{8Yv-c`(YJ=VUNTa<-T50Wmqlg6XIh_ug9(@hGmbWCTk+GX4h(Uog)c(C`V zv$~P9>OY=mcOCD4T937@x^9ZxOveMdB!toar^~ht+6GJM9>%ooNGNPl@YGF= z)RZXl5L{f>arG3|$>`jjndXxK4(bp|+;B(6M!q&bp zk(B4#l3f|!w<{3^T9Y$;Rdy*!0z8miAt#DZ(;v{gVXz}-M9zn*BNm4()plWLSy{c# zvepfx53``X>QGYdmTR(Bbsl<@9-{A3Hu_uic9FzlSCx>AJni;2OeC@NICM#G+C4Nx zo+wAz_G`-a#%(lcBaC-LNExMX|G-f*XKrzbRj{1TK8$Hx=S^ zCc|fb&vjRuig<`+Z zbCda%yb3o_N^7W+($Qn1c*w=wa7cF1@Jt26L(3vgt3p{KiLZ=uz%q;6Qbb$CVV{eg2>2&ik+6+V=!LzITz)dpzF2z@3P}_RS0c{* z4&ek!zbHr`CPvC)1%JO}9LkmE&O6?WsNSeg<6OI~{xrlyqI%O~0$4e8o(eih6(+Y& zK&(bFaYyYW$;5nvm@aCeHmY;4Vop0b=w^*TwC(?n+5fn%wkOc3XmmDcPs8K=rx+GC zX&x-K+Yd(?W;fm>b!|nyY5L4(7aL{cw81u3xkd^)ZkX~xk~h&tb!*fK%BM*;!*q)u zlEN&DH^i?>dXvQ_6-nKwCrk6i+1)xNoU&V&U4Wn6*yl7+Y{s^U=+= zk=E=4=aggT8$o*{3Pe#q_ zq9>7cnd}W?>dJFc!$3Qn21i!H7;KlTx+5%BlXe$8z*rw0ye4dn(WEoGP@sD z4sJSiE@$sQ>Y{NyEu9P=CKD*>z_C(#?fJIY;kCHnQT+OZhUxdmi2>as`2E!NXl0+a zX_=)KJ=%_%w3We8S)4QWqGh!2*j8!x|J-7eR)wXN%Ml=}QrTf{cMIe?F5V5lSt2D` zpVoCn+vEeabD<$)FnHO@jb+uI&9-LMQQxLFYSlgoD}m3lhq}6Q{0)8G8`&`Cz?3Z# zLoetq8N2Q-dVau>F5Y`#u>YZcfk0~`=GP-X&C=J3pZ7a9DsyC*QijyBFZ2C&O!2DP z)X!v~S}V+g))MXCrDp50esC%2RsQ(mg1;gqq8u7RPa4jNpKPjG0VflxA&RYhMAOxk zb|qC~*wnMO^$p-&ibPj$c64THj?a~pNWks;qx4BwL21T;J z!T3fwqVg>pch&i+9BFLRZ{AI7blS2WHgYvSzY>PzT%~JQcPmS=@2J-Pl!uN%-dwh9 zBZ2$$j3kbHf~J$~bG`ePVJqL>(2pqVf}pkBnrk)8VuN(jZnyS77 zTTv4J5g{q2T5<6&PRVEfgsE$yDrL|>TZiIjw&^NVlg3A zcj(*D+T>v_x!fwU%RYTIkJ$)WpU~AxB5i+CAaTqLFmGR;~R+pAYE3x&gweoDm z-2HzS4G-P*D22Rn4^kAUK8ted$t>f+n$I-~W%4LjNvjcbZEP7kSB8yfU^Q&bh3F%H zo1;Wa(H?bN-uR4pROzy;Y)zz*k_*+GN-5=bs*;TB{JPwWnUu3o1WjyXTi9W? z|CDWE>$kY)8`+9weX6Mv1=VEI)=vC~h;*RBk^c4m$FjKlb;qcR@qyVLkZHTs!Qy+l zdfP|N?i(o-+tVrqA(dvDq$4%9AD&bhq1$BQBeB$#dlddQzsmOhCKX9l%W2O*GuHk- z7#ECd%jRqQPxWJHsbceBnQ0AXciEPqTrY*BrY2vK9kASCsq{?;_CV4=4XkZ88_WGq z+Go+W>|3eBuLp{IHM@QDM}&kTmZ{oBbI*8J@AaipncC4+kq}|F18z69TATLb6>|FO z!_4+uyv3uHo-;8Om`#Q!n7mb(8HvfZy|1NRpdso;WEL`UhJXzLqL=*Sv)TJ|; zkK?$fA5SK9`2LdiZtNsak6^;%p@@#>-OPpxu^S4{qjet^tE?zlP}6, 2021. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-19 13:30+0000\n" -"Last-Translator: \"Benet (BennyBeat) R. i Camps\" \n" -"Language-Team: Catalan \n" -"Language: ca\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} ja s'ha iniciat" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "S'està recuperant 1 missatge" -msgstr[1] "S'estan recuperant {message_count} missatges" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "No es pot arribar al servidor del SecureDrop. S'intenta de nou..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"No s'ha pogut arribar al servidor del SecureDrop. Comproveu la vostra\n" -"connexió a internet, la del Tor i torneu a provar." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Aquestes credencials no han funcionat. Proveu de nou, i\n" -"comproveu que useu un codi de doble factor." - -msgid "That didn't work. Please check everything and try again." -msgstr "Això no ha funcionat. Comproveu-ho tot i torneu a provar." - -msgid "You must sign in to perform this action." -msgstr "Cal que inicieu sessió per a fer aquesta acció." - -msgid "Your session expired. Please log in again." -msgstr "La sessió ha caducat. Torneu a iniciar-hi sessió." - -msgid "Failed to update star." -msgstr "No s'ha pogut actualitzar l'estel." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Els fitxers no existeixen al directori de dades. Proveu baixant-los novament." - -msgid "The file download failed. Please try again." -msgstr "Ha fallat la baixada del fitxer. Proveu-ho de nou." - -msgid "Failed to delete conversation at server" -msgstr "Ha fallat la supressió de la conversa al servidor" - -msgid "Failed to delete source at server" -msgstr "Ha fallat la supressió de la font al servidor" - -msgid "No messages." -msgstr "Cap missatge." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s ha escrit:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s ha enviat:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Fitxer: %(filename)s" - -msgid "Download All" -msgstr "Baixa-ho tot" - -msgid "Delete Source Account" -msgstr "Supressió del compte de la font" - -msgid "Delete All Files and Messages" -msgstr "Suprimeix tots els fitxers i missatges" - -msgid "Print Transcript" -msgstr "Imprimeix la transcripció" - -msgid "Export Transcript" -msgstr "Exporta la transcripció" - -msgid "Export All" -msgstr "Exporta-ho tot" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Alguns fitxers no s'exportaran

Alguns fitxers d'aquesta font encara no s'han baixat, i no s'exportaran.

Per a exportar els fitxers baixats, feu clic a «Continua»." - -msgid "all files and transcript" -msgstr "tots els fitxers i la transcripció" - -msgid "SecureDrop Client {}" -msgstr "Client del SecureDrop {}" - -msgid "Quit" -msgstr "Surt" - -msgid "Last Refresh: {}" -msgstr "Última actualització: {}" - -msgid "Last Refresh: never" -msgstr "Última actualització: mai" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "TANCA LA SESSIÓ" - -msgid "SIGN IN" -msgstr "INICIA LA SESSIÓ" - -msgid "Nothing to see just yet!" -msgstr "Encara no hi ha res per a mostrar" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Els enviaments de les fonts es llistaran a l'esquerra, una vegada es baixen i es desxifren." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Aquí és on llegireu els missatges, respostes a les fonts, i on treballareu amb els fitxers." - -msgid "Select a source from the list, to:" -msgstr "Seleccioneu una font de la llista, per a:" - -msgid "Read a conversation" -msgstr "Llegir una conversa" - -msgid "View or retrieve files" -msgstr "Veure o obtenir fitxers" - -msgid "Send a response" -msgstr "Enviar una resposta" - -msgid "Deleting files and messages…" -msgstr "S'estan suprimint els fitxers i missatges…" - -msgid "Deleting source account…" -msgstr "S'està eliminant el compte de la font…" - -msgid "— All files and messages deleted for this source —" -msgstr "— S'han suprimit tots els fitxers i missatges d'aquesta font —" - -msgid "Failed to send" -msgstr "Ha fallat en enviar" - -msgid " DOWNLOAD" -msgstr " BAIXA" - -msgid "EXPORT" -msgstr "EXPORTA" - -msgid "PRINT" -msgstr "IMPRIMEIX" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "FITXER XIFRAT AL SERVIDOR" - -msgid "DOWNLOAD" -msgstr "BAIXADA" - -msgid " DOWNLOADING " -msgstr " S'ESTÀ BAIXANT... " - -msgid "Earlier files and messages deleted." -msgstr "Fitxers i missatges anteriors suprimits." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Fitxers i missatges suprimits\n" -" per a aquesta font" - -msgid "Compose a reply to " -msgstr "Responeu a " - -msgid "Awaiting encryption key" -msgstr "S'està esperant la clau de xifratge" - -msgid " from server to enable replies" -msgstr " del servidor per habilitar respostes" - -msgid "Sign in" -msgstr "Inici de sessió" - -msgid " to compose or send a reply" -msgstr " per escriure o respondre" - -msgid "FILES AND MESSAGES" -msgstr "FITXERS I MISSATGES" - -msgid "SOURCE ACCOUNT" -msgstr "COMPTE DE LA FONT" - -msgid "Username" -msgstr "Nom d’usuari" - -msgid "Passphrase" -msgstr "Contrasenya" - -msgid "Two-Factor Code" -msgstr "Codi d'autenticació de factor doble" - -msgid "SecureDrop Client v{}" -msgstr "Client del SecureDrop v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"No es pot utilitzar aquest nom d'usuari.\n" -"Indiqueu un nom d'usuari d'almenys 3 caràcters." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"No es pot utilitzar aquesta contrasenya.\n" -"Indiqueu una contrasenya de 14 a 128 caràcters." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"No es pot utilitzar aquest codi.\n" -"El codi ha de ser només numèric." - -msgid "SIGNING IN" -msgstr "S'ESTÀ INICIANT..." - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Inseriu un nom d'usuari, contrasenya i codi de factor doble." - -msgid "USE OFFLINE" -msgstr "USA-HO FORA DE LÍNIA" - -msgid "Show Passphrase" -msgstr "Mostra la contrasenya" - -msgid "CANCEL" -msgstr "CANCEL·LA" - -msgid "CONTINUE" -msgstr "CONTINUA" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "SÍ, SUPRIMEIX FITXERS I MISSATGES" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte de la font {source}?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Preservant el compte es mantindran les metadades i podreu iniciar sessió novament a {source} del vostre SecureDrop." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "un fitxer" -msgstr[1] "{file_count} fitxers" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "una resposta" -msgstr[1] "{reply_count} respostes" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "un missatge" -msgstr[1] "{message_count} missatges" - -msgid "SUBMIT" -msgstr "ENVIA" - -msgid "Preparing to export:
{}" -msgstr "S'està preparant per a exportar:
{}" - -msgid "Ready to export:
{}" -msgstr "Preparat per a exportar:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Inseriu la unitat USB xifrada" - -msgid "Enter passphrase for USB drive" -msgstr "Introduïu la contrasenya de la unitat USB" - -msgid "Export successful" -msgstr "S'ha exportat correctament" - -msgid "Export failed" -msgstr "Ha fallat l'exportació" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entenent els riscos abans d'exportar fitxers

Fitxers perjudicials
Aquesta estació de treball us permet obrir fitxers de forma segura. Si obriu fitxers des d'altre ordinador, qualsevol fitxer perillós o perjudicial podria afectar el vostre equip o cap altre de la xarxa. Si no sabeu com manegar aquest risc, imprimiu el fitxer o bé contacteu amb el vostre administrador.

Anonimat
Els fitxers enviats per determinades fonts poden contenir informació amagada o metadades que us poden identificar. Per a protegir les vostres fonts, considereu la possibilitat de censurar parts sensibles del fitxer original abans de posar el fitxer resultant a l'abast d'ordinadors en xarxa." - -msgid "Exporting: {}" -msgstr "S'està exportant: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Inseriu una de les unitats d'exportació proveïdes específicament per a la màquina del SecureDrop." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "La unitat no està xifrada o bé s'ha produït un error." - -msgid "The passphrase provided did not work. Please try again." -msgstr "La contrasenya que he inserit no és vàlida. Torneu a provar." - -msgid "See your administrator for help." -msgstr "Contacteu amb l'administrador si us cal ajuda." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Recordeu tenir cura quan treballeu amb informació fora del vostre equip." - -msgid "DONE" -msgstr "FET" - -msgid "Preparing to print:
{}" -msgstr "S'està preparant per a imprimir:
{}" - -msgid "Ready to print:
{}" -msgstr "Preparat per a imprimir:
{}" - -msgid "Connect USB printer" -msgstr "Connecteu una impressora USB" - -msgid "Printing failed" -msgstr "Ha fallat la impressió" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Gestió dels riscos d'impressió

Codis QR i adreces web
Mai introduïu i obriu adreces web ni escanegeu codis QR presents en documents impresos sense prendre precaucions de seguretat. Si no sabeu com gestionar aquest risc, contacteu amb el vostre administrador.

Punts de la impressora
Qualsevol part d'una pàgina impresa podria contenir informació identificable, invisible a simple vista, com ara punts de la impressora. Tingueu en compte aquest risc en treballar o publicar impressions escanejades." - -msgid "Please connect your printer to a USB port." -msgstr "Connecteu la impressora a un port USB." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "SÍ, SUPRIMEIX EL COMPTE SENCER" - -msgid "Are you sure this is what you want?" -msgstr "Segur que això és el que voleu?" - -msgid "When the entire account for a source is deleted:" -msgstr "En suprimir el compte font sencer:" - -msgid "The source will not be able to log in with their codename again." -msgstr "El compte font no podrà mai més iniciar sessió amb el mateix àlies." - -msgid "Your organization will not be able to send them replies." -msgstr "La vostra organització no podrà enviar respostes." - -msgid "All files and messages from that source will also be destroyed." -msgstr "També es destruiran tots els missatges de la font." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Segur que voleu suprimir {files_to_delete}, {replies_to_delete}, {messages_to_delete} del compte font {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "S'estan suprimint fitxers i missatges..." - -#~ msgid "Deleting source account..." -#~ msgstr "S'està suprimint el compte de la font..." - -#~ msgid "Download All Files" -#~ msgstr "Baixa tots els fitxers" - -#~ msgid "Print Conversation Transcript" -#~ msgstr "Imprimeix la transcripció de la conversa" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "El botó CONTINUA romandrà desactivat fins que la informació no estigui enllestida" - -#~ msgid "DELETE" -#~ msgstr "SUPRIMEIX" diff --git a/securedrop_client/locale/de/LC_MESSAGES/messages.mo b/securedrop_client/locale/de/LC_MESSAGES/messages.mo deleted file mode 100644 index 6e4ecc735ff0e62e36fd4d13be1a8e2208dee43c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13589 zcmbuFZH!}AdB;zHkT3*Ffi}FAo-9q1z}U-%(592kZag!d-O0|&uI?!hIERq3&O1O^|DE7Da08U*eh-`jzX-}c{vMS5{&V>Jjqv%q;On{n3I^Q=-VNRZ zo(2)wMBq_Fd?)xT z;KSgbgIB|-CR+l36Z~cHE1=A~_(o$;foX!GzcwiA_Q1!$4}oHrzX6-z_d%Ke z0!qCD{1_yL6Prspy==0;Ln3^LP?K-=RtYyli>TnuYt1O$v4AQa19js zp9GoOMBux@r@-srpMYY&dohae;0$;_*aaU3KMsoCzXUS1`3@+&zl%RV1Ktn*G`J4l z3l6}Sfxiv@9QY~lv$tV?5SK6mNGo>P10MjN2Is*qfMS<_4fq}KH<;)Sg!(S`KWUBm zFFrqwu#fZkDHfOY4nX1ae}FRoYq%+Px*HUKJ_d??PJg_y+hM@P9%6nR%3mNz4|ADa{C!bv_0j z1OEWL1N>W1^ztQe0sJc10$+=9dte(BK7JWo1mD8u#^C!vneVHh?C0M=neY1`CN;Ms z^cnCTQ2Z|jFN2>C_wTHD{+$na2^4;AgCb8F@CGRRei{@%`V9Ce_?KW6{BKbF&hkO@ zdmOwItbwxLco*0Jg%?*qvBQVJ9Q+GVcz7>2#V=Mt@zVtS1@Ku=_Vaa6^!E0Lyx%N< zsN7rz<+)!2p}6@|5W1T$gCgHQg13S45_Oy{m+bF~zVm+`1KwZye2MpB<5OJsh5I67@w&hp;mpg!jVHk!F4<@CLj4+l zx4~ApDe>XG;k^Kq)Lgd=KF%e2X>;AdCAycF#2|TLUbV02NM0Y{dL!3aE_vaOW`*mO zTz7L}PPHeXJQ2>kMLzI?S{nONv2y1%pm3{r2~Xt}a}k#GCAP+t>P!BP_m5RR+|Jc4 zZh|MdYT@%ErTb7%eH-d%48f(8qpuHR94MSw;#%Vp9vtJ6d?2qka0zD)zh2D^+)rQk z^H=yTvD|XW>j|z`={x?|<;{y5Yn!#@>ATg9GuGH{Ivm){rB_{Q^PzP~wB2_$b)$al zG9$Oz!@+2nIXg@lmvn5T-|m}x@0X7*eIS$j`9k@|UOLR(f;riH@YH&gL_2Y^V@GM6 zUABP9EpGliQ~*G+3bHG8-}Vp4+xjr<1xYbBx$#Kx&Vl+Hfk}{>a%l(SgH} zOJ+x_ctykoVT4}dptne%r38}5lx2C^$>^In|ke&+3{?;^CMtG07_EM+f)IEk}7jq+hy z^_waFo;ol3K&^D*(BO!+iu^@+icwK*(eK>`h~0Ze2|+xcE|m`E|D=kbSO4w_j;o4VXB%E z#fi2@bTClC(IGk&gi)XrFA(~1}09?8=IU?ef|P%*zdzwz={xKip@tqd5oa938rlB7b%Sl!K^ag(*HnsRFgQZoq32-ngqSRG zxyUhD<0bG~O{+Q(dFN%eADrs7WSHy^@UE#+R+JXmc$?dB!EWzcZ}n`J=Ou2lWG`mB zi5<8+>O^^jJW*cw0`Ur>D(m;fW2+Y9k0cNk?idy*`>JPp>N-&yvjK|Av z5p-B#_X#s2dZA%hUxVe|p2C;`aSX@Je2`UH1GCi~qJB0Me<1qh>2Tk5cph2_F*MYu zD+qODlX7=2O7hdDwim@Jt4rGH{zw_M>-No3ZDXmvW|lTLTB{pdb+Z)Wc8J$P2=1xS zcB{EqgaPi2`yF*NcteB`o;M{Ly5)2@3b|n#CwdMy(dag}D)9?_s4KQSBSa?>h}2_J z46#EDuA1e|jXHlq4qA4&fU}}4&jT5~9<*h`w@n`eYVG!LoaFxQ)I??dzVP8^r(XvR zNB%MWDg+H#&(t@T8kf$u>dSUzb**kUH*B-sc%t4g^(W77Hd>}0rDVSJC@XeUYOGWz z0&0B3c4mZ6otWfHsw4`Aw3I`k)K!Xb&0hR03-;do#nF;z;2y|yVqZc`d@fjPP8C|pDrPld zS7l>~Gk9&UMF`YzT?&xi0-la8%~}a! zDB8NJ-H-!ymr?)>rApxYj?G4{9e3k)B&lDxcgX!OPV*M?Qx`^*EjvOPKj%WIXR;Bs zSC;Sh-J{34z>6oWHbGt)KT(I4O5DLA%LBiYR#6MPj83-!Tm0beP z^F}jnr1$oJ6otv8I>8UAtcDv%p`bJ)-LxaE^o}U%eCDDkmaHh$QC*Z6Kx%Fi$zWQ; zik72ay>p6idQJk^(KAPTick(iyOlFjEa(gH)sMUpeK z5k~-Lno{wX{J0tKNSSRydeRCe6K4uVE*h4}a4pCrlcB2Y{Coj4(C2+4ZE zTvWP>KKe1@vGq`yT-Uu`$%j|`jT`g!dgxNj-Ym3Nx;u6AV6(CqMHV=1F4dd!cDcS* zZ`Ey`BDztxhaysW#1ZAxCBz;`1(5j|A>xl*%4P>Bfo;kmV@Ng3z!YumL`i(j*IGxh zNGd5&-avW4@g_V-Z$#paBw%!kBLsei92O`_LN67uv>=MAQOW{Qrcsp^0b12-fvqT=HCHnc8&0UaHp`mG#Zaa?PIITv%Uy*JVyCb5i(KG~xH9eY0R!w$|3{ zMs2-rPuACKt80(dmX{lp(x(`j?2I|-Ra!0@OoTbv%kxpTaQrxJEv9hQOfy-BQ&kn? zA1B(#KCSYyFHydCFr=lf&Acx45`X4JnU{g^%a;3IUm z!jnheD0B0d(pN_iaySTMn&RXM(3|%*<vj{~tLT%tsX2F?iXam#4|laY$=gg@Y6*oy z4<$53DJhvG&#n^vT@NqXVH7IJsph&asj_n7MaURz6aGjblIMVghS?tCiHIFSiL-?s zCi~WHI9A+KrRq?f3TAME!@E{{bkA(<#hRLDip|*b<7784b-^AdJEgYe;=bB7E$_R@ z#+=4Gx^M=Uu^F+esdF=rsTNa$y!hbHY-8y=eXBvrQv-i>d--5{6h%Dc(rQRM;m z?1sy)VS!x+W!tHeq$GsS`66B`jMI%Kg~|w#J5CBLi9hNQA(RCYdn?%BzEDObIqcm( zm|qti+=FKzWD)_dR$j4t(CX0M5I4xW>yP?H$0-r;GC(Cl4rNc`JV3Y<3VjUSJkmBI*l4xT4n_StGS z{bXv3i;eoy+4_cAq2t-Cw=VOxUe2}CM5_Uol7F$XtmH~132!3`S$7$~nATerpVsXz zCou#F(S_ezWVa!>72)>adD;=9^x%0y;+(KmT!u)Gr_oNXU@*y55*=E@R7xFLQ4A(3 zL;(3E3+v01n%)H(pK`GCRu5#3MtkIXc}<5F+_0_PDo2a5;Bryc{~{4RQVpy_{c|tR?Q|1 zk9z|;f78yRQbHIpnLb3qM3s#_rV-z0{k$vP>Y3Yh-^=d0USG0kuTSxu6di0iG4*$p zI7JIvgK_`hnQ=GQUbd>MzG1iMW^dG%&Nfz;&bF}jS}-0VDYfTjn%PC&X%8(r^GL|1 z(X9qca|q%cnxZMZoh81c#)v+UWblIgMj3@3u#evNI;ISjFQoB)O`L@vj0-=Rp*nF4 zz9(dOEjo*&du^rV{7Rg_MOtu_`(eh z`DmoUz-QhfQVDrwwSn%SRs`s3c+{8X8bcVA*hQC&$rsvcCnukt5MiCl$IbMNL~SS_q0%1vo^`Xi1;mP5Qx&33js3 z6GJLY87KkKPdOR-(mUy@EDEp5lrMdX$-zTn4o*i9-F8Kl&VNOSgr= zHwa4C^#9UzQJN=6^U~+wG!*2-E|TqUK6(^>9gR8lh$go+g=S?s(d8hR;LQ9O?vEr@ zb7Jaw90y5M(KglEm^6G-yQf^Kgp@ZOT-#W$uW5Q+3~w&3HkSEu@l0Jmx6FmD`r6vL z&5hQksjqG{>I7)~cUmskBYXLkaF;*m*vJDsY^txp?qQ zkD7SmiJ>x-(p!CUOqC7Ghg2j#j+w?>gj z%zV+Rh$5ZSerZQ)_nX#0XiyaIDUtD&yk{{`zie<)vELy z{LJofttyF73Qd1L;8RhBQk-H*67V&ey@YCXB0oHc{bpGq_EuM=0h%AG8VZ||!HzCx z<#dInNhrk684JERNnUiqP~fP2N+-?%9VI=^$VrQOg!7m*Zsosm_;_o>2`*&o5D>&U z%W(oS%5h4lKB4`j!zVP7lst)Dlc?k=8eFU+wGe(FN#iDyPdwokn-s3j6*ehChx~6T zQjL1u&&E}An9nBs-eD=*FV;6C@Rj+A<$Vi>jHCy0t*oPMA6PX# zN@^srM+2PRr$`ZG(!QD0V@mY}vwrZLKS0YKex#p1e83xcd-xNM)(n%3>kld}Ic*-V z@$*NmY5AWawRO%U(-2M{_fs5K*tQ?TS>@*9dpbyj9_Z1Nyid%SvWWEB(Rf7BC_iB! z-L*0DNMo^T^c1+MKZ}I_g5q0(WHFiy;;Fk@MNGTKzW*DZY{vODsfonbBvnb>#I&Ks z7kFHdBAgl#t!gBSPG~7Koz@oqT&(t;{k6V`r%|&=!p<0tEe=I{K4a;1w1{L>hCE350|Q#umAu6 diff --git a/securedrop_client/locale/de/LC_MESSAGES/messages.po b/securedrop_client/locale/de/LC_MESSAGES/messages.po deleted file mode 100644 index c4a4f91bb..000000000 --- a/securedrop_client/locale/de/LC_MESSAGES/messages.po +++ /dev/null @@ -1,390 +0,0 @@ -# German translations for SecureDrop Client. -# Copyright (C) 2021 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2021. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-06-13 21:56+0000\n" -"Last-Translator: Ettore Atalan \n" -"Language-Team: German \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} läuft bereits" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "1 Nachricht wird abgerufen" -msgstr[1] "{message_count} Nachrichten werden abgerufen" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "Der SecureDrop-Server kann nicht erreicht werden. Versuche, die Verbindung wiederherzustellen ..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Der SecureDrop-Server konnte nicht erreicht werden. Bitte überprüfen\n" -"Sie Ihre Internet- sowie die Tor-Verbindung und versuchen Sie es erneut." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Diese Anmeldedaten haben nicht funktioniert. Bitte versuchen Sie es erneut und\n" -"stellen Sie sicher, dass Sie einen neuen 2-Faktor-Code verwenden." - -msgid "That didn't work. Please check everything and try again." -msgstr "Das hat nicht funktioniert. Bitte überprüfen Sie alles und versuchen Sie es erneut." - -msgid "You must sign in to perform this action." -msgstr "Sie müssen sich anmelden um diese Aktion auszuführen." - -msgid "Your session expired. Please log in again." -msgstr "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an." - -msgid "Failed to update star." -msgstr "Stern konnte nicht aktualisiert werden." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Datei existiert nicht im Datenverzeichnis. Bitte versuchen Sie, sie nochmals herunterzuladen." - -msgid "The file download failed. Please try again." -msgstr "Das Herunterladen der Datei ist fehlgeschlagen. Bitte versuchen Sie es erneut." - -msgid "Failed to delete conversation at server" -msgstr "Löschen der Konversation am Server fehlgeschlagen" - -msgid "Failed to delete source at server" -msgstr "Löschen der Quelle am Server fehlgeschlagen" - -msgid "No messages." -msgstr "Keine Nachrichten." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s schrieb:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s sendete:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Datei: %(filename)s" - -msgid "Download All" -msgstr "Alles herunterladen" - -msgid "Delete Source Account" -msgstr "Quellkonto löschen" - -msgid "Delete All Files and Messages" -msgstr "Alle Dateien und Nachrichten löschen" - -msgid "Print Transcript" -msgstr "Transkript drucken" - -msgid "Export Transcript" -msgstr "Transkript exportieren" - -msgid "Export All" -msgstr "Alles exportieren" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Manche Dateien werden nicht exportiert

Manche Dateien aus dieser Quelle wurden noch nicht heruntergeladen und werden daher nicht exportiert.

Klicken Sie auf „Weiter“, um die aktuell heruntergeladenen Dateien zu exportieren." - -msgid "all files and transcript" -msgstr "alle Dateien und Transkript" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop-Client {}" - -msgid "Quit" -msgstr "Beenden" - -msgid "Last Refresh: {}" -msgstr "Letzte Aktualisierung: {}" - -msgid "Last Refresh: never" -msgstr "Letzte Aktualisierung: nie" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "ABMELDEN" - -msgid "SIGN IN" -msgstr "ANMELDEN" - -msgid "Nothing to see just yet!" -msgstr "Hier gibt es noch nichts zu sehen!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Nach dem Herunterladen und Entschlüsseln werden Quellen auf der linken Seite aufgelistet." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Hier werden Sie Nachrichten lesen, auf Quellen antworten und mit Dateien arbeiten." - -msgid "Select a source from the list, to:" -msgstr "Wählen Sie eine Quelle aus der Liste aus, um:" - -msgid "Read a conversation" -msgstr "Lesen Sie eine Konversation" - -msgid "View or retrieve files" -msgstr "Dateien ansehen oder abrufen" - -msgid "Send a response" -msgstr "Antwort senden" - -msgid "Deleting files and messages…" -msgstr "Dateien und Nachrichten werden gelöscht…" - -msgid "Deleting source account…" -msgstr "Quellkonto wird gelöscht…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Alle Dateien und Nachrichten für diese Quelle sind gelöscht —" - -msgid "Failed to send" -msgstr "Senden fehlgeschlagen" - -msgid " DOWNLOAD" -msgstr " DOWNLOAD" - -msgid "EXPORT" -msgstr "EXPORT" - -msgid "PRINT" -msgstr "DRUCKEN" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "VERSCHLÜSSELTE DATEI AUF SERVER" - -msgid "DOWNLOAD" -msgstr "HERUNTERLADEN" - -msgid " DOWNLOADING " -msgstr " LÄDT HERUNTER " - -msgid "Earlier files and messages deleted." -msgstr "Frühere Dateien und Nachrichten gelöscht." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Dateien und Nachrichten gelöscht\n" -"für diese Quelle" - -msgid "Compose a reply to " -msgstr "Eine Antwort verfassen für " - -msgid "Awaiting encryption key" -msgstr "Erwarte Verschlüsselungsschlüssel" - -msgid " from server to enable replies" -msgstr " vom Server, um Antworten zu ermöglichen" - -msgid "Sign in" -msgstr "Anmelden" - -msgid " to compose or send a reply" -msgstr " um eine Antwort zu verfassen oder zu senden" - -msgid "FILES AND MESSAGES" -msgstr "DATEIEN UND NACHRICHTEN" - -msgid "SOURCE ACCOUNT" -msgstr "QUELLKONTO" - -msgid "Username" -msgstr "Benutzername" - -msgid "Passphrase" -msgstr "Passphrase" - -msgid "Two-Factor Code" -msgstr "Zwei-Faktor-Code" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop Client v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Dieser Benutzername wird nicht funktionieren.\n" -"Er sollte mindestens 3 Zeichen lang sein." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Diese Passphrase wird nicht funktionieren.\n" -"Sie sollte zwischen 14 und 128 Zeichen lang sein." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Dieser Zwei-Faktor-Code wird nicht funktionieren.\n" -"Er sollte nur Ziffern enthalten." - -msgid "SIGNING IN" -msgstr "WIRD ANGEMELDET" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Bitte geben Sie einen Benutzernamen, eine Passphrase und einen Zwei-Faktor-Code ein." - -msgid "USE OFFLINE" -msgstr "OFFLINE VERWENDEN" - -msgid "Show Passphrase" -msgstr "Passphrase zeigen" - -msgid "CANCEL" -msgstr "ABBRECHEN" - -msgid "CONTINUE" -msgstr "FORTSETZEN" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "JA, DATEIEN UND NACHRICHTEN LÖSCHEN" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Möchten Sie {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Wenn Sie das Konto behalten, bleiben seine Metadaten erhalten, und {source} kann sich erneut bei SecureDrop anmelden." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "Eine Datei" -msgstr[1] "{file_count} Dateien" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "Eine Antwort" -msgstr[1] "{reply_count} Antworten" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "Eine Nachricht" -msgstr[1] "{message_count} Nachrichten" - -msgid "SUBMIT" -msgstr "EINREICHEN" - -msgid "Preparing to export:
{}" -msgstr "Vorbereitung für den Export:
{}" - -msgid "Ready to export:
{}" -msgstr "Bereit zum Exportieren:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Verschlüsseltes USB-Laufwerk einstecken" - -msgid "Enter passphrase for USB drive" -msgstr "Passphrase für USB-Laufwerk eingeben" - -msgid "Export successful" -msgstr "Export erfolgreich" - -msgid "Export failed" -msgstr "Export fehlgeschlagen" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Kennen Sie die Risiken, bevor Sie Dateien exportieren

Malware
Mit dieser Workstation können Sie Dateien sicher öffnen. Wenn Sie Dateien auf einem anderen Computer öffnen, kann sich eingebettete Malware auf Ihren Computer oder Ihr Netzwerk ausbreiten. Wenn Sie sich nicht sicher sind, wie Sie mit diesen Risiken umgehen sollen, drucken Sie die Datei bitte aus oder wenden Sie sich an Ihren Administrator.

Anonymität
Die von den Quellen eingereichten Dateien können Informationen oder versteckte Metadaten enthalten, die ihre Identität erkennen lassen. Um Ihre Quellen zu schützen, sollten Sie in Erwägung ziehen, die Dateien zu redigieren, bevor Sie sie auf Computern mit Netzwerkanschluss bearbeiten." - -msgid "Exporting: {}" -msgstr "Exportieren läuft: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Bitte legen Sie eines der speziell für die SecureDrop Workstation bereitgestellten Exportlaufwerke ein." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Entweder ist das Laufwerk nicht verschlüsselt, oder es stimmt etwas anderes nicht mit ihm." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Die angegebene Passphrase hat nicht funktioniert. Bitte versuchen Sie es erneut." - -msgid "See your administrator for help." -msgstr "Wenden Sie sich an Ihren Administrator, um Hilfe zu erhalten." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Seien Sie vorsichtig, wenn Sie mit Dateien außerhalb Ihres Workstation-Rechners arbeiten." - -msgid "DONE" -msgstr "FERTIG" - -msgid "Preparing to print:
{}" -msgstr "Druckvorbereitung:
{}" - -msgid "Ready to print:
{}" -msgstr "Bereit zum Drucken:
{}" - -msgid "Connect USB printer" -msgstr "USB-Drucker verbinden" - -msgid "Printing failed" -msgstr "Drucken fehlgeschlagen" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Risiken beim Ausdrucken handhaben

QR-Codes und Webadressen
Niemals sollten Sie Webadressen eingeben und öffnen oder QR-Codes in gedruckten Dokumenten scannen, ohne Sicherheitsvorkehrungen zu treffen. Wenn Sie sich nicht sicher sind, wie Sie diese Risiken handhaben sollen, wenden Sie sich bitte an Ihren Administrator.

Gedruckte Punkte
Jeder Teil einer gedruckten Seite kann identifizierende Informationen enthalten, die für das bloße Auge unsichtbar sind, wie z. B. gedruckte Punkte. Bitte bedenken Sie dieses Risiko sorgfältig, wenn Sie mit gescannten Ausdrucken arbeiten oder diese veröffentlichen." - -msgid "Please connect your printer to a USB port." -msgstr "Bitte verbinden Sie Ihren Drucker mit einem USB-Anschluss." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "JA, DAS GESAMTE QUELLKONTO LÖSCHEN" - -msgid "Are you sure this is what you want?" -msgstr "Sind Sie sicher, dass Sie das wollen?" - -msgid "When the entire account for a source is deleted:" -msgstr "Wenn das gesamte Konto einer Quelle gelöscht wird:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Die Quelle wird sich nicht mehr mit ihrem Decknamen anmelden können." - -msgid "Your organization will not be able to send them replies." -msgstr "Ihre Organisation kann ihnen dann keine Antworten senden." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Alle Dateien und Nachrichten von dieser Quelle werden ebenfalls zerstört." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Sie möchten {files_to_delete}, {replies_to_delete}, {messages_to_delete} aus dem Quellkonto für {source} löschen?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Löschen von Dateien und Nachrichten..." - -#~ msgid "Deleting source account..." -#~ msgstr "Quellkonto löschen..." - -#~ msgid "Download All Files" -#~ msgstr "Alle Dateien herunterladen" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "Die Schaltfläche FORTSETZEN wird deaktiviert, bis die Export-VM bereit ist" - -#~ msgid "Entire source account" -#~ msgstr "Gesamtes Quellkonto" - -#~ msgid "Files and messages" -#~ msgstr "Dateien und Nachrichten" - -#~ msgid "DELETE" -#~ msgstr "LÖSCHEN" diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.mo b/securedrop_client/locale/es/LC_MESSAGES/messages.mo deleted file mode 100644 index 58951b67c7a1f48e26189e74abcf002dbc0b6afa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11672 zcmbuFe~csNS;r@7+9cbQ9|b}he!WR4O_TF(E=kj4?^k@@*^Ap(T@sBJ`1S^=p91W=(u0fh)?qoM#S@k3RGprul&grEY6KT1^z1QJ4m z&-Z<2Z10_~q`|t`uRVU}eV_OF@qM26@%{ZoKk$=K99_6=KCE`>-;|WKJcrc$Wj1AHFjpZ9tG+zNgH^ue!#_keeOx98msc0kFSfZqdt2t-ux z6QJaI0hG#K0a1bX$Kc)I7r;4ibz5E6!ef>80{otQ~2K)+mC-|SB*1MfWgm;6Q zZy8(%&w!HqAzX-~XuYh-fUj-%4^*EFCdK{GhZG%4!eh~aI@HfGCfPW5N z5B@9oAowltSFgkN7)yHki?=!d_!208_(xFB-Hfpx=fNfLW8g;#inH9mjmfp{PlNJ@ zkAjl_)1czxcR|VXIS^63zXeC&H$eHtmT}{DLCKqfEb09MsOMe+HQyIO?e{BS6Z{{r z0ya?!D)cUcsM>oDl;8dqcm(`IQ1bs1C_OLS>Eh;g@I0T7ftu&%L9O>Hh)TS#ftv5% zKwQzgiC_{BybY8*4}$vsG`IwIzzF;>I0nB7*1=siCHy^5`~Ghbm+?}B(*A!2lwLjt zu7JN@;J<*Ie6IY2llw!U_VrwWzXraE&o6;`{blJj0r^84T| z;1<{e6R-+?8GIbPm4}`HQ}9vnZ@{zQ-S6_eQ@Rf}z?TY?@z3$O34R3pG{{%pQJi1v zJ`NI^-Vnsaybpr!0Y3#wZ(jm&1@8?Q>nQkkP~UGBpPvN{pI-%0srL^cTk~$fXjYnAIkuAk)63$xgL z`QS0GHrEBN^7UBx1{6PIZtG9do%EnRyopP%cRR59*IP{BJ)}3hq?4Pu9?^%Hmty}U z*L%56%-rAL{ad&cJMxow~yOFZo9KI>Vbat~YSWC-st#$sc8F z#ZimPaLHDRd%ZBdjTJ)1+Hw&*&V@;A49HGz=DLMTucib0S3Xs~){8gty9c;%K@VEC zFZsA$_i@SodM$Ik(Z1u4S!q7nSZh{Srtj*Fv&J*qX)-WbnC^wC$rBUC!B#&sX*ldh zVdm*pHyI3*EHp{VxVUEm`|a2}v3uXC^&k#*qIky)(0X$bfamtZEfe&5X_#dpBeocjnx#{X&@Me5h9-*bz+@Q4hezAByFqLw6Lyn05285i z=^?u~Z+l61GzjB7Gy74#D{1oJDM^=w-BB9lV@8JEV3bEmoGqIAwizcQ6QrRT#n}kh zP4>0pfp!&|d^gJMevX)7KMYWTUA3F*v6Q_GqBzR(G{}>5(QT&udul`aK&8DTpV@0Q zMuZ^EO|p#|ORK0x!8-?8LaeLJ7+a)rl$JXWM%>J&_oupP%Qk=9s9BuWZY}YCe#Y@qp ziL*s(`puYWvRsyxDAw*~D@5ARgwG6il^@~G*o1?vu-8NCfm_q+H^ck^;wH|3a%?@J z{l;M~IVNj-2To!2Vs#*Sk7%~n?kCkaiN^z6bE=e8sSJB=aXV)RTVs>qZ(VL4a*`Rx zV9DKx?Z##h=0PvW1LO(v(vgT{tZZFoEO%ctodk0xd06^#vB0dOJ2y$gUeKLdvNZ4^ zcR~FFgCzWxj`s}+n^ zFqs^Jdsb+(**;Uo5cfv?p25FhynyhMpSMLN;Yyke3)Y+l*>2c<%6Zm8UBQn&>}EU8 zBcu~Wv5lA%L+n6ci{47J;q#|p=arBU2#vJm{6M4E3vGGDw{7bVrrPZ$qd52cMy+*W zqvNlb)%u!mnhn$TTj%_i=bztbwmP04q>y$aJ&pF@;>>Qm&?L5G z6B=T_$rAj`l0(>s7WdPHP`A_(<;-Q7Zy03Ra5oig!UH=8aGqn|WX~Bw|7X2c?Uiv<_?I znzDQN3P4gw2p>8s$Ti27X;|qc`*A-BdI;`jaanKT>4mBntTwCzI|;pd z%obS6`7D~23p!P;1+3l*x5=5i%fuHO_YU7fLk$vE;UJ5AaCSjoSs0opM@%pd^EdTBmZ!7 zE*B{{8&WQ0`M4jRymOmkp|T%FJG=REtZdr9^VFrwCzdqk)Zt02242@3@hywxYfY6YcbpbBN2@Og~ZT*E?&N8P+LiV?zao)+^%Zkx`U; zEv2{MP>9%jKgPH=Vp&!x%#fXX>-dJC7rd&ZrC5P95hL) z42nctX06arBjra>?lMELs1iyxq__;dwra_laBD|9D&V|=yKQ>U}zcaUW)P$6}HW`U9#*PrI!%ee}eQ+jx z_mjyK3w219>Y3DsP+Js6A%(@!2khEM?>lC?yFp5nL&CVJ*v?Ky{WKf=h%;}-Bz8rp z4T+d)Jtfx{GnBk?jYkoN&8ncy&HeL)n3J6GwpcvQvo?jJGt)_JVU3z$a>ss)ixPoE z<;dS@yNIlbO2zX<@M-Lf@+^O;*u)YxZMaf$CO^zPSL7vY^g=Xy+egfbzvg#*<5T6eeA8}jwrakq)@sd7 zGT-b7l}T+=ZLFAezum5$_1oSBipYVIW#-~k+8c%`3l0#3rBnqclxqysfng_zql>Nv znP*9RP-X)IYYXb{;z3Tnih1QK_JuPRK2p$q;U-FyvXOU5f1j{b-sM6y`mV6Fcd2+& zjwn6A(;({v-X#m=0DaK0{!%dHP1nl*g#7EWoGR$ck0@qFaZG0MV8*Y1;1jkMwH{*$ zpj@NW{gvg6;So}5@+5>=srM@9pb2)oY}zDSPL$@ZDFwf4p%v<&SXs|@qF&|9XeX<5 zl4Y~7(X6yWR}xfKsLhtm1;5&=tT!twRr7FjdA)wmW0cJcs)Z_@G>Egl4&lpYb#raa zG^*>qIpMEY>uV2HS5{is_!L9qoe@WlN+%2kQ)y1@=J_yNURt6%!5raYX46KG`hF2B zFA>_>Nwze-Kl8TIwV7op%$BArESoS}Sg)`9)4d;Eymx^EMvgmII&?agO&&gzFAe(? z2FERxWnq4Dv$I+`HXWyJZHH;ak6{7qv22cQMft);e*|Y%R`JY?ns8`8W+(4EPLo34 zoQ%yKC(Y603+F3m!x(>(R-7jmY- zR3Wud(0_WQW1bpJ)C_8B(PKJzf&N@jJi+Irmma)mOGH$_=%T;WjSgPM9~koIDb+60Sd%*=syZ0?xne~A7X9ZxmGV!lD-yNlFfTHaASu_~B^Btw!ONHN*nmLdf>&LnBd!uhvTu;=$98!V0Z)DW+I$;AusIE)WlupnXa_g zf>oesy$C(@P0Y#Dr&=uy=p8)Y&m+>AYqxb#T&x;n&VAQ&lch^PJsRA^<;KNDK zJCD$CuT6Z>2o4Dc83fLlMzgm@Y!!Pg3!v{@YcrF)eucF-N`)y=f!ZboAM`h})^Ldy z|3Um|9)@fnJ+_ZN6uA@6bi;}GdZS*eS6k3{yMFLo!>jqN*6hcY&%qwT-=q&v<+qV@ z4E9_H@KA$D-M~4wxqI&5GjpnO7trHT58k%@K%EH`dnLO_YK*Qf9%Y`KZJD1!=A4Sw z6a8pBpY**NXK-mtoad>Yf?p3_1l{Zf8KY5^4t6cYEXz`@U$n(RkJTmBUU<l zUXrE;bF6|wU9CWr`~22MlG=vt*wMkuGwf^Yo+6!-fUlLaeHAxzsBLE20C^V|Rzmu~ zI)1pb2YZCG=q!$n?JJ@(wG|zw^x=5S?UNT@Gi62ikmTG zL2eYgwyy0Z_7Df5scI^-sv4Q4XCYd28l;G+j^#D`>4u<^FtRF58o;_mD zG%bnpbFry4*Ei^+HqBbKAW=%hB<)%Vg#RgBX~xgx{4EWV9f zQ=M35S5sHnjKdTE-J@uzI=a8ww_K5F|6@|wg0jy|5~%vASBAsEi?Y7WCWXIY!9rh$ zTdNZ#GNACjIn7mfn)9SoIi_oIUD;qQ#hce-9V-=T^VAC=ZAE$ln5^uxe)}_IS=72J LW~QjM4cGq#(FIO# diff --git a/securedrop_client/locale/es/LC_MESSAGES/messages.po b/securedrop_client/locale/es/LC_MESSAGES/messages.po deleted file mode 100644 index abc28fd01..000000000 --- a/securedrop_client/locale/es/LC_MESSAGES/messages.po +++ /dev/null @@ -1,390 +0,0 @@ -# Spanish translations for SecureDrop Client. -# Copyright (C) 2021 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2021. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-11-22 19:12+0000\n" -"Last-Translator: Cory Francis Myers \n" -"Language-Team: Spanish \n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.1.1\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} ya se está ejecutando" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "" -msgstr[1] "" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "El servidor SecureDrop no puede ser alcanzado. Intentando reconectar..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"No se pudo alcanzar al sevidor SecureDrop. Por favor comprueba tus\n" -"conexiones a Internet y Tor e inténtalo de nuevo." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Esas credenciales no funcionaron. Por favor inténtalo de nuevo, y \n" -"asegúrate de usar un nuevo código de autenticación de dos factores." - -msgid "That didn't work. Please check everything and try again." -msgstr "Eso no funcionó. Por favor comprueba todo e inténtalo de nuevo." - -msgid "You must sign in to perform this action." -msgstr "Debes iniciar sesión para efectuar esta acción." - -msgid "Your session expired. Please log in again." -msgstr "Tu sesión expiró. Por favor iníciala de nuevo." - -msgid "Failed to update star." -msgstr "Fallo al actualizar estrella." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "El archivo no existe en el directorio de datos. Por favor, intenta volver a descargarlo." - -msgid "The file download failed. Please try again." -msgstr "La descarga del archivo falló. Por favor inténtalo de nuevo." - -msgid "Failed to delete conversation at server" -msgstr "Fallo al borrar conversación en el servidor" - -msgid "Failed to delete source at server" -msgstr "Fallo al borrar fuente en el servidor" - -msgid "No messages." -msgstr "No hay mensajes." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "" - -#, python-format -msgid "%(sender)s sent:" -msgstr "" - -#, python-format -msgid "File: %(filename)s" -msgstr "" - -msgid "Download All" -msgstr "" - -msgid "Delete Source Account" -msgstr "Eliminar Cuenta de Fuente" - -msgid "Delete All Files and Messages" -msgstr "Borrar todos los archivos y mensajes" - -msgid "Print Transcript" -msgstr "" - -msgid "Export Transcript" -msgstr "" - -msgid "Export All" -msgstr "" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "" - -msgid "all files and transcript" -msgstr "" - -msgid "SecureDrop Client {}" -msgstr "Cliente SecureDrop {}" - -msgid "Quit" -msgstr "Salir" - -msgid "Last Refresh: {}" -msgstr "Último Refresco: {}" - -msgid "Last Refresh: never" -msgstr "Último Refresco: nunca" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "CERRAR SESIÓN" - -msgid "SIGN IN" -msgstr "INICIAR SESIÓN" - -msgid "Nothing to see just yet!" -msgstr "¡Nada para mirar por ahora!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Los envíos de la fuente serán listados a la izquierda, una vez que sean descargados y descifrados." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Esto es donde leerás mensajes, responderás a las fuentes y trabajarás con archivos." - -msgid "Select a source from the list, to:" -msgstr "Selecciona una fuente de la lista, para:" - -msgid "Read a conversation" -msgstr "Leer una conversación" - -msgid "View or retrieve files" -msgstr "Ver o descargar archivos" - -msgid "Send a response" -msgstr "Enviar una respuesta" - -msgid "Deleting files and messages…" -msgstr "" - -msgid "Deleting source account…" -msgstr "" - -msgid "— All files and messages deleted for this source —" -msgstr "— Todos los archivos y mensajes borrados para esta fuente —" - -msgid "Failed to send" -msgstr "Fallo al enviar" - -msgid " DOWNLOAD" -msgstr " DESCARGAR" - -msgid "EXPORT" -msgstr "EXPORTAR" - -msgid "PRINT" -msgstr "IMPRIMIR" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "ARCHIVO CIFRADO EN SERVIDOR" - -msgid "DOWNLOAD" -msgstr "DESCARGAR" - -msgid " DOWNLOADING " -msgstr " DESCARGANDO " - -msgid "Earlier files and messages deleted." -msgstr "Archivos y mensajes anteriores borrados." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Archivos y mensajes borrados\n" -"para esta fuente" - -msgid "Compose a reply to " -msgstr "Escribe una respuesta para " - -msgid "Awaiting encryption key" -msgstr "Esperando clave de cifrado" - -msgid " from server to enable replies" -msgstr " del servidor para habilitar respuestas" - -msgid "Sign in" -msgstr "Crear cuenta" - -msgid " to compose or send a reply" -msgstr " para componer o enviar una respuesta" - -msgid "FILES AND MESSAGES" -msgstr "" - -msgid "SOURCE ACCOUNT" -msgstr "" - -msgid "Username" -msgstr "Nombre de Usuario" - -msgid "Passphrase" -msgstr "Frase de contraseña" - -msgid "Two-Factor Code" -msgstr "Código de autenticación de dos factores" - -msgid "SecureDrop Client v{}" -msgstr "Cliente SecureDrop v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Ese nombre de usuario no funcionará.\n" -"Debería tener al menos un largo de 3 caracteres." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Esa frase de contraseña no funcionará.\n" -"Debería tener entre 14 y 128 caracteres de largo." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Ese código de autenticación de dos factores no funcionará.\n" -"Debería contener solo numerales." - -msgid "SIGNING IN" -msgstr "CREANDO CUENTA" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Por favor ingresa un nombre de usuario, frase de contraseña y código de autenticación de dos factores." - -msgid "USE OFFLINE" -msgstr "USAR FUERA DE LÍNEA" - -msgid "Show Passphrase" -msgstr "Mostrar frase de contraseña" - -msgid "CANCEL" -msgstr "CANCELAR" - -msgid "CONTINUE" -msgstr "CONTINUAR" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "SÍ, BORRAR ARCHIVOS Y MENSAJES" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Preservar la cuenta retendrá sus metadatos, y la habilidad de {source} de iniciar sesión en tu SecureDrop de nuevo." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "un archivo" -msgstr[1] "{file_count} archivos" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "una respuesta" -msgstr[1] "{reply_count} respuestas" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "un mensaje" -msgstr[1] "{message_count} mensajes" - -msgid "SUBMIT" -msgstr "ENVIAR" - -msgid "Preparing to export:
{}" -msgstr "Preparando para exportar:
{}" - -msgid "Ready to export:
{}" -msgstr "Listo para exportar:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Insertar unidad USB cifrada" - -msgid "Enter passphrase for USB drive" -msgstr "Ingresar frase de contraseña para unidad USB" - -msgid "Export successful" -msgstr "Exportación exitosa" - -msgid "Export failed" -msgstr "Fallo de exportación" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entiende los riesgos antes de exportar archivos

Malware
Esta estación de trabajo te permite abrir archivos en forma segura. Si abres archivos en otra computadora, cualquier malware incorporado podría diseminarse a tu computadora o red. Si no estás seguro de cómo gestionar este riesgo, por favor imprime el archivo, o contacta a tu administrador.

Anonimato
Los archivos enviados por fuentes podrían contener información o metadatos ocultos que identifican quiénes son. Para proteger a tus fuentes, por favor considera redactar los archivos antes de trabajar con ellos en computadoras conectadas en red." - -msgid "Exporting: {}" -msgstr "Exportando: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Por favor inserta una de las unidades de exportación provistas específicamente para la estación de trabajo SecureDrop." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "La unidad no está cifrada o bien hay algo más que no está correcto con ella." - -msgid "The passphrase provided did not work. Please try again." -msgstr "La frase de contraseña ingresada no funcionó. Por favor inténtalo de nuevo." - -msgid "See your administrator for help." -msgstr "Vé a tu administrador por ayuda." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Recuerda ser cuidadoso cuando trabajes con archivos fuera de tu estación de trabajo." - -msgid "DONE" -msgstr "HECHO" - -msgid "Preparing to print:
{}" -msgstr "Preparando para imprimir:
{}" - -msgid "Ready to print:
{}" -msgstr "Listo para imprimir:
{}" - -msgid "Connect USB printer" -msgstr "Conectar impresora USB" - -msgid "Printing failed" -msgstr "Fallo de impresión" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Gestionando los riesgos con impresiones

códigos QR y direcciones web
Nunca tipees ni abras direcciones web o escanees códigos QR contenidos en documentos impresos sin tomar precauciones de seguridad. Si no estás seguro acerca de cómo gestionar este riesgo, por favor contacta a tu administrador.

Puntos de impresora
Cualquier parte de una página impresa podría contener información identificatoria invisible al ojo desnudo, tales como puntos de impresora. Por favor considera este riesgo cuidadosamente al trabajar con o publicar impresiones escaneadas." - -msgid "Please connect your printer to a USB port." -msgstr "Por favor conecta tu impresora a un puerto USB." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "SÍ, BORRAR POR COMPLETO LA CUENTA DE LA FUENTE" - -msgid "Are you sure this is what you want?" -msgstr "¿Estás seguro de que esto es lo quieres?" - -msgid "When the entire account for a source is deleted:" -msgstr "Cuando la cuenta de una fuente es borrada por completo:" - -msgid "The source will not be able to log in with their codename again." -msgstr "La fuente no será capaz de iniciar sesión con su nombre en código de nuevo." - -msgid "Your organization will not be able to send them replies." -msgstr "Tu organización no será capaz de enviarle respuestas." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Todos los archivos y mensajes de esa fuente también serán destruidos." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Borrando archivos y mensajes..." - -#~ msgid "Deleting source account..." -#~ msgstr "Borrando cuenta de la fuente..." - -#~ msgid "Download All Files" -#~ msgstr "Descargar todos los archivos" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "El botón CONTINUAR será deshabilitado hasta que la MV de Exportación esté lista" - -#~ msgid "Entire source account" -#~ msgstr "Cuenta de la fuente completa" - -#~ msgid "Files and messages" -#~ msgstr "Archivos y mensajes" - -#~ msgid "DELETE" -#~ msgstr "BORRAR" diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.mo b/securedrop_client/locale/hr/LC_MESSAGES/messages.mo deleted file mode 100644 index a4853983ab60a09d974ca750fdfc4328d27ea04e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12741 zcmbuFdyHgRUB}P9*ri!O5ac1cX9t&^h3V>g^gP!I(gzOb}52kbl^i5RJ%RYBb9Jp*;ykF~&b2s1QRC5&{3gXrjUR`JQ`j zRdr8q!otnm{@%yA=ltHk-}%*i{q^_%w&934-^SU#&lo-U+$;E_G%S3!;Y2>3JL$H6y(e*}uIzXsn5egkAl^8@hB-~>c! zowtKp|DE7fZ~@eJzY9))e-4U|eNg;<+24QD-~Si*dY<3UpvS>CfscY0Ku9(L_)}mH zY=9pHHU3NByTE@1Mc>0b6rYcSOlh71MeiIadY=U!08>zOJrBMU{59|l_<8U-@Y~=l zc!kMkz>k5y0{#Q2c`v=e7(`%JK*_HKYTYgHBKRRtdiesl0{#Hh{7)m)2f<$lCGSsy zqT|z``1~v=dHxB=Kl7LT;ZyUEpas7T9s?gj7+U{b9-jg=?^SRfTmiM-3*a31PhcH< z9OJkIMxf~X94PsH7kn@HW`uMRTmtpoC%_MaUkA0`*|%V;;2bFWp8=WL1mH>VdGIFq z2cY!#7)p^HTmg@R8{ir60n3et-pyc%dP;&n;hzQMRK*`}nP;&k%Xu)rR4}cG%)Ca*=gPQk^;8Wl< zcpdD6TIcV<2Kc%sjLE?3py>ZwkN*N{zVCse^ZQ^Od=MiMHbL3-Z-Bo9eihWZXE5GZ zfEPjCUjbzYi{L}x2SM?-0m_eVfr!$45|o_(43s?o+2eOW&GWzDB6uIhbQ)X%FM}Te zuYg|yXTdij-1mVuz;}bc2lCH+g+KDA2WsW}bKo`ZKLU#HuYp?kKRo^)Xt{sQR4K

@3+_2&QuGT7W6JTqk|KpA*wD zEzSoyALi7d7@-3-m}O4MNXIX8%5J1%9k`9N1KFJ9jrg2C0kg(=gH!&ZLw2yjDLH?D z^VOWP$?BN!7ZE7k>W~l0j-L+~tT-QP>c)q%=g%$D8$BB$&l;3TEF zBjm4Q-3;d(XM^(?=LJq3@;~|V;p0_2!0g>|oWBd4XE-gV4%zoB-4%cA?Bex>xyAbI z=&HGJ#TvVjCS99_X+KPDp4c!B);pn1!(Jx}GoweXq}xlf&?YJ4;4kv6SaUMi**w#mGaW30Q ztLQ>)W_P1}OVs4Sj;PDRR*^>e9wWn6P~=e(XEod0uzN{igEX{7oE5-UvMZr<#Z_qY zttfN+oUpx47$7CLYAe@gDZF%}ILh)g$dj~IGE@CMza)7e^>&hv@mh}|AxLwZY#`~1 z?4B0u27Bf7@DsIRBHGv!=~29qq}@OybKQ@!NGgQLd@HnZumjuSUU9jgbE;oSx}n{O zI%sz{>U3V(*z?8=#ODIjNmVP|h>b7Sw&Yk(NG(21O} zz-q+)o(;R}VH;s!8g5NzA{iDOKyFgnVD*Jm7Kgd$7_RX$?Aoc;$w2g;&}=`vsn_Eq z-s|FBBcWV&W|0-^JjNF6`kpPdo*lIFG23Rztq68w+YR%e9pnM@1bO8P#48NdS^b_o zwq{X&Pl2d%N58WEd{gI9HJAh)F%&4dVQQsqY4nqcx0M z>0ZxS)K0i(X6g$wjX5*3xUkw>SZkOWAGdwHmO=2$5pCC2E>&TGXGN#&+zh)RLdecn z6b-}KH0k-=Fp3jfA#UQL+eB0G3wbzKTrDj^GEpFM9+RSoO=57(%q}i8_~UcXY={el zR?;f%K%?iqw2XhdQU-x~tCbXSUOpYEXk5PE`0!^(uf2qW@-z3!2Mw)f8VfVa&n~St zX6@zXT*EFd*pdAXVfan?$s zUS7T22=JwLbw`wMAxUDnf5OVs_U0`kephULVb;z!R#xg)8Y||q`%;!s@+Oxi)n;Xw z!s^Px;O=pikdGLlqG0TUqKBh~me7~hjFe62#Uq@!o+mXbIm_alJGUc}FR79!=+jb; z38mp=6|Ui>oMqZRc3h4Y2i@?A%uQUD5JR8y+L~|z9m^`F8N=1Mvg8bT?RLQgWUEKb(sFZQ)hrG5YN|ZzJFKpTw=X+>ua{ue2yv6*~g#l&Drc9=sbK2K4S&!N)%lA6rxnmpT(8=8} z+T6;gW0fYIW9M()Iy2Go3_rl&+j&#^Rq3U`wjj?3nYp2O_|`-_u2un`LF*;D8&sXL~=6z%;3w z;71hJa@bX&;LMD4(+XUrcSKQFW-f|iWks2elf{??keXXWGAwO5%+n}z3OH4{!}!CS z-bJ2s!TVMfLM~Fy%zA7ALbIZZf6R|p zqD__A#-}G&!DMnKU*sZTO@?b>OftDnxWUv(OhH?PFthODwefLpB98rH@wXt#r z-?}OVnc<9X`-7Ot8f93m)kH$M=@?4ed+1Q4$|>HfHFivRE-~aFWdPtcG%e6AU=^-SS z1%z{0ajgA$iz*iHh|t54mNaC$oMocR&d?W{iE<1^ABSvi52~Npd2qSRGBa>t)>bH+ zE?=H&QqisX)MTzjd`e6u_$n^=ZJ)WWjia1Egu!SPs1<&PPKX$MvYs~Aow-ULoe1(^ z-B%_z9k0*j$#dm{TPN&I-=#SCu#(=`(~+BdosE-GWq}Lk*~ZEVJKLCRtTt?eB6_)D z4@IQ$5l56$&q8)r6+l+T2$A0lQ<&`{1lZIjBcU2*V2ZRhgE$(LwboHqq)JM{>pDAN zd*eT(H==l>1dL2^1aF@{hj|kvp^p`@v>>XgQDuRIX`D!_0PVzU^v(;=ykrR1AZMAz zX<)CK!mGpF40?2rT8^>jWc0UW=|Km_C6A>=9FsN;;rbgN{w=o$aBI7$R4K1Ah{MI3 z%DPTOZ2_2tR=#mU*aec$5reDhs5*sn~e^qX`kzoQ1uw7tAGH)j{>^9_5p zF<)=aU98W}E>ldOXK1`xu-BVh4TJ6&IcK->yq8T+P0`w7lCYM!Y}RIHRl@+Lh&bXU zn;JbIyPTvcf#*zZrBkCNrtMZbG2fhTjJQ8lJ2}DDE@$lIDs8f9n}^TmQ@sv_&{HnL zW?_DAZT0fxnb9~|#73A-He!Mk8kx3d)}wr4sZ$WjCof~P88vXv-Dc@ zcIxE0bEoV(-eGll^3ijrPT33gq-8Ys=g*z4UY$Mnq%M!UVP{XBv>*CV`3YlAKEXGq z_~!Ie6VFUu31bq7lkxRZQ1;2%sWY|H6UI_>7K4a}+je;1hUR5Phb+lD#hn+UJnU=- zb|=_jOC8yyn`{>QAB_^5v^SGJ-5N7|7YDs43ld8q=)UIC4;t@aZj%_8I!LBE!GYE$ zFZ>Mdjar;*y)@{vJQUI)8bmFq#pJb2)fA#Dxs$XhyKUtAmJ}FcJ)(tZhscj(6?|1} zvtx>Mm*jm?v~J7Rs6IMTzRGsOI4a*&lM~K^c6#TU9N%sUS(sJD) z(mRr~K1KC`7HDvwH%Iq(HQB#Sn0JLO1~6(5U5Yvh(``qjGF0Vc30G>R#u1fN7b1u3 z_Hq4T7pSGx(Y<=bio8K9lFIP+c4u3g_06P1%NvnU?+yAjg7g6z2&YLmrltr6-GpQY z^Nv4QZ}YIN2iTpgCt2T?-ivKDGrT?^(osu|EYnyBVUN8nT_`T%P;}vCkUQvy1FYT| z$iY$30I_O6GQe;HyPe#5L0TxJpJJf3WE*$QbU?N@ppef8HmBiP5!h=10xw+> zVO2Kgty^AGkyM%-R-ZV*j|9iEX|ajk(qR8~5eFT#m-T7gTgidqrO1N)Pv8-wR%n9% z!!^>2m<*ALjyo^Fl%Jvu0o^pb^J4MxZM~axqHe;JR4=8sGdCjhG~<6*$jBjhbCf^W z>gNFc&VfUyQyO7@Sw8ZG*~)zI2U-kL2mMN@mwn&~oAe7yzb_qO%ucB$Pk zt{>!BqH`_(BLeYCF2gS&+vS`!d)3F$0Rqbro~G$*b+;xVXv{lk6z+c_>bvOYnRh>2 zFggx5HZPeD)bFT`sf|vT4Wb5Sc0+REQOGxJgngorfr8^aI z1f_6UGw-LJsy)~+W}zOH&*+1p$1JhQDQIIRMTBUOHH}yopU(@L+k7j6dN=YUw#1{(_h5aYGy4C zGij}p45E0akk(x1TXTwxa8MHNFG)k&A^EqYuw1kt^(6iQ3y$4RQ^C&GR~J_sR~xoz z=^n3LZIm{^sO^vhR&v5;xQi=8ocSM=hBKPGK5%|^#ORfd)02~j|LEY7*e$OC$55^^x?eq=B0<+h~eIy;nc;n5R}6 zoIu`=5wk|@ahYaJhu(FZE|w^@w!^lFPBNSUC*_)gQe}~OskbO#AtZ*l01>cLt#Vzg zr!FD{(mAQ06dgTknyMqroU?|&c=uBTl98xf+rO>cUfM{SCzy~QRCr6;K~~gCR1Cyl zwPY*PqEP848x%iDnkkSZG8s)<4E^NkmlbNI{LK@&6{_qI8dHasQ(=)(vP}YnY28a?V~NN3C{q z(=Iqj$<-c?D5l(9IVN0|G$W~YKzwl%1+Hv#g*bM!6AZLv63PAK1eFM7n{|l=;?PYo z=#rG_NmS{LXlYipHDW#=g$bX-H12Y*QrDq$y&8C`6ous}t~82j6Z6#h9rk8XwKwQe zQWa{|Mplj5fk>jNZWo&hbJS^vgUz7{iG=G^h)g(M8D;?mD|7K5V0N$_I5-r}j+#Yj z%+s~bF9%&(wj#$7lkfwWWbiU-9-n0TR9*k8l%fQ0RiwoCSSet!Px^2MgB`kvuVjS+ZgRp?QIZ@W#b+tiiz!~a&Os=-Q#x$^~ANUPG0RCMZBWBX&ZY5A{I<<_inQu14s8!k}6AZ^xB@IQ*O0|P2nhT8`c zIZATjMwz2jdDSjLZ7I{jNzyN*yI3Bs-C{6o)3PKxl;VK#&>xbReT%93g8r<=B0#lH zb~=G#L%F0|zpUL4*XN9IwWp%^sCquwq^-C*@@ZhoPknShGU(Iv^)1$_Y3oN<6^g4; z5A}6Df5A&VuG8(^QJV#A-QD^{41KIu(a@D=OjCA#kKW}~wWDeq9Lw)WUElZr0Xq4R AI{*Lx diff --git a/securedrop_client/locale/hr/LC_MESSAGES/messages.po b/securedrop_client/locale/hr/LC_MESSAGES/messages.po deleted file mode 100644 index 8f3aeb66b..000000000 --- a/securedrop_client/locale/hr/LC_MESSAGES/messages.po +++ /dev/null @@ -1,394 +0,0 @@ -# Croatian translations for SecureDrop Client. -# Copyright (C) 2021 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2021. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-14 20:30+0000\n" -"Last-Translator: \"Igor K.\" \n" -"Language-Team: Croatian \n" -"Language: hr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "Aplikacija {application_name} je već pokrenuta" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "Preuzimanje jedne poruke" -msgstr[1] "Preuzimanje {message_count} poruka" -msgstr[2] "Preuzimanje {message_count} poruka" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "Nije moguće doći do SecureDrop poslužitelja. Pokušavam se spojiti..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Nije moguće doći do SecureDrop poslužitelja. Molimo provjerite\n" -"svoju internet i Tor vezu, pa pokušajte opet." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Te vjerodajnice nisu uspjele. Molimo pokušajte opet\n" -"koristeći novi dvofaktorski kod." - -msgid "That didn't work. Please check everything and try again." -msgstr "To nije uspjelo. Provjerite sve i pokušajte opet." - -msgid "You must sign in to perform this action." -msgstr "Morate se prijaviti kako bi izvršili ovu radnju." - -msgid "Your session expired. Please log in again." -msgstr "Vaša sesija je istekla. Prijavite se opet." - -msgid "Failed to update star." -msgstr "Nije uspjelo ažuriranje zvijezdice." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Datoteka ne postoji u direktoriju. Pokušajte ponovno preuzimanje." - -msgid "The file download failed. Please try again." -msgstr "Preuzimanje datoteke nije uspjelo. Pokušajte opet." - -msgid "Failed to delete conversation at server" -msgstr "Nije uspjelo brisanje razgovora na poslužitelju" - -msgid "Failed to delete source at server" -msgstr "Nije uspjelo brisanje izvora na poslužitelju" - -msgid "No messages." -msgstr "Nema poruka." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s je napisao/la:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s je poslao/la:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Datoteka: %(filename)s" - -msgid "Download All" -msgstr "Preuzmi sve" - -msgid "Delete Source Account" -msgstr "Obriši račun izvora" - -msgid "Delete All Files and Messages" -msgstr "Izbriši sve datoteke i poruke" - -msgid "Print Transcript" -msgstr "Ispiši prijepis" - -msgid "Export Transcript" -msgstr "Izvezi prijepis" - -msgid "Export All" -msgstr "Izvezi sve" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Neke datoteke neće biti izvezene

Neke datoteke iz ovog izvora još nisu preuzete i neće biti izvezene.

Za izvoz trenutno preuzetih datoteka kliknite \"Nastavi.\"" - -msgid "all files and transcript" -msgstr "sve datoteke i prijepis" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop klijent{}" - -msgid "Quit" -msgstr "Izlaz" - -msgid "Last Refresh: {}" -msgstr "Posljednje osvježenje: {}" - -msgid "Last Refresh: never" -msgstr "Posljednje osvježenje: nikad" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "Odjava" - -msgid "SIGN IN" -msgstr "Prijava" - -msgid "Nothing to see just yet!" -msgstr "Trenutno nema ništa za vidjeti!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Predaje izvora će biti prikazane lijevo, nakon što se preuzmu i dekriptiraju." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Ovdje će te čitati poruke, odgovarati na izvore i raditi s datotekama." - -msgid "Select a source from the list, to:" -msgstr "Odaberite izvor sa popisa kako bi:" - -msgid "Read a conversation" -msgstr "Pročitali razgovor" - -msgid "View or retrieve files" -msgstr "Pogledali ili dohvatili datoteke" - -msgid "Send a response" -msgstr "Poslali odgovor" - -msgid "Deleting files and messages…" -msgstr "Brisanje datoteka i poruka …" - -msgid "Deleting source account…" -msgstr "Brisanje računa izvora …" - -msgid "— All files and messages deleted for this source —" -msgstr "— Sve datoteke i poruke obrisane za ovaj izvor —" - -msgid "Failed to send" -msgstr "Slanje nije uspjelo" - -msgid " DOWNLOAD" -msgstr " Preuzimanje" - -msgid "EXPORT" -msgstr "Izvoz" - -msgid "PRINT" -msgstr "Ispis" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "Enkriptirana datoteka na poslužitelju" - -msgid "DOWNLOAD" -msgstr "Preuzimanje" - -msgid " DOWNLOADING " -msgstr " Preuzimanje " - -msgid "Earlier files and messages deleted." -msgstr "Ranije datoteke i poruke obrisane." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Datoteke i poruke obrisane\n" -"za izvor" - -msgid "Compose a reply to " -msgstr "Napišite odgovor za " - -msgid "Awaiting encryption key" -msgstr "Čekam enkripcisjki ključ" - -msgid " from server to enable replies" -msgstr " sa poslužitelja kako bi omogućio odgovore" - -msgid "Sign in" -msgstr "Prijava" - -msgid " to compose or send a reply" -msgstr " kako bi napisao ili poslao odgovor" - -msgid "FILES AND MESSAGES" -msgstr "DATOTEKE I PORUKE" - -msgid "SOURCE ACCOUNT" -msgstr "RAČUN IZVORA" - -msgid "Username" -msgstr "Korisničko ime" - -msgid "Passphrase" -msgstr "Lozinka" - -msgid "Two-Factor Code" -msgstr "Dvofaktorski kod" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop klijent v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"To korisničko ime neće raditi.\n" -"Trebalo bi biti barem 3 znaka dugo." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Ta lozinka neće raditi.\n" -"Morala bi biti između 14 i 128 znakova duga." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Taj dvofaktorski kod neće raditi.\n" -"Trebao bi sadržavati samo znamenke." - -msgid "SIGNING IN" -msgstr "Prijava" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Molimo unesite korisničko ime, lozinku i dvofaktorski kod." - -msgid "USE OFFLINE" -msgstr "Koristi offline" - -msgid "Show Passphrase" -msgstr "Pokaži lozinku" - -msgid "CANCEL" -msgstr "Otkaži" - -msgid "CONTINUE" -msgstr "NASTAVI" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "Da, obriši datoteke i poruke" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Želite li izbrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} s računa izvora za {source}?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Očuvanje računa će zadržati njegove metapodatke i mogućnost da se {source} ponovno prijavi na Vaš SecureDrop." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "jedna datoteka" -msgstr[1] "{file_count} datoteke" -msgstr[2] "{file_count} datoteka" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "jedan odgovor" -msgstr[1] "{reply_count} odgovora" -msgstr[2] "{reply_count} odgovora" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "jedna poruka" -msgstr[1] "{message_count} poruke" -msgstr[2] "{message_count} poruka" - -msgid "SUBMIT" -msgstr "POŠALJI" - -msgid "Preparing to export:
{}" -msgstr "Priprema za izvoz:
{}" - -msgid "Ready to export:
{}" -msgstr "Spremno za izvoz:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Umetnite enkriptirani USB pogon" - -msgid "Enter passphrase for USB drive" -msgstr "Unesite lozinku za USB pogon" - -msgid "Export successful" -msgstr "Izvoz je uspio" - -msgid "Export failed" -msgstr "Izvoz nije uspio" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Razumijte rizike prije izvoza datoteka

Malware
Ova radna stanica Vam omogućuje sigurno otvaranje datoteka. Ako otvorite datoteke na drugom računalu, svaki će se usađeni malware moći proširiti na Vaše računalo ili mrežu. Ako niste sigurni kako upravljati ovim rizikom, molimo Vas da ispišete datoteku ili kontaktirate svog administratora.

Anonimnost
Datoteke koje je predao izvor mogu sadržavati informacije ili skrivene metapodatke koji identificiraju taj izvor. Kako bi zaštitili svoje izvore, razmotrite uređivanje datoteka prije nego radite s njima na računalima spojenim na mrežu." - -msgid "Exporting: {}" -msgstr "Izvoz:{}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Umetnite jedan od pogona za izvoz predviđenih specifično za SecureDrop radnu stanicu." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Ili pogon nije enkriptiran ili je nešto drugo pogrešno s njim." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Dana lozinka ne radi. Molimo pokušajte opet." - -msgid "See your administrator for help." -msgstr "Obratite se administratoru za pomoć." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Zapamtite - budite oprezni kad radite s datotekama izvan svoje radne stanice." - -msgid "DONE" -msgstr "Gotovo" - -msgid "Preparing to print:
{}" -msgstr "Pripremanje za ispis:
{}" - -msgid "Ready to print:
{}" -msgstr "Spremno za ispis:
{}" - -msgid "Connect USB printer" -msgstr "Spoji USB pisač" - -msgid "Printing failed" -msgstr "Ispis nije uspio" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Upravljanje rizicima ispisa

QR kodovi i web adrese
Nikad ne upisujte i ne otvarajte web adrese, i ne skenirajte QR kodove sadržane u ispisanim dokumentima bez poduzimanja sigurnosnih predstrožnosti. Ako niste sigurni kako upravljati ovim rizikom, kontaktirajte svog administratora.

Točke printera
Bilo koji dio ispisane stranice može sadržavati identificirajuće informacije nevidljive golom oku, tzv. točke printera. Pomno razmotrite rizik kad radite sa ili objavljujete skenirane ispise." - -msgid "Please connect your printer to a USB port." -msgstr "Molimo spojite pisač sa USB portom." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "Da, obriši cijeli račun izvora" - -msgid "Are you sure this is what you want?" -msgstr "Jeste li sigurni da to stvarno želite?" - -msgid "When the entire account for a source is deleted:" -msgstr "Kad je cijeli račun izvora obrisan:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Izvor se neće moći prijaviti sa svojim kodnim imenom." - -msgid "Your organization will not be able to send them replies." -msgstr "Vaša organizacija mu neće moći slati odgovore." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Sve datoteke i poruke tog izvora će također biti uništene." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Brišem datoteke i poruke..." - -#~ msgid "Deleting source account..." -#~ msgstr "Brišem račun izvora..." - -#~ msgid "Download All Files" -#~ msgstr "Preuzmi sve datoteke" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "Gumb Nastavi će biti onemogućen sve dok Izvoz VM-a nije spreman" - -#~ msgid "Entire source account" -#~ msgstr "Cijeli račun izvora" - -#~ msgid "Files and messages" -#~ msgstr "Datoteke i poruke" - -#~ msgid "DELETE" -#~ msgstr "Obriši" diff --git a/securedrop_client/locale/is/LC_MESSAGES/messages.mo b/securedrop_client/locale/is/LC_MESSAGES/messages.mo deleted file mode 100644 index e18e44b3edba10de43786f53a58bb22f6b140e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13283 zcmcJVTZ|;vS;xz{+7l;E96~N61~INFyLMpX+w&A;nZ)j8k!zW;YQr}mq-zV7!N4xjVAoUPY7jvBu52L9-{$^LV0 z0N>2zo4}t1-wpl@co2Lm*Z|)Kdf*RlaGYK6C9b14InF(=ah#9c>^Mic?!LuwJ^=m^ z_)hR|Kn?Y6@J8@o!MB6o&+*1vkcsQ}g0BNFfO_t6@O|Lt!FPa{LCKYZ?*YFBGNkh( z@Lk{nLTa23fExcp;DcZd)O$~X3*c8l&EspJ=KGEO`rG;S55QY#e;p6q0lpKw4Lk}W zvg3k34GzHy_#2>}|6B0G;6H(q?`9e`&pSZ6bnXKs?;0q1&w{T9BT#ZZ3VsOuRq!DA zC*ULCcfb|!1f3lRKL`F2_;;ZCJ@!+Mg9@BFDE&1-joSt92R{SKE-!#}@JFEfe+Z?% z5&SJs`u-hIa(oHYJTHOL=bwT6bN+%qyy|=%G~jo@ec+8KL*suq$NNC_`yjXu)54VD{_df8~zAs*Ec{+>3km)@83eFYJWfY2JkR= z6SxA>rBee}z#T9Ep9d@8ofx|ehTyM*&w}Fny^v4#setP53@E*P3aoF)}t`Mj97e;t$^{{a+F{~bI5-m;YG=M1R#E`ZYS=fIo5KLBI! z5-7gCrM?BK;HqJ-v zuk6qLz^7)e&+=P3Ji;mN=(sHd`}ZOK9^-s%-u5uq;gmg#1NGYYyA8@;bjV)PVR1-* zEl%H4vq&!QOyo{N_3sLe#LMa-q|hkl$yZZe2U*<^~pM@~r} zXuUN^X69NB5y6cTGiamfLhPXi>$~Hud*yj$G%L6kV)4w zq1$8H-q>3-@u=A~Zk%_T4O}v(a=DpfdlUqAh?wr7LoqqC+m*Tpk=2wGCv6W$+kqc< zt@2R36kV7&E?Lvp2Yt`9{Q&Fk`axjAL1MN&<2^bYM2Xk36qtF&Qqc|?qr4`%c6XQn zFO5CDhzza4ZWs*Qme*R$2(w4Gb9!z-X*--%1}2Ws8#G^lBd_H)F?(*w!oYKkNBw<+C2}1uG5e67 z5xvkbtS`gz%${OQpE!o&##xZHvgXXT?%)RTK>k4VOQONpYwX_wkpo?JZ|UlT7;m@3T?LP$BHmO z+bC#RH-k4s2=TnGXy~m(gJGTC(l7E9xmV+X)EJ_o?g$j<>YtkSr8~Un}bo9WUW&Z&Fc4CpS?7_oom?5UbDCI zprP@cO6~aO*;9?midn6$Rm?`s)GM2(E1OQ`;Zqx%4X5HpWWH!GE4HlESgAq;wDA$! zMLsbKBPmSf27wajLXX%xF;NgxLM|^LL692xX@jVr(3i~tLpP3x-AD<9&|=MFdv+>W z@UoI;KO2!7#?8ndCdJLRi!Zf`E24Z8O%luV7Diq+=O1%4-?}N+R?K>(UN4`h)SXrP zrkIh$1Y&`sWHI@9~6+f|(aaLmbsJgubZc$k>ElJi@B$QBtFlvlwUH zx#g35NtHywJS`J)i4_dx4GS$emHmz(({iLq2XN~VHkt{EY(=1JU|beH+p?qI1+;If|A@+L3(*$f9E zMO)iyH_w4~mMQ=SsuH;0GV#!B`fb1ID)ozd*SPOz;Yr6bB@eJVSi{TqPC5#&EpkQK7M>-3+JhC z9b2yg(_D0%(2Ny!@WSg`ZKF+}*A(8?*j+CemUt^rHQ?s8Mv<63LnWImVx(mrAr~oU z#zU3>o>N!FKjX)BzoRnS$V z5`RNEzU8;VI}%$eP6A-l=37OgaTaN=Nv!t8nYge!m~^pFB|NjnA-f~gHnpEh=mQ_M zV;{KZplNp9i10zchyRMKwlhk^*{Fgzd-XU7v!#OdwU9McL^+f9Pz0=(c@<%ptd<># z`N&>E>`{Nf+E6)zcWsq|&TvM%{6WoRjV!E|N)jPkbWF6Jd+0=^$|<>5>)9FQ*}$lJ z8cWy|l~v0#xoGCSJO|FMZ0y>38cl4HhXTH8W$IR9_;g@u23y;yO2E&G*hTy(vdbd# z8lq)7%*KlIMGql4DqOr4j()0$)w4&vtAbZtPJx)bD$gp=|hjj?Y#Nv zorcvc%N%DG&Q_hWX?1n2N=3JorzYpL&#S~#g0JF2zU*_(XyGU)kYG%-2-FI{6DLFs zd9q%1&RDuiAAyf}Og*nm&fB>@k_;Zn8Xj9T=kr~P`Nl$fGp$oM&uum_t28R6LJ_@LG1o+-*(dfWr_LgFUll-{#R!Q%^dctPM+r<*i;Mx)Fb_s(tK)|L zFK4yZUMx~2CFS)k4_MyhFS0kHc%uZ2PH}{spLq_;DM~`0DPq}zD5^%41yZJCRayjS zt6oRu-Jb zckLR$j%}k-VZ4G6*A{PvS12F`=ZNA<)z;E!Vi&4dHr1vV5E=cZxpSHs?poONwAHY* z9(VlK(y>t|UTO@M&BCdTrA?BTUR_$DJY6i%O>$2P4*81N}>B~jE%kI@K$4W>EQG^aiZ--OO=rDgiV&s!EHZTI2DWt=1Z&4 zHl_+5+ROOxJ@>K4r8|d1bGtckx4G@GIbc5X8IxV!Z4PsN;J$^2mri&g>A))NOg3rr z(b9o~rF#|}Q%@g%@PTrMRdXVJl5#-1km*IOtkW0IrB_1VBz|Dr^jWjxN4;|dikjz4Te`;3LKT`3=dIKer*p*DL z=Q9c38ud+=N+I++Bud4h^qH(D<~r>Pb=nzgASQ=W;v~I<5bP>RDSjk@r2a0$nb_@b ztLU&V^$2H-lwc;?Ll09L5Q8&d!lSV^(beDX|-jSQJha&v+4+ zae7&!cPQeivO>S>1}#bJj?!m)9vTb-uVd!=Zl#w4F@b&TbLmB<=oKZ>OBj0bAyNSZ>anm*+%7PB2$vTgejQekbHxosyVyXCu`kO}#F zSSrH&C=rfIk~R~~XKJ}sQ6uH}cKV#18C}KcCCl^KF04;jHpr}=-}i%-%VG+pWQ4RM zAn+wC_QmT4n=?xz_nmeyPH-ORuDSARF0j;>3#3Koj7*R_VMnU(1!x&J-FFg`=vO;( z`}sC$z2^st>X@4+CQ7xGQC~BoX5$r3Rv)s1>yshbd!G^{eOf8b>VK4^SA!iFLPVIY z7kGY~`kgMVm*v81%&XC;LqawE^kU*p9Yl{!CdqTMoeXcg9YOeuL;(q%^FUpvmpf5< zsinp7R5~=kwwsi8F@HJp>un+cQ32Xno!T&Fy(An>rTG7K)6By%OF~%7)mQ1dHMfm} zjbndmjC#gs5oF3jJTZ^G_{jC%I-&wdUx;A@%D3{g-GKGAZS161SwgA54&i2GcHC$v zwFd+htS(#NKIaNA#Z}N`!C!?p*f%c;M!C$y=Y!X{?MH3mPR?-AfZ&X|#)^gbf1jZg z^(am=zb6+WhD4e1{ET9H8^K6Xq}WaikIV?vFFEOxLBMs43%J_@I%J!e?@7{HKTB*c zI>!_;^SIU;1$fd3 zaf5L$@ST(CZvjnTbLt4_mCOPf$jMZk6%=@q_N zWN}3!hiD+r269eXrnS~mp1R2frkr#~9bOoj1!+rhLDtEPWZ!F0|Dz=P0Suk0D=vpo zdPO;!XtOggZky~;a@IB;l<;}oP#G(%5)v|%TOC_%Pn7RukI)U#pySUl1=o-5U1jV& z-qc>PUiL+Sy^(<0TU9%;sdNFl7a9`!AeY*YGFq9m3__&&kTGQ*i~&l}aB z-m;s{Rxz7q;{+6QmH!6++Ds07mT(2 zU9&-L+w#CLp{lh#8`Rb$1PKfn&hvG~gi{g}#)FGEK1&p;2`Zb2@2q&tGAk`rr7w4v zbyr0`ISp6@ogNu0ORFlO$c4`+DuzmS+RA1%Tz1w94i&MYh!aH_n1uvMXT5%we{9`Q zLZYK~xHv;bJU4-<8b&d$sPSyt$ZGG|PDFKdEN&HSj78!R+fP|kd@fN5gAP@<5?C`K=m9o7%W4vt$AMk-j^zD@9cgZLB zXg=w-ZI=CCS9TNPw3#BG#d_)-HO2{rPRTj#1+1v%BC;G*``<3KWkWq%b!5Bha0JCW z$LuOzS1po^I?S3=gm|O8sLQzMuPxc?BdR!(Uc5^HJc6 zU4!8#ZaWJtitki!PuucJ8x6ckBqals%-O7Vl#*;-Eg$o$B!6u(3(1yc58G2| zA$^>Mv`uitAw<_gLVNG@q^)yU5D3*>X!PYUWuLgIT>GVEx3u=(1U6@ zs|}@wb3`!h)Xx_J#Tr;4idby)=2YQZ!(qp>CDByp*BEX7g_F}2GiK!L9f7ORq}^Sx z-mL^dG}PTpM!VY22%>C-g2^D4RVL(`q)MRpf}%wkPOti!p%7Rs0rM>w?5aeF;2T-ij5ds_Kw^C##2bNY5cl^3Qj zoFjDY$t#jwV^6+0wG9>wRIrssqf$H3&?oL9cjK%0eX;eH?^(!Rk+fq&X;zu%bVHuK z>S$YOvD#VYvw@0EyXRudz@KQBpU89FfZ8r$85&PM_8xT}NG~j!%GvY@X8GjW+Sae#JyCaqKuos1`{s|j7jXMo8f Q8kzPilYd;5Y`+Tp4~Qv7)&Kwi diff --git a/securedrop_client/locale/is/LC_MESSAGES/messages.po b/securedrop_client/locale/is/LC_MESSAGES/messages.po deleted file mode 100644 index ef21c86e3..000000000 --- a/securedrop_client/locale/is/LC_MESSAGES/messages.po +++ /dev/null @@ -1,396 +0,0 @@ -# Icelandic translations for SecureDrop Client. -# Copyright (C) 2021 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2021. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-26 02:30+0000\n" -"Last-Translator: Oktavia \n" -"Language-Team: Icelandic \n" -"Language: is\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} er þegar í gangi" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "Tek á móti 1 skilaboðum" -msgstr[1] "Tek á móti {message_count} skilaboðum" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "Tókst ekki að ná sambandi við SecureDrop-þjóninn. Reyni aftur að tengjast..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Tókst ekki að ná sambandi við SecureDrop-þjóninn. Athugaðu \n" -"tenginguna þína við Tor og internetið og prófaðu svo aftur." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Þessi auðkenni virkuðu ekki. Prófaðu aftur og \n" -"gakktu úr skugga um að þú notir nýjan tveggja-þátta kóða." - -msgid "That didn't work. Please check everything and try again." -msgstr "Þetta virkaði ekki. Yfirfarðu allt og reyndu aftur." - -msgid "You must sign in to perform this action." -msgstr "Þú verður að skrá þig inn til að framkvæma þessa aðgerð." - -msgid "Your session expired. Please log in again." -msgstr "Setan þin er útrunnin. Skráðu þig aftur inn." - -msgid "Failed to update star." -msgstr "Mistókst að uppfæra stjörnu." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Skráin er ekki til staðar í gagnamöppunni. Prófaðu að sækja hana aftur." - -msgid "The file download failed. Please try again." -msgstr "Mistókst að sækja skrána. Reyndu aftur." - -msgid "Failed to delete conversation at server" -msgstr "Mistókst að eyða samtali á netþjóni" - -msgid "Failed to delete source at server" -msgstr "Mistókst að eyða heimildarmanni á netþjóni" - -msgid "No messages." -msgstr "Engin skilaboð." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s skrifaði:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s sendi:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Skrá: %(filename)s" - -msgid "Download All" -msgstr "Sækja allt" - -msgid "Delete Source Account" -msgstr "Eyða aðgangi heimildarmanns" - -msgid "Delete All Files and Messages" -msgstr "Eyða öllum skrám og skilaboðum" - -msgid "Print Transcript" -msgstr "Prenta umritun" - -msgid "Export Transcript" -msgstr "Flytja umritun út" - -msgid "Export All" -msgstr "Flytja allt út" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Sumar skrár verða ekki fluttar út

Ekki er búið að sækja sumar skrár frá þessum heimildarmanni og verða þær þá ekki fluttar út.

Til að flytja út þær skrár sem búið er að sækja skaltu smella á \"Halda áfram.\"" - -msgid "all files and transcript" -msgstr "allar skrár og umritanir" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop biðlari {}" - -msgid "Quit" -msgstr "Hætta" - -msgid "Last Refresh: {}" -msgstr "Síðasti endurlestur: {}" - -msgid "Last Refresh: never" -msgstr "Síðasti endurlestur: aldrei" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "SKRÁ ÚT" - -msgid "SIGN IN" -msgstr "SKRÁ INN" - -msgid "Nothing to see just yet!" -msgstr "Ekkert að sjá hér ennþá!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Innsendar skrár heimildarmanna munu birtast hér til vinstri, eftir að þær hafa verið sóttar og afkóðaðar." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Þetta er þar sem þú munt lesa skilaboð, svara heimildarmönnum og vinna með skrár." - -msgid "Select a source from the list, to:" -msgstr "Veldu heimildarmann af listanum, til að:" - -msgid "Read a conversation" -msgstr "Lesa samtal" - -msgid "View or retrieve files" -msgstr "Skoða eða sækja skrár" - -msgid "Send a response" -msgstr "Senda svar" - -msgid "Deleting files and messages…" -msgstr "Eyði skrám og skilaboðum…" - -msgid "Deleting source account…" -msgstr "Eyði aðgangi heimildarmanns…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Öllum skrám og skilaboðum eytt fyrir þennan heimildarmann —" - -msgid "Failed to send" -msgstr "Mistókst að senda" - -msgid " DOWNLOAD" -msgstr " SÆKJA" - -msgid "EXPORT" -msgstr "FLYTJA ÚT" - -msgid "PRINT" -msgstr "PRENTA" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "DULRITUÐ SKRÁ Á NETÞJÓNI" - -msgid "DOWNLOAD" -msgstr "SÆKJA" - -msgid " DOWNLOADING " -msgstr " SÆKI GÖGN " - -msgid "Earlier files and messages deleted." -msgstr "Eldri skrám og skilaboðum eytt." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Skrám og skilaboðum eytt\n" -" fyrir þennan heimildarmann" - -msgid "Compose a reply to " -msgstr "Semja svar til " - -msgid "Awaiting encryption key" -msgstr "Bíð eftir dulritunarlykli" - -msgid " from server to enable replies" -msgstr " frá netþjóni til að virkja svör" - -msgid "Sign in" -msgstr "Skrá inn" - -msgid " to compose or send a reply" -msgstr " til að semja eða senda svör" - -msgid "FILES AND MESSAGES" -msgstr "SKRÁR OG SKILABOÐ" - -msgid "SOURCE ACCOUNT" -msgstr "AÐGANGUR HEIMILDAR" - -msgid "Username" -msgstr "Notandanafn" - -msgid "Passphrase" -msgstr "Lykilorð" - -msgid "Two-Factor Code" -msgstr "Tveggja-þátta kóði" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop biðlari útg.{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Þetta notandanafn mun ekki virka.\n" -"Ætti að vera a.m.k. 3 stafa langt." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Þetta lykilorð mun ekki virka.\n" -"Ætti að vera milli 14 og 128 stafa langt." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Þessi tveggja-þátta kóði mun ekki virka.\n" -"Hann ætti einungis að innihalda tölustafi." - -msgid "SIGNING IN" -msgstr "SKRÁI INN" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Settu inn notandanafn, lykilorð og tvíþátta auðkenningarkóða." - -msgid "USE OFFLINE" -msgstr "NOTA ÓNETTENGT" - -msgid "Show Passphrase" -msgstr "Birta lykilorð" - -msgid "CANCEL" -msgstr "HÆTTA VIÐ" - -msgid "CONTINUE" -msgstr "HALDA ÁFRAM" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "JÁ, EYÐA SKRÁM OG SKILABOÐUM" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} af aðgangi heimildamannsins {source}?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Sé aðganginum haldið, geymast lýsigögn hans og möguleikinn fyrir {source} til að skrá sig aftur inn á SecureDrop hjá þér." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "ein skrá" -msgstr[1] "{file_count} skrár" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "eitt svar" -msgstr[1] "{reply_count} svör" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "ein skilaboð" -msgstr[1] "{message_count} skilaboð" - -msgid "SUBMIT" -msgstr "SENDA INN" - -msgid "Preparing to export:
{}" -msgstr "Undirbý útflutning:
{}" - -msgid "Ready to export:
{}" -msgstr "Tilbúið að flytja út:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Settu inn dulritað USB-drif" - -msgid "Enter passphrase for USB drive" -msgstr "Settu inn lykilorð fyrir USB-drifið" - -msgid "Export successful" -msgstr "Útflutningur tókst" - -msgid "Export failed" -msgstr "Útflutningur mistókst" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Skilningur á áhættu við að flytja út skrár

Spilliforrit
Þessi vinnutölva gerir kleift að opna skrár á öruggan máta. Ef þú opnar skrár á annarri tölvu, áttu á hættu að ígrædd spilliforrit smiti þá tölvu eða breiðist út á netkerfinu. Ef þú ert ekki viss um hvernig best sé að gæta öryggis svið þessar aðstæður, ættirðu að prenta skrána eða hafa samband við kerfisstjórann þinn.

Nafnleysi
Skrár sem heimildarmenn senda inn geta innihaldið upplýsingar eða falin lýsigögn sem gætu varpað ljósi á hverjir þeir eru. Til að vernda heimildarmenn þína ættirðu að yfirfara skrárnar og breyta þeim áður en þú ferð að vinna með skrárnar á nettengdum tölvum." - -msgid "Exporting: {}" -msgstr "Flyt út: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Settu inn eitt af útflutningsdrifunum sem útbúin hafa verið sérstaklega fyrir SecureDrop-vinnutölvuna." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Annað hvort er drifið ekki dulritað eða að það er eitthvað annað að því." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Uppgefið lykilorð virkaði ekki. Reyndu aftur." - -msgid "See your administrator for help." -msgstr "Hafðu samband við kerfisstjórann þinn til að fá frekari aðstoð." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Mundu eftir að fara varlega þegar þú ert að vinna með skrár utan vinnutölvunnar þinnar." - -msgid "DONE" -msgstr "LOKIÐ" - -msgid "Preparing to print:
{}" -msgstr "Undirbý prentun:
{}" - -msgid "Ready to print:
{}" -msgstr "Tilbúið að prenta:
{}" - -msgid "Connect USB printer" -msgstr "Tengdu USB-prentara" - -msgid "Printing failed" -msgstr "Prentun mistókst" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Áhættumat við útprentun

QR-kóðar og vefslóðir
Aldrei skal skrifa og opna vefslóðir eða skanna QR-kóða úr prentuðu efni án þess að gera öryggisráðstafanir. Ef þú ert ekki viss um hvernig best sé að gæta öryggis svið þessar aðstæður, ættirðu að hafa samband við kerfisstjórann þinn.

Punktamynstur prentara
Allir hlutar útprentaðrar síðu geta innihaldið auðkennanleg mynstur prentdíla sem sjást ekki með berum augum. Mundu eftir þeirri áhættu þegar þú ert að vinna með eða birta skannað prentefni." - -msgid "Please connect your printer to a USB port." -msgstr "Tengdu prentarann þinn við USB-tengi." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "JÁ, EYÐA ÖLLUM AÐGANGI HEIMILDARMANNS" - -msgid "Are you sure this is what you want?" -msgstr "Ertu viss um að þetta sé það sem þú viljir?" - -msgid "When the entire account for a source is deleted:" -msgstr "Þegar öllum notandaaðgangi heimildarmanns er eytt:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Heimildarmaðurinn mun ekki geta skráð sig inn aftur með kóðanafninu sínu." - -msgid "Your organization will not be able to send them replies." -msgstr "Þið munið ekki geta sent þeim svör." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Öllum skilaboðum og skrám frá þessum heimildarmanni verður einnig eytt." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Vilt þú eyða {files_to_delete}, {replies_to_delete}, {messages_to_delete} úr aðgangi heimildarmannsins {source}?" - -#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" -#~ msgstr "

Sumar skrár verða ekki fluttar út

Ekki er búið að sækja sumar skrár frá þessum heimildarmanni og verða þær þá ekki fluttar út.

Til að flytja út þær skrár sem búið er að sækja skaltu smella á \"Halda áfram.\"" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Eyði skrám og skilaboðum..." - -#~ msgid "Deleting source account..." -#~ msgstr "Eyði aðgangi heimildarmanns..." - -#~ msgid "Download All Files" -#~ msgstr "Sækja allar skrár" - -#~ msgid "Print Conversation Transcript" -#~ msgstr "Prenta umritun samtals" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "HALDA ÁFRAM hnappurinn verður óvirkur þar til útflutnings-sýndarvélin (Export VM) er tilbúin" - -#~ msgid "Entire source account" -#~ msgstr "Öllum aðgangi heimildarmanns" - -#~ msgid "Files and messages" -#~ msgstr "Skrár og skilaboð" - -#~ msgid "DELETE" -#~ msgstr "EYÐA" diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.mo b/securedrop_client/locale/it/LC_MESSAGES/messages.mo deleted file mode 100644 index ee29e7b307ea5183493015db697f90623fef6d44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7025 zcmaKwTZ|-C8OM)`g3Wrv3!eRV>=llNO|9rh~U310v6<3q{dhVy+uhdy^-v{}__40?5`Y`wk_!00T_yzC{@bln5 zz>kCbu2kw1;0@pja2EU$7=qV=Pl0q*&x2QiFM^*0e+Bly-{tK``FI2G$H7m74}-Ga zW8mk&?}Gcl=fTf{FM~4g8=$QBCRhOf3yM8gV!YUW9VqVy^Y^>JYj|G<4}uSY`@wI3 z9|fNS9q=Vk`u!Wc1>DEvV)r~K`>ugv&m*AN^C&2;`zFXg^=2s{aX z8T>jZ{`dtbJh=$o1ilS^5xjy)Zw7Ayp`5xOyaTL*&%RHoZ-KJT0fHv{nFXc)GAQ#5 zKw1BLIsP2{D(|m?2f%#+e0&n5 zi+T=}`1~3aKKvOJo?gXZ;oTf4emDw3J9|l-=ecFvVQz`D>`g9NOD@q$xo+cTN_)w? zavkRu-!!;oPn!E4Zn=uwVwYUvXW@eQ<1TKoUpP9tmU$pu>~#l!7xQPN$j0~>IKwUc z8C{ZlAK zL%n8n&%{X-Zkt|7l_R6K!&Jv956OlXYyNG?Kxy4_gXDxNZ@FIL1$|8KM%%;03j=-D zY^zGSQE_Uj(rk39ja5fg@@?ei%g$&^{hkiOge|$<4VEyvZMv+s7=^>!EhW9;8y5$3 zH%#}etQ_e=HAqYpn8a?ZgKN5B5SXrAUG|zp+uH5BUQkkF&o3I^Bu0xy{!mYp$-JYzcoJOT}dZptm>ZNMU(anZ# zJFSyWOF5@jnyrp<+=zHbd#pk@#A<@!oEwHwl1-OAb|N>3yOB3cMjzK*Hr5-x#c8+8 z_SRDjup`*Wg1+#$5+mBW+*s6gr`;|uJ8iXOM@m$(1;wFoGIleULKVx=OZ$y>zDEz? zrxI7|UI^_Z&gPsKC)x{asC#bW>Yf)7w=mis$5~<*nPM+@AV!z$EDQSPLlTC-9hk$h zZQ4cb+*bv?4kIjIGwW2%W!08hk4(I=paa9scD3P^MmSE95-*G=?l>eiMn9S|!L~{E ztCd!@(NQaI91k}lXsL2`l7a-#)hUh=3up9j+{dys*$Rv6u51gH-5(77J&84lj(I;})no}T`6{CG(JcH*J7?%rHJPZST)!qoV z^px+~UO#{hs-0zBoURSLI7UK{8PO!C%#}4+4!Fa%o zbzNcLo;CRa6H4;Hr@(CKU5>*N(q}14p9<-tR@><4(o(J3aMWs^bLynWP!cT45+<`f zR;Qizj9zqVPRFqVyi5B|bC?Yz!Q+gMLbjoa5RpNqA}k9hONx$i2wR3CWkaM3*X07> zhkX&Y{M2!G9KFdzsly<%N?i~w8)d9LUX*;xQ(0X$r=^qB2ixj`h0zqFn&E;wqzCeJq+#IHW=dyAs5o!I;t6hY=w`K_r+?jcoMeb zm<3%;T;Fp8eP|*ShYKwu2Uf8j_q|^6-n1VVJK=&ZtTc-)v`hvT7hTE}ecCCviuGo3 zv8?ZFF4U{HJk)GB1<~xHRY%`NG#B*JYOSUl<+`KqcIxG7?Vj@DVvFAWe&0)jzI^h=PMpxbq)7^I zo&2K%_QSDZY%sH-K<)srwGnnlK7)3P~g_{g6sZkUi-y3-N{IYISqaOaj zya3JjYMnRwdY**C<^U%}RQjwXiLXbB)Ayum&1c%(7tifAwTx)9Q+8{u3vFeoE7he| z8N#(!YkE}Ywx!N3XVu_jN!&vSyK-J=lWkK%>)`!}7|M>r$s6SsM6$Mx8Z$!!!X9~P z+=awDzqp&5CP~}7nZ6fQG4a^vP zxdBxeA5t2RHxR07_M^=^9I2lkvn--%In~m>i-}^-Fdx{d;S%ft0O4UBM z(b$pLN`utbQhwCRda2pyII7w>Sw(HK`g)=rw$#3~H7~WrP;|liA>$M(?jPjmA-?6; zhKUvsyFDbjj+*29iSHD@ZcWcq%YLS~=&hwyHtSex2aJPp9(f~Ci@iX^*Ucia8KSNu z>PhxW0d57A06dVoem6vNh1cl+dKy^klW>PT+Vp1Rl;+i@?X<%o&nCr1&n*=esoXW< zojbuthBwUl^AgJeLc)5oPik_bZADH&j`9m5NU6Q3vSWcTUjSmjI9VhPZAwv&XH!hk zanF%^nTE`|J{cKGbv|X#|2tAPBhKUrElRpUTJ!sdJRtFTlEX`C^!zv(X}T2bxg3iI z(9cXsNiL9tpfx#TYNLYvJO#UFcQp!DFx_(opBDH%>+zp6E=8Z1kj5Dut?J1CQ|*RxgJ*kb>G De#6Hy diff --git a/securedrop_client/locale/it/LC_MESSAGES/messages.po b/securedrop_client/locale/it/LC_MESSAGES/messages.po deleted file mode 100644 index 836d4bbaa..000000000 --- a/securedrop_client/locale/it/LC_MESSAGES/messages.po +++ /dev/null @@ -1,375 +0,0 @@ -# Translations template for SecureDrop Client. -# Copyright (C) 2022 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.7.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-31 18:30+0000\n" -"Last-Translator: Claudio Arseni \n" -"Language-Team: Italian \n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} è già in esecuzione" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "Recupero di 1 messaggio" -msgstr[1] "Recupero di {message_count} messaggi" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "Impossibile raggiungere il sevrer SecureDrop. Nuovo tentativo di connessione in corso..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Impossibile raggiungere il server SecureDrop. Verificare la propria \n" -"connessione a Internet e a Tor, quindi riprovare." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Le credenziali non funzionano. Riprovare, e \n" -"assicurarsi di usare un nuovo codice a due fattori." - -msgid "That didn't work. Please check everything and try again." -msgstr "Qualcosa non ha funzionato. Verificare tutto e riprovare." - -msgid "You must sign in to perform this action." -msgstr "Devi effettuare l'accesso per eseguire questa azione." - -msgid "Your session expired. Please log in again." -msgstr "Sessione scaduta. Effettuare nuovamente l'accesso." - -msgid "Failed to update star." -msgstr "" - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Il file non esiste nella cartella dati. Prova a scaricarlo nuovamente." - -msgid "The file download failed. Please try again." -msgstr "Scaricamento del file non riuscito. Riprovare." - -msgid "Failed to delete conversation at server" -msgstr "Eliminazione della conversazione sul server non riuscita" - -msgid "Failed to delete source at server" -msgstr "Eliminazione della fonte sul server non riuscita" - -msgid "No messages." -msgstr "Nessun messaggio." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s ha scritto:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s ha inviato:" - -#, python-format -msgid "File: %(filename)s" -msgstr "File: %(filename)s" - -msgid "Download All" -msgstr "Scarica tutto" - -msgid "Delete Source Account" -msgstr "Elimina l'account della fonte" - -msgid "Delete All Files and Messages" -msgstr "Elimina tutti i file e i messaggi" - -msgid "Print Transcript" -msgstr "Stampa trascrizione" - -msgid "Export Transcript" -msgstr "Esporta trascrizione" - -msgid "Export All" -msgstr "Esporta tutto" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "" - -msgid "all files and transcript" -msgstr "tutti i file e la trascrizione" - -msgid "SecureDrop Client {}" -msgstr "Client SecureDrop {}" - -msgid "Quit" -msgstr "Esci" - -msgid "Last Refresh: {}" -msgstr "Ultimo aggiornamento: {}" - -msgid "Last Refresh: never" -msgstr "Ultimo aggiornamento: mai" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "ESCI" - -msgid "SIGN IN" -msgstr "ACCEDI" - -msgid "Nothing to see just yet!" -msgstr "Non c'è ancora nulla da vedere!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Gli invii della fonte verranno mostarti sulla sinistra, una volta scaricati e decifrati." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "" - -msgid "Select a source from the list, to:" -msgstr "Selezionare una fonte dall'elenco, per:" - -msgid "Read a conversation" -msgstr "Leggere una conversazione" - -msgid "View or retrieve files" -msgstr "Visualizzare o recuperare i file" - -msgid "Send a response" -msgstr "Inviare una risposta" - -msgid "Deleting files and messages…" -msgstr "Eliminazione in corso di file e messaggi…" - -msgid "Deleting source account…" -msgstr "Eliminazione in corso dell'account della fonte…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Tutti i file e i messaggi eliminati per questa fonte —" - -msgid "Failed to send" -msgstr "Invio non riuscito" - -msgid " DOWNLOAD" -msgstr " SCARICA" - -msgid "EXPORT" -msgstr "ESPORTA" - -msgid "PRINT" -msgstr "STAMPA" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "FILE CIFRATO SUL SERVER" - -msgid "DOWNLOAD" -msgstr "SCARICA" - -msgid " DOWNLOADING " -msgstr " SCARICAMENTO IN CORSO " - -msgid "Earlier files and messages deleted." -msgstr "File e messaggi predecenti eliminati." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"File e messaggi eliminati\n" -" per questa fonte" - -msgid "Compose a reply to " -msgstr "Rispondere a " - -msgid "Awaiting encryption key" -msgstr "In attesa della chiave di cifratura" - -msgid " from server to enable replies" -msgstr " dal server per abilitare le risposte" - -msgid "Sign in" -msgstr "Accedi" - -msgid " to compose or send a reply" -msgstr " per scrivere o inviare una risposta" - -msgid "FILES AND MESSAGES" -msgstr "FILE E MESSAGGI" - -msgid "SOURCE ACCOUNT" -msgstr "ACCOUNT DELLA FONTE" - -msgid "Username" -msgstr "Nome utente" - -msgid "Passphrase" -msgstr "Passphrase" - -msgid "Two-Factor Code" -msgstr "Codice a due fattori" - -msgid "SecureDrop Client v{}" -msgstr "Client SecureDrop v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Il nome utente non è valido.\n" -"Deve avere una lunghezza di almeno 3 caratteri." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"La passphrase non è valida.\n" -"Deve avere una lunghezza compresa tra 14 e 128 caratteri." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Il codice a due fattori non è valido.\n" -"Deve contenere solo numeri." - -msgid "SIGNING IN" -msgstr "ACCESSO IN CORSO" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Inserire un nome utente, una passphrase e un codice a due fattori." - -msgid "USE OFFLINE" -msgstr "USA OFFLINE" - -msgid "Show Passphrase" -msgstr "Mostra passphrase" - -msgid "CANCEL" -msgstr "ANNULLA" - -msgid "CONTINUE" -msgstr "CONTINUA" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "SI, ELIMINA FILE E MESSAGGI" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "" - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "un file" -msgstr[1] "{file_count} file" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "una risposta" -msgstr[1] "{reply_count} risposte" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "un messaggio" -msgstr[1] "{message_count} messaggi" - -msgid "SUBMIT" -msgstr "INVIA" - -msgid "Preparing to export:
{}" -msgstr "" - -msgid "Ready to export:
{}" -msgstr "" - -msgid "Insert encrypted USB drive" -msgstr "" - -msgid "Enter passphrase for USB drive" -msgstr "" - -msgid "Export successful" -msgstr "Esportazione avvenuta con successo" - -msgid "Export failed" -msgstr "Esportazione non riuscita" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "" - -msgid "Exporting: {}" -msgstr "Esportazione: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "" - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "" - -msgid "The passphrase provided did not work. Please try again." -msgstr "" - -msgid "See your administrator for help." -msgstr "" - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "" - -msgid "DONE" -msgstr "" - -msgid "Preparing to print:
{}" -msgstr "" - -msgid "Ready to print:
{}" -msgstr "" - -msgid "Connect USB printer" -msgstr "" - -msgid "Printing failed" -msgstr "" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "" - -msgid "Please connect your printer to a USB port." -msgstr "" - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "" - -msgid "Are you sure this is what you want?" -msgstr "Procedere veramente con questa scelta?" - -msgid "When the entire account for a source is deleted:" -msgstr "" - -msgid "The source will not be able to log in with their codename again." -msgstr "" - -msgid "Your organization will not be able to send them replies." -msgstr "" - -msgid "All files and messages from that source will also be destroyed." -msgstr "Anche tutti i file e i messaggi inviati da quella fonte verranno distrutti." - -#~ msgid "Deleting files and messages..." -#~ msgstr "Eliminare file e messaggi..." - -#~ msgid "Deleting source account..." -#~ msgstr "Eliminare gli account delle fonti..." - -#~ msgid "Download All Files" -#~ msgstr "Scarica tutti i file" diff --git a/securedrop_client/locale/messages.pot b/securedrop_client/locale/messages.pot deleted file mode 100644 index 3b84630b6..000000000 --- a/securedrop_client/locale/messages.pot +++ /dev/null @@ -1,353 +0,0 @@ -# Translations template for SecureDrop Client. -# Copyright (C) 2023 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2023. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.9.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" - -msgid "{application_name} is already running" -msgstr "" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "" -msgstr[1] "" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "" - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" - -msgid "That didn't work. Please check everything and try again." -msgstr "" - -msgid "You must sign in to perform this action." -msgstr "" - -msgid "Your session expired. Please log in again." -msgstr "" - -msgid "Failed to update star." -msgstr "" - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "" - -msgid "The file download failed. Please try again." -msgstr "" - -msgid "Failed to delete conversation at server" -msgstr "" - -msgid "Failed to delete source at server" -msgstr "" - -msgid "No messages." -msgstr "" - -#, python-format -msgid "%(sender)s wrote:" -msgstr "" - -#, python-format -msgid "%(sender)s sent:" -msgstr "" - -#, python-format -msgid "File: %(filename)s" -msgstr "" - -msgid "Download All" -msgstr "" - -msgid "Delete Source Account" -msgstr "" - -msgid "Delete All Files and Messages" -msgstr "" - -msgid "Print Transcript" -msgstr "" - -msgid "Export Transcript" -msgstr "" - -msgid "Export All" -msgstr "" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "" - -msgid "all files and transcript" -msgstr "" - -msgid "SecureDrop Client {}" -msgstr "" - -msgid "Quit" -msgstr "" - -msgid "Last Refresh: {}" -msgstr "" - -msgid "Last Refresh: never" -msgstr "" - -msgid "{}" -msgstr "" - -msgid "SIGN OUT" -msgstr "" - -msgid "SIGN IN" -msgstr "" - -msgid "Nothing to see just yet!" -msgstr "" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "" - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "" - -msgid "Select a source from the list, to:" -msgstr "" - -msgid "Read a conversation" -msgstr "" - -msgid "View or retrieve files" -msgstr "" - -msgid "Send a response" -msgstr "" - -msgid "Deleting files and messages…" -msgstr "" - -msgid "Deleting source account…" -msgstr "" - -msgid "— All files and messages deleted for this source —" -msgstr "" - -msgid "Failed to send" -msgstr "" - -msgid " DOWNLOAD" -msgstr "" - -msgid "EXPORT" -msgstr "" - -msgid "PRINT" -msgstr "" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "" - -msgid "DOWNLOAD" -msgstr "" - -msgid " DOWNLOADING " -msgstr "" - -msgid "Earlier files and messages deleted." -msgstr "" - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" - -msgid "Compose a reply to " -msgstr "" - -msgid "Awaiting encryption key" -msgstr "" - -msgid " from server to enable replies" -msgstr "" - -msgid "Sign in" -msgstr "" - -msgid " to compose or send a reply" -msgstr "" - -msgid "FILES AND MESSAGES" -msgstr "" - -msgid "SOURCE ACCOUNT" -msgstr "" - -msgid "Username" -msgstr "" - -msgid "Passphrase" -msgstr "" - -msgid "Two-Factor Code" -msgstr "" - -msgid "SecureDrop Client v{}" -msgstr "" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" - -msgid "SIGNING IN" -msgstr "" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "" - -msgid "USE OFFLINE" -msgstr "" - -msgid "Show Passphrase" -msgstr "" - -msgid "CANCEL" -msgstr "" - -msgid "CONTINUE" -msgstr "" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "" - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "" -msgstr[1] "" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "" -msgstr[1] "" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "" -msgstr[1] "" - -msgid "SUBMIT" -msgstr "" - -msgid "Preparing to export:
{}" -msgstr "" - -msgid "Ready to export:
{}" -msgstr "" - -msgid "Insert encrypted USB drive" -msgstr "" - -msgid "Enter passphrase for USB drive" -msgstr "" - -msgid "Export successful" -msgstr "" - -msgid "Export failed" -msgstr "" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "" - -msgid "Exporting: {}" -msgstr "" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "" - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "" - -msgid "The passphrase provided did not work. Please try again." -msgstr "" - -msgid "See your administrator for help." -msgstr "" - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "" - -msgid "DONE" -msgstr "" - -msgid "Preparing to print:
{}" -msgstr "" - -msgid "Ready to print:
{}" -msgstr "" - -msgid "Connect USB printer" -msgstr "" - -msgid "Printing failed" -msgstr "" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "" - -msgid "Please connect your printer to a USB port." -msgstr "" - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "" - -msgid "Are you sure this is what you want?" -msgstr "" - -msgid "When the entire account for a source is deleted:" -msgstr "" - -msgid "The source will not be able to log in with their codename again." -msgstr "" - -msgid "Your organization will not be able to send them replies." -msgstr "" - -msgid "All files and messages from that source will also be destroyed." -msgstr "" - diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.mo deleted file mode 100644 index 4e15aeedce740948e76cd2199f82f08147708687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12446 zcmbuFe~cXGS;ya`PMTixqa^%l8t5CB5S!ecYbP|}Vmn#i?b+Mj?Vaz3V>c;bZg=i( z;@z3e%Ap%iVApRgt4~ai2R9Y&eLV?n#5+ET22v8|V ze7^5Hvpah}3zDw<-gjsAo%elyKhOJ&|K|1szhd~b8Fw*`zr~oJ1E08&KYX6M$(Xl+ z9|ms$e*yeq@CEQ);2(hR0KW=;5BM$czpgXpKfy0>{jX!j9J}6_&%NE4N4Wlb7I_bN z=vHHX0GtE0RU70Ha}m4)%nSS|DB6AvJOEyIo1b?h_(NRZ28x~u@Mdrh{6X*nsC83N z`|W@q06z|D{y%__W^RIb(R~Lf{_ZKR?=PJ&@W;TffDeKH13n49kHu%e zUj?VZzXG2I-_7D$_jwT3%&&uz*YAP+Gr!NDN5Ln@DqLGTRtDEJ(x=UxLp1m23Uv`+`bq|7s*==~_j66SgEz2K)n>FH~r^!*+1 z5P0W1Jw4N)u4 zUIj5d^QR!DWBwLIH0Iwx+5astDZcIkrN5(~1wRDJ9)B8?Tz?5X5B?U2DVPI4>g9hY zDE-ty(bWdE{)a*B_adn0e+Lx3Uj)U+SHWZ8H$d6h9XMwf48R8Xr2^lH(sjQDijOaY z(#PxI0q{SH``-cUT;GB)gv;P6_yTww{AW<|7{_RYQ{YYD8SqB%EGYXs4~oA8gf#OJ zQ1bk3Q2YKFsOMh?p8)>_{Bf{}@Fbs~1wR1(HTXDqc-)wW!H<9sg0F$o;I~21bz%Zv z0xyF-@GGF~VtUfc>2Xkc*Z^hcmq7lR=lO#Pna_h3d>v#-bKr>I=P0OsBT)MJ4bXyr z42rLBftY}~8D~S(<|ueQcmb?|Pk`5fvSH~_G|PXN7~)&9J;NwJ;$e=VH5QAT_ZKL7 z5tEZoam(49zDxGy=Wf2dpMi;)bBtw1gCRNUGsZxyjvwhja(W9x{M^Mr#pZ(y(O>-p zT>K>CLB>MygLI}(oACfcx>dY*7ek+)V4P)0Hj-2IGgG;+d{-XR=OM;h8B>f$8K)Vt zsS6B!WLIm9rYbDKul#q9VIemlN)^6U~Dw8P8> zEWI7B*`VD{!z>G#vBred9y!?z9d$ds&_=PFnDoMUbhaa}6~uP1U@M99Ad17b9&(%W zwVky3U8v3Mc9d_5nmo8D>awuaPosQ?nPDsF=TQ=8leV#Lcapvh($MzftPgA^+Y(Aw zT!l8@j55d1xb1bq04cd$Te%)f;iVhJQI@Aco}`nWney++MacuHx0AfWYb}O^AkA&E zj-*Snd)llU?D*y3Cu+k)w7w(Kqj)_@yMajN`&N`iQXxdE8% z6^r_fC+%WEH$1NQI~})0#`2g$$(-HZl(>`BNlJo~w0r%vPLypr;URblx>RvC=~Ta* zbVIuybk;kA%;umuA=v=izu^O?zW5e!R*hUzbhTGGbNQMOmkehfLET53d;xHE-gFW7WT|3n}8HnC-t@i&n z^;(?7J6*hMD3n=e7FmCd+t`9#+p%8j*{GdYY@01NBiM~?H_U@}kO$Bcv!7D&9ECH zgzS7-(J-7zlU|VJ#OmF>7@&cEA<&W+nB4{g{EDuFP*C| znfm#~g{2i!4^k3Yx}Q?ojtGQaC!o1-hbq#Dkb}$>bqe{SVOY}?_e(}lLo?V)*dgAN z>G;N!zV#>OK}Z%Kg`sG>EfS8ujw>$Mpc$XqQ(6?G}O| zG#7W+dCFdS)`;I_TWikP`TFv5?R0(F%(^F~XwREGl+2m=sDlytJb(4P!YcQhp&Va% zpx?vqLQ5n|CyjJRB*nm;xGs_Dlxt-`&O6%?xs=RDP%E-bjzy&5L>YbI#ji4D?>QvD ziGyx*H?iwLtYv`_U}faG(xSzKx~SIpu-ucl0!g+n=q@Y&kcQGs_c^4w%OmBfRU1-1{p z;*&5mSkAl4b~3R}9CD7-4hIiLp2H-j23vR1EmE4}Qu#bl(&zWK&3a)gT8~s9cOGRv^aI|!X>dh;Ki#+KR^K3aKGs}(B zP1|UCTv%OkUv#q2z136m4ektc$uzMTv2WpaSKoCvUHaQoI6LibhMnFdPj!^dgQ8X_ z6KiOxMDua9GQ|{fiE>`nql6F5ae>)j0G1eeLb0#4h zL)03zno8cI54gRL9(%~PHiMM-Kt#vD6*}Ewlyudw0Xh4vn8d!ccg_@Z21+SEiWSO; zbd5(L24;0k$nE|65wTCbfLX>$3Owto3S@@2x#J3ACN225IXNj3{2^f=?ZO2|l1AaS znp+W`i+rko(S*xEBdSocsXSLLy$aIYS$7yNTo%U!BGtCknFQ(K0u%+V7E>93BbC94 z08yroaro*XWft^%WyK){`|uTl^GI>5^K^@<6K{yn!@ia@Am6Vt*5xEu6o!eC2u2=< z97adg&+6Qm^=V`pF3jpOb6NoSvEhDkw z>%i#{Ly?WA%!T^$xSgrb)mQ4aPT{#!x62EwOVf2*o1R`+C1+M=>{GK`K$Kmj+06T? zq}K~mHta$OTd6Qls34h`Lh(irN0)s;Q$16bnpC+W2D(lc90`gC=_knNmF3_IV=UaY zNEC&ckTolnBFFZ!G*j-C^2`ZHHX4>6@fr_$hZ)H!Sq4de3Rv87N4^@;gxBWh2a>ThHdE6J1{TU?k}B3EdU zi5aTFDSM$_Tbh_(n3$>AGYeDmjr%@Gxj&{-Yr>`2j`|-{c6N1c&NgfFb$h%%Uu(=g zTAP_!qIf;Y)Oe%MQE6f&47&SMc6>9>d)d^HBQ%LvFPzL=UTJeinZzuP5DUa%c4TBw-yDeLZx%{S)jL&+SSeD4@XrJN@wR%km-**v_&!yPJ-hg}5B z!u-VQ%Iw5L!+Eln^)Q{N#{>_wHDw=Ki}JC>PM=UaF^fTG6rnwLnVmTHFdZZPaw4`T z?a_zF&QF{UW1_N?)MK7U`@rN;{*4)Xs@6DPTPm#jS{pMhK6xR-!;) zqb?1HEZhBLQg%S5cR$;XHu#lZoI(jLlyLWDu2J2v1JLZpt$@h45pkd()U3h8=v*tB zGcrjS5iTo>YD09x!2?GxTY9Wtkixf&AM&INx6GxVxBK$$=a>$;S-64NE4==Zhv z>Gv@a%JxXC>~Ws$2c4(;?62k@l?M$+)YRL3iQZ{YGR6%ey4#YOMc;48TG13FjBpQz zTr+U@m90>r#3mh@BXOTjm)N2>x{4a2V#$_f#jZJmZm5nt-?r6{+Ce+X2vCUM1_&(; z)`AX&iI$bZTw9Q$w4~X|-D{DaP0<;wbvEdy(xrL2A8jENCx5J2RQrR7c5(K!cPibI zEFi|Y{iC=|7SvNDjG$}Rg6NW-9Je}N!Az88$@n#vA88aW%7==r$ukw&p4xqBu&%m< zXh~*Qb_zKN`&MCH@d9#qwr~#GHQwe1>y`|co^n;Mu#Qhk;DrWJb|GMw73q~ZN1;F| zS8`(C*QRl(>O4s1D3JPoexLqXLKE@n((1|vVnpyt5gb2zTf^juC|<)ZpvcZqHC;$8 zA&sk!`EGnkUK?TTNy(J+`#7imfN1Yuj_m*2$JA(Kshm($I@Ur(l`a5c9?mqJ3F&LQ z*ySphf;WHU)FZq&=*VNF{-LAklJ_TAAkHHbA`RssF@s8tR=eM$>P!fWh*#0yz(__t ziGz-dZbMOXjVwrUGH|>52`_iEk~r!rE26MySF{^7}s{}@4mw0 z6pfO>F!G5>hWsZ_9x-*=3dBrof+GmUqB>)AtnlZe>qu%U`i^|7yOcwtqmpNQGE)Ch z3=Dz;hNeb|X?hoq&<2@=h}9{1g|CD-eRVss5~(&r(Tl*xB%n)LOTmb+i37R@rHkcu zg=cUm7rNqP%Lg$UQ1!;jf+;d=jaMzuS4cIpwK7D7cD|IVag!vD+zY>IVngApS$RqU ziKBYIotWCv+119m1?uGKrN-h)jV#_=up|9Sq*vK+s74t{8u8MBokXD1*#a*RijJiV zfrJf0)j&6i+-Q?K0l~I(e$11XLnuZ9!p0`mKa0@9y1JDUI$P<4#f{{uwq?mj-E}Ux zLYrjFEGRmYMa)_!SS0^H$zK<)`DCIU`Q0OUNOFZgNpK`xdaGIwF5@&zDSOlvGb*NZfB~PvfpyE`Sb*&%O|CGDPOa|6Q8x+s>R-lSVc{Gek6;up&o5no7(D}xanH^e; z8Lb;|ap#U@2_P@`;ee&cZ;(&(ap=G_IAww`7VC|nYM-pX`x3GqAF<0p5$IHqP}Qsx z>T!x|tcI6(|Da*QqD2<=wGocsk1#HplH!WKDN=y=!UHOCr_wen8>cQHx|wBue^Z@L zt)N)qR`R(pO5gZO^NJB#$Mq|bvdXEKND_I(O(Zc$WfVtDQlyR4KE;-u%m@8bB#`0} z&VTyV*jq8?hRfNmQBuT!p~sdynB^d%;T}d__rzu&Ef#rYqEmjg;(Fu!R#z!^eB-Ok z(Msio1VIlWs6Ss+xL239L750tX=*n4X8%e}?bKGk%$Vw@x@_DXxqWq~ph(%KruRL_ zA9-;;lMD$r#Z_IZLCL)LI@eIrb*I{q{+pVs``p%DDtc;|eU2(#7r|5gHUZG}SUKD4 z{|>m;s8^p0s(NRU22;G|+Tuu7P4IijUZ8lee%0!Q*u-k-Jb1JQ?Y0f3h zb-zr2uS|~dLZlUOx{x8r3qo~Y`J>(|e5>{93wl*$)U3?$3tuxb6^E1RCNpZcNx5ti z@c&pS6XV@Kq#>(13?fDEXcXLMkt(G)YIpY)>fS`{*=y5TiDr&T%JOJ0Y(y4bYISrz zz~7e}^W(ODetK@Tv1C^kW@@%(Rq)s7{n}Z+)cus&V(oNo$?jXyl_pE21*>Qdd-F2) zy3~E^Ye<3+!L@Am`h-2AeP73U-SHTTQ8A1E=sERzRn(A`qjZmP1q!Y{c6+7=TA4Ka z74uFuK5e0#LVTlL;DJmfyg{tLc6=X+ntQv!W%F*Iez5uw$Vh)LkzbsbmL1{2ait^% Y8yncTLa0KYb0Xg-as7J*Q`a2+U(QT6SpWb4 diff --git a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po deleted file mode 100644 index 58c52201a..000000000 --- a/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po +++ /dev/null @@ -1,393 +0,0 @@ -# Translations template for SecureDrop Client. -# Copyright (C) 2022 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.6.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-06-13 19:56+0000\n" -"Last-Translator: Guilherme \n" -"Language-Team: Portuguese (Brazil) \n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.14.1\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} já está executando" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "Recuperando 1 mensagem" -msgstr[1] "Recuperando {message_count} mensagens" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "SecureDrop não pode ser alcançado. Tentando reconectar..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Não foi possível conectar ao SecureDrop server. Por favor, cheque sua\n" -"conexão com a internet e com Tor e tente novamente." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"As credenciais não funcionaram. Por favor, tente novamente e \n" -"tenha certeza de usar um código de dois fatores." - -msgid "That didn't work. Please check everything and try again." -msgstr "Não funcionou. Por favor, verifique e tente de novo." - -msgid "You must sign in to perform this action." -msgstr "Precisa estar logado para fazer esta ação." - -msgid "Your session expired. Please log in again." -msgstr "Sua sessão expirou. Por favor, acesse sua conta novamente." - -msgid "Failed to update star." -msgstr "Falha ao atualizar estrela." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Arquivo não existe no diretório de dados. Por favor, tente fazer o download novamente." - -msgid "The file download failed. Please try again." -msgstr "O download do arquivo falhou. Por favor, tente de novo." - -msgid "Failed to delete conversation at server" -msgstr "Falhou ao tentar apagar conversar no server" - -msgid "Failed to delete source at server" -msgstr "Falhou ao apagar fonte no server" - -msgid "No messages." -msgstr "Não há mensagens." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s escreveu:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s enviou:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Arquivo: %(filename)s" - -msgid "Download All" -msgstr "Baixar tudo" - -msgid "Delete Source Account" -msgstr "" - -msgid "Delete All Files and Messages" -msgstr "Apagar Todos os Arquivos e Mensagens" - -msgid "Print Transcript" -msgstr "Imprimir conversa" - -msgid "Export Transcript" -msgstr "Exportar Conversa" - -msgid "Export All" -msgstr "Exportar tudo" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Alguns arquivos não serão exportados

Alguns arquivos dessa fonte ainda não foram baixados, e, por isso, não serão exportados.

Para exportar os arquivos já baixados clique em \"Continuar.\"" - -msgid "all files and transcript" -msgstr "todos os arquivos e a conversa" - -msgid "SecureDrop Client {}" -msgstr "Cliente SecureDrop {}" - -msgid "Quit" -msgstr "Sair" - -msgid "Last Refresh: {}" -msgstr "Última atualização: {}" - -msgid "Last Refresh: never" -msgstr "Última atualização: nunca" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "Sair da conta" - -msgid "SIGN IN" -msgstr "Acessar conta" - -msgid "Nothing to see just yet!" -msgstr "Nada para ver por enquanto!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Os envios de fontes serão listados à esquerda, assim que transferidos e descriptografados." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Aqui é onde irá ler mensagens, responder para as fontes, e trabalhar com os arquivos." - -msgid "Select a source from the list, to:" -msgstr "Selecione na lista uma fonte, para:" - -msgid "Read a conversation" -msgstr "Leia uma conversa" - -msgid "View or retrieve files" -msgstr "Veja ou obtenha arquivos" - -msgid "Send a response" -msgstr "Envie uma resposta" - -msgid "Deleting files and messages…" -msgstr "Apagando todos os arquivos e mensagens…" - -msgid "Deleting source account…" -msgstr "" - -msgid "— All files and messages deleted for this source —" -msgstr "— Todos os arquivos e mensagens desta fonte foram deletados —" - -msgid "Failed to send" -msgstr "Falhou ao enviar" - -msgid " DOWNLOAD" -msgstr " BAIXAR" - -msgid "EXPORT" -msgstr "EXPORTAR" - -msgid "PRINT" -msgstr "IMPRIMIR" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "ARQUIVO ENCRIPTADO NO SERVER" - -msgid "DOWNLOAD" -msgstr "BAIXAR" - -msgid " DOWNLOADING " -msgstr " BAIXANDO " - -msgid "Earlier files and messages deleted." -msgstr "Arquivos e mensagens anteriores apagados." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Arquivos e mensagens apagados\n" -" desta fonte" - -msgid "Compose a reply to " -msgstr "Escreva uma resposta para " - -msgid "Awaiting encryption key" -msgstr "Esperando chave encriptada" - -msgid " from server to enable replies" -msgstr " do server para ativar respostas" - -msgid "Sign in" -msgstr "Acessar conta" - -msgid " to compose or send a reply" -msgstr " para escrever ou enviar uma resposta" - -msgid "FILES AND MESSAGES" -msgstr "ARQUIVOS E MENSAGENS" - -msgid "SOURCE ACCOUNT" -msgstr "" - -msgid "Username" -msgstr "Nome de usuário" - -msgid "Passphrase" -msgstr "Frase-passe" - -msgid "Two-Factor Code" -msgstr "Código de Dois Fatores" - -msgid "SecureDrop Client v{}" -msgstr "Cliente SecureDrop v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Este nome de usuário não funcionará.\n" -"Precisa ter no mínimo 3 caracteres de comprimento." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Esta frase-passe não funcionará.\n" -"Precisa ter entre 14 e 128 caracteres de comprimento." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Este código de dois fatores não funcionará.\n" -"Deve conter apenas números." - -msgid "SIGNING IN" -msgstr "Entrando" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Por favor, insira um nome de usuário, frase-passe e código de dois fatores." - -msgid "USE OFFLINE" -msgstr "USE OFFLINE" - -#, fuzzy -msgid "Show Passphrase" -msgstr "Mostrar Frase-senha" - -msgid "CANCEL" -msgstr "CANCELAR" - -msgid "CONTINUE" -msgstr "CONTINUAR" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "SIM, APAGAR ARQUIVOS E MENSAGENS" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Mantendo a conta será retido os metadados, e a possibilidade de {source} entrar no seu SecureDrop novamente." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "um arquivo" -msgstr[1] "{file_count} arquivos" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "uma resposta" -msgstr[1] "{reply_count} respostas" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "uma mensagem" -msgstr[1] "{message_count} mensagens" - -msgid "SUBMIT" -msgstr "ENVIAR" - -msgid "Preparing to export:
{}" -msgstr "Preparando para exportar:
{}" - -msgid "Ready to export:
{}" -msgstr "Pronto para exportar:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Insira um USB drive encriptado" - -msgid "Enter passphrase for USB drive" -msgstr "Insira frase-passe para o USB drive" - -msgid "Export successful" -msgstr "Exportação bem sucedida" - -msgid "Export failed" -msgstr "Exportação falhou" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entenda os riscos antes de exportar arquivos

Malware
Esta estação de trabalho permite abrir arquivos com segurança. Se você abrir arquivos em outro computador, qualquer malware incorporado pode se espalhar para seu computador ou rede. Se você não tiver certeza de como gerenciar esse risco, imprima o arquivo ou entre em contato com seu administrador.

Anonimato
Os arquivos enviados por fontes podem conter informações ou metadados ocultos que identifica quem são. Para proteger suas fontes, considere redigir arquivos antes de trabalhar com eles em computadores conectados à rede." - -msgid "Exporting: {}" -msgstr "Exportando: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Por favor, insira um dos drivers de exportação provisionados especificamente para o SecureDrop Workstation." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Ou o drive não está encriptado ou há algum outro problema com ele." - -msgid "The passphrase provided did not work. Please try again." -msgstr "A frase-passe fornecida não funcionou. Por favor, tenta novamente." - -msgid "See your administrator for help." -msgstr "Consulte seu administrador para ajuda." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Lembre-se de ter cuidado ao trabalhar com arquivos fora de sua estação de trabalho." - -msgid "DONE" -msgstr "FEITO" - -msgid "Preparing to print:
{}" -msgstr "Preparando para imprimir:
{}" - -msgid "Ready to print:
{}" -msgstr "Pronto para imprimir:
{}" - -msgid "Connect USB printer" -msgstr "Conectar impressora USB" - -msgid "Printing failed" -msgstr "Falhou ao imprimir" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Gerenciando riscos de impressão

Códigos QR e endereços web
Nunca digite e abra endereços web ou escaneie códigos QR presentes em documentos impressos sem tomar precauções de segurança. Se você não tiver certeza de como gerenciar esse risco, por favor contate seu administrador.

Pontos de impressão
Qualquer parte de uma página impressa pode conter informações de identificação invisíveis a olho nu, como pontos de impressão. Por favor, considere este risco cuidadosamente ao trabalhar com ou publicar impressões escaneadas." - -msgid "Please connect your printer to a USB port." -msgstr "Por favor, conecte sua impressora a uma porta USB." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "SIM, EXCLUIR TODA A CONTA DE FONTE" - -msgid "Are you sure this is what you want?" -msgstr "Tem certeza de que quer isto?" - -msgid "When the entire account for a source is deleted:" -msgstr "Quando toda a conta de uma fonte é excluída:" - -msgid "The source will not be able to log in with their codename again." -msgstr "A fonte não poderá fazer login com seu codinome novamente." - -msgid "Your organization will not be able to send them replies." -msgstr "Sua organização não poderá enviar respostas a eles." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Todos or arquivos e mensagens dessa fonte também serão destruídos." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Apagando arquivos e mensagens..." - -#~ msgid "Deleting source account..." -#~ msgstr "Apagando conta da fonte..." - -#, fuzzy -#~| msgid "All Files" -#~ msgid "Download All Files" -#~ msgstr "Todos os Arquivos" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "O botão CONTINUAR será desabilitado até que o arquivo VM esteja pronto" - -#~ msgid "Entire source account" -#~ msgstr "Conta completa da fonte" - -#~ msgid "Files and messages" -#~ msgstr "Arquivos e mensagens" - -#~ msgid "DELETE" -#~ msgstr "APAGAR" diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo b/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.mo deleted file mode 100644 index d741437dd32d6f849ff098c45b5e12a2b21afa55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13180 zcmbuFYm6jUb;rxbfEi2(b_kDKTuhl}LCcQ6xeh{y-uUM8qS(`H%=i-V&22d>|4cQa&USLKYDpKqOKkJ|H3G z_dmC)yLxsOVJL0QzpJ|H-gD3SpT|ADU%UB+KL|Kt&ew7FUl0Vk@!1#gN5@O-UvM4x zGA>^V{v7xk@Mplg!Jh=Tz*m3~_`U0b-~jw0*V#*h;LhuV;B7Yr!F^os{X`JF0sJ)h zD)7soruqhWBls=w7V!T{yz%A8#P#dI8^B)!_1p)+p9Mb*z7l*Elw3#PYr*G0rVPFh zz8aiENX_#GQ1ibDd?(le_1;IpIqd3St@q!{>u;3T-vw{x{tY~IJNPQ_R`5O$ zk%JKYX>bI#zz>0X{$Ig2gI@A6^Z<3Oewc;3@D%l%e_GT;e^T#(gKa25y3y z@8jSq_#a>syd82p0LGx?`z$E^eH(l`_-d4NKez$vy^nzJ2EPVszH_gEtKcdq`5y%t zItanHfKP#!!OwuQ-)$I0Jh%X!26w=_!4HGd`-!N_ zcK$a={6_Fq3?e)aYMl{?>jeoYK0O6W?hk;!4t@+2uWm(H+4FW#JiZe|wZXeU`9}sy zAJ2f&=jTAJ^PfS@^Iu>C{0`U!UxyIVR|?8+J`FEAb29jokk#DE1@I)O%x4>--QX`JMr_zCQ+~r_Y0L1HTMPFV~~&o544NlH(nq?6L;F z8+N8owzhBMy3mcVmde-K>L_uy}UufR#fhmV3cfqw~V z{(l5zm#>2I!~X&Iz|$B7QG<_wlJ_4#R2e)6-UHr*(uEI#;?euTQ{bP1P$Bpi5NZbB z0rmbZZ}ookc2MzP5yXw`kbaX5$roXecQ$O+|w9_NcWWdj}ZWgVE&{O)?Y@|;uLc(A;dPQ~LFamtRE!T1LR7dhX> zNhq@es#xs53;boymvP?6SsiobhZvOYb;w4T#5kvG9pZ1B^M#x{oYf(I$%Z<_f$D%d z#$8Mv{1PWF6NH>MbLxmV@8w+LT;&v>#hLp!b=<-!&Ky5p$_;T*$7#+Er(%=i)bTLq zOY9SW-17P(oz?Z`^7K=?bHN2}CrgJekFxzJb4BW+B-|cEE{jHkILZUv>ZQX`nny0p zcrNL?(7rtkZab~ZD7z!q{bI3x;~-0mXfZgqcjx)FFbQ|#WY>+dI4RO`;j%b?B0qPA z@6K(Xf2hj@{U~=KLmx!jF6{TSD93}= z-cO6#TAK+XgjwOz9W-5uJu@X!y>dg4Bdh<6SpdYtT}*)WvIeBO`qSSCcsVlQ$@ z_yo(24x@ROk9&JA%*#Rj#0zetl$$l~j0XdoB4>E$P%X|K>`C2eW}1@Xr0vmodl2V) zraTlcMOP-y7tHjV=`eCT@c`={#DjrL(!y;=E_!N|W<}ID3e=u4D%zwu%Il%)aGwS6 z(qW_*k)fX+B!e{UNBwzEm=lJb(eoCRw&_e6m^edkEOI)K7jWM72668RcWMdN#K|~X zIAu$?D2C^S$SG|abrA)HSL@LFZH*P9*TTU8%AC@7OL~;{7{`n>h~S@iWi<8*GX6z_ z!wKhV-(lAfHSA#%IpY}CX!(aO8g55@lmRttPNPT;gG0nkJqN2dWU?eGB*$cq=fP_; zt?5AW&TF(Ep6bmcO%8{6*HkGhMvHvB&26~gwhx`RdOpkZ8n>BpFJ`%k8%9Og4~r0a z!lLp8;uSW4kdURts;@C@To|IlHHQilyzpD;3_ zR~m-(O<3;jDaH(mV>oW^gRIF~GTYoC9OS9|f#_Fc>0#98eP|_OSg0{q5OuUj-8~4C z;=Z7H5XL5Jl=QO0kumCt=rCAnc9vSJ!P0tXtKGTS3YN;aUB+t>f_o;kySVv46$ZFB z9`w!4;0+N%Jl|9_jFz)>ROW_hoY;$S6N_$hZN)G2VXnC486ll05Shnh7-E+gybvs} zcUt@@bI@{x3q(%Z@;uPfYo)e=^4m=x1e(2GI!+3IcWR=#exG~qC#PSR8V>zy_Ei}) zG+)r_EOj5-*lI1imG)}Ot#{mJtNU=P8?+wXSnqBHtuQ0=WhYs&Z&G8W77@_mBeu(8 zViZPFm?{kdCD4T)v2SvsAf|*|(SQU&YUHB@(YRnN%K@V>&qsTi5(uHi%wr=5Eg!s0 za{qBF3zNK;#iOG7awo)>`qdRtzK14><>eh_UUZkQ1X}N=Yj&31T5EH&d7-r#tk|1k zhF_apnpB(nFa_&;VQ}?xm6A_*LPbICh4BbSjU1sbTL@%qLN6X+>UxUQsN^ihnLGDm zk}s)}C|IVY0t#hOqYBro#gDS+ZaXbUOTuAvM{WcA5@OHv$w$;)d2u+1 z?me|b4s9Gn@$O!+n5Z-voH~E`%DFRo=KSm+rhy-63{lf0fjp(N`zj+NIjBM+$5wg5 z7YkZhxE&8vmB|T+R9Hh6E_x@1b#A1YKp`aK?@7 z-rZke zwsMF1&C8{WT(aPOrFtX}Hrp3EuHEstesRk_Xe*+7>leFAE!SLHTEB?%Y+ig|tqn|b z(GsB8mot?`E*jQgxE5p**%pwHIq~;UJw1G1n$Mv&SL3Bh)svpGxSnciG%$@4Vaf z_QH(tLBNOqimWymC1O3QAkIl6ritGwn6D-5sWQr$a)c^iUE@`RVX@kF6z;7j32{RG z0c#WG4BoXW1)brHw*5iPWDOry7ZxOf-*im0U3%z5rOGL#SL@lD@+>f_p2iZEqI|Vn z%SE;K${bkV+1TEB8ci(8LxEVeGIc94d^#~TgVlDb67aJsb`d|S>@v@~MrfG<{aksu z=^-Th0>T_tE7tzJM-_{A#Mt3PCQX*@N0}S4Gb{_uR5=FHClQ<5S@SbGH&%R>Sz;Bz z#ZAhlm6g>t72U-$H3bjHyh=@{l?Cn#9&2sRyXDquYpdm2 z6w%$5I~I}ZPn=LrJ%-prRRFn<5fXnCWh{1x5?H1-87b8;4`ygv#rT=G~pP7=~)K)8PHy}xgJ0Gr#QQf0h~ z5XXx*$14;N>ElH4M!Vm5nAn9X7TpGg(|C6rLF3c@b2zxeot|ciJLbBP+76Aid^hel z9vJWDjjeRi&26kVx+F3U(^#fdU38DNn%&0QdSkii9$a5sYrpwjY+mM62R1DK57fJoZ0GihVw5kQIYZNn5u=6N z@?4)i*8&$e@MQ3;B*4k^WsdmmTyk(B9U%?xV zE!t>{u85xE2qStPLwrT3Be1CExNn6<6>@OFecPDRv>jw zjXbi;{N6k7p#!FG?oHfzclMsSM;jNSgsfn?dc?2M-L-I*e{+G`>NY!@E3Iz38@Oie zijHJor8Ko&pBO>4NfRu}Xc7=aEhn>+pf71(MC^mCHHhE&d`+{a-iD0mhS4aPX-$?d zjeU3WLXkwRHHMq^Gdkm>7ZP`O zV|F{p6K*50&F zn^HQL{#C#X!}Fcb*hhZrVjexaA1Q9QbU;@p8B?BxT-&NB%?gync%{aqgws|ZGq^gc zcMukvv4~cP!(wwvmyapZBAmY^Kpcp8J(~q(IH>e31#2z zTcIt*4+KL7Ba`;qg{S0X@X5%P^IX*oZE2laET%_nELbYtQYC&KH3rlRxDS3g8BWhB zjZ!lh`;Ga>pGnxcWd8SxG5x`mCh3zEGphz^OfbvPA76Vuh6Cby7G@1HhXoa>axDAP zXVoC0fhw!x&W0O%cav;2SDP}b=56!Fo*4PDX-N_dJaIzkH~FpL2Ros9sSH%4Q~z79 zGf5kgs4%LSvx`z}`SHD>O?Q>^A%@>4i(ULYGLUD91ad_GGXwk|;!hTg)lem<=-YhE zALA^QY0bqV{ZyjJrEp-s4&|jYYl>?9HU5+oDE*E-8Z?)*l?}Ka#Jlnycl0OT8o^d- z^47;w?UJbDifchs?@grx7U6LF=rco%g}KK^&+;;*EwjwnQOiF149-R6rq7%i9apk> z)@S1-jt+Riewe`QYWUHJ^IR?)u+47Og5^`!c98@grcv{igsy;Fg?apv=2Os-CrE#A zJ07ygum|CIr~t<$(`~FxufZ9eG(W-ovS;{c+?FflF21auj&w2skuhN zN_coM=c7O3lz}6lPaNZ*DrK(84z-Rav`B-aj}8h2`DVF5%W)LRstvF8r8>&;f8 z{t0DiFH>K5!LWeOC*dyH>(-#XMu&Ng@_A)Sv7n|RLV!ZJVst&+`1Oz&SSG^L(j^*L zK}d?K7K{<;RNxK#3~n`!QfZyaBs^cj>Y;v0RklMyqH?W`Hy!Q==#SS+dirvJT9>UD z6+XPE8q?liOYdpbD+dCE%C(uu2;mt-PnWxg3H_gUqq;WIw90(`z3Md!Jea~qxHuzl zsLIEakdbIly-~HQAtJHaZ+I+X`y5vFD9~x#i+M{e0FegYnq~zV!}~zH+`?!|A2^y7 z3G~*Elr|1F!_44Cy%ndR^T&*|LDrAk0R}9NA>)5w@TxhpMR*$Set$gDa&^i zc1p)p;b0+enrBotD;51PY)Q8@uA10ZIt(F@zjeI-fokF9#5sd@r@ho}cF8}Rn@8^> zdA7Q1?N04Rlb-hMBl>N&>6V*rg%2%jaMNs}V6e^nOxsgE?h|h7E`ibD(31>Pguxnrlran&Q6-CW7;B)SJIYm4_1U|Kboe15J3?> z9nYizs9jb*N|#p`H8TH9+_F8D94}g!TUM7+rl%ZWUr1Y=KWd7j3iZSl%oyOBq0VQi z`e5>JRc-v=Bvz6f{S8fV6&Nc2n6)TYqFRgs7^^?=Tbp;SRVo-o%%%0U4chMX zQVEL?_jsI~dAQmJ%$Begl(Yr%iP5qb4QF3wMhXPp0%DiwOV>a~EGa)cp+8^leeJPH z1V7%R_kle>sY|bJ5US#D$j`+^TJ`8BTfj;_#p#LbRcul1;)@0gyS5upyZ-+HP&^PA diff --git a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po b/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po deleted file mode 100644 index e4028c0e4..000000000 --- a/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po +++ /dev/null @@ -1,390 +0,0 @@ -# Translations template for SecureDrop Client. -# Copyright (C) 2022 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.6.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-04-23 18:13+0000\n" -"Last-Translator: deeplow \n" -"Language-Team: Portuguese (Portugal) \n" -"Language: pt_PT\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.14.1\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} já está aberto" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "A obter 1 mensagem" -msgstr[1] "A obter {message_count} novas mensagens" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "Não é possível aceder ao servidor SecureDrop. A reconectar..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Não conseguimos aceder ao servidor do SecureDrop. Por favor, verifique se\n" -"está ligado à Internet e à rede Tor e tente de novo." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Essas credenciais não funcionaram. Por favor, tente novamente\n" -"e certifique-se insere um novo código de autenticação de dois fatores." - -msgid "That didn't work. Please check everything and try again." -msgstr "Não funcionou. Por favor, verifique tudo e tente de novo." - -msgid "You must sign in to perform this action." -msgstr "Inicie sessão para realizar esta ação." - -msgid "Your session expired. Please log in again." -msgstr "A sua sessão expirou. Por favor, inicie sessão novamente." - -msgid "Failed to update star." -msgstr "Falha ao atualizar a estrela." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "O ficheiro não existe na pasta. Por favor, tente transferi-lo de novo." - -msgid "The file download failed. Please try again." -msgstr "A transferência do ficheiro falhou. Por favor, tente de novo." - -msgid "Failed to delete conversation at server" -msgstr "Não foi possível eliminar a conversa no servidor" - -msgid "Failed to delete source at server" -msgstr "Falha ao eliminar fonte no servidor" - -msgid "No messages." -msgstr "Não há ainda mensagens." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s escreveu:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s enviada:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Ficheiro: %(filename)s" - -msgid "Download All" -msgstr "Transferir tudo" - -msgid "Delete Source Account" -msgstr "Eliminar Conta da Fonte" - -msgid "Delete All Files and Messages" -msgstr "Eliminar Todos os Ficheiros e Mensagens" - -msgid "Print Transcript" -msgstr "Imprimir conversa" - -msgid "Export Transcript" -msgstr "Exportar Conversa" - -msgid "Export All" -msgstr "Exportar tudo" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Há ficheiros que não serão exportados

Alguns ficheiros desta fonte ainda não foram transferidos e, por isso, não vão ser exportados.

Para exportar os ficheiros já transferidos clique em \"Continuar.\"" - -msgid "all files and transcript" -msgstr "todos os ficheiros e a conversa" - -msgid "SecureDrop Client {}" -msgstr "Cliente SecureDrop {}" - -msgid "Quit" -msgstr "Sair" - -msgid "Last Refresh: {}" -msgstr "Última Atualização: {}" - -msgid "Last Refresh: never" -msgstr "Última Atualização: nunca" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "TERMINAR SESSÃO" - -msgid "SIGN IN" -msgstr "INICIAR SESSÃO" - -msgid "Nothing to see just yet!" -msgstr "Nada para ver, por agora!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "As submissões de fontes aparecerão do lado esquerdo, uma vez transferidas e desencriptadas." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "É aqui que irá ler mensagens, responder a fontes e trabalhar com ficheiros." - -msgid "Select a source from the list, to:" -msgstr "Selecione uma fonte da lista, para:" - -msgid "Read a conversation" -msgstr "Leia uma conversa" - -msgid "View or retrieve files" -msgstr "Veja ou transferira ficheiros" - -msgid "Send a response" -msgstr "Envie uma resposta" - -msgid "Deleting files and messages…" -msgstr "A eliminar ficheiros e mensagens…" - -msgid "Deleting source account…" -msgstr "A eliminar a conta da fonte…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Todos os ficheiros e mensagens eliminados para esta fonte —" - -msgid "Failed to send" -msgstr "Falha no envio" - -msgid " DOWNLOAD" -msgstr " TRANSFERIR" - -msgid "EXPORT" -msgstr "EXPORTAR" - -msgid "PRINT" -msgstr "IMPRIMIR" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "FICHEIRO ENCRIPTADO NO SERVIDOR" - -msgid "DOWNLOAD" -msgstr "TRANSFERIR" - -msgid " DOWNLOADING " -msgstr " A TRANSFERIR " - -msgid "Earlier files and messages deleted." -msgstr "Ficheiros e mensagens anteriormente apagados." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Ficheiros e mensagens eliminados\n" -" para esta fonte" - -msgid "Compose a reply to " -msgstr "Responder a " - -msgid "Awaiting encryption key" -msgstr "Aguardando pela chave de encriptação" - -msgid " from server to enable replies" -msgstr " do servidor para permitir respostas" - -msgid "Sign in" -msgstr "Iniciar sessão" - -msgid " to compose or send a reply" -msgstr " para escrever ou responder" - -msgid "FILES AND MESSAGES" -msgstr "FICHEIROS E MENSAGENS" - -msgid "SOURCE ACCOUNT" -msgstr "CONTA DA FONTE" - -msgid "Username" -msgstr "Nome de utilizador" - -msgid "Passphrase" -msgstr "Frase-chave" - -msgid "Two-Factor Code" -msgstr "Código de dois fatores" - -msgid "SecureDrop Client v{}" -msgstr "Cliente SecureDrop v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Este nome de utilizador não serve.\n" -"Deve ter pelo menos 3 caracteres." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Esta frase-chave não serve.\n" -"Deve ter entre 14 e 128 caracteres." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Este código de dois fatores não serve.\n" -"Deve conter apenas números." - -msgid "SIGNING IN" -msgstr "A INICIAR SESSÃO" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Por favor, insira um nome de utilizador, frase-chave e código de dois fatores." - -msgid "USE OFFLINE" -msgstr "USAR OFFLINE" - -msgid "Show Passphrase" -msgstr "Mostrar Frase-chave" - -msgid "CANCEL" -msgstr "CANCELAR" - -msgid "CONTINUE" -msgstr "CONTINUAR" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "SIM, ELIMINAR FICHEIROS E MENSAGENS" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Deseja eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Manter a conta irá preservar os seus metadados e permite à fonte {source} iniciar sessão no SecureDrop de novo." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "um ficheiro" -msgstr[1] "{file_count} ficheiros" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "uma resposta" -msgstr[1] "{reply_count} respostas" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "uma mensagem" -msgstr[1] "{message_count} mensagens" - -msgid "SUBMIT" -msgstr "SUBMETER" - -msgid "Preparing to export:
{}" -msgstr "A preparar para exportar:
{}" - -msgid "Ready to export:
{}" -msgstr "Pronto para exportar:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Insira uma unidade de armazenamento USB encriptado" - -msgid "Enter passphrase for USB drive" -msgstr "Digite a frase-chave para a unidade de armazenamento USB" - -msgid "Export successful" -msgstr "Exportado com sucesso" - -msgid "Export failed" -msgstr "Não foi possível exportar" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entenda os riscos antes de exportar ficheiros

Malware
Esta estação de trabalho permite-lhe abrir ficheiros de forma segura. Se abrir ficheiros noutro computador, qualquer malware incorporado pode alastrar-se para o seu computador ou rede. Se não tiver a certeza de como gerir este risco, por favor, imprima o ficheiro ou contacte o administrador do sistema.

Anonimato
Os ficheiros submetidos por fontes podem conter informações ou metadados ocultos que as identificam. Para proteger as suas fontes, considere censurar partes sensíveis dos ficheiros antes de trabalhar com eles em computadores ligados à rede." - -msgid "Exporting: {}" -msgstr "A exportar: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Por favor insira uma unidade de armazenamento de exportação previstas especificamente para a Estação de Trabalho SecureDrop." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Ou a unidade de armazenamento não está encriptada ou há algo de errado com ela." - -msgid "The passphrase provided did not work. Please try again." -msgstr "A frase-chave inserida não funcionou. Por favor, tente novamente." - -msgid "See your administrator for help." -msgstr "Consulte o administrador do sistema para obter ajuda." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Lembre-se de ter cuidado quando trabalha com ficheiros fora da Estação de Trabalho SecureDrop." - -msgid "DONE" -msgstr "FEITO" - -msgid "Preparing to print:
{}" -msgstr "A preparar impressão:
{}" - -msgid "Ready to print:
{}" -msgstr "Pronto para imprimir:
{}" - -msgid "Connect USB printer" -msgstr "Conecte a impressora USB" - -msgid "Printing failed" -msgstr "A impressão falhou" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Gerir os riscos de imprimir

Códigos QR e endereços web
Nunca digite ou abra endereços web ou leia códigos QR de documentos impressos sem tomar precauções de segurança. Se não tiver certezas sobre como gerir o risco, por favor contacte a administrador do sistema.

\"Printer Dots\"
Qualquer parte de uma página impressa pode conter informações identificativas invisíveis a olho nu, tais como pontos de impressão (printer dots). Por favor, considere cuidadosamente este risco ao trabalhar com ou ao publicar impressões digitalizadas." - -msgid "Please connect your printer to a USB port." -msgstr "Por favor, ligue a sua impressora a uma porta USB." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "SIM, ELIMINAR COMPLETAMENTE A CONTA DA FONTE" - -msgid "Are you sure this is what you want?" -msgstr "Tem a certeza de que é isto que quer?" - -msgid "When the entire account for a source is deleted:" -msgstr "Quando a conta de uma fonte é completamente eliminada:" - -msgid "The source will not be able to log in with their codename again." -msgstr "A fonte não poderá voltar a entrar com o seu nome-código." - -msgid "Your organization will not be able to send them replies." -msgstr "A sua organização não lhes conseguirá enviar respostas." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Todos os ficheiros e mensagens da fonte serão também destruídos." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "A eliminar ficheiros e mensagens..." - -#~ msgid "Deleting source account..." -#~ msgstr "A eliminar conta da fonte..." - -#~ msgid "Download All Files" -#~ msgstr "Transferir Todos os Ficheiros" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "O botão CONTINUAR será desativado até a \"Export VM\" estar pronta" - -#~ msgid "Entire source account" -#~ msgstr "Conta completa da fonte" - -#~ msgid "Files and messages" -#~ msgstr "Ficheiros e mensagens" - -#~ msgid "DELETE" -#~ msgstr "ELIMINAR" diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.mo b/securedrop_client/locale/ru/LC_MESSAGES/messages.mo deleted file mode 100644 index 96b7fb3b7dbf932d3ac534cb6310b2030a06236a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16490 zcmcJVdvIK5dB#sJO+kgya80=7#1N7cOSYTi;v@b|z=X>>XGCh)&53W96FZ}WY{?*ze`i-X`N;0C^5@w-9rF7Qt9 zE#Rj?O?4P#sNe|r2JkB$7r-pvzXx6lcD~NFdq4ONzHb2E1l|owt_t{8@DTVK@Hy}b z@C>MV{tDFm-v>Vo{tu{rx3Y*fFb8TKRZ#2wjQ@VvfB!1@dhVYDuLb`cyc+xkh={@E zbbd1!f_>lzK(*fmz85?QO1^WT*7-LeU4x&2lJ~zs$@^+L{T8?alw8+=zYpF3-UNOO zya)UO*bDv#*aNO*&`*H7L5=$_AWIA`d850;4t_csPQjCslN?& zfwIdjpyc>4C_UZ|@;|tnH@XBBFa#e4SAbs!HShO4{t(o7{{#+z{|aiJTTs>(a3|Oe zeh0h-Y=azJ*`6L=Doo_`L~HMjy}iRYc*yTJkQDzFS*10Dh|1{c8hgJ;2?U4-62 zOd0$Lr@}PBKZ7~&5=d+M2IX(hfiw;N0{nM;?J26oPqFzkad*j-+^o)_)dh? zIyQi^ZwZwC_kiN{W1x6>2K+nl$Dnw1?t0h$yP)L!KG*?X&SEv*Mz9n71c+&ZXF$_8 zC|>^(6rW{`JAqB$&ES)u=KTTqKJb4*jrYElZu|*Q>wgps!Dqo9@Vnq<@U`tuucM&! z|0(c~z~@2PZ4E+>fc>C&eiW2k{{S*o@U~S>f15#l9|KfUd8u!gBrgb+zZZwkAWXV z8GFDOoCSwa;sfB1z!7l#gKz{~0JnqJci~Im=fGcpS7Ah`7QAk)(_bg3b>0n1&%3~F z;5@hvyo@(Q3wptigP#JWkDq{(;D+^1f6s!l?_Yzu|4vA+aUKGpQt-E+{N|F4$Ov8r zUIf0KOYuou`$Mi#u6ww|xes$CFWGu4m&Q=s(o1sbg=qum75ss|_}3dfDt0BWcky9> z>sl_Y;R-HsDQ*zmlb@zit8g>n9yP>rm>jW559%#qg;Bui7Vo|OHl&r@$ju&n9gDeCb5_7w9$REcc^YJT+V6%@o}7M!tT2Ga4Da=x!%nM^@0y^VftW@ zOL6j6t~W#)-FnC1maW~rjZgi9o5LWS zC>N)~N>sitDu>l#7!@*O`6w($rF<@`1iCd|oGKM7QCKX~u8<8g_H-t=<~n_i%GXzP zzuJ|)v7=n9MqR<$$u;W-GKI|cTw!}yD(4E-;&e4E=PLJB)~@2&+OhSw4KYDBs)QMa z-Vu$3nQXQkRVooJ#%NFuSFIn6OuCs;6y^%nuvm%;&8(>dR5Q6klvO92 zoR8V!`1BOgR>B>*>ZGKpX6}`Am1umroU6{zG8)fJS98Ter6cU02xp4ZVWu2~(}l`3 zFj?ForA%p6QCOYKRct*g!%{xVpe37iysB$gcCXgyo3 zrqq9AE}stz#cDVfh0!NV#d0;u8U<2qjEXjC1?7#S z>&$&DfKD@!IwC{1xTBCSX0lOsr6Wv>VVm?k0;O#_QwAn3qc;}W7|02@G91t6#_tVR z^uU^2VLIwqVM`bl!z)#hQ`$7@A_@vm)}i&=8WTnjWb!*uW`n*X(xbG;IA)}L1pmY< zqp?$v@h{5H)H#=WhFvqLVG^6j8K+^5mOm3lQ)5vUWk3y^(Y;pbXKo4^E}0Erku>N z+(I}NRWsR4HG@2vYT^sTD~M{WpOMFQgc!f1K$N(npCIk4j_Ktnn;FOK-ja!dn;4J! zr$Q{@b=c183yh5DiH2c)H!OGd6l11{V>oWb1zD5TGuzxDldlxz4@AFexi}ML=?|?$ z3=1{p3Zjk{sk=Keh3bZ&dq*Z`vPOmR@=VDXb#F8i^mGsQ^lb@xwhoT;503T)Jw9&x zcr8M3&x8&~hi^&30QaWzS#vXZLxd2|hZPN@-g2?zb3-FeOh&kgMYpzo#V_<>t~lZt zA)P1?na7kd#CBqEN6@=oSM;Af!J@hz8_V-ln;EOXY zDy&3N`0;55AX{A>Y#Zty90|77?HVL`)_b6NkW24Ycx9YVk{COZrerEumISwX4)- zee)oufmbw!sA-Zw9`Ed~$|#c@R3VXLlRV*y1+6SImdmTk(@J+b7Vpwx@e}`$Sy!o& zh<9VPO)1YJp$cd$VL8c_$EoC#>gSVQdMjg_{ZqLz`AWF1VAn^OV;12B+Emu?%%Sp zySI0U0(L!33)`pJU$u`!nW=^}YbUGKQl)FvDo&FaBkHJFKFP9~>A?J}@OiDIvZ`@E z^|76E0JyuVJiV$hLl+8c8|WYCYplJqV|5$5sVZ&TM>v`43aim4tE)z>k8L& zu3opUGkni`LVa9)^}5c^a6`B{q&45yuUnHmTD$H>eZ0<^t?gVLe)`j{3vE_kPoGZu zthu@E&i2hwfe>ygzQZXhys@M6rj9jjK^T7_J{W&Keky*3PhW};F2BRcVQmlpikRD6#2Z*gm}wx@P~yb#iAk#2j_ zEf;yBLGS0$2`2aBz7WsRdV!JWk}((Jvl>GkUPO{Px}8aGxDn>k=aNkg>DzQ@$(W7t zd8E@zG?0vY)~zI-51B|poT2$SCeyt2)y^Ra5+sK~w+*%Pb&(aYl2DQ%ReZdit|#dy zE%BgnED}EvFIb1?>4HXIU^Y$kO?lkO}Kn(de~( zVePY;BtF+L&SHFy4scO=GYJ@imF!~_nPIN>Fk+so?G0rNS(2HsE5o@Ci&9b3X(H#< z@zZeVA(^h@G5`mmgI%j1aMz963_eF#}uJ3hKF1V9x z+;E6+Lbe@)A!=j?e`WISeM_!7d9 zrs<77X+0V7=4gv+nc-H%Pnv2JG|qBg=HKTJ+Ko7;>rF*CGqBvu+-p8Qxl}9&S~rU{ zo&??a5Z!6dJqs>+m%vZPM^irf95T%{n5D3WyBcFz3Vx-Sr{r`BZYf0_K#u!cL@$?q z>QUI~sLqyUQB9<(H`b8L$fZnbW`zxMNF|VSkab^ezglZ?==Q9|7+cs0A4&KkAD}s_ zJ#k(oG{qUkI=D+?%gCThu9${VQ2_zKhszd{Kse(fL$DI8`Tr2ZC6c*Ul6#Uwm$+mi z1nd3{2m6DjOnKoseKIxgOL6EcNld^VQlXK~bLa$$NusJUw%txSwYW|{Kdk5r!5p z?qT_XxxPly)XP_9m5wKrH0RjkgSOKVNt`+AfpUqF|xfWl^ed4c8;u$X}!>j={W&!H$td)z}R}7)`gV9&q8t>4$-su}zCrLFO3SY&fT(y4mCaUQD=P zF?oUC`pVpQy-zTrN+7p5bAcD-Cy;J0*7>|?^Jsi1J{m0B>BP_YC42o5TBV43IM*cH zqHszRBv{%_e0k6`t)l95h!)TAZw`$jdc8Tt>;4N4uHUed@vTGiU`Vtyv{;X0HlJ1N zDn4x?ZoSXKm#-Lq4zbUBf`8wLzZi1sVEo1SNXYktVSEg>J%x_+{%8O7^RW?LePOgL*~J}WiFFQ8B6P<8Y$Hx`#Px8M8{o5tS=-SOO^~uu0C}w(f)hShd#3C$+G;;Ye8ej)jL=g)Di#s*D8}JV zJ)PDb^x;h6$orG+v)LpSb40R6ZG6f{9Y6h&A1)KA&YO9d#f4z=nKsYfm)tE_RC)%DmFeA{MX!%@Rdj zZrb4^>kzle)pA~U&WO>B_$_MdbOE?@RKF9i|G?}hOC99d?tF;iRfcvvP{i{5@ud|e zZc_LYCRL&WE5UTIVoPCyCAsFwL|KYPa-n)4VK1fJa!3bwOnDMhGKec-iF|S?+vGB) z#e5Y^iIEXp1XYXQh^fyr@~>-ZmZklgIks(UT!nxN?Bp5Gv=tvvAoJ&kZehGDw%5<6 zwNSN%BZ+6IpitH8D?*H7dl5L}n##wtr}FoGSu1BsMrh?*KH#}?@HvXYPNOQa)VCq= zymPuno25S%iH7MOs%8{MUw)7Hw4&UfP$V4Ihi@bw5Ax+{tNk9giutQlkQ5I`x%p)L z6p{B(vIY4POQ&8}98J;Je!-`LZ23%y;HXR2ID;8Y6g59o5S1|(IsfAL!@_c+(hDBl z8p%mnDpq`uUsi|M*_#5U6`*!lX=w&|X1i2vG|CT#kW}&ol|EGQQZ8{%0mD5@MSM-3 z_?O6~OuD2lfL5MatT$co+Uc@HZEPXvs}o(=r^PU*9Ym(~p#GH1cA_qAlUhU~WpGpm z!*t@6RLXl8CfQh9wd0GM7Ri#9icCzLBqg^gg6Q>=1}(%)WuBETjySoL$7r@wi3~bM zOR35QDC?vj9_;wHE}InF(MEzN)mYAB^{NJ#9cG)W@&#)-3y>EjLfs3sR zIW*O|DVeP4Xu$KyZ@eu!B5{)LlmX44ZYjy}hh^m20sU16aV9xlri9k6qaJaaBp}i% zTGXc#SyQ$768a@2oF?+6*D@k9T$68{-!qu%LVSOm(Ujr+S$;wvg|rs+fGDY7_`EZn zG`(^UR%mPDtgdY!UqxYO#dD@D5zWFT&wX(sXOi>TFD*VsVW}laVr3(y)lUn|!pkeC406fca2W_=gsl!srrrdh*68w)$0kPy|>OJ9X{&16-2 zW7}p`m~DcbY9(Nc0-cUJzoAG}Wv_#$=3n1*jCiCv5@9EraPvvv4%Fn&7z zW@x!nsr3o2FY8@xUut8K)NA!^kf?xzyZGyJz4?(WpZE-(7m$DDbXcKY47%Smpv?ic z%?W>+j;f>-JMvvhhB>n1;rJkme@4hLih>5hn+Zb0<)>bG1YnmAv?HE5(OI=^F1AfvOI-5@x!H5IS(Q7CF*aidI+mO ztjMLR@OeviD%0KXs%}U*Xv3AwD-;pzL?Wpy&3WrpgF7JhBhy<>OFoi_PR07+k)U>7 zUucp!VYBmmDI^tPS%S;d2@U)yL(5G=ywLo&NlBm9cjLM9+!xUxG)c zr%VsLd$Bv^=d{iLDb>sU1%Y8w R=QxR1r5U@-!R+s@{tsm|CpZ8A diff --git a/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/securedrop_client/locale/ru/LC_MESSAGES/messages.po deleted file mode 100644 index 93436b2fd..000000000 --- a/securedrop_client/locale/ru/LC_MESSAGES/messages.po +++ /dev/null @@ -1,396 +0,0 @@ -# Translations template for SecureDrop Client. -# Copyright (C) 2022 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.6.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-15 16:30+0000\n" -"Last-Translator: Alexey Peschany \n" -"Language-Team: Russian \n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} уже запущено" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "Получаю 1 сообщение" -msgstr[1] "Получаю {message_count} сообщения" -msgstr[2] "Получаю {message_count} сообщений" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "С сервером SecureDrop не удается связаться. Попытка повторного подключения..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Не удалось связаться с сервером SecureDrop. Пожалуйста, проверьте\n" -"ваше подключение к сети интернет и Tor и повторите попытку." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Эти учетные данные не подходят. Пожалуйста, попробуйте еще раз, и\n" -"обязательно используйте новый код двухфакторной аутентификации." - -msgid "That didn't work. Please check everything and try again." -msgstr "Это не сработало. Пожалуйста, проверьте все данные и попробуйте еще раз." - -msgid "You must sign in to perform this action." -msgstr "Для выполнения этого действия необходимо авторизоваться." - -msgid "Your session expired. Please log in again." -msgstr "Ваша сессия истекла. Пожалуйста, авторизуйтесь повторно." - -msgid "Failed to update star." -msgstr "Ошибка добавления в избранное." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Файл не существует в каталоге данных. Попробуйте повторить загрузку." - -msgid "The file download failed. Please try again." -msgstr "Загрузка файла не удалась. Попробуйте еще раз." - -msgid "Failed to delete conversation at server" -msgstr "Не удалось удалить беседу на сервере" - -msgid "Failed to delete source at server" -msgstr "Не удалось удалить источник на сервере" - -msgid "No messages." -msgstr "Нет сообщений." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s написал:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s отправил:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Файл: %(filename)s" - -msgid "Download All" -msgstr "Скачать все" - -msgid "Delete Source Account" -msgstr "Удалить исходный аккаунт" - -msgid "Delete All Files and Messages" -msgstr "Удалить все файлы и сообщения" - -msgid "Print Transcript" -msgstr "Напечатать транскрипцию" - -msgid "Export Transcript" -msgstr "Экспортировать транскрипцию" - -msgid "Export All" -msgstr "Экспортировать все" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Некоторые файлы не будут экспортированы

Некоторые файлы из этого источника ещё не были загружены, и не будут экспортированы.

Чтобы экспортировать уже загруженные файлы, нажмите \"Продолжить.\"" - -msgid "all files and transcript" -msgstr "все файлы и транскрипции" - -msgid "SecureDrop Client {}" -msgstr "Клиент SecureDrop {}" - -msgid "Quit" -msgstr "Выход" - -msgid "Last Refresh: {}" -msgstr "Последнее обновление: {}" - -msgid "Last Refresh: never" -msgstr "Последнее обновление: никогда" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "ВЫХОД" - -msgid "SIGN IN" -msgstr "ВХОД" - -msgid "Nothing to see just yet!" -msgstr "Пока не на что смотреть!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "После загрузки и расшифровки исходные материалы будут перечислены слева." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Здесь вы будете читать сообщения, отвечать на источники и работать с файлами." - -msgid "Select a source from the list, to:" -msgstr "Выберите источник из списка, чтобы:" - -msgid "Read a conversation" -msgstr "Прочитать беседу" - -msgid "View or retrieve files" -msgstr "Просмотр или получение файлов" - -msgid "Send a response" -msgstr "Отправить ответ" - -msgid "Deleting files and messages…" -msgstr "Удаляю файлы и сообщения…" - -msgid "Deleting source account…" -msgstr "Удаляю аккаунт источника…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Все файлы и сообщения удалены для этого источника —" - -msgid "Failed to send" -msgstr "Ошибка при отправке" - -msgid " DOWNLOAD" -msgstr " ЗАГРУЗКА" - -msgid "EXPORT" -msgstr "ЭКСПОРТ" - -msgid "PRINT" -msgstr "ПЕЧАТЬ" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "ЗАШИФРОВАННЫЙ ФАЙЛ НА СЕРВЕРЕ" - -msgid "DOWNLOAD" -msgstr "ЗАГРУЗКА" - -msgid " DOWNLOADING " -msgstr " ЗАГРУЗКА " - -msgid "Earlier files and messages deleted." -msgstr "Предыдущие файлы и сообщения удалены." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Файлы и сообщения удалены\n" -"для этого источника" - -msgid "Compose a reply to " -msgstr "Составить ответ на " - -msgid "Awaiting encryption key" -msgstr "Ожидание ключа шифрования" - -msgid " from server to enable replies" -msgstr " с сервера для обеспечения возможности получения ответов" - -msgid "Sign in" -msgstr "Вход" - -msgid " to compose or send a reply" -msgstr " для написания или отправки ответа" - -msgid "FILES AND MESSAGES" -msgstr "ФАЙЛЫ И СООБЩЕНИЯ" - -msgid "SOURCE ACCOUNT" -msgstr "" - -msgid "Username" -msgstr "Имя пользователя" - -msgid "Passphrase" -msgstr "Пароль" - -msgid "Two-Factor Code" -msgstr "Двухфакторный код" - -msgid "SecureDrop Client v{}" -msgstr "Клиент SecureDrop v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Это имя пользователя не подойдет.\n" -"Оно должно быть длиной не менее 3 символов." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Этот пароль не будет работать.\n" -"Его длина должна быть в пределах от 14 до 128 символов." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Этот двухфакторный код не сработает.\n" -"Он должен содержать только цифры." - -msgid "SIGNING IN" -msgstr "АВТОРИЗАЦИЯ" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Введите имя пользователя, пароль и двухфакторный код." - -msgid "USE OFFLINE" -msgstr "ИСПОЛЬЗОВАТЬ АВТОНОМНО" - -msgid "Show Passphrase" -msgstr "Показать пароль" - -msgid "CANCEL" -msgstr "ОТМЕНИТЬ" - -msgid "CONTINUE" -msgstr "ПРОДОЛЖИТЬ" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "ДА, УДАЛИТЬ ФАЙЛЫ И СООБЩЕНИЯ" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "При сохранении учетной записи ее метаданные будут сохранены, и {source} сможет снова авторизоваться в SecureDrop." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "{file_count} файл" -msgstr[1] "{file_count} файла" -msgstr[2] "{file_count} файлов" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "{reply_count} ответ" -msgstr[1] "{reply_count} ответа" -msgstr[2] "{reply_count} ответов" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "{message_count} сообщение" -msgstr[1] "{message_count} сообщения" -msgstr[2] "{message_count} сообщений" - -msgid "SUBMIT" -msgstr "ОТПРАВИТЬ" - -msgid "Preparing to export:
{}" -msgstr "Подготовка к экспорту:
{}" - -msgid "Ready to export:
{}" -msgstr "Готовность к экспорту:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Вставьте зашифрованный USB-накопитель" - -msgid "Enter passphrase for USB drive" -msgstr "Введите пароль для USB-накопителя" - -msgid "Export successful" -msgstr "Экспорт выполнен успешно" - -msgid "Export failed" -msgstr "Не удалось экспортировать" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Поймите риски перед экспортом файлов

Вредоносное ПО
Эта рабочая станция позволяет безопасно открывать файлы. Если вы открываете файлы на другом компьютере, любое встроенное вредоносное ПО может распространиться на ваш компьютер или сеть. Если вы не знаете, как управлять этим риском, распечатайте файл или обратитесь к вашему администратору.

Анонимность
Файлы, предоставленные источниками, могут содержать информацию или скрытые метаданные, позволяющие определить, чьи это источники. Для защиты источников просим вас отредактировать файлы перед работой с ними на компьютерах, подключенных к сети." - -msgid "Exporting: {}" -msgstr "Экспорт: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Вставьте один из дисков для экспорта, специально предназначенных для рабочей станции SecureDrop." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Либо диск не зашифрован, либо с ним что-то не так." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Введенный пароль не сработал. Пожалуйста, попробуйте еще раз." - -msgid "See your administrator for help." -msgstr "Обратитесь за помощью к вашему администратору." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Помните, что нужно проявлять осторожность при работе с файлами за пределами вашей рабочей станции." - -msgid "DONE" -msgstr "ГОТОВО" - -msgid "Preparing to print:
{}" -msgstr "Подготовка к печати:
{}" - -msgid "Ready to print:
{}" -msgstr "Готовность к печати:
{}" - -msgid "Connect USB printer" -msgstr "Подключите USB-принтер" - -msgid "Printing failed" -msgstr "Печать не удалась" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Управление рисками распечатки

QR-кодов и веб-адресов
Никогда не набирайте и не открывайте веб-адреса и не сканируйте QR-коды, содержащиеся в печатных документах, без принятия мер безопасности. Если вы не знаете, как управлять этим риском, обратитесь к вашему администратору.

Точки принтера
Любая часть печатной страницы может содержать идентификационную информацию, невидимую невооруженным глазом, например, точки принтера. Пожалуйста, тщательно учитывайте этот риск при работе с отсканированными распечатками или их публикации." - -msgid "Please connect your printer to a USB port." -msgstr "Пожалуйста, подключите принтер к порту USB." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "ДА, УДАЛИТЬ ВЕСЬ ИСХОДНЫЙ АККАУНТ" - -msgid "Are you sure this is what you want?" -msgstr "Вы уверены в этом?" - -msgid "When the entire account for a source is deleted:" -msgstr "Когда удаляется весь аккаунт для источника:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Источник не сможет снова войти под своим кодовым именем." - -msgid "Your organization will not be able to send them replies." -msgstr "Ваша организация не сможет отправлять им ответы." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Все файлы и сообщения источника будут очищены." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Удаление файлов и сообщений..." - -#~ msgid "Deleting source account..." -#~ msgstr "Удаление исходного аккаунта..." - -#, fuzzy -#~| msgid "All Files" -#~ msgid "Download All Files" -#~ msgstr "Все файлы" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "Кнопка ПРОДОЛЖИТЬ будет отключена до тех пор, пока экспортируемая виртуальная машина не будет готова" - -#~ msgid "Entire source account" -#~ msgstr "Весь исходный аккаунт" - -#~ msgid "Files and messages" -#~ msgstr "Файлы и сообщения" - -#~ msgid "DELETE" -#~ msgstr "УДАЛИТЬ" diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.mo b/securedrop_client/locale/sk/LC_MESSAGES/messages.mo deleted file mode 100644 index 529eee7b15420ba0b2e0888561b75245ecb4548c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11273 zcmbW6ZER%MS;tR8(zI@YzCl6@!R(K>n$B`STI* zKeO-e`w^uc=KIIN2f))H|I`=x^W$I(EP=0rp9Q}Segga+D0Y72N0s_8_-Rn=coGyB zRlo^w4g3uF^WZ7)E8t7u0XPSKiic;x0Q?1TALJ)>KSs*<)8Mn6AW24%iSLGi;Ap!nx$@Z;bMpa!?V2f;6cGS8oYGR{?S3H)17?EEm3FMH0pgbp&{~WLc$~=Dx5_w<8)6y7laWGT&D~@$c_}V$a(kOH%&?;!^cLp!io4H1XTB;OD>?JP-ac z_$2rrpxF5^Nh7>6Ag)t?2;K>P3w#FrJMa!r^A=vnwWoQ@SmQ5=-DA90dEdpGw6$>* z+wS2lzLEHy@nsKj@U_xNjqFSy#iaHZAY?5hRQg#0D( zm6-kz?`L_-OSts{?-kynM`hj;w^e@_OEZ z{rlY5=Y{O^EGV3SlEas9TVB(=p`v{~#oxQL&q~i#UMw$GigTk+3+3}#>8&_w>BPic z6YDh6CiFI&M#rYz3{0ZrQY~t=qr~Va=DyI^p8d6_PS;PKUGhS2I|#RRI}XA$>ZCdj zl16fRn%_=uo_%43r+t%XkLPyHruKY4Hc4W*W0ML-69;LJJ59~&q(KxW1--DP zdr?PwvC*9{=>YX;S61ATRT-VugT$_9Qn#DN!v%KMS}Kpltfdu%L6XK^8pQ>-nEdbA zW$_0t^`mrbt;G-%yg1d-7H-VVZp&mXujhtmJ%P_6f~}sI9)w#_-15X^K6is8koaI^ zS~oiM8Z6uN%%n~_wYv6_Y*06GK`&=^v&OAXvuUSD7@kAm-EwnU|0aar z!`#RPP>3y0$a+JQiXFo_-UBJDU#t(r-boql|Id?R7=^tS)EqfwUR*{zH@Td$g3X>z z;9HH0M@TY845q9HEH~6GlX||Fdf4NoIg!X@qHHPC6S^04H6ol*YH}`T6O0qx(Ihs$ zR~tn#5AYGX;Qp2-5}6ODSbfOIn4WtW$`qSTM+TeXEkpp;Cr*B>t>xyAmH zL@>#wziA?TyKzJ^TX6_d#~(bN_iU`gzo;e&x&R20$~Y+3I) z)prY%LKI20;&)#sZBq-jf|@5KNVsxCCcQW+0gO-c;ZZ*Adfk{aSzS%q^Z-fPYnn3; zZqWfu?V4b_p3a0)BAXAMy>$8XwA^#{=pfbuw>5@P&sqXGJeQ14p<;AaDmCRQms}}4 zt`>TmK~uU7S?MLmfy)xSW+e4oKH0#GNlB&!%hEN-d|B$ONV)QkB!rS{JsIP6T{9fu zHr=vfT2fstq0s1>XM2ld+6Y&^X~U$H2ubX!$6`%At3hlywYqS=tQX1-D{EEzK^j!K zwsvl5fh!~7oki@zRCh^@o3Gl7wpQHGqSNhfjc47X&h zZqlY%G-@^2mIh2^%52MXBJ`GKlahre+UQiXo@kP< zZM@8YZmz^Bix}lfuuUvkv24p~v}m$jAP&beX}D}R%0!DjL)Jw_qWWY(XxR1~4L_rE zVczNfEUQp!t27?-^NS0#D{EP?Q0oDYqH@S#9KcrBfv6W{OCd=hhOy9GIzGB>cK8r1F}=BU+VC7*a$OO8DJh{tbPL&O7t{jm?VY5vpgjgFsF#_*3i11S_7= ztIeqEHS{AR#eH;Q#mGKyYAM+c{Hb%D?PRJN&FG2c%G8Q+#eZs!#%o4jEEQL#mMT+o zMSY<%v$XKp4Z7Y5X>_Klu@@#y*+b9h`L)GGT`n$_^y$)4abfY<;@sQ{AwJ8k;dX}| z!&KFHt)Vfe>uK6fW~Qe(TVM!NNNkbt>COwpc$&nPbtKcH>ti3MYPOC{CynXR1T#8m zOe`%dl}0N+QFv^E?Li8er>dM&%;?m-oKCl!bO29VAxlhpX019ub!v273M zAR06J)Mk)QEH^tS=F~jAOz8L8_G@zH@uxXrkYCO`5}rA8;!*vKeoW8kN5ZpbPU?pq z(&6bdPsqg+Ts-;o#OJ5Zn-J->PJ7X}>Vor*o0?a^k(f zW50OBJH^IeuMr(w@0x}_xZ)+uNpP&EL$iZrP^_n0gFipKP6Rg-uTFw;Q+9e3G#E9+ zA?^feuvcR_Y%l^pNX@}@`K8O~tewq!BWg{;2`t@jG^s_Kk>40M455nyRw<)UmB zH0Wx1#_pVmmN%&zNSSaI&J6k6*%@3d=yly6>~(g?Er?+$56k!DMmuHH9rDL9#gde6 zAknF?bGUYFW2qx2iz2WCYEvOx{!7lAG$^Qbi752X!;XV&3d?diB4D*d%TA7pbo{|p z-46rwk001tIIm}#A*qQ4wR%lXbr{C$BCXG;gV((VthC-|F&x5oz1m=3Hx8~3t{z-b z8!Kyvf3R@)raJg)ak2EAS|6%%uEVlet;k9iAZjf~3b~M&!`D=q!6CWTcpU3iDmTJI z3AsD*9~E=SaI0bDHX0U3O{-zzYcrAi$r)@(#*<=PE0d{_J3@l$~txGfv<{z^~O2-o6JV zYNLc4MW)-6Icx;Zbq>Bpci$Sk$&}(_+>rYiJwV89VQV1`K}hgw_1(0lKqK9M2M`d z7>A=N#?ZSKbjFJF4Y&6*?^(Bv-?rgN?y*1#>2L5vGFo5fX%7#j=5BMRCTd<@VcbW@+g>lE|?zI zvRds}jafqS&Up6FHdyTYZwg9y!WHD4GwxT9*PJMufDxP4(=G}HLL_QfL5|1X?KQa zXO?rB4Rt!OM1*XtbdDUrzBRXZm=YdxE1cq)@r=Vgc0r=slHs@OpwTebWEd;L@7+UX zx?qY)NOLBm*k+X86q})`h*I8p*#wqC8?@*hM4oqUi2BOHg~h=utMH$;UsdMDzj0!0 zzn01iCAD0suCL5Vo{Su*pFj3+ExSt2EtASYmIrz3lDD{8x|mi}qlWf4A!I2-(dtKi zHmV|}Gd7_m8hI^~NDRZ8c&hAC=%qohPt&Q{BHLkylEv!ax<}vG=AcdbR%y)LEtyKm zqhy{L$qj}1hz5^|obBHj;Yis-)sEJ*yr~@4hFngNQs!pA-wC&2_~BcH3I3at#(>sb z)+pz0hu5{7yWs#@VHj#VvSWnd__1WD@pfv{V>^HyO-ikG+z}zVX$&z3|Md8WIUdKE zhp%z|CdTx%->gg1Qg&7Hy)+B#s}jN;wGk-kv-1|i?k9z=90s9Hn}Ml&TF&QI58tvo z6kD(?iRsbC3)fgoZg9SoX6fV^HZRR%?ibG^O8>{>(we%tY^Z2aYq-LR3fVQHp6x$H zqD9%+&sk}25wVUCOj!qsRm|LklSG?g4*A-sWbcM?+gICrsq71_wJdL&4!I^`r z&8SYZPT}aV2PZ~jAw`H#NaWNV_=$+heR+~(OgMVR;r@@yOP%`W5|5^16F^D6U735Hq@RHhJV^ qadi3SqeaLGGu(a{0p80G7H_>zlBQ&=|Km8J8ED(bicrW23N diff --git a/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/securedrop_client/locale/sk/LC_MESSAGES/messages.po deleted file mode 100644 index 132362d3d..000000000 --- a/securedrop_client/locale/sk/LC_MESSAGES/messages.po +++ /dev/null @@ -1,391 +0,0 @@ -# Slovak translations for SecureDrop Client. -# Copyright (C) 2021 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2021. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-13 16:30+0000\n" -"Last-Translator: 1000101 \n" -"Language-Team: Slovak \n" -"Language: sk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} je už otvorená" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "Nie je možné pripojiť sa na server SecureDrop. Pokus o opätovné pripojenie práve prebieha ..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Nie je možné pripojiť sa na server SecureDrop. Prosím skontrolujte vaše\n" -"pripojenie na internet a Tor a skúste znova." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Tieto prihlasovacie údaje sú nefunkčné. Prosíme skúste znova, a \n" -"nezabudnite použiť nový dvojfaktorový kód." - -msgid "That didn't work. Please check everything and try again." -msgstr "Nepodarilo sa. Prosíme všetko skontrolujte a skúste znova." - -msgid "You must sign in to perform this action." -msgstr "Na vykonanie tejto úlohy sa musíte prihlásiť." - -msgid "Your session expired. Please log in again." -msgstr "Platnosť vášho prihlásenia vypršala. Prosíme prihláste sa znova." - -msgid "Failed to update star." -msgstr "Zlyhalo aktualizovanie star." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Súbor neexistuje v adresári dát. Prosíme skúste ho stiahnuť znova." - -msgid "The file download failed. Please try again." -msgstr "Sťahovanie súboru sa nepodarilo. Prosíme skúste znova." - -msgid "Failed to delete conversation at server" -msgstr "Nepodarilo sa vymazať konverzáciu zo servera" - -msgid "Failed to delete source at server" -msgstr "Nepodarilo sa zmazať zdroj zo servera" - -msgid "No messages." -msgstr "" - -#, python-format -msgid "%(sender)s wrote:" -msgstr "" - -#, python-format -msgid "%(sender)s sent:" -msgstr "" - -#, python-format -msgid "File: %(filename)s" -msgstr "" - -msgid "Download All" -msgstr "" - -msgid "Delete Source Account" -msgstr "Zmazať účet zdroja" - -msgid "Delete All Files and Messages" -msgstr "" - -msgid "Print Transcript" -msgstr "" - -msgid "Export Transcript" -msgstr "" - -msgid "Export All" -msgstr "" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "" - -msgid "all files and transcript" -msgstr "" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop Klient {}" - -msgid "Quit" -msgstr "" - -msgid "Last Refresh: {}" -msgstr "Posledné načítanie: {}" - -msgid "Last Refresh: never" -msgstr "Posledné načítanie: nebolo" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "ODHLÁSIŤ SA" - -msgid "SIGN IN" -msgstr "PRIHLÁSIŤ SA" - -msgid "Nothing to see just yet!" -msgstr "Zatiaľ tu nič nie je!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Nahraté zdroje budú uvedené naľavo po tom, ako budú stiahnuté a dešifrované." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Tu budete čítať správy, odpovedať zdrojom, a pracovať so súbormi." - -msgid "Select a source from the list, to:" -msgstr "Vyberte zdroj zo zoznamu na:" - -msgid "Read a conversation" -msgstr "Čítať konverzáciu" - -msgid "View or retrieve files" -msgstr "Zobrazenie alebo načítanie súborov" - -msgid "Send a response" -msgstr "Poslať odpoveď" - -msgid "Deleting files and messages…" -msgstr "" - -msgid "Deleting source account…" -msgstr "" - -msgid "— All files and messages deleted for this source —" -msgstr "— Všetky súbory a správy pre tento zdroj boli zmazané —" - -msgid "Failed to send" -msgstr "Zaslanie sa nepodarilo" - -msgid " DOWNLOAD" -msgstr " STIAHNUŤ" - -msgid "EXPORT" -msgstr "EXPORTOVAŤ" - -msgid "PRINT" -msgstr "TLAČIŤ" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "ŠIFROVANÝ SÚBOR NA SERVERE" - -msgid "DOWNLOAD" -msgstr "STIAHNUŤ" - -msgid " DOWNLOADING " -msgstr " SŤAHUJE SA " - -msgid "Earlier files and messages deleted." -msgstr "Predchádzajúce súbory a správy vymazané." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Súbory a správy vymazané\n" -" pre tento zdroj" - -msgid "Compose a reply to " -msgstr "Vytvoriť odpoveď pre " - -msgid "Awaiting encryption key" -msgstr "Čakanie na šifrovací kľúč" - -msgid " from server to enable replies" -msgstr " zo servera na umožnenie odpovedí" - -msgid "Sign in" -msgstr "Prihlásiť sa" - -msgid " to compose or send a reply" -msgstr " vytvoriť alebo poslať odpoveď" - -msgid "FILES AND MESSAGES" -msgstr "" - -msgid "SOURCE ACCOUNT" -msgstr "" - -msgid "Username" -msgstr "Používateľské meno" - -msgid "Passphrase" -msgstr "Prístupová fráza" - -msgid "Two-Factor Code" -msgstr "Dvojfaktorový kód" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop Klient v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Prihlasovacie meno nebude fungovať\n" -"Malo by byť aspoň 3 znaky dlhé." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Táto prístupová fráza nebude fungovať.\n" -"Mala by mať 14 až 128 znakov." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Tento dvojfaktorový kód nebude fungovať.\n" -"Mal by obsahovať iba čísla." - -msgid "SIGNING IN" -msgstr "PRIHLÁSENIE" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Prosíme zadajte prihlasovacie meno, prihlasovaciu frázu a dvojfaktorový kód." - -msgid "USE OFFLINE" -msgstr "POUŽIŤ OFFLINE" - -msgid "Show Passphrase" -msgstr "" - -msgid "CANCEL" -msgstr "ZRUŠIŤ" - -msgid "CONTINUE" -msgstr "ĎALEJ" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "ÁNO, ZMAZAŤ SÚBORY A SPRÁVY" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Zachovanie účtu zachová jeho metadáta a možnosť {source} znova sa prihlásiť do vášho SecureDrop." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "jeden súbor" -msgstr[1] "{file_count} súbory" -msgstr[2] "{file_count} súbory" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "jedna odpoveď" -msgstr[1] "{reply_count} odpovede" -msgstr[2] "{reply_count} odpovede" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "jedna správa" -msgstr[1] "{message_count} správy" -msgstr[2] "{message_count} správy" - -msgid "SUBMIT" -msgstr "POTVRDIŤ" - -msgid "Preparing to export:
{}" -msgstr "Príprava na export:
{}" - -msgid "Ready to export:
{}" -msgstr "Pripravené na export:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Vložte šifrovaný USB kľúč" - -msgid "Enter passphrase for USB drive" -msgstr "Zadajte prístupovú frázu na USB kľúč" - -msgid "Export successful" -msgstr "Export sa podaril" - -msgid "Export failed" -msgstr "Export zlyhal" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Pochopte riziká pred exportom súborov

Malvér
Táto pracovná stanica vám umožňuje bezpečne otvárať súbory. Ak otvoríte súbory na inom počítači, všetok zabudovaný škodlivý softvér sa môže rozšíriť do vášho počítača alebo siete. Ak si nie ste istí, ako zvládnuť toto riziko, vytlačte si tento súbor alebo sa obráťte na svojho správcu.

Anonymita
Súbory odoslané zdrojmi môžu obsahovať informácie alebo skryté metadáta, ktoré ich identifikujú. V záujme ochrany vašich zdrojov zvážte pred prácou s týmito súbormi na počítačoch pripojených k sieti." - -msgid "Exporting: {}" -msgstr "Exportovanie: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Prosíme vložte jednu z exportovacích pamätí získanú špeciálne len pre SecureDrop Workstation." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Buď pamäť nie je šifrovaná, alebo má inú chybu." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Zadaná prístupová fráza nefunguje. Prosíme skúste znova." - -msgid "See your administrator for help." -msgstr "Požiadajte vášho správcu o pomoc." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Nezabudnite na opatrnosť pri práci so súbormi mimo vašej Workstation." - -msgid "DONE" -msgstr "HOTOVO" - -msgid "Preparing to print:
{}" -msgstr "Tlač sa pripravuje:
{}" - -msgid "Ready to print:
{}" -msgstr "Pripravený na tlač:
{}" - -msgid "Connect USB printer" -msgstr "Pripojiť USB tlačiareň" - -msgid "Printing failed" -msgstr "Tlač sa nepodarila" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Správa rizík tlače

QR kódy a webové adresy
Nikdy nezadávajte a neotvárajte webové adresy ani neskenujte QR kódy obsiahnuté v tlačených dokumentoch bez vykonania bezpečnostných opatrení. Ak si nie ste istí, ako zvládnuť toto riziko, prosíme kontaktujte svojho správcu.

Body tlačiarne
Akákoľvek časť vytlačenej strany môže obsahovať identifikačné informácie neviditeľné voľným okom, napríklad bodky tlačiarne. Pri práci so skenovanými výtlačkami alebo pri ich publikovaní toto riziko starostlivo zvážte." - -msgid "Please connect your printer to a USB port." -msgstr "Prosíme pripojte vašu tlačiareň do USB portu." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "ÁNO, ZMAZAŤ CELÝ ÚČET ZDROJA" - -msgid "Are you sure this is what you want?" -msgstr "Ste si istí, že to chcete spraviť?" - -msgid "When the entire account for a source is deleted:" -msgstr "Keď sa vymaže celý účet zdroja:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Zdroj sa nebude môcť znova prihlásiť s ich kódovacím menom." - -msgid "Your organization will not be able to send them replies." -msgstr "Vaša organizácia mu nebude môcť poslať odpovede." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Všetky súbory a správy od daného zdroja budú zničené." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Chceli by ste zmazať {files_to_delete}, {replies_to_delete}, {messages_to_delete} z účtu zdroja pre {source}?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Mazanie súborov a správ ..." - -#~ msgid "Deleting source account..." -#~ msgstr "Mazanie účtu zdroja ..." - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "Tlačidlo ĎALEJ bude deaktivované kým bude pripravený Export VM" - -#~ msgid "Entire source account" -#~ msgstr "Celý účet zdroja" - -#~ msgid "Files and messages" -#~ msgstr "Súbory a správy" - -#~ msgid "DELETE" -#~ msgstr "ZMAZAŤ" diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.mo b/securedrop_client/locale/sv/LC_MESSAGES/messages.mo deleted file mode 100644 index 3f104b468ef3853a5bbb814324e5807f00686998..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12838 zcmbuFYm6k=4h*#KE;x~r$l z-CfmGRnP2rSz#1IBory)l@EXrL9-E$B;pH}KtTeA50L;VicpXuh>#T#A&@{y012?* z_rLd6cg^fL%A>S3|E}t)d(S=Re;)Vre(eo+{#w8hbH0tU^YS3jjnBT4KRSNE{tNB^ zU&H0A!MB5N0e=*H82mwS3w%8of&YC+5bS|}!FBfPAb99yLGb>&gWxf)d#??GcY?nQ zz6tzmP*Z&!ybJsn@QvWNJl^#>Wa9d5;GN*lfqL#2z#juY3H~tnIZ$#Pf^P+10GTp) z5qvW^gOHl%ouKA_H@FP0fqL)P!5Q$6L9OF2L9O>I{`%|w`ai)paQ{vox*vQKcn|m( zh{!<*{s=e%o8ZSmJ^wf0gWx}clJ9PAYMu9k3>iEEO5PPv@?HgB0cN1&x(>b@{22H! z_<8Ue_ziFYyvShl;3vSJ2EPPq+zUSx1gId`1f{<=sCj$fo8XI}#(xT> zz6$(BQ2PF5P;&eRsC9k@ls^9mWzc}%08fE;p$yIcpvOl*jk^r4f}5b` z`!u)$eidwh_d|{gU<^vW&w|q5zk(kG-;9zT2RA^y_eYt}gd)K|gQpqjf53m>`d$+RH@SWp z!d~S1Sx7t!ei7u6;6FgwjiHGHQv3T*8L&y8E^x<6Z|Vs&wUBh`o9W_FaHY~ z@HGf0yVgP3djUjM!6vBphM@Gc2d;y^4Qd_#4(j-!ccd*6ezNiSEyhrm9lb^jKKNrEqcdhhQ*J@;?^`#TU)_J0Sc zc~669zz>3tf;-@K@D{iLzWsq9SOnXk{OI>Vz4taqAbB4IUj;Tm>30c~-+k2M?|>iS z`kz4Yr@^A`0-y2tF;M#Z1ULhJ%3psP)cAh@YTQ2u5h?fzh-riW1EtS*q7>=#y`aXu z2u9!rcn*9XY=hqfSHLSZxDOtHkAp9Qh!&i$yYpMS=rR z>-{qjx(8ne&x79p?*MgZerOhK=z`-zoIOs>uj6%`@=1-q%(>3F%K2JO9alJ&>%=P^ zujjmGKe<1T10StiU*+>fPRRkS>~W7r!BdiWZoYISI`6|x4Id#0*L4cWp7N>Niqn>yCsL%R05M1IE zN98v$7N3W zpgqjO`jxen^~ORl`Lwil(FCTOr9+cP*>04XA~jJGZVw`pMWaC+<$-Rs)8Q!1Ba>!4 zmvl^Mzugb+JFUwodmz{SVy=2)FH4JPE;!eF==^G!ggbGvV@6q=6zRAyS)BLtb7%PO z-1hmWT1?Q1auYK2UbJn(PA7}~m@^J|fnZhsV+II$0=qbNE0v=y%%CT22V zJ57o(PNI%pvXk?%leWi0q|MDw`atWQ zw5Y7Lksv~t6(;SX=~C>GCL4zPZg|!ccUVN+-IwTb(oM5rD3STR8|Sf1h>%4uGD+BH z+0lM9Yw~fsXTsbM>L#w64KFuq?2ZQmJ4Md$(4kzM+3QK&X=XJg#Yx+v@%A9jdscZU zUWzVFoY$@CH`8Hcy72((?!|+FNz%e>M<%*HO0y#BSPE30u~f8^<|wa?uESjxz)Sm) zUPOjYx|a;nuoHD=9brxw_K2RhptPONDgzT|=#52A2XX?=n)V=W_syw!SQ97XsD8>W z;gT4h7b2&$X{n1SD7;*U)^FEXGI})}?4isleYd1XX^(NNkp>a`6R#|doq{a?qQU-z zbCvI~Yls?p*hJ1ahBaFLzKMq0Q3qu}4Lhf$NDhNT#7!Ls%Qs}QBq}7wWRCBG*VeRF z2awVQ$cSEQ z7}hsnxwEGjGbE1TxVa0mR#wk!>ki={Pvs9pzamTbqYm#wD-pwn8tV$8juxrAdtp*M z7Bu$4*vc9u?QDN!8P$*WgZakVd~+q3Util=TD#N?=6&4u@mhr7o)y|$+PqMP0q%_l z9qVTBh6o{^Zz>u_3t2kyxnUY7dJ%47qub1q;urd`uDInGA)P1?S&zvu#11jI9xSY{ zHTmOn&_aX@L`K?jJkZmtUR#0xcGCrcM!TJklfvDdny9MZ7oPph^lPu-(7k5A@{t&$PoIndLUyHdhrOWuIr>mC1)|tx^pKc z`I0J$f<7%3P$-LPWw>T7Zj?E5-)T8o5)PvWayzgqAtpZOtulIRKSLl3_#8@vMB~!t&(2S8+>m+VXhI9V4m)5!jF6()nX!2t0R+uIfZC$Hf zp9AeGRRE-_68OGj@=?@|yKy^I>KFHpx&M`E-eP>}!jQ6MN0f16&iQ&KA5nYd#r`0A z^i-D|THA}_onA4Qs5BXzI)CHlxifm^{Lw+I2EL~;L`^FRM?@?K;XsANL(u{P|4sE4(LQ&^37e%qMqNrnaQDFe7xlJU4X|1Tp;>a4{ zZ0Qcwn>W0RT(iOZX8A}SY%X0~GfQg@*Dr0^588_8-uk81eA6`M=hrXcJe!v;tS$l5 zTr^K;#tOT5;q7h0SM{EJ2 zU{e);#g8}R9hKREPfxaj$>mJG$VI~%4A+88qTC?rGIW|y(3WA0FO|PKkxk%A{9DTL zow$?SU)WM{5&+va-zpOAyGU~^vDz0aabYi=3^B7rcxI17c1NgfYCo0GXWwV%KKsza zrrirO!Uq8#{wuQD!6*@{Q3Y{M8Zk}WR>AsO!k#Llobe-+0qZ4RMHm*VZAW3=dy)_* z)E}@mQO@99Tcw~goY8K7P%~M>h1GgpBDhV*MBCm&Cn{A=@m{TGE6THhQS~&Iuqnz_ z%avSIdC%v->dwaQou|>nCV40jt5&9NC5BHYre?6UovH-8$Nb9>bMjLwZkmu2Qz zMQ~}8vT1Q~Wr>RJl21*+<(OBAsRUoe1;6bJu4v;ZCy-z)v<%b=zY`}!4L(`V1y?Lx zrH?_3cr4vlCO7O_uNCPvcjM-)x#7DMM{kzetK6NsxwlzWj4}&67F=y^&YFehN^`4e zniSEkra2aos!yCyPF+Rpp(=pf#R!Q%iZT{EL68XP7hj?#$}aYIC~wv-S7Pu(2z6wzfr+Y|a$X_2SHE zKpFIijjwrBJbGzsvG(xvIq{(zWwmBPXu=+I=HczQnAsSN3FNg!D4SCOkL+ds=tGat z-_kdaCgz?;&Dlq0K3uyPB?Nt|m@961=6&_E{F@2P3Yuw{wI=OG`?00Zw%d4ki!#x+ z8xzw#e4a2+kdONX+o+6)up4IdB+L7GpY2u1zG*=9lJ{xQaKZETv1`UEySlHD(sqWVesvg|%?N(ksn@oZ~EJ$3l} zXp|s}Z9;~&VOdJ4L>1D7^kcI7!`l+7gVEtFXl-R+K%VKOecOvH;z z-NS>V6Yrpq!viGk(J(r^RqPxdWXM@J>qFBS8?H?19uKd3R%P&ydMohthdVt$!|@?qEH@7>2tE^ zsCRg4FbMgm80aFM6yhY`mq^ao9hwM3WX${A3Q_M)NX?{2i+XgOC5Z>6Bz1FnvYhT% z4LTa7DAz8Q28~8X4`D{hgNQ@&xnq#+Shjf_GFdZWj?xIOV|h8IV`HOZhNgy8HOS8P zRU~!$9o}}m>*}N3Oth9FdYZg{c)+T;U?ThafTniHencBCNtUR8*#e}fdYg}&yVXct7Er&sS3MI(TN9u>97-O@rY;4wu zlsj3-FBR;8I`ps$HGV~5`lIkq8pYhb)S=52DGWYd2C;_ zbStqR;wgOKx+H;#@04!ieIsr633`^G86AK8t{xmd=R%x~igs4XN%SC~S+^&SARfyf zJQgTQC;&*fzB;9mS{He;-|k0)pmF&^>*`jpNYiig@VPDanKsUs>BTWDXxN2lZFGrh zJ`P2}vcit@?S#>%MMrJZ<+f^!5^1tjIV?0Ymb6YiDudiK3KF)FD&<&eZ^;*w2lK<{ z`y@=cyW)2}SYBzgf@ywjS=Er9a2Dru#}pj+Cs=}0u)pEm&_<(*J=8FDZ}>PS=~LZZ zQ4ljKM>ScnY}=@%s-(gRv_<^5B18ZqG#XjHKlJGD%e4a8o%{qA(0=Z-(OY*y1 z68Q$H>|&SHbU#dS*-uAtSawv0B!vN_LDPA8@7Og%P#;p#YFE&*I$dopu$Q3S+FT1( zDsvONp!W#Aw&$@X(`6&%7V+SMeL5Opkj zV|<>ZKS=uk=d(UAS0=OXyscXu#Fc~H;(HjzmA2ciazq{*ey|$W@_7L-oOX7dNoh)l zG)ENq%I$plbf4{JsP-<5fM9VYR{MbJVg;GrIsGMD%66$oD^43Uc9qaV2y&1s8&o}) zzGo-3f=p_(@4llw8N<wpTkR*2OL^Yxi-KEw@qR z35pfvQZ;+a+#QrRZ|@Y8k0im$`o)V4HFw{BGrVVjRC0zQx$F`T$_weRuJXrBG zLULQ-)51$^8AsqjIi8?4PHJplrYZ&yrAX*vah~XZcXa$ND2XN|yx1G=PVyaDaY5CL zk{yMa>M&n&)QuKiRup6|{<8@0T2rf9aFKZdmiF}W(KT4^9^KgZ(d#psZ+Li15!I4s zs1n?Ej5WSG#{8DvX9Vi~WQTY+nd4Y2;}Jio+W={3BCdAtL_->6mAzpeclnPW{5YuD zt-wd3CO5rWZCa9UUs_&%_)<&xn3PjS)ymF;E3sK8B?SM?N3lyOj(DR9>~6+I{7@a` zHD@H%Yb>K07pAXztshMwS~P~HITY?vd>pePtn{1mW2Re1>8@7uMUc%?lu?r~h7+>W zMpP1qa!XylC{rJ>LRG*#P*&K`PS*709QzAPw94k#1_9|`dtXxN4lNQ!IWBIgB)igC zGoxV?ohL*@9BmC;&SL;p&;L<5Mh*JONAq6LSi5}q9KTAJJ>^Cmd8` z@wk_`#OIr4Vt}hxJg?jUWhYsUiXB*AkajARwt;MtIqmL4b#kSeSISH?{u6`l-QG~n z0&S4(r;{g>BGj>^Q>{U5WBLC9 DYKG1_ diff --git a/securedrop_client/locale/sv/LC_MESSAGES/messages.po b/securedrop_client/locale/sv/LC_MESSAGES/messages.po deleted file mode 100644 index 17eb1972b..000000000 --- a/securedrop_client/locale/sv/LC_MESSAGES/messages.po +++ /dev/null @@ -1,387 +0,0 @@ -# Translations template for SecureDrop Client. -# Copyright (C) 2022 Freedom of the Press Foundation -# This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.7.0\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-04-24 08:13+0000\n" -"Last-Translator: Jonas Waga \n" -"Language-Team: Swedish \n" -"Language: sv\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} är redan igång" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "Hämtar 1 meddelande" -msgstr[1] "Hämtar {message_count} meddelanden" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "SecureDrop-servern kan inte nås. Försöker att återansluta..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"Kunde inte nå SecureDrop-Servern. Vänligen kontrollera \n" -" din anslutning till internet och till Tor, försök sedan igen." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Dessa uppgifter fungerade inte. Försök igen, \n" -"och kontrollera att du använder en ny tvåfaktors-kod." - -msgid "That didn't work. Please check everything and try again." -msgstr "Det där fungerade inte. Kontrollera allt och försök igen." - -msgid "You must sign in to perform this action." -msgstr "Du måste logga in för att genomföra detta." - -msgid "Your session expired. Please log in again." -msgstr "Din session har gått ut. Försök att logga in igen." - -msgid "Failed to update star." -msgstr "Misslyckades att uppdatera stjärnmarkering." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Filen finns inte i mappen. Försök att ladda hem igen." - -msgid "The file download failed. Please try again." -msgstr "Nedladdningen misslyckades. Försök igen." - -msgid "Failed to delete conversation at server" -msgstr "Misslyckades att radera konversation på servern" - -msgid "Failed to delete source at server" -msgstr "Misslyckades att radera källan på servern" - -msgid "No messages." -msgstr "Inga meddelanden." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s skrev:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s skickade:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Fil: %(filename)s" - -msgid "Download All" -msgstr "Ladda hem alla" - -msgid "Delete Source Account" -msgstr "Radera en källa" - -msgid "Delete All Files and Messages" -msgstr "Radera alla filer och meddelanden" - -msgid "Print Transcript" -msgstr "Skriv ut kopia" - -msgid "Export Transcript" -msgstr "Exportera kopia" - -msgid "Export All" -msgstr "Exportera alla" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Vissa filer kommer inte att exporteras

Vissa filer från den här källan har inte laddats ned , och kommer inte att exporteras.

För att exportera de redan nedladdade filerna, klicka på \"Fortsätt.\"" - -msgid "all files and transcript" -msgstr "alla filer och kopior" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop Klient {}" - -msgid "Quit" -msgstr "Avsluta" - -msgid "Last Refresh: {}" -msgstr "Senaste uppdatering: {}" - -msgid "Last Refresh: never" -msgstr "Nästa uppdatering: aldrig" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "LOGGA UT" - -msgid "SIGN IN" -msgstr "LOGGA IN" - -msgid "Nothing to see just yet!" -msgstr "Inget att se, än så länge!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Källans inlämningar kommer att listas till vänster, så snart dom är nedladdade och avkrypterade." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "Här läser du meddelanden, svarar källor och arbetar med filer." - -msgid "Select a source from the list, to:" -msgstr "Välj en källa från listan, till:" - -msgid "Read a conversation" -msgstr "Läs en konversation" - -msgid "View or retrieve files" -msgstr "Se eller hämta filer" - -msgid "Send a response" -msgstr "Skicka ett svar" - -msgid "Deleting files and messages…" -msgstr "Raderar filer och meddelanden…" - -msgid "Deleting source account…" -msgstr "Raderar källkonto…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Alla filer och meddelanden raderade för denna källan —" - -msgid "Failed to send" -msgstr "Misslyckades att skicka" - -msgid " DOWNLOAD" -msgstr " LADDA NED" - -msgid "EXPORT" -msgstr "EXPORTERA" - -msgid "PRINT" -msgstr "SKRIV UT" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "KRYPTERAD FIL PÅ SERVERN" - -msgid "DOWNLOAD" -msgstr "LADDA NED" - -msgid " DOWNLOADING " -msgstr " LADDAR NED " - -msgid "Earlier files and messages deleted." -msgstr "Tidigare filer och meddelanden raderade." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Filer och meddelanden raderade\n" -" för denna källan" - -msgid "Compose a reply to " -msgstr "Skriv ett svar till " - -msgid "Awaiting encryption key" -msgstr "Väntar på krypteringsnyckel" - -msgid " from server to enable replies" -msgstr " från servern för att aktivera svar" - -msgid "Sign in" -msgstr "Logga in" - -msgid " to compose or send a reply" -msgstr " för att skriva eller skicka ett svar" - -msgid "FILES AND MESSAGES" -msgstr "FILER och MEDDELANDEN" - -msgid "SOURCE ACCOUNT" -msgstr "KÄLLKONTO" - -msgid "Username" -msgstr "Användarnamn" - -msgid "Passphrase" -msgstr "Lösenordsfras" - -msgid "Two-Factor Code" -msgstr "Tvåfaktors-kod" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop Klient v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Det här användarnamnet kommer inte att fungera.\n" -"Det måste vara minst 3 tecken långt." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Den här lösenordsfrasen kommer inte att fungera.\n" -"Det måste vara mellan 14 och 128 tecken långt." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"Den här tvåfaktors-koden fungerar inte.\n" -"Den ska endast innehålla siffror." - -msgid "SIGNING IN" -msgstr "LOGGAR IN" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Vänligen skriv användarnamn, lösenord och tvåfaktors-kod." - -msgid "USE OFFLINE" -msgstr "ANVÄND OFFLINE" - -msgid "Show Passphrase" -msgstr "Visa lösenordsfras" - -msgid "CANCEL" -msgstr "AVBRYT" - -msgid "CONTINUE" -msgstr "FORTSÄTT" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "JA, RADERA FILER OCH MEDDELANDEN" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "Vill du radera {files_to_delete}, {replies_to_delete}, {messages_to_delete} från källkontot för {source}?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Om du behåller kontot så kommer dess metadata att sparas, och {source} kommer kunna logga in i SecureDrop igen." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "En fil" -msgstr[1] "{file_count} filer" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "ett svar" -msgstr[1] "{reply_count} svar" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "ett meddelande" -msgstr[1] "{message_count} meddelanden" - -msgid "SUBMIT" -msgstr "SKICKA IN" - -msgid "Preparing to export:
{}" -msgstr "Förbereder export:
{}" - -msgid "Ready to export:
{}" -msgstr "Redo att exportera:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Koppla in krypterat USB-minne" - -msgid "Enter passphrase for USB drive" -msgstr "Skriv in lösenordsfras för USB-minne" - -msgid "Export successful" -msgstr "Export lyckades" - -msgid "Export failed" -msgstr "Export misslyckades" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Förstå risken med att exportera filer

Malware
Den här arbetsstationen låter dig öppna filer säkert. Om du öppnar filerna på en annan dator, kan eventuella malware-program spridas till din dator eller ditt nätverk. Om du är osäker på hur du ska hantera riskerna, vänligen skriv ut filer, eller kontakta din administratör.

Anonymitet
Filerna som lämnats av dina källor kan innehålla information eller dold metadata som kan identifiera vilka de är. För att skydda dina källor, vänligen fundera på att redigera filerna innan du arbetar med dem på en nätverksansluten dator." - -msgid "Exporting: {}" -msgstr "Exporterar: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Vänligen stoppa in en av de export-enheterna som är provisionerade speciellt för den här SecureDrop-arbetsstationen." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Antingen är enheten inte krypterad eller så är det något annat fel på den." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Lösenordsfrasen som angavs fungerade inte. Vänligen försök igen." - -msgid "See your administrator for help." -msgstr "Kontakta din administratör för hjälp." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "Kom ihåg att vara försiktig när du arbetar med filer utanför den här arbetsstationen." - -msgid "DONE" -msgstr "KLAR" - -msgid "Preparing to print:
{}" -msgstr "Förbereder utskrift:
{}" - -msgid "Ready to print:
{}" -msgstr "Redo att skriva ut:
{}" - -msgid "Connect USB printer" -msgstr "Anslut en USB-skrivare" - -msgid "Printing failed" -msgstr "Utskrift misslyckades" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Hantera utskiftsrisker

QR-koder och websidor
Skriv aldrig in och öppna en webadress eller scanna QR-koder som finns på de utskrivna dokumenten utan att ta nödvändiga säkerhetsåtgärder. Om du är osäker på hur du ska hantera risker, vänligen kontakta din administratör.

Skrivarpunkter
Flera delar av den utskrivna sidan kan innehålla information som är osynlig för det mänskliga ögat, som t.ex skrivarpunkter. Vänligen fundera på risken när du arbetar med eller publicerar scannade dokument." - -msgid "Please connect your printer to a USB port." -msgstr "Vänligen anslut din skrivare till en USB-port." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "JA, RADERA HELA KÄLLANS KONTO" - -msgid "Are you sure this is what you want?" -msgstr "Är du säker på att detta är det du vill?" - -msgid "When the entire account for a source is deleted:" -msgstr "När hela kontot för källan raderas:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Kan källan inte längre logga in med sitt kodnamn." - -msgid "Your organization will not be able to send them replies." -msgstr "Din organisation kommer inte att kunna skicka svar till källan." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Alla filer och meddelanden från den källan kommer också att raderas." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" - -#~ msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently-downloaded files, click \"Continue.\"" -#~ msgstr "

Vissa filer kommer inte att exporteras

Vissa filer från den här källan har inte laddats hem ännu och kommer därför inte exporteras.

För att exportera the nedladdade filerna, klicka på \"Fortsätt.\"" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Radera filer och meddelanden…" - -#~ msgid "Deleting source account..." -#~ msgstr "Radera källans konto…" - -#~ msgid "Download All Files" -#~ msgstr "Ladda hem alla filer" - -#~ msgid "Print Conversation Transcript" -#~ msgstr "Skriv ut konversations-kopia" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "FORTSÄTT-knappen kommer att vara inaktiv tills Export VM är klar" diff --git a/securedrop_client/locale/tr/LC_MESSAGES/messages.mo b/securedrop_client/locale/tr/LC_MESSAGES/messages.mo deleted file mode 100644 index a7af7eca89f670800e57ad6d93ff696fcd9808ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13010 zcmb`NeT*FUS;r@B+NRgErGd8T3-F6enxws3*KSJ9*|D>Cw|1_+7w2A_TzE<6cIWP< zJ3G6~%=)}`EwvyKwY-#4C;~!G6{s$#Ao~v@AsLFeJ%I$35UM~zqC%mf67WYWDx@MR z@%cV8v%7b`R7uOobKl*0`Td^X^L(F|-?RSeJ$L?w#}RVAle6(k&(no3zM4NeUTgon zJHXfT^>yHnfNule0iFPV09*mz1P0*$+~IlK;9v4Rd7bASe}(6L;BL=5!}qN>c;36f zFMw|a{}$9#Ujy#~{{#F%@LL7m^+sgk`#Zrq!HbuS zC%``jp9a4U&Vc6_Y#RI}@Mpol12yi{4|yIc@RmX8uMTS7E$~tBqoC~aXW%mU9Z=&x zj#6I(eiD?ve+`rzzXNKWp9iJSKLPpY-Qo|gdVdc(@ay0a@Gg|0`QKaMNl@dS2j{_M zQ1g8boCE&}tbz|fjwvt%CEpi8>F+%5g`SWAogW!*X^Wgnp z3w#Cm8Sux!&w`)31N(!LqYY`HfOi=be?Q3|&HDvVdi*O8lY0LQPBG9oz_0NA{f=vV zzYAfH@%`T*@dS7;LWqZFLD?e)#hWfDJzND*nfHs}7WjL`{ksuXcDM(W-@hHy{2v6R zk9iQ)cx_OA@Ci`!{3a;9ehFkK?{B~lfZqV6w|Bog=fNTc&wmHS_x}aO)7K*mLwWatuLjQ) zcouw=@AKda_$y!n{wpZ{Uu5tF@DITl{5EL*0tqz!N5NNtzYI$L&w!7CUjXHQ-vl?o z4?xzR0Dl)81OE|}9$x@8&No2$`yJ!C9o_&+UvDY!D0r0bkAaF;mqCs5EGQmd2c@S! z2cH1H44wk-hZHBlb#MuM4x9qN32MC$S3HkLy-$FX;Pas7`6k!~@8ioA@Y5hB_3p-5 zw9ez8isGx`EG%@g7bSOS( zZRH_eH#lcFKg22h);V9pc{isHaYP5^GW$wLIzG%PJBf=rq{FkE;=cSJb({SFZ8YGv3#AR(4#Qu5|xFqOAVUT*dRByLB?KE)h zgy-Uh^X+cWyZ=Fb4U&gaUC$;*FKj36ESU68Z5=;7@5laT7;m~x62@7(o4F)Ro9U^e z+&i^?`tciV7n8<`=2)P>VE77 z1J>Jd=7(|6&`UNs9~+8b!P6uYCzT7EAdp7n$c77=drBzhQcw3C)Ek@VI?JcRhotUPiIBC1nU5~
L6fGp7*0|lsTmDiu5S$F^(B23gDl3Wi-weWc&-F z-hgu>_pqyv8n&>BoUsdQwEUh6TI)drWk3y^(|YYIS0!(WU@HOB*$Qmm%(c@ zt?5AWj%&1+PW5Wsj(aV^)VwO zdZ}SpUxnqlJ;j(7aSX>z^B`-o7R)wx@T0UXe<1p0NxK&`cpqAc7#3>G6+|5^QdhVA zI6LE2xBbv$4dQyz>lmY&LC>46E=Wnm1jo-ZpJ1~W;!Q{;wWoY)F*6N_$Rvx;Bn!(4GCXM}X3Kx7`1V2Dj(aK)Qh zT&VG<$U!p!E)Y0rE9Zfpo-efJ6?d2OAW*H>+ubI~R}w!?>q*$j%9|TLzSJnc5#{S>l2~3`VdhD9^_r*kF1zZ&jGM15FIUgimc6s~ zrkIhhO)gEUP4h4X>+-_j_UB3^AM%8Xf{_=x9UL`qgubNW$=HNmJi^p|ao|!k65%s4xuz_mM6Gkge|XE-cM1tauj& zcJ<0UTX>*(P@dkc@bYt?Br#UXN6A#M%y(Vn)jEk=gW+=j+HOy55V*|q8o}VjFkfLi zrfAzR?G`!ER;dD@ttx^04VQL;dbknReWiYJ?|}P1G0a+5q39vX+9D3I(GX>89>mrFTeCmuD`DVr4~9$8<5m08(?ENCwlE zf-DIGGr+OZ9Y!x+EnMVj3*OhtM^bNj_S}M-UC429b;UktE23+Qt4q^0SDl_-T*Y~o zSEuG@fnhG1CNyJ(OL*b!SM8#u&jW?G8G9>;Iu+iER1Nq=tx+cCz){I&;}~g@N61CW znQ4bDK;SK_;vezj<#1DFwpXMlt6)+&Q&HriVGV|BK_*cy3N{$J9aGSjVT_x~UyZ;L zxDx-0a(p9f#1CXvDh>i*-SVv>Q7?})2NJ8jI1(4O+k+v-W(m*iamelnwNCA)68hM~ zHutgPCtQ8YPY53beE6@(YJ*WCjz$&4Ic&ssoNpD(*JAcm3FS;NLK(1L)8?ISzuH> zjU_Ba<<;^?E*g2S$bq9f8{0b%qlqPXC=jYvrfwyM4=1K(u-Z;l0)AG;F5*X-UB+2g z2Q4#TK37_7dI-sR0bvfS6>EQ9r;5cpLhNuTlLpJqM;U9eGb{?twsH)lj{`Qh`_0ej zTsWI&nQ2zxtu9kGojp4@OGUR@q$clT$g9Lug0JF2vF-Do(8f_tAi-E@8K@P02Tq6@ ziex?MJz;c}KB5ruSb9;JT(z}6owc9NFI*dUSBoyi{)?sdMy?Lsys+7*7-beXx*MJz3dvT9UWAZ2={(lS7s zdOh7M6zIKZ2-ic#OwTOPD~Bk|;a&ARbdTz`u%|`(Yht<|;ke|nq#MViO^!pDBy z_5e1wMWxbsB_R$LZ;n?eAle@xicicoCN2`YP{pKM>C&7?x7>rnyztQ2QlLh|#C*CL zHYTRJo9V<#d(w?vSe#fQb?L>48H&?Mw^pkzP0TM&%v9ZDi<9%S?|q8x%9tv@3CsAA z`ZtsA?CRW{Td2<0+^O1pb$0I2>ded%we)EojW@e&^(IyVzcrNR)K->t(#fMoX>2h@ zP)RM9HP}~GF#l2FjaHH#9bO;#I6+GSzd4#EM~5>^x-1!+pPjD_*M6+>zA-j-8P86v z&?MuL;Bt1f6Hx}8wD_6^*(0kfXD3b!pA#Q8f@Go=6PmEcq&u-5W@8tkE`faFER;>D zfIIdzedPE_`dhm5NbK%=#2q_1_T2o3PD9yH6lJanahGX~ffxXsJpS%=+I3pPrGQne`)U7X#2o8Ev`Gz;G=gTR zR%JOkI-wJp`1wl}H`O(%L;81mvydAd^>x3UfH?gb$L(h3n;M3zo*D>E0!#hghAbC5_O)BkJ#_0_ zUf+G5Sz8R#&0R{!SSj*ZsLPz!r?pKm^z-P`HkOqvX4`tF(TxvwjwTGmUQHo|7p&j?Yb zn=7)XEg+w;(IrIX4a_O2hdLtdNjDB^?d|x^M^*3z%lG`c-!v*=ucqIl*{XIj=HB-n zNpSbp6^cgow_(%@8lkv$_-Okq)W4Cx!Xio`B+rN#Bykt+UWW-sW`aw83#Y0aVJo_O z9q$xZ$f5n4P19|$sF`9pw~ZtoqYAX5HfK)nIDfNrm-D;NXS=r?G~K-}I-9}y&>CS) z*M-=K64+0B?YKKWDthTd#+|(#oFHPSVa@^tq_ouU@1X078xeEe-`i>8MB;(^F}lllS^!IV}sAKUlA7785!tZAv8!}M3Y8LGo*_dHM;$sZrr`n zRX_@p2scDA3c4auW2T@zO4&-f!o=JSY zMST_#8)-=K24rP8GK1eSv9)yz^C(N%su~0;O&Pa2sFmRRw$)Szchz)LZE0=6=Ya7?9h!WG{+_OOVsn#dBo}$8G1!pGGCLH z`Zoq@S`H&Gx2}6ENd0vi+v#fQnRd(ZW6oL!;@UzqRT*n5tjEtl7--puUYb5&P8zfxWDX8bMG zk`iT&9;3F+r$SNQ^6o8CUY%f28Y`v;qPUco6eAHOg|B#}+LJO(TE58#Wd;2h*N&74 zF<@@E*eh2t8i_rt6q{_6|54qI8iPEffYg(AAF1d>}HE*jQ z;&Z{qhVqSt;k_M79aFZkW%Pd2BF5;=b9k6)s+?Kg8ge1Q72?M&5Cb5#mI-%f)6xC4z&t((ky~ zh_(#%50ux!DD2zK16SB~%!{+^xtkRXX_=X*30-0$h8CVj!363AJw0}xw^n^>W_F2g zuBhOZURYK;N+TBBa;b*Sm{(PzP7wmFDya+x&^ns@=Bn7BXdqsw$*Wn6*O-=|2w@aF ziQFna8}0s1(iMwTJSwsZa&WB{tECO@$9E;Uq9S26vdz7dy7 zS5Vl*<}vZxis)R`m3U z-51m7%Wsh1uEv)?1_5}7j8GPGBiY-6p=g%}IzCt!G7pAXw-@DQ#SQWD#ggGN`vh~X zfs9Aug(P2MQb^o8to?A?Gm9&$ORMv)y8Dcme_VCvs~4&(#W&rUottIf>7B2xEmY6D z#|WMmymPysCD#x^hn;10Y+H2_{lVt4)?eHqbgWUfQ0>~buPnU3%Wlh?vraIcv$w0vy{m?{k*VNwJbkzq6+}^m&jXRDgX735Vl*O#+7Kh`c+rAv%IY^2UV|9XBt+QOa8TWr!BEX< zOM|7Y4penzlu_|!mD-eQb5*Tn6{3iKsD*BOwWz?z5SCTU4CO<^C`J;oEv!s1DEx>+ zx>#HJj}yo0P7l)?u*7B#7H, 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.5.1\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-13 13:30+0000\n" -"Last-Translator: Alper Gunay \n" -"Language-Team: Turkish \n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18.2\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} zaten çalışıyor" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "1 mesaj gösteriliyor" -msgstr[1] "{message_count} mesaj gösteriliyor" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "SecureDrop sunucusuna erişilemedi. Bağlantı yeniden kurulmaya çalışılıyor..." - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"SecureDrop sunucusuna erişilemedi. Lütfen internet\n" -"ve Tor bağlantınızı denetleyip yeniden deneyin." - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"Bu kimlik doğrulama bilgileri işe yaramadı. Lütfen yeni \n" -"bir iki aşamalı kimlik doğrulama kodu ile yeniden deneyin." - -msgid "That didn't work. Please check everything and try again." -msgstr "İşe yaramadı. Lütfen herseye denetleyip yeniden deneyin." - -msgid "You must sign in to perform this action." -msgstr "Bu işlemi yapmak için oturum açmalısınız." - -msgid "Your session expired. Please log in again." -msgstr "Oturumunuzun süresi dolmuş. Lütfen yeniden oturum açın." - -msgid "Failed to update star." -msgstr "Yıldız güncellenemedi." - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "Dosya data klasöründe bulunamadı. Lütfen yeniden indirmeyi deneyin." - -msgid "The file download failed. Please try again." -msgstr "Dosya indirilemedi. Lütfen yeniden deneyin." - -msgid "Failed to delete conversation at server" -msgstr "Sunucudaki yazışma silinemedi" - -msgid "Failed to delete source at server" -msgstr "Sunucudaki kaynak silinemedi" - -msgid "No messages." -msgstr "Mesaj yok." - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s yazdı:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s gönderdi:" - -#, python-format -msgid "File: %(filename)s" -msgstr "Dosya: %(filename)s" - -msgid "Download All" -msgstr "Hepsini indir" - -msgid "Delete Source Account" -msgstr "Kaynak Hesabını Sil" - -msgid "Delete All Files and Messages" -msgstr "Tüm Dosya ve İletileri Sil" - -msgid "Print Transcript" -msgstr "Transkripti yazdır" - -msgid "Export Transcript" -msgstr "Transkripti dışa aktar" - -msgid "Export All" -msgstr "Hepsini dışa aktar" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

Bazı dosyalar dışa aktarılmayacak

Bu kaynaktaki bazı dosyalar henüz indirilmedi ve dışa aktarılmayacak.

İndirilen dosyaları dışa aktarmak için \"Devam et.\" seçeneğine tıklayın." - -msgid "all files and transcript" -msgstr "tüm dosyalar ve transkript" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop İstemcisi {}" - -msgid "Quit" -msgstr "Çık" - -msgid "Last Refresh: {}" -msgstr "Son yenileme: {}" - -msgid "Last Refresh: never" -msgstr "Son yenileme: Yok" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "OTURUMU KAPAT" - -msgid "SIGN IN" -msgstr "OTURUM AÇ" - -msgid "Nothing to see just yet!" -msgstr "Henüz görüntülenecek bir şey yok!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "Kaynak gönderimleri, indirildikten ve şifresi çözüldükten sonra solda listelenir." - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "İletileri okuyacağınız, kaynakları yanıtlayacağınız ve dosyalarla çalışacağınız yer burasıdır." - -msgid "Select a source from the list, to:" -msgstr "Listeden şuraya bir kaynak seçin:" - -msgid "Read a conversation" -msgstr "Bir yazışmayı oku" - -msgid "View or retrieve files" -msgstr "Dosyaları görüntüle ya da al" - -msgid "Send a response" -msgstr "Yanıt ver" - -msgid "Deleting files and messages…" -msgstr "Dosyalar ve mesajlar siliniyor…" - -msgid "Deleting source account…" -msgstr "Kaynak hesap siliniyor…" - -msgid "— All files and messages deleted for this source —" -msgstr "— Bu kaynağın tüm dosya ve iletileri silindi —" - -msgid "Failed to send" -msgstr "Gönderilemedi" - -msgid " DOWNLOAD" -msgstr " İNDİR" - -msgid "EXPORT" -msgstr "DIŞA AKTAR" - -msgid "PRINT" -msgstr "YAZDIR" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "SUNUCU ÜZERİNDE ŞİFRELENMİŞ DOSYA" - -msgid "DOWNLOAD" -msgstr "İNDİR" - -msgid " DOWNLOADING " -msgstr " İNDİRİLİYOR " - -msgid "Earlier files and messages deleted." -msgstr "Daha eski dosya ve iletiler silindi." - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"Bu kaynağın dosya ve \n" -"iletileri silindi" - -msgid "Compose a reply to " -msgstr "Şunu yanıtla " - -msgid "Awaiting encryption key" -msgstr "Sunucu şifreleme anahtarı geldiğinde" - -msgid " from server to enable replies" -msgstr " yanıtlar etkinleştirilecek" - -msgid "Sign in" -msgstr "Oturum açarak" - -msgid " to compose or send a reply" -msgstr " yanıt yazın ya da gönderin" - -msgid "FILES AND MESSAGES" -msgstr "DOSYALAR VE MESAJLAR" - -msgid "SOURCE ACCOUNT" -msgstr "KAYNAK HESAP" - -msgid "Username" -msgstr "Kullanıcı adı" - -msgid "Passphrase" -msgstr "Parola" - -msgid "Two-Factor Code" -msgstr "İki aşamalı kimlik doğrulama kodu" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop istemcisi v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"Kullanıcı adı geçersiz.\n" -"En az 3 karakter uzunluğunda olmalı." - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"Bu parola geçersiz.\n" -"14 ile 128 karakter arasında olmalı." - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"İki aşamalı kimlik doğrulama kodu geçersiz.\n" -"Yalnızca rakamlardan oluşmalı." - -msgid "SIGNING IN" -msgstr "OTURUM AÇILIYOR" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "Lütfen bir kullanıcı adı, parola ve iki aşamalı kimlik doğrulama kodu yazın." - -msgid "USE OFFLINE" -msgstr "ÇEVRİMDIŞI KULLAN" - -msgid "Show Passphrase" -msgstr "Parolayı görüntüle" - -msgid "CANCEL" -msgstr "İPTAL" - -msgid "CONTINUE" -msgstr "DEVAM" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "EVET, DOSYALARI VE İLETİLERİ SİL" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "{source} kaynak hesabından bunları silmek istiyor musunuz: {files_to_delete}{replies_to_delete}{messages_to_delete}?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "Hesabı korumak, üst verileri korur ve {source} için SecureDrop ile yeniden oturum açılabilmesini sağlar." - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "bir dosya" -msgstr[1] "{file_count} dosya" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "bir yanıt" -msgstr[1] "{reply_count} yanıt" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "bir ileti" -msgstr[1] "{message_count} ileti" - -msgid "SUBMIT" -msgstr "GÖNDER" - -msgid "Preparing to export:
{}" -msgstr "Dışa aktarmaya hazırlanılıyor:
{}" - -msgid "Ready to export:
{}" -msgstr "Dışa aktarmaya hazır:
{}" - -msgid "Insert encrypted USB drive" -msgstr "Şifrelenmiş bir USB sürücüsü takın" - -msgid "Enter passphrase for USB drive" -msgstr "USB sürücüsünün parolasını yazın" - -msgid "Export successful" -msgstr "Dışa aktarıldı" - -msgid "Export failed" -msgstr "Dışa aktarılamadı" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Dosyaları dışa aktarmadan önce riskleri anlayın

Kötü amaçlı yazılım
Bu iş istasyonu, dosyaları güvenli bir şekilde açmanızı sağlar. Dosyaları başka bir bilgisayarda açarsanız, gömülü kötü amaçlı yazılımlar bilgisayarınıza veya ağınıza yayılabilir. Bu riski nasıl yöneteceğinizden emin değilseniz, lütfen dosyayı yazdırın veya yöneticinizle görüşün.

Anonimlik
Kaynaklarınız tarafından gönderilen dosyalarda gerçekte kim olduğunuzu belirleyebilecek bilgiler veya gizli üst veriler bulunabilir. Kaynaklarınızı korumak için, ağa bağlı bilgisayarlarda çalışmaya başlamadan önce dosyaları yeniden düzenlemeyi değerlendirin." - -msgid "Exporting: {}" -msgstr "Dışa aktarılıyor: {}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Lütfen SecureDrop iş istasyonu için özel olarak hazırlanmış dışa aktarma sürücülerinden birini takın." - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Sürücü şifrelenmemiş ya da başka bir sorun var." - -msgid "The passphrase provided did not work. Please try again." -msgstr "Belirtilen parola işe yaramadı. Lütfen yeniden deneyin." - -msgid "See your administrator for help." -msgstr "Yardım almak için yöneticinizle görüşün." - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "İş İstasyonu bilgisayarınızın dışındaki dosyalarla çalışırken dikkatli olmayı unutmayın." - -msgid "DONE" -msgstr "TAMAM" - -msgid "Preparing to print:
{}" -msgstr "Yazdırmaya hazırlanılıyor:
{}" - -msgid "Ready to print:
{}" -msgstr "Yazdırmaya hazır:
{}" - -msgid "Connect USB printer" -msgstr "USB yazıcı bağlayın" - -msgid "Printing failed" -msgstr "Yazdırılamadı" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

Yazdırma risklerini yönetme

QR kodları ve web adresleri
Asla güvenlik önlemleri almadan web adreslerini açmayın veya basılı belgelerdeki QR kodlarını taramayın. Bu riski nasıl yöneteceğinizden emin değilseniz, lütfen yöneticinizle görüşün.

Yazıcı noktaları
Basılı bir sayfanın herhangi bir bölümünde, yazıcı noktaları gibi çıplak gözle görülemeyen tanımlayıcı bilgiler bulunabilir. Taranmış çıktılarla çalışırken veya yayınlarken lütfen bu riski dikkatlice göz önünde bulundurun." - -msgid "Please connect your printer to a USB port." -msgstr "Lütfen yazıcınızı bir USB bağlantı noktasına bağlayın." - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "EVET, TÜM KAYNAK HESABINI SİL" - -msgid "Are you sure this is what you want?" -msgstr "Bu işlemi yapmak istediğinize emin misiniz?" - -msgid "When the entire account for a source is deleted:" -msgstr "Bir kaynağın tüm hesabı silindiğinde:" - -msgid "The source will not be able to log in with their codename again." -msgstr "Kaynak kod adı ile yeniden oturum açamayacak." - -msgid "Your organization will not be able to send them replies." -msgstr "Kuruluşunuz onlara yanıt gönderemeyecek." - -msgid "All files and messages from that source will also be destroyed." -msgstr "Bu kaynağın tüm dosya ve iletileri de silinir." - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "{source} hesabından {files_to_delete}, {replies_to_delete}, {messages_to_delete} silmek istiyor musunuz?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "Dosya ve iletiler siliniyor..." - -#~ msgid "Deleting source account..." -#~ msgstr "Kaynak hesap siliniyor..." - -#~ msgid "Download All Files" -#~ msgstr "Tüm Dosyaları İndir" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "Dışa aktarma sanal makinesi hazır olana kadar DEVAM düğmesi devre dışı görünür" - -#~ msgid "Entire source account" -#~ msgstr "Tüm kaynak hesabı" - -#~ msgid "Files and messages" -#~ msgstr "Dosyalar ve iletiler" - -#~ msgid "DELETE" -#~ msgstr "SİL" diff --git a/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo b/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.mo deleted file mode 100644 index aa0e4ffe41b9d333a3f83fc81de6aa37c92e52cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11739 zcmbuEdvILUea8<80iuvJ4NdcC(%d*DKw?QTA+0NnK}c&yjU^dL=8;F8tKBPW!)kZC zyFw@~Gm>pRY%EJQSbiXbjUNb%9t5z39w<#8X=nOK(`o-m(@cl#y}O!r!gQMHADO1p z&+nYG4+$}o(mOu-?mhRM-}$|NzkB_Y4_$j)aYY%QU_{=nluW#M9e?C{ul}d50pHK< z`@r7@KL-95xEcH)*arSO=z+huMyVd~d)%kqr_}B5QtC@LDs?yaogYx@GvFln5%8}; zIVua@0R9_z6ZmtBH~bnrasLVMTCg9Kb%Wq1!BOzT;1no){VDiy@C}e7)i1%1f)y|+ z=X?f~^FIfE1#ALk-)XP{d<_&i{tOg(|H3g$h(FDEbS7a&9Mh5BSHR*kuW91%C+&{rgbr_23~;^nDBz zKAr+a&P$-^^Hq?4YLP!|RX+qBFb8e`Z$KGx{^u>;2@2h>fQ?`)DCeC6cYr?vYr$J^ zj(foCn)=lg5Lmt0?K(?K8CM?J3!(8K@if)1-}433ho7; z2gQCjV-)d&?cl9o2e=s=1x4?F2|`-^Cn$b@BY%DeycPTu*a+SXc7g8#p8$Us90$L9 z4fY2`?jty@@HGyKex3z|uRjMxe?PYPAK*W-?>d;eDDxchaR~2ol=>p~XV@%y|9cP@ zP&rWS@e7OB;N)Vj8$h9Z6ZlQ=R#4U*v^WOBnmPdrotHt;!(Z5W9~8g524Q902SC~X zIZ))^#2?}3eh`+`AyC#&T71>w_bmP$NC>DOgJP$jfpXseSo|bPl>J*kk*@*dk=kwV z4}knrr}-o2eb>(a1QfbI2W9_tpEdH_1PZ^OwO9%APu;;E@q@2{A@DGGFZe@?A11il zxPK57dQ%qX!RxsHzPaOiI09z^zJ{P~`3cC7uSrcYznd+rdeYaL||R$INP{xz&7k@>}?kOZXNV zLia0-W=11J@|Ii=Fr?Ore&iCr*{y$>KlcECSa$yqzqd2CGDJqXw9d>=bss3c^KN_p zAh?Gi`Yl}5{J56U&Je$nOY9-GDO{LL*SdP}4;Yw6g&Ef~Ze++MJ|b5YqlFfC<^_;tqn88`V2$j zzD92BCH8D!yob?Y=LEJeYVG}<76rslzrhguevN?(DVHI6NG^|Y7o(1`gCTLYfg%1b z*G&xZskPVpn84liML4M@#%6}Ykn4Vi__Ds7`sN3kb~M-4tKzSQrtOY$I#P))C+(#k z@lsAE;dpVkJ?1$nFByw^X(dzPL{~DA_MAkDb@7Pf>ZiTx=3C{~OWl^1`AkjuL{BP_ z@oLnT&fB*(x^Z_;G``14rlRpoqC4ZHqUndzTdH}srG4vtEgTT>(vA!19TwU^o%axY4*5kxlw=ent}E?k>1Z zJ3Y}%r*M;T9~SP?Ubs6I&GfR;3%lK!Xd<4javD0E-bA}rjCn3v(x-+qvMq%yUD0?nok_WwM5@XNQ~0}er|1K%M-rJbS!?64;HEN8 zq61AA*iOn}U2d--k37)`LPR@yh4pB>Ba!NIg=Ky}5=}?NgfN-u^qjc+Fk*YX-bN?g z9qx48v?Xc|u5xx-zLBw`I~LPNq#=(x6ohknIz`=yl-86ePPCouZjVLNomzP)UKCw0 zak@&IzBSS1IUUg$*6oSLVop4faoRn{do-CyWxR-XfwDE)74@NMlov+V?js1mre04r z!b2p{6OSd_h!@#t9A+J|tMuH4OY7sbGB9xpy&+_YkYRA66OKj04?7#`@S146+pF53 zMc5@Cp3aDKiZ-?D!U_s6$RYA;84DiW=*D_bX32fqM3169=x8IwJp51mO1rU9koG?> z)?4(svS--UMGc+UM1rv!uMzQk9j~k1i=Yf#L!YT#B#j5Vu$wSGSlA&Zi+dU2qj<*u z!LPMxwGM>ejY92LclFwMBHr6Ybd{8{O}j<9yPau#!D;VxjMdYt{k+V#IkGc~xN)b; z%eWCYxhst+vCPFcdObSH>!E{;^9R?X7~*mLj1f{vY}U>N+fM>&qNsru%o5Pxh9s`m&1&k=1IKakapR$IzGZ8b@tHXKfL$1`TOWTJBY zzR`E7^w?_HHQV$fn>6G+6>6$$d1z-_sNUJuup{I&H#x1Lmit33D)iva=9V@Ua#K{k z)OuEoXs)qRhzzLnBeqLL$x#?d(v&p_E`cs&iGGqM3t~!~%ZpJUD2@EoNi>>)maYLw zH=Ry)rlf$7TC{mIWfd~XOLK01wx!&7I-H6oGlhp8F0m9T+>zzOXp&rRXE?dW+54Ch zd0U;@rh2C_)Y@9RJ=ChU>7C*kMm7m)N^RPtDZI`!25((gQ1Ut}q$w!d(48buJ%`kn zs#0QXQZEsq)%7T)QHry8oDSzml;TUNBn#TIl);5kUS%O&Ba5L@eU8vP_=&_0FZ(X&D8)I5j znD#v9Tip<#T76pWY-wm}Q#*@xRfRfhBTz?>Det=Ra!pK97^@0PsZ@BG>vY4f$VuKR zk~8tulc?+kw*UUyX(>ABwjkHUngCh!iG)#7zYqoCc4auarS zr?*a1XDSy>u~bEI9j%Kp51=%M$z*t1iWdJ+-pN*w@%)V6_%t`Ys2;? zr=iJU^R71iLtaH>u6b8WUC61et83mx@U-r_x3K{z)uK95Ggf$nD17Uzp48=YP2;VN z-RZ@WRqTpMH{jY{qfnSVhfX%L5hK;GgjysuGo9oWz*DW#@t4JMYjlsa*~*qD-NB?K zm~4}ahJ_fRg)@oE#k>wkC*m};g*3)Psb3LK7jP;3ZBpYS(MbH3jBXW+2{5edtz@EJ zlWEozR=u$-FZ3jeBq|z6&%EPM-C?So-cMTSO?T+CH{HJ333s|F(gz72|Ch|FiP0jK zXBF64k76QjUKMn##d)Vn(au;3g@pAsTVV!a<+UT@d~rP{*6Ba++PKsV_UbMLoe_-s z^#?UmHB4HqsuC8=OGi=LHbRRkm6~FsTGo~+PbWs{r?G@CQKnlit3_q|Yz-`bv(fL) zrEH>$JT4HGUYWj?99}w@o3{D^Sc)49|eyB6C%~Y8>q)@wBX`8lf+tENr zx676$b$^tt zwXC}{iQQ)6v5n4N`;}t#WI=mnv!yV%HY;bNPzCN*4~1GcI`yF)p|+3{qKR$^IcqXf z`HFSgsfS>@OFDqG$q~YS(n}$17fL`(dC5r74YM$Xw)VL3=(kO;wVoGACnd`3(tg0} zjorw%5y>}FfYB*|VExn9Fzcce^s*+FPY{K!QQ87grqU`cBxtQ(CC{t^)!U|US)@Hv zX$$lgNLX{Iy>61PM`114ZgKj@#M9jvflD1rb;skBO+~tXqwh)m4xrE0S*c*Wfb$EYR~iHzy$(tO#^N-2G+jT3tG`#<6o1jSY>Vl72Q- zeW8MvzYM!7+xU=H<7B)?Gu6o$tnM>AN=F$u}^0a@QB`taz|;yBDV>XjMI6WOVMR+Qh#K7o!s=f+}L1n@CkopmNQtsa{kE5 zspkt{Z?f};a|^HJ&h~RmZt19hrq6z}sNU*NOa>D#tPBnLqvQVcL4RO!<>YtrhxZ3Z zUI@mQa;Faj`v?5NR}l`*{ox`1@ntz-;3A~tz{Ng8Fc=;W4qgsMM-3Oj_)u`}JWB8n z5BOu3p;P4Hr+xeUOZ$SSCxU&G*}0M2xoLm;G&9+y<15b|;PhbXf?;2DHFGuJ|77mv z1r|fZ27&xYw!<3dad&`(6{l zCMNw02gDY`UK!^{5INYM9ONiSzE2J>UV=va3CLeadd zJXZUsKX4^Ke>uA#5o>&v!-$3aiBW%Ge{g&@7@3Cq?A$yS$u6G>4qdQ9zIp)q#$Lt` z(W!8$1#+6}W zNfbXjn1A-NKYVuO)CJi?D#%Y?z#UD7^!rc0x%iCAO&#=KAHa)zB%K*tId)Nzt01C` zFDjEVa|@>&W%$)!9f~2UjO&|67}qHkP^XxjQ9uQ`COF?0JcAdW6*bNu6ALXJwL6a; z=G$w^v3FxfR)$9MGslH*e;U({DO&)HJi&T0EAz|*YyOo>!SGcSbzZz!D`Aa_AF)C1q;Ewf9NdAG6a<`|4iR56!pie6`G+Q{S0oTa z#CUGLZ$Q%Mky#vwgb0Bqo!gAqsS(j1j%zC6rInOz$c zqR5+_dx9TDf6>|`7KR4>3q!^i5ZhF!Ex-DQIEfcc!pQheNRS?L$4~ilV1!JqIlFMt9~{AExl;=`cbWWJG}D|Jzc;*DS6u1qBe2xU$$|XL z0{JvQb4H1i7)4xMdgr<*r}EC#A=yb+W=gC4zA!GKO-&wu&GtIBL%E`zYt&!fZ*7@B za+OT&tbOMS&YUyusf?zS)quI9XH?~hjxdqh$0w}f|K9l1&tjU~<(ah~%}Ngl4B=*G zA$VzDvET~dbJPBz=Y>B4${#+FKS%zYTIo9&JpR125o06fZ2X2QQ`V3NCtuH9n72`6 z`8G>SwfW3gFn$UZne;%Q*rGLdgyzB|Pp!;L+1H;F7W|WrWo9a-U}TeGx%@P$rf%u7W|OOwE)xev0lCSMx0T+kD3x8S ze$yEbj=*eo;XI|$SVu&nk60Pv#Y$q+#8)9z+V?C&g4`B7F+%TYYK-h8gTK`}#iONF zAOnbc#%FaZD26qNs?v@pL!hlShY|SaNhEX31Qdy#^i8*F;LUxpPBrz6VinRCucYS69mIY zgZ(etiu)G!Y!A0?JEQ2URwnx3+gK>zw}r fN!p#5%rB486BoV+t?CF?b7WjnHW`b_*P#Ce, 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: SecureDrop Client 0.6.0-rc2\n" -"Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-06-15 05:56+0000\n" -"Last-Translator: Kishin Sagume \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh_Hans\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.14.1\n" -"Generated-By: Babel 2.9.1\n" - -msgid "{application_name} is already running" -msgstr "{application_name} 已在运行" - -msgid "Retrieving 1 message" -msgid_plural "Retrieving {message_count} messages" -msgstr[0] "正获取 {message_count} 条消息" - -msgid "The SecureDrop server cannot be reached. Trying to reconnect..." -msgstr "无法连接到 SecureDrop 服务器,重连中……" - -msgid "" -"Could not reach the SecureDrop server. Please check your \n" -"Internet and Tor connection and try again." -msgstr "" -"无法连接到 SecureDrop 服务器,\n" -"请检查你的互联网连接和 Tor 连接后重试。" - -msgid "" -"Those credentials didn't work. Please try again, and \n" -"make sure to use a new two-factor code." -msgstr "" -"此凭证无效,请重试。\n" -"请使用新的两步认证代码。" - -msgid "That didn't work. Please check everything and try again." -msgstr "凭证无效,请检查后重试。" - -msgid "You must sign in to perform this action." -msgstr "你需要登录来进行操作。" - -msgid "Your session expired. Please log in again." -msgstr "会话已过期,请重新登录。" - -msgid "Failed to update star." -msgstr "未能更新星标。" - -msgid "File does not exist in the data directory. Please try re-downloading." -msgstr "文件不存在,请重新下载。" - -msgid "The file download failed. Please try again." -msgstr "文件下载失败,请稍后重试。" - -msgid "Failed to delete conversation at server" -msgstr "服务器上删除消息失败" - -msgid "Failed to delete source at server" -msgstr "服务器上删除线人失败" - -msgid "No messages." -msgstr "无消息。" - -#, python-format -msgid "%(sender)s wrote:" -msgstr "%(sender)s 写道:" - -#, python-format -msgid "%(sender)s sent:" -msgstr "%(sender)s 送出:" - -#, python-format -msgid "File: %(filename)s" -msgstr "文件:%(filename)s" - -msgid "Download All" -msgstr "全部下载" - -msgid "Delete Source Account" -msgstr "删除线人账户" - -msgid "Delete All Files and Messages" -msgstr "删除所有文件和消息" - -msgid "Print Transcript" -msgstr "打印记录" - -msgid "Export Transcript" -msgstr "导出记录" - -msgid "Export All" -msgstr "全部导出" - -msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "

一些文件无法导出

一些来自此线人的文件还未下载,且无法导出。

要导出目前已下载文件,请点击“继续”。" - -msgid "all files and transcript" -msgstr "所有文件和记录" - -msgid "SecureDrop Client {}" -msgstr "SecureDrop 客户端 {}" - -msgid "Quit" -msgstr "退出" - -msgid "Last Refresh: {}" -msgstr "上次刷新:{}" - -msgid "Last Refresh: never" -msgstr "上次刷新:从未" - -msgid "{}" -msgstr "{}" - -msgid "SIGN OUT" -msgstr "退出" - -msgid "SIGN IN" -msgstr "登录" - -msgid "Nothing to see just yet!" -msgstr "还没有消息!" - -msgid "Source submissions will be listed to the left, once downloaded and decrypted." -msgstr "线人提交的材料在下载和解密后会出现在左侧。" - -msgid "This is where you will read messages, reply to sources, and work with files." -msgstr "这里可以阅读消息、回复线人、操作文件。" - -msgid "Select a source from the list, to:" -msgstr "从列表中选择一名线人:" - -msgid "Read a conversation" -msgstr "阅读对话" - -msgid "View or retrieve files" -msgstr "查看和获取文件" - -msgid "Send a response" -msgstr "发送回复" - -msgid "Deleting files and messages…" -msgstr "正在删除文件和消息…" - -msgid "Deleting source account…" -msgstr "正在删除线人账号…" - -msgid "— All files and messages deleted for this source —" -msgstr "— 此线人的所有文件和消息已删除 —" - -msgid "Failed to send" -msgstr "发送失败" - -msgid " DOWNLOAD" -msgstr " 下载" - -msgid "EXPORT" -msgstr "导出" - -msgid "PRINT" -msgstr "打印" - -msgid "ENCRYPTED FILE ON SERVER" -msgstr "服务器上的加密文件" - -msgid "DOWNLOAD" -msgstr "下载" - -msgid " DOWNLOADING " -msgstr " 下载中 " - -msgid "Earlier files and messages deleted." -msgstr "先前的文件和消息已删除。" - -msgid "" -"Files and messages deleted\n" -" for this source" -msgstr "" -"此线人的文件和消息\n" -"已删除" - -msgid "Compose a reply to " -msgstr "回复给 " - -msgid "Awaiting encryption key" -msgstr "等待解密密钥" - -msgid " from server to enable replies" -msgstr " 从服务器传输,这样才能" - -msgid "Sign in" -msgstr "登录" - -msgid " to compose or send a reply" -msgstr " 编写和发送回复" - -msgid "FILES AND MESSAGES" -msgstr "文件和消息" - -msgid "SOURCE ACCOUNT" -msgstr "线人账号" - -msgid "Username" -msgstr "用户名" - -msgid "Passphrase" -msgstr "密码" - -msgid "Two-Factor Code" -msgstr "两步认证码" - -msgid "SecureDrop Client v{}" -msgstr "SecureDrop 客户端 v{}" - -msgid "" -"That username won't work.\n" -"It should be at least 3 characters long." -msgstr "" -"用户名无效。\n" -"用户名至少为3个字符长。" - -msgid "" -"That passphrase won't work.\n" -"It should be between 14 and 128 characters long." -msgstr "" -"密码无效。\n" -"密码为14至128个字符长。" - -msgid "" -"That two-factor code won't work.\n" -"It should only contain numerals." -msgstr "" -"两步认证码无效。\n" -"两步认证码只含数字。" - -msgid "SIGNING IN" -msgstr "登录中" - -msgid "Please enter a username, passphrase and two-factor code." -msgstr "请输入用户名、密码和两步认证码。" - -msgid "USE OFFLINE" -msgstr "离线模式" - -msgid "Show Passphrase" -msgstr "显示密码" - -msgid "CANCEL" -msgstr "取消" - -msgid "CONTINUE" -msgstr "继续" - -msgid "YES, DELETE FILES AND MESSAGES" -msgstr "确认删除文件和消息" - -msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "您要为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete} 和 {messages_to_delete} 吗?" - -msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." -msgstr "保留帐户将保留其元数据,使得 {source} 可以再次登录 SecureDrop。" - -msgid "one file" -msgid_plural "{file_count} files" -msgstr[0] "{file_count} 个文件" - -msgid "one reply" -msgid_plural "{reply_count} replies" -msgstr[0] "{reply_count} 个回复" - -msgid "one message" -msgid_plural "{message_count} messages" -msgstr[0] "{message_count} 条消息" - -msgid "SUBMIT" -msgstr "提交" - -msgid "Preparing to export:
{}" -msgstr "正准备导出:
{}" - -msgid "Ready to export:
{}" -msgstr "已准备好导出:
{}" - -msgid "Insert encrypted USB drive" -msgstr "插入加密的 USB 驱动器" - -msgid "Enter passphrase for USB drive" -msgstr "输入 USB 驱动器的密码" - -msgid "Export successful" -msgstr "导出成功" - -msgid "Export failed" -msgstr "导出失败" - -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

在导出文件之前,请先了解风险

恶意软件
此工作站允许您安全地打开文件。如果您在另一台计算机上打开文件,任何嵌入的恶意软件都可能会传播到您的计算机或网络。如果您不确定如何预防此风险,请打印文件,或与管理员联系

匿名性
来源提交的文件可能包含识别其身份的信息或隐藏元数据。为了保护您的资源,请考虑在与网络连接的计算机上工作之前对其进行匿名化。" - -msgid "Exporting: {}" -msgstr "正在导出:{}" - -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "请插入一个为 SecureDrop 工作站导出用的专用驱动器。" - -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "驱动器未加密,或者出现了别的问题。" - -msgid "The passphrase provided did not work. Please try again." -msgstr "密码无效,请重试。" - -msgid "See your administrator for help." -msgstr "请寻求管理员的帮助。" - -msgid "Remember to be careful when working with files outside of your Workstation machine." -msgstr "在工作机在外的地方处理文件时请小心。" - -msgid "DONE" -msgstr "完成" - -msgid "Preparing to print:
{}" -msgstr "正准备打印:
{}" - -msgid "Ready to print:
{}" -msgstr "已准备好打印:
{}" - -msgid "Connect USB printer" -msgstr "连接 USB 打印机" - -msgid "Printing failed" -msgstr "打印失败" - -msgid "

Managing printout risks

QR codes and web addresses
Never type in and open web addresses or scan QR codes contained in printed documents without taking security precautions. If you are unsure how to manage this risk, please contact your administrator.

Printer dots
Any part of a printed page may contain identifying information invisible to the naked eye, such as printer dots. Please carefully consider this risk when working with or publishing scanned printouts." -msgstr "

管理打印输出风险

二维码和网址
在未采取安全防范措施的情况下,切勿输入和打开网址或扫描打印文档中包含的二维码。如果您不确定如何预防此风险,请联系您的管理员。

打印机隐写
打印出的页面的任何部分都可能包含肉眼看不见的识别信息,例如打印机隐写的点。在处理或发布扫描打印的输出时,请仔细考虑此风险。" - -msgid "Please connect your printer to a USB port." -msgstr "请将打印机连接到 USB 接口。" - -msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" -msgstr "是的,我想删除整个线人账号" - -msgid "Are you sure this is what you want?" -msgstr "确认要这样做?" - -msgid "When the entire account for a source is deleted:" -msgstr "删除整个线人账号后:" - -msgid "The source will not be able to log in with their codename again." -msgstr "线人无法再用代号登录。" - -msgid "Your organization will not be able to send them replies." -msgstr "你的组织无法再向他们发送回复。" - -msgid "All files and messages from that source will also be destroyed." -msgstr "此线人的所有文件和消息都将被删除。" - -#~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -#~ msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" - -#~ msgid "Deleting files and messages..." -#~ msgstr "文件和消息删除中..." - -#~ msgid "Deleting source account..." -#~ msgstr "删除线人账号中..." - -#~ msgid "Download All Files" -#~ msgstr "下载所有文件" - -#~ msgid "The CONTINUE button will be disabled until the Export VM is ready" -#~ msgstr "继续按钮会被禁用,直到导出的虚拟机准备就绪" - -#~ msgid "Entire source account" -#~ msgstr "整个线人账号" - -#~ msgid "Files and messages" -#~ msgstr "文件和消息" - -#~ msgid "DELETE" -#~ msgstr "删除" From b72bc8303b16cc8451b218a45d536c202eeb96b4 Mon Sep 17 00:00:00 2001 From: Cory Francis Myers Date: Mon, 18 Dec 2023 13:26:15 -0800 Subject: [PATCH 621/751] chore: ignore urllib3 CVE-2023-43804 and CVE-2023-45803 Exploitation requires and so implies compromise of the SecureDrop server itself. --- proxy/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/proxy/Makefile b/proxy/Makefile index b1590ef97..5a5977972 100644 --- a/proxy/Makefile +++ b/proxy/Makefile @@ -11,7 +11,10 @@ bandit: ## Run bandit with medium level excluding test-related folders .PHONY: safety safety: ## Runs `safety check` to check python dependencies for vulnerabilities @echo "Running safety against build requirements…" - @poetry run safety check --full-report -r build-requirements.txt + @poetry run safety check --full-report \ + --ignore 61601 \ + --ignore 61893 \ + -r build-requirements.txt .PHONY: lint lint: check-isort check-black mypy ## Run isort, black and flake8 and mypy From 2b94697152c534ed28990c95bede005ba40a513b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 20 Dec 2023 12:15:53 -0500 Subject: [PATCH 622/751] Move .github back into the repository root This doesn't have any effect as a subfolder and was missed during the monorepo merge process. --- {client/.github => .github}/CODEOWNERS | 0 {client/.github => .github}/ISSUE_TEMPLATE/bug_report.md | 0 {client/.github => .github}/ISSUE_TEMPLATE/feature_request.md | 0 {client/.github => .github}/ISSUE_TEMPLATE/release.md | 0 {client/.github => .github}/pull_request_template.md | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {client/.github => .github}/CODEOWNERS (100%) rename {client/.github => .github}/ISSUE_TEMPLATE/bug_report.md (100%) rename {client/.github => .github}/ISSUE_TEMPLATE/feature_request.md (100%) rename {client/.github => .github}/ISSUE_TEMPLATE/release.md (100%) rename {client/.github => .github}/pull_request_template.md (100%) diff --git a/client/.github/CODEOWNERS b/.github/CODEOWNERS similarity index 100% rename from client/.github/CODEOWNERS rename to .github/CODEOWNERS diff --git a/client/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from client/.github/ISSUE_TEMPLATE/bug_report.md rename to .github/ISSUE_TEMPLATE/bug_report.md diff --git a/client/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md similarity index 100% rename from client/.github/ISSUE_TEMPLATE/feature_request.md rename to .github/ISSUE_TEMPLATE/feature_request.md diff --git a/client/.github/ISSUE_TEMPLATE/release.md b/.github/ISSUE_TEMPLATE/release.md similarity index 100% rename from client/.github/ISSUE_TEMPLATE/release.md rename to .github/ISSUE_TEMPLATE/release.md diff --git a/client/.github/pull_request_template.md b/.github/pull_request_template.md similarity index 100% rename from client/.github/pull_request_template.md rename to .github/pull_request_template.md From 73c7c9871356d9aa5df0b413e04e02e70d808fd2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 2 Jan 2024 12:50:01 -0500 Subject: [PATCH 623/751] Run `make extract-strings` to update copyright year --- client/securedrop_client/locale/messages.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index 3b84630b6..2710d75bb 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -1,7 +1,7 @@ # Translations template for SecureDrop Client. -# Copyright (C) 2023 Freedom of the Press Foundation +# Copyright (C) 2024 Freedom of the Press Foundation # This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2023. +# FIRST AUTHOR , 2024. # #, fuzzy msgid "" From f3d1870c737142bcc85886ca59b38e6fdb018618 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 12 Dec 2023 18:49:08 -0500 Subject: [PATCH 624/751] Add and refactor Debianization This copies in all the packaging files from securedrop-builder plus the keyring and workstation-config components and refactors them to use a single source package for the build, like securedrop server. Building all workstation Debian packages now has one entrypoint, `./scripts/build-debs.sh` (a make target could be added in the future); all packages use the same version. As part of the migration, dh-virtualenv was replaced with `./debian/setup-venv.sh` that invokes virtualenv and sed directly to implement the same functionality. Package building is now done by GitHub Actions in a singular job, having this build and push nightlies will be done in a future commit. --- .circleci/config.yml | 201 +----------- .github/workflows/build.yml | 121 +++++++ debian/changelog | 187 +++++++++++ debian/control | 53 ++++ debian/copyright | 7 + debian/rules | 25 ++ debian/securedrop-client.install | 7 + debian/securedrop-client.postinst | 44 +++ debian/securedrop-export.install | 3 + debian/securedrop-export.links | 1 + debian/securedrop-export.postinst | 51 +++ debian/securedrop-export.postrm | 40 +++ debian/securedrop-keyring.install | 1 + debian/securedrop-keyring.postinst | 39 +++ debian/securedrop-keyring.preinst | 34 ++ debian/securedrop-log.install | 4 + debian/securedrop-log.links | 3 + debian/securedrop-proxy.install | 1 + debian/securedrop-proxy.links | 1 + debian/securedrop-workstation-config.install | 6 + debian/securedrop-workstation-config.postinst | 49 +++ debian/setup-venv.sh | 20 ++ debian/source/format | 1 + debian/source/options | 4 + keyring/securedrop-keyring.gpg | Bin 0 -> 3540 bytes scripts/build-debs-real.sh | 28 ++ scripts/build-debs.sh | 42 +++ scripts/fixup-changelog.sh | 14 + workstation-config/mailcap.default | 7 + workstation-config/mimeapps.list.sd-app | 297 +++++++++++++++++ .../mimeapps.list.sd-devices-dvm | 298 ++++++++++++++++++ workstation-config/mimeapps.list.sd-viewer | 32 ++ workstation-config/open-in-dvm.desktop | 10 + workstation-config/paxctld.conf | 117 +++++++ 34 files changed, 1548 insertions(+), 200 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 debian/changelog create mode 100644 debian/control create mode 100644 debian/copyright create mode 100755 debian/rules create mode 100644 debian/securedrop-client.install create mode 100644 debian/securedrop-client.postinst create mode 100644 debian/securedrop-export.install create mode 100644 debian/securedrop-export.links create mode 100644 debian/securedrop-export.postinst create mode 100644 debian/securedrop-export.postrm create mode 100644 debian/securedrop-keyring.install create mode 100644 debian/securedrop-keyring.postinst create mode 100644 debian/securedrop-keyring.preinst create mode 100644 debian/securedrop-log.install create mode 100644 debian/securedrop-log.links create mode 100644 debian/securedrop-proxy.install create mode 100644 debian/securedrop-proxy.links create mode 100644 debian/securedrop-workstation-config.install create mode 100644 debian/securedrop-workstation-config.postinst create mode 100644 debian/setup-venv.sh create mode 100644 debian/source/format create mode 100644 debian/source/options create mode 100644 keyring/securedrop-keyring.gpg create mode 100755 scripts/build-debs-real.sh create mode 100755 scripts/build-debs.sh create mode 100755 scripts/fixup-changelog.sh create mode 100644 workstation-config/mailcap.default create mode 100644 workstation-config/mimeapps.list.sd-app create mode 100644 workstation-config/mimeapps.list.sd-devices-dvm create mode 100644 workstation-config/mimeapps.list.sd-viewer create mode 100644 workstation-config/open-in-dvm.desktop create mode 100644 workstation-config/paxctld.conf diff --git a/.circleci/config.yml b/.circleci/config.yml index b9f6468d4..9b4a28a69 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -37,13 +37,6 @@ common-steps: echo "en_US UTF-8" >> /etc/locale.gen locale-gen - - &client_install_build_dependencies - run: - name: Install build dependencies - command: | - set -e - apt update && apt install -y git make sudo - - &client_run_unit_tests run: name: Install requirements and run unit tests @@ -106,41 +99,6 @@ common-steps: set -e make -C client safety - - &client_install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download Python wheels - command: | - set -x - mkdir ~/packaging && cd ~/packaging - # local builds may not have an ssh url, so || true - git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - apt-get update && apt-get install -y sudo make - make install-deps - source .venv/bin/activate - PKG_DIR=~/project/client make requirements - - - &client_check_packaging_requirements - run: - name: Ensure that the same Python requirements are used for packaging and production. - command: | - cd ~/project/client - # Fail if unstaged changes exist that are not comments (after `make requirements` in the previous run step). - git diff --ignore-matching-lines=# --exit-code - - - &client_build_debian_package - run: - name: Build debian package - command: | - cd ~/project/client - ./update_version.sh 1000.0 # Dummy version number, doesn't matter what we put here - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/client - source .venv/bin/activate - make securedrop-client - - &export_install_poetry run: name: Install Poetry @@ -167,12 +125,6 @@ common-steps: cd export poetry install --no-ansi - - &export_install_build_dependencies - run: - name: Install build dependencies - command: | - apt update && apt install -y git make sudo - - &export_run_unit_tests run: name: Install requirements and run unit tests @@ -199,38 +151,6 @@ common-steps: command: | make -C export safety - - &export_install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download Python wheels - command: | - set -x - mkdir ~/packaging && cd ~/packaging - # local builds may not have an ssh url, so || true - git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - make install-deps - source .venv/bin/activate - PKG_DIR=~/project/export make requirements - - - &export_check_packaging_requirements - run: - name: Ensure that the same Python requirements are used for packaging and production. - command: | - cd ~/project/export - # Fail if unstaged changes exist (after `make requirements` in the previous run step). - git diff --ignore-matching-lines=# --exit-code - - - &export_build_debian_package - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/export - source .venv/bin/activate - make securedrop-export - - &log_install_poetry run: name: Install Poetry @@ -263,37 +183,6 @@ common-steps: command: | make -C log check - - &log_install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download wheels - command: | - apt-get update && apt-get install -y git git-lfs make sudo - mkdir ~/packaging && cd ~/packaging - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - make install-deps - source .venv/bin/activate - PKG_DIR=~/project/log make requirements - - - &log_verify_requirements - run: - name: Ensure that build-requirements.txt and requirements.txt are in sync. - command: | - cd ~/project/log - # Return 1 if unstaged changes exist (after `make requirements` in the - # previous run step), else return 0. - git diff --quiet - - - &log_build_debian_package - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/log - source .venv/bin/activate - make securedrop-log - - &proxy_install_poetry run: name: Install Poetry @@ -320,13 +209,6 @@ common-steps: cd proxy poetry install --no-ansi - - &proxy_install_build_dependencies - run: - name: Install build dependencies - command: | - set -e - apt-get update && apt-get install --yes git make sudo - - &proxy_run_unit_tests run: name: Install requirements and run unit tests @@ -359,60 +241,15 @@ common-steps: poetry update safety make safety - - &proxy_install_packaging_dependencies - run: - name: Install Debian packaging dependencies and download Python wheels - command: | - set -x - mkdir ~/packaging && cd ~/packaging - # local builds may not have an ssh url, so || true - git config --global --unset url.ssh://git@github.com.insteadof || true - git clone https://github.com/freedomofpress/securedrop-builder.git - cd securedrop-builder - apt-get update && apt-get install -y sudo make - make install-deps - source .venv/bin/activate - PKG_DIR=~/project/proxy make requirements - - - &proxy_verify_requirements - run: - name: Ensure that build-requirements.txt and requirements.txt are in sync. - command: | - cd ~/project/proxy - # Return 1 if unstaged changes exist (after `make requirements` in the - # previous run step), else return 0. - git diff --quiet - - - &proxy_build_debian_package - run: - name: Build debian package - command: | - cd ~/packaging/securedrop-builder - export PKG_VERSION=1000.0 - export PKG_PATH=~/project/proxy - source .venv/bin/activate - make securedrop-proxy - - version: 2.1 jobs: - client_build: + client_unit-test: parameters: ¶meters image: type: string docker: &docker - image: debian:<< parameters.image >> - steps: - - *client_install_build_dependencies - - checkout - - *client_install_packaging_dependencies - - *client_check_packaging_requirements - - *client_build_debian_package - - client_unit-test: - parameters: *parameters - docker: *docker steps: - *client_install_poetry - checkout @@ -478,16 +315,6 @@ jobs: - *client_check_source_strings - *client_check_mo_repro - export_build: - parameters: *parameters - docker: *docker - steps: - - *export_install_build_dependencies - - checkout - - *export_install_packaging_dependencies - - *export_check_packaging_requirements - - *export_build_debian_package - export_unit-test: parameters: *parameters docker: *docker @@ -535,25 +362,6 @@ jobs: - *log_install_testing_dependencies - *log_run_tests - log_build-bullseye: - docker: - - image: debian:bullseye - steps: - - checkout - - *log_install_packaging_dependencies - - *log_verify_requirements - - *log_build_debian_package - - proxy_build: - parameters: *parameters - docker: *docker - steps: - - checkout - - *proxy_install_build_dependencies - - *proxy_install_packaging_dependencies - - *proxy_verify_requirements - - *proxy_build_debian_package - proxy_unit-test: parameters: *parameters docker: *docker @@ -614,8 +422,6 @@ workflows: matrix: *matrix - client_check-internationalization: matrix: *matrix - - client_build: - matrix: *matrix securedrop_export_ci: jobs: &export_jobs @@ -627,13 +433,10 @@ workflows: matrix: *matrix - export_check-python-security: matrix: *matrix - - export_build: - matrix: *matrix securedrop_log_ci: jobs: - log_test-bullseye - - log_build-bullseye securedrop_proxy_ci: jobs: &proxy_jobs @@ -645,8 +448,6 @@ workflows: matrix: *matrix - proxy_check-python-security: matrix: *matrix - - proxy_build: - matrix: *matrix client_nightly: triggers: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..781e85df1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,121 @@ +name: Package builds +on: [push, pull_request] + +defaults: + run: + shell: bash + +jobs: + verify-builder-sync: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git git-lfs sudo make + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/securedrop-builder" + path: "securedrop-builder" + lfs: true + - name: Install dependencies + run: | + cd securedrop-builder + make install-deps + - name: Check differences + run: | + source ./securedrop-builder/.venv/bin/activate + PKG_DIR=../client make -C securedrop-builder requirements + PKG_DIR=../export make -C securedrop-builder requirements + PKG_DIR=../log make -C securedrop-builder requirements + PKG_DIR=../proxy make -C securedrop-builder requirements + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git diff --ignore-matching-lines=# --exit-code + + + build-debs: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + outputs: + artifact_id: ${{ steps.upload.outputs.artifact-id }} + steps: + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/securedrop-builder" + path: "securedrop-builder" + lfs: true + - name: Build packages + run: | + DEBIAN_VERSION=${{ matrix.debian_version }} BUILDER=securedrop-builder ./scripts/build-debs.sh + - uses: actions/upload-artifact@v4 + id: upload + with: + name: build-${{ matrix.debian_version }} + path: build + if-no-files-found: error + + # Second round of builds (in parallel) for diffoscoping + build-debs2: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + outputs: + artifact_id: ${{ steps.upload.outputs.artifact-id }} + steps: + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/securedrop-builder" + path: "securedrop-builder" + lfs: true + - name: Build packages + run: | + DEBIAN_VERSION=${{ matrix.debian_version }} BUILDER=securedrop-builder ./scripts/build-debs.sh + - uses: actions/upload-artifact@v4 + id: upload + with: + name: build2-${{ matrix.debian_version }} + path: build + if-no-files-found: error + + reproducible-debs: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + container: debian:bookworm + needs: + - build-debs + - build-debs2 + steps: + - name: Install dependencies + run: | + apt-get update && apt-get install --yes diffoscope-minimal \ + --no-install-recommends + - uses: actions/download-artifact@v4 + with: + pattern: "*${{ matrix.debian_version }}" + - name: diffoscope + run: | + find . -name '*.deb' -exec sha256sum {} \; + # TODO: Ideally we'd just be able to diff the .changes files and let diffoscope find + # all the individual debs, but the source packages are not identical. When they are, + for deb in `find build-${{ matrix.debian_version }} -name '*.deb' -exec basename {} \;`; do + echo "Diffoscoping $deb" + diffoscope build-${{ matrix.debian_version }}/$deb build2-${{ matrix.debian_version }}/$deb + done; diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 000000000..a68a1e883 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,187 @@ +securedrop-client (0.9.0) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Thu, 16 Mar 2023 16:29:03 -0400 + +securedrop-client (0.8.1+bullseye) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Thu, 15 Sep 2022 08:37:55 +1000 + +securedrop-client (0.8.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Wed, 06 Jul 2022 14:06:23 +1000 + +securedrop-client (0.7.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Wed, 20 Apr 2022 10:41:31 -0400 + +securedrop-client (0.6.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Tue, 15 Feb 2022 10:45:20 -0800 + +securedrop-client (0.5.1+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Thu, 02 Dec 2021 16:41:49 -0800 + +securedrop-client (0.5.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Wed, 01 Dec 2021 12:09:27 -0800 + +securedrop-client (0.4.1+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Wed, 17 Mar 2021 11:20:12 -0700 + +securedrop-client (0.4.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Thu, 10 Dec 2020 14:36:06 -0800 + +securedrop-client (0.3.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Thu, 05 Nov 2020 11:40:46 -0500 + +securedrop-client (0.2.1+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Thu, 16 Jul 2020 11:56:07 -0400 + +securedrop-client (0.2.0+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Fri, 29 May 2020 17:19:31 -0400 + +securedrop-client (0.1.6+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Tue, 31 Mar 2020 10:45:27 -0400 + +securedrop-client (0.1.5+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Mon, 30 Mar 2020 14:11:21 -0400 + +securedrop-client (0.1.4+buster) unstable; urgency=medium + + * See changelog.md + + -- SecureDrop Team Thu, 26 Mar 2020 11:45:01 -0400 + +securedrop-client (0.1.3+buster) unstable; urgency=medium + + * See changelog.md + + -- mickael e. Wed, 18 Mar 2020 12:32:35 -0400 + +securedrop-client (0.1.2+buster) unstable; urgency=medium + + * See changelog.md + + -- redshiftzero Tue, 10 Mar 2020 13:12:54 -0400 + +securedrop-client (0.1.1+buster) unstable; urgency=medium + + * See changelog.md + + -- redshiftzero Tue, 03 Mar 2020 11:39:03 -0500 + +securedrop-client (0.1.0+buster) unstable; urgency=medium + + * See changelog.md + + -- redshiftzero Fri, 21 Feb 2020 13:34:42 -0500 + +securedrop-client (0.0.13+buster) unstable; urgency=medium + + * remove user refresh and replace with sync icon (#732) + * build-requirements: update for production beta (#730) + * No sync on ui operations (#721) + * Use SecureQLabel for message previews (#720) + * Show DD MMM format for source title (#719) + * Add new metadata queue. (#715) + * Improve performance of storage.get_remote_data (#709) + * app/queue: prioritize user-triggered state changes (#708) + * Fix HTML entities being escaped in speech bubbles. (#703) + * Activity indicator for file download / decryption. (#702) + * Rename VMs (#701) + + -- SecureDrop Team Fri, 17 Jan 2020 18:20:20 -0800 + +securedrop-client (0.0.12+buster) unstable; urgency=medium + + * Use revised VM names (securedrop-workstation #285) + * Delete sources using the general queue (#402) + * Add a preview snippet for sources (#135) + * Add a show/hide password feature on the login screen (#659) + * Disable sync icon during active sync (#388) + * Add keyboard shortcuts for sending replies (#606) + * Add hover states for UI elements (#591) + + -- SecureDrop Team Fri, 17 Jan 2020 18:20:20 -0800 + +securedrop-client (0.0.11+buster) unstable; urgency=medium + + * Add apparmor profile (#673) + * Add failure message for replies (#664) + * Move metadata sync to api queue (#640) + * Add print integration (#631) + * Populate source list immediately upon login (#626) + + -- SecureDrop Team Thu, 19 Dec 2019 12:20:20 -0500 + +securedrop-client (0.0.10+buster) unstable; urgency=medium + + * Add Python 3.7/buster support (#568, #609) + * Add export to USB support (#611, #547, #562, #563, #564) + * Retry failed replies (#530) + * Pause queue on auth errors, connection failures, and timeouts (#531) + * Add pending reply status, persist replies in the database (#578) + * Set realistic timeouts, scale file/message download timeouts using file size (#515, #567) + * Update qrexec keyword prefix characters (#537) + * Reply box no longer accepts rich text input (#580) + * Format reply box placeholder text (#597) + * Redesign FileWidget (#535) + * Style conversation header (#543) + * Login form submits if user presses Enter or Return (#615) + * Enable changeable log levels (#603) + * Remove borders around source list, send icon, and reply box (#505) + * Move star and date in source widget (#506) + * Polish source widget (#522) + * Polish offline UI (#586) + * Add branding image to left pane and polish styling (#520) + * Add empty conversation view (#510) + * Update fonts weights and colors (#502) + * Bugfix: handle missing files during export and open (#566) + * Bugfix: do not escape quotes in SecureQLabel (#516) + * Bugfix: skip round trip to user endpoint during logic (#605, #621, #623) + * Bugfix: fix bug of sources disappearing from source list (#620) + * Bugfix: fix db warnings upon source deletion (#581) + * Add more detailed developer documentation (#508) + * Add documentation for updating dependencies (#536) + * Ensure build/dev requirements files stay in sync (#602) + * Parallelize test suite (#569) + * Ignore third-party deprecation warnings (#576) + * Add bandit to check target (#548) + + -- redshiftzero Wed, 20 Nov 2019 09:20:22 -0500 diff --git a/debian/control b/debian/control new file mode 100644 index 000000000..95fb5003e --- /dev/null +++ b/debian/control @@ -0,0 +1,53 @@ +Source: securedrop-client +Section: unknown +Priority: optional +Maintainer: SecureDrop Team +Build-Depends: debhelper-compat (= 11), python3-virtualenv +Standards-Version: 3.9.8 +Homepage: https://github.com/freedomofpress/securedrop-client +X-Python3-Version: >= 3.5 + +Package: securedrop-client +Architecture: all +Depends: ${python3:Depends},${misc:Depends}, python3-pyqt5, python3-pyqt5.qtsvg, apparmor-utils +Description: securedrop client for qubes workstation + +Package: securedrop-export +Architecture: all +Depends: ${python3:Depends}, ${misc:Depends}, cryptsetup, cups, printer-driver-brlaser, printer-driver-hpcups, system-config-printer, xpp, libcups2-dev, python3-dev, libtool-bin, unoconv, gnome-disk-utility +Description: Submission export scripts for SecureDrop Workstation + This package provides scripts used by the SecureDrop Qubes Workstation to + export submissions from the client to external storage, via the sd-export + Qube. + +Package: securedrop-keyring +Architecture: all +Depends: gnupg +Description: Provides an apt keyring for SecureDrop-related packages, so the master signing key used for SecureDrop packages can be updated via apt. + +Package: securedrop-log +Architecture: all +Depends: python3-distutils, ${misc:Depends}, ${python3:Depends} +Description: Python module and qrexec service to store logs for SecureDrop Workstation + This package provides Python module and qrexec service files to create a logging VM in + SecureDrop Workstation project in Qubes. + +Package: securedrop-proxy +Architecture: all +Depends: ${python3:Depends}, ${misc:Depends}, libyaml-0-2 +Description: This is securedrop Qubes proxy service + This package provides the network proxy on Qubes to talk to the SecureDrop server. + +Package: securedrop-workstation-config +Architecture: all +Depends: nautilus, gvfs-bin, securedrop-keyring +Description: This is the SecureDrop workstation template configuration package. + This package provides dependencies and configuration for the Qubes SecureDrop workstation VM Templates. + +Package: securedrop-workstation-viewer +Architecture: all +Depends: securedrop-workstation-config,securedrop-workstation-grsec,apparmor-profiles,apparmor-profiles-extra,apparmor-utils,audacious,eog,evince,file-roller,gedit,totem +Description: This is the SecureDrop workstation SecureDrop Viewer Disposable VM template configuration package. This package provides dependencies and configuration for the Qubes SecureDrop workstation sd-viewer Template VM. +Provides: securedrop-workstation-svs-disp +Conflicts: securedrop-workstation-svs-disp +Replaces: securedrop-workstation-svs-disp diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 000000000..bbdb6d985 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,7 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: securedrop-client +Source: https://github.com/freedomofpress/securedrop-client + +Files: * +Copyright: 2020 Freedom of the Press Foundation +License: AGPL-3.0+ diff --git a/debian/rules b/debian/rules new file mode 100755 index 000000000..88d2cead3 --- /dev/null +++ b/debian/rules @@ -0,0 +1,25 @@ +#!/usr/bin/make -f + +%: + dh $@ + +override_dh_auto_install: + bash ./debian/setup-venv.sh client + bash ./debian/setup-venv.sh export + bash ./debian/setup-venv.sh log + bash ./debian/setup-venv.sh proxy + dh_auto_install + +override_dh_strip_nondeterminism: + find ./debian/ -type f -name '*.pyc' -delete + find ./debian/ -type f -name 'pip-selfcheck.json' -delete + find ./debian/ -type f -name 'direct_url.json' -delete + find ./debian/ -type f -name 'RECORD' -delete + dh_strip_nondeterminism $@ + +# Override debhelper's auto-generated files in `/etc/` +# to force an exact replacement of the files we are modifying +# there (specifically, `/etc/apt/trusted.gpg.d/securedrop-keyring.gpg`). +override_dh_installdeb: + dh_installdeb + cat /dev/null > ${CURDIR}/debian/securedrop-keyring/DEBIAN/conffiles diff --git a/debian/securedrop-client.install b/debian/securedrop-client.install new file mode 100644 index 000000000..93db67669 --- /dev/null +++ b/debian/securedrop-client.install @@ -0,0 +1,7 @@ +client/files/alembic.ini usr/share/securedrop-client/ +client/alembic usr/share/securedrop-client/ +client/files/sd-app-qubes-gpg-domain.sh etc/profile.d/ +client/files/securedrop-client usr/bin/ +client/files/securedrop-client.desktop usr/share/applications/ +client/files/press.freedom.SecureDropClient.desktop usr/share/applications/ +client/files/usr.bin.securedrop-client /etc/apparmor.d/ diff --git a/debian/securedrop-client.postinst b/debian/securedrop-client.postinst new file mode 100644 index 000000000..f04f9bc89 --- /dev/null +++ b/debian/securedrop-client.postinst @@ -0,0 +1,44 @@ +#!/bin/sh +# postinst script for securedrop-client +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + + update-desktop-database /usr/share/applications + aa-enforce /usr/bin/securedrop-client + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + update-desktop-database /usr/share/applications + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/securedrop-export.install b/debian/securedrop-export.install new file mode 100644 index 000000000..0d356bcf2 --- /dev/null +++ b/debian/securedrop-export.install @@ -0,0 +1,3 @@ +export/files/application-x-sd-export.xml usr/share/mime/packages +export/files/send-to-usb.desktop usr/share/applications +export/files/sd-logo.png usr/share/securedrop/icons diff --git a/debian/securedrop-export.links b/debian/securedrop-export.links new file mode 100644 index 000000000..38aae3b7c --- /dev/null +++ b/debian/securedrop-export.links @@ -0,0 +1 @@ +opt/venvs/securedrop-export/bin/send-to-usb usr/bin/send-to-usb diff --git a/debian/securedrop-export.postinst b/debian/securedrop-export.postinst new file mode 100644 index 000000000..243a9a2d1 --- /dev/null +++ b/debian/securedrop-export.postinst @@ -0,0 +1,51 @@ +#!/bin/sh +# postinst script for securedrop-export +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +NOTIFICATION_SERVICE_PATH='/usr/share/dbus-1/services/org.freedesktop.mate.Notifications.service' + +case "$1" in + configure) + + update-desktop-database /usr/share/applications + update-mime-database /usr/share/mime + # Disable notifictions service, since the printer configuration + # is not required and will not persist + if [ -e ${NOTIFICATION_SERVICE_PATH} ]; then + mv "${NOTIFICATION_SERVICE_PATH}" "${NOTIFICATION_SERVICE_PATH}.disabled" + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + update-desktop-database /usr/share/applications + update-mime-database /usr/share/mime + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/securedrop-export.postrm b/debian/securedrop-export.postrm new file mode 100644 index 000000000..0753737d1 --- /dev/null +++ b/debian/securedrop-export.postrm @@ -0,0 +1,40 @@ +#!/bin/sh +# postrm script for securedrop-export +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + + update-desktop-database /usr/share/applications + update-mime-database /usr/share/mime + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/securedrop-keyring.install b/debian/securedrop-keyring.install new file mode 100644 index 000000000..54915d7e7 --- /dev/null +++ b/debian/securedrop-keyring.install @@ -0,0 +1 @@ +keyring/securedrop-keyring.gpg etc/apt/trusted.gpg.d/ diff --git a/debian/securedrop-keyring.postinst b/debian/securedrop-keyring.postinst new file mode 100644 index 000000000..94fc4dec4 --- /dev/null +++ b/debian/securedrop-keyring.postinst @@ -0,0 +1,39 @@ +#!/bin/sh +# postinst script for securedrop-keyring +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +case "$1" in + configure) + chown -R root:root /etc/apt/trusted.gpg.d/ + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/securedrop-keyring.preinst b/debian/securedrop-keyring.preinst new file mode 100644 index 000000000..2e0848099 --- /dev/null +++ b/debian/securedrop-keyring.preinst @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +# Solution adapted from DKG's work on `deb.torproject.org-keyring` and +# the securedrop core keyring package. +# +# The salt provisioning logic uses pkgrepo.managed, which writes the +# key to `/etc/apt/trusted.gpg`. It's cleaner to use the trusted.gpg.d +# subdirectory, since we can update that trivially in future versions +# of the keyring package. +# +# Therefore let's clean up prior versions of the key installed +# to the general apt keyring, to ensure we only have one signing key +# installed for authenticating securedrop-related packages. + +if [ -e /etc/apt/trusted.gpg ] && which gpg >/dev/null; then + ( + h="$(mktemp -d)" + trap "rm -rf '$h'" EXIT + + if gpg --homedir="$h" \ + --batch --no-tty --no-default-keyring --keyring /etc/apt/trusted.gpg \ + --list-key 0x2359E6538C0613E652955E6C188EDD3B7B22E6A3 > /dev/null 2>&1 ; then + gpg --homedir="$h" \ + --batch --no-tty --no-default-keyring --keyring /etc/apt/trusted.gpg \ + --no-auto-check-trustdb \ + --delete-key 0x2359E6538C0613E652955E6C188EDD3B7B22E6A3 || true + fi + ) +fi + +#DEBHELPER# + diff --git a/debian/securedrop-log.install b/debian/securedrop-log.install new file mode 100644 index 000000000..79256901f --- /dev/null +++ b/debian/securedrop-log.install @@ -0,0 +1,4 @@ +log/securedrop.Log etc/qubes-rpc/ +log/sd-rsyslog usr/sbin/ +log/securedrop-log.service etc/systemd/system +log/sdlog.conf etc/rsyslog.d/ diff --git a/debian/securedrop-log.links b/debian/securedrop-log.links new file mode 100644 index 000000000..e5480a623 --- /dev/null +++ b/debian/securedrop-log.links @@ -0,0 +1,3 @@ +opt/venvs/securedrop-log/sbin/securedrop-log usr/sbin/securedrop-log +opt/venvs/securedrop-log/sbin/securedrop-log-saver usr/sbin/securedrop-log-saver +opt/venvs/securedrop-log/sbin/securedrop-redis-log usr/sbin/securedrop-redis-log diff --git a/debian/securedrop-proxy.install b/debian/securedrop-proxy.install new file mode 100644 index 000000000..e598af1a1 --- /dev/null +++ b/debian/securedrop-proxy.install @@ -0,0 +1 @@ +proxy/qubes/securedrop.Proxy etc/qubes-rpc/ diff --git a/debian/securedrop-proxy.links b/debian/securedrop-proxy.links new file mode 100644 index 000000000..abddf108f --- /dev/null +++ b/debian/securedrop-proxy.links @@ -0,0 +1 @@ +opt/venvs/securedrop-proxy/bin/sd-proxy usr/bin/sd-proxy diff --git a/debian/securedrop-workstation-config.install b/debian/securedrop-workstation-config.install new file mode 100644 index 000000000..3c3bc7975 --- /dev/null +++ b/debian/securedrop-workstation-config.install @@ -0,0 +1,6 @@ +workstation-config/mailcap.default opt/sdw/ +workstation-config/mimeapps.list.sd-viewer opt/sdw/ +workstation-config/mimeapps.list.sd-app opt/sdw/ +workstation-config/mimeapps.list.sd-devices-dvm opt/sdw/ +workstation-config/open-in-dvm.desktop opt/sdw/ +workstation-config/paxctld.conf opt/sdw/ diff --git a/debian/securedrop-workstation-config.postinst b/debian/securedrop-workstation-config.postinst new file mode 100644 index 000000000..2084a52ff --- /dev/null +++ b/debian/securedrop-workstation-config.postinst @@ -0,0 +1,49 @@ +#!/bin/sh +# postinst script for securedrop-workstation-config +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + # move pax flags and restart paxctld service + # copy and set default mimeapps handling + # except for whonix-based VMs + if [ ! -e "/etc/whonix_version" ]; then + cp /opt/sdw/paxctld.conf /etc/paxctld.conf + systemctl restart paxctld + cp /opt/sdw/open-in-dvm.desktop /usr/share/applications/ + cp /opt/sdw/mimeapps.list.sd-app /usr/share/applications/mimeapps.list + cp /opt/sdw/mimeapps.list.sd-app /opt/sdw/mimeapps.list.default + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/setup-venv.sh b/debian/setup-venv.sh new file mode 100644 index 000000000..7b303de33 --- /dev/null +++ b/debian/setup-venv.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -euxo pipefail + +NAME=$1 +if [[ $NAME == "client" ]]; then + VENV_ARGS="--system-site-packages" +else + VENV_ARGS="" +fi +WHEELS_DIR="/builder/securedrop-${NAME}/wheels" +PIP_ARGS="--ignore-installed --no-index --find-links ${WHEELS_DIR} --no-deps --no-cache-dir --no-use-pep517" + +/usr/bin/python3 -m virtualenv $VENV_ARGS ./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME} +./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME}/bin/pip install $PIP_ARGS -r ${NAME}/build-requirements.txt +./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME}/bin/pip install $PIP_ARGS ./${NAME} + +# Adjust paths to reflect installed paths +find ./debian/securedrop-${NAME}/ -type f -exec sed -i "s#$(pwd)/debian/securedrop-${NAME}##" {} \; +# Cleanup wheels +rm -rf ./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME}/share/python-wheels diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 000000000..89ae9db8f --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/source/options b/debian/source/options new file mode 100644 index 000000000..5218c5aca --- /dev/null +++ b/debian/source/options @@ -0,0 +1,4 @@ +# speed is preferred over disk space +compression = "gzip" +# ignore the build/ directory, that contains our artifacts +tar-ignore = "build" diff --git a/keyring/securedrop-keyring.gpg b/keyring/securedrop-keyring.gpg new file mode 100644 index 0000000000000000000000000000000000000000..51b1fd78832ef0f7234446debb9b35c479e05219 GIT binary patch literal 3540 zcmbuAXEYlM|Hl&~E}^)pBKF>+M!D3eqDstAvv#Dah@grZwbhKRXtb!^nvD>OTD|tF zJzJ|)B7$r7xzBz6&w1{f|2fY&&+p~$d(QXO=X^hTRE#uEdG0kpW@Ati6y7nL2z%Fi?+e!D>jP`@?+B2k~V^T{p zEoR#5TeEe6+UuZsc223h2R)(i7j_JCqPP6M#okC55PiRmBYS@ex@{+|i`}XHTrL>D z>7o-m2(b^Gc(gJUR%lS`smM$9raz3xujsBMMjEkyU`W|=Nb^c4gklHBvaOe+;;swc z58wM{`kL)RvW_4b!@BI1Mw?yORMDSoc?PvCw&U7a=!*WymFTvpL00~$jiFk3CtKZr z?X`u7p35U$zF4R#yGdBlxIvlB_ZaPmdp9uBm`CmFn>c+@LG~|t2V9ItTH?BJx03rG z@g%#O%x}e?@V7B&t>5>YpZ^&N&!~G__H|M)k(VIDCGIddymKz7e;xNnLPnA zdVqhzl57HORHtAkEYKRcqQe(zmG}Bz3h6yT^)@|b7c|0S%rNTkvg$`AiBIfxgL~|yX4Fo@>B`>tYC)V;<0!nlD+?BDLz8ENzxZi zV?fWAv-)Dz>~7!>(s+@f!jJjiV2vYoSIg$;qHPUj=CA|+3lIRTWdHzBXcQ3e*EJd- zkgfq3qz=Xh&1a5$gmm^p@*zA>-X7j4K0{;>-%Y>2a<@NoY0STJX-{O3w7i`BbuD)c z66xmSC4jh^lo21EgY) zxW-Q-XtRMx0<&(IXE{8ArYx$32y7ICs9eHS+(2|R^cl(kdOGHR|G6xgep-9V$yI)p~QKsMEoXE zx2+|f(5@qSu1pqEQwLqrGd_~7ylpQrb;DynXWt3BOp%utEZNT<6|ZJ7Z0~)I^hqAq z2cL|*MF>IU?f(!;JI_2*w}KzvpKp}?Nb*64^$eUy!6WTuD?q+lS`oND^l*e1hl9A# z_iAdxr0@cYDz>4Oa?@05TaKC^!gQmSC+I0gqnt)-<71H8bkfmbMB(>IFGuSNh|ejo zIF5~W#{oa>nwt1dY_HpRt-*e(#8=rUrr3B@kn6_s5{|PR zTu%RYyw*0Dem-hKc#UuzCRK#sdrRZrXyh$iVBz&v>k4igft*xxLILC-3-0k+H&Ag$ zv-<&h?kdSTH(q*k7F9ow>QfqIj(9qM`xphoEkBO6HJBiHFBaVj5iwbFSDWN=V{tfT z`>u6ST-G}V_Em4lWu%@5X55YMyWFCL2z^+2#76W<^oP=kjgl@2w*GCMb2#6@NVEQ< zuv$mGXhp+rKPl2N%zxx4qxspL8Spn`U6yg(HyV8-oBiQYV5>%V>42YUtvc#nr1tKE zzK8sD$-8oSX7o6wKg8KgUexHoO@W5m8+h{L0k=*ko4qP%LAK`HwpN#g5Zyf=r9_aG zzWWzrh4Z^uH~)7cYW;y{oBckVMS)229JY5VQ@<*_)3&6(SwwP859%X-nBx&cmnwVT4E@Us9bx%$rG%0v zOh&avp#}!!brfTLTpOrh%YyKAT)BGr)K2ACWmIr>B(1A4a7yIsYhP#HgZoFwljtXe zz=F`STn2ZF{)Yh#W}(=Zu%S!Xgnojpq9L(J)kEU@c5}JYzJYKIKhai!^LB!>Il;dP z@ajyo-xXaG0_|8_LKo%<~ZCcEz9V(g~|enB1K-H=KTdxL>$$byGt9 zPrRuATt@)mKh~_=k%9*Uo`|dvr%Y$X#)>p3j>x1v)^Ro{56nanMIH$-A$oKz4C||<_@;W0P>WAH*jQc`{yzN%x=uhvCa}+|aQaX2j z>>@OIE7;x92la>qQ%Jr!z0G;-#Ixxqhq`Txv=xFoWvw*jk*}G;3!CggnyT%?uHQpM zQB9Ubk;BIgr}24P$XDM?J$ye-7AV!cm!6!Hah6P!gWkiN|IvZ~&+>@5TnY=6B|h)@ z%bE#PH))`M+DwFsli~ljRwQ5DKdlu<^Y>W^S7rKX_SJl1^NaJQ4JQarw-h=h*KKmP z$Yh!m?h>Cc;=N)OS}>RIG#Yv_Y-&4YUCWEK88BRAR)e5_3?bRI=O;`}1@Z(!c`a*H z28I+FSR^*4M`T13j2wDXeS)nQ#Y`P@_>C-JbAuluW8kB0ilM558uh>wQYIA+O5)TB zRmeep!*4SIableKTL^FjWJyI422;=sW2hTF@;oPyYxjDpCjv3&- zG^3onw6wh0y%{AeT$KP0IKB@_T|JsxQu(C2J^Q%*mpv_L(Cn|9ys{kuJY61lBEIcV zs8Fzzw>5RHre&5aFxQ40(526M5vot9Zng|-6$7uc3$3Kh@ZROt$c_TUtPJ(cxE4d_^EXKg zSOT^a@vNgV$@FoHiB}f-Rf%R9Xib)6O>jp8fn-QH0Zn(CQOeMxG&}8kY&v(VpJk!9_r{BVkfae|R`w_i=U3_a&8f za#}NMgw{+AdJRc@4va*0HDeufS*|k*k0C=B?N7d`KA%(oH+a)5nX4a`lY{so&{qlA-{gU9(1eKxdMRvb1c|TMR#Y zTW-_km?+h&J6(`o!}DO<@NrJrTA90T`5q&u{93_a^ /dev/null 2>&1; then + OCI_BIN="podman" + # Make sure host UID/GID are mapped into container, + # see podman-run(1) manual. + OCI_RUN_ARGUMENTS="${OCI_RUN_ARGUMENTS} --userns=keep-id" +else + OCI_BIN="docker" +fi +# Pass -it if we're a tty +if test -t 0; then + OCI_RUN_ARGUMENTS="${OCI_RUN_ARGUMENTS} -it" +fi + +# Look for the builder repo with our local wheels +export BUILDER=$(realpath "${BUILDER:-../securedrop-builder}") +if [[ ! -d $BUILDER ]]; then + echo "Cannot find securedrop-builder repository, please check it out \ +to ${BUILDER} or set the BUILDER variable" + exit 1 +fi + +export DEBIAN_VERSION="${DEBIAN_VERSION:-bullseye}" +export OCI_RUN_ARGUMENTS +export OCI_BIN + +$OCI_BIN pull debian:${DEBIAN_VERSION} + +$OCI_BIN run --rm $OCI_RUN_ARGUMENTS \ + -v "${BUILDER}:/builder:Z" \ + --entrypoint "/src/scripts/build-debs-real.sh" \ + debian:${DEBIAN_VERSION} diff --git a/scripts/fixup-changelog.sh b/scripts/fixup-changelog.sh new file mode 100755 index 000000000..97d70b54b --- /dev/null +++ b/scripts/fixup-changelog.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -euxo pipefail +# Adjust d/changelog version to suffix the codename. +# This runs *inside* the container. + +source /etc/os-release +if [[ "$VERSION_CODENAME" == "" ]]; then + # PRETTY_NAME="Debian GNU/Linux bookworm/sid" + # Use awk to split on spaces and / + VERSION_CODENAME=$(echo $PRETTY_NAME | awk '{split($0, a, "[ /]"); print a[4]}') +fi + +version=$(dpkg-parsechangelog -S Version) +sed -i "0,/${version}/ s//${version}+${VERSION_CODENAME}/" debian/changelog diff --git a/workstation-config/mailcap.default b/workstation-config/mailcap.default new file mode 100644 index 000000000..4c3bb8976 --- /dev/null +++ b/workstation-config/mailcap.default @@ -0,0 +1,7 @@ +# Mailcap acts as a fallback mechanism if MIME type lookup fails in tools like +# xdg-open. Because the Mailcap MIME type definitions do not match the +# ones used by the SecureDrop Workstation, we disable Mailcap for the default +# user using a wildcard rule. Lookup attempts are logged to /var/log/syslog +# and sd-log. + +*/*; logger "Mailcap is disabled." diff --git a/workstation-config/mimeapps.list.sd-app b/workstation-config/mimeapps.list.sd-app new file mode 100644 index 000000000..6a23b8607 --- /dev/null +++ b/workstation-config/mimeapps.list.sd-app @@ -0,0 +1,297 @@ +[Default Applications] +application/x-dia-diagram=open-in-dvm.desktop; +text/x-vcard=open-in-dvm.desktop; +text/directory=open-in-dvm.desktop; +text/calendar=open-in-dvm.desktop; +application/x-cd-image=open-in-dvm.desktop; +application/x-desktop=open-in-dvm.desktop; +application/x-raw-disk-image=open-in-dvm.desktop; +application/x-raw-disk-image-xz-compressed=open-in-dvm.desktop; +image/x-compressed-xcf=open-in-dvm.desktop; +image/x-xcf=open-in-dvm.desktop; +image/x-psd=open-in-dvm.desktop; +image/x-fits=open-in-dvm.desktop; +image/bmp=open-in-dvm.desktop; +image/gif=open-in-dvm.desktop; +image/x-icb=open-in-dvm.desktop; +image/x-ico=open-in-dvm.desktop; +image/x-pcx=open-in-dvm.desktop; +image/x-portable-anymap=open-in-dvm.desktop; +image/x-portable-bitmap=open-in-dvm.desktop; +image/x-portable-graymap=open-in-dvm.desktop; +image/x-portable-pixmap=open-in-dvm.desktop; +image/x-xbitmap=open-in-dvm.desktop; +image/x-xpixmap=open-in-dvm.desktop; +image/svg+xml=open-in-dvm.desktop; +application/vnd.ms-word=open-in-dvm.desktop; +application/vnd.wordperfect=open-in-dvm.desktop; +application/vnd.sun.xml.writer=open-in-dvm.desktop; +application/vnd.sun.xml.writer.global=open-in-dvm.desktop; +application/vnd.sun.xml.writer.template=open-in-dvm.desktop; +application/vnd.stardivision.writer=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-web=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-master=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.document=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.template=open-in-dvm.desktop; +application/vnd.ms-excel=open-in-dvm.desktop; +application/vnd.stardivision.calc=open-in-dvm.desktop; +application/vnd.sun.xml.calc=open-in-dvm.desktop; +application/vnd.sun.xml.calc.template=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.spreadsheet=open-in-dvm.desktop; +application/vnd.oasis.opendocument.spreadsheet-template=open-in-dvm.desktop; +application/vnd.ms-powerpoint=open-in-dvm.desktop; +application/vnd.stardivision.impress=open-in-dvm.desktop; +application/vnd.sun.xml.impress=open-in-dvm.desktop; +application/vnd.sun.xml.impress.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.presentation=open-in-dvm.desktop; +application/vnd.oasis.opendocument.presentation-template=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.presentationml.presentation=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.presentationml.template=open-in-dvm.desktop; +application/vnd.stardivision.draw=open-in-dvm.desktop; +application/vnd.sun.xml.draw=open-in-dvm.desktop; +application/vnd.sun.xml.draw.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.graphics=open-in-dvm.desktop; +application/vnd.oasis.opendocument.graphics-template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.formula=open-in-dvm.desktop; +application/vnd.sun.xml.math=open-in-dvm.desktop; +application/vnd.stardivision.math=open-in-dvm.desktop; +application/vnd.oasis.opendocument.database=open-in-dvm.desktop; +application/vnd.sun.xml.base=open-in-dvm.desktop; +application/pdf=open-in-dvm.desktop; +application/postscript=open-in-dvm.desktop; +application/x-qw=open-in-dvm.desktop; +application/x-gnucash=open-in-dvm.desktop; +application/vnd.lotus-1-2-3=open-in-dvm.desktop; +application/x-oleo=open-in-dvm.desktop; +application/x-gnumeric=open-in-dvm.desktop; +application/x-xbase=open-in-dvm.desktop; +application/x-abiword=open-in-dvm.desktop; +application/x-dvi=open-in-dvm.desktop; +application/x-catalog=open-in-dvm.desktop; +application/x-rpm=open-in-dvm.desktop; +text/csv=open-in-dvm.desktop; +text/plain=open-in-dvm.desktop; +text/html=open-in-dvm.desktop; +application/xhtml+xml=open-in-dvm.desktop; +inode/directory=open-in-dvm.desktop; +x-content/blank-cd=open-in-dvm.desktop; +x-content/blank-dvd=open-in-dvm.desktop; +x-content/blank-bd=open-in-dvm.desktop; +x-content/blank-hddvd=open-in-dvm.desktop; +x-content/video-dvd=open-in-dvm.desktop; +x-content/video-vcd=open-in-dvm.desktop; +x-content/video-svcd=open-in-dvm.desktop; +#x-content/video-bluray=open-in-dvm.desktop; +#x-content/video-hddvd=open-in-dvm.desktop; +x-content/audio-cdda=open-in-dvm.desktop; +x-content/audio-dvd=open-in-dvm.desktop; +x-content/audio-player=open-in-dvm.desktop; +x-content/image-dcf=open-in-dvm.desktop; +x-content/image-picturecd=open-in-dvm.desktop; +# URI scheme handlers +x-scheme-handler/mailto=open-in-dvm.desktop; +x-scheme-handler/http=open-in-dvm.desktop; +x-scheme-handler/https=open-in-dvm.desktop; +application/mxf=open-in-dvm.desktop; +application/ogg=open-in-dvm.desktop; +application/ram=open-in-dvm.desktop; +application/sdp=open-in-dvm.desktop; +application/smil=open-in-dvm.desktop; +application/smil+xml=open-in-dvm.desktop; +application/vnd.apple.mpegurl=open-in-dvm.desktop; +application/vnd.ms-wpl=open-in-dvm.desktop; +application/vnd.rn-realmedia=open-in-dvm.desktop; +application/x-extension-m4a=open-in-dvm.desktop; +application/x-extension-mp4=open-in-dvm.desktop; +application/x-flac=open-in-dvm.desktop; +application/x-flash-video=open-in-dvm.desktop; +application/x-matroska=open-in-dvm.desktop; +application/x-netshow-channel=open-in-dvm.desktop; +application/x-ogg=open-in-dvm.desktop; +application/x-quicktime-media-link=open-in-dvm.desktop; +application/x-quicktimeplayer=open-in-dvm.desktop; +application/x-shorten=open-in-dvm.desktop; +application/x-smil=open-in-dvm.desktop; +application/xspf+xml=open-in-dvm.desktop; +audio/3gpp=open-in-dvm.desktop; +audio/ac3=open-in-dvm.desktop; +audio/AMR=open-in-dvm.desktop; +audio/AMR-WB=open-in-dvm.desktop; +audio/basic=open-in-dvm.desktop; +audio/midi=open-in-dvm.desktop; +audio/mp2=open-in-dvm.desktop; +audio/mp4=open-in-dvm.desktop; +audio/mpeg=open-in-dvm.desktop; +audio/mpegurl=open-in-dvm.desktop; +audio/ogg=open-in-dvm.desktop; +audio/prs.sid=open-in-dvm.desktop; +audio/vnd.rn-realaudio=open-in-dvm.desktop; +audio/x-aiff=open-in-dvm.desktop; +audio/x-ape=open-in-dvm.desktop; +audio/x-flac=open-in-dvm.desktop; +audio/x-gsm=open-in-dvm.desktop; +audio/x-it=open-in-dvm.desktop; +audio/x-m4a=open-in-dvm.desktop; +audio/x-matroska=open-in-dvm.desktop; +audio/x-mod=open-in-dvm.desktop; +audio/x-mp3=open-in-dvm.desktop; +audio/x-mpeg=open-in-dvm.desktop; +audio/x-mpegurl=open-in-dvm.desktop; +audio/x-ms-asf=open-in-dvm.desktop; +audio/x-ms-asx=open-in-dvm.desktop; +audio/x-ms-wax=open-in-dvm.desktop; +audio/x-ms-wma=open-in-dvm.desktop; +audio/x-musepack=open-in-dvm.desktop; +audio/x-pn-aiff=open-in-dvm.desktop; +audio/x-pn-au=open-in-dvm.desktop; +audio/x-pn-realaudio=open-in-dvm.desktop; +audio/x-pn-realaudio-plugin=open-in-dvm.desktop; +audio/x-pn-wav=open-in-dvm.desktop; +audio/x-pn-windows-acm=open-in-dvm.desktop; +audio/x-realaudio=open-in-dvm.desktop; +audio/x-real-audio=open-in-dvm.desktop; +audio/x-s3m=open-in-dvm.desktop; +audio/x-sbc=open-in-dvm.desktop; +audio/x-scpls=open-in-dvm.desktop; +audio/x-speex=open-in-dvm.desktop; +audio/x-stm=open-in-dvm.desktop; +audio/x-tta=open-in-dvm.desktop; +audio/x-wav=open-in-dvm.desktop; +audio/x-wavpack=open-in-dvm.desktop; +audio/x-vorbis=open-in-dvm.desktop; +audio/x-vorbis+ogg=open-in-dvm.desktop; +audio/x-xm=open-in-dvm.desktop; +image/vnd.rn-realpix=open-in-dvm.desktop; +image/x-pict=open-in-dvm.desktop; +misc/ultravox=open-in-dvm.desktop; +text/google-video-pointer=open-in-dvm.desktop; +text/x-google-video-pointer=open-in-dvm.desktop; +video/3gp=open-in-dvm.desktop; +video/3gpp=open-in-dvm.desktop; +video/dv=open-in-dvm.desktop; +video/divx=open-in-dvm.desktop; +video/fli=open-in-dvm.desktop; +video/flv=open-in-dvm.desktop; +video/mp2t=open-in-dvm.desktop; +video/mp4=open-in-dvm.desktop; +video/mp4v-es=open-in-dvm.desktop; +video/mpeg=open-in-dvm.desktop; +video/msvideo=open-in-dvm.desktop; +video/ogg=open-in-dvm.desktop; +video/quicktime=open-in-dvm.desktop; +video/vivo=open-in-dvm.desktop; +video/vnd.divx=open-in-dvm.desktop; +video/vnd.mpegurl=open-in-dvm.desktop; +video/vnd.rn-realvideo=open-in-dvm.desktop; +video/vnd.vivo=open-in-dvm.desktop; +video/webm=open-in-dvm.desktop; +video/x-anim=open-in-dvm.desktop; +video/x-avi=open-in-dvm.desktop; +video/x-flc=open-in-dvm.desktop; +video/x-fli=open-in-dvm.desktop; +video/x-flic=open-in-dvm.desktop; +video/x-flv=open-in-dvm.desktop; +video/x-m4v=open-in-dvm.desktop; +video/x-matroska=open-in-dvm.desktop; +video/x-mpeg=open-in-dvm.desktop; +video/x-mpeg2=open-in-dvm.desktop; +video/x-ms-asf=open-in-dvm.desktop; +video/x-ms-asx=open-in-dvm.desktop; +video/x-msvideo=open-in-dvm.desktop; +video/x-ms-wm=open-in-dvm.desktop; +video/x-ms-wmv=open-in-dvm.desktop; +video/x-ms-wmx=open-in-dvm.desktop; +video/x-ms-wvx=open-in-dvm.desktop; +video/x-nsv=open-in-dvm.desktop; +video/x-ogm+ogg=open-in-dvm.desktop; +video/x-theora+ogg=open-in-dvm.desktop; +video/x-totem-stream=open-in-dvm.desktop; +x-content/video-dvd=open-in-dvm.desktop; +x-content/video-vcd=open-in-dvm.desktop; +x-content/video-svcd=open-in-dvm.desktop; +x-scheme-handler/pnm=open-in-dvm.desktop; +x-scheme-handler/mms=open-in-dvm.desktop; +x-scheme-handler/net=open-in-dvm.desktop; +x-scheme-handler/rtp=open-in-dvm.desktop; +x-scheme-handler/rtmp=open-in-dvm.desktop; +x-scheme-handler/rtsp=open-in-dvm.desktop; +x-scheme-handler/mmsh=open-in-dvm.desktop; +x-scheme-handler/uvox=open-in-dvm.desktop; +x-scheme-handler/icy=open-in-dvm.desktop; +x-scheme-handler/icyx=open-in-dvm.desktop; +application/x-7z-compressed=open-in-dvm.desktop; +application/x-7z-compressed-tar=open-in-dvm.desktop; +application/x-ace=open-in-dvm.desktop; +application/x-alz=open-in-dvm.desktop; +application/x-ar=open-in-dvm.desktop; +application/x-arj=open-in-dvm.desktop; +application/x-bzip=open-in-dvm.desktop; +application/x-bzip-compressed-tar=open-in-dvm.desktop; +application/x-bzip1=open-in-dvm.desktop; +application/x-bzip1-compressed-tar=open-in-dvm.desktop; +application/x-cabinet=open-in-dvm.desktop; +application/x-cbr=open-in-dvm.desktop; +application/x-cbz=open-in-dvm.desktop; +application/x-compress=open-in-dvm.desktop; +application/x-compressed-tar=open-in-dvm.desktop; +application/x-cpio=open-in-dvm.desktop; +application/x-deb=open-in-dvm.desktop; +application/x-ear=open-in-dvm.desktop; +application/x-ms-dos-executable=open-in-dvm.desktop; +application/x-gtar=open-in-dvm.desktop; +application/x-gzip=open-in-dvm.desktop; +application/x-gzpostscript=open-in-dvm.desktop; +application/x-java-archive=open-in-dvm.desktop; +application/x-lha=open-in-dvm.desktop; +application/x-lhz=open-in-dvm.desktop; +application/x-lrzip=open-in-dvm.desktop; +application/x-lrzip-compressed-tar=open-in-dvm.desktop; +application/x-lzip=open-in-dvm.desktop; +application/x-lzip-compressed-tar=open-in-dvm.desktop; +application/x-lzma=open-in-dvm.desktop; +application/x-lzma-compressed-tar=open-in-dvm.desktop; +application/x-lzop=open-in-dvm.desktop; +application/x-lzop-compressed-tar=open-in-dvm.desktop; +application/x-ms-wim=open-in-dvm.desktop; +application/x-rar=open-in-dvm.desktop; +application/x-rar-compressed=open-in-dvm.desktop; +application/x-rzip=open-in-dvm.desktop; +application/x-tar=open-in-dvm.desktop; +application/x-tarz=open-in-dvm.desktop; +application/x-stuffit=open-in-dvm.desktop; +application/x-war=open-in-dvm.desktop; +application/x-xz=open-in-dvm.desktop; +application/x-xz-compressed-tar=open-in-dvm.desktop; +application/x-zip=open-in-dvm.desktop; +application/x-zip-compressed=open-in-dvm.desktop; +application/x-zoo=open-in-dvm.desktop; +application/zip=open-in-dvm.desktop; +application/x-archive=open-in-dvm.desktop; +application/vnd.ms-cab-compressed=open-in-dvm.desktop; +application/x-source-rpm=open-in-dvm.desktop; +image/bmp=open-in-dvm.desktop; +image/gif=open-in-dvm.desktop; +image/jpeg=open-in-dvm.desktop; +image/jpg=open-in-dvm.desktop; +image/pjpeg=open-in-dvm.desktop; +image/png=open-in-dvm.desktop; +image/tiff=open-in-dvm.desktop; +image/x-bmp=open-in-dvm.desktop; +image/x-gray=open-in-dvm.desktop; +image/x-icb=open-in-dvm.desktop; +image/x-ico=open-in-dvm.desktop; +image/x-png=open-in-dvm.desktop; +image/x-portable-anymap=open-in-dvm.desktop; +image/x-portable-bitmap=open-in-dvm.desktop; +image/x-portable-graymap=open-in-dvm.desktop; +image/x-portable-pixmap=open-in-dvm.desktop; +image/x-xbitmap=open-in-dvm.desktop; +image/x-xpixmap=open-in-dvm.desktop; +image/x-pcx=open-in-dvm.desktop; +image/svg+xml=open-in-dvm.desktop; +image/svg+xml-compressed=open-in-dvm.desktop; +image/vnd.wap.wbmp=open-in-dvm.desktop; diff --git a/workstation-config/mimeapps.list.sd-devices-dvm b/workstation-config/mimeapps.list.sd-devices-dvm new file mode 100644 index 000000000..886a600b0 --- /dev/null +++ b/workstation-config/mimeapps.list.sd-devices-dvm @@ -0,0 +1,298 @@ +[Default Applications] +application/x-sd-export=send-to-usb.desktop; +application/x-dia-diagram=open-in-dvm.desktop; +text/x-vcard=open-in-dvm.desktop; +text/directory=open-in-dvm.desktop; +text/calendar=open-in-dvm.desktop; +application/x-cd-image=open-in-dvm.desktop; +application/x-desktop=open-in-dvm.desktop; +application/x-raw-disk-image=open-in-dvm.desktop; +application/x-raw-disk-image-xz-compressed=open-in-dvm.desktop; +image/x-compressed-xcf=open-in-dvm.desktop; +image/x-xcf=open-in-dvm.desktop; +image/x-psd=open-in-dvm.desktop; +image/x-fits=open-in-dvm.desktop; +image/bmp=open-in-dvm.desktop; +image/gif=open-in-dvm.desktop; +image/x-icb=open-in-dvm.desktop; +image/x-ico=open-in-dvm.desktop; +image/x-pcx=open-in-dvm.desktop; +image/x-portable-anymap=open-in-dvm.desktop; +image/x-portable-bitmap=open-in-dvm.desktop; +image/x-portable-graymap=open-in-dvm.desktop; +image/x-portable-pixmap=open-in-dvm.desktop; +image/x-xbitmap=open-in-dvm.desktop; +image/x-xpixmap=open-in-dvm.desktop; +image/svg+xml=open-in-dvm.desktop; +application/vnd.ms-word=open-in-dvm.desktop; +application/vnd.wordperfect=open-in-dvm.desktop; +application/vnd.sun.xml.writer=open-in-dvm.desktop; +application/vnd.sun.xml.writer.global=open-in-dvm.desktop; +application/vnd.sun.xml.writer.template=open-in-dvm.desktop; +application/vnd.stardivision.writer=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-web=open-in-dvm.desktop; +application/vnd.oasis.opendocument.text-master=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.document=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.template=open-in-dvm.desktop; +application/vnd.ms-excel=open-in-dvm.desktop; +application/vnd.stardivision.calc=open-in-dvm.desktop; +application/vnd.sun.xml.calc=open-in-dvm.desktop; +application/vnd.sun.xml.calc.template=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.spreadsheet=open-in-dvm.desktop; +application/vnd.oasis.opendocument.spreadsheet-template=open-in-dvm.desktop; +application/vnd.ms-powerpoint=open-in-dvm.desktop; +application/vnd.stardivision.impress=open-in-dvm.desktop; +application/vnd.sun.xml.impress=open-in-dvm.desktop; +application/vnd.sun.xml.impress.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.presentation=open-in-dvm.desktop; +application/vnd.oasis.opendocument.presentation-template=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.presentationml.presentation=open-in-dvm.desktop; +application/vnd.openxmlformats-officedocument.presentationml.template=open-in-dvm.desktop; +application/vnd.stardivision.draw=open-in-dvm.desktop; +application/vnd.sun.xml.draw=open-in-dvm.desktop; +application/vnd.sun.xml.draw.template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.graphics=open-in-dvm.desktop; +application/vnd.oasis.opendocument.graphics-template=open-in-dvm.desktop; +application/vnd.oasis.opendocument.formula=open-in-dvm.desktop; +application/vnd.sun.xml.math=open-in-dvm.desktop; +application/vnd.stardivision.math=open-in-dvm.desktop; +application/vnd.oasis.opendocument.database=open-in-dvm.desktop; +application/vnd.sun.xml.base=open-in-dvm.desktop; +application/pdf=open-in-dvm.desktop; +application/postscript=open-in-dvm.desktop; +application/x-qw=open-in-dvm.desktop; +application/x-gnucash=open-in-dvm.desktop; +application/vnd.lotus-1-2-3=open-in-dvm.desktop; +application/x-oleo=open-in-dvm.desktop; +application/x-gnumeric=open-in-dvm.desktop; +application/x-xbase=open-in-dvm.desktop; +application/x-abiword=open-in-dvm.desktop; +application/x-dvi=open-in-dvm.desktop; +application/x-catalog=open-in-dvm.desktop; +application/x-rpm=open-in-dvm.desktop; +text/csv=open-in-dvm.desktop; +text/plain=open-in-dvm.desktop; +text/html=open-in-dvm.desktop; +application/xhtml+xml=open-in-dvm.desktop; +inode/directory=open-in-dvm.desktop; +x-content/blank-cd=open-in-dvm.desktop; +x-content/blank-dvd=open-in-dvm.desktop; +x-content/blank-bd=open-in-dvm.desktop; +x-content/blank-hddvd=open-in-dvm.desktop; +x-content/video-dvd=open-in-dvm.desktop; +x-content/video-vcd=open-in-dvm.desktop; +x-content/video-svcd=open-in-dvm.desktop; +#x-content/video-bluray=open-in-dvm.desktop; +#x-content/video-hddvd=open-in-dvm.desktop; +x-content/audio-cdda=open-in-dvm.desktop; +x-content/audio-dvd=open-in-dvm.desktop; +x-content/audio-player=open-in-dvm.desktop; +x-content/image-dcf=open-in-dvm.desktop; +x-content/image-picturecd=open-in-dvm.desktop; +# URI scheme handlers +x-scheme-handler/mailto=open-in-dvm.desktop; +x-scheme-handler/http=open-in-dvm.desktop; +x-scheme-handler/https=open-in-dvm.desktop; +application/mxf=open-in-dvm.desktop; +application/ogg=open-in-dvm.desktop; +application/ram=open-in-dvm.desktop; +application/sdp=open-in-dvm.desktop; +application/smil=open-in-dvm.desktop; +application/smil+xml=open-in-dvm.desktop; +application/vnd.apple.mpegurl=open-in-dvm.desktop; +application/vnd.ms-wpl=open-in-dvm.desktop; +application/vnd.rn-realmedia=open-in-dvm.desktop; +application/x-extension-m4a=open-in-dvm.desktop; +application/x-extension-mp4=open-in-dvm.desktop; +application/x-flac=open-in-dvm.desktop; +application/x-flash-video=open-in-dvm.desktop; +application/x-matroska=open-in-dvm.desktop; +application/x-netshow-channel=open-in-dvm.desktop; +application/x-ogg=open-in-dvm.desktop; +application/x-quicktime-media-link=open-in-dvm.desktop; +application/x-quicktimeplayer=open-in-dvm.desktop; +application/x-shorten=open-in-dvm.desktop; +application/x-smil=open-in-dvm.desktop; +application/xspf+xml=open-in-dvm.desktop; +audio/3gpp=open-in-dvm.desktop; +audio/ac3=open-in-dvm.desktop; +audio/AMR=open-in-dvm.desktop; +audio/AMR-WB=open-in-dvm.desktop; +audio/basic=open-in-dvm.desktop; +audio/midi=open-in-dvm.desktop; +audio/mp2=open-in-dvm.desktop; +audio/mp4=open-in-dvm.desktop; +audio/mpeg=open-in-dvm.desktop; +audio/mpegurl=open-in-dvm.desktop; +audio/ogg=open-in-dvm.desktop; +audio/prs.sid=open-in-dvm.desktop; +audio/vnd.rn-realaudio=open-in-dvm.desktop; +audio/x-aiff=open-in-dvm.desktop; +audio/x-ape=open-in-dvm.desktop; +audio/x-flac=open-in-dvm.desktop; +audio/x-gsm=open-in-dvm.desktop; +audio/x-it=open-in-dvm.desktop; +audio/x-m4a=open-in-dvm.desktop; +audio/x-matroska=open-in-dvm.desktop; +audio/x-mod=open-in-dvm.desktop; +audio/x-mp3=open-in-dvm.desktop; +audio/x-mpeg=open-in-dvm.desktop; +audio/x-mpegurl=open-in-dvm.desktop; +audio/x-ms-asf=open-in-dvm.desktop; +audio/x-ms-asx=open-in-dvm.desktop; +audio/x-ms-wax=open-in-dvm.desktop; +audio/x-ms-wma=open-in-dvm.desktop; +audio/x-musepack=open-in-dvm.desktop; +audio/x-pn-aiff=open-in-dvm.desktop; +audio/x-pn-au=open-in-dvm.desktop; +audio/x-pn-realaudio=open-in-dvm.desktop; +audio/x-pn-realaudio-plugin=open-in-dvm.desktop; +audio/x-pn-wav=open-in-dvm.desktop; +audio/x-pn-windows-acm=open-in-dvm.desktop; +audio/x-realaudio=open-in-dvm.desktop; +audio/x-real-audio=open-in-dvm.desktop; +audio/x-s3m=open-in-dvm.desktop; +audio/x-sbc=open-in-dvm.desktop; +audio/x-scpls=open-in-dvm.desktop; +audio/x-speex=open-in-dvm.desktop; +audio/x-stm=open-in-dvm.desktop; +audio/x-tta=open-in-dvm.desktop; +audio/x-wav=open-in-dvm.desktop; +audio/x-wavpack=open-in-dvm.desktop; +audio/x-vorbis=open-in-dvm.desktop; +audio/x-vorbis+ogg=open-in-dvm.desktop; +audio/x-xm=open-in-dvm.desktop; +image/vnd.rn-realpix=open-in-dvm.desktop; +image/x-pict=open-in-dvm.desktop; +misc/ultravox=open-in-dvm.desktop; +text/google-video-pointer=open-in-dvm.desktop; +text/x-google-video-pointer=open-in-dvm.desktop; +video/3gp=open-in-dvm.desktop; +video/3gpp=open-in-dvm.desktop; +video/dv=open-in-dvm.desktop; +video/divx=open-in-dvm.desktop; +video/fli=open-in-dvm.desktop; +video/flv=open-in-dvm.desktop; +video/mp2t=open-in-dvm.desktop; +video/mp4=open-in-dvm.desktop; +video/mp4v-es=open-in-dvm.desktop; +video/mpeg=open-in-dvm.desktop; +video/msvideo=open-in-dvm.desktop; +video/ogg=open-in-dvm.desktop; +video/quicktime=open-in-dvm.desktop; +video/vivo=open-in-dvm.desktop; +video/vnd.divx=open-in-dvm.desktop; +video/vnd.mpegurl=open-in-dvm.desktop; +video/vnd.rn-realvideo=open-in-dvm.desktop; +video/vnd.vivo=open-in-dvm.desktop; +video/webm=open-in-dvm.desktop; +video/x-anim=open-in-dvm.desktop; +video/x-avi=open-in-dvm.desktop; +video/x-flc=open-in-dvm.desktop; +video/x-fli=open-in-dvm.desktop; +video/x-flic=open-in-dvm.desktop; +video/x-flv=open-in-dvm.desktop; +video/x-m4v=open-in-dvm.desktop; +video/x-matroska=open-in-dvm.desktop; +video/x-mpeg=open-in-dvm.desktop; +video/x-mpeg2=open-in-dvm.desktop; +video/x-ms-asf=open-in-dvm.desktop; +video/x-ms-asx=open-in-dvm.desktop; +video/x-msvideo=open-in-dvm.desktop; +video/x-ms-wm=open-in-dvm.desktop; +video/x-ms-wmv=open-in-dvm.desktop; +video/x-ms-wmx=open-in-dvm.desktop; +video/x-ms-wvx=open-in-dvm.desktop; +video/x-nsv=open-in-dvm.desktop; +video/x-ogm+ogg=open-in-dvm.desktop; +video/x-theora+ogg=open-in-dvm.desktop; +video/x-totem-stream=open-in-dvm.desktop; +x-content/video-dvd=open-in-dvm.desktop; +x-content/video-vcd=open-in-dvm.desktop; +x-content/video-svcd=open-in-dvm.desktop; +x-scheme-handler/pnm=open-in-dvm.desktop; +x-scheme-handler/mms=open-in-dvm.desktop; +x-scheme-handler/net=open-in-dvm.desktop; +x-scheme-handler/rtp=open-in-dvm.desktop; +x-scheme-handler/rtmp=open-in-dvm.desktop; +x-scheme-handler/rtsp=open-in-dvm.desktop; +x-scheme-handler/mmsh=open-in-dvm.desktop; +x-scheme-handler/uvox=open-in-dvm.desktop; +x-scheme-handler/icy=open-in-dvm.desktop; +x-scheme-handler/icyx=open-in-dvm.desktop; +application/x-7z-compressed=open-in-dvm.desktop; +application/x-7z-compressed-tar=open-in-dvm.desktop; +application/x-ace=open-in-dvm.desktop; +application/x-alz=open-in-dvm.desktop; +application/x-ar=open-in-dvm.desktop; +application/x-arj=open-in-dvm.desktop; +application/x-bzip=open-in-dvm.desktop; +application/x-bzip-compressed-tar=open-in-dvm.desktop; +application/x-bzip1=open-in-dvm.desktop; +application/x-bzip1-compressed-tar=open-in-dvm.desktop; +application/x-cabinet=open-in-dvm.desktop; +application/x-cbr=open-in-dvm.desktop; +application/x-cbz=open-in-dvm.desktop; +application/x-compress=open-in-dvm.desktop; +application/x-compressed-tar=open-in-dvm.desktop; +application/x-cpio=open-in-dvm.desktop; +application/x-deb=open-in-dvm.desktop; +application/x-ear=open-in-dvm.desktop; +application/x-ms-dos-executable=open-in-dvm.desktop; +application/x-gtar=open-in-dvm.desktop; +application/x-gzip=open-in-dvm.desktop; +application/x-gzpostscript=open-in-dvm.desktop; +application/x-java-archive=open-in-dvm.desktop; +application/x-lha=open-in-dvm.desktop; +application/x-lhz=open-in-dvm.desktop; +application/x-lrzip=open-in-dvm.desktop; +application/x-lrzip-compressed-tar=open-in-dvm.desktop; +application/x-lzip=open-in-dvm.desktop; +application/x-lzip-compressed-tar=open-in-dvm.desktop; +application/x-lzma=open-in-dvm.desktop; +application/x-lzma-compressed-tar=open-in-dvm.desktop; +application/x-lzop=open-in-dvm.desktop; +application/x-lzop-compressed-tar=open-in-dvm.desktop; +application/x-ms-wim=open-in-dvm.desktop; +application/x-rar=open-in-dvm.desktop; +application/x-rar-compressed=open-in-dvm.desktop; +application/x-rzip=open-in-dvm.desktop; +application/x-tar=open-in-dvm.desktop; +application/x-tarz=open-in-dvm.desktop; +application/x-stuffit=open-in-dvm.desktop; +application/x-war=open-in-dvm.desktop; +application/x-xz=open-in-dvm.desktop; +application/x-xz-compressed-tar=open-in-dvm.desktop; +application/x-zip=open-in-dvm.desktop; +application/x-zip-compressed=open-in-dvm.desktop; +application/x-zoo=open-in-dvm.desktop; +application/zip=open-in-dvm.desktop; +application/x-archive=open-in-dvm.desktop; +application/vnd.ms-cab-compressed=open-in-dvm.desktop; +application/x-source-rpm=open-in-dvm.desktop; +image/bmp=open-in-dvm.desktop; +image/gif=open-in-dvm.desktop; +image/jpeg=open-in-dvm.desktop; +image/jpg=open-in-dvm.desktop; +image/pjpeg=open-in-dvm.desktop; +image/png=open-in-dvm.desktop; +image/tiff=open-in-dvm.desktop; +image/x-bmp=open-in-dvm.desktop; +image/x-gray=open-in-dvm.desktop; +image/x-icb=open-in-dvm.desktop; +image/x-ico=open-in-dvm.desktop; +image/x-png=open-in-dvm.desktop; +image/x-portable-anymap=open-in-dvm.desktop; +image/x-portable-bitmap=open-in-dvm.desktop; +image/x-portable-graymap=open-in-dvm.desktop; +image/x-portable-pixmap=open-in-dvm.desktop; +image/x-xbitmap=open-in-dvm.desktop; +image/x-xpixmap=open-in-dvm.desktop; +image/x-pcx=open-in-dvm.desktop; +image/svg+xml=open-in-dvm.desktop; +image/svg+xml-compressed=open-in-dvm.desktop; +image/vnd.wap.wbmp=open-in-dvm.desktop; diff --git a/workstation-config/mimeapps.list.sd-viewer b/workstation-config/mimeapps.list.sd-viewer new file mode 100644 index 000000000..00a680e68 --- /dev/null +++ b/workstation-config/mimeapps.list.sd-viewer @@ -0,0 +1,32 @@ +[Default Applications] +text/plain=org.gnome.gedit.desktop +text/csv=libreoffice-base.desktop +application/vnd.oasis.opendocument.text=libreoffice-base.desktop +application/vnd.oasis.opendocument.spreadsheet=libreoffice-base.desktop +application/vnd.oasis.opendocument.presentation=libreoffice-base.desktop +application/msword=libreoffice-base.desktop +application/vnd.ms-excel=libreoffice-base.desktop +application/vnd.ms-powerpoint=libreoffice-base.desktop +application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-base.desktop +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-base.desktop +application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-base.desktop +application/pdf=org.gnome.Evince.desktop +application/x-desktop=org.gnome.gedit.desktop +audio/mp4=audacious.desktop +audio/mpeg=audacious.desktop +audio/x-vorbis+ogg=audacious.desktop +audio/x-wav=audacious.desktop +video/quicktime=org.gnome.Totem.desktop +video/x-theora+ogg=org.gnome.Totem.desktop +video/mp4=org.gnome.Totem.desktop +video/x-msvideo=org.gnome.Totem.desktop +video/x-ms-wmv=org.gnome.Totem.desktop +image/jpeg=org.gnome.eog.desktop +image/gif=org.gnome.eog.desktop +image/tiff=org.gnome.Evince.desktop +image/png=org.gnome.eog.desktop +image/svg+xml=org.gnome.eog.desktop +image/vnd.djvu=org.gnome.Evince.desktop +application/vnd.rar=org.gnome.FileRoller.desktop +application/zip=org.gnome.FileRoller.desktop +application/x-7z-compressed=org.gnome.FileRoller.desktop diff --git a/workstation-config/open-in-dvm.desktop b/workstation-config/open-in-dvm.desktop new file mode 100644 index 000000000..a3aaad78e --- /dev/null +++ b/workstation-config/open-in-dvm.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=Open in Disposable VM +Comment=Open file in a Disposable VM +TryExec=/usr/bin/qvm-open-in-vm +Exec=/usr/bin/qvm-open-in-vm --view-only @dispvm:sd-viewer %f +Icon=/usr/share/icons/Qubes/dispvm-gray.png +Terminal=false +Categories=Utility diff --git a/workstation-config/paxctld.conf b/workstation-config/paxctld.conf new file mode 100644 index 000000000..b41b399ff --- /dev/null +++ b/workstation-config/paxctld.conf @@ -0,0 +1,117 @@ +# This file was provisioned via securedrop-workstation-svs-disp +# grub + +/usr/bin/grub-script-check E +/usr/bin/grub-bios-setup E +/usr/sbin/grub-mkdevicemap E +/usr/sbin/grub-probe E + +# qemu +/usr/bin/qemu-alpha m +/usr/bin/qemu-arm m +/usr/bin/qemu-armeb m +/usr/bin/qemu-cris m +/usr/bin/qemu-i386 m +/usr/bin/qemu-m68k m +/usr/bin/qemu-microblaze m +/usr/bin/qemu-microblazeel m +/usr/bin/qemu-mips m +/usr/bin/qemu-mips64 m +/usr/bin/qemu-mips64el m +/usr/bin/qemu-mipsel m +/usr/bin/qemu-mipsn32 m +/usr/bin/qemu-mipsn32el m +/usr/bin/qemu-or32 m +/usr/bin/qemu-ppc m +/usr/bin/qemu-ppc64 m +/usr/bin/qemu-ppc64abi32 m +/usr/bin/qemu-s390x m +/usr/bin/qemu-sh4 m +/usr/bin/qemu-sh4eb m +/usr/bin/qemu-sparc m +/usr/bin/qemu-sparc32plus m +/usr/bin/qemu-sparc64 m +/usr/bin/qemu-unicore32 m +/usr/bin/qemu-x86_64 m + +/usr/bin/qemu-system-aarch64 m +/usr/bin/qemu-system-alpha m +/usr/bin/qemu-system-arm m +/usr/bin/qemu-system-cris m +/usr/bin/qemu-system-i386 m +/usr/bin/qemu-system-lm32 m +/usr/bin/qemu-system-m68k m +/usr/bin/qemu-system-microblaze m +/usr/bin/qemu-system-microblazeel m +/usr/bin/qemu-system-mips m +/usr/bin/qemu-system-mips64 m +/usr/bin/qemu-system-mips64el m +/usr/bin/qemu-system-mipsel m +/usr/bin/qemu-system-moxie m +/usr/bin/qemu-system-or32 m +/usr/bin/qemu-system-ppc m +/usr/bin/qemu-system-ppc64 m +/usr/bin/qemu-system-ppcemb m +/usr/bin/qemu-system-s390x m +/usr/bin/qemu-system-sh4 m +/usr/bin/qemu-system-sh4eb m +/usr/bin/qemu-system-sparc m +/usr/bin/qemu-system-sparc64 m +/usr/bin/qemu-system-unicore32 m +/usr/bin/qemu-system-x86_64 m +/usr/bin/qemu-system-xtensa m +/usr/bin/qemu-system-xtensaeb m + +# skype +/usr/lib/skype/skype m +/usr/lib32/skype/skype m + +# steam +/usr/lib32/ld-linux.so.2 m + +# node +/usr/bin/node m + +# chrome +/opt/google/chrome/chrome-sandbox m +/opt/google/chrome/nacl_helper m +/opt/google/chrome/chrome m + +# chromium +/usr/lib/chromium-browser/chromium-browser m + +# firefox +/usr/lib/firefox/firefox m +/usr/lib/firefox/plugin-container m + +# webapp-container +/usr/bin/webapp-container m + +# oxide +/usr/lib/x86_64-linux-gnu/oxide-qt/oxide-renderer m + +# valgrind +/usr/bin/valgrind m + +# python +/usr/bin/python2.7 E +/usr/bin/python3.5 E + +# java +/usr/lib/jvm/java-6-sun-1.6.0.10/jre/bin/java m +/usr/lib/jvm/java-6-sun-1.6.0.10/jre/bin/javaws m +/usr/lib/jvm/java-6-openjdk/jre/bin/java m +/usr/lib/jvm/java-6-openjdk/jre/bin/java m +/usr/lib/jvm/java-8-openjdk/jre/bin/java m +/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java m +# openrc +/lib/rc/bin/lsb2rcconf E + +# libreoffice +# Ubuntu doesn't seem to carry this patch: +# https://bz.apache.org/ooo/show_bug.cgi?id=80816 +# libreoffice will still run fine without the below line, +# but it will report an RWX mprotect attempt +# /usr/lib/libreoffice/program/soffice.bin m + +/usr/bin/totem m From 6612420586a1a9bee14170c888de9b21fce176b9 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Dec 2023 12:42:35 -0500 Subject: [PATCH 625/751] Update client to use included sdk Rename all the imports and update the tests to reference `securedrop_client.sdk` instead of the pip-installed package. --- client/build-requirements.txt | 1 - client/poetry.lock | 39 +++++----- client/pyproject.toml | 2 +- client/securedrop_client/api_jobs/base.py | 3 +- .../securedrop_client/api_jobs/downloads.py | 6 +- client/securedrop_client/api_jobs/seen.py | 2 +- client/securedrop_client/api_jobs/sources.py | 6 +- client/securedrop_client/api_jobs/sync.py | 4 +- .../securedrop_client/api_jobs/updatestar.py | 6 +- client/securedrop_client/api_jobs/uploads.py | 8 +- client/securedrop_client/logic.py | 9 +-- client/securedrop_client/queue.py | 2 +- client/securedrop_client/storage.py | 8 +- client/securedrop_client/sync.py | 2 +- client/tests/api_jobs/test_base.py | 2 +- client/tests/api_jobs/test_downloads.py | 4 +- client/tests/api_jobs/test_sources.py | 6 +- client/tests/api_jobs/test_sync.py | 28 +++---- client/tests/api_jobs/test_updatestar.py | 10 +-- client/tests/api_jobs/test_uploads.py | 27 +++---- client/tests/factory.py | 9 +-- client/tests/gui/test_widgets.py | 2 +- client/tests/sdk/test_api.py | 78 +++++++++---------- client/tests/sdk/test_apiproxy.py | 14 ++-- client/tests/sdk/test_shared.py | 2 +- client/tests/sdk/test_timestamps.py | 2 +- client/tests/sdk/utils.py | 6 +- client/tests/test_logic.py | 4 +- client/tests/test_queue.py | 2 +- client/tests/test_storage.py | 8 +- client/tests/test_sync.py | 2 +- 31 files changed, 142 insertions(+), 162 deletions(-) diff --git a/client/build-requirements.txt b/client/build-requirements.txt index 7f06b45c7..84694f931 100644 --- a/client/build-requirements.txt +++ b/client/build-requirements.txt @@ -9,7 +9,6 @@ markupsafe==2.0.1 --hash=sha256:e61445980f0dcd584d728844d8ad516c9e460bd71f53c14c python-dateutil==2.7.5 --hash=sha256:2961735b604e5165d923a4e39b9bcbde6a4c363f257f5477b6339459fd7c1679 python-editor==1.0.3 --hash=sha256:42e5b2a7583cd278dff00ae1fc6b8b735da0502ceeb0914991eaaf5f91ac84ac requests==2.31.0 --hash=sha256:9f7f0f507fe7a9e10ea51e666da60aafcfcda94c71f0cac477dbadd8d25de49f -securedrop-sdk==0.4.0 --hash=sha256:54b870fd3566914c2ba13aeb5c7eaa0be8ac128be72b45613843c0b75040bd39 six==1.11.0 --hash=sha256:eb52689b06ca7433c1cac3b91f320400bd3b358790b7ff4b6367cb1c81d37561 sqlalchemy==1.3.3 --hash=sha256:af3ec7384a7da692a0db1b807da2eb5bda1372a1eea2a8b26c2ff8ccc1bbf897 --hash=sha256:86ed1e4985a9fd4f3c784da1fcefb89f4435c1c70815f43e5741c0c9f3c79be3 urllib3==1.26.6 --hash=sha256:7a2814749409a681ab58babe6539b02a2f84f6649904211f90fb649811ae7b36 diff --git a/client/poetry.lock b/client/poetry.lock index b22bfda8d..9a8bcd8e8 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1289,6 +1289,17 @@ files = [ pyobjc-core = ">=10.0" pyobjc-framework-Cocoa = ">=10.0" +[[package]] +name = "pyotp" +version = "2.8.0" +description = "Python One Time Password Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyotp-2.8.0-py3-none-any.whl", hash = "sha256:889d037fdde6accad28531fc62a790f089e5dfd5b638773e9ee004cce074a2e5"}, + {file = "pyotp-2.8.0.tar.gz", hash = "sha256:c2f5e17d9da92d8ec1f7de6331ab08116b9115adbabcba6e208d46fc49a98c5a"}, +] + [[package]] name = "pyperclip" version = "1.8.2" @@ -1892,24 +1903,24 @@ python-versions = ">=3.6" files = [ {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, @@ -1917,7 +1928,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, @@ -1925,7 +1936,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, @@ -1933,7 +1944,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, @@ -1980,20 +1991,6 @@ setuptools = ">=19.3" github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] gitlab = ["python-gitlab (>=1.3.0)"] -[[package]] -name = "securedrop-sdk" -version = "0.4.0" -description = "Python client API to access SecureDrop Journalist REST API" -optional = false -python-versions = ">=3.5" -files = [ - {file = "securedrop-sdk-0.4.0.tar.gz", hash = "sha256:c08f77bae5f900b1fbcd3b5aae1c931dc877e7289d69aa5a8b1e3c3f4e0dc561"}, -] - -[package.dependencies] -requests = "*" -urllib3 = "*" - [[package]] name = "semgrep" version = "1.48.0" @@ -2410,4 +2407,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "a2ca85aa97bdfd06a669c40521a5d90b27024786c5d44aa589c8362677e390c1" +content-hash = "a6967fd73c5be222c268b94d4109bdde85ded215998f362b67bf16c930e2253b" diff --git a/client/pyproject.toml b/client/pyproject.toml index ce8b54f1a..005a40366 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -14,7 +14,6 @@ alembic = "^1.1.0" arrow = "^0.12.1" python-dateutil = "^2.7.5" requests = "^2.31.0" -securedrop-sdk = "^0.4.0" [tool.poetry.group.dev.dependencies] # In production these two are installed using a system package @@ -38,6 +37,7 @@ isort = "*" mypy = "^1.4.1" polib = "*" pyqt5-stubs = "*" +pyotp = "2.8.0" pytest = "^7.2.0" pytest-cov = "*" pytest-mock = "*" diff --git a/client/securedrop_client/api_jobs/base.py b/client/securedrop_client/api_jobs/base.py index faf39d1be..8294f689d 100644 --- a/client/securedrop_client/api_jobs/base.py +++ b/client/securedrop_client/api_jobs/base.py @@ -2,9 +2,10 @@ from typing import Any, Optional, TypeVar from PyQt5.QtCore import QObject, pyqtSignal -from sdclientapi import API, AuthError, RequestTimeoutError, ServerConnectionError from sqlalchemy.orm.session import Session +from securedrop_client.sdk import API, AuthError, RequestTimeoutError, ServerConnectionError + logger = logging.getLogger(__name__) DEFAULT_NUM_ATTEMPTS = 5 diff --git a/client/securedrop_client/api_jobs/downloads.py b/client/securedrop_client/api_jobs/downloads.py index b317b7c09..e6805cd4a 100644 --- a/client/securedrop_client/api_jobs/downloads.py +++ b/client/securedrop_client/api_jobs/downloads.py @@ -6,14 +6,14 @@ from tempfile import NamedTemporaryFile from typing import Any, Optional, Tuple, Type, Union -from sdclientapi import API, BaseError -from sdclientapi import Reply as SdkReply -from sdclientapi import Submission as SdkSubmission from sqlalchemy.orm.session import Session from securedrop_client.api_jobs.base import SingleObjectApiJob from securedrop_client.crypto import CryptoError, GpgHelper from securedrop_client.db import DownloadError, DownloadErrorCodes, File, Message, Reply +from securedrop_client.sdk import API, BaseError +from securedrop_client.sdk import Reply as SdkReply +from securedrop_client.sdk import Submission as SdkSubmission from securedrop_client.storage import ( mark_as_decrypted, mark_as_downloaded, diff --git a/client/securedrop_client/api_jobs/seen.py b/client/securedrop_client/api_jobs/seen.py index 8a33d530e..b4e72310c 100644 --- a/client/securedrop_client/api_jobs/seen.py +++ b/client/securedrop_client/api_jobs/seen.py @@ -1,9 +1,9 @@ from typing import List -from sdclientapi import API from sqlalchemy.orm.session import Session from securedrop_client.api_jobs.base import ApiJob +from securedrop_client.sdk import API class SeenJob(ApiJob): diff --git a/client/securedrop_client/api_jobs/sources.py b/client/securedrop_client/api_jobs/sources.py index b1e4e8174..a1e43a765 100644 --- a/client/securedrop_client/api_jobs/sources.py +++ b/client/securedrop_client/api_jobs/sources.py @@ -1,10 +1,10 @@ import logging -import sdclientapi -from sdclientapi import API, RequestTimeoutError, ServerConnectionError from sqlalchemy.orm.session import Session +from securedrop_client import sdk from securedrop_client.api_jobs.base import ApiJob +from securedrop_client.sdk import API, RequestTimeoutError, ServerConnectionError logger = logging.getLogger(__name__) @@ -21,7 +21,7 @@ def call_api(self, api_client: API, session: Session) -> str: Delete a source on the server """ try: - source_sdk_object = sdclientapi.Source(uuid=self.uuid) + source_sdk_object = sdk.Source(uuid=self.uuid) api_client.delete_source(source_sdk_object) return self.uuid diff --git a/client/securedrop_client/api_jobs/sync.py b/client/securedrop_client/api_jobs/sync.py index d0e4b3f94..696873a43 100644 --- a/client/securedrop_client/api_jobs/sync.py +++ b/client/securedrop_client/api_jobs/sync.py @@ -2,13 +2,13 @@ import os from typing import Any, List, Optional -from sdclientapi import API -from sdclientapi import User as SDKUser from sqlalchemy.orm.session import Session from securedrop_client import state from securedrop_client.api_jobs.base import ApiJob from securedrop_client.db import DeletedUser, DraftReply, User +from securedrop_client.sdk import API +from securedrop_client.sdk import User as SDKUser from securedrop_client.storage import get_remote_data, update_local_storage logger = logging.getLogger(__name__) diff --git a/client/securedrop_client/api_jobs/updatestar.py b/client/securedrop_client/api_jobs/updatestar.py index a25adb40d..d25815558 100644 --- a/client/securedrop_client/api_jobs/updatestar.py +++ b/client/securedrop_client/api_jobs/updatestar.py @@ -1,10 +1,10 @@ import logging -import sdclientapi -from sdclientapi import API, RequestTimeoutError, ServerConnectionError from sqlalchemy.orm.session import Session +from securedrop_client import sdk from securedrop_client.api_jobs.base import SingleObjectApiJob +from securedrop_client.sdk import API, RequestTimeoutError, ServerConnectionError logger = logging.getLogger(__name__) @@ -21,7 +21,7 @@ def call_api(self, api_client: API, session: Session) -> str: Star or Unstar an user on the server """ try: - source_sdk_object = sdclientapi.Source(uuid=self.uuid) + source_sdk_object = sdk.Source(uuid=self.uuid) if self.is_starred: api_client.remove_star(source_sdk_object) diff --git a/client/securedrop_client/api_jobs/uploads.py b/client/securedrop_client/api_jobs/uploads.py index d72af3513..3f95771a6 100644 --- a/client/securedrop_client/api_jobs/uploads.py +++ b/client/securedrop_client/api_jobs/uploads.py @@ -1,11 +1,10 @@ import logging import os -import sdclientapi -from sdclientapi import API, RequestTimeoutError, ServerConnectionError from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm.session import Session +from securedrop_client import sdk from securedrop_client.api_jobs.base import SingleObjectApiJob from securedrop_client.crypto import GpgHelper from securedrop_client.db import ( @@ -16,6 +15,7 @@ Source, User, ) +from securedrop_client.sdk import API, RequestTimeoutError, ServerConnectionError from securedrop_client.storage import update_draft_replies logger = logging.getLogger(__name__) @@ -151,8 +151,8 @@ def _set_status_to_failed(self, session: Session) -> None: f"Unknown error when setting reply {self.reply_uuid} as failed, skipping: {e}" ) - def _make_call(self, encrypted_reply: str, api_client: API) -> sdclientapi.Reply: - sdk_source = sdclientapi.Source(uuid=self.source_uuid) + def _make_call(self, encrypted_reply: str, api_client: API) -> sdk.Reply: + sdk_source = sdk.Source(uuid=self.source_uuid) return api_client.reply_source(sdk_source, encrypted_reply, self.reply_uuid) diff --git a/client/securedrop_client/logic.py b/client/securedrop_client/logic.py index a922a5f88..0e99e2b3e 100644 --- a/client/securedrop_client/logic.py +++ b/client/securedrop_client/logic.py @@ -27,13 +27,11 @@ from typing import Dict, List, Optional, Type, Union # noqa: F401 import arrow -import sdclientapi import sqlalchemy.orm.exc from PyQt5.QtCore import QObject, QProcess, QThread, QTimer, pyqtSignal, pyqtSlot -from sdclientapi import AuthError, RequestTimeoutError, ServerConnectionError from sqlalchemy.orm.session import sessionmaker -from securedrop_client import db, state, storage +from securedrop_client import db, sdk, state, storage from securedrop_client.api_jobs.base import ApiInaccessibleError from securedrop_client.api_jobs.downloads import ( DownloadChecksumMismatchException, @@ -62,6 +60,7 @@ ) from securedrop_client.crypto import GpgHelper from securedrop_client.queue import ApiJobQueue +from securedrop_client.sdk import AuthError, RequestTimeoutError, ServerConnectionError from securedrop_client.sync import ApiSync from securedrop_client.utils import check_dir_permissions @@ -369,7 +368,7 @@ def __init__( # type: ignore[no-untyped-def] self.gui = gui # Reference to the API for secure drop proxy. - self.api = None # type: sdclientapi.API + self.api: sdk.API = None # Store authenticated user self.authenticated_user: Union[db.User, None] = None @@ -541,7 +540,7 @@ def login(self, username: str, password: str, totp: str) -> None: default_request_timeout for Queue API requests in ApiJobQueue in order to display errors faster. """ - self.api = sdclientapi.API( + self.api = sdk.API( self.hostname, username, password, totp, self.proxy, default_request_timeout=60 ) self.call_api( diff --git a/client/securedrop_client/queue.py b/client/securedrop_client/queue.py index dc702febf..38859df74 100644 --- a/client/securedrop_client/queue.py +++ b/client/securedrop_client/queue.py @@ -5,7 +5,6 @@ from typing import Any, Optional, Tuple from PyQt5.QtCore import QObject, QThread, pyqtBoundSignal, pyqtSignal, pyqtSlot -from sdclientapi import API, RequestTimeoutError, ServerConnectionError from sqlalchemy.orm import scoped_session from securedrop_client.api_jobs.base import ( @@ -25,6 +24,7 @@ from securedrop_client.api_jobs.sources import DeleteConversationJob, DeleteSourceJob from securedrop_client.api_jobs.updatestar import UpdateStarJob from securedrop_client.api_jobs.uploads import SendReplyJob +from securedrop_client.sdk import API, RequestTimeoutError, ServerConnectionError logger = logging.getLogger(__name__) diff --git a/client/securedrop_client/storage.py b/client/securedrop_client/storage.py index 0204e670f..b7aca4879 100644 --- a/client/securedrop_client/storage.py +++ b/client/securedrop_client/storage.py @@ -28,10 +28,6 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union from dateutil.parser import parse -from sdclientapi import API -from sdclientapi import Reply as SDKReply -from sdclientapi import Source as SDKSource -from sdclientapi import Submission as SDKSubmission from sqlalchemy import and_, desc, or_ from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm.exc import NoResultFound @@ -53,6 +49,10 @@ Source, User, ) +from securedrop_client.sdk import API +from securedrop_client.sdk import Reply as SDKReply +from securedrop_client.sdk import Source as SDKSource +from securedrop_client.sdk import Submission as SDKSubmission from securedrop_client.utils import SourceCache, chronometer logger = logging.getLogger(__name__) diff --git a/client/securedrop_client/sync.py b/client/securedrop_client/sync.py index 2ca20e91a..c21a4c616 100644 --- a/client/securedrop_client/sync.py +++ b/client/securedrop_client/sync.py @@ -2,13 +2,13 @@ from typing import Optional from PyQt5.QtCore import QObject, QThread, QTimer, pyqtBoundSignal, pyqtSignal -from sdclientapi import API from sqlalchemy.orm import scoped_session from securedrop_client import state from securedrop_client.api_jobs.base import ApiInaccessibleError from securedrop_client.api_jobs.sync import MetadataSyncJob from securedrop_client.crypto import GpgHelper +from securedrop_client.sdk import API logger = logging.getLogger(__name__) diff --git a/client/tests/api_jobs/test_base.py b/client/tests/api_jobs/test_base.py index 6fd06ec3b..751d7f1a3 100644 --- a/client/tests/api_jobs/test_base.py +++ b/client/tests/api_jobs/test_base.py @@ -1,7 +1,7 @@ import pytest -from sdclientapi import AuthError, RequestTimeoutError, ServerConnectionError from securedrop_client.api_jobs.base import ApiInaccessibleError, ApiJob, SingleObjectApiJob +from securedrop_client.sdk import AuthError, RequestTimeoutError, ServerConnectionError from tests.factory import dummy_job_factory diff --git a/client/tests/api_jobs/test_downloads.py b/client/tests/api_jobs/test_downloads.py index 127113587..f9ca7f5c1 100644 --- a/client/tests/api_jobs/test_downloads.py +++ b/client/tests/api_jobs/test_downloads.py @@ -3,8 +3,6 @@ from typing import Tuple import pytest -from sdclientapi import BaseError -from sdclientapi import Submission as SdkSubmission from securedrop_client.api_jobs.downloads import ( DownloadChecksumMismatchException, @@ -15,6 +13,8 @@ ReplyDownloadJob, ) from securedrop_client.crypto import CryptoError, GpgHelper +from securedrop_client.sdk import BaseError +from securedrop_client.sdk import Submission as SdkSubmission from tests import factory with open(os.path.join(os.path.dirname(__file__), "..", "files", "test-key.gpg.pub.asc")) as f: diff --git a/client/tests/api_jobs/test_sources.py b/client/tests/api_jobs/test_sources.py index 75ee27b1e..b58867671 100644 --- a/client/tests/api_jobs/test_sources.py +++ b/client/tests/api_jobs/test_sources.py @@ -1,5 +1,4 @@ import pytest -from sdclientapi import RequestTimeoutError, ServerConnectionError from securedrop_client.api_jobs.sources import ( DeleteConversationJob, @@ -7,6 +6,7 @@ DeleteSourceJob, DeleteSourceJobException, ) +from securedrop_client.sdk import RequestTimeoutError, ServerConnectionError from tests import factory @@ -76,9 +76,7 @@ def test_delete_source_job(homedir, mocker, session, session_maker): api_client.delete_source = mocker.MagicMock() mock_sdk_source = mocker.Mock() - mock_source_init = mocker.patch( - "securedrop_client.logic.sdclientapi.Source", return_value=mock_sdk_source - ) + mock_source_init = mocker.patch("securedrop_client.sdk.Source", return_value=mock_sdk_source) job = DeleteSourceJob(source.uuid) uuid = job.call_api(api_client, session) diff --git a/client/tests/api_jobs/test_sync.py b/client/tests/api_jobs/test_sync.py index ca1f1e975..351b2e2e8 100644 --- a/client/tests/api_jobs/test_sync.py +++ b/client/tests/api_jobs/test_sync.py @@ -40,7 +40,7 @@ def test_handles_missing_files_gracefully(self): def test_MetadataSyncJob_has_default_timeout(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") remote_user = factory.RemoteUser() api_client.get_users = mocker.MagicMock(return_value=[remote_user]) @@ -50,7 +50,7 @@ def test_MetadataSyncJob_has_default_timeout(mocker, homedir, session, session_m def test_MetadataSyncJob_takes_overridden_timeout(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") remote_user = factory.RemoteUser() api_client.get_users = mocker.MagicMock(return_value=[remote_user]) @@ -65,7 +65,7 @@ def test_MetadataSyncJob_takes_overridden_timeout(mocker, homedir, session, sess def test_MetadataSyncJob_creates_new_user(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") remote_user = factory.RemoteUser() api_client.get_users = mocker.MagicMock(return_value=[remote_user]) @@ -77,7 +77,7 @@ def test_MetadataSyncJob_creates_new_user(mocker, homedir, session, session_make def test_MetadataSyncJob_creates_new_special_deleted_user(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") remote_user = factory.RemoteUser(username="deleted") api_client.get_users = mocker.MagicMock(return_value=[remote_user]) @@ -89,7 +89,7 @@ def test_MetadataSyncJob_creates_new_special_deleted_user(mocker, homedir, sessi def test_MetadataSyncJob_updates_application_state(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") some_file = factory.RemoteFile() some_message = factory.RemoteMessage() another_file = factory.RemoteFile() @@ -111,7 +111,7 @@ def test_MetadataSyncJob_updates_application_state(mocker, homedir, session, ses def test_MetadataSyncJob_updates_existing_user(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") remote_user = factory.RemoteUser( uuid="abc123-ima-uuid", username="new-username", @@ -132,7 +132,7 @@ def test_MetadataSyncJob_updates_existing_user(mocker, homedir, session, session def test_MetadataSyncJob_deletes_user(mocker, homedir, session, session_maker): - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") api_client.get_users = mocker.MagicMock(return_value=[]) user = factory.User() @@ -153,7 +153,7 @@ def test_MetadataSyncJob_does_not_delete_reserved_deleted_user(mocker, homedir, This test is to ensure that we support an edge case that can occur on a pre-2.2.0 server (before the server added support for creating an actual deleted user account). """ - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") api_client.get_users = mocker.MagicMock(return_value=[]) reserved_deleted_user = factory.User(username="deleted") @@ -182,7 +182,7 @@ def test_MetadataSyncJob_reassociates_draftreplies_to_new_account_before_deletin remote_reserved_deleted_user = factory.RemoteUser(username="deleted") # Set up get_users so that `user_to_delete_with_drafts` will be deleted and # `remote_reserved_deleted_user` will be created since it exists on the server - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") api_client.get_users = mocker.MagicMock(return_value=[remote_reserved_deleted_user]) job = MetadataSyncJob(homedir) @@ -222,7 +222,7 @@ def test_MetadataSyncJob_reassociates_draftreplies_to_existing_account_before_de ) # Set up get_users so that `user_to_delete_with_drafts` will be deleted and # `remote_reserved_deleted_user` will replace `local_reserved_deleted_user` - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") api_client.get_users = mocker.MagicMock(return_value=[remote_reserved_deleted_user]) job = MetadataSyncJob(homedir) @@ -256,7 +256,7 @@ def test_MetadataSyncJob_reassociates_draftreplies_to_new_local_account_before_d draftreply = factory.DraftReply(journalist_id=user_to_delete_with_drafts.id) session.add(draftreply) # Set up get_users so that `user_to_delete_with_drafts` will be deleted - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") api_client.get_users = mocker.MagicMock(return_value=[]) job = MetadataSyncJob(homedir) @@ -290,7 +290,7 @@ def test_MetadataSyncJob_replaces_reserved_deleted_user_account(mocker, homedir, remote_reserved_deleted_user = factory.RemoteUser(username="deleted") # Set up get_users so that `user_to_delete_with_drafts` will be deleted and # `remote_reserved_deleted_user` will replace `local_reserved_deleted_user` - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") api_client.get_users = mocker.MagicMock(return_value=[remote_reserved_deleted_user]) job = MetadataSyncJob(homedir) @@ -318,7 +318,7 @@ def test_MetadataSyncJob_success(mocker, homedir, session, session_maker): user = factory.User(uuid="mock1", username="mock1", firstname="mock1", lastname="mock1") session.add(user) - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") user = {"uuid": "mock1", "username": "mock1", "first_name": "mock1", "last_name": "mock1"} mocker.patch.object(api_client, "get_current_user", return_value=user) @@ -342,7 +342,7 @@ def test_MetadataSyncJob_success_current_user_name_change(mocker, homedir, sessi user = factory.User(uuid="mock1", username="mock1", firstname="mock1", lastname="mock1") session.add(user) - api_client = mocker.patch("securedrop_client.logic.sdclientapi.API") + api_client = mocker.patch("securedrop_client.sdk.API") user = {"uuid": "mock2", "username": "mock2", "first_name": "mock2", "last_name": "mock2"} mocker.patch.object(api_client, "get_current_user", return_value=user) diff --git a/client/tests/api_jobs/test_updatestar.py b/client/tests/api_jobs/test_updatestar.py index a5734f0ab..b62a166b0 100644 --- a/client/tests/api_jobs/test_updatestar.py +++ b/client/tests/api_jobs/test_updatestar.py @@ -1,11 +1,11 @@ import pytest -from sdclientapi import RequestTimeoutError, ServerConnectionError from securedrop_client.api_jobs.updatestar import ( UpdateStarJob, UpdateStarJobError, UpdateStarJobTimeoutError, ) +from securedrop_client.sdk import RequestTimeoutError, ServerConnectionError from tests import factory @@ -22,9 +22,7 @@ def test_star_if_unstar(homedir, mocker, session, session_maker): api_client.add_star = mocker.MagicMock() mock_sdk_source = mocker.Mock() - mock_source_init = mocker.patch( - "securedrop_client.logic.sdclientapi.Source", return_value=mock_sdk_source - ) + mock_source_init = mocker.patch("securedrop_client.sdk.Source", return_value=mock_sdk_source) job = UpdateStarJob(source.uuid, source.is_starred) @@ -49,9 +47,7 @@ def test_unstar_if_star(homedir, mocker, session, session_maker): api_client.remove_star = mocker.MagicMock() mock_sdk_source = mocker.Mock() - mock_source_init = mocker.patch( - "securedrop_client.logic.sdclientapi.Source", return_value=mock_sdk_source - ) + mock_source_init = mocker.patch("securedrop_client.sdk.Source", return_value=mock_sdk_source) job = UpdateStarJob(source.uuid, source.is_starred) diff --git a/client/tests/api_jobs/test_uploads.py b/client/tests/api_jobs/test_uploads.py index c0a493adb..89ee7bd0e 100644 --- a/client/tests/api_jobs/test_uploads.py +++ b/client/tests/api_jobs/test_uploads.py @@ -1,9 +1,8 @@ import datetime import pytest -import sdclientapi -from securedrop_client import db +from securedrop_client import db, sdk from securedrop_client.api_jobs.uploads import ( SendReplyJob, SendReplyJobError, @@ -42,14 +41,12 @@ def test_send_reply_success(homedir, mocker, session, session_maker, reply_statu mock_encrypt = mocker.patch.object(gpg, "encrypt_to_source", return_value=encrypted_reply) msg = "wat" - mock_reply_response = sdclientapi.Reply(uuid=msg_uuid, filename="5-dummy-reply") + mock_reply_response = sdk.Reply(uuid=msg_uuid, filename="5-dummy-reply") api_client.reply_source = mocker.MagicMock() api_client.reply_source.return_value = mock_reply_response mock_sdk_source = mocker.Mock() - mock_source_init = mocker.patch( - "securedrop_client.logic.sdclientapi.Source", return_value=mock_sdk_source - ) + mock_source_init = mocker.patch("securedrop_client.sdk.Source", return_value=mock_sdk_source) job = SendReplyJob(source.uuid, msg_uuid, msg, gpg) @@ -71,7 +68,7 @@ def test_send_reply_fails_when_no_user(homedir, mocker, session, session_maker, """ source = factory.Source() session.add(source) - mocker.patch("securedrop_client.logic.sdclientapi.Source", return_value=mocker.Mock()) + mocker.patch("securedrop_client.sdk.Source", return_value=mocker.Mock()) draft_reply = factory.DraftReply(uuid="mock_reply_uuid") session.add(draft_reply) @@ -150,14 +147,12 @@ def test_drafts_ordering(homedir, mocker, session, session_maker, reply_status_c mock_encrypt = mocker.patch.object(gpg, "encrypt_to_source", return_value=encrypted_reply) msg = "wat" - mock_reply_response = sdclientapi.Reply(uuid=msg_uuid, filename="2-dummy-reply") + mock_reply_response = sdk.Reply(uuid=msg_uuid, filename="2-dummy-reply") api_client.reply_source = mocker.MagicMock() api_client.reply_source.return_value = mock_reply_response mock_sdk_source = mocker.Mock() - mock_source_init = mocker.patch( - "securedrop_client.logic.sdclientapi.Source", return_value=mock_sdk_source - ) + mock_source_init = mocker.patch("securedrop_client.sdk.Source", return_value=mock_sdk_source) job = SendReplyJob(source.uuid, msg_uuid, msg, gpg) @@ -217,14 +212,12 @@ def test_send_reply_failure_gpg_error(homedir, mocker, session, session_maker, r mock_encrypt = mocker.patch.object(gpg, "encrypt_to_source", side_effect=CryptoError) msg = "wat" - mock_reply_response = sdclientapi.Reply(uuid=msg_uuid, filename="5-dummy-reply") + mock_reply_response = sdk.Reply(uuid=msg_uuid, filename="5-dummy-reply") api_client.reply_source = mocker.MagicMock() api_client.reply_source.return_value = mock_reply_response mock_sdk_source = mocker.Mock() - mock_source_init = mocker.patch( - "securedrop_client.logic.sdclientapi.Source", return_value=mock_sdk_source - ) + mock_source_init = mocker.patch("securedrop_client.sdk.Source", return_value=mock_sdk_source) job = SendReplyJob(source.uuid, msg_uuid, msg, gpg) @@ -324,9 +317,7 @@ def test_send_reply_failure_unknown_error( assert len(drafts) == 1 -@pytest.mark.parametrize( - "exception", [sdclientapi.RequestTimeoutError, sdclientapi.ServerConnectionError] -) +@pytest.mark.parametrize("exception", [sdk.RequestTimeoutError, sdk.ServerConnectionError]) def test_send_reply_failure_timeout_error( homedir, mocker, session, session_maker, reply_status_codes, exception ): diff --git a/client/tests/factory.py b/client/tests/factory.py index ea800e598..d26fa5bab 100644 --- a/client/tests/factory.py +++ b/client/tests/factory.py @@ -7,13 +7,12 @@ from itertools import cycle from typing import List -from sdclientapi import Reply as SDKReply -from sdclientapi import Source as SDKSource -from sdclientapi import Submission as SDKSubmission -from sdclientapi import User as SDKUser - from securedrop_client import db from securedrop_client.api_jobs.base import ApiJob +from securedrop_client.sdk import Reply as SDKReply +from securedrop_client.sdk import Source as SDKSource +from securedrop_client.sdk import Submission as SDKSubmission +from securedrop_client.sdk import User as SDKUser SOURCE_COUNT = 0 MESSAGE_COUNT = 0 diff --git a/client/tests/gui/test_widgets.py b/client/tests/gui/test_widgets.py index c6ac53fb4..11b4234bc 100644 --- a/client/tests/gui/test_widgets.py +++ b/client/tests/gui/test_widgets.py @@ -4639,7 +4639,7 @@ def test_ReplyBoxWidget_enable_after_source_gets_key(mocker, session, session_ma Test that it's enabled when a source that lacked a key now has one. """ - mocker.patch("sdclientapi.API") + mocker.patch("securedrop_client.sdk.API") mock_gui = mocker.MagicMock() controller = logic.Controller("http://localhost", mock_gui, session_maker, homedir, None) controller.is_authenticated = True diff --git a/client/tests/sdk/test_api.py b/client/tests/sdk/test_api.py index 730daeb1a..5424cc664 100644 --- a/client/tests/sdk/test_api.py +++ b/client/tests/sdk/test_api.py @@ -9,8 +9,8 @@ from requests.exceptions import ConnectTimeout, ReadTimeout from test_shared import TestShared -from sdclientapi import API, RequestTimeoutError -from sdclientapi.sdlocalobjects import AuthError, Reply, Submission +from securedrop_client.sdk import API, RequestTimeoutError +from securedrop_client.sdk.sdlocalobjects import AuthError, Reply, Submission NUM_REPLIES_PER_SOURCE = 2 @@ -34,7 +34,7 @@ def setup_method(self): # It doesn't matter if these intermittent 403s are captured in the # cassette as we ignore them during playback. auth_result = None - with vcr.use_cassette("data/test-setup.yml") as cassette: + with vcr.use_cassette("tests/sdk/data/test-setup.yml") as cassette: for i in range(3): totp = self.totp.now() self.api = API(self.server, self.username, self.password, str(totp)) @@ -51,19 +51,19 @@ def setup_method(self): if auth_result is None: raise AuthError("Could not obtain API token during test setup.") - @vcr.use_cassette("data/test-baduser.yml") + @vcr.use_cassette("tests/sdk/data/test-baduser.yml") def test_auth_baduser(self): self.api = API(self.server, "no", self.password, str(self.totp.now())) with pytest.raises(AuthError): self.api.authenticate() - @vcr.use_cassette("data/test-badpassword.yml") + @vcr.use_cassette("tests/sdk/data/test-badpassword.yml") def test_auth_badpassword(self): self.api = API(self.server, self.username, "no", str(self.totp.now())) with pytest.raises(AuthError): self.api.authenticate() - @vcr.use_cassette("data/test-badotp.yml") + @vcr.use_cassette("tests/sdk/data/test-badotp.yml") def test_auth_badotp(self): self.api = API(self.server, self.username, self.password, "no") with pytest.raises(AuthError): @@ -74,7 +74,7 @@ def test_api_auth(self): # This test is order-sensitive and must be run before the "seen" # state of files is altered. - @vcr.use_cassette("data/test-download-submission.yml") + @vcr.use_cassette("tests/sdk/data/test-download-submission.yml") def test_download_submission(self): submissions = self.api.get_all_submissions() unread_submission = None @@ -109,80 +109,80 @@ def test_download_submission(self): # Let us remove the temporary directory shutil.rmtree(tmpdir) - @vcr.use_cassette("data/test-seen.yml") + @vcr.use_cassette("tests/sdk/data/test-seen.yml") def test_seen(self): super().seen() - @vcr.use_cassette("data/test-get-sources.yml") + @vcr.use_cassette("tests/sdk/data/test-get-sources.yml") def test_get_sources(self): super().get_sources() - @vcr.use_cassette("data/test-star-add-remove.yml") + @vcr.use_cassette("tests/sdk/data/test-star-add-remove.yml") def test_star_add_remove(self): super().star_add_remove() - @vcr.use_cassette("data/test-get-single-source.yml") + @vcr.use_cassette("tests/sdk/data/test-get-single-source.yml") def test_get_single_source(self): super().get_single_source() - @vcr.use_cassette("data/test-get-single-source.yml") + @vcr.use_cassette("tests/sdk/data/test-get-single-source.yml") def test_get_single_source_from_string(self): super().get_single_source(from_string=True) - @vcr.use_cassette("data/test-failed-single-source.yml") + @vcr.use_cassette("tests/sdk/data/test-failed-single-source.yml") def test_failed_single_source(self): super().failed_single_source() - @vcr.use_cassette("data/test-get-submissions.yml") + @vcr.use_cassette("tests/sdk/data/test-get-submissions.yml") def test_get_submissions(self): super().get_submissions() - @vcr.use_cassette("data/test-get-submission.yml") + @vcr.use_cassette("tests/sdk/data/test-get-submission.yml") def test_get_submission(self): super().get_submission() - @vcr.use_cassette("data/test-get-submission.yml") + @vcr.use_cassette("tests/sdk/data/test-get-submission.yml") def test_get_submission_from_string(self): super().get_submission(from_string=True) - @vcr.use_cassette("data/test-get-wrong-submissions.yml") + @vcr.use_cassette("tests/sdk/data/test-get-wrong-submissions.yml") def test_get_wrong_submissions(self): super().get_wrong_submissions() - @vcr.use_cassette("data/test-get-all-submissions.yml") + @vcr.use_cassette("tests/sdk/data/test-get-all-submissions.yml") def test_get_all_submissions(self): super().get_all_submissions() - @vcr.use_cassette("data/test-flag-source.yml") + @vcr.use_cassette("tests/sdk/data/test-flag-source.yml") def test_flag_source(self): super().flag_source() - @vcr.use_cassette("data/test-get-current-user.yml") + @vcr.use_cassette("tests/sdk/data/test-get-current-user.yml") def test_get_current_user(self): super().get_current_user() - @vcr.use_cassette("data/test-get-users.yml") + @vcr.use_cassette("tests/sdk/data/test-get-users.yml") def test_get_users(self): super().get_users() - @vcr.use_cassette("data/test-error-unencrypted-reply.yml") + @vcr.use_cassette("tests/sdk/data/test-error-unencrypted-reply.yml") def test_error_unencrypted_reply(self): super().error_unencrypted_reply() - @vcr.use_cassette("data/test-get-replies-from-source.yml") + @vcr.use_cassette("tests/sdk/data/test-get-replies-from-source.yml") def test_get_replies_from_source(self): super().get_replies_from_source() - @vcr.use_cassette("data/test-get-reply-from-source.yml") + @vcr.use_cassette("tests/sdk/data/test-get-reply-from-source.yml") def test_get_reply_from_source(self): super().get_reply_from_source() - @vcr.use_cassette("data/test-get-all-replies.yml") + @vcr.use_cassette("tests/sdk/data/test-get-all-replies.yml") def test_get_all_replies(self): super().get_all_replies() # This test is materially different in the API & API Proxy versions. - @vcr.use_cassette("data/test-download-reply.yml") + @vcr.use_cassette("tests/sdk/data/test-download-reply.yml") def test_download_reply(self): r = self.api.get_all_replies()[0] @@ -207,39 +207,39 @@ def test_download_reply(self): # not be run before other tests, which may rely on the original fixture # state. - @vcr.use_cassette("data/test-reply-source.yml") + @vcr.use_cassette("tests/sdk/data/test-reply-source.yml") def test_reply_source(self): super().reply_source() - @vcr.use_cassette("data/test-reply-source-with-uuid.yml") + @vcr.use_cassette("tests/sdk/data/test-reply-source-with-uuid.yml") def test_reply_source_with_uuid(self): super().reply_source_with_uuid() - @vcr.use_cassette("data/test-delete-conversation.yml") + @vcr.use_cassette("tests/sdk/data/test-delete-conversation.yml") def test_delete_conversation(self): super().delete_conversation() - @vcr.use_cassette("data/test-delete-source.yml") + @vcr.use_cassette("tests/sdk/data/test-delete-source.yml") def test_delete_source(self): super().delete_source() - @vcr.use_cassette("data/test-delete-source.yml") + @vcr.use_cassette("tests/sdk/data/test-delete-source.yml") def test_delete_source_from_string(self): super().delete_source(from_string=True) - @vcr.use_cassette("data/test-delete-submission.yml") + @vcr.use_cassette("tests/sdk/data/test-delete-submission.yml") def test_delete_submission(self): super().delete_submission() - @vcr.use_cassette("data/test-delete-submission-from-string.yml") + @vcr.use_cassette("tests/sdk/data/test-delete-submission-from-string.yml") def test_delete_submission_from_string(self): super().delete_submission(from_string=True) - @vcr.use_cassette("data/test-delete-reply.yml") + @vcr.use_cassette("tests/sdk/data/test-delete-reply.yml") def test_delete_reply(self): super().delete_reply() - @vcr.use_cassette("data/test-logout.yml") + @vcr.use_cassette("tests/sdk/data/test-logout.yml") def test_zlogout(self): r = self.api.logout() assert r @@ -247,21 +247,21 @@ def test_zlogout(self): def test_request_connect_timeout(mocker): api = API("mock", "mock", "mock", "mock", proxy=False) - mocker.patch("sdclientapi.requests.request", side_effect=ConnectTimeout) + mocker.patch("securedrop_client.sdk.requests.request", side_effect=ConnectTimeout) with pytest.raises(RequestTimeoutError): api.authenticate() def test_request_read_timeout(mocker): api = API("mock", "mock", "mock", "mock", proxy=False) - mocker.patch("sdclientapi.requests.request", side_effect=ReadTimeout) + mocker.patch("securedrop_client.sdk.requests.request", side_effect=ReadTimeout) with pytest.raises(RequestTimeoutError): api.authenticate() def test_download_reply_timeout(mocker): api = API("mock", "mock", "mock", "mock", proxy=False) - mocker.patch("sdclientapi.requests.request", side_effect=RequestTimeoutError) + mocker.patch("securedrop_client.sdk.requests.request", side_effect=RequestTimeoutError) with pytest.raises(RequestTimeoutError): r = Reply(uuid="humanproblem", filename="secret.txt") api.download_reply(r) @@ -269,7 +269,7 @@ def test_download_reply_timeout(mocker): def test_download_submission_timeout(mocker): api = API("mock", "mock", "mock", "mock", proxy=False) - mocker.patch("sdclientapi.requests.request", side_effect=RequestTimeoutError) + mocker.patch("securedrop_client.sdk.requests.request", side_effect=RequestTimeoutError) with pytest.raises(RequestTimeoutError): s = Submission(uuid="climateproblem") api.download_submission(s) diff --git a/client/tests/sdk/test_apiproxy.py b/client/tests/sdk/test_apiproxy.py index 55f793d56..a65a1b0a7 100644 --- a/client/tests/sdk/test_apiproxy.py +++ b/client/tests/sdk/test_apiproxy.py @@ -9,8 +9,8 @@ from test_shared import TestShared from utils import qrexec_datasaver -from sdclientapi import API, RequestTimeoutError -from sdclientapi.sdlocalobjects import AuthError, BaseError, Reply, Submission +from securedrop_client.sdk import API, RequestTimeoutError +from securedrop_client.sdk.sdlocalobjects import AuthError, BaseError, Reply, Submission class TestAPIProxy(TestShared): @@ -206,7 +206,7 @@ def communicate(self, *nargs, **kwargs) -> None: raise TimeoutExpired(["mock"], 123) api = API("mock", "mock", "mock", "mock", proxy=True) - mocker.patch("sdclientapi.Popen", MockedPopen) + mocker.patch("securedrop_client.sdk.Popen", MockedPopen) with pytest.raises(RequestTimeoutError): api.authenticate() @@ -221,7 +221,7 @@ def communicate(self, *nargs, **kwargs) -> None: raise TimeoutExpired(["mock"], 123) api = API("mock", "mock", "mock", "mock", proxy=True) - mocker.patch("sdclientapi.Popen", MockedPopen) + mocker.patch("securedrop_client.sdk.Popen", MockedPopen) with pytest.raises(RequestTimeoutError): r = Reply(uuid="humanproblem", filename="secret.txt") api.download_reply(r) @@ -236,7 +236,7 @@ def communicate(self, *nargs, **kwargs) -> None: raise TimeoutExpired(["mock"], 123) api = API("mock", "mock", "mock", "mock", proxy=True) - mocker.patch("sdclientapi.Popen", MockedPopen) + mocker.patch("securedrop_client.sdk.Popen", MockedPopen) with pytest.raises(RequestTimeoutError): s = Submission(uuid="climateproblem") api.download_submission(s) @@ -245,7 +245,7 @@ def communicate(self, *nargs, **kwargs) -> None: def test_download_get_sources_error_request_timeout(mocker): api = API("mock", "mock", "mock", "mock", True) mocker.patch( - "sdclientapi.json_query", + "securedrop_client.sdk.json_query", return_value=( json.dumps( { @@ -264,7 +264,7 @@ def test_filename_key_not_in_download_response(mocker): api = API("mock", "mock", "mock", "mock", True) s = Submission(uuid="foobar") mocker.patch( - "sdclientapi.json_query", + "securedrop_client.sdk.json_query", return_value=( json.dumps({"body": json.dumps({"error": "wah"}), "status": 200, "headers": "foo"}) ), diff --git a/client/tests/sdk/test_shared.py b/client/tests/sdk/test_shared.py index 71a58d904..c1f7a5a88 100644 --- a/client/tests/sdk/test_shared.py +++ b/client/tests/sdk/test_shared.py @@ -3,7 +3,7 @@ import pytest -from sdclientapi.sdlocalobjects import Reply, ReplyError, Source, WrongUUIDError +from securedrop_client.sdk.sdlocalobjects import Reply, ReplyError, Source, WrongUUIDError NUM_REPLIES_PER_SOURCE = 2 diff --git a/client/tests/sdk/test_timestamps.py b/client/tests/sdk/test_timestamps.py index c76bd4151..fd2657826 100644 --- a/client/tests/sdk/test_timestamps.py +++ b/client/tests/sdk/test_timestamps.py @@ -3,7 +3,7 @@ import unittest from datetime import timedelta, timezone -from sdclientapi.timestamps import parse as parse_datetime +from securedrop_client.sdk.timestamps import parse as parse_datetime class TestTimestamps(unittest.TestCase): diff --git a/client/tests/sdk/utils.py b/client/tests/sdk/utils.py index a95065e1a..b10af3caf 100644 --- a/client/tests/sdk/utils.py +++ b/client/tests/sdk/utils.py @@ -3,7 +3,7 @@ from collections import OrderedDict from unittest.mock import MagicMock, patch -from sdclientapi import json_query +from securedrop_client.sdk import json_query # We are making calls to securedrop.Proxy qrexec service # in the QubesOS to get the data from the server. This is difficult to test @@ -90,14 +90,14 @@ def wrapper(self, *args, **kwargs): global CALLNUMBER global RES # This is the filename to store the results - filename = os.path.join("data", func.__name__ + ".json") + filename = os.path.join("tests/sdk/data", func.__name__ + ".json") if os.path.exists(filename): with open(filename) as fobj: RES = json.load(fobj) mock = MagicMock() mock.side_effect = mocked_json_query - with patch("sdclientapi.json_query", mock): + with patch("securedrop_client.sdk.json_query", mock): result = func(self, *args, **kwargs) if not os.path.exists(filename): diff --git a/client/tests/test_logic.py b/client/tests/test_logic.py index 51603539e..a3800abc7 100644 --- a/client/tests/test_logic.py +++ b/client/tests/test_logic.py @@ -13,7 +13,6 @@ import pytest import sqlalchemy.orm.exc from PyQt5.QtTest import QSignalSpy -from sdclientapi import AuthError, RequestTimeoutError, ServerConnectionError from sqlalchemy.orm import attributes from securedrop_client import db, state @@ -31,6 +30,7 @@ from securedrop_client.api_jobs.uploads import SendReplyJobError, SendReplyJobTimeoutError from securedrop_client.app import threads from securedrop_client.logic import APICallRunner, Controller +from securedrop_client.sdk import AuthError, RequestTimeoutError, ServerConnectionError from tests import factory MAX_SIGNAL_WAITING_TIME = 50 @@ -168,7 +168,7 @@ def test_Controller_login(homedir, config, mocker, session_maker): Using the `config` fixture to ensure the config is written to disk. """ mock_gui = mocker.MagicMock() - mock_api = mocker.patch("securedrop_client.logic.sdclientapi.API") + mock_api = mocker.patch("securedrop_client.sdk.API") co = Controller("http://localhost", mock_gui, session_maker, homedir, None) co.call_api = mocker.MagicMock() diff --git a/client/tests/test_queue.py b/client/tests/test_queue.py index 9b66d6e38..d0dd3feb0 100644 --- a/client/tests/test_queue.py +++ b/client/tests/test_queue.py @@ -5,7 +5,6 @@ import pytest from PyQt5.QtTest import QSignalSpy -from sdclientapi import RequestTimeoutError, ServerConnectionError from securedrop_client.api_jobs.base import ApiInaccessibleError, ClearQueueJob, PauseQueueJob from securedrop_client.api_jobs.downloads import ( @@ -17,6 +16,7 @@ from securedrop_client.api_jobs.uploads import SendReplyJob from securedrop_client.app import threads from securedrop_client.queue import ApiJobQueue, RunnableQueue +from securedrop_client.sdk import RequestTimeoutError, ServerConnectionError from tests import factory MAX_SIGNAL_WAITING_TIME = 50 diff --git a/client/tests/test_storage.py b/client/tests/test_storage.py index 57af44257..beffe4b04 100644 --- a/client/tests/test_storage.py +++ b/client/tests/test_storage.py @@ -10,12 +10,12 @@ import pytest from dateutil.parser import parse from PyQt5.QtCore import QThread -from sdclientapi import Reply, Submission from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm.exc import NoResultFound import securedrop_client.db from securedrop_client import db, utils +from securedrop_client.sdk import Reply, Submission from securedrop_client.storage import ( __update_submissions, _cleanup_directory_if_empty, @@ -56,7 +56,7 @@ def make_remote_message(source_uuid, file_counter=1): """ - Utility function for generating sdclientapi Message instances to act + Utility function for generating sdk Message instances to act upon in the following unit tests. The passed in source_uuid is used to generate a valid URL. """ @@ -75,7 +75,7 @@ def make_remote_message(source_uuid, file_counter=1): def make_remote_submission(source_uuid): """ - Utility function for generating sdclientapi Submission instances to act + Utility function for generating sdk Submission instances to act upon in the following unit tests. The passed in source_uuid is used to generate a valid URL. """ @@ -94,7 +94,7 @@ def make_remote_submission(source_uuid): def make_remote_reply(source_uuid, journalist_uuid="testymctestface"): """ - Utility function for generating sdclientapi Reply instances to act + Utility function for generating sdk Reply instances to act upon in the following unit tests. The passed in source_uuid is used to generate a valid URL. """ diff --git a/client/tests/test_sync.py b/client/tests/test_sync.py index 2d0a2caa4..e7e292547 100644 --- a/client/tests/test_sync.py +++ b/client/tests/test_sync.py @@ -1,8 +1,8 @@ import pytest -from sdclientapi import RequestTimeoutError, ServerConnectionError from securedrop_client.api_jobs.base import ApiInaccessibleError from securedrop_client.app import threads +from securedrop_client.sdk import RequestTimeoutError, ServerConnectionError from securedrop_client.sync import ApiSync From 7668862bab47c7a74bd4d7b1d170221bb5515c0a Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Dec 2023 13:02:40 -0500 Subject: [PATCH 626/751] client: Lower coverage requirement to 90% Requiring 100% means we end up writing useless tests for the purposes of reaching that threshold, let's lower it to 90% as something that's substantially high but not requiring perfection. --- client/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/Makefile b/client/Makefile index 3b78b3e31..24e2579a5 100644 --- a/client/Makefile +++ b/client/Makefile @@ -75,7 +75,7 @@ clean: ## Clean the workspace of generated resources TESTS ?= tests ITESTS ?= tests/integration FTESTS ?= tests/functional -TESTOPTS ?= -v --cov-config .coveragerc --cov-report html --cov-report term-missing --cov=securedrop_client --cov-fail-under 100 +TESTOPTS ?= -v --cov-config .coveragerc --cov-report html --cov-report term-missing --cov=securedrop_client --cov-fail-under 90 RANDOM_SEED ?= $(shell bash -c 'echo $$RANDOM') .PHONY: test From bec09d65d991861270d5ef89d96c5267d7e22ae2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Dec 2023 14:51:36 -0500 Subject: [PATCH 627/751] Fix mypy issues related to sdk types --- client/poetry.lock | 27 ++++++++- client/pyproject.toml | 1 + client/securedrop_client/api_jobs/base.py | 2 +- client/securedrop_client/logic.py | 2 +- client/securedrop_client/queue.py | 4 +- .../securedrop_client/sdk/sdlocalobjects.py | 55 +++++++++---------- client/securedrop_client/storage.py | 8 +-- client/securedrop_client/sync.py | 4 +- 8 files changed, 63 insertions(+), 40 deletions(-) diff --git a/client/poetry.lock b/client/poetry.lock index 9a8bcd8e8..72600896c 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -2164,6 +2164,20 @@ files = [ {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, ] +[[package]] +name = "types-requests" +version = "2.31.0.6" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.7" +files = [ + {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"}, + {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"}, +] + +[package.dependencies] +types-urllib3 = "*" + [[package]] name = "types-setuptools" version = "68.2.0.0" @@ -2175,6 +2189,17 @@ files = [ {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, ] +[[package]] +name = "types-urllib3" +version = "1.26.25.14" +description = "Typing stubs for urllib3" +optional = false +python-versions = "*" +files = [ + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, +] + [[package]] name = "typing-extensions" version = "4.8.0" @@ -2407,4 +2432,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "a6967fd73c5be222c268b94d4109bdde85ded215998f362b67bf16c930e2253b" +content-hash = "cd8fbb4a1446aef9ca3725d072875a367a66060eeadf37eb0e6056ebf86822f3" diff --git a/client/pyproject.toml b/client/pyproject.toml index 005a40366..662c80d70 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -50,6 +50,7 @@ semgrep = "*" translate-toolkit = "*" types-polib = "*" types-python-dateutil = "*" +types-requests = "^2.31.0" types-setuptools = "^68.0.0" [tool.black] diff --git a/client/securedrop_client/api_jobs/base.py b/client/securedrop_client/api_jobs/base.py index 8294f689d..0922adc6d 100644 --- a/client/securedrop_client/api_jobs/base.py +++ b/client/securedrop_client/api_jobs/base.py @@ -68,7 +68,7 @@ class ApiJob(QueueJob): def __init__(self, remaining_attempts: int = DEFAULT_NUM_ATTEMPTS) -> None: super().__init__(remaining_attempts) - def _do_call_api(self, api_client: API, session: Session) -> None: + def _do_call_api(self, api_client: Optional[API], session: Session) -> None: if not api_client: raise ApiInaccessibleError() diff --git a/client/securedrop_client/logic.py b/client/securedrop_client/logic.py index 0e99e2b3e..fd61024b9 100644 --- a/client/securedrop_client/logic.py +++ b/client/securedrop_client/logic.py @@ -368,7 +368,7 @@ def __init__( # type: ignore[no-untyped-def] self.gui = gui # Reference to the API for secure drop proxy. - self.api: sdk.API = None + self.api: Optional[sdk.API] = None # Store authenticated user self.authenticated_user: Union[db.User, None] = None diff --git a/client/securedrop_client/queue.py b/client/securedrop_client/queue.py index 38859df74..0b693f812 100644 --- a/client/securedrop_client/queue.py +++ b/client/securedrop_client/queue.py @@ -109,7 +109,7 @@ class RunnableQueue(QObject): def __init__( self, - api_client: API, + api_client: Optional[API], session_maker: scoped_session, queue_updated_signal: Optional[pyqtBoundSignal] = None, ) -> None: @@ -273,7 +273,7 @@ class ApiJobQueue(QObject): def __init__( self, - api_client: API, + api_client: Optional[API], session_maker: scoped_session, main_thread: QThread, download_file_thread: QThread, diff --git a/client/securedrop_client/sdk/sdlocalobjects.py b/client/securedrop_client/sdk/sdlocalobjects.py index c2f17be93..1804b22d7 100644 --- a/client/securedrop_client/sdk/sdlocalobjects.py +++ b/client/securedrop_client/sdk/sdlocalobjects.py @@ -81,22 +81,20 @@ def __init__(self, **kwargs) -> None: # type: ignore self.source_uuid = kwargs["source_uuid"] return - for key in [ - "filename", - "journalist_uuid", - "journalist_username", - "journalist_first_name", - "journalist_last_name", - "is_deleted_by_source", - "reply_url", - "size", - "source_url", - "uuid", - "seen_by", - ]: - if key not in kwargs: - AttributeError("Missing key {}".format(key)) - setattr(self, key, kwargs[key]) + try: + self.filename = kwargs["filename"] + self.journalist_uuid = kwargs["journalist_uuid"] + self.journalist_username = kwargs["journalist_username"] + self.journalist_first_name = kwargs["journalist_first_name"] + self.journalist_last_name = kwargs["journalist_last_name"] + self.is_deleted_by_source = kwargs["is_deleted_by_source"] + self.reply_url = kwargs["reply_url"] + self.size = kwargs["size"] + self.source_url = kwargs["source_url"] + self.uuid = kwargs["uuid"] + self.seen_by = kwargs["seen_by"] + except KeyError as err: + raise AttributeError("Missing key {}".format(err.args[0])) from err # Now let us set source uuid values = self.source_url.split("/") @@ -128,19 +126,18 @@ def __init__(self, **kwargs) -> None: # type: ignore self.source_uuid = kwargs["source_uuid"] return - for key in [ - "download_url", - "filename", - "is_read", - "size", - "source_url", - "submission_url", - "uuid", - "seen_by", - ]: - if key not in kwargs: - AttributeError("Missing key {}".format(key)) - setattr(self, key, kwargs[key]) + try: + self.download_url = kwargs["download_url"] + self.filename = kwargs["filename"] + self.is_read = kwargs["is_read"] + self.size = kwargs["size"] + self.source_url = kwargs["source_url"] + self.submission_url = kwargs["submission_url"] + self.uuid = kwargs["uuid"] + self.seen_by = kwargs["seen_by"] + except KeyError as err: + raise AttributeError("Missing key {}".format(err.args[0])) from err + _, self.source_uuid = self.source_url.rsplit("/", 1) def is_file(self) -> bool: diff --git a/client/securedrop_client/storage.py b/client/securedrop_client/storage.py index b7aca4879..2ac1c1e06 100644 --- a/client/securedrop_client/storage.py +++ b/client/securedrop_client/storage.py @@ -25,7 +25,7 @@ import shutil from datetime import datetime from pathlib import Path -from typing import Any, Dict, List, Optional, Tuple, Type, Union +from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union from dateutil.parser import parse from sqlalchemy import and_, desc, or_ @@ -57,7 +57,7 @@ logger = logging.getLogger(__name__) - +SubmissionOrReply = TypeVar("SubmissionOrReply", SDKSubmission, SDKReply) VALID_JOURNALIST_DESIGNATION = re.compile(r"^(?P[a-z'-]+) (?P[a-z'-]+)$").match VALID_FILENAME = re.compile( @@ -128,8 +128,8 @@ def get_remote_data(api: API) -> Tuple[List[SDKSource], List[SDKSubmission], Lis def sanitize_submissions_or_replies( - remote_sdk_objects: Union[List[SDKSubmission], List[SDKReply]] -) -> Union[List[SDKSubmission], List[SDKReply]]: + remote_sdk_objects: List[SubmissionOrReply], +) -> List[SubmissionOrReply]: """ Return submissions or replies that contain invalid strings, e.g. '1-../../traversed-msg'. """ diff --git a/client/securedrop_client/sync.py b/client/securedrop_client/sync.py index c21a4c616..5587bd623 100644 --- a/client/securedrop_client/sync.py +++ b/client/securedrop_client/sync.py @@ -26,7 +26,7 @@ class ApiSync(QObject): def __init__( self, - api_client: API, + api_client: Optional[API], session_maker: scoped_session, gpg: GpgHelper, data_dir: str, @@ -106,7 +106,7 @@ class ApiSyncBackgroundTask(QObject): def __init__( # type: ignore[no-untyped-def] self, - api_client: API, + api_client: Optional[API], session_maker: scoped_session, gpg: GpgHelper, data_dir: str, From 3845813de825fbe800aa2daee0fc10c5b667cafa Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Dec 2023 18:00:01 -0500 Subject: [PATCH 628/751] Add sdk test job that runs against an active server This is the same as the `test-against-latest-api` CircleCI job in the sdk repository. --- .github/workflows/sdk.yml | 38 ++++++++++++++++++++++++++++++++++++++ client/Makefile | 5 +++++ 2 files changed, 43 insertions(+) create mode 100644 .github/workflows/sdk.yml diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml new file mode 100644 index 000000000..812ec087d --- /dev/null +++ b/.github/workflows/sdk.yml @@ -0,0 +1,38 @@ +name: SDK +on: [push, pull_request] + +defaults: + run: + shell: bash + +jobs: + sdk-with-server: + runs-on: ubuntu-latest + env: + DOCKERIZE_VERSION: "v0.7.0" + steps: + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/securedrop" + path: "securedrop-server" + - uses: actions/setup-python@v5 + with: + python-version: "3.9" + - name: Install dependencies + run: | + pip install poetry==1.6.1 + wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && + tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && + rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz + - name: Run tests without VCR cassettes + run: | + # Start the server in the background + NUM_SOURCES=5 make -C securedrop-server dev & + # And install deps + poetry -C client install --no-ansi + # Wait for server to come up + dockerize -wait http://127.0.0.1:8080 -timeout 5m + # Run tests + rm client/tests/sdk/data/*.yml + make -C client test-sdk diff --git a/client/Makefile b/client/Makefile index 24e2579a5..3c7e97636 100644 --- a/client/Makefile +++ b/client/Makefile @@ -75,6 +75,7 @@ clean: ## Clean the workspace of generated resources TESTS ?= tests ITESTS ?= tests/integration FTESTS ?= tests/functional +STESTS ?= tests/sdk TESTOPTS ?= -v --cov-config .coveragerc --cov-report html --cov-report term-missing --cov=securedrop_client --cov-fail-under 90 RANDOM_SEED ?= $(shell bash -c 'echo $$RANDOM') @@ -104,6 +105,10 @@ test-integration: ## Run the integration tests test-functional: ## Run the functional tests @./test-functional.sh +.PHONY: test-sdk +test-sdk: ## Run just the sdk tests + @poetry run pytest -v $(STESTS) + .PHONY: lint lint: ## Run the linters @poetry run flake8 securedrop_client tests From fc6fd1337493eb9310a9cf32e0f0f313fb2ba065 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 9 Jan 2024 00:24:43 -0500 Subject: [PATCH 629/751] Enable dependabot for GitHub Actions --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..5ace4600a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" From b2a75faaa5ba69a5277a1188aa1d87eb75931afc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:08:28 +0000 Subject: [PATCH 630/751] Bump gitpython from 3.1.40 to 3.1.41 in /log Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.40 to 3.1.41. - [Release notes](https://github.com/gitpython-developers/GitPython/releases) - [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) - [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.40...3.1.41) --- updated-dependencies: - dependency-name: gitpython dependency-type: indirect ... Signed-off-by: dependabot[bot] --- log/poetry.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/log/poetry.lock b/log/poetry.lock index 85f1d56c4..cc7ad1e0d 100644 --- a/log/poetry.lock +++ b/log/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "bandit" @@ -209,20 +209,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.40" +version = "3.1.41" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, - {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, + {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, + {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] [[package]] name = "idna" @@ -552,24 +552,24 @@ python-versions = ">=3.6" files = [ {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, @@ -577,7 +577,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, @@ -585,7 +585,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, @@ -593,7 +593,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, From 2dfc67bb229352ccc1437b5bd9fb8d06713ca7da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:08:39 +0000 Subject: [PATCH 631/751] Bump gitpython from 3.1.37 to 3.1.41 in /proxy Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.37 to 3.1.41. - [Release notes](https://github.com/gitpython-developers/GitPython/releases) - [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) - [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.37...3.1.41) --- updated-dependencies: - dependency-name: gitpython dependency-type: indirect ... Signed-off-by: dependabot[bot] --- proxy/poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/proxy/poetry.lock b/proxy/poetry.lock index 784188f39..c0ccdad37 100644 --- a/proxy/poetry.lock +++ b/proxy/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "bandit" @@ -234,20 +234,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.37" +version = "3.1.41" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, - {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, + {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, + {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] [[package]] name = "idna" From 62cc92be67215ca635c822349a6ac0049453ab6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:10:15 +0000 Subject: [PATCH 632/751] Bump gitpython from 3.1.40 to 3.1.41 in /client Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.40 to 3.1.41. - [Release notes](https://github.com/gitpython-developers/GitPython/releases) - [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) - [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.40...3.1.41) --- updated-dependencies: - dependency-name: gitpython dependency-type: indirect ... Signed-off-by: dependabot[bot] --- client/poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/poetry.lock b/client/poetry.lock index 72600896c..3e2f0ebde 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "alembic" @@ -437,20 +437,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.40" +version = "3.1.41" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, - {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, + {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, + {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] [[package]] name = "glom" From 86caee48c7cbdefd0b7997d18947944320d56b97 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Thu, 18 Jan 2024 12:41:15 -0500 Subject: [PATCH 633/751] Update copyright message in messages.pot --- client/securedrop_client/locale/messages.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index 3b84630b6..2710d75bb 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -1,7 +1,7 @@ # Translations template for SecureDrop Client. -# Copyright (C) 2023 Freedom of the Press Foundation +# Copyright (C) 2024 Freedom of the Press Foundation # This file is distributed under the same license as the SecureDrop Client project. -# FIRST AUTHOR , 2023. +# FIRST AUTHOR , 2024. # #, fuzzy msgid "" From 35e743f936b05c44cc88258ea19b599f48057ddf Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 5 Feb 2024 11:19:21 -0500 Subject: [PATCH 634/751] Build and push nightly packages As part of our monorepo consolidation, we're moving the nightly package building from the securedrop-builder repository to here. The overall process is the same, we build the packages for bullseye and bookworm, then push buildinfo files and then push debs. Some changes: * nightlies will not be pushed if the bookworm job fails. This is largely to simplify the configuration and also because we're going to move to bookworm pretty soon. * Authentication will be done via a GitHub token, which will be configured by infra. * Running `clean-old-packages` will happen via the securedrop-apt-test repository itself instead of during nightly builds. Fixes #1776. --- .github/workflows/nightlies.yml | 79 +++++++++++++++++++++++++++++++++ scripts/build-debs.sh | 1 + scripts/fixup-changelog.sh | 13 +++++- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/nightlies.yml diff --git a/.github/workflows/nightlies.yml b/.github/workflows/nightlies.yml new file mode 100644 index 000000000..a9d2fba86 --- /dev/null +++ b/.github/workflows/nightlies.yml @@ -0,0 +1,79 @@ +name: Nightlies +on: + schedule: + - cron: "0 6 * * *" + +defaults: + run: + shell: bash + +jobs: + build-debs: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + outputs: + artifact_id: ${{ steps.upload.outputs.artifact-id }} + steps: + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/securedrop-builder" + path: "securedrop-builder" + lfs: true + - name: Build packages + run: | + git config --global --add safe.directory '*' + NIGHTLY=1 DEBIAN_VERSION=${{ matrix.debian_version }} BUILDER=securedrop-builder \ + ./scripts/build-debs.sh + - uses: actions/upload-artifact@v4 + id: upload + with: + name: build-${{ matrix.debian_version }} + path: build + if-no-files-found: error + + commit-and-push: + runs-on: ubuntu-latest + container: debian:bookworm + needs: + - build-debs + steps: + - name: Install dependencies + run: | + apt-get update && apt-get install --yes git git-lfs + - uses: actions/download-artifact@v4 + with: + pattern: "*${{ matrix.debian_version }}" + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/securedrop-apt-test" + path: "securedrop-apt-test" + lfs: true + token: ${{ secrets.PUSH_TOKEN }} + - uses: actions/checkout@v4 + with: + repository: "freedomofpress/build-logs" + path: "build-logs" + token: ${{ secrets.PUSH_TOKEN }} + - name: Commit and push + run: | + git config --global user.email "securedrop@freedom.press" + git config --global user.name "sdcibot" + # First publish buildinfo files + cd build-logs + mkdir -p "buildinfo/$(date +%Y)" + cp -v ../build-*/*.buildinfo "buildinfo/$(date +%Y)" + git add . + git diff-index --quiet HEAD || git commit -m "Publishing buildinfo files for workstation nightlies" + git push origin main + # Now the packages themselves + cd ../securedrop-apt-test + cp -v ../build-bullseye/*.deb workstation/bullseye-nightlies/ + cp -v ../build-bookworm/*.deb workstation/bookworm-nightlies/ + git add . + git diff-index --quiet HEAD || git commit -m "Automated SecureDrop workstation build" + git push origin main diff --git a/scripts/build-debs.sh b/scripts/build-debs.sh index 574cf288b..1986146de 100755 --- a/scripts/build-debs.sh +++ b/scripts/build-debs.sh @@ -38,5 +38,6 @@ $OCI_BIN pull debian:${DEBIAN_VERSION} $OCI_BIN run --rm $OCI_RUN_ARGUMENTS \ -v "${BUILDER}:/builder:Z" \ + --env NIGHTLY="${NIGHTLY:-}" \ --entrypoint "/src/scripts/build-debs-real.sh" \ debian:${DEBIAN_VERSION} diff --git a/scripts/fixup-changelog.sh b/scripts/fixup-changelog.sh index 97d70b54b..df7c182be 100755 --- a/scripts/fixup-changelog.sh +++ b/scripts/fixup-changelog.sh @@ -10,5 +10,14 @@ if [[ "$VERSION_CODENAME" == "" ]]; then VERSION_CODENAME=$(echo $PRETTY_NAME | awk '{split($0, a, "[ /]"); print a[4]}') fi -version=$(dpkg-parsechangelog -S Version) -sed -i "0,/${version}/ s//${version}+${VERSION_CODENAME}/" debian/changelog +VERSION=$(dpkg-parsechangelog -S Version) + +NIGHTLY="${NIGHTLY:-}" +if [[ ! -z $NIGHTLY ]]; then + NEW_VERSION="${VERSION}.dev$(date +%Y%m%d%H%M%S)" +else + NEW_VERSION=$VERSION +fi + +# Ideally we'd use `dch` here but then we'd to install all of devscripts +sed -i "0,/${VERSION}/ s//${NEW_VERSION}+${VERSION_CODENAME}/" debian/changelog From d88de458422e3518ed96da73aea2e8bb738b1f5d Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 5 Feb 2024 15:03:03 -0500 Subject: [PATCH 635/751] Enable dependabot for Python dev dependencies prod dependencies require manual work (building wheels), but we should be fine for dependabot doing dev updates. Unfortunately we have to configure each component manually, oh well. Fixes #1774. --- .github/dependabot.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5ace4600a..ad77c741f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,3 +4,29 @@ updates: directory: "/" schedule: interval: "weekly" + + # Python development dependencies + - package-ecosystem: "pip" + directory: "/client" + schedule: + interval: "weekly" + allow: + - dependency-type: "development" + - package-ecosystem: "pip" + directory: "/export" + schedule: + interval: "weekly" + allow: + - dependency-type: "development" + - package-ecosystem: "pip" + directory: "/log" + schedule: + interval: "weekly" + allow: + - dependency-type: "development" + - package-ecosystem: "pip" + directory: "/proxy" + schedule: + interval: "weekly" + allow: + - dependency-type: "development" From e3a9faec6a090b6b0640e8f4516289cab0c8e348 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 6 Feb 2024 10:10:33 -0500 Subject: [PATCH 636/751] Document options for build-debs.sh --- scripts/build-debs.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/build-debs.sh b/scripts/build-debs.sh index 1986146de..7852cad2a 100755 --- a/scripts/build-debs.sh +++ b/scripts/build-debs.sh @@ -1,6 +1,12 @@ #!/bin/bash # shellcheck disable=SC2209,SC2086 -# Build packages. This runs *outside* the container. +# Build packages! This script is configured by environment variables: +# `BUILDER`: relative path to the securedrop-builder repository, +# defaults to "../securedrop-builder" +# `DEBIAN_VERSION`: codename to build for, defaults to "bullseye" +# `NIGHTLY`: if set, add current time to the version number + +# This script runs *outside* the container. set -euxo pipefail From b1f97c204daa6eb6c78bf616701e1ff42cf998e6 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 6 Feb 2024 09:27:09 -0500 Subject: [PATCH 637/751] Lint .desktop files in CI This ports the `lint-desktop-files` CI job from the securedrop-builder repository. --- .github/workflows/ci.yml | 23 +++++++++++++++++++++++ Makefile | 23 +++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 Makefile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..5a976dec2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI +on: [push, pull_request] + +defaults: + run: + shell: bash + +jobs: + lint-desktop: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git make desktop-file-utils + - uses: actions/checkout@v4 + - name: Lint .desktop files + run: | + make lint-desktop diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..246675e18 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +.PHONY: all +all: help + +.PHONY: lint-desktop +lint-desktop: ## Lint .desktop files + # See: https://www.freedesktop.org/wiki/Software/desktop-file-utils/ + find . -name *.desktop -type f -not -path '*/\.git/*' | xargs desktop-file-validate + + +# Explanation of the below shell command should it ever break. +# 1. Set the field separator to ": ##" and any make targets that might appear between : and ## +# 2. Use sed-like syntax to remove the make targets +# 3. Format the split fields into $$1) the target name (in blue) and $$2) the target description +# 4. Pass this file as an arg to awk +# 5. Sort it alphabetically +# 6. Format columns with colon as delimiter. +.PHONY: help +help: ## Print this message and exit. + @printf "Makefile for developing and testing the SecureDrop client.\n" + @printf "Subcommands:\n\n" + @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) \ + | sort \ + | column -s ':' -t From 9fc0cd90a83b653d849bb2f643dadde9c7e771a5 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 6 Feb 2024 11:01:47 -0500 Subject: [PATCH 638/751] Add "Status" section to PR template Just like the server repository has. Also switch the headers to level 2, so they're not so giant. --- .github/pull_request_template.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 505661ad6..81bcbb00e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,11 +1,15 @@ -# Description +## Status + +Ready for review / Work in progress + +## Description Fixes #issue. -# Test Plan +## Test Plan -# Checklist +## Checklist If these changes modify code paths involving cryptography, the opening of files in VMs or network (via the RPC service) traffic, Qubes testing in the staging environment is required. For fine tuning of the graphical user interface, testing in any environment in Qubes is required. Please check as applicable: From 62dc60eb452ed3805908b30df51dd5e80208aff0 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 6 Feb 2024 16:07:16 -0500 Subject: [PATCH 639/751] Use --require-hashes when installing requirements.txt This is mostly a safety measure, as pip will automatically enable require hashes mode when it sees hashes in the requirements.txt file. Previously we couldn't do this because dh-virtualenv wasn't flexible enough, but we've now dropped that and can do it directly! Fixes #1791. --- debian/setup-venv.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/setup-venv.sh b/debian/setup-venv.sh index 7b303de33..b5acb6dd0 100644 --- a/debian/setup-venv.sh +++ b/debian/setup-venv.sh @@ -11,7 +11,8 @@ WHEELS_DIR="/builder/securedrop-${NAME}/wheels" PIP_ARGS="--ignore-installed --no-index --find-links ${WHEELS_DIR} --no-deps --no-cache-dir --no-use-pep517" /usr/bin/python3 -m virtualenv $VENV_ARGS ./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME} -./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME}/bin/pip install $PIP_ARGS -r ${NAME}/build-requirements.txt +./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME}/bin/pip install $PIP_ARGS --require-hashes \ + -r ${NAME}/build-requirements.txt ./debian/securedrop-${NAME}/opt/venvs/securedrop-${NAME}/bin/pip install $PIP_ARGS ./${NAME} # Adjust paths to reflect installed paths From 81f50b03fd979cdcb8ea165f3435bdaadfceb12e Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 8 Feb 2024 15:52:08 -0500 Subject: [PATCH 640/751] Add "build-debs" make target Just like SD server. --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 246675e18..bcb999216 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ .PHONY: all all: help +.PHONY: build-debs +build-debs: ## Build Debian packages + ./scripts/build-debs.sh + .PHONY: lint-desktop lint-desktop: ## Lint .desktop files # See: https://www.freedesktop.org/wiki/Software/desktop-file-utils/ From eecbec723502cc972fbee2718d9039a4b2001c4b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 9 Feb 2024 16:39:39 -0500 Subject: [PATCH 641/751] Skip CI jobs for proxy on bookworm These are failing because of . Our plan is to just replace them entirely with proxy v2, so just skip these jobs for now so commits can at least get a green check again. --- .circleci/config.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9b4a28a69..40d55b438 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -441,13 +441,19 @@ workflows: securedrop_proxy_ci: jobs: &proxy_jobs - proxy_unit-test: - matrix: *matrix + # bookworm jobs are failing and will be + # replaced with proxy v2 shortly, so skip + # https://github.com/freedomofpress/securedrop-client/issues/1681 + matrix: &proxy_matrix + parameters: + image: + - bullseye - proxy_lint: - matrix: *matrix + matrix: *proxy_matrix - proxy_check-security: - matrix: *matrix + matrix: *proxy_matrix - proxy_check-python-security: - matrix: *matrix + matrix: *proxy_matrix client_nightly: triggers: From 9792fa7bee27f886ca0671bb6b5fe94a8dbfb91f Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 6 Feb 2024 16:02:43 -0500 Subject: [PATCH 642/751] Centralize CI for bandit and safety Both of these projects can be run centrally across all components and don't need to be installed and configured separately four times. This also identifies and fixes that bandit wasn't being run on export (though the issue it flagged was a false positive). Refs #1773. --- .circleci/config.yml | 78 +-- .github/dependabot.yml | 6 + .github/workflows/ci.yml | 43 ++ Makefile | 13 + client/Makefile | 18 +- client/poetry.lock | 153 +---- client/pyproject.toml | 2 - export/Makefile | 5 - export/poetry.lock | 72 +-- export/pyproject.toml | 1 - export/securedrop_export/directory.py | 2 +- log/Makefile | 12 - log/poetry.lock | 567 +--------------- log/pyproject.toml | 2 - poetry.lock | 886 ++++++++++++++++++++++++++ proxy/Makefile | 15 +- proxy/poetry.lock | 283 +------- proxy/pyproject.toml | 2 - pyproject.toml | 16 + 19 files changed, 982 insertions(+), 1194 deletions(-) create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/.circleci/config.yml b/.circleci/config.yml index 40d55b438..26e139e0e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -76,7 +76,7 @@ common-steps: name: Run static analysis on source code to find security issues command: | set -e - make -C client semgrep bandit + make -C client semgrep - &client_check_source_strings run: @@ -92,13 +92,6 @@ common-steps: set -e make -C client verify-mo - - &client_check_python_dependencies_for_vulnerabilities - run: - name: Check Python dependencies for known vulnerabilities - command: | - set -e - make -C client safety - - &export_install_poetry run: name: Install Poetry @@ -145,12 +138,6 @@ common-steps: command: | make -C export semgrep - - &export_check_python_dependencies_for_vulnerabilities - run: - name: Check Python dependencies for known vulnerabilities - command: | - make -C export safety - - &log_install_poetry run: name: Install Poetry @@ -223,24 +210,6 @@ common-steps: command: | make -C proxy lint - - &proxy_check_security - run: - name: Run static analysis on source code to find security issues - command: | - set -e - cd proxy - poetry update bandit - make bandit - - - &proxy_check_python_dependencies_for_vulnerabilities - run: - name: Check Python dependencies for known vulnerabilities - command: | - set -e - cd proxy - poetry update safety - make safety - version: 2.1 jobs: @@ -295,16 +264,6 @@ jobs: - *client_install_testing_dependencies - *client_check_security - client_check-python-security: - parameters: *parameters - docker: *docker - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_check_python_dependencies_for_vulnerabilities - - client_check-internationalization: parameters: *parameters docker: *docker @@ -344,15 +303,6 @@ jobs: - *export_install_testing_dependencies - *export_check_security - export_check-python-security: - parameters: *parameters - docker: *docker - steps: - - *export_install_poetry - - checkout - - *export_install_testing_dependencies - - *export_check_python_dependencies_for_vulnerabilities - log_test-bullseye: docker: - image: debian:bullseye @@ -382,24 +332,6 @@ jobs: - *proxy_install_testing_dependencies - *proxy_run_lint - proxy_check-security: - parameters: *parameters - docker: *docker - steps: - - checkout - - *proxy_install_poetry - - *proxy_install_testing_dependencies - - *proxy_check_security - - proxy_check-python-security: - parameters: *parameters - docker: *docker - steps: - - checkout - - *proxy_install_poetry - - *proxy_install_testing_dependencies - - *proxy_check_python_dependencies_for_vulnerabilities - workflows: securedrop_client_ci: @@ -418,8 +350,6 @@ workflows: matrix: *matrix - client_check-security: matrix: *matrix - - client_check-python-security: - matrix: *matrix - client_check-internationalization: matrix: *matrix @@ -431,8 +361,6 @@ workflows: matrix: *matrix - export_check-security: matrix: *matrix - - export_check-python-security: - matrix: *matrix securedrop_log_ci: jobs: @@ -450,10 +378,6 @@ workflows: - bullseye - proxy_lint: matrix: *proxy_matrix - - proxy_check-security: - matrix: *proxy_matrix - - proxy_check-python-security: - matrix: *proxy_matrix client_nightly: triggers: diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ad77c741f..046d2fd27 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,6 +6,12 @@ updates: interval: "weekly" # Python development dependencies + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + allow: + - dependency-type: "development" - package-ecosystem: "pip" directory: "/client" schedule: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a976dec2..8c4b2cc38 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,3 +21,46 @@ jobs: - name: Lint .desktop files run: | make lint-desktop + + lint: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git make + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + poetry install + - name: Run lint + run: make lint + + safety: + runs-on: ubuntu-latest + container: debian:bookworm + steps: + - run: | + apt-get update && apt-get install --yes git make python3-poetry + - uses: actions/checkout@v4 + - name: Run safety + run: | + poetry install + poetry update safety + make safety diff --git a/Makefile b/Makefile index bcb999216..6706e758b 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,19 @@ lint-desktop: ## Lint .desktop files # See: https://www.freedesktop.org/wiki/Software/desktop-file-utils/ find . -name *.desktop -type f -not -path '*/\.git/*' | xargs desktop-file-validate +.PHONY: lint +lint: bandit ## Run linters and formatters + +bandit: ## Run bandit security checks + @poetry run bandit -c pyproject.toml -r . --severity-level medium + +safety: ## Run safety dependency checks on build dependencies + find . -name build-requirements.txt | xargs -n1 poetry run safety check --full-report \ + --ignore 51668 \ + --ignore 61601 \ + --ignore 61893 \ + --ignore 62044 \ + -r # Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## diff --git a/client/Makefile b/client/Makefile index 3c7e97636..92d0485ac 100644 --- a/client/Makefile +++ b/client/Makefile @@ -113,24 +113,8 @@ test-sdk: ## Run just the sdk tests lint: ## Run the linters @poetry run flake8 securedrop_client tests -.PHONY: safety -safety: ## Runs `safety check` to check python dependencies for vulnerabilities - @echo "Checking build-requirements.txt with safety" - @poetry run safety check --full-report \ - --ignore 51668 \ - --ignore 61601 \ - --ignore 61893 \ - --ignore 62044 \ - -r build-requirements.txt - -# Bandit is a static code analysis tool to detect security vulnerabilities in Python applications -# https://wiki.openstack.org/wiki/Security/Projects/Bandit -.PHONY: bandit -bandit: ## Run bandit with medium level excluding test-related folders - @poetry run bandit -ll --recursive . --exclude ./tests,./.venv - .PHONY: check -check: clean check-black check-isort semgrep bandit lint mypy test-random test-integration test-functional ## Run the full CI test suite +check: clean check-black check-isort semgrep lint mypy test-random test-integration test-functional ## Run the full CI test suite # Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## diff --git a/client/poetry.lock b/client/poetry.lock index 3e2f0ebde..5f8e2ddd0 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "alembic" @@ -58,29 +58,6 @@ files = [ {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] -[[package]] -name = "bandit" -version = "1.7.5" -description = "Security oriented static analyser for python code." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" -PyYAML = ">=5.3.1" -rich = "*" -stevedore = ">=1.20.0" - -[package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] -toml = ["tomli (>=1.1.0)"] -yaml = ["PyYAML"] - [[package]] name = "black" version = "23.10.1" @@ -311,25 +288,6 @@ cmdline = ["argcomplete", "progressbar"] comparators = ["androguard", "binwalk", "defusedxml", "guestfs", "jsondiff", "pypdf", "python-debian", "pyxattr", "rpm-python", "tlsh"] distro-detection = ["distro"] -[[package]] -name = "dparse" -version = "0.6.3" -description = "A parser for Python dependency files" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, - {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, -] - -[package.dependencies] -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv (<=2022.12.19)"] - [[package]] name = "easyprocess" version = "1.1" @@ -421,37 +379,6 @@ files = [ {file = "flaky-3.7.0.tar.gz", hash = "sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d"}, ] -[[package]] -name = "gitdb" -version = "4.0.11" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.41" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, - {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] - [[package]] name = "glom" version = "22.1.0" @@ -1026,17 +953,6 @@ files = [ {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] -[[package]] -name = "pbr" -version = "6.0.0" -description = "Python Build Reasonableness" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, - {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, -] - [[package]] name = "peewee" version = "3.17.0" @@ -1680,6 +1596,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -1968,29 +1885,6 @@ files = [ dev = ["pre-commit (==3.5.0)", "pytest (==7.4.2)", "pytest-tldr (==0.2.5)", "setuptools-scm[toml] (==8.0.4)", "tox (==4.11.3)"] docs = ["furo (==2023.9.10)", "pyenchant (==3.2.2)", "sphinx (==7.1.2)", "sphinx (==7.2.6)", "sphinx-autobuild (==2021.3.14)", "sphinx-copybutton (==0.5.2)", "sphinx-tabs (==3.4.1)", "sphinxcontrib-spelling (==8.0.0)"] -[[package]] -name = "safety" -version = "2.3.4" -description = "Checks installed dependencies for known vulnerabilities and licenses." -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, - {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - [[package]] name = "semgrep" version = "1.48.0" @@ -2027,22 +1921,6 @@ wcmatch = ">=8.3,<9.0" [package.extras] experiments = ["jsonnet (>=0.18,<1.0)"] -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - [[package]] name = "six" version = "1.11.0" @@ -2054,17 +1932,6 @@ files = [ {file = "six-1.11.0.tar.gz", hash = "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"}, ] -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - [[package]] name = "sqlalchemy" version = "1.3.3" @@ -2087,20 +1954,6 @@ postgresql-psycopg2binary = ["psycopg2-binary"] postgresql-psycopg2cffi = ["psycopg2cffi"] pymysql = ["pymysql"] -[[package]] -name = "stevedore" -version = "5.1.0" -description = "Manage dynamic plugins for Python applications" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, - {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, -] - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - [[package]] name = "tomli" version = "2.0.1" @@ -2432,4 +2285,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "cd8fbb4a1446aef9ca3725d072875a367a66060eeadf37eb0e6056ebf86822f3" +content-hash = "eaa5c61e943f687a0ba70b6c776bad87721ecf626252660e7aa6f5e83600ee82" diff --git a/client/pyproject.toml b/client/pyproject.toml index 662c80d70..703a839e4 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -28,7 +28,6 @@ PyQt5-sip = [ ] PyAutoGUI = "*" babel = "^2.12.1" -bandit = "*" black = "^23.7.0" diffoscope = "*" flake8 = "^6.0.0" @@ -45,7 +44,6 @@ pytest-qt = "^4.2.0" pytest-random-order = "*" pytest-vcr = "*" pytest-xdist = "^3.0.2" -safety = "*" semgrep = "*" translate-toolkit = "*" types-polib = "*" diff --git a/export/Makefile b/export/Makefile index b650fcb89..ad65eaade 100644 --- a/export/Makefile +++ b/export/Makefile @@ -1,11 +1,6 @@ .PHONY: all all: help -.PHONY: safety -safety: ## Runs `safety check` to check python dependencies for vulnerabilities - @echo "Running safety against build requirements…" - @poetry run safety check --full-report -r build-requirements.txt - .PHONY: check check: lint mypy semgrep test check-black ## Run linter and tests diff --git a/export/poetry.lock b/export/poetry.lock index e385fd54a..07624456b 100644 --- a/export/poetry.lock +++ b/export/poetry.lock @@ -314,25 +314,6 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] -[[package]] -name = "dparse" -version = "0.6.3" -description = "A parser for Python dependency files" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, - {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, -] - -[package.dependencies] -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv (<=2022.12.19)"] - [[package]] name = "exceptiongroup" version = "1.1.3" @@ -900,24 +881,24 @@ python-versions = ">=3.6" files = [ {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, @@ -925,7 +906,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, @@ -933,7 +914,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, @@ -941,7 +922,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, @@ -950,29 +931,6 @@ files = [ {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, ] -[[package]] -name = "safety" -version = "2.3.4" -description = "Checks installed dependencies for known vulnerabilities and licenses." -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, - {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - [[package]] name = "semgrep" version = "1.48.0" @@ -1009,22 +967,6 @@ wcmatch = ">=8.3,<9.0" [package.extras] experiments = ["jsonnet (>=0.18,<1.0)"] -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - [[package]] name = "tomli" version = "2.0.1" @@ -1091,4 +1033,4 @@ bracex = ">=2.1.1" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "6e18d52942bf002b4a5fe2f237bfe9f2a355a411e6b9443d3f1abf9a652d0d0b" +content-hash = "a6ea41bd444384f47314905d8d9187a11191193c667e85ae6b53c3ed095d3e73" diff --git a/export/pyproject.toml b/export/pyproject.toml index 3afb5b8ba..166a08e64 100644 --- a/export/pyproject.toml +++ b/export/pyproject.toml @@ -18,7 +18,6 @@ pytest = "^7.4.0" pytest-cov = "^4.1.0" pytest-mock = "^3.11.1" semgrep = "^1.31.2" -safety = "*" [tool.mypy] python_version = "3.9" diff --git a/export/securedrop_export/directory.py b/export/securedrop_export/directory.py index 4f5edf546..ac269dd93 100644 --- a/export/securedrop_export/directory.py +++ b/export/securedrop_export/directory.py @@ -77,7 +77,7 @@ def safe_extractall(archive_file_path: str, dest_path: str) -> None: if Path(file_info.linkname).is_absolute(): relative_filepath(file_info.linkname, dest_path) - tar.extractall(dest_path) + tar.extractall(dest_path) # nosec B202 def relative_filepath(filepath: Union[str, Path], base_dir: Union[str, Path]) -> Path: diff --git a/log/Makefile b/log/Makefile index dbf828e4a..0d5febc56 100644 --- a/log/Makefile +++ b/log/Makefile @@ -1,18 +1,6 @@ DEFAULT_GOAL: help SHELL := /bin/bash -# Bandit is a static code analysis tool to detect security vulnerabilities in Python applications -# https://wiki.openstack.org/wiki/Security/Projects/Bandit -.PHONY: bandit -bandit: ## Run bandit with medium level excluding test-related folders - @echo "Running bandit security checks…" - @poetry run bandit -ll --recursive . --exclude tests,.venv - -.PHONY: safety -safety: ## Runs `safety check` to check python dependencies for vulnerabilities - @echo "Running safety against build requirements…" - @poetry run safety check --full-report -r build-requirements.txt - .PHONY: check check: flake8 mypy test diff --git a/log/poetry.lock b/log/poetry.lock index cc7ad1e0d..b78141369 100644 --- a/log/poetry.lock +++ b/log/poetry.lock @@ -1,181 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "bandit" -version = "1.7.5" -description = "Security oriented static analyser for python code." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" -PyYAML = ">=5.3.1" -rich = "*" -stevedore = ">=1.20.0" - -[package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] -toml = ["tomli (>=1.1.0)"] -yaml = ["PyYAML"] - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "dparse" -version = "0.6.3" -description = "A parser for Python dependency files" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, - {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, -] - -[package.dependencies] -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv (<=2022.12.19)"] +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "flake8" @@ -193,72 +16,6 @@ mccabe = ">=0.7.0,<0.8.0" pycodestyle = ">=2.11.0,<2.12.0" pyflakes = ">=3.1.0,<3.2.0" -[[package]] -name = "gitdb" -version = "4.0.11" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.41" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, - {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - [[package]] name = "mccabe" version = "0.7.0" @@ -270,17 +27,6 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - [[package]] name = "mypy" version = "1.6.1" @@ -338,31 +84,6 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.6" -files = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "pbr" -version = "5.11.1" -description = "Python Build Reasonableness" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, -] - [[package]] name = "pycodestyle" version = "2.11.1" @@ -385,93 +106,6 @@ files = [ {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, ] -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pyparsing" -version = "3.1.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - [[package]] name = "redis" version = "3.3.11" @@ -486,186 +120,6 @@ files = [ [package.extras] hiredis = ["hiredis (>=0.1.3)"] -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "13.6.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, - {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "ruamel-yaml" -version = "0.18.5" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruamel.yaml-0.18.5-py3-none-any.whl", hash = "sha256:a013ac02f99a69cdd6277d9664689eb1acba07069f912823177c5eced21a6ada"}, - {file = "ruamel.yaml-0.18.5.tar.gz", hash = "sha256:61917e3a35a569c1133a8f772e1226961bf5a1198bea7e23f06a0841dea1ab0e"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.8" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.6" -files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, -] - -[[package]] -name = "safety" -version = "2.3.5" -description = "Checks installed dependencies for known vulnerabilities and licenses." -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.5-py3-none-any.whl", hash = "sha256:2227fcac1b22b53c1615af78872b48348661691450aa25d6704a5504dbd1f7e2"}, - {file = "safety-2.3.5.tar.gz", hash = "sha256:a60c11f8952f412cbb165d70cb1f673a3b43a2ba9a93ce11f97e6a4de834aa3a"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0,<22.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - -[[package]] -name = "stevedore" -version = "5.1.0" -description = "Manage dynamic plugins for Python applications" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, - {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, -] - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - [[package]] name = "tomli" version = "2.0.1" @@ -710,24 +164,7 @@ files = [ {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] -[[package]] -name = "urllib3" -version = "2.0.7" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, - {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "47eeeed0a2f5016dc51f59e43b2b823e8137076ca7e1720b1db5d836839aeec1" +content-hash = "6b6e6c0a957469d546257fde8ffeb4638455dd5d809f1690b0d44070520f5a07" diff --git a/log/pyproject.toml b/log/pyproject.toml index cbca5340e..b0bd2d160 100644 --- a/log/pyproject.toml +++ b/log/pyproject.toml @@ -15,8 +15,6 @@ flake8 = "^6.0.0" mypy = "^1.4.1" types-redis = "<4" types-setuptools = "^68.0.0" -bandit = "*" -safety = "*" [tool.mypy] python_version = "3.9" diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..268d63539 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,886 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "authlib" +version = "1.3.0" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Authlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:9637e4de1fb498310a56900b3e2043a206b03cb11c05422014b0302cbc814be3"}, + {file = "Authlib-1.3.0.tar.gz", hash = "sha256:959ea62a5b7b5123c5059758296122b57cd2585ae2ed1c0622c21b371ffdae06"}, +] + +[package.dependencies] +cryptography = "*" + +[[package]] +name = "bandit" +version = "1.7.7" +description = "Security oriented static analyser for python code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bandit-1.7.7-py3-none-any.whl", hash = "sha256:17e60786a7ea3c9ec84569fd5aee09936d116cb0cb43151023258340dbffb7ed"}, + {file = "bandit-1.7.7.tar.gz", hash = "sha256:527906bec6088cb499aae31bc962864b4e77569e9d529ee51df3a93b4b8ab28a"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +PyYAML = ">=5.3.1" +rich = "*" +stevedore = ">=1.20.0" + +[package.extras] +baseline = ["GitPython (>=3.1.30)"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] + +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cryptography" +version = "42.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-42.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:701171f825dcab90969596ce2af253143b93b08f1a716d4b2a9d2db5084ef7be"}, + {file = "cryptography-42.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:61321672b3ac7aade25c40449ccedbc6db72c7f5f0fdf34def5e2f8b51ca530d"}, + {file = "cryptography-42.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea2c3ffb662fec8bbbfce5602e2c159ff097a4631d96235fcf0fb00e59e3ece4"}, + {file = "cryptography-42.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b15c678f27d66d247132cbf13df2f75255627bcc9b6a570f7d2fd08e8c081d2"}, + {file = "cryptography-42.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8e88bb9eafbf6a4014d55fb222e7360eef53e613215085e65a13290577394529"}, + {file = "cryptography-42.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a047682d324ba56e61b7ea7c7299d51e61fd3bca7dad2ccc39b72bd0118d60a1"}, + {file = "cryptography-42.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:36d4b7c4be6411f58f60d9ce555a73df8406d484ba12a63549c88bd64f7967f1"}, + {file = "cryptography-42.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a00aee5d1b6c20620161984f8ab2ab69134466c51f58c052c11b076715e72929"}, + {file = "cryptography-42.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b97fe7d7991c25e6a31e5d5e795986b18fbbb3107b873d5f3ae6dc9a103278e9"}, + {file = "cryptography-42.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5fa82a26f92871eca593b53359c12ad7949772462f887c35edaf36f87953c0e2"}, + {file = "cryptography-42.0.2-cp37-abi3-win32.whl", hash = "sha256:4b063d3413f853e056161eb0c7724822a9740ad3caa24b8424d776cebf98e7ee"}, + {file = "cryptography-42.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:841ec8af7a8491ac76ec5a9522226e287187a3107e12b7d686ad354bb78facee"}, + {file = "cryptography-42.0.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:55d1580e2d7e17f45d19d3b12098e352f3a37fe86d380bf45846ef257054b242"}, + {file = "cryptography-42.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28cb2c41f131a5758d6ba6a0504150d644054fd9f3203a1e8e8d7ac3aea7f73a"}, + {file = "cryptography-42.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9097a208875fc7bbeb1286d0125d90bdfed961f61f214d3f5be62cd4ed8a446"}, + {file = "cryptography-42.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:44c95c0e96b3cb628e8452ec060413a49002a247b2b9938989e23a2c8291fc90"}, + {file = "cryptography-42.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2f9f14185962e6a04ab32d1abe34eae8a9001569ee4edb64d2304bf0d65c53f3"}, + {file = "cryptography-42.0.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:09a77e5b2e8ca732a19a90c5bca2d124621a1edb5438c5daa2d2738bfeb02589"}, + {file = "cryptography-42.0.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad28cff53f60d99a928dfcf1e861e0b2ceb2bc1f08a074fdd601b314e1cc9e0a"}, + {file = "cryptography-42.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:130c0f77022b2b9c99d8cebcdd834d81705f61c68e91ddd614ce74c657f8b3ea"}, + {file = "cryptography-42.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:fa3dec4ba8fb6e662770b74f62f1a0c7d4e37e25b58b2bf2c1be4c95372b4a33"}, + {file = "cryptography-42.0.2-cp39-abi3-win32.whl", hash = "sha256:3dbd37e14ce795b4af61b89b037d4bc157f2cb23e676fa16932185a04dfbf635"}, + {file = "cryptography-42.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:8a06641fb07d4e8f6c7dda4fc3f8871d327803ab6542e33831c7ccfdcb4d0ad6"}, + {file = "cryptography-42.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:087887e55e0b9c8724cf05361357875adb5c20dec27e5816b653492980d20380"}, + {file = "cryptography-42.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a7ef8dd0bf2e1d0a27042b231a3baac6883cdd5557036f5e8df7139255feaac6"}, + {file = "cryptography-42.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4383b47f45b14459cab66048d384614019965ba6c1a1a141f11b5a551cace1b2"}, + {file = "cryptography-42.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:fbeb725c9dc799a574518109336acccaf1303c30d45c075c665c0793c2f79a7f"}, + {file = "cryptography-42.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:320948ab49883557a256eab46149df79435a22d2fefd6a66fe6946f1b9d9d008"}, + {file = "cryptography-42.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5ef9bc3d046ce83c4bbf4c25e1e0547b9c441c01d30922d812e887dc5f125c12"}, + {file = "cryptography-42.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:52ed9ebf8ac602385126c9a2fe951db36f2cb0c2538d22971487f89d0de4065a"}, + {file = "cryptography-42.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:141e2aa5ba100d3788c0ad7919b288f89d1fe015878b9659b307c9ef867d3a65"}, + {file = "cryptography-42.0.2.tar.gz", hash = "sha256:e0ec52ba3c7f1b7d813cd52649a5b3ef1fc0d433219dc8c93827c57eab6cf888"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "dparse" +version = "0.6.4b0" +description = "A parser for Python dependency files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "dparse-0.6.4b0-py3-none-any.whl", hash = "sha256:592ff183348b8a5ea0a18442a7965e29445d3a26063654ec2c7e8ef42cd5753c"}, + {file = "dparse-0.6.4b0.tar.gz", hash = "sha256:f8d49b41a527f3d16a269f854e6665245b325e50e41d2c213810cb984553e5c8"}, +] + +[package.dependencies] +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +all = ["dparse[conda]", "dparse[pipenv]", "dparse[poetry]"] +conda = ["pyyaml"] +pipenv = ["pipenv"] +poetry = ["poetry"] + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "jinja2" +version = "3.1.3" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "marshmallow" +version = "3.20.2" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, + {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] +docs = ["alabaster (==0.7.15)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] +lint = ["pre-commit (>=2.4,<4.0)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pbr" +version = "6.0.0" +description = "Python Build Reasonableness" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, +] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pydantic" +version = "1.10.14" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.14-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4fcec873f90537c382840f330b90f4715eebc2bc9925f04cb92de593eae054"}, + {file = "pydantic-1.10.14-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e3a76f571970fcd3c43ad982daf936ae39b3e90b8a2e96c04113a369869dc87"}, + {file = "pydantic-1.10.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d886bd3c3fbeaa963692ef6b643159ccb4b4cefaf7ff1617720cbead04fd1d"}, + {file = "pydantic-1.10.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:798a3d05ee3b71967844a1164fd5bdb8c22c6d674f26274e78b9f29d81770c4e"}, + {file = "pydantic-1.10.14-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:23d47a4b57a38e8652bcab15a658fdb13c785b9ce217cc3a729504ab4e1d6bc9"}, + {file = "pydantic-1.10.14-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9f674b5c3bebc2eba401de64f29948ae1e646ba2735f884d1594c5f675d6f2a"}, + {file = "pydantic-1.10.14-cp310-cp310-win_amd64.whl", hash = "sha256:24a7679fab2e0eeedb5a8924fc4a694b3bcaac7d305aeeac72dd7d4e05ecbebf"}, + {file = "pydantic-1.10.14-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d578ac4bf7fdf10ce14caba6f734c178379bd35c486c6deb6f49006e1ba78a7"}, + {file = "pydantic-1.10.14-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa7790e94c60f809c95602a26d906eba01a0abee9cc24150e4ce2189352deb1b"}, + {file = "pydantic-1.10.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad4e10efa5474ed1a611b6d7f0d130f4aafadceb73c11d9e72823e8f508e663"}, + {file = "pydantic-1.10.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245f4f61f467cb3dfeced2b119afef3db386aec3d24a22a1de08c65038b255f"}, + {file = "pydantic-1.10.14-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:21efacc678a11114c765eb52ec0db62edffa89e9a562a94cbf8fa10b5db5c046"}, + {file = "pydantic-1.10.14-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:412ab4a3f6dbd2bf18aefa9f79c7cca23744846b31f1d6555c2ee2b05a2e14ca"}, + {file = "pydantic-1.10.14-cp311-cp311-win_amd64.whl", hash = "sha256:e897c9f35281f7889873a3e6d6b69aa1447ceb024e8495a5f0d02ecd17742a7f"}, + {file = "pydantic-1.10.14-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d604be0f0b44d473e54fdcb12302495fe0467c56509a2f80483476f3ba92b33c"}, + {file = "pydantic-1.10.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42c7d17706911199798d4c464b352e640cab4351efe69c2267823d619a937e5"}, + {file = "pydantic-1.10.14-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:596f12a1085e38dbda5cbb874d0973303e34227b400b6414782bf205cc14940c"}, + {file = "pydantic-1.10.14-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bfb113860e9288d0886e3b9e49d9cf4a9d48b441f52ded7d96db7819028514cc"}, + {file = "pydantic-1.10.14-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bc3ed06ab13660b565eed80887fcfbc0070f0aa0691fbb351657041d3e874efe"}, + {file = "pydantic-1.10.14-cp37-cp37m-win_amd64.whl", hash = "sha256:ad8c2bc677ae5f6dbd3cf92f2c7dc613507eafe8f71719727cbc0a7dec9a8c01"}, + {file = "pydantic-1.10.14-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c37c28449752bb1f47975d22ef2882d70513c546f8f37201e0fec3a97b816eee"}, + {file = "pydantic-1.10.14-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49a46a0994dd551ec051986806122767cf144b9702e31d47f6d493c336462597"}, + {file = "pydantic-1.10.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53e3819bd20a42470d6dd0fe7fc1c121c92247bca104ce608e609b59bc7a77ee"}, + {file = "pydantic-1.10.14-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbb503bbbbab0c588ed3cd21975a1d0d4163b87e360fec17a792f7d8c4ff29f"}, + {file = "pydantic-1.10.14-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:336709883c15c050b9c55a63d6c7ff09be883dbc17805d2b063395dd9d9d0022"}, + {file = "pydantic-1.10.14-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4ae57b4d8e3312d486e2498d42aed3ece7b51848336964e43abbf9671584e67f"}, + {file = "pydantic-1.10.14-cp38-cp38-win_amd64.whl", hash = "sha256:dba49d52500c35cfec0b28aa8b3ea5c37c9df183ffc7210b10ff2a415c125c4a"}, + {file = "pydantic-1.10.14-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c66609e138c31cba607d8e2a7b6a5dc38979a06c900815495b2d90ce6ded35b4"}, + {file = "pydantic-1.10.14-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d986e115e0b39604b9eee3507987368ff8148222da213cd38c359f6f57b3b347"}, + {file = "pydantic-1.10.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:646b2b12df4295b4c3148850c85bff29ef6d0d9621a8d091e98094871a62e5c7"}, + {file = "pydantic-1.10.14-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282613a5969c47c83a8710cc8bfd1e70c9223feb76566f74683af889faadc0ea"}, + {file = "pydantic-1.10.14-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:466669501d08ad8eb3c4fecd991c5e793c4e0bbd62299d05111d4f827cded64f"}, + {file = "pydantic-1.10.14-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:13e86a19dca96373dcf3190fcb8797d40a6f12f154a244a8d1e8e03b8f280593"}, + {file = "pydantic-1.10.14-cp39-cp39-win_amd64.whl", hash = "sha256:08b6ec0917c30861e3fe71a93be1648a2aa4f62f866142ba21670b24444d7fd8"}, + {file = "pydantic-1.10.14-py3-none-any.whl", hash = "sha256:8ee853cd12ac2ddbf0ecbac1c289f95882b2d4482258048079d13be700aa114c"}, + {file = "pydantic-1.10.14.tar.gz", hash = "sha256:46f17b832fe27de7850896f3afee50ea682220dd218f7e9c88d436788419dca6"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.7.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "safety" +version = "3.0.1" +description = "Checks installed dependencies for known vulnerabilities and licenses." +optional = false +python-versions = ">=3.7" +files = [ + {file = "safety-3.0.1-py3-none-any.whl", hash = "sha256:1ed058bc4bef132b974e58d7fcad020fb897cd255328016f8a5a194b94ca91d2"}, + {file = "safety-3.0.1.tar.gz", hash = "sha256:1f2000f03652f3a0bfc67f8fd1e98bc5723ccb76e15cb1bdd68545c3d803df01"}, +] + +[package.dependencies] +Authlib = ">=1.2.0" +Click = ">=8.0.2" +dparse = ">=0.6.4b0" +jinja2 = ">=3.1.0" +marshmallow = ">=3.15.0" +packaging = ">=21.0" +pydantic = ">=1.10.12,<2.0" +requests = "*" +rich = "*" +"ruamel.yaml" = ">=0.17.21" +safety-schemas = ">=0.0.1" +setuptools = ">=65.5.1" +typer = "*" +typing-extensions = ">=4.7.1" +urllib3 = ">=1.26.5" + +[package.extras] +github = ["pygithub (>=1.43.3)"] +gitlab = ["python-gitlab (>=1.3.0)"] +spdx = ["spdx-tools (>=0.8.2)"] + +[[package]] +name = "safety-schemas" +version = "0.0.2" +description = "Schemas for Safety tools" +optional = false +python-versions = ">=3.7" +files = [ + {file = "safety_schemas-0.0.2-py3-none-any.whl", hash = "sha256:277c077ce6e53221874a87c29515ffdd2f3773a6db4d035a9f67cc98db3b8c7f"}, + {file = "safety_schemas-0.0.2.tar.gz", hash = "sha256:7d1b040ec06480f05cff6b45ea7a93e09c8942df864fb0d01ddeb67c323cfa8c"}, +] + +[package.dependencies] +dparse = ">=0.6.4b0" +packaging = ">=21.0" +pydantic = "*" +ruamel-yaml = ">=0.17.21" +typing-extensions = ">=4.7.1" + +[[package]] +name = "setuptools" +version = "69.0.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "stevedore" +version = "5.1.0" +description = "Manage dynamic plugins for Python applications" +optional = false +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typer" +version = "0.9.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.6" +files = [ + {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, + {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, +] + +[package.dependencies] +click = ">=7.1.1,<9.0.0" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "urllib3" +version = "2.2.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, + {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "7e89123eb4b8aeab8c187bb9685e39a71c91a996b5ceb4229b04f0b4e89fc84c" diff --git a/proxy/Makefile b/proxy/Makefile index 5a5977972..a55836b46 100644 --- a/proxy/Makefile +++ b/proxy/Makefile @@ -3,19 +3,6 @@ .PHONY: all all: help -.PHONY: bandit -bandit: ## Run bandit with medium level excluding test-related folders - @echo "Running bandit security checks…" - @poetry run bandit -ll --recursive securedrop_proxy - -.PHONY: safety -safety: ## Runs `safety check` to check python dependencies for vulnerabilities - @echo "Running safety against build requirements…" - @poetry run safety check --full-report \ - --ignore 61601 \ - --ignore 61893 \ - -r build-requirements.txt - .PHONY: lint lint: check-isort check-black mypy ## Run isort, black and flake8 and mypy @poetry run flake8 securedrop_proxy tests @@ -56,7 +43,7 @@ browse-coverage: .coverage ## Generates and opens HTML coverage report @xdg-open htmlcov/index.html 2>/dev/null || open htmlcov/index.html 2>/dev/null .PHONY: check -check: clean lint test mypy safety bandit ## Runs all tests and code checkers +check: clean lint test mypy ## Runs all tests and code checkers .PHONY: clean clean: ## Clean the workspace of generated resources diff --git a/proxy/poetry.lock b/proxy/poetry.lock index c0ccdad37..56d15c7bd 100644 --- a/proxy/poetry.lock +++ b/proxy/poetry.lock @@ -1,27 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "bandit" -version = "1.7.5" -description = "Security oriented static analyser for python code." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" -PyYAML = ">=5.3.1" -rich = "*" -stevedore = ">=1.20.0" - -[package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] -toml = ["tomli (>=1.1.0)"] -yaml = ["PyYAML"] +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "black" @@ -183,25 +160,6 @@ files = [ [package.extras] toml = ["tomli"] -[[package]] -name = "dparse" -version = "0.6.3" -description = "A parser for Python dependency files" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, - {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, -] - -[package.dependencies] -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv (<=2022.12.19)"] - [[package]] name = "flake8" version = "6.1.0" @@ -218,37 +176,6 @@ mccabe = ">=0.7.0,<0.8.0" pycodestyle = ">=2.11.0,<2.12.0" pyflakes = ">=3.1.0,<3.2.0" -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.41" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, - {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] - [[package]] name = "idna" version = "3.2" @@ -277,30 +204,6 @@ pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib" plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - [[package]] name = "mccabe" version = "0.7.0" @@ -312,17 +215,6 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - [[package]] name = "multidict" version = "6.0.4" @@ -485,17 +377,6 @@ files = [ {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] -[[package]] -name = "pbr" -version = "5.11.1" -description = "Python Build Reasonableness" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, -] - [[package]] name = "platformdirs" version = "3.10.0" @@ -533,20 +414,6 @@ files = [ {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, ] -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - [[package]] name = "pyyaml" version = "5.4.1" @@ -606,152 +473,6 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "rich" -version = "13.5.3" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.5.3-py3-none-any.whl", hash = "sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9"}, - {file = "rich-13.5.3.tar.gz", hash = "sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "ruamel-yaml" -version = "0.17.32" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3" -files = [ - {file = "ruamel.yaml-0.17.32-py3-none-any.whl", hash = "sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447"}, - {file = "ruamel.yaml-0.17.32.tar.gz", hash = "sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, -] - -[[package]] -name = "safety" -version = "2.3.4" -description = "Checks installed dependencies for known vulnerabilities and licenses." -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, - {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - -[[package]] -name = "stevedore" -version = "5.1.0" -description = "Manage dynamic plugins for Python applications" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, - {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, -] - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - [[package]] name = "tomli" version = "2.0.1" @@ -1017,4 +738,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "8fe8dfaaea2b81e6262ab59080e35c12c680ac67cd1c3fe130b061f7ee4fa8ce" +content-hash = "3bad1cdfd1fe51eb00a9b6bb3d93b71537b4d710fb9cf821ae6921ec7de9e886" diff --git a/proxy/pyproject.toml b/proxy/pyproject.toml index c65f11a97..e88d28861 100644 --- a/proxy/pyproject.toml +++ b/proxy/pyproject.toml @@ -26,5 +26,3 @@ mypy = "^1.5.1" types-PyYAML = "^6.0.12.11" types-requests = "^2.31.0.2" vcrpy = "^5.1.0" -bandit = "*" -safety = "*" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..a881d888b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,16 @@ +[tool.poetry] +name = "client-tools" +version = "0.0.0" +description = "" +authors = ["SecureDrop Team"] +license = "AGPLv3+" + +[tool.poetry.dependencies] +python = "^3.9" + +[tool.poetry.group.dev.dependencies] +bandit = "*" +safety = "*" + +[tool.bandit] +exclude_dirs = ["client/tests", "export/tests", "log/tests", "proxy/tests"] From 2a7e16295834a750bb3dc6d9a7e2ecd49eb826d2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 12 Feb 2024 17:19:14 -0500 Subject: [PATCH 643/751] Group dependabot updates To cut down on the number of PRs opened, have dependabot group all the updates for a component in a single pull request. Refs #1823. --- .github/dependabot.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ad77c741f..fd50b8407 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,21 +12,33 @@ updates: interval: "weekly" allow: - dependency-type: "development" + groups: + dev-dependencies: + patterns: ["*"] - package-ecosystem: "pip" directory: "/export" schedule: interval: "weekly" allow: - dependency-type: "development" + groups: + dev-dependencies: + patterns: ["*"] - package-ecosystem: "pip" directory: "/log" schedule: interval: "weekly" allow: - dependency-type: "development" + groups: + dev-dependencies: + patterns: ["*"] - package-ecosystem: "pip" directory: "/proxy" schedule: interval: "weekly" allow: - dependency-type: "development" + groups: + dev-dependencies: + patterns: ["*"] From 678bf8dfb3d10278d6274c69dda36d6d49fdd88f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 16:02:35 +0000 Subject: [PATCH 644/751] Bump pillow from 10.1.0 to 10.2.0 in /client Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.1.0 to 10.2.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/10.1.0...10.2.0) --- updated-dependencies: - dependency-name: pillow dependency-type: indirect ... Signed-off-by: dependabot[bot] --- client/poetry.lock | 129 ++++++++++++++++++++++++++------------------- 1 file changed, 74 insertions(+), 55 deletions(-) diff --git a/client/poetry.lock b/client/poetry.lock index 3e2f0ebde..530456a14 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1049,70 +1049,88 @@ files = [ [[package]] name = "pillow" -version = "10.1.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "platformdirs" @@ -1680,6 +1698,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, From 3d464c82d85836bb97dd0dda69972af864b65a67 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 13 Feb 2024 11:10:01 -0500 Subject: [PATCH 645/751] Tell dependabot a bit harder we only want dev updates In it updated a production dependency, which we don't want. I'm not sure whether this will have an impact or whether it'll update it regardless since a dev dependency wants the newer urllib, we'll see. --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fd50b8407..8c45db395 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,6 +15,7 @@ updates: groups: dev-dependencies: patterns: ["*"] + dependency-type: "development" - package-ecosystem: "pip" directory: "/export" schedule: @@ -24,6 +25,7 @@ updates: groups: dev-dependencies: patterns: ["*"] + dependency-type: "development" - package-ecosystem: "pip" directory: "/log" schedule: @@ -33,6 +35,7 @@ updates: groups: dev-dependencies: patterns: ["*"] + dependency-type: "development" - package-ecosystem: "pip" directory: "/proxy" schedule: @@ -42,3 +45,4 @@ updates: groups: dev-dependencies: patterns: ["*"] + dependency-type: "development" From 4c2ccd85a7f8ae40ec4cc187250d3fc0bd2ef65f Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 13 Feb 2024 11:11:05 -0500 Subject: [PATCH 646/751] Have dependabot ignore pyqt* These are pinned to the Debian versions and shouldn't be updated. Plus dependabot errors on them anyways (e.g. ). --- .github/dependabot.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8c45db395..0b848f28c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,6 +12,8 @@ updates: interval: "weekly" allow: - dependency-type: "development" + ignore: + - dependency-name: "pyqt*" groups: dev-dependencies: patterns: ["*"] From 4937abdf201ecdf27f069543b5d0143741ea98c1 Mon Sep 17 00:00:00 2001 From: Cory Francis Myers Date: Tue, 13 Feb 2024 11:08:27 -0800 Subject: [PATCH 647/751] chore: update to Jinja2 3.1.3 for Safety 64227 --- client/build-requirements.txt | 2 +- client/poetry.lock | 12 ++++++------ client/pyproject.toml | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/build-requirements.txt b/client/build-requirements.txt index 84694f931..39f6d443d 100644 --- a/client/build-requirements.txt +++ b/client/build-requirements.txt @@ -3,7 +3,7 @@ arrow==0.12.1 --hash=sha256:e2742eb33011f7aff1d5f27501d802680b6627939f20ff2ef56f certifi==2023.7.22 --hash=sha256:920fc822272317b0d13e60eef0405ddd7f921e08dd21150a9eb613c863e31c2a charset-normalizer==2.0.4 --hash=sha256:cd9a4492eef4e5276c07f9c0dc1338e7be3e95f2a536bf2c5b620b1f27d03d74 idna==3.2 --hash=sha256:691d9fc304505c65ea9ceb8eb7385d63988e344c065cacbbd2156ff9bdfcf0c1 -jinja2==3.0.2 --hash=sha256:d8075dbbb594058c565a74b6ca2b6a1822c9cdd949400b747f87ec004edca036 +jinja2==3.1.3 --hash=sha256:764740680cf22a4a0b5d5dae8006fd5468310da0e81a6899d349cc4a44a0315f mako==1.2.2 --hash=sha256:f61384bcc80318821d1116891a82bb0ff18a9a4035c7c4eff72aced45ab590b5 markupsafe==2.0.1 --hash=sha256:e61445980f0dcd584d728844d8ad516c9e460bd71f53c14c0269d73de6fba6be --hash=sha256:9a055a175f351a559937fb80ebb2885d005283577a016c0139817e261fb759eb python-dateutil==2.7.5 --hash=sha256:2961735b604e5165d923a4e39b9bcbde6a4c363f257f5477b6339459fd7c1679 diff --git a/client/poetry.lock b/client/poetry.lock index d0d8e2bd9..6acbc0b2a 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "alembic" @@ -454,13 +454,13 @@ trio = ["async_generator", "trio"] [[package]] name = "jinja2" -version = "3.0.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"}, - {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -2303,4 +2303,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "eaa5c61e943f687a0ba70b6c776bad87721ecf626252660e7aa6f5e83600ee82" +content-hash = "b813db5bf3648d596c91e434efc71b72dd1a96c908637e4a739ae0a7611f495e" diff --git a/client/pyproject.toml b/client/pyproject.toml index 703a839e4..5a2a80513 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -8,7 +8,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.9" -Jinja2 = "^3.0.2" +Jinja2 = "3.1.3" SQLAlchemy = "^1.3.3" alembic = "^1.1.0" arrow = "^0.12.1" From 21d282e30790f2ba740fd9da090734ca1f54db47 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 9 Feb 2024 17:22:11 -0500 Subject: [PATCH 648/751] Add Rust scaffolding This adds all the various configuration and tooling to have a proxy written in Rust, some of which is copied from SecureDrop server. --- .cargo/audit.toml | 13 +++++++++++++ .github/workflows/cargo-vet.yml | 26 ++++++++++++++++++++++++++ .github/workflows/ci.yml | 15 +++++++++++++++ .github/workflows/security.yml | 16 ++++++++++++++++ Cargo.lock | 7 +++++++ Cargo.toml | 5 +++++ Makefile | 9 +++++++++ proxy/Cargo.toml | 8 ++++++++ proxy/src/main.rs | 5 +++++ rust-toolchain.toml | 2 ++ rustfmt.toml | 1 + supply-chain/audits.toml | 4 ++++ supply-chain/config.toml | 26 ++++++++++++++++++++++++++ supply-chain/imports.lock | 14 ++++++++++++++ 14 files changed, 151 insertions(+) create mode 100644 .cargo/audit.toml create mode 100644 .github/workflows/cargo-vet.yml create mode 100644 .github/workflows/security.yml create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 proxy/Cargo.toml create mode 100644 proxy/src/main.rs create mode 100644 rust-toolchain.toml create mode 100644 rustfmt.toml create mode 100644 supply-chain/audits.toml create mode 100644 supply-chain/config.toml create mode 100644 supply-chain/imports.lock diff --git a/.cargo/audit.toml b/.cargo/audit.toml new file mode 100644 index 000000000..8d3a93f2b --- /dev/null +++ b/.cargo/audit.toml @@ -0,0 +1,13 @@ +[advisories] +# advisory IDs to ignore e.g. ["RUSTSEC-2019-0001", ...] +ignore = [] + +# Output Configuration +[output] +deny = ["warnings"] +quiet = false + +# Target Configuration +[target] +arch = "x86_64" # Ignore advisories for CPU architectures other than this one +os = "linux" # Ignore advisories for operating systems other than this one diff --git a/.github/workflows/cargo-vet.yml b/.github/workflows/cargo-vet.yml new file mode 100644 index 000000000..49626a3a1 --- /dev/null +++ b/.github/workflows/cargo-vet.yml @@ -0,0 +1,26 @@ +# Roughly based off of https://mozilla.github.io/cargo-vet/configuring-ci.html + +name: cargo vet + +on: [push, pull_request] + +jobs: + cargo-vet: + name: Vet Dependencies + runs-on: ubuntu-latest + # Keep version in sync with rust-toolchain.toml + container: rust:1.74.1 + env: + CARGO_VET_VERSION: 0.9.0 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v2 + id: cache-vet + with: + path: /usr/local/cargo/bin/cargo-vet + key: cargo-vet-${{ env.CARGO_VET_VERSION }} + - name: Install the cargo-vet binary, if needed + if: ${{ steps.cache-vet.outputs.cache-hit != 'true' }} + run: cargo install --version ${{ env.CARGO_VET_VERSION }} cargo-vet + - name: Invoke cargo-vet + run: cargo vet --locked diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c4b2cc38..ea75e90e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,3 +64,18 @@ jobs: poetry install poetry update safety make safety + + rust: + runs-on: ubuntu-latest + # Keep version in sync with rust-toolchain.toml + container: rust:1.74.1 + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + rustup component add rustfmt + rustup component add clippy + - name: Lint and test Rust code + run: | + make rust-lint + make rust-test diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml new file mode 100644 index 000000000..d805ebc6a --- /dev/null +++ b/.github/workflows/security.yml @@ -0,0 +1,16 @@ +name: Security (cron) +on: + schedule: + - cron: '0 3 * * *' + +jobs: + rust-audit: + runs-on: ubuntu-latest + # Keep version in sync with rust-toolchain.toml + container: rust:1.74.1 + steps: + - uses: actions/checkout@v3 + - name: Check Rust dependencies + run: | + cargo install cargo-audit + cargo audit diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 000000000..af3bb1ddc --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "securedrop-proxy" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 000000000..a45ea05dc --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] +members = [ + "proxy" +] +resolver = "2" diff --git a/Makefile b/Makefile index 6706e758b..e68664145 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,15 @@ safety: ## Run safety dependency checks on build dependencies --ignore 62044 \ -r +.PHONY: rust-lint +rust-lint: ## Lint Rust code + cargo fmt --check + cargo clippy + +.PHONY: rust-test +rust-test: ## Run Rust tests + cargo test + # Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## # 2. Use sed-like syntax to remove the make targets diff --git a/proxy/Cargo.toml b/proxy/Cargo.toml new file mode 100644 index 000000000..e53e6e48a --- /dev/null +++ b/proxy/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "securedrop-proxy" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/proxy/src/main.rs b/proxy/src/main.rs new file mode 100644 index 000000000..148d5204f --- /dev/null +++ b/proxy/src/main.rs @@ -0,0 +1,5 @@ +#![deny(clippy::all)] + +fn main() { + println!("Hello, world!"); +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 000000000..27ae62c5b --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.74.1" diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 000000000..df99c6919 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +max_width = 80 diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml new file mode 100644 index 000000000..2772ccb21 --- /dev/null +++ b/supply-chain/audits.toml @@ -0,0 +1,4 @@ + +# cargo-vet audits file + +[audits] diff --git a/supply-chain/config.toml b/supply-chain/config.toml new file mode 100644 index 000000000..ab67610e6 --- /dev/null +++ b/supply-chain/config.toml @@ -0,0 +1,26 @@ + +# cargo-vet config file + +[cargo-vet] +version = "0.9" + +[imports.bytecode-alliance] +url = "https://raw.githubusercontent.com/bytecodealliance/wasmtime/main/supply-chain/audits.toml" + +[imports.google] +url = "https://raw.githubusercontent.com/google/supply-chain/main/audits.toml" + +[imports.isrg] +url = "https://raw.githubusercontent.com/divviup/libprio-rs/main/supply-chain/audits.toml" + +[imports.mozilla] +url = "https://raw.githubusercontent.com/mozilla/supply-chain/main/audits.toml" + +[imports.securedrop] +url = "https://raw.githubusercontent.com/freedomofpress/securedrop-supply-chain/main/audits.toml" + +[imports.zcash] +url = "https://raw.githubusercontent.com/zcash/rust-ecosystem/main/supply-chain/audits.toml" + +[policy.securedrop-proxy] +criteria = "safe-to-run" diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock new file mode 100644 index 000000000..916aeb90e --- /dev/null +++ b/supply-chain/imports.lock @@ -0,0 +1,14 @@ + +# cargo-vet imports lock + +[audits.bytecode-alliance.audits] + +[audits.google.audits] + +[audits.isrg.audits] + +[audits.mozilla.audits] + +[audits.securedrop.audits] + +[audits.zcash.audits] From c426c7396110de9f05f62bbed772c9ff73f63b94 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 12 Feb 2024 14:57:58 -0500 Subject: [PATCH 649/751] Make Rust toolchain available during package building So far we've been using an ad-hoc image in which the necessary dependencies are all downloaded at build time, which is nice for tooling simplicity but adds up the more things we need to download each time. This adopts the same system used in the SecureDrop server build process. The tooling builds an image with some dependencies and installs the minimal Rust toolchain in an image. The image_prop and dep-check scripts verify all the dependencies are up to date, and rebuild the image if not. --- scripts/Dockerfile | 28 ++++++++++++++++++++++++++++ scripts/build-debs.sh | 5 +++-- scripts/dep-check.sh | 11 +++++++++++ scripts/image_prep.sh | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 scripts/Dockerfile create mode 100755 scripts/dep-check.sh create mode 100644 scripts/image_prep.sh diff --git a/scripts/Dockerfile b/scripts/Dockerfile new file mode 100644 index 000000000..b06a5c85c --- /dev/null +++ b/scripts/Dockerfile @@ -0,0 +1,28 @@ +ARG DISTRO=bullseye +FROM debian:$DISTRO + +ENV PIP_DISABLE_PIP_VERSION_CHECK=1 +ENV PIP_PROGRESS_BAR=off +ENV CARGO_TERM_COLOR=never +ENV CARGO_TERM_PROGRESS_WHEN=never + +RUN apt-get update && apt-get --yes upgrade && apt-get install --yes build-essential curl + +# Keep in sync with rust-toolchain.toml +ENV RUST_VERSION 1.74.1 +ENV RUSTUP_VERSION 1.24.3 +ENV RUSTUP_INIT_SHA256 3dc5ef50861ee18657f9db2eeb7392f9c2a6c95c90ab41e45ab4ca71476b4338 +ENV RUSTUP_HOME /opt/rustup +ENV CARGO_HOME /opt/cargo + +# Install Rust using the same steps as +# 1) Download rustup-init and verify it matches hardcoded checksum +# 2) Run it to install rustup and the rustc/cargo "minimal" toolchain +# 3) Add `/opt/cargo/bin` to $PATH, which is where cargo & rustc are installed +RUN TMPDIR=`mktemp -d` && cd ${TMPDIR} \ + && curl --proto '=https' --tlsv1.2 -OO -sSf https://static.rust-lang.org/rustup/archive/${RUSTUP_VERSION}/x86_64-unknown-linux-gnu/rustup-init \ + && echo "${RUSTUP_INIT_SHA256} *rustup-init" | sha256sum -c - \ + && chmod +x rustup-init \ + && ./rustup-init --default-toolchain=${RUST_VERSION} --profile minimal -y \ + && cd && rm -rf ${TMPDIR} +ENV PATH "$PATH:/opt/cargo/bin/" diff --git a/scripts/build-debs.sh b/scripts/build-debs.sh index 7852cad2a..a8e6e01f8 100755 --- a/scripts/build-debs.sh +++ b/scripts/build-debs.sh @@ -39,11 +39,12 @@ fi export DEBIAN_VERSION="${DEBIAN_VERSION:-bullseye}" export OCI_RUN_ARGUMENTS export OCI_BIN +export CONTAINER="fpf.local/sd-client-builder-${DEBIAN_VERSION}" -$OCI_BIN pull debian:${DEBIAN_VERSION} +. ./scripts/image_prep.sh $OCI_BIN run --rm $OCI_RUN_ARGUMENTS \ -v "${BUILDER}:/builder:Z" \ --env NIGHTLY="${NIGHTLY:-}" \ --entrypoint "/src/scripts/build-debs-real.sh" \ - debian:${DEBIAN_VERSION} + $CONTAINER diff --git a/scripts/dep-check.sh b/scripts/dep-check.sh new file mode 100755 index 000000000..0831fbf1f --- /dev/null +++ b/scripts/dep-check.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Check if there are outstanding updates. This runs *inside* the container. + +apt-get update +if apt-get upgrade -s | grep Inst; then + # We will catch status=42 in the outer wrapper and trigger + # a rebuild of the image to pull in the updates + exit 42 +fi + +exit 0 diff --git a/scripts/image_prep.sh b/scripts/image_prep.sh new file mode 100644 index 000000000..2b981a310 --- /dev/null +++ b/scripts/image_prep.sh @@ -0,0 +1,39 @@ +set -euxo pipefail +# Build the container if necessary. This runs *outside* the container. + +cd "$(git rev-parse --show-toplevel)" + +# First see if the image exists or not +missing=false +$OCI_BIN inspect $CONTAINER > /dev/null 2>&1 || missing=true + +if $missing; then + # Build it if it doesn't + $OCI_BIN build -t $CONTAINER scripts/ --no-cache \ + --build-arg DISTRO=$DEBIAN_VERSION +fi + +# Uncomment the following for fast development on adjusting builder logic +# $OCI_BIN build -t $CONTAINER scripts/ + +# Run the dependency check +status=0 +$OCI_BIN run --rm $OCI_RUN_ARGUMENTS \ + --entrypoint "/src/scripts/dep-check.sh" $CONTAINER || status=$? + +if [[ $status == 42 ]]; then + # There are some pending updates, so force rebuilding the image from scratch + # and try again! + echo "Rebuilding container to update dependencies" + $OCI_BIN rmi $CONTAINER + $OCI_BIN build -t $CONTAINER scripts/ --no-cache + # Reset $status and re-run the dependency check + status=0 + $OCI_BIN run --rm $OCI_RUN_ARGUMENTS \ + --entrypoint "/src/scripts/dep-check.sh" $CONTAINER || status=$? +fi + +if [[ $status != 0 ]]; then + # If there's some other error, exit now + exit $status +fi From 1dc4a4fc7d65a7a0d64bbfd111e141a4f9a5960a Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 15 Feb 2024 15:52:53 -0500 Subject: [PATCH 650/751] Standardize `make lint` target in components In some places the `lint` target is just flake8 and in others it runs all linters. Adopt the latter definition to ensure that `make lint` runs all tools that don't run any code. --- client/Makefile | 9 ++++++--- export/Makefile | 10 +++++++--- log/Makefile | 5 ++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/client/Makefile b/client/Makefile index 92d0485ac..afa117fc8 100644 --- a/client/Makefile +++ b/client/Makefile @@ -109,12 +109,15 @@ test-functional: ## Run the functional tests test-sdk: ## Run just the sdk tests @poetry run pytest -v $(STESTS) -.PHONY: lint -lint: ## Run the linters +.PHONY: flake8 +flake8: ## Run flake8 linting @poetry run flake8 securedrop_client tests +.PHONY: lint +lint: check-black check-isort flake8 mypy semgrep ## Run all linters + .PHONY: check -check: clean check-black check-isort semgrep lint mypy test-random test-integration test-functional ## Run the full CI test suite +check: clean lint test-random test-integration test-functional ## Run the full CI test suite # Explanation of the below shell command should it ever break. # 1. Set the field separator to ": ##" and any make targets that might appear between : and ## diff --git a/export/Makefile b/export/Makefile index ad65eaade..ba88300a9 100644 --- a/export/Makefile +++ b/export/Makefile @@ -1,8 +1,12 @@ .PHONY: all all: help +.PHONY: lint +lint: check-black flake8 mypy semgrep ## Run all linters + + .PHONY: check -check: lint mypy semgrep test check-black ## Run linter and tests +check: lint test ## Run linter and tests .PHONY: check-black check-black: ## Check Python source code formatting with black @@ -13,8 +17,8 @@ TESTS ?= tests test: ## Run tests poetry run pytest -v --cov-report html --cov-report term-missing --cov=securedrop_export $$TESTS -.PHONY: lint -lint: ## Run linter +.PHONY: flake8 +flake8: ## Run flake8 linter poetry run flake8 securedrop_export/ tests/ .PHONY: mypy diff --git a/log/Makefile b/log/Makefile index 0d5febc56..79180d4cf 100644 --- a/log/Makefile +++ b/log/Makefile @@ -2,7 +2,10 @@ DEFAULT_GOAL: help SHELL := /bin/bash .PHONY: check -check: flake8 mypy test +check: lint test + +.PHONY: lint +lint: flake8 mypy ## Run all linters .PHONY: flake8 flake8: ## Run flake8 to lint Python files From 3bc1e74e51ece3cce748cab165935815bedd2b27 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 15 Feb 2024 18:47:37 -0500 Subject: [PATCH 651/751] Move remaining CircleCI jobs to GitHub Actions ci.yml's "component-lint" job runs `make lint` in all four components, and varies by Debian version (except proxy/bookworm). test.yml's "component" job runs `make test` in all components except client. The "client" job runs the test-functional, test-integration, and test-random targets and installs the extra dependencies needed (now in client/Makefile). test.yml also has "internationalization", which checks strings have been extracted and are reproducible. Some parts of GitHub's UI makes it inconvenient to have a ton of jobs in one file, so tests have been split out into their own for solely that reason. Dependencies that aren't needed were dropped as part of this (e.g. libnotify-bin, libmagic1, python3-dev, etc.). Same with the `export PYTHONPATH=$PYTHONPATH:.` pattern (the current directory is always on the Python path...). --- .circleci/config.yml | 410 ------------------------------------- .github/workflows/ci.yml | 46 +++++ .github/workflows/test.yml | 124 +++++++++++ client/Makefile | 9 + 4 files changed, 179 insertions(+), 410 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/test.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 26e139e0e..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,410 +0,0 @@ ---- -common-steps: - - &client_install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &client_install_testing_dependencies - run: - name: Install testing dependencies - command: | - set -e - apt update && apt install -y git gnupg libarchive13 libmagic1 libqt5x11extras5 make python3-tk python3-dev gnupg python3-venv sqlite3 xvfb - cd client - poetry install --no-ansi - - - &client_configure_locales - run: - name: Configure locales - command: | - set -e - apt update && apt install -y locales - echo "en_US ISO-8859-1" >> /etc/locale.gen - echo "en_US UTF-8" >> /etc/locale.gen - locale-gen - - - &client_run_unit_tests - run: - name: Install requirements and run unit tests - command: | - set -e - cd client - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test-random - - - &client_run_integration_tests - run: - name: Install requirements and run integration tests - command: | - set -e - cd client - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test-integration - - - &client_run_functional_tests - run: - name: Install requirements and run functional tests - command: | - set -e - cd client - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test-functional - - - &client_run_lint - run: - name: Run lint, type checking, code formatting - command: | - set -e - make -C client check-black check-isort lint mypy - - - &client_check_security - run: - name: Run static analysis on source code to find security issues - command: | - set -e - make -C client semgrep - - - &client_check_source_strings - run: - name: Check that source strings are updated - command: | - set -e - make -C client check-strings - - - &client_check_mo_repro - run: - name: Check that translation machine objects are reproducible - command: | - set -e - make -C client verify-mo - - - &export_install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &export_install_testing_dependencies - run: - name: Install testing dependencies - command: | - apt update && apt install -y git gnupg make python3-dev gnupg python3-venv libnotify-bin - cd export - poetry install --no-ansi - - - &export_run_unit_tests - run: - name: Install requirements and run unit tests - command: | - cd export - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test - - - &export_run_lint - run: - name: Run lint, type checking, code formatting - command: | - make -C export check-black lint - - - &export_check_security - run: - name: Run static analysis on source code to find security issues - command: | - make -C export semgrep - - - &log_install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &log_install_testing_dependencies - run: - name: Install testing dependencies - command: | - apt-get install --yes --no-install-recommends git gnupg make - cd log - poetry install --no-ansi - - - &log_run_tests - run: - name: Install requirements and run tests - command: | - make -C log check - - - &proxy_install_poetry - run: - name: Install Poetry - command: | - set -e - source /etc/os-release - if [[ "$VERSION_CODENAME" == "bullseye" ]]; then - # Install Poetry via PyPI - apt-get update && apt-get install --yes --no-install-recommends python3-pip - pip install poetry==1.6.1 - elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then - # Install Poetry via system package - apt-get update && apt-get install --yes --no-install-recommends python3-poetry - else - echo "Unsupported Debian version: $VERSION_CODENAME" - exit 1 - fi - - - &proxy_install_testing_dependencies - run: - name: Install testing dependencies - command: | - apt-get install --yes --no-install-recommends git gnupg make - cd proxy - poetry install --no-ansi - - - &proxy_run_unit_tests - run: - name: Install requirements and run unit tests - command: | - cd proxy - export PYTHONPATH=$PYTHONPATH:. # so alembic can get to Base metadata - make test - - - &proxy_run_lint - run: - name: Run lint, type checking, code formatting - command: | - make -C proxy lint - -version: 2.1 - -jobs: - client_unit-test: - parameters: ¶meters - image: - type: string - docker: &docker - - image: debian:<< parameters.image >> - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_configure_locales - - *client_run_unit_tests - - store_test_results: - path: test-results - - client_integration-test: - parameters: *parameters - docker: *docker - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_run_integration_tests - - client_functional-test: - parameters: *parameters - docker: *docker - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_run_functional_tests - - client_lint: - parameters: *parameters - docker: *docker - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_run_lint - - client_check-security: - parameters: *parameters - docker: *docker - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_check_security - - client_check-internationalization: - parameters: *parameters - docker: *docker - steps: - - *client_install_poetry - - checkout - - *client_install_testing_dependencies - - *client_check_source_strings - - *client_check_mo_repro - - export_unit-test: - parameters: *parameters - docker: *docker - steps: - - *export_install_poetry - - checkout - - *export_install_testing_dependencies - - *export_run_unit_tests - - store_test_results: - path: test-results - - export_lint: - parameters: *parameters - docker: *docker - steps: - - *export_install_poetry - - checkout - - *export_install_testing_dependencies - - *export_run_lint - - export_check-security: - parameters: *parameters - docker: *docker - steps: - - *export_install_poetry - - checkout - - *export_install_testing_dependencies - - *export_check_security - - log_test-bullseye: - docker: - - image: debian:bullseye - steps: - - checkout - - *log_install_poetry - - *log_install_testing_dependencies - - *log_run_tests - - proxy_unit-test: - parameters: *parameters - docker: *docker - steps: - - checkout - - *proxy_install_poetry - - *proxy_install_testing_dependencies - - *proxy_run_unit_tests - - store_test_results: - path: test-results - - proxy_lint: - parameters: *parameters - docker: *docker - steps: - - checkout - - *proxy_install_poetry - - *proxy_install_testing_dependencies - - *proxy_run_lint - - -workflows: - securedrop_client_ci: - jobs: &client_jobs - - client_unit-test: - matrix: &matrix - parameters: - image: - - bullseye - - bookworm - - client_integration-test: - matrix: *matrix - - client_functional-test: - matrix: *matrix - - client_lint: - matrix: *matrix - - client_check-security: - matrix: *matrix - - client_check-internationalization: - matrix: *matrix - - securedrop_export_ci: - jobs: &export_jobs - - export_unit-test: - matrix: *matrix - - export_lint: - matrix: *matrix - - export_check-security: - matrix: *matrix - - securedrop_log_ci: - jobs: - - log_test-bullseye - - securedrop_proxy_ci: - jobs: &proxy_jobs - - proxy_unit-test: - # bookworm jobs are failing and will be - # replaced with proxy v2 shortly, so skip - # https://github.com/freedomofpress/securedrop-client/issues/1681 - matrix: &proxy_matrix - parameters: - image: - - bullseye - - proxy_lint: - matrix: *proxy_matrix - - client_nightly: - triggers: - - schedule: - cron: "0 6 * * *" - filters: - branches: - only: - - main - jobs: *client_jobs - - export_nightly: - triggers: - - schedule: - cron: "0 6 * * *" - filters: - branches: - only: - - main - jobs: *export_jobs - - proxy_nightly: - triggers: - - schedule: - cron: "0 6 * * *" - filters: - branches: - only: - - main - jobs: *proxy_jobs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c4b2cc38..01da7bf6b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,52 @@ jobs: - name: Run lint run: make lint + # Run `make lint` across all components + component-lint: + strategy: + fail-fast: false + matrix: + component: + - client + - export + - log + - proxy + debian_version: + - bullseye + - bookworm + # bookworm jobs are failing and will be + # replaced with proxy v2 shortly, so skip + # https://github.com/freedomofpress/securedrop-client/issues/1681 + exclude: + - component: proxy + debian_version: bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git make gnupg + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + poetry -C ${{ matrix.component }} install + if [[ "${{ matrix.component }}" == "client" ]]; then + make -C ${{ matrix.component }} ci-install-deps + fi + - name: Run lint + run: make -C ${{ matrix.component }} lint + safety: runs-on: ubuntu-latest container: debian:bookworm diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..55a673c06 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,124 @@ +name: Tests +on: [push, pull_request] + +defaults: + run: + shell: bash + +jobs: + # Run `make test` against all components but client, which is special + component: + strategy: + fail-fast: false + matrix: + component: + - export + - log + - proxy + debian_version: + - bullseye + - bookworm + # bookworm jobs are failing and will be + # replaced with proxy v2 shortly, so skip + # https://github.com/freedomofpress/securedrop-client/issues/1681 + exclude: + - component: proxy + debian_version: bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git make gnupg + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + poetry -C ${{ matrix.component }} install + - name: Run test + run: | + make -C ${{ matrix.component }} test + + # Run the various `make test-...` commands for the client. + # TODO: these should be consolidated into one when feasible + client: + strategy: + fail-fast: false + matrix: + command: + - test-functional + - test-integration + - test-random + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git make gnupg + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + poetry -C client install + make -C client ci-install-deps + - name: Run test + run: | + make -C client ${{ matrix.command }} + + # Run the client i18n/l10n checks. + internationalization: + strategy: + matrix: + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + container: debian:${{ matrix.debian_version }} + steps: + - run: | + apt-get update && apt-get install --yes git make + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + source /etc/os-release + if [[ "$VERSION_CODENAME" == "bullseye" ]]; then + # Install Poetry via PyPI + apt-get install --yes --no-install-recommends python3-pip + pip install poetry==1.6.1 + elif [[ "$VERSION_CODENAME" == "bookworm" ]]; then + # Install Poetry via system package + apt-get install --yes --no-install-recommends python3-poetry + else + echo "Unsupported Debian version: $VERSION_CODENAME" + exit 1 + fi + poetry -C client install + make -C client ci-install-deps + git config --global --add safe.directory '*' + - name: Check that source strings are updated + run: make -C client check-strings + - name: Check that translation machine objects are reproducible + run: make -C client verify-mo diff --git a/client/Makefile b/client/Makefile index afa117fc8..baff5ce67 100644 --- a/client/Makefile +++ b/client/Makefile @@ -189,3 +189,12 @@ verify-mo: ## Verify that all gettext machine objects (.mo) are reproducible fro @TERM=dumb poetry run scripts/verify-mo.py ${LOCALE_DIR}/* @# All good; now clean up. @git restore "${LOCALE_DIR}/**/*.po" + +# Install dependencies in CI +# Note, we don't actually need libqt5x11extras5, but it pulls in all +# the correct dependencies for the PyQt5 wheels. +ci-install-deps: + apt-get install --yes xvfb sqlite3 locales libqt5x11extras5 python3-tk + echo "en_US ISO-8859-1" >> /etc/locale.gen + echo "en_US UTF-8" >> /etc/locale.gen + locale-gen From 5fa53886dfad5ca13f4e0d612b34582a048a20f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 21:36:23 +0000 Subject: [PATCH 652/751] Bump actions/cache from 2 to 4 Bumps [actions/cache](https://github.com/actions/cache) from 2 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/cargo-vet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cargo-vet.yml b/.github/workflows/cargo-vet.yml index 49626a3a1..e7f102b06 100644 --- a/.github/workflows/cargo-vet.yml +++ b/.github/workflows/cargo-vet.yml @@ -14,7 +14,7 @@ jobs: CARGO_VET_VERSION: 0.9.0 steps: - uses: actions/checkout@v4 - - uses: actions/cache@v2 + - uses: actions/cache@v4 id: cache-vet with: path: /usr/local/cargo/bin/cargo-vet From b5646ca6be23a2d8af4c4c8d43d37781a2577140 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 21:36:28 +0000 Subject: [PATCH 653/751] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/security.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index d805ebc6a..171464e96 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -9,7 +9,7 @@ jobs: # Keep version in sync with rust-toolchain.toml container: rust:1.74.1 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Check Rust dependencies run: | cargo install cargo-audit From 9df0bebd9a43158f57a4f6707b40ba6c0002da1b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 13 Feb 2024 19:46:06 -0500 Subject: [PATCH 654/751] Centralize __version__ management There is now a single `update_version.sh` script that updates the `__version__` variables in the client and export components and increments the debian/changelog file. The proxy version is hardcoded since it's going away as part of proxy v2 (also the usage in the response object was dubious to begin with). Fixes #1815. --- client/pyproject.toml | 2 +- client/securedrop_client/gui/auth/dialog.py | 4 +-- client/setup.py | 2 +- client/update_version.sh | 31 --------------------- export/MANIFEST.in | 1 - export/pyproject.toml | 2 +- export/securedrop_export/VERSION | 1 - export/securedrop_export/__init__.py | 2 +- export/setup.py | 8 +----- export/update_version.sh | 28 ------------------- log/MANIFEST.in | 1 - log/VERSION | 1 - log/pyproject.toml | 2 +- log/setup.py | 9 +----- log/update_version.sh | 26 ----------------- proxy/MANIFEST.in | 1 - proxy/securedrop_proxy/VERSION | 1 - proxy/securedrop_proxy/version.py | 9 +----- proxy/setup.py | 8 +----- proxy/update_version.sh | 27 ------------------ update_version.sh | 25 +++++++++++++++++ 21 files changed, 36 insertions(+), 155 deletions(-) delete mode 100755 client/update_version.sh delete mode 100644 export/securedrop_export/VERSION delete mode 100755 export/update_version.sh delete mode 100644 log/VERSION delete mode 100755 log/update_version.sh delete mode 100644 proxy/securedrop_proxy/VERSION delete mode 100755 proxy/update_version.sh create mode 100755 update_version.sh diff --git a/client/pyproject.toml b/client/pyproject.toml index 5a2a80513..8d81b4dbd 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "securedrop-client" -version = "0.1.0" +version = "0.0.0" description = "SecureDrop Workstation client application" authors = ["SecureDrop Team"] license = "AGPLv3+" diff --git a/client/securedrop_client/gui/auth/dialog.py b/client/securedrop_client/gui/auth/dialog.py index 52d194342..9b6c14cd9 100644 --- a/client/securedrop_client/gui/auth/dialog.py +++ b/client/securedrop_client/gui/auth/dialog.py @@ -33,7 +33,7 @@ QWidget, ) -from securedrop_client import __version__ as sd_version +from securedrop_client import __version__ from securedrop_client.gui.auth.sign_in import LoginErrorBar, SignInButton from securedrop_client.gui.auth.use_offline import LoginOfflineLink from securedrop_client.gui.base import PasswordEdit @@ -127,7 +127,7 @@ def __init__(self, parent: QWidget) -> None: form_layout.addWidget(buttons) # Create widget to display application name and version - application_version = QLabel(_("SecureDrop Client v{}").format(sd_version)) + application_version = QLabel(_("SecureDrop Client v{}").format(__version__)) application_version.setAlignment(Qt.AlignHCenter) application_version.setObjectName("LoginDialog_app_version_label") diff --git a/client/setup.py b/client/setup.py index 511793a58..f484b4164 100644 --- a/client/setup.py +++ b/client/setup.py @@ -14,7 +14,7 @@ setuptools.setup( name="securedrop-client", - version="0.9.0", + version="0.0.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Workstation client application", diff --git a/client/update_version.sh b/client/update_version.sh deleted file mode 100755 index 11fbb4220..000000000 --- a/client/update_version.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -## Usage: ./update_version.sh - -set -e - -readonly NEW_VERSION=$1 - -if [ -z "$NEW_VERSION" ]; then - echo "You must specify the new version!" - exit 1 -fi - -# Get the old version from securedrop_client/__init__.py -old_version_regex='^__version__ = "(.*)"$' -[[ "$(cat securedrop_client/__init__.py)" =~ $old_version_regex ]] -OLD_VERSION=${BASH_REMATCH[1]} - -if [ -z "$OLD_VERSION" ]; then - echo "Couldn't find the old version: does this script need to be updated?" - exit 1 -fi - -# Update the version in securedrop_client/__init__.py and setup.py -if [[ "$OSTYPE" == "darwin"* ]]; then - # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_client/__init__.py - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" setup.py -else - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_client/__init__.py - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" setup.py -fi diff --git a/export/MANIFEST.in b/export/MANIFEST.in index 87fb2b127..14848c347 100644 --- a/export/MANIFEST.in +++ b/export/MANIFEST.in @@ -1,6 +1,5 @@ include LICENSE include README.md -include securedrop_export/VERSION include changelog.md include build-requirements.txt include securedrop_export/*.py diff --git a/export/pyproject.toml b/export/pyproject.toml index 166a08e64..1e738ba4a 100644 --- a/export/pyproject.toml +++ b/export/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "securedrop-export" -version = "0.1.0" +version = "0.0.0" description = "SecureDrop Qubes export scripts" authors = ["SecureDrop Team"] license = "GPLv3+" diff --git a/export/securedrop_export/VERSION b/export/securedrop_export/VERSION deleted file mode 100644 index 0d91a54c7..000000000 --- a/export/securedrop_export/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.3.0 diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 493f7415d..3e2f46a3a 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.3.0" +__version__ = "0.9.0" diff --git a/export/setup.py b/export/setup.py index 19256c2e6..c2e5cbebd 100644 --- a/export/setup.py +++ b/export/setup.py @@ -3,12 +3,9 @@ with open("README.md", "r") as fh: long_description = fh.read() -with open("securedrop_export/VERSION") as f: - version = f.read().strip() - setuptools.setup( name="securedrop-export", - version=version, + version="0.0.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Qubes export scripts", @@ -19,9 +16,6 @@ python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-export", packages=setuptools.find_packages(exclude=["docs", "tests"]), - package_data={ - "securedrop_export": ["VERSION"], - }, classifiers=[ "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", diff --git a/export/update_version.sh b/export/update_version.sh deleted file mode 100755 index f66ee435d..000000000 --- a/export/update_version.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -## Usage: ./update_version.sh - -set -e - -readonly NEW_VERSION=$1 - -if [ -z "$NEW_VERSION" ]; then - echo "You must specify the new version!" - exit 1 -fi - -# Get the old version from securedrop_export/VERSION -OLD_VERSION=$(cat securedrop_export/VERSION) -if [ -z "$OLD_VERSION" ]; then - echo "Couldn't find the old version: does this script need to be updated?" - exit 1 -fi - -# Update the version in securedrop_export/VERSION (setup.py is done automatically) -if [[ "$OSTYPE" == "darwin"* ]]; then - # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/VERSION - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/__init__.py -else - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/VERSION - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_export/__init__.py -fi diff --git a/log/MANIFEST.in b/log/MANIFEST.in index b1e9a7fa9..bba9999d8 100644 --- a/log/MANIFEST.in +++ b/log/MANIFEST.in @@ -7,4 +7,3 @@ include securedrop-redis-log include securedrop.Log include sd-rsyslog* include sdlog.conf -include VERSION diff --git a/log/VERSION b/log/VERSION deleted file mode 100644 index 0ea3a944b..000000000 --- a/log/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.2.0 diff --git a/log/pyproject.toml b/log/pyproject.toml index b0bd2d160..db28b576d 100644 --- a/log/pyproject.toml +++ b/log/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "securedrop-log" -version = "0.1.0" +version = "0.0.0" description = "SecureDrop Qubes logging scripts" authors = ["SecureDrop Team"] license = "GPLv3+" diff --git a/log/setup.py b/log/setup.py index 520bac2c6..c697f47c2 100644 --- a/log/setup.py +++ b/log/setup.py @@ -3,13 +3,9 @@ with open("README.md", "r") as fh: long_description = fh.read() -with open("VERSION") as fh: - version = fh.read().strip() - - setuptools.setup( name="securedrop-log", - version=version, + version="0.0.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Qubes logging scripts", @@ -19,9 +15,6 @@ install_requires=[], python_requires=">=3.5", packages=setuptools.find_packages(exclude=["docs", "tests"]), - package_data={ - 'securedrop_log': ['VERSION'], - }, url="https://github.com/freedomofpress/securedrop-log", classifiers=[ "Development Status :: 3 - Alpha", diff --git a/log/update_version.sh b/log/update_version.sh deleted file mode 100755 index 3bd6903ce..000000000 --- a/log/update_version.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -## Usage: ./update_version.sh - -set -e - -readonly NEW_VERSION=$1 - -if [ -z "$NEW_VERSION" ]; then - echo "You must specify the new version!" - exit 1 -fi - -# Get the old version from VERSION -OLD_VERSION=$(cat VERSION) -if [ -z "$OLD_VERSION" ]; then - echo "Couldn't find the old version: does this script need to be updated?" - exit 1 -fi - -# Update the version in VERSION (setup.py is done automatically) -if [[ "$OSTYPE" == "darwin"* ]]; then - # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" VERSION -else - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" VERSION -fi diff --git a/proxy/MANIFEST.in b/proxy/MANIFEST.in index adb7bc804..4686841ae 100644 --- a/proxy/MANIFEST.in +++ b/proxy/MANIFEST.in @@ -1,6 +1,5 @@ include LICENSE include README.md -include securedrop_proxy/VERSION include changelog.md include config-example.yaml include qubes/securedrop.Proxy diff --git a/proxy/securedrop_proxy/VERSION b/proxy/securedrop_proxy/VERSION deleted file mode 100644 index 267577d47..000000000 --- a/proxy/securedrop_proxy/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.4.1 diff --git a/proxy/securedrop_proxy/version.py b/proxy/securedrop_proxy/version.py index 0ebdbd246..57fde319e 100644 --- a/proxy/securedrop_proxy/version.py +++ b/proxy/securedrop_proxy/version.py @@ -1,8 +1 @@ -import pkgutil - -version = None -version_content = pkgutil.get_data("securedrop_proxy", "VERSION") -if isinstance(version_content, bytes): - version = version_content.decode("utf-8") -else: - raise ValueError("Could not read VERSION file") +version = "0.4.1\n" diff --git a/proxy/setup.py b/proxy/setup.py index 5aa3dfd36..c4ffc1db1 100644 --- a/proxy/setup.py +++ b/proxy/setup.py @@ -4,12 +4,9 @@ with open("README.md", "r") as fh: long_description = fh.read() -version = pkgutil.get_data("securedrop_proxy", "VERSION").decode("utf-8") -version = version.strip() - setuptools.setup( name="securedrop-proxy", - version=version, + version="0.0.0", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Qubes proxy service", @@ -20,9 +17,6 @@ python_requires=">=3.7", url="https://github.com/freedomofpress/securedrop-proxy", packages=setuptools.find_packages(exclude=["docs", "tests"]), - package_data={ - 'securedrop_proxy': ['VERSION'], - }, classifiers=( "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", diff --git a/proxy/update_version.sh b/proxy/update_version.sh deleted file mode 100755 index 7e027d202..000000000 --- a/proxy/update_version.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -## Usage: ./update_version.sh - -set -e - -readonly NEW_VERSION=$1 - -if [ -z "$NEW_VERSION" ]; then - echo "You must specify the new version!" - exit 1 -fi - -# Get the old version from securedrop_proxy/VERSION -OLD_VERSION=$(cat securedrop_proxy/VERSION) - -if [ -z "$OLD_VERSION" ]; then - echo "Couldn't find the old version: does this script need to be updated?" - exit 1 -fi - -# Update the version in securedrop_proxy/VERSION -if [[ "$OSTYPE" == "darwin"* ]]; then - # The empty '' after sed -i is required on macOS to indicate no backup file should be saved. - sed -i '' "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_proxy/VERSION -else - sed -i "s@$(echo "${OLD_VERSION}" | sed 's/\./\\./g')@$NEW_VERSION@g" securedrop_proxy/VERSION -fi diff --git a/update_version.sh b/update_version.sh new file mode 100755 index 000000000..53248f398 --- /dev/null +++ b/update_version.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -euxo pipefail + +NEW_VERSION=${1:-""} + +if [ -z "$NEW_VERSION" ]; then + echo "Usage: ./update_version.sh "; + exit 1 +fi + + +if [[ $NEW_VERSION == *~rc* ]]; then + echo "RCs should use the versioning a.b.c-rcD, where a.b.c is the next version" + exit 1 +fi + +sed -i'' -r -e "s/^__version__ = \"(.*?)\"/__version__ = \"${NEW_VERSION}\"/" client/securedrop_client/__init__.py +sed -i'' -r -e "s/^__version__ = \"(.*?)\"/__version__ = \"${NEW_VERSION}\"/" export/securedrop_export/__init__.py + +# Normalize version, convert any - to ~, e.g. 0.9.0-rc1 to 0.9.0~rc1 +DEB_VERSION=$(echo $NEW_VERSION | sed 's/-/~/g') + +export DEBEMAIL="securedrop@freedom.press" +export DEBFULLNAME="SecureDrop Team" +dch -b --newversion "${DEB_VERSION}" --distribution unstable "see changelog.md" From e0ca0bc45ed2fea48ad839984d2f0338a043179c Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 16 Feb 2024 12:19:51 -0500 Subject: [PATCH 655/751] Remove gvfs-bin dependency This was deprecated in bullseye and removed in bookworm. It provided the `gvfs-copy` and `gvfs-rename` commands, which I couldn't find any usage of in our code. Fixes #1787. --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 95fb5003e..8d6cd0971 100644 --- a/debian/control +++ b/debian/control @@ -40,7 +40,7 @@ Description: This is securedrop Qubes proxy service Package: securedrop-workstation-config Architecture: all -Depends: nautilus, gvfs-bin, securedrop-keyring +Depends: nautilus, securedrop-keyring Description: This is the SecureDrop workstation template configuration package. This package provides dependencies and configuration for the Qubes SecureDrop workstation VM Templates. From d468bd9d42bf501b086348f8d0d52e05373d80df Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 5 Oct 2023 15:05:24 -0400 Subject: [PATCH 656/751] Preliminary Veracrypt Support and refactoring (client, export): Export: Add new qrexec status values. DRY up qrexec calling methods. Replace ExportStatus values with new values. Combine disk-test and usb-test. Rename method names for clarity. Use udisksctl for locking, unlocking, and mounting. Use json output of lsblk to simplify device parsing. Use pexpect to handle passphrase unlock prompt and drive mounting. Add EncryptionScheme.VERACRYPT. Add methods for retrieving unlocked VeraCrypt drive and unlocking VC drive. Add "/etc/udisks2/tcrypt.conf" so udisks will check for VeraCrypt volumes. Remove encryption_method parameter from metadata.json. Pass export_error flag to cleanup method and flush stdout/err before exit. Address mounting race condition by checking udisks info prior to attempting mount. Client: Make Device dependency on Export service explicit. Pass ExportStatus in print dialog. Refactor GUI tests to account for ExportStatus changes to file dialog, print dialog, and Device. --- client/securedrop_client/export.py | 234 +-- client/securedrop_client/export_status.py | 55 + client/securedrop_client/gui/actions.py | 8 +- .../gui/conversation/export/device.py | 31 +- .../gui/conversation/export/file_dialog.py | 41 +- .../gui/conversation/export/print_dialog.py | 12 +- client/securedrop_client/gui/widgets.py | 4 +- client/tests/conftest.py | 42 +- ...t_file_dialog_device_already_unlocked.yaml | 1518 +++++++++++++++++ .../test_export_file_dialog_locked.yaml | 1517 ++++++++++++++++ .../functional/test_export_file_dialog.py | 73 +- .../gui/conversation/export/test_device.py | 369 +--- .../gui/conversation/export/test_dialog.py | 33 +- .../conversation/export/test_file_dialog.py | 47 +- .../conversation/export/test_print_dialog.py | 20 +- .../export/test_print_transcript_dialog.py | 14 +- .../export/test_transcript_dialog.py | 20 +- client/tests/integration/conftest.py | 22 +- client/tests/test_export.py | 352 ++-- debian/securedrop-export.install | 1 + export/Makefile | 3 +- export/README.md | 35 +- export/files/tcrypt.conf | 0 export/poetry.lock | 27 +- export/pyproject.toml | 1 + export/securedrop_export/archive.py | 17 +- export/securedrop_export/disk/__init__.py | 4 +- export/securedrop_export/disk/cli.py | 671 ++++---- .../securedrop_export/disk/legacy_service.py | 156 -- .../securedrop_export/disk/legacy_status.py | 25 - export/securedrop_export/disk/service.py | 127 +- export/securedrop_export/disk/status.py | 18 +- export/securedrop_export/disk/volume.py | 38 +- export/securedrop_export/main.py | 74 +- export/tests/disk/test_cli.py | 686 ++++---- export/tests/disk/test_service.py | 180 +- export/tests/disk/test_volume.py | 50 - export/tests/files/sample_export.sd-export | Bin 0 -> 714 bytes export/tests/files/sample_print.sd-export | Bin 0 -> 754 bytes export/tests/lsblk_sample.py | 162 ++ export/tests/test_archive.py | 33 +- export/tests/test_main.py | 158 +- 42 files changed, 4781 insertions(+), 2097 deletions(-) create mode 100644 client/securedrop_client/export_status.py create mode 100644 client/tests/functional/cassettes/test_export_file_dialog_device_already_unlocked.yaml create mode 100644 client/tests/functional/cassettes/test_export_file_dialog_locked.yaml create mode 100644 export/files/tcrypt.conf delete mode 100644 export/securedrop_export/disk/legacy_service.py delete mode 100644 export/securedrop_export/disk/legacy_status.py delete mode 100644 export/tests/disk/test_volume.py create mode 100644 export/tests/files/sample_export.sd-export create mode 100644 export/tests/files/sample_print.sd-export create mode 100644 export/tests/lsblk_sample.py diff --git a/client/securedrop_client/export.py b/client/securedrop_client/export.py index a99fdf48d..366f68eab 100644 --- a/client/securedrop_client/export.py +++ b/client/securedrop_client/export.py @@ -4,7 +4,6 @@ import subprocess import tarfile import threading -from enum import Enum from io import BytesIO from shlex import quote from tempfile import TemporaryDirectory @@ -12,6 +11,8 @@ from PyQt5.QtCore import QObject, pyqtBoundSignal, pyqtSignal, pyqtSlot +from securedrop_client.export_status import ExportStatus + logger = logging.getLogger(__name__) @@ -20,24 +21,6 @@ def __init__(self, status: "ExportStatus"): self.status: "ExportStatus" = status -class ExportStatus(Enum): - # On the way to success - USB_CONNECTED = "USB_CONNECTED" - DISK_ENCRYPTED = "USB_ENCRYPTED" - - # Not too far from success - USB_NOT_CONNECTED = "USB_NOT_CONNECTED" - BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" - - # Failure - CALLED_PROCESS_ERROR = "CALLED_PROCESS_ERROR" - DISK_ENCRYPTION_NOT_SUPPORTED_ERROR = "USB_ENCRYPTION_NOT_SUPPORTED" - ERROR_USB_CONFIGURATION = "ERROR_USB_CONFIGURATION" - UNEXPECTED_RETURN_STATUS = "UNEXPECTED_RETURN_STATUS" - PRINTER_NOT_FOUND = "ERROR_PRINTER_NOT_FOUND" - MISSING_PRINTER_URI = "ERROR_MISSING_PRINTER_URI" - - class Export(QObject): """ This class sends files over to the Export VM so that they can be copied to a luks-encrypted USB @@ -66,17 +49,21 @@ class Export(QObject): DISK_ENCRYPTION_KEY_NAME = "encryption_key" DISK_EXPORT_DIR = "export_data" - # Set up signals for communication with the controller - preflight_check_call_failure = pyqtSignal(object) - preflight_check_call_success = pyqtSignal() - export_usb_call_failure = pyqtSignal(object) - export_usb_call_success = pyqtSignal() - export_completed = pyqtSignal(list) + # Set up signals for communication with the controller # + # Emit ExportStatus + preflight_check_call_success = pyqtSignal(object) + export_usb_call_success = pyqtSignal(object) + printer_preflight_success = pyqtSignal(object) + print_call_success = pyqtSignal(object) - printer_preflight_success = pyqtSignal() + # Emit ExportError(status=ExportStatus) + export_usb_call_failure = pyqtSignal(object) + preflight_check_call_failure = pyqtSignal(object) printer_preflight_failure = pyqtSignal(object) print_call_failure = pyqtSignal(object) - print_call_success = pyqtSignal() + + # Emit List[str] of filepaths + export_completed = pyqtSignal(list) def __init__( self, @@ -112,7 +99,7 @@ def connect_signals( if print_preflight_check_requested is not None: print_preflight_check_requested.connect(self.run_printer_preflight) - def _export_archive(cls, archive_path: str) -> Optional[ExportStatus]: + def _run_qrexec_export(cls, archive_path: str) -> ExportStatus: """ Make the subprocess call to send the archive to the Export VM, where the archive will be processed. @@ -149,12 +136,8 @@ def _export_archive(cls, archive_path: str) -> Optional[ExportStatus]: ) result = output.decode("utf-8").strip() - # No status is returned for successful `disk`, `printer-test`, and `print` calls. - # This will change in a future release of sd-export. - if result: - return ExportStatus(result) - else: - return None + return ExportStatus(result) + except ValueError as e: logger.debug(f"Export subprocess returned unexpected value: {e}") raise ExportError(ExportStatus.UNEXPECTED_RETURN_STATUS) @@ -164,7 +147,7 @@ def _export_archive(cls, archive_path: str) -> Optional[ExportStatus]: raise ExportError(ExportStatus.CALLED_PROCESS_ERROR) def _create_archive( - cls, archive_dir: str, archive_fn: str, metadata: dict, filepaths: List[str] = [] + cls, archive_dir: str, archive_fn: str, metadata: dict, filepaths: List[str] ) -> str: """ Create the archive to be sent to the Export VM. @@ -234,114 +217,55 @@ def _add_file_to_archive( archive.add(filepath, arcname=arcname, recursive=False) - def _run_printer_preflight(self, archive_dir: str) -> None: - """ - Make sure printer is ready. - """ - archive_path = self._create_archive( - archive_dir, self.PRINTER_PREFLIGHT_FN, self.PRINTER_PREFLIGHT_METADATA - ) - - status = self._export_archive(archive_path) - if status: - raise ExportError(status) - - def _run_usb_test(self, archive_dir: str) -> None: - """ - Run usb-test. - - Args: - archive_dir (str): The path to the directory in which to create the archive. - - Raises: - ExportError: Raised if the usb-test does not return a USB_CONNECTED status. - """ - archive_path = self._create_archive(archive_dir, self.USB_TEST_FN, self.USB_TEST_METADATA) - status = self._export_archive(archive_path) - if status and status != ExportStatus.USB_CONNECTED: - raise ExportError(status) - - def _run_disk_test(self, archive_dir: str) -> None: - """ - Run disk-test. - - Args: - archive_dir (str): The path to the directory in which to create the archive. - - Raises: - ExportError: Raised if the usb-test does not return a DISK_ENCRYPTED status. - """ - archive_path = self._create_archive(archive_dir, self.DISK_TEST_FN, self.DISK_TEST_METADATA) - - status = self._export_archive(archive_path) - if status and status != ExportStatus.DISK_ENCRYPTED: - raise ExportError(status) - - def _run_disk_export(self, archive_dir: str, filepaths: List[str], passphrase: str) -> None: - """ - Run disk-test. - - Args: - archive_dir (str): The path to the directory in which to create the archive. - - Raises: - ExportError: Raised if the usb-test does not return a DISK_ENCRYPTED status. - """ - metadata = self.DISK_METADATA.copy() - metadata[self.DISK_ENCRYPTION_KEY_NAME] = passphrase - archive_path = self._create_archive(archive_dir, self.DISK_FN, metadata, filepaths) - - status = self._export_archive(archive_path) - if status: - raise ExportError(status) - - def _run_print(self, archive_dir: str, filepaths: List[str]) -> None: + def _build_archive_and_export( + self, metadata: dict, filename: str, filepaths: List[str] = [] + ) -> ExportStatus: """ - Create "printer" archive to send to Export VM. - - Args: - archive_dir (str): The path to the directory in which to create the archive. + Build archive, run qrexec command and return resulting ExportStatus. + ExportError may be raised during underlying _run_qrexec_export call, + and is handled by the calling method. """ - metadata = self.PRINT_METADATA.copy() - archive_path = self._create_archive(archive_dir, self.PRINT_FN, metadata, filepaths) - status = self._export_archive(archive_path) - if status: - raise ExportError(status) + with TemporaryDirectory() as tmp_dir: + archive_path = self._create_archive( + archive_dir=tmp_dir, archive_fn=filename, metadata=metadata, filepaths=filepaths + ) + return self._run_qrexec_export(archive_path) @pyqtSlot() def run_preflight_checks(self) -> None: """ - Run preflight checks to verify that the usb device is connected and luks-encrypted. + Run preflight checks to verify that a valid USB device is connected. """ - with TemporaryDirectory() as temp_dir: - try: - logger.debug( - "beginning preflight checks in thread {}".format( - threading.current_thread().ident - ) - ) - self._run_usb_test(temp_dir) - self._run_disk_test(temp_dir) - logger.debug("completed preflight checks: success") - self.preflight_check_call_success.emit() - except ExportError as e: - logger.debug("completed preflight checks: failure") - self.preflight_check_call_failure.emit(e) + try: + logger.debug( + "beginning preflight checks in thread {}".format(threading.current_thread().ident) + ) + + status = self._build_archive_and_export( + metadata=self.USB_TEST_METADATA, filename=self.USB_TEST_FN + ) + + logger.debug("completed preflight checks: success") + self.preflight_check_call_success.emit(status) + except ExportError as e: + logger.debug("completed preflight checks: failure") + self.preflight_check_call_failure.emit(e) @pyqtSlot() def run_printer_preflight(self) -> None: """ Make sure the Export VM is started. """ - with TemporaryDirectory() as temp_dir: - try: - self._run_printer_preflight(temp_dir) - self.printer_preflight_success.emit() - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.printer_preflight_failure.emit(e) + try: + status = self._build_archive_and_export( + metadata=self.PRINTER_PREFLIGHT_METADATA, filename=self.PRINTER_PREFLIGHT_FN + ) + self.printer_preflight_success.emit(status) + except ExportError as e: + logger.error("Export failed") + logger.debug(f"Export failed: {e}") + self.printer_preflight_failure.emit(e) @pyqtSlot(list, str) def send_file_to_usb_device(self, filepaths: List[str], passphrase: str) -> None: @@ -352,18 +276,21 @@ def send_file_to_usb_device(self, filepaths: List[str], passphrase: str) -> None filepath: The path of file to export. passphrase: The passphrase to unlock the luks-encrypted usb disk drive. """ - with TemporaryDirectory() as temp_dir: - try: - logger.debug( - "beginning export from thread {}".format(threading.current_thread().ident) - ) - self._run_disk_export(temp_dir, filepaths, passphrase) - self.export_usb_call_success.emit() - logger.debug("Export successful") - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.export_usb_call_failure.emit(e) + try: + logger.debug("beginning export from thread {}".format(threading.current_thread().ident)) + # Edit metadata template to include passphrase + metadata = self.DISK_METADATA.copy() + metadata[self.DISK_ENCRYPTION_KEY_NAME] = passphrase + status = self._build_archive_and_export( + metadata=metadata, filename=self.DISK_FN, filepaths=filepaths + ) + + self.export_usb_call_success.emit(status) + logger.debug(f"Status {status}") + except ExportError as e: + logger.error("Export failed") + logger.debug(f"Export failed: {e}") + self.export_usb_call_failure.emit(e) self.export_completed.emit(filepaths) @@ -375,18 +302,19 @@ def print(self, filepaths: List[str]) -> None: Args: filepath: The path of file to export. """ - with TemporaryDirectory() as temp_dir: - try: - logger.debug( - "beginning printer from thread {}".format(threading.current_thread().ident) - ) - self._run_print(temp_dir, filepaths) - self.print_call_success.emit() - logger.debug("Print successful") - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.print_call_failure.emit(e) + try: + logger.debug( + "beginning printer from thread {}".format(threading.current_thread().ident) + ) + status = self._build_archive_and_export( + metadata=self.PRINT_METADATA, filename=self.PRINT_FN, filepaths=filepaths + ) + self.print_call_success.emit(status) + logger.debug(f"Status {status}") + except ExportError as e: + logger.error("Export failed") + logger.debug(f"Export failed: {e}") + self.print_call_failure.emit(e) self.export_completed.emit(filepaths) diff --git a/client/securedrop_client/export_status.py b/client/securedrop_client/export_status.py new file mode 100644 index 000000000..2c2a19924 --- /dev/null +++ b/client/securedrop_client/export_status.py @@ -0,0 +1,55 @@ +from enum import Enum + + +class ExportStatus(Enum): + """ + All possible strings returned by the qrexec calls to sd-devices. These values come from + `print/status.py` and `disk/status.py` in `https://github.com/freedomofpress/securedrop-export` + and must only be changed in coordination with changes released in that repo. + """ + + # Export + NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" + INVALID_DEVICE_DETECTED = "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc + MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported + UKNOWN_DEVICE_DETECTED = "UNKNOWN_DEVICE_DETECTED" # Badly-formatted USB or VeraCrypt/TC + + DEVICE_LOCKED = "DEVICE_LOCKED" # One valid device detected, and it's locked + DEVICE_WRITABLE = ( + "DEVICE_WRITABLE" # One valid device detected, and it's unlocked (and mounted) + ) + + ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" + ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" + ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted + + SUCCESS_EXPORT = "SUCCESS_EXPORT" + ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk + + # Export succeeds but drives were not properly unmounted + ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" + + DEVICE_ERROR = "DEVICE_ERROR" # Something went wrong while trying to check the device + + # Print + ERROR_MULTIPLE_PRINTERS_FOUND = "ERROR_MULTIPLE_PRINTERS_FOUND" + ERROR_PRINTER_NOT_FOUND = "ERROR_PRINTER_NOT_FOUND" + ERROR_PRINTER_NOT_SUPPORTED = "ERROR_PRINTER_NOT_SUPPORTED" + ERROR_PRINTER_DRIVER_UNAVAILABLE = "ERROR_PRINTER_DRIVER_UNAVAILABLE" + ERROR_PRINTER_INSTALL = "ERROR_PRINTER_INSTALL" + ERROR_PRINTER_URI = "ERROR_PRINTER_URI" # new + + # Print error + ERROR_PRINT = "ERROR_PRINT" + + # New + PRINT_PREFLIGHT_SUCCESS = "PRINTER_PREFLIGHT_SUCCESS" + TEST_SUCCESS = "PRINTER_TEST_SUCCESS" + PRINT_SUCCESS = "PRINTER_SUCCESS" + + ERROR_UNKNOWN = "ERROR_GENERIC" # Unknown printer error, backwards-compatible + + # Misc + CALLED_PROCESS_ERROR = "CALLED_PROCESS_ERROR" + ERROR_USB_CONFIGURATION = "ERROR_USB_CONFIGURATION" + UNEXPECTED_RETURN_STATUS = "UNEXPECTED_RETURN_STATUS" diff --git a/client/securedrop_client/gui/actions.py b/client/securedrop_client/gui/actions.py index 5d8420b86..c4dfd6a70 100644 --- a/client/securedrop_client/gui/actions.py +++ b/client/securedrop_client/gui/actions.py @@ -12,7 +12,7 @@ from PyQt5.QtCore import Qt, pyqtSlot from PyQt5.QtWidgets import QAction, QDialog, QMenu -from securedrop_client import state +from securedrop_client import export, state from securedrop_client.conversation import Transcript as ConversationTranscript from securedrop_client.db import Source from securedrop_client.gui.base import ModalDialog @@ -160,7 +160,7 @@ def __init__( self.controller = controller self._source = source - self._export_device = ConversationExportDevice(controller) + self._export_device = ConversationExportDevice(controller, export.getService()) self.triggered.connect(self._on_triggered) @@ -212,7 +212,7 @@ def __init__( self.controller = controller self._source = source - self._export_device = ConversationExportDevice(controller) + self._export_device = ConversationExportDevice(controller, export.getService()) self.triggered.connect(self._on_triggered) @@ -267,7 +267,7 @@ def __init__( self._source = source self._state = app_state - self._export_device = ConversationExportDevice(controller) + self._export_device = ConversationExportDevice(controller, export.getService()) self.triggered.connect(self._on_triggered) diff --git a/client/securedrop_client/gui/conversation/export/device.py b/client/securedrop_client/gui/conversation/export/device.py index dfa3c69f9..9cf61dd06 100644 --- a/client/securedrop_client/gui/conversation/export/device.py +++ b/client/securedrop_client/gui/conversation/export/device.py @@ -4,7 +4,7 @@ from PyQt5.QtCore import QObject, pyqtSignal -from securedrop_client import export +from securedrop_client.export import Export from securedrop_client.logic import Controller logger = logging.getLogger(__name__) @@ -19,27 +19,32 @@ class Device(QObject): """ export_preflight_check_requested = pyqtSignal() - export_preflight_check_succeeded = pyqtSignal() - export_preflight_check_failed = pyqtSignal(object) + print_preflight_check_requested = pyqtSignal() - export_requested = pyqtSignal(list, str) - export_succeeded = pyqtSignal() + # Emit ExportStatus + export_preflight_check_succeeded = pyqtSignal(object) + export_succeeded = pyqtSignal(object) + + print_preflight_check_succeeded = pyqtSignal(object) + print_succeeded = pyqtSignal(object) + + # Emit ExportError(status=ExportStatus) + export_preflight_check_failed = pyqtSignal(object) export_failed = pyqtSignal(object) - export_completed = pyqtSignal(list) - print_preflight_check_requested = pyqtSignal() - print_preflight_check_succeeded = pyqtSignal() print_preflight_check_failed = pyqtSignal(object) + print_failed = pyqtSignal(object) + # Emit List[str] filepaths + export_requested = pyqtSignal(list, str) + export_completed = pyqtSignal(list) print_requested = pyqtSignal(list) - print_succeeded = pyqtSignal() - print_failed = pyqtSignal(object) - def __init__(self, controller: Controller) -> None: + def __init__(self, controller: Controller, export_service: Export) -> None: super().__init__() self._controller = controller - self._export_service = export.getService() + self._export_service = export_service self._export_service.connect_signals( self.export_preflight_check_requested, @@ -103,6 +108,7 @@ def export_file_to_usb_drive(self, file_uuid: str, passphrase: str) -> None: logger.info("Exporting file in: {}".format(os.path.dirname(file_location))) if not self._controller.downloaded_file_exists(file): + logger.warning(f"Cannot find file in {file_location}") return self.export_requested.emit([file_location], passphrase) @@ -123,6 +129,7 @@ def print_file(self, file_uuid: str) -> None: logger.info("Printing file in: {}".format(os.path.dirname(file_location))) if not self._controller.downloaded_file_exists(file): + logger.warning(f"Cannot find file in {file_location}") return self.print_requested.emit([file_location]) diff --git a/client/securedrop_client/gui/conversation/export/file_dialog.py b/client/securedrop_client/gui/conversation/export/file_dialog.py index 4db886dd2..414d2c8b1 100644 --- a/client/securedrop_client/gui/conversation/export/file_dialog.py +++ b/client/securedrop_client/gui/conversation/export/file_dialog.py @@ -9,7 +9,8 @@ from PyQt5.QtGui import QColor, QFont from PyQt5.QtWidgets import QGraphicsDropShadowEffect, QLineEdit, QVBoxLayout, QWidget -from securedrop_client.export import ExportError, ExportStatus +from securedrop_client.export import ExportError +from securedrop_client.export_status import ExportStatus from securedrop_client.gui.base import ModalDialog, PasswordEdit, SecureQLabel from securedrop_client.gui.base.checkbox import SDCheckBox @@ -211,22 +212,34 @@ def _export_file(self, checked: bool = False) -> None: self.start_animate_activestate() self.cancel_button.setEnabled(False) self.passphrase_field.setDisabled(True) + + # TODO: If the drive is already unlocked, the passphrase field will be empty. + # This is ok, but could violate expectations. The password should be passed + # via qrexec in future, to avoid writing it to even a temporary file at all. self._device.export_file_to_usb_drive(self.file_uuid, self.passphrase_field.text()) - @pyqtSlot() - def _on_export_preflight_check_succeeded(self) -> None: + @pyqtSlot(object) + def _on_export_preflight_check_succeeded(self, result: ExportStatus) -> None: # If the continue button is disabled then this is the result of a background preflight check self.stop_animate_header() self.header_icon.update_image("savetodisk.svg", QSize(64, 64)) self.header.setText(self.ready_header) if not self.continue_button.isEnabled(): self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._show_passphrase_request_message) + if result == ExportStatus.DEVICE_WRITABLE: + # Skip password prompt, we're there + self.continue_button.clicked.connect(self._export_file) + else: # result == ExportStatus.DEVICE_LOCKED + self.continue_button.clicked.connect(self._show_passphrase_request_message) self.continue_button.setEnabled(True) self.continue_button.setFocus() return - self._show_passphrase_request_message() + # Skip passphrase prompt if device is unlocked + if result == ExportStatus.DEVICE_WRITABLE: + self._export_file() + else: + self._show_passphrase_request_message() @pyqtSlot(object) def _on_export_preflight_check_failed(self, error: ExportError) -> None: @@ -234,8 +247,8 @@ def _on_export_preflight_check_failed(self, error: ExportError) -> None: self.header_icon.update_image("savetodisk.svg", QSize(64, 64)) self._update_dialog(error.status) - @pyqtSlot() - def _on_export_succeeded(self) -> None: + @pyqtSlot(object) + def _on_export_succeeded(self, status: ExportStatus) -> None: self.stop_animate_activestate() self._show_success_message() @@ -251,11 +264,13 @@ def _update_dialog(self, error_status: ExportStatus) -> None: # If the continue button is disabled then this is the result of a background preflight check if not self.continue_button.isEnabled(): self.continue_button.clicked.disconnect() - if self.error_status == ExportStatus.BAD_PASSPHRASE: + if self.error_status == ExportStatus.ERROR_UNLOCK_LUKS: self.continue_button.clicked.connect(self._show_passphrase_request_message_again) - elif self.error_status == ExportStatus.USB_NOT_CONNECTED: + elif self.error_status == ExportStatus.NO_DEVICE_DETECTED: # fka USB_NOT_CONNECTED self.continue_button.clicked.connect(self._show_insert_usb_message) - elif self.error_status == ExportStatus.DISK_ENCRYPTION_NOT_SUPPORTED_ERROR: + elif ( + self.error_status == ExportStatus.INVALID_DEVICE_DETECTED + ): # fka DISK_ENCRYPTION_NOT_SUPPORTED_ERROR self.continue_button.clicked.connect(self._show_insert_encrypted_usb_message) else: self.continue_button.clicked.connect(self._show_generic_error_message) @@ -263,11 +278,11 @@ def _update_dialog(self, error_status: ExportStatus) -> None: self.continue_button.setEnabled(True) self.continue_button.setFocus() else: - if self.error_status == ExportStatus.BAD_PASSPHRASE: + if self.error_status == ExportStatus.ERROR_UNLOCK_LUKS: self._show_passphrase_request_message_again() - elif self.error_status == ExportStatus.USB_NOT_CONNECTED: + elif self.error_status == ExportStatus.NO_DEVICE_DETECTED: self._show_insert_usb_message() - elif self.error_status == ExportStatus.DISK_ENCRYPTION_NOT_SUPPORTED_ERROR: + elif self.error_status == ExportStatus.INVALID_DEVICE_DETECTED: self._show_insert_encrypted_usb_message() else: self._show_generic_error_message() diff --git a/client/securedrop_client/gui/conversation/export/print_dialog.py b/client/securedrop_client/gui/conversation/export/print_dialog.py index e3ce34ba2..32e160bd1 100644 --- a/client/securedrop_client/gui/conversation/export/print_dialog.py +++ b/client/securedrop_client/gui/conversation/export/print_dialog.py @@ -3,7 +3,8 @@ from PyQt5.QtCore import QSize, pyqtSlot -from securedrop_client.export import ExportError, ExportStatus +from securedrop_client.export import ExportError +from securedrop_client.export_status import ExportStatus from securedrop_client.gui.base import ModalDialog, SecureQLabel from .device import Device @@ -98,7 +99,10 @@ def _print_file(self) -> None: self.close() @pyqtSlot() - def _on_print_preflight_check_succeeded(self) -> None: + def _on_print_preflight_check_succeeded(self, status: ExportStatus) -> None: + # We don't use the ExportStatus for now for "success" status, + # but in future work we will migrate towards a wizard-style dialog, where + # success and intermediate status values all use the same PyQt slot. # If the continue button is disabled then this is the result of a background preflight check self.stop_animate_header() self.header_icon.update_image("printer.svg", svg_size=QSize(64, 64)) @@ -120,7 +124,7 @@ def _on_print_preflight_check_failed(self, error: ExportError) -> None: # If the continue button is disabled then this is the result of a background preflight check if not self.continue_button.isEnabled(): self.continue_button.clicked.disconnect() - if error.status == ExportStatus.PRINTER_NOT_FOUND: + if error.status == ExportStatus.ERROR_PRINTER_NOT_FOUND: self.continue_button.clicked.connect(self._show_insert_usb_message) else: self.continue_button.clicked.connect(self._show_generic_error_message) @@ -128,7 +132,7 @@ def _on_print_preflight_check_failed(self, error: ExportError) -> None: self.continue_button.setEnabled(True) self.continue_button.setFocus() else: - if error.status == ExportStatus.PRINTER_NOT_FOUND: + if error.status == ExportStatus.ERROR_PRINTER_NOT_FOUND: self._show_insert_usb_message() else: self._show_generic_error_message() diff --git a/client/securedrop_client/gui/widgets.py b/client/securedrop_client/gui/widgets.py index 85364a594..a03f5b905 100644 --- a/client/securedrop_client/gui/widgets.py +++ b/client/securedrop_client/gui/widgets.py @@ -60,7 +60,7 @@ QWidget, ) -from securedrop_client import state +from securedrop_client import export, state from securedrop_client.db import ( DraftReply, File, @@ -2255,7 +2255,7 @@ def __init__( self.controller = controller - self._export_device = conversation.ExportDevice(controller) + self._export_device = conversation.ExportDevice(controller, export.getService()) self.file = self.controller.get_file(file_uuid) self.uuid = file_uuid diff --git a/client/tests/conftest.py b/client/tests/conftest.py index 9266c0957..a7918bbc1 100644 --- a/client/tests/conftest.py +++ b/client/tests/conftest.py @@ -4,6 +4,7 @@ import tempfile from configparser import ConfigParser from datetime import datetime +from typing import List from uuid import uuid4 import pytest @@ -22,6 +23,7 @@ Source, make_session_maker, ) +from securedrop_client.export import ExportStatus from securedrop_client.gui import conversation from securedrop_client.gui.main import Window from securedrop_client.logic import Controller @@ -167,17 +169,39 @@ def homedir(i18n): yield tmpdir +class MockExportService(export.Service): + """An export service that assumes the Qubes RPC calls are successful and skips them.""" + + def __init__(self, unlocked: bool): + super().__init__() + if unlocked: + self.preflight_response = ExportStatus.DEVICE_WRITABLE + else: + self.preflight_response = ExportStatus.DEVICE_LOCKED + + def run_preflight_checks(self) -> None: + self.preflight_check_call_success.emit(self.preflight_response) + + def send_file_to_usb_device(self, filepaths: List[str], passphrase: str) -> None: + self.export_usb_call_success.emit(ExportStatus.SUCCESS_EXPORT) + self.export_completed.emit(filepaths) + + def run_printer_preflight(self) -> None: + self.printer_preflight_success.emit(ExportStatus.PRINT_PREFLIGHT_SUCCESS) + + def print(self, filepaths: List[str]) -> None: + self.print_call_success.emit(ExportStatus.PRINT_SUCCESS) + self.export_completed.emit(filepaths) + + @pytest.fixture(scope="function") def mock_export_service(): - """An export service that assumes the Qubes RPC calls are successful and skips them.""" - export_service = export.Service() - # Ensure the export_service doesn't rely on Qubes OS: - export_service._run_disk_test = lambda dir: None - export_service._run_usb_test = lambda dir: None - export_service._run_disk_export = lambda dir, paths, passphrase: None - export_service._run_printer_preflight = lambda dir: None - export_service._run_print = lambda dir, paths: None - return export_service + return MockExportService(unlocked=False) + + +@pytest.fixture(scope="function") +def mock_export_service_unlocked_device(): + return MockExportService(unlocked=True) @pytest.fixture(scope="function") diff --git a/client/tests/functional/cassettes/test_export_file_dialog_device_already_unlocked.yaml b/client/tests/functional/cassettes/test_export_file_dialog_device_already_unlocked.yaml new file mode 100644 index 000000000..d59c25ebb --- /dev/null +++ b/client/tests/functional/cassettes/test_export_file_dialog_device_already_unlocked.yaml @@ -0,0 +1,1518 @@ +interactions: +- request: + body: '{"username": "journalist", "passphrase": "correct horse battery staple + profanity oil chewy", "one_time_code": "123456"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '119' + User-Agent: + - python-requests/2.31.0 + method: POST + uri: http://localhost:8081/api/v1/token + response: + body: + string: '{"expiration":"2023-12-08T21:31:36.503560Z","journalist_first_name":null,"journalist_last_name":null,"journalist_uuid":"c63874d0-0723-475e-8773-a5a0eeaaa4f9","token":"IjkwQVJGa05CWDRQd3hwZVBWVTZfakI5Y3RxRy1JeWZNa3g2MkRGNmNlX2ci.ZXNvGA.4vDAGIjsM4zouaM3IhIBR3jzIrM"} + + ' + headers: + Connection: + - close + Content-Length: + - '265' + Content-Type: + - application/json + Date: + - Fri, 08 Dec 2023 19:31:36 GMT + Server: + - Werkzeug/2.2.3 Python/3.8.10 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token IjkwQVJGa05CWDRQd3hwZVBWVTZfakI5Y3RxRy1JeWZNa3g2MkRGNmNlX2ci.ZXNvGA.4vDAGIjsM4zouaM3IhIBR3jzIrM + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.31.0 + method: GET + uri: http://localhost:8081/api/v1/users + response: + body: + string: '{"users":[{"first_name":null,"last_name":null,"username":"journalist","uuid":"c63874d0-0723-475e-8773-a5a0eeaaa4f9"},{"first_name":null,"last_name":null,"username":"dellsberg","uuid":"ac647c21-82f5-4d19-8350-6657a7d32f6b"},{"first_name":null,"last_name":null,"username":"deleted","uuid":"200a587e-b40c-48eb-b18a-0d1263f8af2e"}]} + + ' + headers: + Connection: + - close + Content-Length: + - '329' + Content-Type: + - application/json + Date: + - Fri, 08 Dec 2023 19:31:36 GMT + Server: + - Werkzeug/2.2.3 Python/3.8.10 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token IjkwQVJGa05CWDRQd3hwZVBWVTZfakI5Y3RxRy1JeWZNa3g2MkRGNmNlX2ci.ZXNvGA.4vDAGIjsM4zouaM3IhIBR3jzIrM + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.31.0 + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: + string: '{"sources":[{"add_star_url":"/api/v1/sources/1924d581-a3af-45c6-a3c9-0ec2f1205bc1/add_star","interaction_count":6,"is_flagged":false,"is_starred":false,"journalist_designation":"oriental + hutch","key":{"fingerprint":"DF4DC2E19F0A6A304C8C3188AEF8C5E2BD8AE199","public":"-----BEGIN + PGP PUBLIC KEY BLOCK-----\nComment: DF4D C2E1 9F0A 6A30 4C8C 3188 AEF8 C5E2 + BD8A E199\nComment: Source Key "Metadata": logger.info("Parsing archive metadata") json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) - self.encryption_method = json_config.get("encryption_method", None) self.encryption_key = json_config.get("encryption_key", None) - logger.info( - "Target: {}, encryption_method {}".format( - self.export_method, self.encryption_method - ) - ) + self.encryption_method = json_config.get("encryption_method", None) + logger.info("Command: {}".format(self.export_method)) except Exception as ex: logger.error("Metadata parsing failure") @@ -54,12 +49,6 @@ def validate(self) -> "Metadata": try: logger.debug("Validate export action") self.command = Command(self.export_method) - if ( - self.command is Command.EXPORT - and self.encryption_method not in self.SUPPORTED_ENCRYPTION_METHODS - ): - logger.error("Unsupported encryption method") - raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) except ValueError as v: raise ExportException(sdstatus=Status.ERROR_ARCHIVE_METADATA) from v @@ -95,7 +84,5 @@ def set_metadata(self, metadata: Metadata) -> "Archive": """ self.command = metadata.command if self.command is Command.EXPORT: - # When we support multiple encryption types, we will also want to add the - # encryption_method here self.encryption_key = metadata.encryption_key return self diff --git a/export/securedrop_export/disk/__init__.py b/export/securedrop_export/disk/__init__.py index e61094546..760c6e07c 100644 --- a/export/securedrop_export/disk/__init__.py +++ b/export/securedrop_export/disk/__init__.py @@ -1,2 +1,2 @@ -from .legacy_service import Service as LegacyService # noqa: F401 -from .legacy_status import Status as LegacyStatus # noqa: F401 +from .service import Service # noqa: F401 +from .status import Status # noqa: F401 diff --git a/export/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py index abdc0c104..1148e17b6 100644 --- a/export/securedrop_export/disk/cli.py +++ b/export/securedrop_export/disk/cli.py @@ -1,8 +1,12 @@ +import json import logging import os +import pexpect +import re import subprocess +import time -from typing import List, Optional, Union +from typing import Optional, Union from securedrop_export.exceptions import ExportException @@ -11,338 +15,378 @@ logger = logging.getLogger(__name__) +_DEVMAPPER_PREFIX = "/dev/mapper/" +_DEV_PREFIX = "/dev/" +_UDISKS_PREFIX = ( + "MODEL REVISION SERIAL DEVICE\n" + "--------------------------------------------------------------------------\n" +) + class CLI: """ - A Python wrapper for various shell commands required to detect, map, and - mount Export devices. + A Python wrapper for shell commands required to detect, map, and + mount USB devices. - CLI callers must handle ExportException and all exceptions and exit with - sys.exit(0) so that another program does not attempt to open the submission. + CLI callers must handle ExportException. """ - # Default mountpoint (unless drive is already mounted manually by the user) - _DEFAULT_MOUNTPOINT = "/media/usb" - - def get_connected_devices(self) -> List[str]: + def get_volume(self) -> Union[Volume, MountedVolume]: """ - List all block devices attached to VM that are disks and not partitions. - Return list of all removable connected block devices. - - Raise ExportException if any commands fail. + Search for valid connected device. + Raise ExportException on error. """ logger.info("Checking connected volumes") try: - lsblk = subprocess.Popen( - ["lsblk", "-o", "NAME,TYPE"], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - grep = subprocess.Popen( - ["grep", "disk"], - stdin=lsblk.stdout, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, + usbs = ( + subprocess.check_output(["udisksctl", "status"]) + .decode("utf-8") + .removeprefix(_UDISKS_PREFIX) + .strip() + .split("\n") ) - command_output = grep.stdout.readlines() # type: ignore[union-attr] - - # The first word in each element of the command_output list is the device name - attached_devices = [x.decode("utf8").split()[0] for x in command_output] - - except subprocess.CalledProcessError as ex: - raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex - - return self._get_removable_devices(attached_devices) - - def _get_removable_devices(self, attached_devices: List[str]) -> List[str]: - """ - Determine which block devices are USBs by selecting those that are removable. - """ - logger.info("Checking removable devices") - usb_devices = [] - for device in attached_devices: - is_removable = False - try: - removable = subprocess.check_output( - ["cat", f"/sys/class/block/{device}/removable"], - stderr=subprocess.PIPE, - ) - - # removable is "0" for non-removable device, "1" for removable, - # convert that into a Python boolean - is_removable = bool(int(removable.decode("utf8").strip())) - except subprocess.CalledProcessError: - # Not a removable device - continue - - if is_removable: - usb_devices.append(f"/dev/{device}") - - logger.info(f"{len(usb_devices)} connected") - return usb_devices - - def get_partitioned_device(self, blkid: str) -> str: - """ - Given a string representing a block device, return string that includes correct partition - (such as "/dev/sda" or "/dev/sda1"). - - Raise ExportException if partition check fails or device has unsupported partition scheme - (currently, multiple partitions are unsupported). - """ - device_and_partitions = self._check_partitions(blkid) - - if device_and_partitions: - partition_count = ( - device_and_partitions.decode("utf-8").split("\n").count("part") - ) - logger.debug(f"Counted {partition_count} partitions") - if partition_count > 1: - # We don't currently support devices with multiple partitions + # Collect a space-separated list of USB device names. + # Format: + # Label (may contain spaces) Revision Serial# Device + # The last string is the device identifier (/dev/{device}). + targets = [] + for i in usbs: + item = i.strip().split() + if len(item) > 0: + targets.append(item[-1]) + + if len(targets) == 0: + logger.info("No USB devices found") + raise ExportException(sdstatus=Status.NO_DEVICE_DETECTED) + elif len(targets) > 1: logger.error( - f"Multiple partitions not supported ({partition_count} partitions" - f" on {blkid})" + "Too many possibilities! Detach a storage device before continuing." ) - raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) - - # redefine device to /dev/sda if disk is encrypted, /dev/sda1 if partition encrypted - if partition_count == 1: - logger.debug("One partition found") - blkid += "1" + raise ExportException(sdstatus=Status.MULTI_DEVICE_DETECTED) - return blkid + # lsblk -o NAME,RM,RO,TYPE,MOUNTPOINT,FSTYPE --json + # devices such as /dev/xvda are marked as "removable", + # which is why we do the previous check to pick a device + # recognized by udisks2 + lsblk = subprocess.check_output( + [ + "lsblk", + "--output", + "NAME,RO,TYPE,MOUNTPOINT,FSTYPE", + "--json", + ] + ).decode("utf-8") + + lsblk_json = json.loads(lsblk) + if not lsblk_json.get("blockdevices"): + logger.error("Unrecoverable: could not parse lsblk.") + raise ExportException(sdstatus=Status.DEVICE_ERROR) + + volumes = [] + for device in lsblk_json.get("blockdevices"): + if device.get("name") in targets and device.get("ro") is False: + logger.debug( + f"Checking removable, writable device {_DEV_PREFIX}{device.get('name')}" + ) + # Inspect partitions or whole volume. + # For sanity, we will only support encrypted partitions one level deep. + if "children" in device: + for partition in device.get("children"): + # /dev/sdX1, /dev/sdX2 etc + item = self._get_supported_volume(partition) + if item: + volumes.append(item) + # /dev/sdX + else: + item = self._get_supported_volume(device) + if item: + volumes.append(item) + + if len(volumes) != 1: + logger.error(f"Need one target, got {len(volumes)}") + raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) + else: + logger.debug(f"Export target is {volumes[0].device_name}") + return volumes[0] - else: - # lsblk did not return output we could process - logger.error("Error checking device partitions") - raise ExportException(sdstatus=Status.DEVICE_ERROR) - - def _check_partitions(self, blkid: str) -> bytes: - try: - logger.debug(f"Checking device partitions on {blkid}") - device_and_partitions = subprocess.check_output( - ["lsblk", "-o", "TYPE", "--noheadings", blkid], stderr=subprocess.PIPE - ) - return device_and_partitions + except json.JSONDecodeError as err: + logger.error(err) + raise ExportException(sdstatus=Status.DEVICE_ERROR) from err except subprocess.CalledProcessError as ex: - logger.error(f"Error checking block device {blkid}") raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex - def is_luks_volume(self, device: str) -> bool: + def _get_supported_volume( + self, device: dict + ) -> Optional[Union[Volume, MountedVolume]]: """ - Given a string representing a volume (/dev/sdX or /dev/sdX1), return True if volume is - LUKS-encrypted, otherwise False. + Given JSON-formatted lsblk output for one device, determine if it + is suitably partitioned and return it to be used for export, + mounting it if possible. + + Supported volumes: + * Unlocked Veracrypt drives + * Locked or unlocked LUKS drives + * No more than one encrypted partition (multiple non-encrypted partitions + are OK as they will be ignored). + + Note: It would be possible to support other unlocked encrypted drives, as long as + udisks2 can tell they contain an encrypted partition. """ - isLuks = False - - try: - logger.debug("Checking if target device is luks encrypted") - - # cryptsetup isLuks returns 0 if the device is a luks volume - # subprocess will throw if the device is not luks (rc !=0) - subprocess.check_call(["sudo", "cryptsetup", "isLuks", device]) - - isLuks = True - - except subprocess.CalledProcessError: - # Not necessarily an error state, just means the volume is not LUKS encrypted - logger.info("Target device is not LUKS-encrypted") - - return isLuks - - def _get_luks_name_from_headers(self, device: str) -> str: - """ - Dump LUKS header and determine name of volume. - - Raise ExportException if errors encounterd during attempt to parse LUKS headers. - """ - logger.debug("Get LUKS name from headers") - try: - luks_header = subprocess.check_output( - ["sudo", "cryptsetup", "luksDump", device] - ) - if luks_header: - luks_header_list = luks_header.decode("utf-8").split("\n") - for line in luks_header_list: - items = line.split("\t") - if "UUID" in items[0]: - return "luks-" + items[1] - - # If no header or no UUID field, we can't use this drive - logger.error( - f"Failed to get UUID from LUKS header; {device} may not be correctly formatted" - ) - raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) - except subprocess.CalledProcessError as ex: - logger.error("Failed to dump LUKS header") - raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex + device_name = device.get("name") + device_fstype = device.get("fstype") + + vol = Volume(f"{_DEV_PREFIX}{device_name}", EncryptionScheme.UNKNOWN) + + if device_fstype == "crypto_LUKS": + logger.debug(f"{device_name} is LUKS-encrypted") + vol.encryption = EncryptionScheme.LUKS + + children = device.get("children") + if children: + if len(children) != 1: + logger.error(f"Unexpected volume format on {vol.device_name}") + return None + elif children[0].get("type") != "crypt": + return None + else: + # It's an unlocked drive, possibly mounted + mapped_name = f"{_DEVMAPPER_PREFIX}{children[0].get('name')}" + + # Unlocked VC/TC drives will still have EncryptionScheme.UNKNOWN; + # see if we can do better + if vol.encryption == EncryptionScheme.UNKNOWN: + vol.encryption = self._is_it_veracrypt(vol) + + if children[0].get("mountpoint"): + logger.debug(f"{vol.device_name} is mounted") + + return MountedVolume( + device_name=vol.device_name, + unlocked_name=mapped_name, + encryption=vol.encryption, + mountpoint=children[0].get("mountpoint"), + ) + else: + # To opportunistically mount any unlocked encrypted partition + # (i.e. third-party devices such as IronKeys), remove this condition. + if vol.encryption in ( + EncryptionScheme.LUKS, + EncryptionScheme.VERACRYPT, + ): + logger.debug( + f"{device_name} is unlocked but unmounted; attempting mount" + ) + return self._mount_volume(vol, mapped_name) + + # Locked VeraCrypt drives are rejected here (EncryptionScheme.UNKNOWN) + if vol.encryption in (EncryptionScheme.LUKS, EncryptionScheme.VERACRYPT): + logger.debug(f"{vol.device_name} is supported export target") + return vol + else: + logger.debug(f"No suitable volume found on {vol.device_name}") + return None - def get_luks_volume(self, device: str) -> Union[Volume, MountedVolume]: + def _is_it_veracrypt(self, volume: Volume) -> EncryptionScheme: """ - Given a string corresponding to a LUKS-partitioned volume, return a corresponding Volume - object. - - If LUKS volume is already mounted, existing mountpoint will be preserved and a - MountedVolume object will be returned. - If LUKS volume is unlocked but not mounted, volume will be mounted at _DEFAULT_MOUNTPOINT, - and a MountedVolume object will be returned. - - If device is still locked, mountpoint will not be set, and a Volume object will be retuned. - Once the decrpytion passphrase is available, call unlock_luks_volume(), passing the Volume - object and passphrase to unlock the volume. - - Raise ExportException if errors are encountered. + Helper. Best-effort detection of unlocked VeraCrypt drives. + Udisks2 requires the flag file /etc/udisks2/tcrypt.conf to + enable VC detection, which we will ship with the `securedrop-export` package. """ try: - mapped_name = self._get_luks_name_from_headers(device) - logger.debug(f"Mapped name is {mapped_name}") - - # Setting the mapped_name does not mean the device has already been unlocked. - luks_volume = Volume( - device_name=device, - mapped_name=mapped_name, - encryption=EncryptionScheme.LUKS, - ) - - # If the device has been unlocked, we can see if it's mounted and - # use the existing mountpoint, or mount it ourselves. - # Either way, return a MountedVolume. - if os.path.exists(os.path.join("/dev/mapper/", mapped_name)): - return self.mount_volume(luks_volume) - - # It's still locked + info = subprocess.check_output( + [ + "udisksctl", + "info", + "--block-device", + f"{volume.device_name}", + ] + ).decode("utf-8") + if "IdType: crypto_TCRYPT\n" in info: + return EncryptionScheme.VERACRYPT + elif "IdType: crypto_LUKS\n" in info: + # Don't downgrade LUKS to UNKNOWN if someone + # calls this method on a LUKS drive + return EncryptionScheme.LUKS else: - return luks_volume + return EncryptionScheme.UNKNOWN + except subprocess.CalledProcessError as err: + logger.debug(f"Error checking disk info of {volume.device_name}") + logger.error(err) + # Not a showstopper + return EncryptionScheme.UNKNOWN + + def unlock_volume(self, volume: Volume, encryption_key: str) -> MountedVolume: + """ + Unlock and mount an encrypted volume. If volume is already mounted, preserve + existing mountpoint. - except ExportException: - logger.error("Failed to return luks volume") - raise + Throws ExportException if errors are encountered during device unlocking. - def unlock_luks_volume(self, volume: Volume, decryption_key: str) -> Volume: + `pexpect.ExeptionPexpect` can't be try/caught, since it's not a + child of BaseException, but instead, exceptions can be included + in the list of results to check for. (See + https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect) """ - Unlock a LUKS-encrypted volume. + logger.debug("Unlocking volume {}".format(volume.device_name)) + + command = f"udisksctl unlock --block-device {volume.device_name}" + prompt = ["Passphrase: ", pexpect.EOF, pexpect.TIMEOUT] + expected = [ + f"Unlocked {volume.device_name} as (.*)\.", + "GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Device " # string continues + f"{volume.device_name} is already unlocked as (.*)\.", + "GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Error " # string continues + f"unlocking {volume.device_name}: Failed to activate device: Incorrect passphrase", + pexpect.EOF, + pexpect.TIMEOUT, + ] + unlock_error = Status.ERROR_UNLOCK_GENERIC + + child = pexpect.spawn(command) + index = child.expect(prompt) + if index != 0: + logger.error("Did not receive disk unlock prompt") + raise ExportException(sdstatus=Status.ERROR_UNLOCK_GENERIC) + else: + logger.debug("Passing key") + child.sendline(encryption_key) + index = child.expect(expected) + if index == 0 or index == 1: + # We know what format the string is in + dm_name = child.match.group(1).decode("utf-8").strip() + logger.debug(f"Device is unlocked as {dm_name}") - Raise ExportException if errors are encountered during device unlocking. - """ - if volume.encryption is not EncryptionScheme.LUKS: - logger.error("Must call unlock_luks_volume() on LUKS-encrypted device") - raise ExportException(sdstatus=Status.DEVICE_ERROR) + child.close() + if (child.exitstatus) not in (0, 1): + logger.warning(f"pexpect: child exited with {child.exitstatus}") - try: - logger.debug("Unlocking luks volume {}".format(volume.device_name)) - p = subprocess.Popen( - [ - "sudo", - "cryptsetup", - "luksOpen", - volume.device_name, - volume.mapped_name, - ], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - logger.debug("Passing key") - p.communicate(input=str.encode(decryption_key, "utf-8")) - rc = p.returncode - - if rc == 0: - return Volume( - device_name=volume.device_name, - mapped_name=volume.mapped_name, - encryption=EncryptionScheme.LUKS, - ) - else: - logger.error("Bad volume passphrase") - raise ExportException(sdstatus=Status.ERROR_UNLOCK_LUKS) + # dm_name format is /dev/dm-X + return self._mount_volume(volume, dm_name) - except subprocess.CalledProcessError as ex: - raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex + elif index == 2: + # Still an error, but we can report more specific error to the user + logger.debug("Bad volume passphrase") + unlock_error = Status.ERROR_UNLOCK_LUKS - def _get_mountpoint(self, volume: Volume) -> Optional[str]: - """ - Check for existing mountpoint. - Raise ExportException if errors encountered during command. - """ - logger.debug("Checking mountpoint") - try: - output = subprocess.check_output( - ["lsblk", "-o", "MOUNTPOINT", "--noheadings", volume.device_name] - ) - return output.decode("utf-8").strip() + # Any other index values are also an error. Clean up and raise + child.close() - except subprocess.CalledProcessError as ex: - logger.error(ex) - raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + logger.error(f"Error encountered while unlocking {volume.device_name}") + raise ExportException(sdstatus=unlock_error) - def mount_volume(self, volume: Volume) -> MountedVolume: + def _mount_volume(self, volume: Volume, full_unlocked_name: str) -> MountedVolume: """ - Given an unlocked LUKS volume, return MountedVolume object. + Given an unlocked volume, mount volume in /media/user/ by udisksctl and + return MountedVolume object. - If volume is already mounted, mountpoint is not changed. Otherwise, - volume is mounted at _DEFAULT_MOUNTPOINT. + Unlocked name could be `/dev/mapper/$id` or `/dev/dm-X`. Raise ExportException if errors are encountered during mounting. + + `pexpect.ExeptionPexpect` can't be try/caught, since it's not a + child of BaseException, but instead, exceptions can be included + in the list of results to check for. (See + https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect) """ - if not volume.unlocked: - logger.error("Volume is not unlocked.") - raise ExportException(sdstatus=Status.ERROR_MOUNT) - mountpoint = self._get_mountpoint(volume) + info = f"udisksctl info --block-device {volume.device_name}" + # \x1b[37mPreferredDevice:\x1b[0m /dev/sdaX\r\n + expected_info = [ + f"*PreferredDevice:[\t+]{volume.device_name}\r\n", + "*Error looking up object for device*", + pexpect.EOF, + pexpect.TIMEOUT, + ] + max_retries = 3 + + unlock = f"udisksctl mount --block-device {full_unlocked_name}" + + # We can't pass {full_unlocked_name} in the match statement since even if we + # pass in /dev/mapper/xxx, udisks2 may refer to the disk as /dev/dm-X. + expected_unlock = [ + f"Mounted * at (.*)", + f"Error mounting *: GDBus.Error:org." # string continues + "freedesktop.UDisks2.Error.AlreadyMounted: " # string continues + "Device .* is already mounted at `(.*)'", + f"Error looking up object for device *.", + pexpect.EOF, + pexpect.TIMEOUT, + ] + mountpoint = None + + logger.debug(f"Check to make sure udisks identified {volume.device_name} " + "(unlocked as {full_unlocked_name})") + for _ in range(max_retries): + child = pexpect.spawn(info) + index = child.expect(expected_info) + logger.debug(f"Results from udisks info: {volume.device_name}, " + "before: {child.before}, after: {child.after}") + child.close() + + if index != 0: + logger.debug(f"index {index}") + logger.warning( + f"udisks can't identify {volume.device_name}, retrying..." + ) + time.sleep(0.5) + else: + print(f"udisks found {volume.device_name}") + break - if mountpoint: - logger.info("The device is already mounted--use existing mountpoint") - return MountedVolume.from_volume(volume, mountpoint) + logger.info(f"Mount {full_unlocked_name} using udisksctl") + child = pexpect.spawn(unlock) + index = child.expect(expected_unlock) - else: - logger.info("Mount volume at default mountpoint") - return self._mount_at_mountpoint(volume, self._DEFAULT_MOUNTPOINT) + logger.debug( + f"child: {str(child.match)}, before: {child.before}, after: {child.after}" + ) - def _mount_at_mountpoint(self, volume: Volume, mountpoint: str) -> MountedVolume: - """ - Mount a volume at the supplied mountpoint, creating the mountpoint directory and - adjusting permissions (user:user) if need be. `mountpoint` must be a full path. + if index == 0: + # As above, we know the format + mountpoint = child.match.group(1).decode("utf-8").strip() + logger.debug(f"Successfully mounted device at {mountpoint}") - Return MountedVolume object. - Raise ExportException if unable to mount volume at target mountpoint. - """ - if not os.path.exists(mountpoint): - try: - subprocess.check_call(["sudo", "mkdir", mountpoint]) - except subprocess.CalledProcessError as ex: - logger.error(ex) - raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + elif index == 1: + # Mountpoint needs a bit of help. It arrives in the form `/path/to/mountpoint'. + # including the one backtick, single quote, and the period + mountpoint = child.match.group(1).decode("utf-8").strip() + logger.debug(f"Device already mounted at {mountpoint}") - # Mount device /dev/mapper/{mapped_name} at /media/usb/ - mapped_device_path = os.path.join( - volume.MAPPED_VOLUME_PREFIX, volume.mapped_name - ) + elif index == 2: + logger.debug("Device is not ready") - try: - logger.info(f"Mounting volume at {mountpoint}") - subprocess.check_call(["sudo", "mount", mapped_device_path, mountpoint]) - subprocess.check_call(["sudo", "chown", "-R", "user:user", mountpoint]) + child.close() - except subprocess.CalledProcessError as ex: - logger.error(ex) - raise ExportException(sdstatus=Status.ERROR_MOUNT) from ex + if mountpoint: + return MountedVolume( + device_name=volume.device_name, + unlocked_name=full_unlocked_name, + encryption=volume.encryption, + mountpoint=mountpoint, + ) - return MountedVolume.from_volume(volume, mountpoint) + logger.error("Could not get mountpoint") + raise ExportException(sdstatus=Status.ERROR_MOUNT) def write_data_to_device( self, + device: MountedVolume, submission_tmpdir: str, submission_target_dirname: str, - device: MountedVolume, ): """ Move files to drive (overwrites files with same filename) and unmount drive. + Drive is unmounted and files are cleaned up as part of the `finally` block to ensure that cleanup happens even if export fails or only partially succeeds. """ try: + # Flag to pass to cleanup method + is_error = False + target_path = os.path.join(device.mountpoint, submission_target_dirname) subprocess.check_call(["mkdir", target_path]) @@ -356,74 +400,99 @@ def write_data_to_device( except (subprocess.CalledProcessError, OSError) as ex: logger.error(ex) + + # Ensure we report an export error out after cleanup + is_error = True raise ExportException(sdstatus=Status.ERROR_EXPORT) from ex finally: - self.cleanup_drive_and_tmpdir(device, submission_tmpdir) + self.cleanup(device, submission_tmpdir, is_error) - def cleanup_drive_and_tmpdir(self, volume: MountedVolume, submission_tmpdir: str): + def cleanup( + self, + volume: MountedVolume, + submission_tmpdir: str, + is_error: bool = False, + should_close_volume: bool = True, + ): """ Post-export cleanup method. Unmount and lock drive and remove temporary - directory. Currently called at end of `write_data_to_device()` to ensure - device is always locked after export. + directory. - Raise ExportException if errors during cleanup are encountered. + Raises ExportException if errors during cleanup are encountered. + + Method is called whether or not export succeeds; if `is_error` is True, + will report export error status on error (insted of cleanup status). """ + error_status = Status.ERROR_EXPORT if is_error else Status.ERROR_EXPORT_CLEANUP + logger.debug("Syncing filesystems") try: subprocess.check_call(["sync"]) - umounted = self._unmount_volume(volume) - if umounted: - self._close_luks_volume(umounted) self._remove_temp_directory(submission_tmpdir) + # Future configurable option + if should_close_volume: + self._close_volume(volume) + except subprocess.CalledProcessError as ex: logger.error("Error syncing filesystem") - raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex + raise ExportException(sdstatus=error_status) from ex - def _unmount_volume(self, volume: MountedVolume) -> Volume: + def _close_volume(self, mv: MountedVolume) -> Volume: """ - Helper. Unmount volume + Unmount and close volume. """ - if os.path.exists(volume.mountpoint): - logger.debug(f"Unmounting drive from {volume.mountpoint}") + if os.path.exists(mv.mountpoint): + logger.debug(f"Unmounting drive {mv.unlocked_name} from {mv.mountpoint}") try: - subprocess.check_call(["sudo", "umount", volume.mountpoint]) + subprocess.check_call( + [ + "udisksctl", + "unmount", + "--block-device", + f"{mv.unlocked_name}", + ] + ) except subprocess.CalledProcessError as ex: + logger.error(ex) logger.error("Error unmounting device") - raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex + + raise ExportException(sdstatus=Status.ERROR_UNMOUNT_VOLUME_BUSY) from ex else: logger.info("Mountpoint does not exist; volume was already unmounted") - return Volume( - device_name=volume.device_name, - mapped_name=volume.mapped_name, - encryption=volume.encryption, - ) - - def _close_luks_volume(self, unlocked_device: Volume) -> None: - """ - Helper. Close LUKS volume - """ - if os.path.exists(os.path.join("/dev/mapper", unlocked_device.mapped_name)): - logger.debug("Locking luks volume {}".format(unlocked_device)) + if os.path.exists(f"{mv.unlocked_name}"): + logger.debug(f"Closing drive {mv.device_name}") try: subprocess.check_call( - ["sudo", "cryptsetup", "luksClose", unlocked_device.mapped_name] + [ + "udisksctl", + "lock", + "--block-device", + f"{mv.device_name}", + ] ) except subprocess.CalledProcessError as ex: logger.error("Error closing device") - raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex + else: + logger.info("Mapped entry does not exist; volume was already closed") + + return Volume( + device_name=f"{_DEV_PREFIX}{mv.device_name}", + encryption=mv.encryption, + ) def _remove_temp_directory(self, tmpdir: str): """ - Helper. Remove temporary directory used during archive export. + Helper. Remove temporary directory used during export. """ logger.debug(f"Deleting temporary directory {tmpdir}") try: subprocess.check_call(["rm", "-rf", tmpdir]) except subprocess.CalledProcessError as ex: logger.error("Error removing temporary directory") - raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex + raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex diff --git a/export/securedrop_export/disk/legacy_service.py b/export/securedrop_export/disk/legacy_service.py deleted file mode 100644 index 3dbe6acaa..000000000 --- a/export/securedrop_export/disk/legacy_service.py +++ /dev/null @@ -1,156 +0,0 @@ -import logging - -from securedrop_export.exceptions import ExportException - -from .cli import CLI -from .legacy_status import Status as LegacyStatus -from .status import Status as Status -from .volume import MountedVolume - -logger = logging.getLogger(__name__) - - -class Service: - def __init__(self, submission, cli=None): - self.submission = submission - self.cli = cli or CLI() - - def check_connected_devices(self) -> LegacyStatus: - """ - Check if single USB is inserted. - """ - logger.info("Export archive is usb-test") - - try: - all_devices = self.cli.get_connected_devices() - num_devices = len(all_devices) - - except ExportException as ex: - logger.error(f"Error encountered during USB check: {ex.sdstatus.value}") - # Use legacy status instead of new status values - raise ExportException(sdstatus=LegacyStatus.LEGACY_ERROR_USB_CHECK) from ex - - if num_devices == 0: - raise ExportException(sdstatus=LegacyStatus.LEGACY_USB_NOT_CONNECTED) - elif num_devices == 1: - return LegacyStatus.LEGACY_USB_CONNECTED - elif num_devices > 1: - raise ExportException( - sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - ) - else: - # Unreachable, num_devices is a non-negative integer, - # and we handled all possible cases already - raise ValueError(f"unreachable: num_devices is negative: {num_devices}") - - def check_disk_format(self) -> LegacyStatus: - """ - Check if volume is correctly formatted for export. - """ - try: - all_devices = self.cli.get_connected_devices() - - if len(all_devices) == 1: - device = self.cli.get_partitioned_device(all_devices[0]) - logger.info("Check if LUKS") - if not self.cli.is_luks_volume(device): - raise ExportException( - sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - ) - # We can support checking if a drive is already unlocked, but for - # backwards compatibility, this is the only expected status - # at this stage - return LegacyStatus.LEGACY_USB_ENCRYPTED - else: - logger.error("Multiple partitions not supported") - return LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - - except ExportException as ex: - logger.error( - f"Error encountered during disk format check: {ex.sdstatus.value}" - ) - # Return legacy status values for now for ongoing client compatibility - if ex.sdstatus in [s for s in Status]: - status = self._legacy_status(ex.sdstatus) - raise ExportException(sdstatus=status) - elif ex.sdstatus: - raise - else: - raise ExportException(sdstatus=LegacyStatus.LEGACY_USB_DISK_ERROR) - - def export(self): - """ - Export all files to target device. - """ - logger.info("Export archive is disk") - - try: - all_devices = self.cli.get_connected_devices() - - if len(all_devices) == 1: - device = self.cli.get_partitioned_device(all_devices[0]) - - # Decide what kind of volume it is - logger.info("Check if LUKS") - if self.cli.is_luks_volume(device): - volume = self.cli.get_luks_volume(device) - logger.info("Check if writable") - if not isinstance(volume, MountedVolume): - logger.info("Not writable-will try unlocking") - volume = self.cli.unlock_luks_volume( - volume, self.submission.encryption_key - ) - mounted_volume = self.cli.mount_volume(volume) - - logger.info(f"Export submission to {mounted_volume.mountpoint}") - self.cli.write_data_to_device( - self.submission.tmpdir, - self.submission.target_dirname, - mounted_volume, - ) - # This is SUCCESS_EXPORT, but the 0.7.0 client is not expecting - # a return status from a successful export operation. - # When the client is updated, we will return SUCCESS_EXPORT here. - - else: - # Another kind of drive: VeraCrypt/TC, or unsupported. - # For now this is an error--in future there will be support - # for additional encryption formats - logger.error(f"Export failed because {device} is not supported") - raise ExportException( - sdstatus=LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - ) - - except ExportException as ex: - logger.error( - f"Error encountered during disk format check: {ex.sdstatus.value}" - ) - # Return legacy status values for now for ongoing client compatibility - if ex.sdstatus in [s for s in Status]: - status = self._legacy_status(ex.sdstatus) - raise ExportException(sdstatus=status) - elif ex.sdstatus: - raise - else: - raise ExportException(sdstatus=LegacyStatus.LEGACY_ERROR_GENERIC) - - def _legacy_status(self, status: Status) -> LegacyStatus: - """ - Backwards-compatibility - status values that client (@0.7.0) is expecting. - """ - logger.info(f"Convert to legacy: {status.value}") - if status is Status.ERROR_MOUNT: - return LegacyStatus.LEGACY_ERROR_USB_MOUNT - elif status in [Status.ERROR_EXPORT, Status.ERROR_EXPORT_CLEANUP]: - return LegacyStatus.LEGACY_ERROR_USB_WRITE - elif status in [Status.ERROR_UNLOCK_LUKS, Status.ERROR_UNLOCK_GENERIC]: - return LegacyStatus.LEGACY_USB_BAD_PASSPHRASE - elif status in [ - Status.INVALID_DEVICE_DETECTED, - Status.MULTI_DEVICE_DETECTED, - ]: - return LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - # The other status values, such as Status.NO_DEVICE_DETECTED, are not returned by the - # CLI, so we don't need to check for them here - else: - return LegacyStatus.LEGACY_ERROR_GENERIC diff --git a/export/securedrop_export/disk/legacy_status.py b/export/securedrop_export/disk/legacy_status.py deleted file mode 100644 index 77f0fa6ce..000000000 --- a/export/securedrop_export/disk/legacy_status.py +++ /dev/null @@ -1,25 +0,0 @@ -from securedrop_export.status import BaseStatus - - -class Status(BaseStatus): - LEGACY_ERROR_GENERIC = "ERROR_GENERIC" - - # Legacy USB preflight related - LEGACY_USB_CONNECTED = "USB_CONNECTED" # Success - LEGACY_USB_NOT_CONNECTED = "USB_NOT_CONNECTED" - LEGACY_ERROR_USB_CHECK = "ERROR_USB_CHECK" - - # Legacy USB Disk preflight related errors - LEGACY_USB_ENCRYPTED = "USB_ENCRYPTED" # Success - LEGACY_USB_ENCRYPTION_NOT_SUPPORTED = "USB_ENCRYPTION_NOT_SUPPORTED" - - # Can be raised during disk format check - LEGACY_USB_DISK_ERROR = "USB_DISK_ERROR" - - # Legacy Disk export errors - LEGACY_USB_BAD_PASSPHRASE = "USB_BAD_PASSPHRASE" - LEGACY_ERROR_USB_MOUNT = "ERROR_USB_MOUNT" - LEGACY_ERROR_USB_WRITE = "ERROR_USB_WRITE" - - # New - SUCCESS_EXPORT = "SUCCESS_EXPORT" diff --git a/export/securedrop_export/disk/service.py b/export/securedrop_export/disk/service.py index 1db9a8338..6a7b7cdfd 100644 --- a/export/securedrop_export/disk/service.py +++ b/export/securedrop_export/disk/service.py @@ -1,24 +1,23 @@ import logging -from securedrop_export.archive import Archive - from .cli import CLI from .status import Status -from .volume import Volume, MountedVolume +from .volume import MountedVolume, Volume +from securedrop_export.archive import Archive from securedrop_export.exceptions import ExportException - logger = logging.getLogger(__name__) class Service: """ - Checks that can be performed against the device(s). + Actions that can be performed against USB device(s). This is the "API" portion of the export workflow. """ - def __init__(self, cli: CLI): + def __init__(self, submission: Archive, cli: CLI = CLI()): self.cli = cli + self.submission = submission def scan_all_devices(self) -> Status: """ @@ -26,89 +25,55 @@ def scan_all_devices(self) -> Status: status. """ try: - all_devices = self.cli.get_connected_devices() - number_devices = len(all_devices) - - if number_devices == 0: - return Status.NO_DEVICE_DETECTED - elif number_devices > 1: - return Status.MULTI_DEVICE_DETECTED + volume = self.cli.get_volume() + if isinstance(volume, MountedVolume): + return Status.DEVICE_WRITABLE + elif isinstance(volume, Volume): + return Status.DEVICE_LOCKED else: - return self.scan_single_device(all_devices[0]) + # Above will return MountedVolume, Volume, or raise error; + # this shouldn't be reachable + raise ExportException(sdstatus=Status.DEVICE_ERROR) except ExportException as ex: - logger.error(ex) - return Status.DEVICE_ERROR # Could not assess devices + logger.debug(ex) + status = ex.sdstatus if ex.sdstatus is not None else Status.DEVICE_ERROR + logger.error(f"Encountered {status.value} while checking volumes") + return status - def scan_single_device(self, blkid: str) -> Status: + def export(self) -> Status: """ - Given a string representing a single block device, see if it - is a suitable export target and return information about its state. + Export material to USB drive. """ try: - target = self.cli.get_partitioned_device(blkid) - - # See if it's a LUKS drive - if self.cli.is_luks_volume(target): - # Returns Volume or throws ExportException - self.volume = self.cli.get_luks_volume(target) - - # See if it's unlocked and mounted - if isinstance(self.volume, MountedVolume): - logger.debug("LUKS device is already mounted") - return Status.DEVICE_WRITABLE + volume = self.cli.get_volume() + if isinstance(volume, MountedVolume): + logger.debug("Mounted volume detected, exporting files") + self.cli.write_data_to_device( + volume, self.submission.tmpdir, self.submission.target_dirname + ) + return Status.SUCCESS_EXPORT + elif isinstance(volume, Volume): + if self.submission.encryption_key is not None: + logger.debug("Volume is locked, try unlocking") + mv = self.cli.unlock_volume(volume, self.submission.encryption_key) + if isinstance(mv, MountedVolume): + logger.debug("Export to device") + # Exports then locks the drive. + # If the export succeeds but the drive is in use, will raise + # exception. + self.cli.write_data_to_device( + mv, self.submission.tmpdir, self.submission.target_dirname + ) + return Status.SUCCESS_EXPORT + else: + raise ExportException(sdstatus=Status.ERROR_UNLOCK_GENERIC) else: - # Prompt for passphrase + logger.info("Volume is locked and no key has been provided") return Status.DEVICE_LOCKED - else: - # Might be VeraCrypt, might be madness - logger.info("LUKS drive not found") - - # Currently we don't support anything other than LUKS. - # In future, we will support TC/VC volumes as well - return Status.INVALID_DEVICE_DETECTED except ExportException as ex: - logger.error(ex) - if ex.sdstatus: - return ex.sdstatus - else: - return Status.DEVICE_ERROR - - def unlock_device(self, passphrase: str, volume: Volume) -> Status: - """ - Given provided passphrase, unlock target volume. Currently, - LUKS volumes are supported. - """ - if volume: - try: - self.volume = self.cli.unlock_luks_volume(volume, passphrase) - - if isinstance(volume, MountedVolume): - return Status.DEVICE_WRITABLE - else: - return Status.ERROR_UNLOCK_LUKS - - except ExportException as ex: - logger.error(ex) - return Status.ERROR_UNLOCK_LUKS - else: - # Trying to unlock devices before having an active device - logger.warning("Tried to unlock_device but no current volume detected.") - return Status.NO_DEVICE_DETECTED - - def write_to_device(self, volume: MountedVolume, data: Archive) -> Status: - """ - Export data to volume. CLI unmounts and locks volume on completion, even - if export was unsuccessful. - """ - try: - self.cli.write_data_to_device(data.tmpdir, data.target_dirname, volume) - return Status.SUCCESS_EXPORT - - except ExportException as ex: - logger.error(ex) - if ex.sdstatus: - return ex.sdstatus - else: - return Status.ERROR_EXPORT + logger.debug(ex) + status = ex.sdstatus if ex.sdstatus is not None else Status.ERROR_EXPORT + logger.error(f"Enountered {status.value} while trying to export") + return status diff --git a/export/securedrop_export/disk/status.py b/export/securedrop_export/disk/status.py index 7ce713913..ca04ccaef 100644 --- a/export/securedrop_export/disk/status.py +++ b/export/securedrop_export/disk/status.py @@ -3,24 +3,30 @@ class Status(BaseStatus): NO_DEVICE_DETECTED = "NO_DEVICE_DETECTED" + INVALID_DEVICE_DETECTED = ( - "INVALID_DEVICE_DETECTED" # Multi partitioned, not encrypted, etc + "INVALID_DEVICE_DETECTED" # Not encrypted, or partitions too many/too nested ) + MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported - DEVICE_LOCKED = "DEVICE_LOCKED" # One device detected, and it's locked + DEVICE_LOCKED = "DEVICE_LOCKED" # One valid device detected, and it's locked DEVICE_WRITABLE = ( - "DEVICE_WRITABLE" # One device detected, and it's unlocked (and mounted) + "DEVICE_WRITABLE" # One valid device detected, and it's unlocked (and mounted) ) - ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" - ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" + ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" # Bad passphrase (LUKS) + ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" # May not be used ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted SUCCESS_EXPORT = "SUCCESS_EXPORT" ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk - # export succeeds but drives were not properly unmounted + # Export succeeds but drive was not unmounted because the volume is busy. + # This could happen if the user has an application using the drive elsewhere + ERROR_UNMOUNT_VOLUME_BUSY = "ERROR_UNMOUNT_VOLUME_BUSY" + + # Export succeeds but drives were not properly unmounted (generic) ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" DEVICE_ERROR = ( diff --git a/export/securedrop_export/disk/volume.py b/export/securedrop_export/disk/volume.py index aae7d9332..09ba45f96 100644 --- a/export/securedrop_export/disk/volume.py +++ b/export/securedrop_export/disk/volume.py @@ -1,5 +1,4 @@ from enum import Enum -import os class EncryptionScheme(Enum): @@ -9,25 +8,21 @@ class EncryptionScheme(Enum): UNKNOWN = 0 LUKS = 1 + VERACRYPT = 2 class Volume: - MAPPED_VOLUME_PREFIX = "/dev/mapper/" - """ A volume on a removable device. - Volumes have a device name ("/dev/sdX"), a mapped name ("/dev/mapper/xxx"), an encryption - scheme, and a mountpoint if they are mounted. + Volumes have a device name ("/dev/sdX") and an encryption scheme. """ def __init__( self, device_name: str, - mapped_name: str, encryption: EncryptionScheme, ): self.device_name = device_name - self.mapped_name = mapped_name self.encryption = encryption @property @@ -41,39 +36,22 @@ def encryption(self, scheme: EncryptionScheme): else: self._encryption = EncryptionScheme.UNKNOWN - @property - def unlocked(self) -> bool: - return ( - self.mapped_name is not None - and self.encryption is not EncryptionScheme.UNKNOWN - and os.path.exists( - os.path.join(self.MAPPED_VOLUME_PREFIX, self.mapped_name) - ) - ) - class MountedVolume(Volume): """ An unlocked and mounted Volume. + + Device name (from Volume) and unlocked name + are full paths (/dev/sdX, /dev/dm-X, /dev/mapper/idx). """ def __init__( self, device_name: str, - mapped_name: str, + unlocked_name: str, encryption: EncryptionScheme, mountpoint: str, ): - super().__init__( - device_name=device_name, mapped_name=mapped_name, encryption=encryption - ) + super().__init__(device_name=device_name, encryption=encryption) + self.unlocked_name = unlocked_name self.mountpoint = mountpoint - - @classmethod - def from_volume(cls, vol: Volume, mountpoint: str): - return cls( - device_name=vol.device_name, - mapped_name=vol.mapped_name, - encryption=vol.encryption, - mountpoint=mountpoint, - ) diff --git a/export/securedrop_export/main.py b/export/securedrop_export/main.py index bc55ae159..4535a1dc7 100755 --- a/export/securedrop_export/main.py +++ b/export/securedrop_export/main.py @@ -1,3 +1,5 @@ +import contextlib +import io import os import shutil import platform @@ -11,8 +13,7 @@ from securedrop_export.directory import safe_mkdir from securedrop_export.exceptions import ExportException -from securedrop_export.disk import LegacyService as ExportService -from securedrop_export.disk import LegacyStatus +from securedrop_export.disk import Service as ExportService from securedrop_export.print import Service as PrintService from logging.handlers import TimedRotatingFileHandler, SysLogHandler @@ -43,6 +44,8 @@ def entrypoint(): Non-zero exit values will cause the system to try alternative solutions for mimetype handling, which we want to avoid. + + The program is called with the archive name as the first argument. """ status, submission = None, None @@ -54,7 +57,8 @@ def entrypoint(): # Halt if target file is absent if not os.path.exists(data_path): - logger.info("Archive is not found {}.".format(data_path)) + logger.error("Archive not found at provided path.") + logger.debug("Archive missing, path: {}".format(data_path)) status = Status.ERROR_FILE_NOT_FOUND else: @@ -70,16 +74,18 @@ def entrypoint(): submission.set_metadata(metadata) logger.info(f"Start {metadata.command.value} service") status = _start_service(submission) + logger.info(f"Status: {status.value}") - except ExportException as ex: - logger.error(f"Encountered exception {ex.sdstatus.value}, exiting") + # Gotta catch'em all. A nonzero exit status will cause other programs + # to try to handle the files, which we don't want. + except Exception as ex: logger.error(ex) - status = ex.sdstatus - - except Exception as exc: - logger.error("Encountered exception during export, exiting") - logger.error(exc) - status = Status.ERROR_GENERIC + if isinstance(ex, ExportException): + logger.error(f"Encountered exception {ex.sdstatus.value}, exiting") + status = ex.sdstatus + else: + logger.error("Encountered exception during export, exiting") + status = Status.ERROR_GENERIC finally: _exit_gracefully(submission, status) @@ -125,7 +131,7 @@ def _configure_logging(): raise ExportException(sdstatus=Status.ERROR_LOGGING) from ex -def _start_service(submission: Archive) -> LegacyStatus: +def _start_service(submission: Archive) -> BaseStatus: """ Start print or export service. """ @@ -140,10 +146,11 @@ def _start_service(submission: Archive) -> LegacyStatus: # Export routines elif submission.command is Command.EXPORT: return ExportService(submission).export() - elif submission.command is Command.CHECK_USBS: - return ExportService(submission).check_connected_devices() - elif submission.command is Command.CHECK_VOLUME: - return ExportService(submission).check_disk_format() + elif ( + submission.command is Command.CHECK_USBS + or submission.command is Command.CHECK_VOLUME + ): + return ExportService(submission).scan_all_devices() # Unreachable raise ExportException( @@ -151,16 +158,12 @@ def _start_service(submission: Archive) -> LegacyStatus: ) -def _exit_gracefully(submission: Archive, status: Optional[BaseStatus] = None): +def _exit_gracefully(submission: Archive, status: BaseStatus): """ Write status code, ensure file cleanup, and exit with return code 0. Non-zero exit values will cause the system to try alternative solutions for mimetype handling, which we want to avoid. """ - if status: - logger.info(f"Exit gracefully with status: {status.value}") - else: - logger.info("Exit gracefully (no status code supplied)") try: # If the file archive was extracted, delete before returning if submission and os.path.isdir(submission.tmpdir): @@ -177,13 +180,30 @@ def _exit_gracefully(submission: Archive, status: Optional[BaseStatus] = None): sys.exit(0) -def _write_status(status: Optional[BaseStatus]): +def _write_status(status: BaseStatus): """ - Write string to stderr. + Write status string to stderr. Flush stderr and stdout before we exit. """ - if status: - logger.info(f"Write status {status.value}") + logger.info(f"Write status {status.value}") + try: + # First we will log errors from stderr elsewhere + tmp_stderr = io.StringIO() + tmp_stdout = io.StringIO() + with contextlib.redirect_stderr(tmp_stderr), contextlib.redirect_stdout( + tmp_stdout + ): + sys.stderr.flush() + sys.stdout.flush() + if len(tmp_stderr.getvalue()) > 0: + logger.error(f"Error capture: {tmp_stderr.getvalue()}") + if len(tmp_stdout.getvalue()) > 0: + logger.info(f"stdout capture: {tmp_stderr.getvalue()}") + sys.stderr.write(status.value) sys.stderr.write("\n") - else: - logger.info("No status value supplied") + sys.stderr.flush() + sys.stdout.flush() + except BrokenPipeError: + devnull = os.open(os.devnull, os.O_WRONLY) + os.dup2(devnull, sys.stdout.fileno()) + os.dup2(devnull, sys.stderr.fileno()) diff --git a/export/tests/disk/test_cli.py b/export/tests/disk/test_cli.py index 798980905..2723d5f36 100644 --- a/export/tests/disk/test_cli.py +++ b/export/tests/disk/test_cli.py @@ -1,7 +1,10 @@ import pytest +from pexpect import ExceptionPexpect from unittest import mock import subprocess +import pexpect +import re from securedrop_export.disk.cli import CLI from securedrop_export.disk.volume import EncryptionScheme, Volume, MountedVolume @@ -10,24 +13,64 @@ from securedrop_export.archive import Archive +# Sample lsblk and udisk inputs for testing the parsing of different device conditions +from ..lsblk_sample import ( + UDISKS_STATUS_MULTI_CONNECTED, + UDISKS_STATUS_ONE_DEVICE_CONNECTED, + UDISKS_STATUS_NOTHING_CONNECTED, + ONE_DEVICE_LUKS_UNMOUNTED, + ONE_DEVICE_VC_UNLOCKED, + ERROR_ONE_DEVICE_LUKS_MOUNTED_MULTI_UNKNOWN_AVAILABLE, + ERROR_NO_SUPPORTED_DEVICE, + ERROR_UNENCRYPTED_DEVICE_MOUNTED, + ERROR_DEVICE_MULTI_ENC_PARTITION, + SINGLE_DEVICE_LOCKED, + SINGLE_PART_LUKS_WRITABLE, + SINGLE_PART_LUKS_UNLOCKED_UNMOUNTED, + SINGLE_PART_UNLOCKED_VC_UNMOUNTED, + SINGLE_DEVICE_ERROR_PARTITIONS_TOO_NESTED, + SINGLE_DEVICE_ERROR_MOUNTED_PARTITION_NOT_ENCRYPTED, + SINGLE_PART_VC_WRITABLE, +) + +_PRETEND_LUKS_ID = "/dev/mapper/luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094" +_PRETEND_VC = "/dev/mapper/tcrypt-2049" _DEFAULT_USB_DEVICE = "/dev/sda" -_DEFAULT_USB_DEVICE_ONE_PART = "/dev/sda1" -_PRETEND_LUKS_ID = "luks-id-123456" -# Sample stdout from shell commands -_SAMPLE_OUTPUT_NO_PART = b"disk\ncrypt" # noqa -_SAMPLE_OUTPUT_ONE_PART = b"disk\npart\ncrypt" # noqa -_SAMPLE_OUTPUT_MULTI_PART = b"disk\npart\npart\npart\ncrypt" # noqa -_SAMPLE_OUTPUT_USB = b"/dev/sda" # noqa +# Lists for test paramaterization -_SAMPLE_LUKS_HEADER = b"\n\nUUID:\t123456-DEADBEEF" # noqa +supported_volumes_no_mount_required = [ + SINGLE_DEVICE_LOCKED, + SINGLE_PART_LUKS_WRITABLE, + SINGLE_PART_VC_WRITABLE, +] + +# Volume, expected device name, expected mapped device name +# (used to mount) +supported_volumes_mount_required = [ + (SINGLE_PART_UNLOCKED_VC_UNMOUNTED, "/dev/sda1", "/dev/mapper/tcrypt-2049"), + ( + SINGLE_PART_LUKS_UNLOCKED_UNMOUNTED, + "/dev/sda1", + "/dev/mapper/luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094", + ), +] + +unsupported_volumes = [ + SINGLE_DEVICE_ERROR_MOUNTED_PARTITION_NOT_ENCRYPTED, + SINGLE_DEVICE_ERROR_PARTITIONS_TOO_NESTED, +] class TestCli: """ Test the CLI wrapper that handless identification and locking/unlocking of USB volumes. + + This class is a wrapper around commandline tools like udsisks and lsblk, + so a lot of the testing involves supplying sample input and ensuring it + is parsed correctly (see `lsblk_sample.py`). """ @classmethod @@ -38,432 +81,281 @@ def setup_class(cls): def teardown_class(cls): cls.cli = None - def _setup_usb_devices(self, mocker, disks, is_removable): - """ - Helper function to set up mocked shell calls representing - the search for attached USB devices. - The original calls are `lsblk | grep disk` and - `cat /sys/class/block/{disk}/removable` - - Parameters: - disks (byte array): Array of disk names separated by newline. - is_removable (byte array): Array of removable status results (1 for removable), - separated by newline - """ - - # Patch commandline calls to `lsblk | grep disk` - command_output = mock.MagicMock() - command_output.stdout = mock.MagicMock() - command_output.stdout.readlines = mock.MagicMock(return_value=disks) - mocker.patch("subprocess.Popen", return_value=command_output) - - # Patch commandline call to 'cat /sys/class/block/{device}/removable' - - # Using side_effect with an iterable allows for different return value each time, - # which matches what would happen if iterating through list of devices - mocker.patch("subprocess.check_output", side_effect=is_removable) - - def test_get_connected_devices(self, mocker): - disks = [b"sda disk\n", b"sdb disk\n"] - removable = [b"1\n", b"1\n"] - - self._setup_usb_devices(mocker, disks, removable) - result = self.cli.get_connected_devices() - - assert result[0] == "/dev/sda" and result[1] == "/dev/sdb" - - @mock.patch( - "subprocess.check_output", - side_effect=subprocess.CalledProcessError(1, "check_output"), - ) - def test_get_removable_devices_none_removable(self, mocker): - disks = [b"sda disk\n", b"sdb disk\n"] - removable = [b"0\n", b"0\n"] - - self._setup_usb_devices(mocker, disks, removable) + @mock.patch("subprocess.check_output") + def test_get_volume_no_devices(self, mock_sp): + mock_sp.side_effect = [ + UDISKS_STATUS_NOTHING_CONNECTED, + ERROR_NO_SUPPORTED_DEVICE, + ] - result = self.cli._get_removable_devices(disks) - assert len(result) == 0 - - @mock.patch( - "subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen") - ) - def test_get_connected_devices_error(self, mocked_subprocess): - with pytest.raises(ExportException): - self.cli.get_connected_devices() + with pytest.raises(ExportException) as ex: + self.cli.get_volume() + assert ex.value.sdstatus == Status.NO_DEVICE_DETECTED + + @mock.patch("securedrop_export.disk.cli.CLI._mount_volume") + @mock.patch("subprocess.check_output") + def test_get_volume_one_device(self, mock_sp, mock_mount): + mock_sp.side_effect = [ + UDISKS_STATUS_ONE_DEVICE_CONNECTED, + ONE_DEVICE_LUKS_UNMOUNTED, + ] + v = self.cli.get_volume() + + assert v.encryption == EncryptionScheme.LUKS + # todo: list call args, make this test more specific + + @mock.patch("subprocess.check_output") + def test_get_volume_multi_devices_error(self, mock_sp): + mock_sp.side_effect = [ + UDISKS_STATUS_MULTI_CONNECTED, + ERROR_ONE_DEVICE_LUKS_MOUNTED_MULTI_UNKNOWN_AVAILABLE, + ] + with pytest.raises(ExportException) as ex: + self.cli.get_volume() - @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_NO_PART) - def test_get_partitioned_device_no_partition(self, mocked_call): - assert ( - self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) == _DEFAULT_USB_DEVICE - ) + assert ex.value.sdstatus == Status.MULTI_DEVICE_DETECTED - @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_ONE_PART) - def test_get_partitioned_device_one_partition(self, mocked_call): - assert ( - self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) - == _DEFAULT_USB_DEVICE + "1" - ) - - @mock.patch("subprocess.check_output", return_value=_SAMPLE_OUTPUT_MULTI_PART) - def test_get_partitioned_device_multi_partition(self, mocked_call): + @mock.patch("securedrop_export.disk.cli.CLI._mount_volume") + @mock.patch("subprocess.check_output") + def test_get_volume_too_many_encrypted_partitions(self, mock_sp, mock_mount): + mock_sp.side_effect = [ + UDISKS_STATUS_ONE_DEVICE_CONNECTED, + ERROR_DEVICE_MULTI_ENC_PARTITION, + ] with pytest.raises(ExportException) as ex: - self.cli.get_partitioned_device(_SAMPLE_OUTPUT_MULTI_PART) + self.cli.get_volume() - assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + assert ex.value.sdstatus == Status.INVALID_DEVICE_DETECTED - @mock.patch("subprocess.check_output", return_value=None) - def test_get_partitioned_device_lsblk_error(self, mocked_subprocess): + @mock.patch("securedrop_export.disk.cli.CLI._get_supported_volume") + @mock.patch("subprocess.check_output") + def test_get_volume_no_encrypted_partition(self, mock_sp, mock_gsv): + mock_sp.side_effect = [ + UDISKS_STATUS_ONE_DEVICE_CONNECTED, + ERROR_UNENCRYPTED_DEVICE_MOUNTED, + ] with pytest.raises(ExportException) as ex: - self.cli.get_partitioned_device(_SAMPLE_OUTPUT_ONE_PART) + self.cli.get_volume() - assert ex.value.sdstatus is Status.DEVICE_ERROR + assert ex.value.sdstatus == Status.INVALID_DEVICE_DETECTED - @mock.patch( - "subprocess.check_output", - side_effect=subprocess.CalledProcessError(1, "check_output"), - ) - def test_get_partitioned_device_multi_partition_error(self, mocked_call): - # Make sure we wrap CalledProcessError and throw our own exception + @mock.patch("securedrop_export.disk.cli.CLI._get_supported_volume") + @mock.patch("subprocess.check_output") + def test_get_volume_empty_udisks_does_not_keep_checking(self, mock_sp, mock_gsv): + mock_sp.side_effect = [ + UDISKS_STATUS_NOTHING_CONNECTED, + ONE_DEVICE_VC_UNLOCKED, + ] + + # If udisks2 didn't find it, don't keep looking with pytest.raises(ExportException) as ex: - self.cli.get_partitioned_device(_DEFAULT_USB_DEVICE) + self.cli.get_volume() - assert ex.value.sdstatus is Status.DEVICE_ERROR + assert ex.value.sdstatus == Status.NO_DEVICE_DETECTED + mock_gsv.assert_not_called() - @mock.patch("subprocess.check_call", return_value=0) - def test_is_luks_volume_true(self, mocked_call): - # `sudo cryptsetup isLuks` returns 0 if true - assert self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) + @pytest.mark.parametrize("input", supported_volumes_no_mount_required) + def test__get_supported_volume_success_no_mount(self, input): + vol = self.cli._get_supported_volume(input) - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test_is_luks_volume_false(self, mocked_subprocess): - # `sudo cryptsetup isLuks` returns 1 if false; CalledProcessError is thrown - assert not self.cli.is_luks_volume(_SAMPLE_OUTPUT_ONE_PART) + assert vol - @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) - def test__get_luks_name_from_headers(self, mocked_subprocess): - result = self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) - - assert result is not None and result.split("-")[ - 1 - ] in _SAMPLE_LUKS_HEADER.decode("utf8") + @mock.patch("subprocess.check_output") + def test__get_supported_volume_locked_success(self, mock_subprocess): + vol = self.cli._get_supported_volume(SINGLE_DEVICE_LOCKED) + assert vol.device_name == "/dev/sda" + @pytest.mark.parametrize( + "input,expected_device,expected_devmapper", supported_volumes_mount_required + ) + @mock.patch("securedrop_export.disk.cli.CLI._mount_volume") @mock.patch( - "subprocess.check_output", return_value=b"corrupted-or-invalid-header\n" + "securedrop_export.disk.cli.CLI._is_it_veracrypt", + return_value=EncryptionScheme.VERACRYPT, ) - def test__get_luks_name_from_headers_error_invalid(self, mocked_subprocess): - with pytest.raises(ExportException) as ex: - self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + def test__get_supported_volume_requires_mounting( + self, mock_v, mock_mount, input, expected_device, expected_devmapper + ): + self.cli._get_supported_volume(input) - assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + mock_mount.assert_called_once() - @mock.patch("subprocess.check_output", return_value=b"\n") - def test__get_luks_name_from_headers_error_no_header(self, mocked_subprocess): - with pytest.raises(ExportException) as ex: - self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + assert mock_mount.call_args_list[0][0][0].device_name == expected_device + assert mock_mount.call_args_list[0][0][1] == expected_devmapper - assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + @pytest.mark.parametrize("input", unsupported_volumes) + @mock.patch("securedrop_export.disk.cli.CLI._mount_volume") + def test__get_supported_volume_none_supported(self, mock_subprocess, input): + result = self.cli._get_supported_volume(input) - @mock.patch("subprocess.check_output", return_value=None) - def test__get_luks_name_from_headers_error_nothing_returned( - self, mocked_subprocess - ): - with pytest.raises(ExportException) as ex: - self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + assert result is None - assert ex.value.sdstatus is Status.INVALID_DEVICE_DETECTED + @mock.patch("pexpect.spawn") + def test_unlock_success(self, mock_p): + child = mock_p() + vol = Volume(_DEFAULT_USB_DEVICE, EncryptionScheme.LUKS) - @mock.patch( - "subprocess.check_output", - side_effect=subprocess.CalledProcessError(1, "check_output"), - ) - def test__get_luks_name_from_headers_error(self, mocked_subprocess): - with pytest.raises(ExportException): - self.cli._get_luks_name_from_headers(_DEFAULT_USB_DEVICE) + # This return value is derived from the "expected" list in the + # unlock_volume method (list item with index 0 is success) + child.expect.side_effect = [0, 0] + child.match = mock.MagicMock(spec=re.Match) + child.match.group.return_value = "/dev/dm-0".encode("utf-8") - @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) - def test_get_luks_volume_already_unlocked(self, mocked_subprocess, mocked_os_call): - result = self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + mv = mock.MagicMock(spec=MountedVolume) - assert result.encryption is EncryptionScheme.LUKS - assert result.unlocked + with mock.patch.object(self.cli, "_mount_volume") as mock_mount: + mock_mount.return_value = mv + result = self.cli.unlock_volume(vol, "a passw0rd!") - @mock.patch("os.path.exists", return_value=False) - @mock.patch("subprocess.check_output", return_value=_SAMPLE_LUKS_HEADER) - def test_get_luks_volume_still_locked(self, mocked_subprocess, mocked_os_call): - result = self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + mock_mount.assert_called_once_with(vol, "/dev/dm-0") + assert isinstance(result, MountedVolume) - assert result.encryption is EncryptionScheme.LUKS - assert not result.unlocked + @mock.patch("pexpect.spawn") + def test_unlock_already_unlocked(self, mock_p): + vol = Volume(_DEFAULT_USB_DEVICE, EncryptionScheme.LUKS) + child = mock_p() + child.expect.side_effect = [0, 1] + child.match = mock.MagicMock(spec=re.Match) + error_msg = "/dev/dm-0".encode("utf-8") + child.match.group.return_value = error_msg + mv = mock.MagicMock(spec=MountedVolume) - @mock.patch( - "subprocess.check_output", - side_effect=subprocess.CalledProcessError(1, "check_output"), - ) - def test_get_luks_volume_error(self, mocked_subprocess): - with pytest.raises(ExportException) as ex: - self.cli.get_luks_volume(_DEFAULT_USB_DEVICE_ONE_PART) + with mock.patch.object(self.cli, "_mount_volume") as mock_mount: + mock_mount.return_value = mv + result = self.cli.unlock_volume(vol, "a passw0rd!") - assert ex.value.sdstatus is Status.DEVICE_ERROR + mock_mount.assert_called_once_with(vol, "/dev/dm-0") + assert isinstance(result, MountedVolume) - @mock.patch("os.path.exists", return_value=True) - def test_unlock_luks_volume_success(self, mock_path, mocker): - mock_popen = mocker.MagicMock() - mock_popen_communicate = mocker.MagicMock() - mock_popen.returncode = 0 + @mock.patch("pexpect.spawn") + def test_unlock_remote_fail(self, mock_p): + child = mock_p() + child.expect.return_value = 3 + vol = Volume(_DEFAULT_USB_DEVICE, EncryptionScheme.LUKS) - mocker.patch("subprocess.Popen", return_value=mock_popen) - mocker.patch( - "subprocess.Popen.communicate", return_value=mock_popen_communicate - ) + with pytest.raises(ExportException) as ex: + self.cli.unlock_volume(vol, "a passw0rd!") - mapped_name = "luks-id-123456" - vol = Volume( - device_name=_DEFAULT_USB_DEVICE, - mapped_name=mapped_name, - encryption=EncryptionScheme.LUKS, - ) - key = "a_key&_!" - result = self.cli.unlock_luks_volume(vol, key) - assert result.unlocked + assert ex.value.sdstatus == Status.ERROR_UNLOCK_GENERIC - @mock.patch("os.path.exists", return_value=True) - def test_unlock_luks_volume_not_luks(self, mocker): - mock_popen = mocker.MagicMock() - mock_popen.communicate = mocker.MagicMock() - mock_popen.communicate.returncode = 1 # An error unlocking + @mock.patch("pexpect.spawn") + def test_unlock_luks_bad_passphrase(self, mock_p): + child = mock_p() - mocker.patch("subprocess.Popen", mock_popen) + # This return value is derived from the "expected" list in the + # unlock_volume method (list item with index 1 is the "Bad passphrase" + # error) + child.expect.side_effect = [0, 2] + child.match = mock.MagicMock(spec=re.Match) + child.match.group.return_value = b"/media/usb" - vol = Volume( - device_name=_DEFAULT_USB_DEVICE, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.UNKNOWN, - ) - key = "a key!" + vol = Volume(_DEFAULT_USB_DEVICE, EncryptionScheme.LUKS) with pytest.raises(ExportException) as ex: - self.cli.unlock_luks_volume(vol, key) - - assert ex.value.sdstatus is Status.DEVICE_ERROR - - def test_unlock_luks_volume_passphrase_failure(self, mocker): - mock_popen = mocker.MagicMock() - mock_popen.communicate = mocker.MagicMock() - mock_popen.communicate.returncode = 1 # An error unlocking + self.cli.unlock_volume(vol, "a mistaken p4ssw0rd!") - mocker.patch("subprocess.Popen", mock_popen) + assert ex.value.sdstatus == Status.ERROR_UNLOCK_LUKS - vol = Volume( - device_name=_DEFAULT_USB_DEVICE, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - key = "a key!" + @mock.patch("pexpect.spawn") + def test_unlock_fail(self, mock_p): + child = mock_p() - with pytest.raises(ExportException): - self.cli.unlock_luks_volume(vol, key) + # This is derived from the "expected" list in the unlock_volume method + # (list item with index 3 is the "pexpect.EOF" error) + child.expect.side_effect = [0, 3] + child.match = mock.MagicMock(spec=re.Match) + child.match.group.return_value = b"/media/usb" - @mock.patch( - "subprocess.Popen", side_effect=subprocess.CalledProcessError(1, "Popen") - ) - def test_unlock_luks_volume_luksOpen_exception(self, mocked_subprocess): - pd = Volume( - device_name=_DEFAULT_USB_DEVICE, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - key = "a key!" + vol = Volume(_DEFAULT_USB_DEVICE, EncryptionScheme.LUKS) with pytest.raises(ExportException) as ex: - self.cli.unlock_luks_volume(pd, key) + self.cli.unlock_volume(vol, "a passw0rd!") - assert ex.value.sdstatus is Status.DEVICE_ERROR + assert ex.value.sdstatus == Status.ERROR_UNLOCK_GENERIC - @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_output", return_value=b"\n") - @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume(self, mocked_call, mocked_output, mocked_path): - vol = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - mv = self.cli.mount_volume(vol) - assert isinstance(mv, MountedVolume) - assert mv.mountpoint is self.cli._DEFAULT_MOUNTPOINT + @mock.patch("pexpect.spawn") + def test__mount_volume_already_mounted(self, mock_p): + child = mock_p() + child.expect.return_value = 1 + child.match = mock.MagicMock(spec=re.Match) + child.match.group.return_value = b"/media/usb" - @mock.patch("os.path.exists", return_value=True) - @mock.patch( - "subprocess.check_output", return_value=b"/dev/pretend/luks-id-123456\n" - ) - @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume_already_mounted( - self, mocked_output, mocked_call, mocked_path - ): - md = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, + md = MountedVolume( + device_name=_DEFAULT_USB_DEVICE, + unlocked_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, + mountpoint="/media/usb", ) - result = self.cli.mount_volume(md) - assert result.mountpoint == "/dev/pretend/luks-id-123456" + result = self.cli._mount_volume(md, _PRETEND_LUKS_ID) + + assert result.mountpoint == "/media/usb" assert isinstance(result, MountedVolume) - @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_output", return_value=b"\n") - @mock.patch("subprocess.check_call", return_value=0) - def test_mount_volume_mkdir(self, mocked_output, mocked_subprocess, mocked_path): - md = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - mv = self.cli.mount_volume(md) - assert mv.mapped_name == _PRETEND_LUKS_ID - assert isinstance(mv, MountedVolume) + @mock.patch("pexpect.spawn") + def test__mount_volume_success(self, mock_p): + child = mock_p() + child.expect.return_value = 0 + child.match = mock.MagicMock(spec=re.Match) + child.match.group.return_value = b"/media/usb" - @mock.patch("subprocess.check_output", return_value=b"\n") - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test_mount_volume_error(self, mocked_subprocess, mocked_output): - md = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, + md = MountedVolume( + device_name=_DEFAULT_USB_DEVICE, + unlocked_name=_PRETEND_LUKS_ID, encryption=EncryptionScheme.LUKS, + mountpoint="/media/usb", ) - with pytest.raises(ExportException) as ex: - self.cli.mount_volume(md) - - assert ex.value.sdstatus is Status.ERROR_MOUNT - - @mock.patch("os.path.exists", return_value=False) - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test_mount_at_mountpoint_mkdir_error(self, mocked_subprocess, mocked_path): - md = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) + result = self.cli._mount_volume(md, _PRETEND_LUKS_ID) - with pytest.raises(ExportException) as ex: - self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) + assert result.mountpoint == "/media/usb" + assert isinstance(result, MountedVolume) - assert ex.value.sdstatus is Status.ERROR_MOUNT + @mock.patch("pexpect.spawn") + def test__mount_volume_error(self, mock_p): + child = mock_p() + child.expect.return_value = 2 - @mock.patch("os.path.exists", return_value=True) - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test_mount_at_mountpoint_mounting_error(self, mocked_subprocess, mocked_path): md = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, + device_name="/dev/sda", encryption=EncryptionScheme.LUKS, ) with pytest.raises(ExportException) as ex: - self.cli._mount_at_mountpoint(md, self.cli._DEFAULT_MOUNTPOINT) + self.cli._mount_volume(md, _PRETEND_LUKS_ID) assert ex.value.sdstatus is Status.ERROR_MOUNT - @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_call", return_value=0) - def test__unmount_volume(self, mocked_subprocess, mocked_mountpath): + @mock.patch("subprocess.check_call") + def test__unmount_volume(self, mock_sp): + mock_sp.returncode = 0 mounted = MountedVolume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - mountpoint=self.cli._DEFAULT_MOUNTPOINT, + device_name="/dev/sda", + unlocked_name=f"/dev/mapper{_PRETEND_LUKS_ID}", + mountpoint="/media/usb", encryption=EncryptionScheme.LUKS, ) - result = self.cli._unmount_volume(mounted) + result = self.cli._close_volume(mounted) assert not isinstance(result, MountedVolume) - @mock.patch("os.path.exists", return_value=True) - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test__unmount_volume_error(self, mocked_subprocess, mocked_mountpath): - mounted = MountedVolume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - mountpoint=self.cli._DEFAULT_MOUNTPOINT, - encryption=EncryptionScheme.LUKS, - ) - - with pytest.raises(ExportException) as ex: - self.cli._unmount_volume(mounted) - - assert ex.value.sdstatus is Status.DEVICE_ERROR - - @mock.patch("os.path.exists", return_value=True) - @mock.patch("subprocess.check_call", return_value=0) - def test__close_luks_volume(self, mocked_subprocess, mocked_os_call): - mapped = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - - # If call completes without error, drive was successfully closed with luksClose - self.cli._close_luks_volume(mapped) - - @mock.patch("os.path.exists", return_value=True) - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test__close_luks_volume_error(self, mocked_subprocess, mocked_os_call): - mapped = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - - with pytest.raises(ExportException) as ex: - self.cli._close_luks_volume(mapped) - - assert ex.value.sdstatus is Status.DEVICE_ERROR - - @mock.patch( - "subprocess.check_call", - side_effect=subprocess.CalledProcessError(1, "check_call"), - ) - def test__remove_temp_directory_error(self, mocked_subprocess): - with pytest.raises(ExportException): - self.cli._remove_temp_directory("tmp") - @mock.patch("subprocess.check_call", return_value=0) def test_write_to_disk(self, mock_check_call): # Temporarily patch a method, to later assert it is called - patch = mock.patch.object(self.cli, "cleanup_drive_and_tmpdir") + patch = mock.patch.object(self.cli, "cleanup") patch.return_value = mock.MagicMock() patch.start() vol = MountedVolume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - mountpoint=self.cli._DEFAULT_MOUNTPOINT, + device_name=_DEFAULT_USB_DEVICE, + unlocked_name=_PRETEND_LUKS_ID, + mountpoint="/media/usb", encryption=EncryptionScheme.LUKS, ) submission = Archive("testfile") - self.cli.write_data_to_device(submission.tmpdir, submission.target_dirname, vol) - self.cli.cleanup_drive_and_tmpdir.assert_called_once() + self.cli.write_data_to_device(vol, submission.tmpdir, submission.target_dirname) + self.cli.cleanup.assert_called_once() # Don't want to patch it indefinitely though, that will mess with the other tests patch.stop() @@ -473,24 +365,24 @@ def test_write_to_disk(self, mock_check_call): side_effect=subprocess.CalledProcessError(1, "check_call"), ) def test_write_to_disk_error_still_does_cleanup(self, mock_call): - # see above - patch internal method only for this test - patch = mock.patch.object(self.cli, "cleanup_drive_and_tmpdir") + # patch internal method only for this test + patch = mock.patch.object(self.cli, "cleanup") patch.return_value = mock.MagicMock() patch.start() vol = MountedVolume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - mountpoint=self.cli._DEFAULT_MOUNTPOINT, + device_name=_DEFAULT_USB_DEVICE, + unlocked_name=_PRETEND_LUKS_ID, + mountpoint="/media/usb", encryption=EncryptionScheme.LUKS, ) submission = Archive("testfile") with pytest.raises(ExportException): self.cli.write_data_to_device( - submission.tmpdir, submission.target_dirname, vol + vol, submission.tmpdir, submission.target_dirname ) - self.cli.cleanup_drive_and_tmpdir.assert_called_once() + self.cli.cleanup.assert_called_once() patch.stop() @@ -498,33 +390,48 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call): "subprocess.check_call", side_effect=subprocess.CalledProcessError(1, "check_call"), ) - def test_cleanup_drive_and_tmpdir_error(self, mocked_subprocess): + def test_cleanup_error(self, mock_popen): submission = Archive("testfile") mock_volume = mock.MagicMock(Volume) with pytest.raises(ExportException) as ex: - self.cli.cleanup_drive_and_tmpdir(mock_volume, submission.tmpdir) + self.cli.cleanup(mock_volume, submission.tmpdir) assert ex.value.sdstatus is Status.ERROR_EXPORT_CLEANUP + @mock.patch( + "subprocess.check_call", + side_effect=subprocess.CalledProcessError(1, "check_call"), + ) + def test_cleanup_error_reports_exporterror_if_flagged(self, mock_popen): + submission = Archive("testfile") + mock_volume = mock.MagicMock(Volume) + + with pytest.raises(ExportException) as ex: + self.cli.cleanup(mock_volume, submission.tmpdir, is_error=True) + assert ex.value.sdstatus is Status.ERROR_EXPORT + + @mock.patch("os.path.exists", return_value=False) @mock.patch("subprocess.check_call", return_value=0) - def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): + def test_cleanup(self, mock_subprocess, mocked_path): submission = Archive("testfile") vol = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, + device_name=_DEFAULT_USB_DEVICE, encryption=EncryptionScheme.LUKS, ) - mv = MountedVolume.from_volume(vol, mountpoint=self.cli._DEFAULT_MOUNTPOINT) + mv = MountedVolume( + vol.device_name, + f"/dev/mapper/{_PRETEND_LUKS_ID}", + vol.encryption, + mountpoint="/media/usb", + ) - close_patch = mock.patch.object(self.cli, "_close_luks_volume") + close_patch = mock.patch.object(self.cli, "_close_volume") remove_tmpdir_patch = mock.patch.object(self.cli, "_remove_temp_directory") - close_mock = close_patch.start() rm_tpdir_mock = remove_tmpdir_patch.start() - # That was all setup. Here's our test - self.cli.cleanup_drive_and_tmpdir(mv, submission.tmpdir) + self.cli.cleanup(mv, submission.tmpdir) close_mock.assert_called_once() rm_tpdir_mock.assert_called_once_with(submission.tmpdir) @@ -533,35 +440,18 @@ def test_cleanup_drive_and_tmpdir(self, mock_subprocess, mocked_path): close_patch.stop() remove_tmpdir_patch.stop() - @mock.patch( - "subprocess.check_output", - side_effect=subprocess.CalledProcessError(1, "check_output"), - ) - def test_mountpoint_error(self, mock_subprocess): - with pytest.raises(ExportException) as ex: - self.cli._get_mountpoint( - Volume( - device_name=_DEFAULT_USB_DEVICE, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, - ) - ) - - assert ex.value.sdstatus is Status.ERROR_MOUNT - - @mock.patch("os.path.exists", return_value=False) - def test_mount_mkdir_fails(self, mocked_path): - mock_mountpoint = mock.patch.object(self.cli, "_get_mountpoint") - mock_mountpoint.return_value = None - - vol = Volume( - device_name=_DEFAULT_USB_DEVICE_ONE_PART, - mapped_name=_PRETEND_LUKS_ID, - encryption=EncryptionScheme.LUKS, + @mock.patch("pexpect.spawn") + def test_parse_correct_mountpoint_from_pexpect(self, mock_pexpect): + child = mock_pexpect() + child.expect.return_value = 1 + child.match.return_value = re.match( + r"`(\w+)'\.\r\n".encode("utf-8"), + "Error mounting /dev/dm-1: GDBus.Error:org." + "freedesktop.UDisks2.Error.AlreadyMounted: " + "Device /dev/sda1 is already mounted at `/dev/dm-0'.\r\n".encode("utf-8"), ) - mock.patch.object(vol, "unlocked", return_value=True) - - with pytest.raises(ExportException) as ex: - self.cli.mount_volume(vol) - assert ex.value.sdstatus is Status.ERROR_MOUNT + mv = self.cli._mount_volume( + Volume("/dev/sda1", EncryptionScheme.VERACRYPT), "/dev/dm-1" + ) + assert mv.unlocked_name == "/dev/dm-0" diff --git a/export/tests/disk/test_service.py b/export/tests/disk/test_service.py index d7053e1d0..13a729507 100644 --- a/export/tests/disk/test_service.py +++ b/export/tests/disk/test_service.py @@ -1,39 +1,47 @@ -import pytest from unittest import mock import os import tempfile from securedrop_export.exceptions import ExportException -from securedrop_export.disk.legacy_status import Status as LegacyStatus -from securedrop_export.disk.status import Status as Status +from securedrop_export.disk.status import Status from securedrop_export.disk.volume import Volume, MountedVolume, EncryptionScheme from securedrop_export.archive import Archive, Metadata -from securedrop_export.disk.legacy_service import Service +from securedrop_export.disk.service import Service from securedrop_export.disk.cli import CLI -SAMPLE_OUTPUT_LSBLK_NO_PART = b"disk\ncrypt" # noqa -SAMPLE_OUTPUT_USB = "/dev/sda" # noqa +SAMPLE_OUTPUT_USB = "/dev/sda" SAMPLE_OUTPUT_USB_PARTITIONED = "/dev/sda1" class TestExportService: @classmethod def setup_class(cls): - cls.mock_cli = mock.MagicMock(CLI) + cls.mock_cli = mock.MagicMock(spec=CLI) cls.mock_submission = cls._setup_submission() cls.mock_luks_volume_unmounted = Volume( device_name=SAMPLE_OUTPUT_USB, - mapped_name="fake-luks-id-123456", encryption=EncryptionScheme.LUKS, ) cls.mock_luks_volume_mounted = MountedVolume( device_name=SAMPLE_OUTPUT_USB, - mapped_name="fake-luks-id-123456", + unlocked_name="/dev/mapper/fake-luks-id-123456", mountpoint="/media/usb", encryption=EncryptionScheme.LUKS, ) + cls.mock_vc_volume_mounted = MountedVolume( + device_name=SAMPLE_OUTPUT_USB, + unlocked_name="/dev/mapper/mock-veracrypt-vol", + encryption=EncryptionScheme.VERACRYPT, + mountpoint="/media/usb/", + ) + + cls.mock_vc_volume_locked = Volume( + device_name=SAMPLE_OUTPUT_USB, + encryption=EncryptionScheme.UNKNOWN, + ) + cls.service = Service(cls.mock_submission, cls.mock_cli) @classmethod @@ -59,145 +67,73 @@ def _setup_submission(cls) -> Archive: return submission.set_metadata(Metadata(temp_folder).validate()) def setup_method(self, method): - """ - By default, mock CLI will return the "happy path" of a correctly-formatted LUKS drive. - Override this behaviour in the target method as required, for example to simulate CLI - errors. `teardown_method()` will reset the side effects so they do not affect subsequent - test methods. - """ - self.mock_cli.get_connected_devices.return_value = [SAMPLE_OUTPUT_USB] - self.mock_cli.get_partitioned_device.return_value = ( - SAMPLE_OUTPUT_USB_PARTITIONED - ) - self.mock_cli.get_luks_volume.return_value = self.mock_luks_volume_unmounted - self.mock_cli.mount_volume.return_value = self.mock_luks_volume_mounted + pass def teardown_method(self, method): self.mock_cli.reset_mock(return_value=True, side_effect=True) - def test_check_usb(self): - status = self.service.check_connected_devices() - - assert status is LegacyStatus.LEGACY_USB_CONNECTED - - def test_no_devices_connected(self): - self.mock_cli.get_connected_devices.return_value = [] - with pytest.raises(ExportException) as ex: - self.service.check_connected_devices() - - assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_NOT_CONNECTED - - def test_too_many_devices_connected(self): - self.mock_cli.get_connected_devices.return_value = [ - SAMPLE_OUTPUT_USB, - "/dev/sdb", - ] - with pytest.raises(ExportException) as ex: - self.service.check_connected_devices() - - assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - - def test_device_is_not_luks(self): - self.mock_cli.is_luks_volume.return_value = False - - # When VeraCrypt is supported, this will no longer be an exception - # and the return status will change - with pytest.raises(ExportException) as ex: - self.service.check_disk_format() + def test_scan_all_device_is_locked(self): + self.mock_cli.get_volume.return_value = self.mock_luks_volume_unmounted + status = self.service.scan_all_devices() - assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + assert status == Status.DEVICE_LOCKED - def test_check_usb_error(self): - self.mock_cli.get_connected_devices.side_effect = ExportException( - sdstatus=LegacyStatus.LEGACY_ERROR_USB_CHECK + def test_scan_all_no_devices_connected(self): + self.mock_cli.get_volume.side_effect = ExportException( + sdstatus=Status.NO_DEVICE_DETECTED ) - with pytest.raises(ExportException) as ex: - self.service.check_connected_devices() + assert self.service.scan_all_devices() == Status.NO_DEVICE_DETECTED - assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_CHECK - - def test_check_disk_format(self): - status = self.service.check_disk_format() - - assert status is LegacyStatus.LEGACY_USB_ENCRYPTED - - def test_check_disk_format_error(self): - self.mock_cli.get_partitioned_device.side_effect = ExportException( - sdstatus=Status.INVALID_DEVICE_DETECTED + def test_scan_all_too_many_devices_connected(self): + self.mock_cli.get_volume.side_effect = ExportException( + sdstatus=Status.MULTI_DEVICE_DETECTED ) - with pytest.raises(ExportException) as ex: - self.service.check_disk_format() - - # We still return the legacy status for now - assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED + assert self.service.scan_all_devices() == Status.MULTI_DEVICE_DETECTED - def test_export(self): - # Currently, a successful export does not return a success status. - # When the client is updated, this will change to assert EXPORT_SUCCESS - # is returned. - self.service.export() + def test_scan_all_devices_error(self): + self.mock_cli.get_volume.side_effect = ExportException("zounds!") - def test_export_disk_not_supported(self): - self.mock_cli.is_luks_volume.return_value = False + assert self.service.scan_all_devices() == Status.DEVICE_ERROR - with pytest.raises(ExportException) as ex: - self.service.export() - - assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_ENCRYPTION_NOT_SUPPORTED - - def test_export_write_error(self): - self.mock_cli.is_luks_volume.return_value = True - self.mock_cli.write_data_to_device.side_effect = ExportException( - sdstatus=LegacyStatus.LEGACY_ERROR_USB_WRITE - ) + def test_scan_all_device_is_unlocked_vc(self): + self.mock_cli.get_volume.return_value = self.mock_vc_volume_mounted - with pytest.raises(ExportException) as ex: - self.service.export() + assert self.service.scan_all_devices() == Status.DEVICE_WRITABLE - assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_WRITE + def test_export_already_mounted_no_cleanup(self): + self.mock_cli.get_volume.return_value = self.mock_luks_volume_mounted + with mock.patch.object(self.mock_cli, "write_data_to_device") as mock_write: + result = self.service.export() - def test_export_throws_new_exception_return_legacy_status(self): - self.mock_cli.get_connected_devices.side_effect = ExportException( - sdstatus=Status.ERROR_MOUNT + assert result == Status.SUCCESS_EXPORT + mock_write.assert_called_once_with( + self.mock_luks_volume_mounted, + self.mock_submission.tmpdir, + self.mock_submission.target_dirname, ) - with pytest.raises(ExportException) as ex: - self.service.export() - - assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_MOUNT - - @mock.patch("os.path.exists", return_value=True) - def test_write_error_returns_legacy_status(self, mock_path): - self.mock_cli.is_luks_volume.return_value = True + def test_export_write_error(self): + self.mock_cli.get_volume.return_value = self.mock_luks_volume_mounted self.mock_cli.write_data_to_device.side_effect = ExportException( sdstatus=Status.ERROR_EXPORT ) - with pytest.raises(ExportException) as ex: - self.service.export() + assert self.service.export() == Status.ERROR_EXPORT - assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_USB_WRITE - - @mock.patch("os.path.exists", return_value=True) - def test_unlock_error_returns_legacy_status(self, mock_path): - self.mock_cli.unlock_luks_volume.side_effect = ExportException( + def test_export_unlock_error(self): + self.mock_cli.get_volume.return_value = self.mock_luks_volume_unmounted + self.mock_cli.unlock_volume.side_effect = ExportException( sdstatus=Status.ERROR_UNLOCK_LUKS ) - with pytest.raises(ExportException) as ex: - self.service.export() - - assert ex.value.sdstatus is LegacyStatus.LEGACY_USB_BAD_PASSPHRASE - - @mock.patch("os.path.exists", return_value=True) - def test_unexpected_error_returns_legacy_status_generic(self, mock_path): - self.mock_cli.unlock_luks_volume.side_effect = ExportException( - sdstatus=Status.DEVICE_ERROR - ) + assert self.service.export() == Status.ERROR_UNLOCK_LUKS - with pytest.raises(ExportException) as ex: - self.service.export() + def test_export_unlock_error_unspecified(self): + self.mock_cli.get_volume.return_value = self.mock_luks_volume_unmounted + with mock.patch.object(self.mock_cli, "unlock_volume") as mock_unlock: + mock_unlock.side_effect = ExportException("oh no!") + result = self.service.export() - assert ex.value.sdstatus is LegacyStatus.LEGACY_ERROR_GENERIC + assert result == Status.ERROR_EXPORT diff --git a/export/tests/disk/test_volume.py b/export/tests/disk/test_volume.py deleted file mode 100644 index 10d4c6894..000000000 --- a/export/tests/disk/test_volume.py +++ /dev/null @@ -1,50 +0,0 @@ -from unittest import mock - -from securedrop_export.disk.volume import Volume, MountedVolume, EncryptionScheme - - -class TestVolume: - def test_overwrite_valid_encryption_scheme(self): - volume = Volume( - device_name="/dev/sda", - mapped_name="pretend-luks-mapper-id", - encryption=EncryptionScheme.LUKS, - ) - assert volume.encryption is EncryptionScheme.LUKS - volume.encryption = None - assert volume.encryption is EncryptionScheme.UNKNOWN - - @mock.patch("os.path.exists", return_value=True) - def test_is_unlocked_true(self, mock_os_path): - volume = Volume( - device_name="/dev/sda1", - mapped_name="pretend-luks-mapper-id", - encryption=EncryptionScheme.LUKS, - ) - - assert volume.unlocked - - @mock.patch("os.path.exists", return_value=False) - def test_is_unlocked_false_no_path(self, mock_os_path): - volume = Volume( - device_name="/dev/sda1", - mapped_name="pretend-luks-mapper-id", - encryption=EncryptionScheme.LUKS, - ) - - assert not volume.unlocked - - -class TestMountedVolume: - @mock.patch("os.path.exists", return_value=True) - def test_is_unlocked_true(self, mock_os_path): - volume = Volume( - device_name="/dev/sda1", - mapped_name="pretend-luks-mapper-id", - encryption=EncryptionScheme.LUKS, - ) - - mounted_volume = MountedVolume.from_volume(volume, mountpoint="/media/usb") - - assert mounted_volume.unlocked - assert mounted_volume.mountpoint == "/media/usb" diff --git a/export/tests/files/sample_export.sd-export b/export/tests/files/sample_export.sd-export new file mode 100644 index 0000000000000000000000000000000000000000..dab6433525ebaf9599ddb292ebad04665e3da54b GIT binary patch literal 714 zcmV;*0yX^~iwFP!000001MQd1j@mE~$2s#9v+1E1HsFvD39Tyi(kIwsrIm??BuipP zwzC0MmHH5U!ahmIVc8WcEvOZ+{qRpAfy~$*GX9U9a6C9W6C#~V+?A!t-gU=-#mSVh zgt2r+_tP|*4j?&yXoEp(EY|>ZMSa-su>CJ39OJrC+TICn`I+WIpZ_E|mj8&dPA9t0 zq9~d9{9l6o{7|+&sdZ&%74tr9VVv?;x+#B{NEO(0Xnz@ zT=TlA5Y!SlG!-u;SX^6JmUOdiD#baW%qLORmb_A`wr)OU-OTM7`BDl;^!(sz9O6Uqj@d%KL8c=_>RMPb* zR4H>B$hF`3Y0MN=C;>~YYCtKROF#53*bykbwOYP%){Z)G;cme24k$QIu6g0y@PWED zWiBbOj7tl;G^^*KjS7cvowAd%uYaq#G?^|Nd&(McO#f*dz1aUH(PZlNe+kTX&EHM} z=(MspA3kjgXais@Da{z3Q=KSnp<4RQ^{Q>IhSxoZydPa@cOf7vxaOHfZNRiy;bixD z!W1j+Tnj@y6$VMu+nsj%&2si9fujLVuPy*6TlxU)4XOcf-B+e-_1z zdHr94FM+^^GQ(gFfuN->povE7x85{v&Ap?^Q7GYzRl71Tj4RwY%SU*Z>nXR-mWCVC w6q*}^Tp?{5P~%nb_1{`KJsyw83_st`XXTmi>SZsImUT~a0P z=omv`z?LGx#D+u}+ZY?$7$AP60TU;aY{p3>xCh?=w?I;;MA7J&)OH&9Q6)!?^L?)0 zzMq|n{i&`a#psfhw6dOY7ET@hDtXLBS1XWQwo=|A8AbuKxwg_CfrC4nS2nSS}&p761h060{wFQ5A!N9d}mBB^R3F zUQd_PVOsrf_G|}(%btr-PPlg9?7>5a zFCIB@?D)XRk5^%Pgco$ z7A%tI=!5-ZH^fsEMW8`&ICz}GjMeoqNbTXQw)AatgrA<0TXXrSq z-w?K@STIl4S@0&Bpw}C@>MWdO!Cdnjv@DU29Gnx*$0acbn!DwW1Jyp5&wFUdh8URx z7J{bj6#Goq5Q|sDV!7B1V4@O=M{pf>r-P3S4`II{#a{bqztLL%e_6>6=Gf`{r)0Cu z`mf3vHLm}vn&tJsC!F(&mADuIY(Wf$-3l;W=O_jS^bmk~w}Rt42zYkUim%+nd_&L} z26<$_ctsjdSa1jd$Hi77jteZ?M9GoTae-+U3doDCn#6a24~LU6+omaa2m!y0kYTlr z9>);5%R7b`zw=?3m|wi)yG~bfH2klse}4Z{vaSFB$Vx`fa{u>&k+d0~OAM6GfplYM kMP7Q8`-{Wja5x+ehr{7;I2;a#!}%xp4g~bamjEaL0Nz}4zyJUM literal 0 HcmV?d00001 diff --git a/export/tests/lsblk_sample.py b/export/tests/lsblk_sample.py new file mode 100644 index 000000000..9e45b4c77 --- /dev/null +++ b/export/tests/lsblk_sample.py @@ -0,0 +1,162 @@ +""" +Sample output from `lsblk` used as input in `test_cli.py` +""" + +# udisks2 Status +UDISKS_STATUS_NOTHING_CONNECTED = ( + b"MODEL REVISION SERIAL DEVICE" + b"\n--------------------------------------------------------------------------\n" +) + +UDISKS_STATUS_ONE_DEVICE_CONNECTED = ( + b"MODEL REVISION SERIAL DEVICE\n" + b"--------------------------------------------------------------------------\n" + b"ADATA USB Flash Drive 1.00 2761505420110004 sda \n" +) +UDISKS_STATUS_MULTI_CONNECTED = ( + b"MODEL REVISION SERIAL DEVICE\n" + b"--------------------------------------------------------------------------\n" + b"ADATA USB Flash Drive 1.00 2761505420110004 sda \n" + b"Kingston DataTraveler 3.0 PMAP 40B0767E212CE481165906A8 sdb \n" +) + +# CLI.get_volume(): Supported +ONE_DEVICE_LUKS_UNMOUNTED = b'{\n "blockdevices": [\n {"name":"sda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"sda2", "ro":false, "type":"part", "mountpoint":null, "fstype":"crypto_LUKS"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +ONE_DEVICE_VC_UNLOCKED = b'{\n "blockdevices": [\n {"name":"sda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"tcrypt-2049", "ro":false, "type":"crypt", "mountpoint":null, "fstype":"vfat"}\n ]\n },\n {"name":"sda2", "ro":false, "type":"part", "mountpoint":null, "fstype":"ext4"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +ONE_DEVICE_VC_MOUNTED = b'{\n "blockdevices": [\n {"name":"sda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"tcrypt-2049", "ro":false, "type":"crypt", "mountpoint":null, "fstype":"vfat"}\n ]\n },\n {"name":"sda2", "ro":false, "type":"part", "mountpoint":null, "fstype":"ext4"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +ERROR_ONE_DEVICE_LUKS_MOUNTED_MULTI_UNKNOWN_AVAILABLE = b'{\n "blockdevices": [\n {"name":"sda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"sda2", "ro":false, "type":"part", "mountpoint":null, "fstype":"crypto_LUKS",\n "children": [\n {"name":"luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094", "ro":false, "type":"crypt", "mountpoint":"/media/user/tx2", "fstype":"ext4"}\n ]\n }\n ]\n },\n {"name":"sdb", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sdb1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"sdb2", "ro":false, "type":"part", "mountpoint":null, "fstype":"ext4"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +ERROR_NO_SUPPORTED_DEVICE = b'{\n "blockdevices": [\n {"name":"sdb", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sdb1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"sdb2", "ro":false, "type":"part", "mountpoint":null, "fstype":"ext4"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +ERROR_UNENCRYPTED_DEVICE_MOUNTED = b'{\n "blockdevices": [\n {"name":"sda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"decoy", "ro":false, "type":"part", "mountpoint":"/media/usb", "fstype":"vfat"}\n ]\n },\n {"name":"sda2", "ro":false, "type":"part", "mountpoint":null, "fstype":"ext4"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +# CLI.get_volume(): Unsupported +ERROR_DEVICE_MULTI_ENC_PARTITION = b'{\n "blockdevices": [\n {"name":"sda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"sda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"sda2", "ro":false, "type":"part", "mountpoint":null, "fstype":"crypto_LUKS"},\n {"name":"sda3", "ro":false, "type":"part", "mountpoint":null, "fstype":"crypto_LUKS"}\n ]\n },\n {"name":"xvda", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvda1", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda2", "ro":false, "type":"part", "mountpoint":null, "fstype":null},\n {"name":"xvda3", "ro":false, "type":"part", "mountpoint":"/", "fstype":"ext4"}\n ]\n },\n {"name":"xvdb", "ro":false, "type":"disk", "mountpoint":"/rw", "fstype":"ext4"},\n {"name":"xvdc", "ro":false, "type":"disk", "mountpoint":null, "fstype":null,\n "children": [\n {"name":"xvdc1", "ro":false, "type":"part", "mountpoint":"[SWAP]", "fstype":"swap"},\n {"name":"xvdc3", "ro":false, "type":"part", "mountpoint":null, "fstype":null}\n ]\n },\n {"name":"xvdd", "ro":true, "type":"disk", "mountpoint":null, "fstype":"ext3"}\n ]\n}\n' # noqa: E501 + +# Cli._get_supported_volume(): Supported + +SINGLE_DEVICE_LOCKED = { + "name": "sda", + "type": "disk", + "rm": True, + "ro": False, + "mountpoint": None, + "fstype": "crypto_LUKS", +} + +SINGLE_PART_LUKS_WRITABLE = { + "name": "sda1", + "type": "part", + "rm": True, + "ro": False, + "mountpoint": None, + "fstype": "crypto_LUKS", + "children": [ + { + "name": "luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094", + "type": "crypt", + "rm": False, + "mountpoint": "/media/usb", + "fstype": "ext4", + } + ], +} + +SINGLE_PART_VC_WRITABLE = { + "name": "sda1", + "rm": True, + "ro": False, + "type": "part", + "mountpoint": None, + "fstype": None, + "children": [ + { + "name": "tcrypt-2049", + "rm": False, + "ro": False, + "type": "crypt", + "mountpoint": "/media/usb", + "fstype": "vfat", + } + ], +} + +SINGLE_PART_LUKS_UNLOCKED_UNMOUNTED = { + "name": "sda1", + "type": "part", + "rm": True, + "ro": False, + "mountpoint": None, + "fstype": "crypto_LUKS", + "children": [ + { + "name": "luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094", + "type": "crypt", + "rm": False, + "mountpoint": None, + "fstype": "ext4", + } + ], +} + + +SINGLE_PART_UNLOCKED_VC_UNMOUNTED = { + "name": "sda1", + "rm": True, + "ro": False, + "type": "part", + "mountpoint": None, + "fstype": None, + "children": [ + { + "name": "tcrypt-2049", + "rm": False, + "ro": False, + "type": "crypt", + "mountpoint": None, + "fstype": "vfat", + } + ], +} + +# Cli._get_supported_volume(): Unsupported + +SINGLE_DEVICE_ERROR_PARTITIONS_TOO_NESTED = { + "name": "sda2", + "type": "part", + "rm": True, + "ro": False, + "mountpoint": None, + "fstype": None, + "children": [ + { + "name": "sda2p1", + "type": "part", + "rm": True, + "ro": False, + "mountpoint": None, + "fstype": "crypto_LUKS", + } + ], +} + +SINGLE_DEVICE_ERROR_MOUNTED_PARTITION_NOT_ENCRYPTED = { + "name": "sda2", + "type": "part", + "rm": True, + "ro": False, + "mountpoint": None, + "fstype": None, + "children": [ + { + "name": "unencrypted", + "type": "part", + "rm": False, + "mountpoint": "/media/unencrypted", + "fstype": "ext4", + } + ], +} diff --git a/export/tests/test_archive.py b/export/tests/test_archive.py index 57791a82e..7c09b83d6 100644 --- a/export/tests/test_archive.py +++ b/export/tests/test_archive.py @@ -22,7 +22,6 @@ def test_extract_tarball(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -73,7 +72,6 @@ def test_extract_tarball_with_symlink(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -108,7 +106,6 @@ def test_extract_tarball_raises_if_doing_path_traversal(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -147,7 +144,6 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_dir(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -184,7 +180,6 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -223,7 +218,6 @@ def test_extract_tarball_raises_if_doing_path_traversal_with_symlink_linkname(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -260,7 +254,6 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -303,7 +296,6 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -347,7 +339,6 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink_to with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -380,7 +371,6 @@ def test_extract_tarball_raises_if_linkname_has_unsafe_absolute_path(): with tarfile.open(archive_path, "w:gz") as archive: metadata = { "device": "disk", - "encryption_method": "luks", "encryption_key": "test", } metadata_str = json.dumps(metadata) @@ -426,7 +416,6 @@ def test_valid_printer_test_config(capsys): config = Metadata(temp_folder).validate() assert config.encryption_key is None - assert config.encryption_method is None def test_valid_printer_config(capsys): @@ -439,23 +428,6 @@ def test_valid_printer_config(capsys): config = Metadata(temp_folder).validate() assert config.encryption_key is None - assert config.encryption_method is None - - -def test_invalid_encryption_config(capsys): - Archive("testfile") - - temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) - with open(metadata, "w") as f: - f.write( - '{"device": "disk", "encryption_method": "base64", "encryption_key": "hunter1"}' - ) - - with pytest.raises(ExportException) as ex: - Metadata(temp_folder).validate() - - assert ex.value.sdstatus is Status.ERROR_ARCHIVE_METADATA def test_invalid_config(capsys): @@ -491,14 +463,11 @@ def test_valid_encryption_config(capsys): temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write( - '{"device": "disk", "encryption_method": "luks", "encryption_key": "hunter1"}' - ) + f.write('{"device": "disk", "encryption_key": "hunter1"}') config = Metadata(temp_folder).validate() assert config.encryption_key == "hunter1" - assert config.encryption_method == "luks" @mock.patch("json.loads", side_effect=json.decoder.JSONDecodeError("ugh", "badjson", 0)) diff --git a/export/tests/test_main.py b/export/tests/test_main.py index 06da9ef66..ebad33eff 100644 --- a/export/tests/test_main.py +++ b/export/tests/test_main.py @@ -1,13 +1,13 @@ import pytest -import tempfile -import os from unittest import mock import shutil +from pathlib import Path from securedrop_export.archive import Archive, Metadata, Status as ArchiveStatus from securedrop_export.status import BaseStatus from securedrop_export.command import Command from securedrop_export.exceptions import ExportException +from securedrop_export.disk.status import Status as ExportStatus from securedrop_export.main import ( Status, @@ -18,107 +18,123 @@ _configure_logging, ) -SUBMISSION_SAMPLE_ARCHIVE = "pretendfile.tar.gz" +_PRINT_SAMPLE_ARCHIVE = "sample_print.sd-export" +_EXPORT_SAMPLE_ARCHIVE = "sample_export.sd-export" class TestMain: def setup_method(self, method): - # This can't be a class method, since we expect sysexit during this test suite, - # which - self.submission = Archive("pretendfile.tar.gz") - assert os.path.exists(self.submission.tmpdir) + # These can't be class setup methods, since we expect sysexit during this test suite + self.print_archive_path = Path.cwd() / "tests/files" / _PRINT_SAMPLE_ARCHIVE + assert self.print_archive_path.exists() + + self.export_archive_path = Path.cwd() / "tests/files" / _EXPORT_SAMPLE_ARCHIVE + assert self.export_archive_path.exists() + + self.print_submission = Archive(str(self.print_archive_path)) + assert Path(self.print_submission.tmpdir).exists() + + self.export_submission = Archive(str(self.export_archive_path)) + assert Path(self.export_submission.tmpdir).exists() def teardown_method(self, method): - if os.path.exists(self.submission.tmpdir): - shutil.rmtree(self.submission.tmpdir) - self.submission = None + if Path(self.print_submission.tmpdir).exists(): + shutil.rmtree(self.print_submission.tmpdir) + + if Path(self.export_submission.tmpdir).exists(): + shutil.rmtree(self.export_submission.tmpdir) - def test_exit_gracefully_no_exception(self, capsys): + def _did_exit_gracefully(self, exit, capsys, status: BaseStatus) -> bool: + """ + Helper. True if exited with 0, writing supplied status to stderr. + """ + captured = capsys.readouterr() + + return ( + exit.value.code == 0 + and captured.err.rstrip().endswith(status.value) + and captured.out == "" + ) + + def test__exit_gracefully_no_exception(self, capsys): with pytest.raises(SystemExit) as sysexit: - _exit_gracefully(self.submission, Status.ERROR_GENERIC) + # `ERROR_GENERIC` is just a placeholder status here + _exit_gracefully(self.print_submission, Status.ERROR_GENERIC) assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) - def test_exit_gracefully_exception(self, capsys): - with pytest.raises(SystemExit) as sysexit: - _exit_gracefully(self.submission, Status.ERROR_GENERIC) + @mock.patch( + "securedrop_export.main.shutil.rmtree", + side_effect=FileNotFoundError("oh no", 0), + ) + def test__exit_gracefully_even_with_cleanup_exception(self, mock_rm, capsys): + with mock.patch( + "sys.argv", ["qvm-send-to-usb", self.export_archive_path] + ), mock.patch( + "securedrop_export.main._start_service", + return_value=ExportStatus.SUCCESS_EXPORT, + ), pytest.raises( + SystemExit + ) as sysexit: + entrypoint() - # A graceful exit means a return code of 0 assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) + def test_entrypoint_success(self, capsys): + with mock.patch( + "sys.argv", ["qvm-send-to-usb", self.export_archive_path] + ), mock.patch( + "securedrop_export.main._start_service", + return_value=ExportStatus.SUCCESS_EXPORT, + ), pytest.raises( + SystemExit + ) as sysexit: + entrypoint() + + assert self._did_exit_gracefully(sysexit, capsys, ExportStatus.SUCCESS_EXPORT) + @pytest.mark.parametrize("status", [s for s in Status]) - def test_write_status(self, status, capsys): + def test__write_status_success(self, status, capsys): _write_status(status) captured = capsys.readouterr() assert captured.err == status.value + "\n" @pytest.mark.parametrize("invalid_status", ["foo", ";ls", "&& echo 0", None]) - def test_write_status_error(self, invalid_status, capsys): + def test__write_status_will_not_write_bad_value(self, invalid_status, capsys): with pytest.raises(ValueError): _write_status(Status(invalid_status)) - def _did_exit_gracefully(self, exit, capsys, status: BaseStatus) -> bool: - """ - Helper. True if exited with 0, writing supplied status to stderr. - """ captured = capsys.readouterr() + assert captured.err == "" + assert captured.out == "" - return ( - exit.value.code == 0 - and captured.err.rstrip().endswith(status.value) - and captured.out == "" - ) - - @pytest.mark.parametrize("command", list(Command)) - @mock.patch("securedrop_export.main._configure_logging") - @mock.patch("os.path.exists", return_value=True) - def test_entrypoint_success_start_service(self, mock_log, mock_path, command): - metadata = os.path.join(self.submission.tmpdir, Metadata.METADATA_FILE) - - with open(metadata, "w") as f: - f.write(f'{{"device": "{command.value}", "encryption_method": "luks"}}') - + def test_entrypoint_success_start_service(self): with mock.patch( - "sys.argv", ["qvm-send-to-usb", SUBMISSION_SAMPLE_ARCHIVE] + "sys.argv", ["qvm-send-to-usb", self.export_archive_path] ), mock.patch( "securedrop_export.main._start_service" - ) as mock_service, mock.patch( - "securedrop_export.main.Archive.extract_tarball", - return_value=self.submission, - ), pytest.raises( + ) as mock_service, pytest.raises( SystemExit ): entrypoint() - if command is not Command.START_VM: - assert self.submission.command == command - assert mock_service.call_args[0][0].archive == SUBMISSION_SAMPLE_ARCHIVE - mock_service.assert_called_once_with(self.submission) - - def test_valid_printer_test_config(self, capsys): - Archive("testfile") - temp_folder = tempfile.mkdtemp() - metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) - with open(metadata, "w") as f: - f.write('{"device": "printer-test"}') + assert mock_service.call_args[0][0].archive == self.export_archive_path + assert mock_service.call_args[0][0].command == Command.EXPORT - config = Metadata(temp_folder).validate() + def test_validate_metadata(self): + for archive_path in [self.print_archive_path, self.export_archive_path]: + archive = Archive(archive_path) + extracted = archive.extract_tarball() - assert config.encryption_key is None - assert config.encryption_method is None + assert Metadata(extracted.tmpdir).validate() @mock.patch( "securedrop_export.archive.safe_extractall", side_effect=ValueError("A tarball problem!"), ) - @mock.patch("securedrop_export.main.os.path.exists", return_value=True) - @mock.patch("securedrop_export.main.shutil.rmtree") - @mock.patch("securedrop_export.main._configure_logging") - def test_entrypoint_failure_extraction( - self, mock_log, mock_rm, mock_path, mock_extract, capsys - ): + def test_entrypoint_failure_extraction(self, mock_extract, capsys): with mock.patch( - "sys.argv", ["qvm-send-to-usb", SUBMISSION_SAMPLE_ARCHIVE] + "sys.argv", ["qvm-send-to-usb", self.export_archive_path] ), pytest.raises(SystemExit) as sysexit: entrypoint() @@ -149,9 +165,10 @@ def test_entrypoint_fails_unexpected(self, mock_mkdir, capsys): assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) - @mock.patch("os.path.exists", return_value=False) - def test_entrypoint_archive_path_fails(self, mock_path, capsys): - with pytest.raises(SystemExit) as sysexit: + def test_entrypoint_archive_path_fails(self, capsys): + with mock.patch( + "sys.argv", ["qvm-send-to-usb", "THIS_FILE_DOES_NOT_EXIST.sd-export"] + ), pytest.raises(SystemExit) as sysexit: entrypoint() assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_FILE_NOT_FOUND) @@ -171,14 +188,15 @@ def test__start_service_calls_correct_services(self, command): if command is Command.START_VM: pytest.skip("Command does not start a service") - self.submission.command = command + mock_submission = Archive("mock_submission.sd-export") + mock_submission.command = command with mock.patch("securedrop_export.main.PrintService") as ps, mock.patch( "securedrop_export.main.ExportService" ) as es: - _start_service(self.submission) + _start_service(mock_submission) if command in [Command.PRINT, Command.PRINTER_TEST, Command.PRINTER_PREFLIGHT]: - assert ps.call_args[0][0] is self.submission + assert ps.call_args[0][0] is mock_submission else: - assert es.call_args[0][0] is self.submission + assert es.call_args[0][0] is mock_submission From fc2cd877ede83c83e68832244dca3f41bc85ba7c Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 1 Feb 2024 15:29:13 -0500 Subject: [PATCH 657/751] Generate build-requirements.txt --- export/build-requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/export/build-requirements.txt b/export/build-requirements.txt index e69de29bb..172081b68 100644 --- a/export/build-requirements.txt +++ b/export/build-requirements.txt @@ -0,0 +1,2 @@ +pexpect==4.9.0 --hash=sha256:9eaf9cf5e3332373fab8184f455314ac01ebbb33e110331bc9e8e12daea1f68e +ptyprocess==0.7.0 --hash=sha256:b6194d9cb391fd7e02697548610c8eb18ba0226af2a9584bda50605958dc1a6b From 61ea8dc489110a171a4528247ef33c6ef7365e3c Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 24 Jan 2024 19:55:43 -0500 Subject: [PATCH 658/751] Client Veracrypt preparation (refactor): Combine export.py and device.py and avoid long-running thread/singleton pattern for export service. Don't depend on controller in Device, just pass list of filepaths for export. Checks to ensure files are present are conducted before dialog launch. Export and print use single method signature across components. Device does not depend on filepaths. --- client/securedrop_client/app.py | 9 +- client/securedrop_client/export.py | 356 ++++++-------- client/securedrop_client/export_status.py | 12 +- client/securedrop_client/gui/actions.py | 33 +- .../gui/conversation/__init__.py | 6 +- .../gui/conversation/export/__init__.py | 6 +- .../gui/conversation/export/device.py | 135 ------ .../gui/conversation/export/dialog.py | 55 --- .../{file_dialog.py => export_dialog.py} | 37 +- .../gui/conversation/export/print_dialog.py | 13 +- .../export/print_transcript_dialog.py | 14 +- .../conversation/export/transcript_dialog.py | 56 --- client/securedrop_client/gui/widgets.py | 20 +- client/tests/conftest.py | 55 +-- .../functional/test_export_file_dialog.py | 18 +- .../gui/conversation/export/test_device.py | 317 ++++++++---- .../gui/conversation/export/test_dialog.py | 379 ++++++++------- .../conversation/export/test_file_dialog.py | 437 +++++++++-------- .../conversation/export/test_print_dialog.py | 6 +- .../export/test_print_transcript_dialog.py | 2 +- .../export/test_transcript_dialog.py | 351 -------------- client/tests/gui/test_actions.py | 43 +- client/tests/gui/test_widgets.py | 14 +- client/tests/integration/conftest.py | 56 +-- .../tests/integration/test_styles_sdclient.py | 4 +- client/tests/test_export.py | 453 ------------------ 26 files changed, 953 insertions(+), 1934 deletions(-) delete mode 100644 client/securedrop_client/gui/conversation/export/device.py delete mode 100644 client/securedrop_client/gui/conversation/export/dialog.py rename client/securedrop_client/gui/conversation/export/{file_dialog.py => export_dialog.py} (93%) delete mode 100644 client/securedrop_client/gui/conversation/export/transcript_dialog.py delete mode 100644 client/tests/gui/conversation/export/test_transcript_dialog.py delete mode 100644 client/tests/test_export.py diff --git a/client/securedrop_client/app.py b/client/securedrop_client/app.py index 8e9fe9e9c..8a6a990c4 100644 --- a/client/securedrop_client/app.py +++ b/client/securedrop_client/app.py @@ -34,7 +34,7 @@ from PyQt5.QtCore import Qt, QThread, QTimer from PyQt5.QtWidgets import QApplication, QMessageBox -from securedrop_client import __version__, export, state +from securedrop_client import __version__, state from securedrop_client.database import Database from securedrop_client.db import make_session_maker from securedrop_client.gui.main import Window @@ -240,16 +240,11 @@ def start_app(args, qt_args) -> NoReturn: # type: ignore[no-untyped-def] database = Database(session) app_state = state.State(database) - with threads(4) as [ - export_service_thread, + with threads(3) as [ sync_thread, main_queue_thread, file_download_queue_thread, ]: - export_service = export.getService() - export_service.moveToThread(export_service_thread) - export_service_thread.start() - gui = Window(app_state) controller = Controller( diff --git a/client/securedrop_client/export.py b/client/securedrop_client/export.py index 366f68eab..59ae3f2f8 100644 --- a/client/securedrop_client/export.py +++ b/client/securedrop_client/export.py @@ -3,103 +3,159 @@ import os import subprocess import tarfile -import threading from io import BytesIO from shlex import quote from tempfile import TemporaryDirectory from typing import List, Optional -from PyQt5.QtCore import QObject, pyqtBoundSignal, pyqtSignal, pyqtSlot +from PyQt5.QtCore import QObject, pyqtSignal -from securedrop_client.export_status import ExportStatus +from securedrop_client.export_status import ExportError, ExportStatus logger = logging.getLogger(__name__) -class ExportError(Exception): - def __init__(self, status: "ExportStatus"): - self.status: "ExportStatus" = status - - class Export(QObject): """ - This class sends files over to the Export VM so that they can be copied to a luks-encrypted USB + Interface for sending files to Export VM for transfer to a disk drive or printed by a USB-connected printer. - Files are archived in a specified format, which you can learn more about in the README for the - securedrop-export repository. - """ + Files are archived in a specified format, (see `export` README). - METADATA_FN = "metadata.json" + A list of valid filepaths must be supplied. + """ - USB_TEST_FN = "usb-test.sd-export" - USB_TEST_METADATA = {"device": "usb-test"} + _METADATA_FN = "metadata.json" - PRINTER_PREFLIGHT_FN = "printer-preflight.sd-export" - PRINTER_PREFLIGHT_METADATA = {"device": "printer-preflight"} + _USB_TEST_FN = "usb-test.sd-export" + _USB_TEST_METADATA = {"device": "usb-test"} - DISK_TEST_FN = "disk-test.sd-export" - DISK_TEST_METADATA = {"device": "disk-test"} + _PRINTER_PREFLIGHT_FN = "printer-preflight.sd-export" + _PRINTER_PREFLIGHT_METADATA = {"device": "printer-preflight"} - PRINT_FN = "print_archive.sd-export" - PRINT_METADATA = {"device": "printer"} + _PRINT_FN = "print_archive.sd-export" + _PRINT_METADATA = {"device": "printer"} - DISK_FN = "archive.sd-export" - DISK_METADATA = {"device": "disk", "encryption_method": "luks"} - DISK_ENCRYPTION_KEY_NAME = "encryption_key" - DISK_EXPORT_DIR = "export_data" + _DISK_FN = "archive.sd-export" + _DISK_METADATA = {"device": "disk", "encryption_method": "luks"} + _DISK_ENCRYPTION_KEY_NAME = "encryption_key" + _DISK_EXPORT_DIR = "export_data" - # Set up signals for communication with the controller # # Emit ExportStatus - preflight_check_call_success = pyqtSignal(object) - export_usb_call_success = pyqtSignal(object) - printer_preflight_success = pyqtSignal(object) - print_call_success = pyqtSignal(object) + export_preflight_check_succeeded = pyqtSignal(object) + export_succeeded = pyqtSignal(object) + + print_preflight_check_succeeded = pyqtSignal(object) + print_succeeded = pyqtSignal(object) + + # Used for both print and export + export_completed = pyqtSignal(object) # Emit ExportError(status=ExportStatus) - export_usb_call_failure = pyqtSignal(object) - preflight_check_call_failure = pyqtSignal(object) - printer_preflight_failure = pyqtSignal(object) - print_call_failure = pyqtSignal(object) - - # Emit List[str] of filepaths - export_completed = pyqtSignal(list) - - def __init__( - self, - export_preflight_check_requested: Optional[pyqtBoundSignal] = None, - export_requested: Optional[pyqtBoundSignal] = None, - print_preflight_check_requested: Optional[pyqtBoundSignal] = None, - print_requested: Optional[pyqtBoundSignal] = None, - ) -> None: - super().__init__() - - self.connect_signals( - export_preflight_check_requested, - export_requested, - print_preflight_check_requested, - print_requested, - ) - - def connect_signals( - self, - export_preflight_check_requested: Optional[pyqtBoundSignal] = None, - export_requested: Optional[pyqtBoundSignal] = None, - print_preflight_check_requested: Optional[pyqtBoundSignal] = None, - print_requested: Optional[pyqtBoundSignal] = None, - ) -> None: - # This instance can optionally react to events to prevent - # coupling it to dependent code. - if export_preflight_check_requested is not None: - export_preflight_check_requested.connect(self.run_preflight_checks) - if export_requested is not None: - export_requested.connect(self.send_file_to_usb_device) - if print_requested is not None: - print_requested.connect(self.print) - if print_preflight_check_requested is not None: - print_preflight_check_requested.connect(self.run_printer_preflight) - - def _run_qrexec_export(cls, archive_path: str) -> ExportStatus: + export_preflight_check_failed = pyqtSignal(object) + export_failed = pyqtSignal(object) + + print_preflight_check_failed = pyqtSignal(object) + print_failed = pyqtSignal(object) + + def run_printer_preflight_checks(self) -> None: + """ + Make sure the Export VM is started. + """ + logger.info("Beginning printer preflight check") + try: + with TemporaryDirectory() as tmp_dir: + archive_path = self._create_archive( + archive_dir=tmp_dir, + archive_fn=self._PRINTER_PREFLIGHT_FN, + metadata=self._PRINTER_PREFLIGHT_METADATA, + ) + status = self._run_qrexec_export(archive_path) + self.print_preflight_check_succeeded.emit(status) + except ExportError as e: + logger.error("Print preflight failed") + logger.debug(f"Print preflight failed: {e}") + self.print_preflight_check_failed.emit(e) + + def run_export_preflight_checks(self) -> None: + """ + Run preflight check to verify that a valid USB device is connected. + """ + try: + logger.debug("Beginning export preflight check") + + with TemporaryDirectory() as tmp_dir: + archive_path = self._create_archive( + archive_dir=tmp_dir, + archive_fn=self._USB_TEST_FN, + metadata=self._USB_TEST_METADATA, + ) + status = self._run_qrexec_export(archive_path) + self.export_preflight_check_succeeded.emit(status) + + except ExportError as e: + logger.error("Export preflight failed") + self.export_preflight_check_failed.emit(e) + + def export(self, filepaths: List[str], passphrase: Optional[str]) -> None: + """ + Bundle filepaths into a tarball and send to encrypted USB via qrexec, + optionally supplying a passphrase to unlock encrypted drives. + """ + try: + logger.debug(f"Begin exporting {len(filepaths)} item(s)") + + # Edit metadata template to include passphrase + metadata = self._DISK_METADATA.copy() + if passphrase: + metadata[self._DISK_ENCRYPTION_KEY_NAME] = passphrase + + with TemporaryDirectory() as tmp_dir: + archive_path = self._create_archive( + archive_dir=tmp_dir, + archive_fn=self._DISK_FN, + metadata=metadata, + filepaths=filepaths, + ) + status = self._run_qrexec_export(archive_path) + + self.export_succeeded.emit(status) + logger.debug(f"Status {status}") + + except ExportError as e: + logger.error("Export failed") + logger.debug(f"Export failed: {e}") + self.export_failed.emit(e) + + self.export_completed.emit(filepaths) + + def print(self, filepaths: List[str]) -> None: + """ + Bundle files at self._filepaths_list into tarball and send for + printing via qrexec. + """ + try: + logger.debug("Beginning print") + + with TemporaryDirectory() as tmp_dir: + archive_path = self._create_archive( + archive_dir=tmp_dir, + archive_fn=self._PRINT_FN, + metadata=self._PRINT_METADATA, + filepaths=filepaths, + ) + status = self._run_qrexec_export(archive_path) + self.print_succeeded.emit(status) + logger.debug(f"Status {status}") + + except ExportError as e: + logger.error("Export failed") + logger.debug(f"Export failed: {e}") + self.print_failed.emit(e) + + self.export_completed.emit(filepaths) + + def _run_qrexec_export(self, archive_path: str) -> ExportStatus: """ Make the subprocess call to send the archive to the Export VM, where the archive will be processed. @@ -147,7 +203,7 @@ def _run_qrexec_export(cls, archive_path: str) -> ExportStatus: raise ExportError(ExportStatus.CALLED_PROCESS_ERROR) def _create_archive( - cls, archive_dir: str, archive_fn: str, metadata: dict, filepaths: List[str] + self, archive_dir: str, archive_fn: str, metadata: dict, filepaths: List[str] = [] ) -> str: """ Create the archive to be sent to the Export VM. @@ -164,20 +220,35 @@ def _create_archive( archive_path = os.path.join(archive_dir, archive_fn) with tarfile.open(archive_path, "w:gz") as archive: - cls._add_virtual_file_to_archive(archive, cls.METADATA_FN, metadata) + self._add_virtual_file_to_archive(archive, self._METADATA_FN, metadata) # When more than one file is added to the archive, # extra care must be taken to prevent name collisions. is_one_of_multiple_files = len(filepaths) > 1 + missing_count = 0 for filepath in filepaths: - cls._add_file_to_archive( - archive, filepath, prevent_name_collisions=is_one_of_multiple_files - ) + if not (os.path.exists(filepath)): + missing_count += 1 + logger.debug( + f"'{filepath}' does not exist, and will not be included in archive" + ) + # Controller checks files and keeps a reference open during export, + # so this shouldn't be reachable + logger.warning("File not found at specified filepath, skipping") + else: + self._add_file_to_archive( + archive, filepath, prevent_name_collisions=is_one_of_multiple_files + ) + if missing_count == len(filepaths) and missing_count > 0: + # Context manager will delete archive even if an exception occurs + # since the archive is in a TemporaryDirectory + logger.error("Files were moved or missing") + raise ExportError(ExportStatus.ERROR_MISSING_FILES) return archive_path def _add_virtual_file_to_archive( - cls, archive: tarfile.TarFile, filename: str, filedata: dict + self, archive: tarfile.TarFile, filename: str, filedata: dict ) -> None: """ Add filedata to a stream of in-memory bytes and add these bytes to the archive. @@ -195,7 +266,7 @@ def _add_virtual_file_to_archive( archive.addfile(tarinfo, filedata_bytes) def _add_file_to_archive( - cls, archive: tarfile.TarFile, filepath: str, prevent_name_collisions: bool = False + self, archive: tarfile.TarFile, filepath: str, prevent_name_collisions: bool = False ) -> None: """ Add the file to the archive. When the archive is extracted, the file should exist in a @@ -206,7 +277,7 @@ def _add_file_to_archive( filepath: The path to the file that will be added to the supplied archive. """ filename = os.path.basename(filepath) - arcname = os.path.join(cls.DISK_EXPORT_DIR, filename) + arcname = os.path.join(self._DISK_EXPORT_DIR, filename) if prevent_name_collisions: (parent_path, _) = os.path.split(filepath) grand_parent_path, parent_name = os.path.split(parent_path) @@ -216,126 +287,3 @@ def _add_file_to_archive( arcname = os.path.join("export_data", parent_name, filename) archive.add(filepath, arcname=arcname, recursive=False) - - def _build_archive_and_export( - self, metadata: dict, filename: str, filepaths: List[str] = [] - ) -> ExportStatus: - """ - Build archive, run qrexec command and return resulting ExportStatus. - - ExportError may be raised during underlying _run_qrexec_export call, - and is handled by the calling method. - """ - with TemporaryDirectory() as tmp_dir: - archive_path = self._create_archive( - archive_dir=tmp_dir, archive_fn=filename, metadata=metadata, filepaths=filepaths - ) - return self._run_qrexec_export(archive_path) - - @pyqtSlot() - def run_preflight_checks(self) -> None: - """ - Run preflight checks to verify that a valid USB device is connected. - """ - try: - logger.debug( - "beginning preflight checks in thread {}".format(threading.current_thread().ident) - ) - - status = self._build_archive_and_export( - metadata=self.USB_TEST_METADATA, filename=self.USB_TEST_FN - ) - - logger.debug("completed preflight checks: success") - self.preflight_check_call_success.emit(status) - except ExportError as e: - logger.debug("completed preflight checks: failure") - self.preflight_check_call_failure.emit(e) - - @pyqtSlot() - def run_printer_preflight(self) -> None: - """ - Make sure the Export VM is started. - """ - try: - status = self._build_archive_and_export( - metadata=self.PRINTER_PREFLIGHT_METADATA, filename=self.PRINTER_PREFLIGHT_FN - ) - self.printer_preflight_success.emit(status) - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.printer_preflight_failure.emit(e) - - @pyqtSlot(list, str) - def send_file_to_usb_device(self, filepaths: List[str], passphrase: str) -> None: - """ - Export the file to the luks-encrypted usb disk drive attached to the Export VM. - - Args: - filepath: The path of file to export. - passphrase: The passphrase to unlock the luks-encrypted usb disk drive. - """ - try: - logger.debug("beginning export from thread {}".format(threading.current_thread().ident)) - # Edit metadata template to include passphrase - metadata = self.DISK_METADATA.copy() - metadata[self.DISK_ENCRYPTION_KEY_NAME] = passphrase - status = self._build_archive_and_export( - metadata=metadata, filename=self.DISK_FN, filepaths=filepaths - ) - - self.export_usb_call_success.emit(status) - logger.debug(f"Status {status}") - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.export_usb_call_failure.emit(e) - - self.export_completed.emit(filepaths) - - @pyqtSlot(list) - def print(self, filepaths: List[str]) -> None: - """ - Print the file to the printer attached to the Export VM. - - Args: - filepath: The path of file to export. - """ - try: - logger.debug( - "beginning printer from thread {}".format(threading.current_thread().ident) - ) - status = self._build_archive_and_export( - metadata=self.PRINT_METADATA, filename=self.PRINT_FN, filepaths=filepaths - ) - self.print_call_success.emit(status) - logger.debug(f"Status {status}") - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.print_call_failure.emit(e) - - self.export_completed.emit(filepaths) - - -Service = Export - -# Store a singleton service instance. -_service = Service() - - -def resetService() -> None: - """Replaces the existing sngleton service instance by a new one. - - Get the instance by using getService(). - """ - global _service - _service = Service() - - -def getService() -> Service: - """All calls to this function return the same singleton service instance. - - Use resetService() to replace it by a new one.""" - return _service diff --git a/client/securedrop_client/export_status.py b/client/securedrop_client/export_status.py index 2c2a19924..da475c3fa 100644 --- a/client/securedrop_client/export_status.py +++ b/client/securedrop_client/export_status.py @@ -1,11 +1,16 @@ from enum import Enum +class ExportError(Exception): + def __init__(self, status: "ExportStatus"): + self.status: "ExportStatus" = status + + class ExportStatus(Enum): """ All possible strings returned by the qrexec calls to sd-devices. These values come from - `print/status.py` and `disk/status.py` in `https://github.com/freedomofpress/securedrop-export` - and must only be changed in coordination with changes released in that repo. + `print/status.py` and `disk/status.py` in `securedrop-export` + and must only be changed in coordination with changes released in that component. """ # Export @@ -53,3 +58,6 @@ class ExportStatus(Enum): CALLED_PROCESS_ERROR = "CALLED_PROCESS_ERROR" ERROR_USB_CONFIGURATION = "ERROR_USB_CONFIGURATION" UNEXPECTED_RETURN_STATUS = "UNEXPECTED_RETURN_STATUS" + + # Client-side error only + ERROR_MISSING_FILES = "ERROR_MISSING_FILES" # All files meant for export are missing diff --git a/client/securedrop_client/gui/actions.py b/client/securedrop_client/gui/actions.py index c4dfd6a70..ecca68466 100644 --- a/client/securedrop_client/gui/actions.py +++ b/client/securedrop_client/gui/actions.py @@ -12,15 +12,11 @@ from PyQt5.QtCore import Qt, pyqtSlot from PyQt5.QtWidgets import QAction, QDialog, QMenu -from securedrop_client import export, state +from securedrop_client import state from securedrop_client.conversation import Transcript as ConversationTranscript from securedrop_client.db import Source from securedrop_client.gui.base import ModalDialog -from securedrop_client.gui.conversation import ExportDevice as ConversationExportDevice -from securedrop_client.gui.conversation import ExportDialog as ExportConversationDialog -from securedrop_client.gui.conversation import ( - ExportTranscriptDialog as ExportConversationTranscriptDialog, -) +from securedrop_client.gui.conversation import ExportDevice, ExportDialog from securedrop_client.gui.conversation import ( PrintTranscriptDialog as PrintConversationTranscriptDialog, ) @@ -160,8 +156,6 @@ def __init__( self.controller = controller self._source = source - self._export_device = ConversationExportDevice(controller, export.getService()) - self.triggered.connect(self._on_triggered) @pyqtSlot() @@ -189,8 +183,9 @@ def _on_triggered(self) -> None: # out of scope, any pending file removal will be performed # by the operating system. with open(file_path, "r") as f: + export = ExportDevice() dialog = PrintConversationTranscriptDialog( - self._export_device, TRANSCRIPT_FILENAME, str(file_path) + export, TRANSCRIPT_FILENAME, [str(file_path)] ) dialog.exec() @@ -212,15 +207,13 @@ def __init__( self.controller = controller self._source = source - self._export_device = ConversationExportDevice(controller, export.getService()) - self.triggered.connect(self._on_triggered) @pyqtSlot() def _on_triggered(self) -> None: """ (Re-)generates the conversation transcript and opens a confirmation dialog to export it, - in the manner of the existing ExportFileDialog. + in the manner of the existing ExportDialog. """ file_path = ( Path(self.controller.data_dir) @@ -241,9 +234,8 @@ def _on_triggered(self) -> None: # out of scope, any pending file removal will be performed # by the operating system. with open(file_path, "r") as f: - dialog = ExportConversationTranscriptDialog( - self._export_device, TRANSCRIPT_FILENAME, str(file_path) - ) + export_device = ExportDevice() + dialog = ExportDialog(export_device, TRANSCRIPT_FILENAME, [str(file_path)]) dialog.exec() @@ -267,8 +259,6 @@ def __init__( self._source = source self._state = app_state - self._export_device = ConversationExportDevice(controller, export.getService()) - self.triggered.connect(self._on_triggered) @pyqtSlot() @@ -276,7 +266,7 @@ def _on_triggered(self) -> None: """ (Re-)generates the conversation transcript and opens a confirmation dialog to export it alongside all the (attached) files that are downloaded, in the manner - of the existing ExportFileDialog. + of the existing ExportDialog. """ if self._state is not None: id = self._state.selected_conversation @@ -302,7 +292,7 @@ def _prepare_to_export(self) -> None: """ (Re-)generates the conversation transcript and opens a confirmation dialog to export it alongside all the (attached) files that are downloaded, in the manner - of the existing ExportFileDialog. + of the existing ExportDialog. """ transcript_location = ( Path(self.controller.data_dir) @@ -331,6 +321,7 @@ def _prepare_to_export(self) -> None: # out of scope, any pending file removal will be performed # by the operating system. with ExitStack() as stack: + export_device = ExportDevice() files = [ stack.enter_context(open(file_location, "r")) for file_location in file_locations ] @@ -341,8 +332,8 @@ def _prepare_to_export(self) -> None: else: summary = _("all files and transcript") - dialog = ExportConversationDialog( - self._export_device, + dialog = ExportDialog( + export_device, summary, [str(file_location) for file_location in file_locations], ) diff --git a/client/securedrop_client/gui/conversation/__init__.py b/client/securedrop_client/gui/conversation/__init__.py index 29142e98d..11729f801 100644 --- a/client/securedrop_client/gui/conversation/__init__.py +++ b/client/securedrop_client/gui/conversation/__init__.py @@ -3,9 +3,7 @@ """ # Import classes here to make possible to import them from securedrop_client.gui.conversation from .delete import DeleteConversationDialog # noqa: F401 -from .export import Device as ExportDevice # noqa: F401 -from .export import Dialog as ExportDialog # noqa: F401 -from .export import FileDialog as ExportFileDialog # noqa: F401 +from .export import Export as ExportDevice # noqa: F401 +from .export import ExportDialog as ExportDialog # noqa: F401 from .export import PrintDialog as PrintFileDialog # noqa: F401 from .export import PrintTranscriptDialog # noqa: F401 -from .export import TranscriptDialog as ExportTranscriptDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/export/__init__.py b/client/securedrop_client/gui/conversation/export/__init__.py index 7da54e94c..8de6acbe7 100644 --- a/client/securedrop_client/gui/conversation/export/__init__.py +++ b/client/securedrop_client/gui/conversation/export/__init__.py @@ -1,6 +1,4 @@ -from .device import Device # noqa: F401 -from .dialog import Dialog # noqa: F401 -from .file_dialog import FileDialog # noqa: F401 +from ....export import Export # noqa: F401 +from .export_dialog import ExportDialog # noqa: F401 from .print_dialog import PrintDialog # noqa: F401 from .print_transcript_dialog import PrintTranscriptDialog # noqa: F401 -from .transcript_dialog import TranscriptDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/export/device.py b/client/securedrop_client/gui/conversation/export/device.py deleted file mode 100644 index 9cf61dd06..000000000 --- a/client/securedrop_client/gui/conversation/export/device.py +++ /dev/null @@ -1,135 +0,0 @@ -import logging -import os -from typing import List - -from PyQt5.QtCore import QObject, pyqtSignal - -from securedrop_client.export import Export -from securedrop_client.logic import Controller - -logger = logging.getLogger(__name__) - - -class Device(QObject): - """Abstracts an export service for use in GUI components. - - This class defines an interface for GUI components to have access - to the status of an export device without needed to interact directly - with the underlying export service. - """ - - export_preflight_check_requested = pyqtSignal() - print_preflight_check_requested = pyqtSignal() - - # Emit ExportStatus - export_preflight_check_succeeded = pyqtSignal(object) - export_succeeded = pyqtSignal(object) - - print_preflight_check_succeeded = pyqtSignal(object) - print_succeeded = pyqtSignal(object) - - # Emit ExportError(status=ExportStatus) - export_preflight_check_failed = pyqtSignal(object) - export_failed = pyqtSignal(object) - - print_preflight_check_failed = pyqtSignal(object) - print_failed = pyqtSignal(object) - - # Emit List[str] filepaths - export_requested = pyqtSignal(list, str) - export_completed = pyqtSignal(list) - print_requested = pyqtSignal(list) - - def __init__(self, controller: Controller, export_service: Export) -> None: - super().__init__() - - self._controller = controller - self._export_service = export_service - - self._export_service.connect_signals( - self.export_preflight_check_requested, - self.export_requested, - self.print_preflight_check_requested, - self.print_requested, - ) - - # Abstract the Export instance away from the GUI - self._export_service.preflight_check_call_success.connect( - self.export_preflight_check_succeeded - ) - self._export_service.preflight_check_call_failure.connect( - self.export_preflight_check_failed - ) - - self._export_service.export_usb_call_success.connect(self.export_succeeded) - self._export_service.export_usb_call_failure.connect(self.export_failed) - self._export_service.export_completed.connect(self.export_completed) - - self._export_service.printer_preflight_success.connect(self.print_preflight_check_succeeded) - self._export_service.printer_preflight_failure.connect(self.print_preflight_check_failed) - - self._export_service.print_call_failure.connect(self.print_failed) - self._export_service.print_call_success.connect(self.print_succeeded) - - def run_printer_preflight_checks(self) -> None: - """ - Run preflight checks to make sure the Export VM is configured correctly. - """ - logger.info("Running printer preflight check") - self.print_preflight_check_requested.emit() - - def run_export_preflight_checks(self) -> None: - """ - Run preflight checks to make sure the Export VM is configured correctly. - """ - logger.info("Running export preflight check") - self.export_preflight_check_requested.emit() - - def export_transcript(self, file_location: str, passphrase: str) -> None: - """ - Send the transcript specified by file_location to the Export VM. - """ - self.export_requested.emit([file_location], passphrase) - - def export_files(self, file_locations: List[str], passphrase: str) -> None: - """ - Send the files specified by file_locations to the Export VM. - """ - self.export_requested.emit(file_locations, passphrase) - - def export_file_to_usb_drive(self, file_uuid: str, passphrase: str) -> None: - """ - Send the file specified by file_uuid to the Export VM with the user-provided passphrase for - unlocking the attached transfer device. If the file is missing, update the db so that - is_downloaded is set to False. - """ - file = self._controller.get_file(file_uuid) - file_location = file.location(self._controller.data_dir) - logger.info("Exporting file in: {}".format(os.path.dirname(file_location))) - - if not self._controller.downloaded_file_exists(file): - logger.warning(f"Cannot find file in {file_location}") - return - - self.export_requested.emit([file_location], passphrase) - - def print_transcript(self, file_location: str) -> None: - """ - Send the transcript specified by file_location to the Export VM. - """ - self.print_requested.emit([file_location]) - - def print_file(self, file_uuid: str) -> None: - """ - Send the file specified by file_uuid to the Export VM. If the file is missing, update the db - so that is_downloaded is set to False. - """ - file = self._controller.get_file(file_uuid) - file_location = file.location(self._controller.data_dir) - logger.info("Printing file in: {}".format(os.path.dirname(file_location))) - - if not self._controller.downloaded_file_exists(file): - logger.warning(f"Cannot find file in {file_location}") - return - - self.print_requested.emit([file_location]) diff --git a/client/securedrop_client/gui/conversation/export/dialog.py b/client/securedrop_client/gui/conversation/export/dialog.py deleted file mode 100644 index c71ebe2d8..000000000 --- a/client/securedrop_client/gui/conversation/export/dialog.py +++ /dev/null @@ -1,55 +0,0 @@ -from gettext import gettext as _ -from typing import List - -from PyQt5.QtCore import pyqtSlot - -from .device import Device -from .file_dialog import FileDialog - - -class Dialog(FileDialog): - """Adapts the dialog used to export files to allow exporting a conversation. - - - Adjust the init arguments to export multiple files. - - Adds a method to allow all those files to be exported. - - Overrides the two slots that handles the export action to call said method. - """ - - def __init__(self, device: Device, summary: str, file_locations: List[str]) -> None: - super().__init__(device, "", summary) - - self.file_locations = file_locations - - @pyqtSlot(bool) - def _export_files(self, checked: bool = False) -> None: - self.start_animate_activestate() - self.cancel_button.setEnabled(False) - self.passphrase_field.setDisabled(True) - self._device.export_files(self.file_locations, self.passphrase_field.text()) - - @pyqtSlot() - def _show_passphrase_request_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export_files) - self.header.setText(self.passphrase_header) - self.continue_button.setText(_("SUBMIT")) - self.header_line.hide() - self.error_details.hide() - self.body.hide() - self.passphrase_field.setFocus() - self.passphrase_form.show() - self.adjustSize() - - @pyqtSlot() - def _show_passphrase_request_message_again(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export_files) - self.header.setText(self.passphrase_header) - self.error_details.setText(self.passphrase_error_message) - self.continue_button.setText(_("SUBMIT")) - self.header_line.hide() - self.body.hide() - self.error_details.show() - self.passphrase_field.setFocus() - self.passphrase_form.show() - self.adjustSize() diff --git a/client/securedrop_client/gui/conversation/export/file_dialog.py b/client/securedrop_client/gui/conversation/export/export_dialog.py similarity index 93% rename from client/securedrop_client/gui/conversation/export/file_dialog.py rename to client/securedrop_client/gui/conversation/export/export_dialog.py index 414d2c8b1..b1bdbde7e 100644 --- a/client/securedrop_client/gui/conversation/export/file_dialog.py +++ b/client/securedrop_client/gui/conversation/export/export_dialog.py @@ -2,36 +2,37 @@ A dialog that allows journalists to export sensitive files to a USB drive. """ from gettext import gettext as _ -from typing import Optional +from typing import List, Optional from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt, pyqtSlot from PyQt5.QtGui import QColor, QFont from PyQt5.QtWidgets import QGraphicsDropShadowEffect, QLineEdit, QVBoxLayout, QWidget -from securedrop_client.export import ExportError -from securedrop_client.export_status import ExportStatus +from securedrop_client.export_status import ExportError, ExportStatus from securedrop_client.gui.base import ModalDialog, PasswordEdit, SecureQLabel from securedrop_client.gui.base.checkbox import SDCheckBox -from .device import Device +from ....export import Export -class FileDialog(ModalDialog): +class ExportDialog(ModalDialog): DIALOG_CSS = resource_string(__name__, "dialog.css").decode("utf-8") PASSPHRASE_LABEL_SPACING = 0.5 NO_MARGIN = 0 FILENAME_WIDTH_PX = 260 - def __init__(self, device: Device, file_uuid: str, file_name: str) -> None: + def __init__(self, device: Export, summary_text: str, filepaths: List[str]) -> None: super().__init__() self.setStyleSheet(self.DIALOG_CSS) self._device = device - self.file_uuid = file_uuid - self.file_name = SecureQLabel( - file_name, wordwrap=False, max_length=self.FILENAME_WIDTH_PX + self.filepaths = filepaths + + # This could be the filename, if a single file, or "{n} files" + self.summary_text = SecureQLabel( + summary_text, wordwrap=False, max_length=self.FILENAME_WIDTH_PX ).text() # Hold onto the error status we receive from the Export VM self.error_status: Optional[ExportStatus] = None @@ -51,10 +52,10 @@ def __init__(self, device: Device, file_uuid: str, file_name: str) -> None: # Dialog content self.starting_header = _( "Preparing to export:
" '{}' - ).format(self.file_name) + ).format(self.summary_text) self.ready_header = _( "Ready to export:
" '{}' - ).format(self.file_name) + ).format(self.summary_text) self.insert_usb_header = _("Insert encrypted USB drive") self.passphrase_header = _("Enter passphrase for USB drive") self.success_header = _("Export successful") @@ -74,7 +75,7 @@ def __init__(self, device: Device, file_uuid: str, file_name: str) -> None: "identifies who they are. To protect your sources, please consider redacting files " "before working with them on network-connected computers." ) - self.exporting_message = _("Exporting: {}").format(self.file_name) + self.exporting_message = _("Exporting: {}").format(self.summary_text) self.insert_usb_message = _( "Please insert one of the export drives provisioned specifically " "for the SecureDrop Workstation." @@ -128,7 +129,7 @@ def _show_starting_instructions(self) -> None: def _show_passphrase_request_message(self) -> None: self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export_file) + self.continue_button.clicked.connect(self._export) self.header.setText(self.passphrase_header) self.continue_button.setText(_("SUBMIT")) self.header_line.hide() @@ -140,7 +141,7 @@ def _show_passphrase_request_message(self) -> None: def _show_passphrase_request_message_again(self) -> None: self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export_file) + self.continue_button.clicked.connect(self._export) self.header.setText(self.passphrase_header) self.error_details.setText(self.passphrase_error_message) self.continue_button.setText(_("SUBMIT")) @@ -208,7 +209,7 @@ def _run_preflight(self) -> None: self._device.run_export_preflight_checks() @pyqtSlot() - def _export_file(self, checked: bool = False) -> None: + def _export(self, checked: bool = False) -> None: self.start_animate_activestate() self.cancel_button.setEnabled(False) self.passphrase_field.setDisabled(True) @@ -216,7 +217,7 @@ def _export_file(self, checked: bool = False) -> None: # TODO: If the drive is already unlocked, the passphrase field will be empty. # This is ok, but could violate expectations. The password should be passed # via qrexec in future, to avoid writing it to even a temporary file at all. - self._device.export_file_to_usb_drive(self.file_uuid, self.passphrase_field.text()) + self._device.export(self.filepaths, self.passphrase_field.text()) @pyqtSlot(object) def _on_export_preflight_check_succeeded(self, result: ExportStatus) -> None: @@ -228,7 +229,7 @@ def _on_export_preflight_check_succeeded(self, result: ExportStatus) -> None: self.continue_button.clicked.disconnect() if result == ExportStatus.DEVICE_WRITABLE: # Skip password prompt, we're there - self.continue_button.clicked.connect(self._export_file) + self.continue_button.clicked.connect(self._export) else: # result == ExportStatus.DEVICE_LOCKED self.continue_button.clicked.connect(self._show_passphrase_request_message) self.continue_button.setEnabled(True) @@ -237,7 +238,7 @@ def _on_export_preflight_check_succeeded(self, result: ExportStatus) -> None: # Skip passphrase prompt if device is unlocked if result == ExportStatus.DEVICE_WRITABLE: - self._export_file() + self._export() else: self._show_passphrase_request_message() diff --git a/client/securedrop_client/gui/conversation/export/print_dialog.py b/client/securedrop_client/gui/conversation/export/print_dialog.py index 32e160bd1..40eaa7c88 100644 --- a/client/securedrop_client/gui/conversation/export/print_dialog.py +++ b/client/securedrop_client/gui/conversation/export/print_dialog.py @@ -1,23 +1,22 @@ from gettext import gettext as _ -from typing import Optional +from typing import List, Optional from PyQt5.QtCore import QSize, pyqtSlot -from securedrop_client.export import ExportError -from securedrop_client.export_status import ExportStatus +from securedrop_client.export_status import ExportError, ExportStatus from securedrop_client.gui.base import ModalDialog, SecureQLabel -from .device import Device +from ....export import Export class PrintDialog(ModalDialog): FILENAME_WIDTH_PX = 260 - def __init__(self, device: Device, file_uuid: str, file_name: str) -> None: + def __init__(self, device: Export, file_name: str, filepaths: List[str]) -> None: super().__init__() self._device = device - self.file_uuid = file_uuid + self.filepaths = filepaths self.file_name = SecureQLabel( file_name, wordwrap=False, max_length=self.FILENAME_WIDTH_PX ).text() @@ -95,7 +94,7 @@ def _run_preflight(self) -> None: @pyqtSlot() def _print_file(self) -> None: - self._device.print_file(self.file_uuid) + self._device.print(self.filepaths) self.close() @pyqtSlot() diff --git a/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py b/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py index 9f47735ce..b6508fa06 100644 --- a/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py +++ b/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py @@ -1,8 +1,10 @@ +from typing import List + from PyQt5.QtCore import QSize, pyqtSlot from securedrop_client.gui.conversation.export import PrintDialog -from .device import Device +from ....export import Export class PrintTranscriptDialog(PrintDialog): @@ -13,13 +15,15 @@ class PrintTranscriptDialog(PrintDialog): - Overrides the slot that handles the printing action to call said method. """ - def __init__(self, device: Device, file_name: str, transcript_location: str) -> None: - super().__init__(device, "", file_name) + def __init__(self, device: Export, file_name: str, filepath: List[str]) -> None: + super().__init__(device, file_name, filepath) - self.transcript_location = transcript_location + # List might seem like an odd choice for this, but this is on the + # way to standardizing one export/print dialog that can send multiple items + self.transcript_location = filepath def _print_transcript(self) -> None: - self._device.print_transcript(self.transcript_location) + self._device.print(self.transcript_location) self.close() @pyqtSlot() diff --git a/client/securedrop_client/gui/conversation/export/transcript_dialog.py b/client/securedrop_client/gui/conversation/export/transcript_dialog.py deleted file mode 100644 index 331819707..000000000 --- a/client/securedrop_client/gui/conversation/export/transcript_dialog.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -A dialog that allows journalists to export sensitive files to a USB drive. -""" -from gettext import gettext as _ - -from PyQt5.QtCore import pyqtSlot - -from .device import Device -from .file_dialog import FileDialog - - -class TranscriptDialog(FileDialog): - """Adapts the dialog used to export files to allow exporting a conversation transcript. - - - Adjust the init arguments to the needs of conversation transcript export. - - Adds a method to allow a transcript to be exported. - - Overrides the two slots that handles the export action to call said method. - """ - - def __init__(self, device: Device, file_name: str, transcript_location: str) -> None: - super().__init__(device, "", file_name) - - self.transcript_location = transcript_location - - def _export_transcript(self, checked: bool = False) -> None: - self.start_animate_activestate() - self.cancel_button.setEnabled(False) - self.passphrase_field.setDisabled(True) - self._device.export_transcript(self.transcript_location, self.passphrase_field.text()) - - @pyqtSlot() - def _show_passphrase_request_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export_transcript) - self.header.setText(self.passphrase_header) - self.continue_button.setText(_("SUBMIT")) - self.header_line.hide() - self.error_details.hide() - self.body.hide() - self.passphrase_field.setFocus() - self.passphrase_form.show() - self.adjustSize() - - @pyqtSlot() - def _show_passphrase_request_message_again(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export_transcript) - self.header.setText(self.passphrase_header) - self.error_details.setText(self.passphrase_error_message) - self.continue_button.setText(_("SUBMIT")) - self.header_line.hide() - self.body.hide() - self.error_details.show() - self.passphrase_field.setFocus() - self.passphrase_form.show() - self.adjustSize() diff --git a/client/securedrop_client/gui/widgets.py b/client/securedrop_client/gui/widgets.py index a03f5b905..38c15e063 100644 --- a/client/securedrop_client/gui/widgets.py +++ b/client/securedrop_client/gui/widgets.py @@ -60,7 +60,7 @@ QWidget, ) -from securedrop_client import export, state +from securedrop_client import state from securedrop_client.db import ( DraftReply, File, @@ -2255,8 +2255,6 @@ def __init__( self.controller = controller - self._export_device = conversation.ExportDevice(controller, export.getService()) - self.file = self.controller.get_file(file_uuid) self.uuid = file_uuid self.index = index @@ -2455,11 +2453,16 @@ def _on_export_clicked(self) -> None: """ Called when the export button is clicked. """ + file_location = self.file.location(self.controller.data_dir) + if not self.controller.downloaded_file_exists(self.file): + logger.debug("Clicked export but file not downloaded") return - self.export_dialog = conversation.ExportFileDialog( - self._export_device, self.uuid, self.file.filename + export_device = conversation.ExportDevice() + + self.export_dialog = conversation.ExportDialog( + export_device, self.file.filename, [file_location] ) self.export_dialog.show() @@ -2469,9 +2472,14 @@ def _on_print_clicked(self) -> None: Called when the print button is clicked. """ if not self.controller.downloaded_file_exists(self.file): + logger.debug("Clicked print but file not downloaded") return - dialog = conversation.PrintFileDialog(self._export_device, self.uuid, self.file.filename) + filepath = self.file.location(self.controller.data_dir) + + export_device = conversation.ExportDevice() + + dialog = conversation.PrintFileDialog(export_device, self.file.filename, [filepath]) dialog.exec() def _on_left_click(self) -> None: diff --git a/client/tests/conftest.py b/client/tests/conftest.py index a7918bbc1..eea47c558 100644 --- a/client/tests/conftest.py +++ b/client/tests/conftest.py @@ -4,14 +4,13 @@ import tempfile from configparser import ConfigParser from datetime import datetime -from typing import List from uuid import uuid4 import pytest from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QMainWindow -from securedrop_client import export, state +from securedrop_client import state from securedrop_client.app import configure_locale_and_language from securedrop_client.config import Config from securedrop_client.db import ( @@ -23,7 +22,6 @@ Source, make_session_maker, ) -from securedrop_client.export import ExportStatus from securedrop_client.gui import conversation from securedrop_client.gui.main import Window from securedrop_client.logic import Controller @@ -80,7 +78,7 @@ def print_dialog(mocker, homedir): export_device = mocker.MagicMock(spec=conversation.ExportDevice) - dialog = conversation.PrintFileDialog(export_device, "file_UUID", "file123.jpg") + dialog = conversation.PrintFileDialog(export_device, "file123.jpg", ["/mock/path/to/file"]) yield dialog @@ -92,14 +90,14 @@ def print_transcript_dialog(mocker, homedir): export_device = mocker.MagicMock(spec=conversation.ExportDevice) dialog = conversation.PrintTranscriptDialog( - export_device, "transcript.txt", "some/path/transcript.txt" + export_device, "transcript.txt", ["some/path/transcript.txt"] ) yield dialog @pytest.fixture(scope="function") -def export_dialog(mocker, homedir): +def export_dialog_multifile(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) export_device = mocker.MagicMock(spec=conversation.ExportDevice) @@ -114,12 +112,12 @@ def export_dialog(mocker, homedir): @pytest.fixture(scope="function") -def export_file_dialog(mocker, homedir): +def export_dialog(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) export_device = mocker.MagicMock(spec=conversation.ExportDevice) - dialog = conversation.ExportFileDialog(export_device, "file_UUID", "file123.jpg") + dialog = conversation.ExportDialog(export_device, "file123.jpg", ["/mock/path/to/file"]) yield dialog @@ -130,8 +128,8 @@ def export_transcript_dialog(mocker, homedir): export_device = mocker.MagicMock(spec=conversation.ExportDevice) - dialog = conversation.ExportTranscriptDialog( - export_device, "transcript.txt", "/some/path/transcript.txt" + dialog = conversation.ExportDialog( + export_device, "transcript.txt", ["/some/path/transcript.txt"] ) yield dialog @@ -169,39 +167,16 @@ def homedir(i18n): yield tmpdir -class MockExportService(export.Service): - """An export service that assumes the Qubes RPC calls are successful and skips them.""" - - def __init__(self, unlocked: bool): - super().__init__() - if unlocked: - self.preflight_response = ExportStatus.DEVICE_WRITABLE - else: - self.preflight_response = ExportStatus.DEVICE_LOCKED - - def run_preflight_checks(self) -> None: - self.preflight_check_call_success.emit(self.preflight_response) - - def send_file_to_usb_device(self, filepaths: List[str], passphrase: str) -> None: - self.export_usb_call_success.emit(ExportStatus.SUCCESS_EXPORT) - self.export_completed.emit(filepaths) - - def run_printer_preflight(self) -> None: - self.printer_preflight_success.emit(ExportStatus.PRINT_PREFLIGHT_SUCCESS) - - def print(self, filepaths: List[str]) -> None: - self.print_call_success.emit(ExportStatus.PRINT_SUCCESS) - self.export_completed.emit(filepaths) - - @pytest.fixture(scope="function") -def mock_export_service(): - return MockExportService(unlocked=False) +def mock_export(): + device = conversation.ExportDevice() + device.run_export_preflight_checks = lambda dir: None + device.run_printer_preflight_checks = lambda dir: None + device.print = lambda filepaths: None + device.export = lambda filepaths, passphrase: None -@pytest.fixture(scope="function") -def mock_export_service_unlocked_device(): - return MockExportService(unlocked=True) + return device @pytest.fixture(scope="function") diff --git a/client/tests/functional/test_export_file_dialog.py b/client/tests/functional/test_export_file_dialog.py index 1fd160266..700d89763 100644 --- a/client/tests/functional/test_export_file_dialog.py +++ b/client/tests/functional/test_export_file_dialog.py @@ -17,11 +17,11 @@ ) -def _setup_export(functional_test_logged_in_context, qtbot, mocker, mock_export_service): +def _setup_export(functional_test_logged_in_context, qtbot, mocker, mock_export): """ Helper. Set up export test context and return reference to export dialog. """ - mocker.patch("securedrop_client.export.getService", return_value=mock_export_service) + mocker.patch("securedrop_client.export.Export", return_value=mock_export) gui, controller = functional_test_logged_in_context @@ -68,16 +68,12 @@ def check_for_export_dialog(): @pytest.mark.vcr() -def test_export_file_dialog_locked( - functional_test_logged_in_context, qtbot, mocker, mock_export_service -): +def test_export_file_dialog_locked(functional_test_logged_in_context, qtbot, mocker, mock_export): """ Download a file, export it, and verify that the export is complete by checking that the label of the export dialog's continue button is "DONE". """ - export_dialog = _setup_export( - functional_test_logged_in_context, qtbot, mocker, mock_export_service - ) + export_dialog = _setup_export(functional_test_logged_in_context, qtbot, mocker, mock_export) assert export_dialog.passphrase_form.isHidden() is True @@ -102,15 +98,13 @@ def check_password_form(): @pytest.mark.vcr() def test_export_file_dialog_device_already_unlocked( - functional_test_logged_in_context, qtbot, mocker, mock_export_service_unlocked_device + functional_test_logged_in_context, qtbot, mocker, mock_export ): """ Download a file, export it, and verify that the export is complete by checking that the label of the export dialog's continue button is "DONE". """ - export_dialog = _setup_export( - functional_test_logged_in_context, qtbot, mocker, mock_export_service_unlocked_device - ) + export_dialog = _setup_export(functional_test_logged_in_context, qtbot, mocker, mock_export) def check_skip_password_prompt_for_unlocked_device(): assert export_dialog.passphrase_form.isHidden() is True diff --git a/client/tests/gui/conversation/export/test_device.py b/client/tests/gui/conversation/export/test_device.py index 88a599162..6b44fd338 100644 --- a/client/tests/gui/conversation/export/test_device.py +++ b/client/tests/gui/conversation/export/test_device.py @@ -1,144 +1,255 @@ +import os +import subprocess +import tarfile +from tempfile import NamedTemporaryFile, TemporaryDirectory from unittest import mock -from PyQt5.QtTest import QSignalSpy +import pytest -from securedrop_client.export import Export -from securedrop_client.gui.conversation.export import Device -from securedrop_client.logic import Controller +from securedrop_client.export_status import ExportError, ExportStatus +from securedrop_client.gui.conversation.export import Export from tests import factory - +_PATH_TO_PRETEND_ARCHIVE = "/tmp/archive-pretend" +_QREXEC_EXPORT_COMMAND = [ + "qrexec-client-vm", + "--", + "sd-devices", + "qubes.OpenInVM", + "/usr/lib/qubes/qopen-in-vm", + "--view-only", + "--", + f"{_PATH_TO_PRETEND_ARCHIVE}", +] +_MOCK_FILEDIR = "/tmp/mock_tmpdir/" + + +@mock.patch("subprocess.check_output") class TestDevice: @classmethod def setup_class(cls): - mock_export_service = mock.MagicMock(spec=Export) - mock_get_file = mock.MagicMock() - cls.mock_controller = mock.MagicMock(spec=Controller) - cls.mock_controller.data_dir = "pretend-data-dir" - cls.mock_controller.get_file = mock_get_file - cls.device = Device(cls.mock_controller, mock_export_service) - - # Reset any manually-changed mock controller values before next test + cls.device = None + + # Reset any manually-changed mock values before next test @classmethod def setup_method(cls): cls.mock_file = factory.File(source=factory.Source()) - cls.mock_controller.get_file.return_value = cls.mock_file - cls.mock_controller.downloaded_file_exists.return_value = True + cls.mock_file_location = f"{_MOCK_FILEDIR}{cls.mock_file.filename}" + cls.device = Export() + cls.device._create_archive = mock.MagicMock() + cls.device._create_archive.return_value = _PATH_TO_PRETEND_ARCHIVE + cls.mock_tmpdir = mock.MagicMock() + cls.mock_tmpdir.__enter__ = mock.MagicMock(return_value=_MOCK_FILEDIR) @classmethod def teardown_method(cls): cls.mock_file = None - cls.mock_controller.get_file.return_value = None - - def test_Device_run_printer_preflight_checks(self): - print_preflight_check_requested_emissions = QSignalSpy( - self.device.print_preflight_check_requested + cls.device._create_archive = None + + def test_Device_run_printer_preflight_checks(self, mock_subprocess): + device = Export() + device._create_archive = mock.MagicMock() + device._create_archive.return_value = _PATH_TO_PRETEND_ARCHIVE + + with mock.patch( + "securedrop_client.export.TemporaryDirectory", + return_value=self.mock_tmpdir, + ): + device.run_printer_preflight_checks() + + mock_subprocess.assert_called_once() + assert ( + _QREXEC_EXPORT_COMMAND in mock_subprocess.call_args[0] + ), f"Actual: {mock_subprocess.call_args[0]}" + + def test_Device_run_print_preflight_checks_with_error(self, mock_sp): + mock_sp.side_effect = subprocess.CalledProcessError(1, "check_output") + + with mock.patch("securedrop_client.export.logger.error") as err: + self.device.run_printer_preflight_checks() + + assert "Print preflight failed" in err.call_args[0] + + def test_Device_print(self, mock_subprocess): + with mock.patch( + "securedrop_client.export.TemporaryDirectory", + return_value=self.mock_tmpdir, + ): + self.device.print([self.mock_file_location]) + + self.device._create_archive.assert_called_once_with( + archive_dir=_MOCK_FILEDIR, + archive_fn=self.device._PRINT_FN, + metadata=self.device._PRINT_METADATA, + filepaths=[self.mock_file_location], ) + mock_subprocess.assert_called_once() + assert _QREXEC_EXPORT_COMMAND in mock_subprocess.call_args[0] - self.device.run_printer_preflight_checks() + def test_Device_print_file_file_missing(self, mock_subprocess, mocker): + device = Export() + warning_logger = mocker.patch("securedrop_client.export.logger.warning") - assert len(print_preflight_check_requested_emissions) == 1 + log_msg = "File not found at specified filepath, skipping" - def test_Device_run_print_file(self): - # file = factory.File(source=factory.Source()) - file = self.mock_file - print_requested_emissions = QSignalSpy(self.device.print_requested) + device.print("some-missing-file-uuid") - self.device.print_file(file.uuid) + assert log_msg in warning_logger.call_args[0] + mock_subprocess.assert_not_called() - assert len(print_requested_emissions) == 1 - - def test_Device_print_transcript(self): - print_requested_emissions = QSignalSpy(self.device.print_requested) - - filepath = "some/file/path" + def test_Device_run_export_preflight_checks(self, mock_subprocess): + with mock.patch( + "securedrop_client.export.TemporaryDirectory", + return_value=self.mock_tmpdir, + ): + self.device.run_export_preflight_checks() + mock_subprocess.assert_called_once() - self.device.print_transcript(filepath) - - assert len(print_requested_emissions) == 1 - assert print_requested_emissions[0] == [["some/file/path"]] - - def test_Device_print_file_file_missing(self, mocker): - file = self.mock_file - self.mock_controller.downloaded_file_exists.return_value = False - - warning_logger = mocker.patch( - "securedrop_client.gui.conversation.export.device.logger.warning" + self.device._create_archive.assert_called_once_with( + archive_dir=_MOCK_FILEDIR, + archive_fn=self.device._USB_TEST_FN, + metadata=self.device._USB_TEST_METADATA, ) + mock_subprocess.assert_called_once() + assert _QREXEC_EXPORT_COMMAND in mock_subprocess.call_args[0] - self.device.print_file(file.uuid) + def test_Device_run_export_preflight_checks_with_error(self, mock_sp): + mock_sp.side_effect = subprocess.CalledProcessError(1, "check_output") - path = str(file.location(self.mock_controller.data_dir)) - log_msg = f"Cannot find file in {path}" + with mock.patch("securedrop_client.export.logger.error") as err: + self.device.run_export_preflight_checks() - warning_logger.assert_called_once_with(log_msg) + assert "Export preflight failed" in err.call_args[0] - def test_Device_print_file_when_orig_file_already_exists(self): - file = self.mock_file - print_requested_emissions = QSignalSpy(self.device.print_requested) + def test_Device_export_file_missing(self, mock_subprocess, mocker): + device = Export() - self.device.print_file(file.uuid) + warning_logger = mocker.patch("securedrop_client.export.logger.warning") + with mock.patch( + "securedrop_client.export.tarfile.open", + return_value=mock.MagicMock(), + ), mock.patch( + "securedrop_client.export.TemporaryDirectory", + return_value=self.mock_tmpdir, + ): + device.export(["/not/a/real/location"], "mock passphrase") - assert len(print_requested_emissions) == 1 - self.mock_controller.get_file.assert_called_with(file.uuid) + warning_logger.assert_called_once() + mock_subprocess.assert_not_called() + # Todo: could get more specific about looking for the emitted failure signal - def test_Device_run_export_preflight_checks(self): - export_preflight_check_requested_emissions = QSignalSpy( - self.device.export_preflight_check_requested + def test_Device_export(self, mock_subprocess): + filepath = "some/file/path" + passphrase = "passphrase" + + with mock.patch( + "securedrop_client.export.TemporaryDirectory", + return_value=self.mock_tmpdir, + ): + self.device.export([filepath], passphrase) + + expected_metadata = self.device._DISK_METADATA.copy() + expected_metadata[self.device._DISK_ENCRYPTION_KEY_NAME] = passphrase + + self.device._create_archive.assert_called_once_with( + archive_dir=_MOCK_FILEDIR, + archive_fn=self.device._DISK_FN, + metadata=expected_metadata, + filepaths=[filepath], ) + mock_subprocess.assert_called_once() + assert _QREXEC_EXPORT_COMMAND in mock_subprocess.call_args[0] - self.device.run_export_preflight_checks() - - assert len(export_preflight_check_requested_emissions) == 1 + @pytest.mark.parametrize("status", [i.value for i in ExportStatus]) + def test__run_qrexec_success(self, mocked_subprocess, status): + mocked_subprocess.return_value = f"{status}\n".encode("utf-8") + enum = ExportStatus(status) - def test_Device_export_file_to_usb_drive(self): - file = self.mock_file - export_requested_emissions = QSignalSpy(self.device.export_requested) - self.device.export_file_to_usb_drive(file.uuid, "mock passphrase") + assert self.device._run_qrexec_export(_PATH_TO_PRETEND_ARCHIVE) == enum - assert len(export_requested_emissions) == 1 - - def test_Device_export_file_to_usb_drive_file_missing(self, mocker): - file = self.mock_file - self.mock_controller.downloaded_file_exists.return_value = False - - warning_logger = mocker.patch( - "securedrop_client.gui.conversation.export.device.logger.warning" + def test__run_qrexec_calledprocess_raises_exportstatus(self, mocked_subprocess): + mocked_subprocess.side_effect = ValueError( + "These are not the ExportStatuses you're looking for..." ) + with pytest.raises(ExportError) as e: + self.device._run_qrexec_export(_PATH_TO_PRETEND_ARCHIVE) - self.device.export_file_to_usb_drive(file.uuid, "mock passphrase") - - path = str(file.location(self.mock_controller.data_dir)) - log_msg = f"Cannot find file in {path}" - warning_logger.assert_called_once_with(log_msg) - - def test_Device_export_file_to_usb_drive_when_orig_file_already_exists(self): - export_requested_emissions = QSignalSpy(self.device.export_requested) - file = self.mock_file - - self.device.export_file_to_usb_drive(file.uuid, "mock passphrase") + assert e.value.status == ExportStatus.UNEXPECTED_RETURN_STATUS - assert len(export_requested_emissions) == 1 - self.mock_controller.get_file.assert_called_with(file.uuid) + def test__run_qrexec_valuerror_raises_exportstatus(self, mocked_subprocess): + mocked_subprocess.side_effect = subprocess.CalledProcessError(1, "check_output") + with pytest.raises(ExportError) as e: + self.device._run_qrexec_export(_PATH_TO_PRETEND_ARCHIVE) - def test_Device_export_transcript(self): - export_requested_emissions = QSignalSpy(self.device.export_requested) - filepath = "some/file/path" - - self.device.export_transcript(filepath, "passphrase") - - assert len(export_requested_emissions) == 1 - assert export_requested_emissions[0] == [["some/file/path"], "passphrase"] + assert e.value.status == ExportStatus.CALLED_PROCESS_ERROR - def test_Device_export_files(self): - export_requested_emissions = QSignalSpy(self.device.export_requested) + @mock.patch("securedrop_client.export.tarfile") + def test__add_virtual_file_to_archive(self, mock_tarfile, mock_sp): + mock_tarinfo = mock.MagicMock(spec=tarfile.TarInfo) + mock_tarfile.TarInfo.return_value = mock_tarinfo - filepaths = ["some/file/path", "some/other/file/path"] - - self.device.export_files(filepaths, "passphrase") + self.device._add_virtual_file_to_archive( + mock_tarfile, "mock_file", {"test_filedata": "lgtm"} + ) - assert len(export_requested_emissions) == 1 - assert export_requested_emissions[0] == [ - ["some/file/path", "some/other/file/path"], - "passphrase", - ] + mock_tarfile.TarInfo.assert_called_once() + + def test__create_archive(self, mocker): + """ + Ensure _create_archive creates an archive in the supplied directory. + """ + archive_path = None + with TemporaryDirectory() as temp_dir: + # We'll do this in the tmpdir for ease of cleanup + open(os.path.join(temp_dir, "temp_1"), "w+").close() + open(os.path.join(temp_dir, "temp_2"), "w+").close() + filepaths = [os.path.join(temp_dir, "temp_1"), os.path.join(temp_dir, "temp_2")] + device = Export() + + archive_path = device._create_archive(temp_dir, "mock.sd-export", {}, filepaths) + + assert archive_path == os.path.join(temp_dir, "mock.sd-export") + assert os.path.exists(archive_path) # sanity check + + assert not os.path.exists(archive_path) + + def test__create_archive_with_an_export_file(self, mocker): + device = Export() + archive_path = None + with TemporaryDirectory() as temp_dir, NamedTemporaryFile() as export_file: + archive_path = device._create_archive( + temp_dir, "mock.sd-export", {}, [export_file.name] + ) + assert archive_path == os.path.join(temp_dir, "mock.sd-export") + assert os.path.exists(archive_path) # sanity check + + assert not os.path.exists(archive_path) + + def test__create_archive_with_multiple_export_files(self, mocker): + device = Export() + archive_path = None + with TemporaryDirectory() as tmpdir, NamedTemporaryFile() as f1, NamedTemporaryFile() as f2: + transcript_path = os.path.join(tmpdir, "transcript.txt") + with open(transcript_path, "a+") as transcript: + archive_path = device._create_archive( + tmpdir, + "mock.sd-export", + {}, + [f1.name, f2.name, transcript.name], + ) + assert archive_path == os.path.join(tmpdir, "mock.sd-export") + assert os.path.exists(archive_path) # sanity check + + assert not os.path.exists(archive_path) + + def test__tmpdir_cleaned_up_on_exception(self, mock_sp): + """ + Sanity check. If we encounter an error after archive has been built, + ensure the tmpdir directory cleanup happens. + """ + with TemporaryDirectory() as tmpdir, pytest.raises(ExportError): + print(f"{tmpdir} created") + + raise ExportError("Something bad happened!") + + assert not os.path.exists(tmpdir) diff --git a/client/tests/gui/conversation/export/test_dialog.py b/client/tests/gui/conversation/export/test_dialog.py index 335176ed3..0d6903441 100644 --- a/client/tests/gui/conversation/export/test_dialog.py +++ b/client/tests/gui/conversation/export/test_dialog.py @@ -1,4 +1,4 @@ -from securedrop_client.export import ExportError, ExportStatus +from securedrop_client.export_status import ExportError, ExportStatus from securedrop_client.gui.conversation import ExportDialog from tests.helper import app # noqa: F401 @@ -16,17 +16,18 @@ def test_ExportDialog_init(mocker): assert export_dialog.passphrase_form.isHidden() -def test_ExportDialog__show_starting_instructions(mocker, export_dialog): - export_dialog._show_starting_instructions() +def test_ExportDialog__show_starting_instructions(mocker, export_dialog_multifile): + export_dialog_multifile._show_starting_instructions() # "3 files" comes from the export_dialog fixture assert ( - export_dialog.header.text() == "Preparing to export:" + export_dialog_multifile.header.text() == "Preparing to export:" "
" '3 files' ) assert ( - export_dialog.body.text() == "

Understand the risks before exporting files

" + export_dialog_multifile.body.text() + == "

Understand the risks before exporting files

" "Malware" "
" "This workstation lets you open files securely. If you open files on another " @@ -40,304 +41,312 @@ def test_ExportDialog__show_starting_instructions(mocker, export_dialog): "identifies who they are. To protect your sources, please consider redacting files " "before working with them on network-connected computers." ) - assert not export_dialog.header.isHidden() - assert not export_dialog.header_line.isHidden() - assert export_dialog.error_details.isHidden() - assert not export_dialog.body.isHidden() - assert export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog___show_passphrase_request_message(mocker, export_dialog): - export_dialog._show_passphrase_request_message() +def test_ExportDialog___show_passphrase_request_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message() - assert export_dialog.header.text() == "Enter passphrase for USB drive" - assert not export_dialog.header.isHidden() - assert export_dialog.header_line.isHidden() - assert export_dialog.error_details.isHidden() - assert export_dialog.body.isHidden() - assert not export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() + assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" + assert not export_dialog_multifile.header.isHidden() + assert export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert export_dialog_multifile.body.isHidden() + assert not export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_passphrase_request_message_again(mocker, export_dialog): - export_dialog._show_passphrase_request_message_again() +def test_ExportDialog__show_passphrase_request_message_again(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message_again() - assert export_dialog.header.text() == "Enter passphrase for USB drive" + assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" assert ( - export_dialog.error_details.text() + export_dialog_multifile.error_details.text() == "The passphrase provided did not work. Please try again." ) - assert export_dialog.body.isHidden() - assert not export_dialog.header.isHidden() - assert export_dialog.header_line.isHidden() - assert not export_dialog.error_details.isHidden() - assert export_dialog.body.isHidden() - assert not export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() + assert export_dialog_multifile.body.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert export_dialog_multifile.header_line.isHidden() + assert not export_dialog_multifile.error_details.isHidden() + assert export_dialog_multifile.body.isHidden() + assert not export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_success_message(mocker, export_dialog): - export_dialog._show_success_message() +def test_ExportDialog__show_success_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_success_message() - assert export_dialog.header.text() == "Export successful" + assert export_dialog_multifile.header.text() == "Export successful" assert ( - export_dialog.body.text() + export_dialog_multifile.body.text() == "Remember to be careful when working with files outside of your Workstation machine." ) - assert not export_dialog.header.isHidden() - assert not export_dialog.header_line.isHidden() - assert export_dialog.error_details.isHidden() - assert not export_dialog.body.isHidden() - assert export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert export_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_insert_usb_message(mocker, export_dialog): - export_dialog._show_insert_usb_message() +def test_ExportDialog__show_insert_usb_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_insert_usb_message() - assert export_dialog.header.text() == "Insert encrypted USB drive" + assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" assert ( - export_dialog.body.text() + export_dialog_multifile.body.text() == "Please insert one of the export drives provisioned specifically " "for the SecureDrop Workstation." ) - assert not export_dialog.header.isHidden() - assert not export_dialog.header_line.isHidden() - assert export_dialog.error_details.isHidden() - assert not export_dialog.body.isHidden() - assert export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_insert_encrypted_usb_message(mocker, export_dialog): - export_dialog._show_insert_encrypted_usb_message() +def test_ExportDialog__show_insert_encrypted_usb_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_insert_encrypted_usb_message() - assert export_dialog.header.text() == "Insert encrypted USB drive" + assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" assert ( - export_dialog.error_details.text() + export_dialog_multifile.error_details.text() == "Either the drive is not encrypted or there is something else wrong with it." ) assert ( - export_dialog.body.text() + export_dialog_multifile.body.text() == "Please insert one of the export drives provisioned specifically for the SecureDrop " "Workstation." ) - assert not export_dialog.header.isHidden() - assert not export_dialog.header_line.isHidden() - assert not export_dialog.error_details.isHidden() - assert not export_dialog.body.isHidden() - assert export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert not export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_generic_error_message(mocker, export_dialog): - export_dialog.error_status = "mock_error_status" +def test_ExportDialog__show_generic_error_message(mocker, export_dialog_multifile): + export_dialog_multifile.error_status = "mock_error_status" - export_dialog._show_generic_error_message() + export_dialog_multifile._show_generic_error_message() - assert export_dialog.header.text() == "Export failed" - assert export_dialog.body.text() == "mock_error_status: See your administrator for help." - assert not export_dialog.header.isHidden() - assert not export_dialog.header_line.isHidden() - assert export_dialog.error_details.isHidden() - assert not export_dialog.body.isHidden() - assert export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() + assert export_dialog_multifile.header.text() == "Export failed" + assert ( + export_dialog_multifile.body.text() == "mock_error_status: See your administrator for help." + ) + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__export_files(mocker, export_dialog): +def test_ExportDialog__export(mocker, export_dialog_multifile): device = mocker.MagicMock() - device.export_file_to_usb_drive = mocker.MagicMock() - export_dialog._device = device - export_dialog.passphrase_field.text = mocker.MagicMock(return_value="mock_passphrase") + device.export = mocker.MagicMock() + export_dialog_multifile._device = device + export_dialog_multifile.passphrase_field.text = mocker.MagicMock(return_value="mock_passphrase") - export_dialog._export_files() + export_dialog_multifile._export() - device.export_files.assert_called_once_with( - ["/some/path/file123.jpg", "/some/path/memo.txt", "/some/path/transcript.txt"], + device.export.assert_called_once_with( + export_dialog_multifile.filepaths, "mock_passphrase", ) -def test_ExportDialog__on_export_preflight_check_succeeded(mocker, export_dialog): - export_dialog._show_passphrase_request_message = mocker.MagicMock() - export_dialog.continue_button = mocker.MagicMock() - export_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__on_export_preflight_check_succeeded(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - export_dialog._on_export_preflight_check_succeeded(ExportStatus.PRINT_PREFLIGHT_SUCCESS) + export_dialog_multifile._on_export_preflight_check_succeeded( + ExportStatus.PRINT_PREFLIGHT_SUCCESS + ) - export_dialog._show_passphrase_request_message.assert_not_called() - export_dialog.continue_button.clicked.connect.assert_called_once_with( - export_dialog._show_passphrase_request_message + export_dialog_multifile._show_passphrase_request_message.assert_not_called() + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_passphrase_request_message ) def test_ExportDialog__on_export_preflight_check_succeeded_when_continue_enabled( - mocker, export_dialog + mocker, export_dialog_multifile ): - export_dialog._show_passphrase_request_message = mocker.MagicMock() - export_dialog.continue_button.setEnabled(True) + export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() + export_dialog_multifile.continue_button.setEnabled(True) - export_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - export_dialog._show_passphrase_request_message.assert_called_once_with() + export_dialog_multifile._show_passphrase_request_message.assert_called_once_with() def test_ExportDialog__on_export_preflight_check_succeeded_continue_enabled_and_device_unlocked( - mocker, export_dialog + mocker, export_dialog_multifile ): - export_dialog._export_file = mocker.MagicMock() - export_dialog.continue_button.setEnabled(True) + export_dialog_multifile._export = mocker.MagicMock() + export_dialog_multifile.continue_button.setEnabled(True) - export_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) - export_dialog._export_file.assert_called_once_with() + export_dialog_multifile._export.assert_called_once_with() def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_success( - mocker, export_dialog + mocker, export_dialog_multifile ): - assert not export_dialog.continue_button.isEnabled() - export_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - assert export_dialog.continue_button.isEnabled() + assert not export_dialog_multifile.continue_button.isEnabled() + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) + assert export_dialog_multifile.continue_button.isEnabled() def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_failure( - mocker, export_dialog + mocker, export_dialog_multifile ): - assert not export_dialog.continue_button.isEnabled() - export_dialog._on_export_preflight_check_failed(mocker.MagicMock()) - assert export_dialog.continue_button.isEnabled() + assert not export_dialog_multifile.continue_button.isEnabled() + export_dialog_multifile._on_export_preflight_check_failed(mocker.MagicMock()) + assert export_dialog_multifile.continue_button.isEnabled() -def test_ExportDialog__on_export_preflight_check_failed(mocker, export_dialog): - export_dialog._update_dialog = mocker.MagicMock() +def test_ExportDialog__on_export_preflight_check_failed(mocker, export_dialog_multifile): + export_dialog_multifile._update_dialog = mocker.MagicMock() error = ExportError("mock_error_status") - export_dialog._on_export_preflight_check_failed(error) + export_dialog_multifile._on_export_preflight_check_failed(error) - export_dialog._update_dialog.assert_called_with("mock_error_status") + export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") -def test_ExportDialog__on_export_succeeded(mocker, export_dialog): - export_dialog._show_success_message = mocker.MagicMock() +def test_ExportDialog__on_export_succeeded(mocker, export_dialog_multifile): + export_dialog_multifile._show_success_message = mocker.MagicMock() - export_dialog._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) + export_dialog_multifile._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) - export_dialog._show_success_message.assert_called_once_with() + export_dialog_multifile._show_success_message.assert_called_once_with() -def test_ExportDialog__on_export_failed(mocker, export_dialog): - export_dialog._update_dialog = mocker.MagicMock() +def test_ExportDialog__on_export_failed(mocker, export_dialog_multifile): + export_dialog_multifile._update_dialog = mocker.MagicMock() error = ExportError("mock_error_status") - export_dialog._on_export_failed(error) + export_dialog_multifile._on_export_failed(error) - export_dialog._update_dialog.assert_called_with("mock_error_status") + export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") -def test_ExportDialog__update_dialog_when_status_is_USB_NOT_CONNECTED(mocker, export_dialog): - export_dialog._show_insert_usb_message = mocker.MagicMock() - export_dialog.continue_button = mocker.MagicMock() - export_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_USB_NOT_CONNECTED( + mocker, export_dialog_multifile +): + export_dialog_multifile._show_insert_usb_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_dialog.continue_button.clicked.connect.assert_called_once_with( - export_dialog._show_insert_usb_message + export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_insert_usb_message ) # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=True) - export_dialog._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_dialog._show_insert_usb_message.assert_called_once_with() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) + export_dialog_multifile._show_insert_usb_message.assert_called_once_with() -def test_ExportDialog__update_dialog_when_status_is_BAD_PASSPHRASE(mocker, export_dialog): - export_dialog._show_passphrase_request_message_again = mocker.MagicMock() - export_dialog.continue_button = mocker.MagicMock() - export_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_BAD_PASSPHRASE(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message_again = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_dialog.continue_button.clicked.connect.assert_called_once_with( - export_dialog._show_passphrase_request_message_again + export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_passphrase_request_message_again ) # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=True) - export_dialog._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) # fka BAD_PASSPHRASE - export_dialog._show_passphrase_request_message_again.assert_called_once_with() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) # fka BAD_PASSPHRASE + export_dialog_multifile._show_passphrase_request_message_again.assert_called_once_with() def test_ExportDialog__update_dialog_when_status_DISK_ENCRYPTION_NOT_SUPPORTED_ERROR( - mocker, export_dialog + mocker, export_dialog_multifile ): - export_dialog._show_insert_encrypted_usb_message = mocker.MagicMock() - export_dialog.continue_button = mocker.MagicMock() - export_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=False) + export_dialog_multifile._show_insert_encrypted_usb_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog._update_dialog( + export_dialog_multifile._update_dialog( ExportStatus.INVALID_DEVICE_DETECTED ) # DISK_ENCRYPTION_NOT_SUPPORTED_ERROR - export_dialog.continue_button.clicked.connect.assert_called_once_with( - export_dialog._show_insert_encrypted_usb_message + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_insert_encrypted_usb_message ) # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=True) - export_dialog._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_dialog._show_insert_encrypted_usb_message.assert_called_once_with() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) + export_dialog_multifile._show_insert_encrypted_usb_message.assert_called_once_with() -def test_ExportDialog__update_dialog_when_status_is_CALLED_PROCESS_ERROR(mocker, export_dialog): - export_dialog._show_generic_error_message = mocker.MagicMock() - export_dialog.continue_button = mocker.MagicMock() - export_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_CALLED_PROCESS_ERROR( + mocker, export_dialog_multifile +): + export_dialog_multifile._show_generic_error_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_dialog.continue_button.clicked.connect.assert_called_once_with( - export_dialog._show_generic_error_message + export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_generic_error_message ) - assert export_dialog.error_status == ExportStatus.CALLED_PROCESS_ERROR + assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=True) - export_dialog._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_dialog._show_generic_error_message.assert_called_once_with() - assert export_dialog.error_status == ExportStatus.CALLED_PROCESS_ERROR + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) + export_dialog_multifile._show_generic_error_message.assert_called_once_with() + assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR -def test_ExportDialog__update_dialog_when_status_is_unknown(mocker, export_dialog): - export_dialog._show_generic_error_message = mocker.MagicMock() - export_dialog.continue_button = mocker.MagicMock() - export_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_unknown(mocker, export_dialog_multifile): + export_dialog_multifile._show_generic_error_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog._update_dialog("Some Unknown Error Status") - export_dialog.continue_button.clicked.connect.assert_called_once_with( - export_dialog._show_generic_error_message + export_dialog_multifile._update_dialog("Some Unknown Error Status") + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_generic_error_message ) - assert export_dialog.error_status == "Some Unknown Error Status" + assert export_dialog_multifile.error_status == "Some Unknown Error Status" # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog.continue_button, "isEnabled", return_value=True) - export_dialog._update_dialog("Some Unknown Error Status") - export_dialog._show_generic_error_message.assert_called_once_with() - assert export_dialog.error_status == "Some Unknown Error Status" + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog("Some Unknown Error Status") + export_dialog_multifile._show_generic_error_message.assert_called_once_with() + assert export_dialog_multifile.error_status == "Some Unknown Error Status" diff --git a/client/tests/gui/conversation/export/test_file_dialog.py b/client/tests/gui/conversation/export/test_file_dialog.py index e0b610155..a9ee020be 100644 --- a/client/tests/gui/conversation/export/test_file_dialog.py +++ b/client/tests/gui/conversation/export/test_file_dialog.py @@ -1,14 +1,14 @@ -from securedrop_client.export import ExportError, ExportStatus -from securedrop_client.gui.conversation import ExportFileDialog +from securedrop_client.export_status import ExportError, ExportStatus +from securedrop_client.gui.conversation import ExportDialog from tests.helper import app # noqa: F401 def test_ExportDialog_init(mocker): _show_starting_instructions_fn = mocker.patch( - "securedrop_client.gui.conversation.ExportFileDialog._show_starting_instructions" + "securedrop_client.gui.conversation.ExportDialog._show_starting_instructions" ) - export_file_dialog = ExportFileDialog(mocker.MagicMock(), "mock_uuid", "mock.jpg") + export_file_dialog = ExportDialog(mocker.MagicMock(), "mock.jpg", ["/mock/path/to/file"]) _show_starting_instructions_fn.assert_called_once_with() assert export_file_dialog.passphrase_form.isHidden() @@ -16,27 +16,62 @@ def test_ExportDialog_init(mocker): def test_ExportDialog_init_sanitizes_filename(mocker): secure_qlabel = mocker.patch( - "securedrop_client.gui.conversation.export.file_dialog.SecureQLabel" + "securedrop_client.gui.conversation.export.export_dialog.SecureQLabel" ) mocker.patch("securedrop_client.gui.widgets.QVBoxLayout.addWidget") filename = '' - ExportFileDialog(mocker.MagicMock(), "mock_uuid", filename) + ExportDialog(mocker.MagicMock(), filename, ["/mock/path/to/file"]) secure_qlabel.assert_any_call(filename, wordwrap=False, max_length=260) -def test_ExportDialog__show_starting_instructions(mocker, export_file_dialog): - export_file_dialog._show_starting_instructions() +def test_ExportDialog__show_starting_instructions(mocker, export_dialog_multifile): + export_dialog_multifile._show_starting_instructions() # file123.jpg comes from the export_file_dialog fixture assert ( - export_file_dialog.header.text() == "Preparing to export:" + export_dialog_multifile.header.text() == "Preparing to export:" + "
" + '3 files' + ) + assert ( + export_dialog_multifile.body.text() + == "

Understand the risks before exporting files

" + "Malware" + "
" + "This workstation lets you open files securely. If you open files on another " + "computer, any embedded malware may spread to your computer or network. If you are " + "unsure how to manage this risk, please print the file, or contact your " + "administrator." + "

" + "Anonymity" + "
" + "Files submitted by sources may contain information or hidden metadata that " + "identifies who they are. To protect your sources, please consider redacting files " + "before working with them on network-connected computers." + ) + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() + + +# The summary text is different for a dialog with one file vs 3 files +def test_ExportDialog__show_starting_instructions_single_file(mocker, export_dialog): + export_dialog._show_starting_instructions() + + # file123.jpg comes from the export_file_dialog fixture + assert ( + export_dialog.header.text() == "Preparing to export:" "
" 'file123.jpg' ) assert ( - export_file_dialog.body.text() == "

Understand the risks before exporting files

" + export_dialog.body.text() == "

Understand the risks before exporting files

" "Malware" "
" "This workstation lets you open files securely. If you open files on another " @@ -50,319 +85,321 @@ def test_ExportDialog__show_starting_instructions(mocker, export_file_dialog): "identifies who they are. To protect your sources, please consider redacting files " "before working with them on network-connected computers." ) - assert not export_file_dialog.header.isHidden() - assert not export_file_dialog.header_line.isHidden() - assert export_file_dialog.error_details.isHidden() - assert not export_file_dialog.body.isHidden() - assert export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert not export_file_dialog.cancel_button.isHidden() + assert not export_dialog.header.isHidden() + assert not export_dialog.header_line.isHidden() + assert export_dialog.error_details.isHidden() + assert not export_dialog.body.isHidden() + assert export_dialog.passphrase_form.isHidden() + assert not export_dialog.continue_button.isHidden() + assert not export_dialog.cancel_button.isHidden() -def test_ExportDialog___show_passphrase_request_message(mocker, export_file_dialog): - export_file_dialog._show_passphrase_request_message() +def test_ExportDialog___show_passphrase_request_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message() - assert export_file_dialog.header.text() == "Enter passphrase for USB drive" - assert not export_file_dialog.header.isHidden() - assert export_file_dialog.header_line.isHidden() - assert export_file_dialog.error_details.isHidden() - assert export_file_dialog.body.isHidden() - assert not export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert not export_file_dialog.cancel_button.isHidden() + assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" + assert not export_dialog_multifile.header.isHidden() + assert export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert export_dialog_multifile.body.isHidden() + assert not export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_passphrase_request_message_again(mocker, export_file_dialog): - export_file_dialog._show_passphrase_request_message_again() +def test_ExportDialog__show_passphrase_request_message_again(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message_again() - assert export_file_dialog.header.text() == "Enter passphrase for USB drive" + assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" assert ( - export_file_dialog.error_details.text() + export_dialog_multifile.error_details.text() == "The passphrase provided did not work. Please try again." ) - assert export_file_dialog.body.isHidden() - assert not export_file_dialog.header.isHidden() - assert export_file_dialog.header_line.isHidden() - assert not export_file_dialog.error_details.isHidden() - assert export_file_dialog.body.isHidden() - assert not export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert not export_file_dialog.cancel_button.isHidden() + assert export_dialog_multifile.body.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert export_dialog_multifile.header_line.isHidden() + assert not export_dialog_multifile.error_details.isHidden() + assert export_dialog_multifile.body.isHidden() + assert not export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_success_message(mocker, export_file_dialog): - export_file_dialog._show_success_message() +def test_ExportDialog__show_success_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_success_message() - assert export_file_dialog.header.text() == "Export successful" + assert export_dialog_multifile.header.text() == "Export successful" assert ( - export_file_dialog.body.text() + export_dialog_multifile.body.text() == "Remember to be careful when working with files outside of your Workstation machine." ) - assert not export_file_dialog.header.isHidden() - assert not export_file_dialog.header_line.isHidden() - assert export_file_dialog.error_details.isHidden() - assert not export_file_dialog.body.isHidden() - assert export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert export_file_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_insert_usb_message(mocker, export_file_dialog): - export_file_dialog._show_insert_usb_message() +def test_ExportDialog__show_insert_usb_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_insert_usb_message() - assert export_file_dialog.header.text() == "Insert encrypted USB drive" + assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" assert ( - export_file_dialog.body.text() + export_dialog_multifile.body.text() == "Please insert one of the export drives provisioned specifically " "for the SecureDrop Workstation." ) - assert not export_file_dialog.header.isHidden() - assert not export_file_dialog.header_line.isHidden() - assert export_file_dialog.error_details.isHidden() - assert not export_file_dialog.body.isHidden() - assert export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert not export_file_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_insert_encrypted_usb_message(mocker, export_file_dialog): - export_file_dialog._show_insert_encrypted_usb_message() +def test_ExportDialog__show_insert_encrypted_usb_message(mocker, export_dialog_multifile): + export_dialog_multifile._show_insert_encrypted_usb_message() - assert export_file_dialog.header.text() == "Insert encrypted USB drive" + assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" assert ( - export_file_dialog.error_details.text() + export_dialog_multifile.error_details.text() == "Either the drive is not encrypted or there is something else wrong with it." ) assert ( - export_file_dialog.body.text() + export_dialog_multifile.body.text() == "Please insert one of the export drives provisioned specifically for the SecureDrop " "Workstation." ) - assert not export_file_dialog.header.isHidden() - assert not export_file_dialog.header_line.isHidden() - assert not export_file_dialog.error_details.isHidden() - assert not export_file_dialog.body.isHidden() - assert export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert not export_file_dialog.cancel_button.isHidden() + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert not export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__show_generic_error_message(mocker, export_file_dialog): - export_file_dialog.error_status = "mock_error_status" +def test_ExportDialog__show_generic_error_message(mocker, export_dialog_multifile): + export_dialog_multifile.error_status = "mock_error_status" - export_file_dialog._show_generic_error_message() + export_dialog_multifile._show_generic_error_message() - assert export_file_dialog.header.text() == "Export failed" - assert export_file_dialog.body.text() == "mock_error_status: See your administrator for help." - assert not export_file_dialog.header.isHidden() - assert not export_file_dialog.header_line.isHidden() - assert export_file_dialog.error_details.isHidden() - assert not export_file_dialog.body.isHidden() - assert export_file_dialog.passphrase_form.isHidden() - assert not export_file_dialog.continue_button.isHidden() - assert not export_file_dialog.cancel_button.isHidden() + assert export_dialog_multifile.header.text() == "Export failed" + assert ( + export_dialog_multifile.body.text() == "mock_error_status: See your administrator for help." + ) + assert not export_dialog_multifile.header.isHidden() + assert not export_dialog_multifile.header_line.isHidden() + assert export_dialog_multifile.error_details.isHidden() + assert not export_dialog_multifile.body.isHidden() + assert export_dialog_multifile.passphrase_form.isHidden() + assert not export_dialog_multifile.continue_button.isHidden() + assert not export_dialog_multifile.cancel_button.isHidden() -def test_ExportDialog__export_file(mocker, export_file_dialog): +def test_ExportDialog__export_file(mocker, export_dialog_multifile): device = mocker.MagicMock() - device.export_file_to_usb_drive = mocker.MagicMock() - export_file_dialog._device = device - export_file_dialog.passphrase_field.text = mocker.MagicMock(return_value="mock_passphrase") + device.export = mocker.MagicMock() + export_dialog_multifile._device = device + export_dialog_multifile.passphrase_field.text = mocker.MagicMock(return_value="mock_passphrase") - export_file_dialog._export_file() + export_dialog_multifile._export() - device.export_file_to_usb_drive.assert_called_once_with( - export_file_dialog.file_uuid, "mock_passphrase" - ) + device.export.assert_called_once_with(export_dialog_multifile.filepaths, "mock_passphrase") -def test_ExportDialog__on_export_preflight_check_succeeded(mocker, export_file_dialog): - export_file_dialog._show_passphrase_request_message = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__on_export_preflight_check_succeeded(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - export_file_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - export_file_dialog._show_passphrase_request_message.assert_not_called() - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._show_passphrase_request_message + export_dialog_multifile._show_passphrase_request_message.assert_not_called() + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_passphrase_request_message ) def test_ExportDialog__on_export_preflight_check_succeeded_device_unlocked( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - export_file_dialog._export_file = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) + export_dialog_multifile._export = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - export_file_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) - export_file_dialog._export_file.assert_not_called() - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._export_file + export_dialog_multifile._export.assert_not_called() + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._export ) def test_ExportDialog__on_export_preflight_check_succeeded_when_continue_enabled( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - export_file_dialog._show_passphrase_request_message = mocker.MagicMock() - export_file_dialog.continue_button.setEnabled(True) + export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() + export_dialog_multifile.continue_button.setEnabled(True) - export_file_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - export_file_dialog._show_passphrase_request_message.assert_called_once_with() + export_dialog_multifile._show_passphrase_request_message.assert_called_once_with() def test_ExportDialog__on_export_preflight_check_succeeded_unlocked_device_when_continue_enabled( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - export_file_dialog._export_file = mocker.MagicMock() - export_file_dialog.continue_button.setEnabled(True) + export_dialog_multifile._export = mocker.MagicMock() + export_dialog_multifile.continue_button.setEnabled(True) - export_file_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) - export_file_dialog._export_file.assert_called_once_with() + export_dialog_multifile._export.assert_called_once_with() def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_success( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - assert not export_file_dialog.continue_button.isEnabled() - export_file_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - assert export_file_dialog.continue_button.isEnabled() + assert not export_dialog_multifile.continue_button.isEnabled() + export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) + assert export_dialog_multifile.continue_button.isEnabled() def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_failure( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - assert not export_file_dialog.continue_button.isEnabled() - export_file_dialog._on_export_preflight_check_failed(mocker.MagicMock()) - assert export_file_dialog.continue_button.isEnabled() + assert not export_dialog_multifile.continue_button.isEnabled() + export_dialog_multifile._on_export_preflight_check_failed(mocker.MagicMock()) + assert export_dialog_multifile.continue_button.isEnabled() -def test_ExportDialog__on_export_preflight_check_failed(mocker, export_file_dialog): - export_file_dialog._update_dialog = mocker.MagicMock() +def test_ExportDialog__on_export_preflight_check_failed(mocker, export_dialog_multifile): + export_dialog_multifile._update_dialog = mocker.MagicMock() error = ExportError("mock_error_status") - export_file_dialog._on_export_preflight_check_failed(error) + export_dialog_multifile._on_export_preflight_check_failed(error) - export_file_dialog._update_dialog.assert_called_with("mock_error_status") + export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") -def test_ExportDialog__on_export_succeeded(mocker, export_file_dialog): - export_file_dialog._show_success_message = mocker.MagicMock() +def test_ExportDialog__on_export_succeeded(mocker, export_dialog_multifile): + export_dialog_multifile._show_success_message = mocker.MagicMock() - export_file_dialog._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) + export_dialog_multifile._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) - export_file_dialog._show_success_message.assert_called_once_with() + export_dialog_multifile._show_success_message.assert_called_once_with() -def test_ExportDialog__on_export_failed(mocker, export_file_dialog): - export_file_dialog._update_dialog = mocker.MagicMock() +def test_ExportDialog__on_export_failed(mocker, export_dialog_multifile): + export_dialog_multifile._update_dialog = mocker.MagicMock() error = ExportError("mock_error_status") - export_file_dialog._on_export_failed(error) + export_dialog_multifile._on_export_failed(error) - export_file_dialog._update_dialog.assert_called_with("mock_error_status") + export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") -def test_ExportDialog__update_dialog_when_status_is_USB_NOT_CONNECTED(mocker, export_file_dialog): - export_file_dialog._show_insert_usb_message = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_USB_NOT_CONNECTED( + mocker, export_dialog_multifile +): + export_dialog_multifile._show_insert_usb_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_file_dialog._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._show_insert_usb_message + export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_insert_usb_message ) # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=True) - export_file_dialog._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_file_dialog._show_insert_usb_message.assert_called_once_with() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) + export_dialog_multifile._show_insert_usb_message.assert_called_once_with() -def test_ExportDialog__update_dialog_when_status_is_BAD_PASSPHRASE(mocker, export_file_dialog): - export_file_dialog._show_passphrase_request_message_again = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_BAD_PASSPHRASE(mocker, export_dialog_multifile): + export_dialog_multifile._show_passphrase_request_message_again = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_file_dialog._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._show_passphrase_request_message_again + export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_passphrase_request_message_again ) # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=True) - export_file_dialog._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_file_dialog._show_passphrase_request_message_again.assert_called_once_with() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) + export_dialog_multifile._show_passphrase_request_message_again.assert_called_once_with() def test_ExportDialog__update_dialog_when_status_DISK_ENCRYPTION_NOT_SUPPORTED_ERROR( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - export_file_dialog._show_insert_encrypted_usb_message = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) + export_dialog_multifile._show_insert_encrypted_usb_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_file_dialog._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._show_insert_encrypted_usb_message + export_dialog_multifile._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_insert_encrypted_usb_message ) # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=True) - export_file_dialog._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_file_dialog._show_insert_encrypted_usb_message.assert_called_once_with() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) + export_dialog_multifile._show_insert_encrypted_usb_message.assert_called_once_with() def test_ExportDialog__update_dialog_when_status_is_CALLED_PROCESS_ERROR( - mocker, export_file_dialog + mocker, export_dialog_multifile ): - export_file_dialog._show_generic_error_message = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) + export_dialog_multifile._show_generic_error_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_file_dialog._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._show_generic_error_message + export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_generic_error_message ) - assert export_file_dialog.error_status == ExportStatus.CALLED_PROCESS_ERROR + assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=True) - export_file_dialog._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_file_dialog._show_generic_error_message.assert_called_once_with() - assert export_file_dialog.error_status == ExportStatus.CALLED_PROCESS_ERROR + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) + export_dialog_multifile._show_generic_error_message.assert_called_once_with() + assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR -def test_ExportDialog__update_dialog_when_status_is_unknown(mocker, export_file_dialog): - export_file_dialog._show_generic_error_message = mocker.MagicMock() - export_file_dialog.continue_button = mocker.MagicMock() - export_file_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=False) +def test_ExportDialog__update_dialog_when_status_is_unknown(mocker, export_dialog_multifile): + export_dialog_multifile._show_generic_error_message = mocker.MagicMock() + export_dialog_multifile.continue_button = mocker.MagicMock() + export_dialog_multifile.continue_button.clicked = mocker.MagicMock() + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) # When the continue button is enabled, ensure clicking continue will show next instructions - export_file_dialog._update_dialog("Some Unknown Error Status") - export_file_dialog.continue_button.clicked.connect.assert_called_once_with( - export_file_dialog._show_generic_error_message + export_dialog_multifile._update_dialog("Some Unknown Error Status") + export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( + export_dialog_multifile._show_generic_error_message ) - assert export_file_dialog.error_status == "Some Unknown Error Status" + assert export_dialog_multifile.error_status == "Some Unknown Error Status" # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_file_dialog.continue_button, "isEnabled", return_value=True) - export_file_dialog._update_dialog("Some Unknown Error Status") - export_file_dialog._show_generic_error_message.assert_called_once_with() - assert export_file_dialog.error_status == "Some Unknown Error Status" + mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) + export_dialog_multifile._update_dialog("Some Unknown Error Status") + export_dialog_multifile._show_generic_error_message.assert_called_once_with() + assert export_dialog_multifile.error_status == "Some Unknown Error Status" diff --git a/client/tests/gui/conversation/export/test_print_dialog.py b/client/tests/gui/conversation/export/test_print_dialog.py index d21765fdb..0bd4836f8 100644 --- a/client/tests/gui/conversation/export/test_print_dialog.py +++ b/client/tests/gui/conversation/export/test_print_dialog.py @@ -1,4 +1,4 @@ -from securedrop_client.export import ExportError, ExportStatus +from securedrop_client.export_status import ExportError, ExportStatus from securedrop_client.gui.conversation import PrintFileDialog from tests.helper import app # noqa: F401 @@ -8,7 +8,7 @@ def test_PrintFileDialog_init(mocker): "securedrop_client.gui.conversation.PrintFileDialog._show_starting_instructions" ) - PrintFileDialog(mocker.MagicMock(), "mock_uuid", "mock.jpg") + PrintFileDialog(mocker.MagicMock(), "mock.jpg", ["/mock/path/to/file"]) _show_starting_instructions_fn.assert_called_once_with() @@ -19,7 +19,7 @@ def test_PrintFileDialog_init_sanitizes_filename(mocker): ) filename = '' - PrintFileDialog(mocker.MagicMock(), "mock_uuid", filename) + PrintFileDialog(mocker.MagicMock(), filename, ["/mock/path/to/file"]) secure_qlabel.assert_any_call(filename, wordwrap=False, max_length=260) diff --git a/client/tests/gui/conversation/export/test_print_transcript_dialog.py b/client/tests/gui/conversation/export/test_print_transcript_dialog.py index a59a8e441..af8679784 100644 --- a/client/tests/gui/conversation/export/test_print_transcript_dialog.py +++ b/client/tests/gui/conversation/export/test_print_transcript_dialog.py @@ -1,4 +1,4 @@ -from securedrop_client.export import ExportError, ExportStatus +from securedrop_client.export_status import ExportError, ExportStatus from securedrop_client.gui.conversation import PrintTranscriptDialog from tests.helper import app # noqa: F401 diff --git a/client/tests/gui/conversation/export/test_transcript_dialog.py b/client/tests/gui/conversation/export/test_transcript_dialog.py deleted file mode 100644 index f0abfa859..000000000 --- a/client/tests/gui/conversation/export/test_transcript_dialog.py +++ /dev/null @@ -1,351 +0,0 @@ -from securedrop_client.export import ExportError, ExportStatus -from securedrop_client.gui.conversation import ExportTranscriptDialog -from tests.helper import app # noqa: F401 - - -def test_TranscriptDialog_init(mocker): - _show_starting_instructions_fn = mocker.patch( - "securedrop_client.gui.conversation.ExportTranscriptDialog._show_starting_instructions" - ) - - export_transcript_dialog = ExportTranscriptDialog( - mocker.MagicMock(), "transcript.txt", "/some/path/transcript.txt" - ) - - _show_starting_instructions_fn.assert_called_once_with() - assert export_transcript_dialog.passphrase_form.isHidden() - - -def test_TranscriptDialog_init_sanitizes_filename(mocker): - secure_qlabel = mocker.patch( - "securedrop_client.gui.conversation.export.file_dialog.SecureQLabel" - ) - mocker.patch("securedrop_client.gui.widgets.QVBoxLayout.addWidget") - filename = '' - - ExportTranscriptDialog(mocker.MagicMock(), filename, "/some/path/transcript.txt") - - secure_qlabel.assert_any_call(filename, wordwrap=False, max_length=260) - - -def test_TranscriptDialog__show_starting_instructions(mocker, export_transcript_dialog): - export_transcript_dialog._show_starting_instructions() - - # transcript.txt comes from the export_transcript_dialog fixture - assert ( - export_transcript_dialog.header.text() == "Preparing to export:" - "
" - 'transcript.txt' - ) - assert ( - export_transcript_dialog.body.text() - == "

Understand the risks before exporting files

" - "Malware" - "
" - "This workstation lets you open files securely. If you open files on another " - "computer, any embedded malware may spread to your computer or network. If you are " - "unsure how to manage this risk, please print the file, or contact your " - "administrator." - "

" - "Anonymity" - "
" - "Files submitted by sources may contain information or hidden metadata that " - "identifies who they are. To protect your sources, please consider redacting files " - "before working with them on network-connected computers." - ) - assert not export_transcript_dialog.header.isHidden() - assert not export_transcript_dialog.header_line.isHidden() - assert export_transcript_dialog.error_details.isHidden() - assert not export_transcript_dialog.body.isHidden() - assert export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert not export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog___show_passphrase_request_message(mocker, export_transcript_dialog): - export_transcript_dialog._show_passphrase_request_message() - - assert export_transcript_dialog.header.text() == "Enter passphrase for USB drive" - assert not export_transcript_dialog.header.isHidden() - assert export_transcript_dialog.header_line.isHidden() - assert export_transcript_dialog.error_details.isHidden() - assert export_transcript_dialog.body.isHidden() - assert not export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert not export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog__show_passphrase_request_message_again(mocker, export_transcript_dialog): - export_transcript_dialog._show_passphrase_request_message_again() - - assert export_transcript_dialog.header.text() == "Enter passphrase for USB drive" - assert ( - export_transcript_dialog.error_details.text() - == "The passphrase provided did not work. Please try again." - ) - assert export_transcript_dialog.body.isHidden() - assert not export_transcript_dialog.header.isHidden() - assert export_transcript_dialog.header_line.isHidden() - assert not export_transcript_dialog.error_details.isHidden() - assert export_transcript_dialog.body.isHidden() - assert not export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert not export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog__show_success_message(mocker, export_transcript_dialog): - export_transcript_dialog._show_success_message() - - assert export_transcript_dialog.header.text() == "Export successful" - assert ( - export_transcript_dialog.body.text() - == "Remember to be careful when working with files outside of your Workstation machine." - ) - assert not export_transcript_dialog.header.isHidden() - assert not export_transcript_dialog.header_line.isHidden() - assert export_transcript_dialog.error_details.isHidden() - assert not export_transcript_dialog.body.isHidden() - assert export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog__show_insert_usb_message(mocker, export_transcript_dialog): - export_transcript_dialog._show_insert_usb_message() - - assert export_transcript_dialog.header.text() == "Insert encrypted USB drive" - assert ( - export_transcript_dialog.body.text() - == "Please insert one of the export drives provisioned specifically " - "for the SecureDrop Workstation." - ) - assert not export_transcript_dialog.header.isHidden() - assert not export_transcript_dialog.header_line.isHidden() - assert export_transcript_dialog.error_details.isHidden() - assert not export_transcript_dialog.body.isHidden() - assert export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert not export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog__show_insert_encrypted_usb_message(mocker, export_transcript_dialog): - export_transcript_dialog._show_insert_encrypted_usb_message() - - assert export_transcript_dialog.header.text() == "Insert encrypted USB drive" - assert ( - export_transcript_dialog.error_details.text() - == "Either the drive is not encrypted or there is something else wrong with it." - ) - assert ( - export_transcript_dialog.body.text() - == "Please insert one of the export drives provisioned specifically for the SecureDrop " - "Workstation." - ) - assert not export_transcript_dialog.header.isHidden() - assert not export_transcript_dialog.header_line.isHidden() - assert not export_transcript_dialog.error_details.isHidden() - assert not export_transcript_dialog.body.isHidden() - assert export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert not export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog__show_generic_error_message(mocker, export_transcript_dialog): - export_transcript_dialog.error_status = "mock_error_status" - - export_transcript_dialog._show_generic_error_message() - - assert export_transcript_dialog.header.text() == "Export failed" - assert ( - export_transcript_dialog.body.text() - == "mock_error_status: See your administrator for help." - ) - assert not export_transcript_dialog.header.isHidden() - assert not export_transcript_dialog.header_line.isHidden() - assert export_transcript_dialog.error_details.isHidden() - assert not export_transcript_dialog.body.isHidden() - assert export_transcript_dialog.passphrase_form.isHidden() - assert not export_transcript_dialog.continue_button.isHidden() - assert not export_transcript_dialog.cancel_button.isHidden() - - -def test_TranscriptDialog__export_transcript(mocker, export_transcript_dialog): - device = mocker.MagicMock() - device.export_transcript = mocker.MagicMock() - export_transcript_dialog._device = device - export_transcript_dialog.passphrase_field.text = mocker.MagicMock( - return_value="mock_passphrase" - ) - - export_transcript_dialog._export_transcript() - - device.export_transcript.assert_called_once_with("/some/path/transcript.txt", "mock_passphrase") - - -def test_TranscriptDialog__on_export_preflight_check_succeeded(mocker, export_transcript_dialog): - export_transcript_dialog._show_passphrase_request_message = mocker.MagicMock() - export_transcript_dialog.continue_button = mocker.MagicMock() - export_transcript_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=False) - - export_transcript_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - - export_transcript_dialog._show_passphrase_request_message.assert_not_called() - export_transcript_dialog.continue_button.clicked.connect.assert_called_once_with( - export_transcript_dialog._show_passphrase_request_message - ) - - -def test_TranscriptDialog__on_export_preflight_check_succeeded_when_continue_enabled( - mocker, export_transcript_dialog -): - export_transcript_dialog._show_passphrase_request_message = mocker.MagicMock() - export_transcript_dialog.continue_button.setEnabled(True) - - export_transcript_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - - export_transcript_dialog._show_passphrase_request_message.assert_called_once_with() - - -def test_TranscriptDialog__on_export_preflight_check_succeeded_enabled_after_preflight_success( - mocker, export_transcript_dialog -): - assert not export_transcript_dialog.continue_button.isEnabled() - export_transcript_dialog._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - assert export_transcript_dialog.continue_button.isEnabled() - - -def test_TranscriptDialog__on_export_preflight_check_succeeded_enabled_after_preflight_failure( - mocker, export_transcript_dialog -): - assert not export_transcript_dialog.continue_button.isEnabled() - export_transcript_dialog._on_export_preflight_check_failed(mocker.MagicMock()) - assert export_transcript_dialog.continue_button.isEnabled() - - -def test_TranscriptDialog__on_export_preflight_check_failed(mocker, export_transcript_dialog): - export_transcript_dialog._update_dialog = mocker.MagicMock() - - error = ExportError("mock_error_status") - export_transcript_dialog._on_export_preflight_check_failed(error) - - export_transcript_dialog._update_dialog.assert_called_with("mock_error_status") - - -def test_TranscriptDialog__on_export_succeeded(mocker, export_transcript_dialog): - export_transcript_dialog._show_success_message = mocker.MagicMock() - - export_transcript_dialog._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) - - export_transcript_dialog._show_success_message.assert_called_once_with() - - -def test_TranscriptDialog__on_export_failed(mocker, export_transcript_dialog): - export_transcript_dialog._update_dialog = mocker.MagicMock() - - error = ExportError("mock_error_status") - export_transcript_dialog._on_export_failed(error) - - export_transcript_dialog._update_dialog.assert_called_with("mock_error_status") - - -def test_TranscriptDialog__update_dialog_when_status_is_USB_NOT_CONNECTED( - mocker, export_transcript_dialog -): - export_transcript_dialog._show_insert_usb_message = mocker.MagicMock() - export_transcript_dialog.continue_button = mocker.MagicMock() - export_transcript_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_transcript_dialog._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_transcript_dialog.continue_button.clicked.connect.assert_called_once_with( - export_transcript_dialog._show_insert_usb_message - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=True) - export_transcript_dialog._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_transcript_dialog._show_insert_usb_message.assert_called_once_with() - - -def test_TranscriptDialog__update_dialog_when_status_is_BAD_PASSPHRASE( - mocker, export_transcript_dialog -): - export_transcript_dialog._show_passphrase_request_message_again = mocker.MagicMock() - export_transcript_dialog.continue_button = mocker.MagicMock() - export_transcript_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_transcript_dialog._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_transcript_dialog.continue_button.clicked.connect.assert_called_once_with( - export_transcript_dialog._show_passphrase_request_message_again - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=True) - export_transcript_dialog._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_transcript_dialog._show_passphrase_request_message_again.assert_called_once_with() - - -def test_TranscriptDialog__update_dialog_when_status_DISK_ENCRYPTION_NOT_SUPPORTED_ERROR( - mocker, export_transcript_dialog -): - export_transcript_dialog._show_insert_encrypted_usb_message = mocker.MagicMock() - export_transcript_dialog.continue_button = mocker.MagicMock() - export_transcript_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_transcript_dialog._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_transcript_dialog.continue_button.clicked.connect.assert_called_once_with( - export_transcript_dialog._show_insert_encrypted_usb_message - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=True) - export_transcript_dialog._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_transcript_dialog._show_insert_encrypted_usb_message.assert_called_once_with() - - -def test_TranscriptDialog__update_dialog_when_status_is_CALLED_PROCESS_ERROR( - mocker, export_transcript_dialog -): - export_transcript_dialog._show_generic_error_message = mocker.MagicMock() - export_transcript_dialog.continue_button = mocker.MagicMock() - export_transcript_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_transcript_dialog._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_transcript_dialog.continue_button.clicked.connect.assert_called_once_with( - export_transcript_dialog._show_generic_error_message - ) - assert export_transcript_dialog.error_status == ExportStatus.CALLED_PROCESS_ERROR - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=True) - export_transcript_dialog._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_transcript_dialog._show_generic_error_message.assert_called_once_with() - assert export_transcript_dialog.error_status == ExportStatus.CALLED_PROCESS_ERROR - - -def test_TranscriptDialog__update_dialog_when_status_is_unknown(mocker, export_transcript_dialog): - export_transcript_dialog._show_generic_error_message = mocker.MagicMock() - export_transcript_dialog.continue_button = mocker.MagicMock() - export_transcript_dialog.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_transcript_dialog._update_dialog("Some Unknown Error Status") - export_transcript_dialog.continue_button.clicked.connect.assert_called_once_with( - export_transcript_dialog._show_generic_error_message - ) - assert export_transcript_dialog.error_status == "Some Unknown Error Status" - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_transcript_dialog.continue_button, "isEnabled", return_value=True) - export_transcript_dialog._update_dialog("Some Unknown Error Status") - export_transcript_dialog._show_generic_error_message.assert_called_once_with() - assert export_transcript_dialog.error_status == "Some Unknown Error Status" diff --git a/client/tests/gui/test_actions.py b/client/tests/gui/test_actions.py index 8f3bde2cb..c52a2b721 100644 --- a/client/tests/gui/test_actions.py +++ b/client/tests/gui/test_actions.py @@ -275,12 +275,13 @@ def test_trigger(self, _): return_value="☠ A string with unicode characters." ) - action._export_device.run_printer_preflight_checks = ( - lambda: action._export_device.print_preflight_check_succeeded.emit() - ) - action._export_device.print_transcript = ( - lambda transcript: action._export_device.print_succeeded.emit() - ) + # TODO: these are now accessible through the Device or the Dialog. + # action._export_device.run_printer_preflight_checks = ( + # lambda: action._export_device.print_preflight_check_succeeded.emit() + # ) + # action._export_device.print = ( + # lambda transcript: action._export_device.print_succeeded.emit() + # ) action.trigger() @@ -288,7 +289,7 @@ def test_trigger(self, _): class TestExportConversationTranscriptAction(unittest.TestCase): - @patch("securedrop_client.gui.actions.ExportConversationTranscriptDialog") + @patch("securedrop_client.gui.actions.ExportDialog") def test_trigger(self, _): with managed_locale(): locale.setlocale(locale.LC_ALL, ("en_US", "latin-1")) @@ -303,12 +304,13 @@ def test_trigger(self, _): return_value="☠ A string with unicode characters." ) - action._export_device.run_printer_preflight_checks = ( - lambda: action._export_device.print_preflight_check_succeeded.emit() - ) - action._export_device.print_transcript = ( - lambda transcript: action._export_device.print_succeeded.emit() - ) + # TODO: these are now accessible through the Device or the Dialog. + # action._export_device.run_printer_preflight_checks = ( + # lambda: action._export_device.print_preflight_check_succeeded.emit() + # ) + # action._export_device.print_transcript = ( + # lambda transcript: action._export_device.print_succeeded.emit() + # ) action.trigger() @@ -316,7 +318,7 @@ def test_trigger(self, _): class TestExportConversationAction(unittest.TestCase): - @patch("securedrop_client.gui.actions.ExportConversationDialog") + @patch("securedrop_client.gui.actions.ExportDialog") def test_trigger(self, _): with managed_locale(): locale.setlocale(locale.LC_ALL, ("en_US", "latin-1")) @@ -336,12 +338,13 @@ def test_trigger(self, _): return_value="☠ A string with unicode characters." ) - action._export_device.run_printer_preflight_checks = ( - lambda: action._export_device.print_preflight_check_succeeded.emit() - ) - action._export_device.print_transcript = ( - lambda transcript: action._export_device.print_succeeded.emit() - ) + # TODO: preflight checks now belong to Device + # action._export_device.run_printer_preflight_checks = ( + # lambda: action._export_device.print_preflight_check_succeeded.emit() + # ) + # action._export_device.print = ( + # lambda transcript: action._export_device.print_succeeded.emit() + # ) action.trigger() diff --git a/client/tests/gui/test_widgets.py b/client/tests/gui/test_widgets.py index 11b4234bc..4ef404f71 100644 --- a/client/tests/gui/test_widgets.py +++ b/client/tests/gui/test_widgets.py @@ -3587,6 +3587,9 @@ def test_FileWidget__on_export_clicked(mocker, session, source): get_file = mocker.MagicMock(return_value=file) controller = mocker.MagicMock(get_file=get_file) + file_location = file.location(controller.data_dir) + + # It doesn't live here, but see __init__.py export_device = mocker.patch("securedrop_client.gui.conversation.ExportDevice") fw = FileWidget( @@ -3597,10 +3600,10 @@ def test_FileWidget__on_export_clicked(mocker, session, source): controller.run_export_preflight_checks = mocker.MagicMock() controller.downloaded_file_exists = mocker.MagicMock(return_value=True) - dialog = mocker.patch("securedrop_client.gui.conversation.ExportFileDialog") + dialog = mocker.patch("securedrop_client.gui.conversation.ExportDialog") fw._on_export_clicked() - dialog.assert_called_once_with(export_device(), file.uuid, file.filename) + dialog.assert_called_once_with(export_device(), file.filename, [file_location]) def test_FileWidget__on_export_clicked_missing_file(mocker, session, source): @@ -3627,7 +3630,7 @@ def test_FileWidget__on_export_clicked_missing_file(mocker, session, source): mocker.patch("PyQt5.QtWidgets.QDialog.exec") controller.run_export_preflight_checks = mocker.MagicMock() controller.downloaded_file_exists = mocker.MagicMock(return_value=False) - dialog = mocker.patch("securedrop_client.gui.conversation.ExportFileDialog") + dialog = mocker.patch("securedrop_client.gui.conversation.ExportDialog") fw._on_export_clicked() @@ -3637,7 +3640,7 @@ def test_FileWidget__on_export_clicked_missing_file(mocker, session, source): def test_FileWidget__on_print_clicked(mocker, session, source): """ - Ensure print_file is called when the PRINT button is clicked + Ensure print() is called when the PRINT button is clicked """ file = factory.File(source=source["source"], is_downloaded=True) session.add(file) @@ -3646,6 +3649,7 @@ def test_FileWidget__on_print_clicked(mocker, session, source): get_file = mocker.MagicMock(return_value=file) controller = mocker.MagicMock(get_file=get_file) export_device = mocker.patch("securedrop_client.gui.conversation.ExportDevice") + file_location = file.location(controller.data_dir) fw = FileWidget( file.uuid, @@ -3665,7 +3669,7 @@ def test_FileWidget__on_print_clicked(mocker, session, source): fw._on_print_clicked() - dialog.assert_called_once_with(export_device(), file.uuid, file.filename) + dialog.assert_called_once_with(export_device(), file.filename, [file_location]) def test_FileWidget__on_print_clicked_missing_file(mocker, session, source): diff --git a/client/tests/integration/conftest.py b/client/tests/integration/conftest.py index 80d3a4911..c00880041 100644 --- a/client/tests/integration/conftest.py +++ b/client/tests/integration/conftest.py @@ -1,22 +1,18 @@ import pytest from PyQt5.QtWidgets import QApplication -from securedrop_client import export from securedrop_client.app import threads -from securedrop_client.export import ExportStatus +from securedrop_client.export_status import ExportStatus from securedrop_client.gui import conversation from securedrop_client.gui.base import ModalDialog +from securedrop_client.gui.conversation.export import Export from securedrop_client.gui.main import Window from securedrop_client.logic import Controller from tests import factory @pytest.fixture(scope="function") -def main_window(mocker, homedir, mock_export_service): - mocker.patch( - "securedrop_client.export.getService", - return_value=mock_export_service, - ) +def main_window(mocker, homedir): # Setup app = QApplication([]) gui = Window() @@ -68,11 +64,7 @@ def main_window(mocker, homedir, mock_export_service): @pytest.fixture(scope="function") -def main_window_no_key(mocker, homedir, mock_export_service): - mocker.patch( - "securedrop_client.export.getService", - return_value=mock_export_service, - ) +def main_window_no_key(mocker, homedir): # Setup app = QApplication([]) gui = Window() @@ -155,23 +147,20 @@ def modal_dialog(mocker, homedir): @pytest.fixture(scope="function") -def mock_export_service(): - """An export service that assumes the Qubes RPC calls are successful and skips them.""" - export_service = export.Service() - # Ensure the export_service doesn't rely on Qubes OS: - export_service.run_preflight_checks = lambda: ExportStatus.DEVICE_LOCKED - export_service.send_file_to_usb_device = lambda paths, passphrase: ExportStatus.SUCCESS_EXPORT - export_service.run_printer_preflight = lambda: ExportStatus.PRINT_PREFLIGHT_SUCCESS - export_service.run_print = lambda paths: ExportStatus.PRINT_SUCCESS - return export_service +def mock_export(mocker): + device = Export() + + """A export that assumes the Qubes RPC calls are successful and skips them.""" + device.run_preflight_checks = lambda: ExportStatus.DEVICE_LOCKED + device.send_file_to_usb_device = lambda paths, passphrase: ExportStatus.SUCCESS_EXPORT + device.run_printer_preflight = lambda: ExportStatus.PRINT_PREFLIGHT_SUCCESS + device.run_print = lambda paths: ExportStatus.PRINT_SUCCESS + return device @pytest.fixture(scope="function") -def print_dialog(mocker, homedir, mock_export_service): - mocker.patch( - "securedrop_client.export.getService", - return_value=mock_export_service, - ) +def print_dialog(mocker, homedir): + mocker.patch("securedrop_client.export.Export", return_value=mock_export) app = QApplication([]) gui = Window() app.setActiveWindow(gui) @@ -193,10 +182,10 @@ def print_dialog(mocker, homedir, mock_export_service): ) controller.authenticated_user = factory.User() controller.qubes = False - export_device = conversation.ExportDevice(controller, mock_export_service) gui.setup(controller) gui.login_dialog.close() - dialog = conversation.PrintFileDialog(export_device, "file_uuid", "file_name") + export_device = conversation.ExportDevice() + dialog = conversation.PrintFileDialog(export_device, "file_name", ["/mock/export/file"]) yield dialog @@ -206,11 +195,8 @@ def print_dialog(mocker, homedir, mock_export_service): @pytest.fixture(scope="function") -def export_file_dialog(mocker, homedir, mock_export_service): - mocker.patch( - "securedrop_client.export.getService", - return_value=mock_export_service, - ) +def export_file_dialog(mocker, homedir): + mocker.patch("securedrop_client.export.Export", return_value=mock_export) app = QApplication([]) gui = Window() app.setActiveWindow(gui) @@ -229,10 +215,10 @@ def export_file_dialog(mocker, homedir, mock_export_service): ) controller.authenticated_user = factory.User() controller.qubes = False - export_device = conversation.ExportDevice(controller, mock_export_service) gui.setup(controller) gui.login_dialog.close() - dialog = conversation.ExportFileDialog(export_device, "file_uuid", "file_name") + export_device = conversation.ExportDevice() + dialog = conversation.ExportDialog(export_device, "file_name", ["/mock/export/filepath"]) dialog.show() yield dialog diff --git a/client/tests/integration/test_styles_sdclient.py b/client/tests/integration/test_styles_sdclient.py index 3fab23e9e..fa5d0484a 100644 --- a/client/tests/integration/test_styles_sdclient.py +++ b/client/tests/integration/test_styles_sdclient.py @@ -130,8 +130,8 @@ def test_class_name_matches_css_object_name_for_print_dialog(print_dialog): def test_class_name_matches_css_object_name_for_export_file_dialog(export_file_dialog): - assert "FileDialog" == export_file_dialog.__class__.__name__ - assert "FileDialog" in export_file_dialog.passphrase_form.objectName() + assert "ExportDialog" == export_file_dialog.__class__.__name__ + assert "ExportDialog" in export_file_dialog.passphrase_form.objectName() def test_class_name_matches_css_object_name_for_modal_dialog(modal_dialog): diff --git a/client/tests/test_export.py b/client/tests/test_export.py deleted file mode 100644 index d5e43b4f3..000000000 --- a/client/tests/test_export.py +++ /dev/null @@ -1,453 +0,0 @@ -import os -import subprocess -import unittest -from tempfile import NamedTemporaryFile, TemporaryDirectory - -import pytest - -from securedrop_client import export -from securedrop_client.export import Export, ExportError, ExportStatus - - -class TestService(unittest.TestCase): - def tearDown(self): - # ensure any changes to the export.Service instance are reset - # export.resetService() - pass - - def test_service_is_unique(self): - service = export.getService() - same_service = export.getService() # Act. - - self.assertTrue( - service is same_service, - "expected successive calls to getService to return the same service, got different services", # noqa: E501 - ) - - def test_service_can_be_reset(self): - service = export.getService() - export.resetService() # Act. - different_service = export.getService() - - self.assertTrue( - different_service is not service, - "expected resetService to reset the service, got same service after reset", - ) - - -def test_run_printer_preflight(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archives during the preflight - checks and that the success signal is emitted by Export. - """ - - export = Export() - mocker.patch.object( - export, "_build_archive_and_export", return_value=ExportStatus.PRINT_PREFLIGHT_SUCCESS - ) - export.printer_preflight_success = mocker.MagicMock() - export.printer_preflight_success.emit = mocker.MagicMock() - - export.run_printer_preflight() - export.printer_preflight_success.emit.assert_called_once_with( - ExportStatus.PRINT_PREFLIGHT_SUCCESS - ) - - -def test_run_printer_preflight_error(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archives during the preflight - checks and that the failure signal is emitted by Export. - """ - - export = Export() - error = ExportError("bang!") - mocker.patch.object(export, "_build_archive_and_export", side_effect=error) - - export.printer_preflight_failure = mocker.MagicMock() - export.printer_preflight_failure.emit = mocker.MagicMock() - - export.run_printer_preflight() - - export.printer_preflight_failure.emit.assert_called_once_with(error) - - -def test_print(mocker): - export = Export() - - mock_qrexec_call = mocker.patch.object( - export, "_build_archive_and_export", return_value=ExportStatus.PRINT_SUCCESS - ) - - export.print_call_success = mocker.MagicMock() - export.print_call_success.emit = mocker.MagicMock() - export.export_completed = mocker.MagicMock() - export.export_completed.emit = mocker.MagicMock() - - export.print(["path1", "path2"]) - - mock_qrexec_call.assert_called_once_with( - metadata=export.PRINT_METADATA, filename=export.PRINT_FN, filepaths=["path1", "path2"] - ) - export.print_call_success.emit.assert_called_once_with(ExportStatus.PRINT_SUCCESS) - export.export_completed.emit.assert_called_once_with(["path1", "path2"]) - - -def test_print_error(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archive containing the file to - print and that the failure signal is emitted. - """ - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - - export = Export() - export.print_call_failure = mocker.MagicMock() - export.print_call_failure.emit = mocker.MagicMock() - export.export_completed = mocker.MagicMock() - export.export_completed.emit = mocker.MagicMock() - error = ExportError("oh no!") - _run_print = mocker.patch.object(export, "_build_archive_and_export", side_effect=error) - mocker.patch("os.path.exists", return_value=True) - - export.print(["path1", "path2"]) - - _run_print.assert_called_once_with( - metadata=export.PRINT_METADATA, filename=export.PRINT_FN, filepaths=["path1", "path2"] - ) - export.print_call_failure.emit.assert_called_once_with(error) - export.export_completed.emit.assert_called_once_with(["path1", "path2"]) - - -def test_send_file_to_usb_device(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archive containing the export - file and that the success signal is emitted. - """ - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - - export = Export() - export.export_usb_call_success = mocker.MagicMock() - export.export_usb_call_success.emit = mocker.MagicMock() - export.export_completed = mocker.MagicMock() - export.export_completed.emit = mocker.MagicMock() - _run_disk_export = mocker.patch.object( - export, "_build_archive_and_export", return_value=ExportStatus.SUCCESS_EXPORT - ) - mocker.patch("os.path.exists", return_value=True) - - metadata = export.DISK_METADATA - metadata[export.DISK_ENCRYPTION_KEY_NAME] = "mock passphrase" - - export.send_file_to_usb_device(["path1", "path2"], "mock passphrase") - - _run_disk_export.assert_called_once_with( - metadata=metadata, filename=export.DISK_FN, filepaths=["path1", "path2"] - ) - export.export_usb_call_success.emit.assert_called_once_with(ExportStatus.SUCCESS_EXPORT) - export.export_completed.emit.assert_called_once_with(["path1", "path2"]) - - -def test_send_file_to_usb_device_error(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archive containing the export - file and that the failure signal is emitted. - """ - export = Export() - - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - - export.export_usb_call_failure = mocker.MagicMock() - export.export_usb_call_failure.emit = mocker.MagicMock() - export.export_completed = mocker.MagicMock() - export.export_completed.emit = mocker.MagicMock() - error = ExportError("ohno") - _run_disk_export = mocker.patch.object(export, "_build_archive_and_export", side_effect=error) - - metadata = export.DISK_METADATA - metadata[export.DISK_ENCRYPTION_KEY_NAME] = "mock passphrase" - - export.send_file_to_usb_device(["path1", "path2"], "mock passphrase") - - _run_disk_export.assert_called_once_with( - metadata=metadata, filename=export.DISK_FN, filepaths=["path1", "path2"] - ) - export.export_usb_call_failure.emit.assert_called_once_with(error) - export.export_completed.emit.assert_called_once_with(["path1", "path2"]) - - -def test_run_usb_preflight_checks(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archives during the preflight - checks and that the success signal is emitted by Export. - """ - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - export = Export() - - export.preflight_check_call_success = mocker.MagicMock() - export.preflight_check_call_success.emit = mocker.MagicMock() - _run_export = mocker.patch.object( - export, "_build_archive_and_export", return_value=ExportStatus.DEVICE_LOCKED - ) - - export.run_preflight_checks() - - _run_export.assert_called_once_with( - metadata=export.USB_TEST_METADATA, filename=export.USB_TEST_FN - ) - export.preflight_check_call_success.emit.assert_called_once_with(ExportStatus.DEVICE_LOCKED) - - -def test_run_usb_preflight_checks_error(mocker): - """ - Ensure TemporaryDirectory is used when creating and sending the archives during the preflight - checks and that the failure signal is emitted by Export. - """ - - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - - export = Export() - export.preflight_check_call_failure = mocker.MagicMock() - export.preflight_check_call_failure.emit = mocker.MagicMock() - error = ExportError("bang!") - _run_export = mocker.patch.object(export, "_build_archive_and_export", side_effect=error) - - export.run_preflight_checks() - - _run_export.assert_called_once_with( - metadata=export.USB_TEST_METADATA, filename=export.USB_TEST_FN - ) - export.preflight_check_call_failure.emit.assert_called_once_with(error) - - -@pytest.mark.parametrize("success_qrexec", [e.value for e in ExportStatus]) -def test__build_archive_and_export_success(mocker, success_qrexec): - """ - Test the command that calls out to underlying qrexec service. - """ - export = Export() - - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - - mock_qrexec_call = mocker.patch.object( - export, "_run_qrexec_export", return_value=bytes(success_qrexec, "utf-8") - ) - mocker.patch.object(export, "_create_archive", return_value="mock_archive_path") - - metadata = {"device": "pretend", "encryption_method": "transparent"} - - result = export._build_archive_and_export( - metadata=metadata, filename="mock_filename", filepaths=["mock_filepath"] - ) - mock_qrexec_call.assert_called_once() - - assert result == bytes(success_qrexec, "utf-8") - - -def test__build_archive_and_export_error(mocker): - """ - Test the command that calls out to underlying qrexec service. - """ - export = Export() - mock_temp_dir = mocker.MagicMock() - mock_temp_dir.__enter__ = mocker.MagicMock(return_value="mock_temp_dir") - mocker.patch("securedrop_client.export.TemporaryDirectory", return_value=mock_temp_dir) - - mocker.patch.object(export, "_create_archive", return_value="mock_archive_path") - - mock_qrexec_call = mocker.patch.object( - export, "_run_qrexec_export", side_effect=ExportError(ExportStatus.UNEXPECTED_RETURN_STATUS) - ) - - metadata = {"device": "pretend", "encryption_method": "transparent"} - - with pytest.raises(ExportError): - result = export._build_archive_and_export( - metadata=metadata, filename="mock_filename", filepaths=["mock_filepath"] - ) - assert result == ExportStatus.UNEXPECTED_RETURN_STATUS - - mock_qrexec_call.assert_called_once() - - -def test__create_archive(mocker): - """ - Ensure _create_archive creates an archive in the supplied directory. - """ - export = Export() - archive_path = None - with TemporaryDirectory() as temp_dir: - archive_path = export._create_archive( - archive_dir=temp_dir, archive_fn="mock.sd-export", metadata={}, filepaths=[] - ) - assert archive_path == os.path.join(temp_dir, "mock.sd-export") - assert os.path.exists(archive_path) # sanity check - - assert not os.path.exists(archive_path) - - -def test__create_archive_with_an_export_file(mocker): - export = Export() - archive_path = None - with TemporaryDirectory() as temp_dir, NamedTemporaryFile() as export_file: - archive_path = export._create_archive( - archive_dir=temp_dir, - archive_fn="mock.sd-export", - metadata={}, - filepaths=[export_file.name], - ) - assert archive_path == os.path.join(temp_dir, "mock.sd-export") - assert os.path.exists(archive_path) # sanity check - - assert not os.path.exists(archive_path) - - -def test__create_archive_with_multiple_export_files(mocker): - """ - Ensure an archive - """ - export = Export() - archive_path = None - with TemporaryDirectory() as temp_dir, NamedTemporaryFile() as export_file_one, NamedTemporaryFile() as export_file_two: # noqa - transcript_path = os.path.join(temp_dir, "transcript.txt") - with open(transcript_path, "a+") as transcript: - archive_path = export._create_archive( - temp_dir, - "mock.sd-export", - {}, - [export_file_one.name, export_file_two.name, transcript.name], - ) - assert archive_path == os.path.join(temp_dir, "mock.sd-export") - assert os.path.exists(archive_path) # sanity check - - assert not os.path.exists(archive_path) - - -@pytest.mark.parametrize("qrexec_return_value_success", [e.value for e in ExportStatus]) -def test__run_qrexec_export(mocker, qrexec_return_value_success): - """ - Ensure the subprocess call returns the expected output. - """ - export = Export() - qrexec_mocker = mocker.patch( - "subprocess.check_output", return_value=bytes(qrexec_return_value_success, "utf-8") - ) - result = export._run_qrexec_export("mock.sd-export") - - qrexec_mocker.assert_called_once_with( - [ - "qrexec-client-vm", - "--", - "sd-devices", - "qubes.OpenInVM", - "/usr/lib/qubes/qopen-in-vm", - "--view-only", - "--", - "mock.sd-export", - ], - stderr=-2, - ) - - assert ExportStatus(result) - - -@pytest.mark.parametrize( - "qrexec_return_value_error", [b"", b"qrexec not connected", b"DEVICE_UNLOCKED\nERROR_WRITE"] -) -def test__run_qrexec_export_returns_bad_data(mocker, qrexec_return_value_error): - """ - Ensure the subprocess call returns the expected output. - """ - export = Export() - qrexec_mocker = mocker.patch("subprocess.check_output", return_value=qrexec_return_value_error) - - with pytest.raises(ExportError, match="UNEXPECTED_RETURN_STATUS"): - export._run_qrexec_export("mock.sd-export") - - qrexec_mocker.assert_called_once_with( - [ - "qrexec-client-vm", - "--", - "sd-devices", - "qubes.OpenInVM", - "/usr/lib/qubes/qopen-in-vm", - "--view-only", - "--", - "mock.sd-export", - ], - stderr=-2, - ) - - -def test__run_qrexec_export_does_not_raise_ExportError_when_CalledProcessError(mocker): - """ - Ensure ExportError is raised if a CalledProcessError is encountered. - """ - mock_error = subprocess.CalledProcessError(cmd=["mock_cmd"], returncode=123) - mocker.patch("subprocess.check_output", side_effect=mock_error) - - export = Export() - - with pytest.raises(ExportError, match="CALLED_PROCESS_ERROR"): - export._run_qrexec_export("mock.sd-export") - - -def test__run_qrexec_export_with_evil_command(mocker): - """ - Ensure shell command is shell-escaped. - """ - export = Export() - check_output = mocker.patch("subprocess.check_output", return_value=b"ERROR_FILE_NOT_FOUND") - - with pytest.raises(ExportError, match="UNEXPECTED_RETURN_STATUS"): - export._run_qrexec_export("somefile; ls -la ~") - - check_output.assert_called_once_with( - [ - "qrexec-client-vm", - "--", - "sd-devices", - "qubes.OpenInVM", - "/usr/lib/qubes/qopen-in-vm", - "--view-only", - "--", - "'somefile; ls -la ~'", - ], - stderr=-2, - ) - - -def test__run_qrexec_export_error_on_empty_return_value(mocker): - """ - Ensure an error is raised when qrexec call returns empty string, - """ - export = Export() - check_output = mocker.patch("subprocess.check_output", return_value=b"") - - with pytest.raises(ExportError, match="UNEXPECTED_RETURN_STATUS"): - export._run_qrexec_export("somefile.sd-export") - - check_output.assert_called_once_with( - [ - "qrexec-client-vm", - "--", - "sd-devices", - "qubes.OpenInVM", - "/usr/lib/qubes/qopen-in-vm", - "--view-only", - "--", - "somefile.sd-export", - ], - stderr=-2, - ) From 99c855acd108c8aa29861b0073fba8fae0d0a432 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 29 Jan 2024 14:58:22 -0500 Subject: [PATCH 659/751] Use QWizard instead of modal dialog for file export flow. Add Error page for unrecoverable errors. Use QProcess instead of subprocess for qrexec commands. Improve error-handling in export.py. --- client/securedrop_client/export.py | 332 ++-- client/securedrop_client/gui/actions.py | 21 +- .../gui/conversation/__init__.py | 2 +- .../gui/conversation/export/__init__.py | 2 +- .../gui/conversation/export/dialog_button.css | 29 + .../conversation/export/dialog_message.css | 13 + .../gui/conversation/export/export_dialog.py | 289 ---- .../gui/conversation/export/export_wizard.py | 222 +++ .../export/export_wizard_constants.py | 47 + .../conversation/export/export_wizard_page.py | 464 +++++ client/securedrop_client/gui/widgets.py | 7 +- client/tests/conftest.py | 118 +- ... => test_export_wizard_device_locked.yaml} | 0 ...izard_dialog_device_already_unlocked.yaml} | 0 ...est_export_wizard_no_device_then_fail.yaml | 1518 +++++++++++++++++ .../functional/test_export_file_dialog.py | 123 -- .../functional/test_export_file_wizard.py | 272 +++ .../gui/conversation/export/test_device.py | 238 ++- .../gui/conversation/export/test_dialog.py | 352 ---- .../conversation/export/test_export_wizard.py | 154 ++ .../conversation/export/test_file_dialog.py | 405 ----- client/tests/gui/test_actions.py | 4 +- client/tests/gui/test_widgets.py | 10 +- 23 files changed, 3221 insertions(+), 1401 deletions(-) create mode 100644 client/securedrop_client/gui/conversation/export/dialog_button.css create mode 100644 client/securedrop_client/gui/conversation/export/dialog_message.css delete mode 100644 client/securedrop_client/gui/conversation/export/export_dialog.py create mode 100644 client/securedrop_client/gui/conversation/export/export_wizard.py create mode 100644 client/securedrop_client/gui/conversation/export/export_wizard_constants.py create mode 100644 client/securedrop_client/gui/conversation/export/export_wizard_page.py rename client/tests/functional/cassettes/{test_export_file_dialog_locked.yaml => test_export_wizard_device_locked.yaml} (100%) rename client/tests/functional/cassettes/{test_export_file_dialog_device_already_unlocked.yaml => test_export_wizard_dialog_device_already_unlocked.yaml} (100%) create mode 100644 client/tests/functional/cassettes/test_export_wizard_no_device_then_fail.yaml delete mode 100644 client/tests/functional/test_export_file_dialog.py create mode 100644 client/tests/functional/test_export_file_wizard.py delete mode 100644 client/tests/gui/conversation/export/test_dialog.py create mode 100644 client/tests/gui/conversation/export/test_export_wizard.py delete mode 100644 client/tests/gui/conversation/export/test_file_dialog.py diff --git a/client/securedrop_client/export.py b/client/securedrop_client/export.py index 59ae3f2f8..85560fd45 100644 --- a/client/securedrop_client/export.py +++ b/client/securedrop_client/export.py @@ -1,14 +1,14 @@ import json import logging import os -import subprocess import tarfile +import shutil from io import BytesIO from shlex import quote -from tempfile import TemporaryDirectory -from typing import List, Optional +from tempfile import TemporaryDirectory, mkdtemp +from typing import Callable, List, Optional -from PyQt5.QtCore import QObject, pyqtSignal +from PyQt5.QtCore import QProcess, QObject, pyqtSignal from securedrop_client.export_status import ExportError, ExportStatus @@ -41,61 +41,62 @@ class Export(QObject): _DISK_ENCRYPTION_KEY_NAME = "encryption_key" _DISK_EXPORT_DIR = "export_data" - # Emit ExportStatus - export_preflight_check_succeeded = pyqtSignal(object) - export_succeeded = pyqtSignal(object) + # Emit export states + export_state_changed = pyqtSignal(object) + # Emit print states print_preflight_check_succeeded = pyqtSignal(object) print_succeeded = pyqtSignal(object) - # Used for both print and export export_completed = pyqtSignal(object) - # Emit ExportError(status=ExportStatus) - export_preflight_check_failed = pyqtSignal(object) - export_failed = pyqtSignal(object) - print_preflight_check_failed = pyqtSignal(object) print_failed = pyqtSignal(object) + process = None # Optional[QProcess] + tmpdir = None # Note: context-managed tmpdir goes out of scope too quickly, so we create then clean it up + def run_printer_preflight_checks(self) -> None: """ Make sure the Export VM is started. """ logger.info("Beginning printer preflight check") + self.tmpdir = mkdtemp() + try: - with TemporaryDirectory() as tmp_dir: - archive_path = self._create_archive( - archive_dir=tmp_dir, - archive_fn=self._PRINTER_PREFLIGHT_FN, - metadata=self._PRINTER_PREFLIGHT_METADATA, - ) - status = self._run_qrexec_export(archive_path) - self.print_preflight_check_succeeded.emit(status) + archive_path = self._create_archive( + archive_dir=self.tmpdir, + archive_fn=self._PRINTER_PREFLIGHT_FN, + metadata=self._PRINTER_PREFLIGHT_METADATA, + ) + self._run_qrexec_export( + archive_path, self._on_print_preflight_complete, self._on_print_prefight_error + ) except ExportError as e: - logger.error("Print preflight failed") - logger.debug(f"Print preflight failed: {e}") - self.print_preflight_check_failed.emit(e) + logger.error("Error creating archive: {e}") + self._on_print_prefight_error() def run_export_preflight_checks(self) -> None: """ Run preflight check to verify that a valid USB device is connected. """ - try: - logger.debug("Beginning export preflight check") + logger.debug("Beginning export preflight check") - with TemporaryDirectory() as tmp_dir: - archive_path = self._create_archive( - archive_dir=tmp_dir, - archive_fn=self._USB_TEST_FN, - metadata=self._USB_TEST_METADATA, - ) - status = self._run_qrexec_export(archive_path) - self.export_preflight_check_succeeded.emit(status) + try: + self.tmpdir = mkdtemp() - except ExportError as e: - logger.error("Export preflight failed") - self.export_preflight_check_failed.emit(e) + archive_path = self._create_archive( + archive_dir=self.tmpdir, + archive_fn=self._USB_TEST_FN, + metadata=self._USB_TEST_METADATA, + ) + # Emits status via on_process_completed() + self._run_qrexec_export( + archive_path, self._on_export_process_complete, self._on_export_process_error + ) + except ExportError: + logger.error("Export preflight check failed during archive creation") + self._on_export_process_error() def export(self, filepaths: List[str], passphrase: Optional[str]) -> None: """ @@ -110,97 +111,216 @@ def export(self, filepaths: List[str], passphrase: Optional[str]) -> None: if passphrase: metadata[self._DISK_ENCRYPTION_KEY_NAME] = passphrase - with TemporaryDirectory() as tmp_dir: - archive_path = self._create_archive( - archive_dir=tmp_dir, - archive_fn=self._DISK_FN, - metadata=metadata, - filepaths=filepaths, - ) - status = self._run_qrexec_export(archive_path) + self.tmpdir = mkdtemp() + archive_path = self._create_archive( + archive_dir=self.tmpdir, + archive_fn=self._DISK_FN, + metadata=metadata, + filepaths=filepaths, + ) - self.export_succeeded.emit(status) - logger.debug(f"Status {status}") + # Emits status through callbacks + self._run_qrexec_export( + archive_path, self._on_export_process_complete, self._on_export_process_error + ) - except ExportError as e: + except IOError as e: logger.error("Export failed") logger.debug(f"Export failed: {e}") - self.export_failed.emit(e) + self.export_state_changed.emit(ExportStatus.ERROR_EXPORT) + + # ExportStatus.ERROR_MISSING_FILES + except ExportError as err: + if err.status: + logger.error("Export failed while creating archive") + self.export_state_changed.emit(ExportError(err.status)) + else: + logger.error("Export failed while creating archive (no status supplied)") + self.export_state_changed.emit(ExportError(ExportStatus.ERROR_EXPORT)) + + def _run_qrexec_export( + self, archive_path: str, success_callback: Callable, error_callback: Callable + ) -> None: + """ + Send the archive to the Export VM, where the archive will be processed. + Uses qrexec-client-vm (via QProcess). Results are emitted via the + `finished` signal; errors are reported via `onError`. User-defined callback + functions must be connected to those signals. - self.export_completed.emit(filepaths) + Args: + archive_path (str): The path to the archive to be processed. + success_callback, err_callback: Callback functions to connect to the success and + error signals of QProcess. They are included to accommodate the print functions, + which still use separate signals for print preflight, print, and error states, but + can be removed in favour of a generic success callback and error callback when the + print code is updated. + Any callbacks must call _cleanup_tmpdir() to remove the temporary directory that held + the files to be exported. + """ + # There are already talks of switching to a QVM-RPC implementation for unlocking devices + # and exporting files, so it's important to remember to shell-escape what we pass to the + # shell, even if for the time being we're already protected against shell injection via + # Python's implementation of subprocess, see + # https://docs.python.org/3/library/subprocess.html#security-considerations + qrexec = "/usr/bin/qrexec-client-vm" + args = [ + quote("--"), + quote("sd-devices"), + quote("qubes.OpenInVM"), + quote("/usr/lib/qubes/qopen-in-vm"), + quote("--view-only"), + quote("--"), + quote(archive_path), + ] + + self.process = QProcess() + + self.process.finished.connect(success_callback) + self.process.errorOccurred.connect(error_callback) + + self.process.start(qrexec, args) + + def _cleanup_tmpdir(self): + """ + Should be called in all qrexec completion callbacks. + """ + if self.tmpdir and os.path.exists(self.tmpdir): + shutil.rmtree(self.tmpdir) - def print(self, filepaths: List[str]) -> None: + def _on_export_process_complete(self): """ - Bundle files at self._filepaths_list into tarball and send for - printing via qrexec. + Callback, handle and emit QProcess result. As with all such callbacks, + the method signature cannot change. """ - try: - logger.debug("Beginning print") + self._cleanup_tmpdir() + # securedrop-export writes status to stderr + if self.process: + err = self.process.readAllStandardError() + + logger.debug(f"stderr: {err}") + + try: + result = err.data().decode("utf-8").strip() + if result: + logger.debug(f"Result is {result}") + # This is a bit messy, but make sure we are just taking the last line + # (no-op if no newline, since we already stripped whitespace above) + status_string = result.split("\n")[-1] + self.export_state_changed.emit(ExportStatus(status_string)) - with TemporaryDirectory() as tmp_dir: - archive_path = self._create_archive( - archive_dir=tmp_dir, - archive_fn=self._PRINT_FN, - metadata=self._PRINT_METADATA, - filepaths=filepaths, - ) - status = self._run_qrexec_export(archive_path) - self.print_succeeded.emit(status) - logger.debug(f"Status {status}") + else: + logger.error("Export preflight returned empty result") + self.export_state_changed.emit(ExportStatus.UNEXPECTED_RETURN_STATUS) - except ExportError as e: - logger.error("Export failed") - logger.debug(f"Export failed: {e}") - self.print_failed.emit(e) + except ValueError as e: + logger.debug(f"Export preflight returned unexpected value: {e}") + logger.error("Export preflight returned unexpected value") + self.export_state_changed.emit(ExportStatus.UNEXPECTED_RETURN_STATUS) - self.export_completed.emit(filepaths) + def _on_export_process_error(self): + """ + Callback, called if QProcess cannot complete export. As with all such, the method + signature cannot change. + """ + self._cleanup_tmpdir() + if self.process: + err = self.process.readAllStandardError().data().decode("utf-8").strip() + + logger.error(f"Export process error: {err}") + self.export_state_changed.emit(ExportStatus.CALLED_PROCESS_ERROR) - def _run_qrexec_export(self, archive_path: str) -> ExportStatus: + def _on_print_preflight_complete(self): + """ + Print preflight completion callback. """ - Make the subprocess call to send the archive to the Export VM, where the archive will be - processed. + self._cleanup_tmpdir() + if self.process: + output = self.process.readAllStandardError().data().decode("utf-8").strip() + try: + status = ExportStatus(output) + if status == ExportStatus.PRINT_PREFLIGHT_SUCCESS: + self.print_preflight_check_succeeded.emit(status) + logger.debug("Print preflight success") + else: + logger.debug(f"Print preflight failure ({status.value})") + self.print_preflight_check_failed.emit(ExportError(status)) - Args: - archive_path (str): The path to the archive to be processed. + except ValueError as error: + logger.debug(f"Print preflight check failed: {error}") + logger.error("Print preflight check failed") + self.print_preflight_check_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) - Returns: - str: The export status returned from the Export VM processing script. + def _on_print_prefight_error(self): + """ + Print Preflight error callback. Occurs when the QProcess itself fails. + """ + self._cleanup_tmpdir() + if self.process: + err = self.process.readAllStandardError().data().decode("utf-8").strip() + logger.debug(f"Print preflight error: {err}") + self.print_preflight_check_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) + + # Todo: not sure if we need to connect here, since the print dialog is managed by sd-devices. + # We can probably use the export callback. + def _on_print_success(self): + self._cleanup_tmpdir() + logger.debug("Print success") + self.print_succeeded.emit(ExportStatus.PRINT_SUCCESS) + # TODO: Previously emitted [filepaths] + self.export_completed.emit([]) + + def end_process(self) -> None: + """ + Tell QProcess to quit if it hasn't already. + Connected to the ExportWizard's `finished` signal, which fires + when the dialog is closed, cancelled, or finished. + """ + self._cleanup_tmpdir() + logger.debug("Terminate process") + if self.process is not None and not self.process.waitForFinished(50): + self.process.terminate() + + def _on_print_error(self): + """ + Error callback for print qrexec. + """ + self._cleanup_tmpdir() + err = self.process.readAllStandardError() + logger.debug(f"Print error: {err}") + self.print_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) - Raises: - ExportError: Raised if (1) CalledProcessError is encountered, which can occur when - trying to start the Export VM when the USB device is not attached, or (2) when - the return code from `check_output` is not 0. + def print(self, filepaths: List[str]) -> None: + """ + Bundle files at filepaths into tarball and send for + printing via qrexec. """ try: - # There are already talks of switching to a QVM-RPC implementation for unlocking devices - # and exporting files, so it's important to remember to shell-escape what we pass to the - # shell, even if for the time being we're already protected against shell injection via - # Python's implementation of subprocess, see - # https://docs.python.org/3/library/subprocess.html#security-considerations - output = subprocess.check_output( - [ - quote("qrexec-client-vm"), - quote("--"), - quote("sd-devices"), - quote("qubes.OpenInVM"), - quote("/usr/lib/qubes/qopen-in-vm"), - quote("--view-only"), - quote("--"), - quote(archive_path), - ], - stderr=subprocess.STDOUT, + logger.debug("Beginning print") + + self.tmpdir = mkdtemp() + archive_path = self._create_archive( + archive_dir=self.tmpdir, + archive_fn=self._PRINT_FN, + metadata=self._PRINT_METADATA, + filepaths=filepaths, ) - result = output.decode("utf-8").strip() + self._run_qrexec_export(archive_path, self._on_print_success, self._on_print_error) + + except IOError as e: + logger.error("Export failed") + logger.debug(f"Export failed: {e}") + self.print_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) - return ExportStatus(result) + # ExportStatus.ERROR_MISSING_FILES + except ExportError as err: + if err.status: + logger.error("Print failed while creating archive") + self.print_failed.emit(ExportError(err.status)) + else: + logger.error("Print failed while creating archive (no status supplied)") + self.print_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) - except ValueError as e: - logger.debug(f"Export subprocess returned unexpected value: {e}") - raise ExportError(ExportStatus.UNEXPECTED_RETURN_STATUS) - except subprocess.CalledProcessError as e: - logger.error("Subprocess failed") - logger.debug(f"Subprocess failed: {e}") - raise ExportError(ExportStatus.CALLED_PROCESS_ERROR) + self.export_completed.emit(filepaths) def _create_archive( self, archive_dir: str, archive_fn: str, metadata: dict, filepaths: List[str] = [] diff --git a/client/securedrop_client/gui/actions.py b/client/securedrop_client/gui/actions.py index ecca68466..ff189f086 100644 --- a/client/securedrop_client/gui/actions.py +++ b/client/securedrop_client/gui/actions.py @@ -16,10 +16,11 @@ from securedrop_client.conversation import Transcript as ConversationTranscript from securedrop_client.db import Source from securedrop_client.gui.base import ModalDialog -from securedrop_client.gui.conversation import ExportDevice, ExportDialog +from securedrop_client.gui.conversation import ExportDevice from securedrop_client.gui.conversation import ( PrintTranscriptDialog as PrintConversationTranscriptDialog, ) +from securedrop_client.gui.conversation.export import ExportWizard from securedrop_client.logic import Controller from securedrop_client.utils import safe_mkdir @@ -212,8 +213,7 @@ def __init__( @pyqtSlot() def _on_triggered(self) -> None: """ - (Re-)generates the conversation transcript and opens a confirmation dialog to export it, - in the manner of the existing ExportDialog. + (Re-)generates the conversation transcript and opens export wizard. """ file_path = ( Path(self.controller.data_dir) @@ -235,8 +235,8 @@ def _on_triggered(self) -> None: # by the operating system. with open(file_path, "r") as f: export_device = ExportDevice() - dialog = ExportDialog(export_device, TRANSCRIPT_FILENAME, [str(file_path)]) - dialog.exec() + wizard = ExportWizard(export_device, TRANSCRIPT_FILENAME, [str(file_path)]) + wizard.exec() class ExportConversationAction(QAction): # pragma: nocover @@ -264,9 +264,8 @@ def __init__( @pyqtSlot() def _on_triggered(self) -> None: """ - (Re-)generates the conversation transcript and opens a confirmation dialog to export it - alongside all the (attached) files that are downloaded, in the manner - of the existing ExportDialog. + (Re-)generates the conversation transcript and opens export wizard to export it + alongside all the (attached) files that are downloaded. """ if self._state is not None: id = self._state.selected_conversation @@ -292,7 +291,7 @@ def _prepare_to_export(self) -> None: """ (Re-)generates the conversation transcript and opens a confirmation dialog to export it alongside all the (attached) files that are downloaded, in the manner - of the existing ExportDialog. + of the existing ExportWizard. """ transcript_location = ( Path(self.controller.data_dir) @@ -332,12 +331,12 @@ def _prepare_to_export(self) -> None: else: summary = _("all files and transcript") - dialog = ExportDialog( + wizard = ExportWizard( export_device, summary, [str(file_location) for file_location in file_locations], ) - dialog.exec() + wizard.exec() def _on_confirmation_dialog_accepted(self) -> None: self._prepare_to_export() diff --git a/client/securedrop_client/gui/conversation/__init__.py b/client/securedrop_client/gui/conversation/__init__.py index 11729f801..219c00465 100644 --- a/client/securedrop_client/gui/conversation/__init__.py +++ b/client/securedrop_client/gui/conversation/__init__.py @@ -4,6 +4,6 @@ # Import classes here to make possible to import them from securedrop_client.gui.conversation from .delete import DeleteConversationDialog # noqa: F401 from .export import Export as ExportDevice # noqa: F401 -from .export import ExportDialog as ExportDialog # noqa: F401 +from .export import ExportWizard as ExportWizard # noqa: F401 from .export import PrintDialog as PrintFileDialog # noqa: F401 from .export import PrintTranscriptDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/export/__init__.py b/client/securedrop_client/gui/conversation/export/__init__.py index 8de6acbe7..328c19e43 100644 --- a/client/securedrop_client/gui/conversation/export/__init__.py +++ b/client/securedrop_client/gui/conversation/export/__init__.py @@ -1,4 +1,4 @@ from ....export import Export # noqa: F401 -from .export_dialog import ExportDialog # noqa: F401 +from .export_wizard import ExportWizard # noqa: F401 from .print_dialog import PrintDialog # noqa: F401 from .print_transcript_dialog import PrintTranscriptDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/export/dialog_button.css b/client/securedrop_client/gui/conversation/export/dialog_button.css new file mode 100644 index 000000000..132952a4b --- /dev/null +++ b/client/securedrop_client/gui/conversation/export/dialog_button.css @@ -0,0 +1,29 @@ +#ModalDialog_button_box QPushButton#ModalDialog_primary_button { + background-color: #2a319d; + color: #fff; +} + +#ModalDialog.dangerous #ModalDialog_button_box QPushButton { + border-color: #ff3366; + color: #ff3366; +} + +#ModalDialog.dangerous #ModalDialog_button_box QPushButton#ModalDialog_primary_button { + background-color: #ff3366; + border-color: #ff3366; + color: #ffffff; +} + +#ModalDialog_button_box QPushButton#ModalDialog_primary_button::disabled { + border: 2px solid #c2c4e3; + background-color: #c2c4e3; + color: #e1e2f1; +} + +#ModalDialog_button_box QPushButton#ModalDialog_primary_button_active { + background-color: #f1f1f6; + color: #fff; + border: 2px solid #f1f1f6; + margin: 0; + height: 40px; +} diff --git a/client/securedrop_client/gui/conversation/export/dialog_message.css b/client/securedrop_client/gui/conversation/export/dialog_message.css new file mode 100644 index 000000000..20415fe9b --- /dev/null +++ b/client/securedrop_client/gui/conversation/export/dialog_message.css @@ -0,0 +1,13 @@ +#ModalDialog_error_details { + margin: 0px 40px 0px 36px; + font-family: 'Montserrat'; + font-size: 16px; + color: #ff0064; +} + +#ModalDialog_error_details_active { + margin: 0px 40px 0px 36px; + font-family: 'Montserrat'; + font-size: 16px; + color: #ff66c4; +} diff --git a/client/securedrop_client/gui/conversation/export/export_dialog.py b/client/securedrop_client/gui/conversation/export/export_dialog.py deleted file mode 100644 index b1bdbde7e..000000000 --- a/client/securedrop_client/gui/conversation/export/export_dialog.py +++ /dev/null @@ -1,289 +0,0 @@ -""" -A dialog that allows journalists to export sensitive files to a USB drive. -""" -from gettext import gettext as _ -from typing import List, Optional - -from pkg_resources import resource_string -from PyQt5.QtCore import QSize, Qt, pyqtSlot -from PyQt5.QtGui import QColor, QFont -from PyQt5.QtWidgets import QGraphicsDropShadowEffect, QLineEdit, QVBoxLayout, QWidget - -from securedrop_client.export_status import ExportError, ExportStatus -from securedrop_client.gui.base import ModalDialog, PasswordEdit, SecureQLabel -from securedrop_client.gui.base.checkbox import SDCheckBox - -from ....export import Export - - -class ExportDialog(ModalDialog): - DIALOG_CSS = resource_string(__name__, "dialog.css").decode("utf-8") - - PASSPHRASE_LABEL_SPACING = 0.5 - NO_MARGIN = 0 - FILENAME_WIDTH_PX = 260 - - def __init__(self, device: Export, summary_text: str, filepaths: List[str]) -> None: - super().__init__() - self.setStyleSheet(self.DIALOG_CSS) - - self._device = device - self.filepaths = filepaths - - # This could be the filename, if a single file, or "{n} files" - self.summary_text = SecureQLabel( - summary_text, wordwrap=False, max_length=self.FILENAME_WIDTH_PX - ).text() - # Hold onto the error status we receive from the Export VM - self.error_status: Optional[ExportStatus] = None - - # Connect device signals to slots - self._device.export_preflight_check_succeeded.connect( - self._on_export_preflight_check_succeeded - ) - self._device.export_preflight_check_failed.connect(self._on_export_preflight_check_failed) - self._device.export_succeeded.connect(self._on_export_succeeded) - self._device.export_failed.connect(self._on_export_failed) - - # Connect parent signals to slots - self.continue_button.setEnabled(False) - self.continue_button.clicked.connect(self._run_preflight) - - # Dialog content - self.starting_header = _( - "Preparing to export:
" '{}' - ).format(self.summary_text) - self.ready_header = _( - "Ready to export:
" '{}' - ).format(self.summary_text) - self.insert_usb_header = _("Insert encrypted USB drive") - self.passphrase_header = _("Enter passphrase for USB drive") - self.success_header = _("Export successful") - self.error_header = _("Export failed") - self.starting_message = _( - "

Understand the risks before exporting files

" - "Malware" - "
" - "This workstation lets you open files securely. If you open files on another " - "computer, any embedded malware may spread to your computer or network. If you are " - "unsure how to manage this risk, please print the file, or contact your " - "administrator." - "

" - "Anonymity" - "
" - "Files submitted by sources may contain information or hidden metadata that " - "identifies who they are. To protect your sources, please consider redacting files " - "before working with them on network-connected computers." - ) - self.exporting_message = _("Exporting: {}").format(self.summary_text) - self.insert_usb_message = _( - "Please insert one of the export drives provisioned specifically " - "for the SecureDrop Workstation." - ) - self.usb_error_message = _( - "Either the drive is not encrypted or there is something else wrong with it." - ) - self.passphrase_error_message = _("The passphrase provided did not work. Please try again.") - self.generic_error_message = _("See your administrator for help.") - self.success_message = _( - "Remember to be careful when working with files outside of your Workstation machine." - ) - - # Passphrase Form - self.passphrase_form = QWidget() - self.passphrase_form.setObjectName("FileDialog_passphrase_form") - passphrase_form_layout = QVBoxLayout() - passphrase_form_layout.setContentsMargins( - self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN - ) - self.passphrase_form.setLayout(passphrase_form_layout) - passphrase_label = SecureQLabel(_("Passphrase")) - font = QFont() - font.setLetterSpacing(QFont.AbsoluteSpacing, self.PASSPHRASE_LABEL_SPACING) - passphrase_label.setFont(font) - self.passphrase_field = PasswordEdit(self) - self.passphrase_field.setEchoMode(QLineEdit.Password) - effect = QGraphicsDropShadowEffect(self) - effect.setOffset(0, -1) - effect.setBlurRadius(4) - effect.setColor(QColor("#aaa")) - self.passphrase_field.setGraphicsEffect(effect) - - check = SDCheckBox() - check.checkbox.stateChanged.connect(self.passphrase_field.on_toggle_password_Action) - - passphrase_form_layout.addWidget(passphrase_label) - passphrase_form_layout.addWidget(self.passphrase_field) - passphrase_form_layout.addWidget(check, alignment=Qt.AlignRight) - self.body_layout.addWidget(self.passphrase_form) - self.passphrase_form.hide() - - self._show_starting_instructions() - self.start_animate_header() - self._run_preflight() - - def _show_starting_instructions(self) -> None: - self.header.setText(self.starting_header) - self.body.setText(self.starting_message) - self.adjustSize() - - def _show_passphrase_request_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export) - self.header.setText(self.passphrase_header) - self.continue_button.setText(_("SUBMIT")) - self.header_line.hide() - self.error_details.hide() - self.body.hide() - self.passphrase_field.setFocus() - self.passphrase_form.show() - self.adjustSize() - - def _show_passphrase_request_message_again(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._export) - self.header.setText(self.passphrase_header) - self.error_details.setText(self.passphrase_error_message) - self.continue_button.setText(_("SUBMIT")) - self.header_line.hide() - self.body.hide() - self.error_details.show() - self.passphrase_field.setFocus() - self.passphrase_form.show() - self.adjustSize() - - def _show_success_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self.close) - self.header.setText(self.success_header) - self.continue_button.setText(_("DONE")) - self.body.setText(self.success_message) - self.cancel_button.hide() - self.error_details.hide() - self.passphrase_form.hide() - self.header_line.show() - self.body.show() - self.adjustSize() - - def _show_insert_usb_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._run_preflight) - self.header.setText(self.insert_usb_header) - self.continue_button.setText(_("CONTINUE")) - self.body.setText(self.insert_usb_message) - self.error_details.hide() - self.passphrase_form.hide() - self.header_line.show() - self.body.show() - self.adjustSize() - - def _show_insert_encrypted_usb_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self._run_preflight) - self.header.setText(self.insert_usb_header) - self.error_details.setText(self.usb_error_message) - self.continue_button.setText(_("CONTINUE")) - self.body.setText(self.insert_usb_message) - self.passphrase_form.hide() - self.header_line.show() - self.error_details.show() - self.body.show() - self.adjustSize() - - def _show_generic_error_message(self) -> None: - self.continue_button.clicked.disconnect() - self.continue_button.clicked.connect(self.close) - self.continue_button.setText(_("DONE")) - self.header.setText(self.error_header) - self.body.setText( # nosemgrep: semgrep.untranslated-gui-string - "{}: {}".format(self.error_status, self.generic_error_message) - ) - self.error_details.hide() - self.passphrase_form.hide() - self.header_line.show() - self.body.show() - self.adjustSize() - - @pyqtSlot() - def _run_preflight(self) -> None: - self._device.run_export_preflight_checks() - - @pyqtSlot() - def _export(self, checked: bool = False) -> None: - self.start_animate_activestate() - self.cancel_button.setEnabled(False) - self.passphrase_field.setDisabled(True) - - # TODO: If the drive is already unlocked, the passphrase field will be empty. - # This is ok, but could violate expectations. The password should be passed - # via qrexec in future, to avoid writing it to even a temporary file at all. - self._device.export(self.filepaths, self.passphrase_field.text()) - - @pyqtSlot(object) - def _on_export_preflight_check_succeeded(self, result: ExportStatus) -> None: - # If the continue button is disabled then this is the result of a background preflight check - self.stop_animate_header() - self.header_icon.update_image("savetodisk.svg", QSize(64, 64)) - self.header.setText(self.ready_header) - if not self.continue_button.isEnabled(): - self.continue_button.clicked.disconnect() - if result == ExportStatus.DEVICE_WRITABLE: - # Skip password prompt, we're there - self.continue_button.clicked.connect(self._export) - else: # result == ExportStatus.DEVICE_LOCKED - self.continue_button.clicked.connect(self._show_passphrase_request_message) - self.continue_button.setEnabled(True) - self.continue_button.setFocus() - return - - # Skip passphrase prompt if device is unlocked - if result == ExportStatus.DEVICE_WRITABLE: - self._export() - else: - self._show_passphrase_request_message() - - @pyqtSlot(object) - def _on_export_preflight_check_failed(self, error: ExportError) -> None: - self.stop_animate_header() - self.header_icon.update_image("savetodisk.svg", QSize(64, 64)) - self._update_dialog(error.status) - - @pyqtSlot(object) - def _on_export_succeeded(self, status: ExportStatus) -> None: - self.stop_animate_activestate() - self._show_success_message() - - @pyqtSlot(object) - def _on_export_failed(self, error: ExportError) -> None: - self.stop_animate_activestate() - self.cancel_button.setEnabled(True) - self.passphrase_field.setDisabled(False) - self._update_dialog(error.status) - - def _update_dialog(self, error_status: ExportStatus) -> None: - self.error_status = error_status - # If the continue button is disabled then this is the result of a background preflight check - if not self.continue_button.isEnabled(): - self.continue_button.clicked.disconnect() - if self.error_status == ExportStatus.ERROR_UNLOCK_LUKS: - self.continue_button.clicked.connect(self._show_passphrase_request_message_again) - elif self.error_status == ExportStatus.NO_DEVICE_DETECTED: # fka USB_NOT_CONNECTED - self.continue_button.clicked.connect(self._show_insert_usb_message) - elif ( - self.error_status == ExportStatus.INVALID_DEVICE_DETECTED - ): # fka DISK_ENCRYPTION_NOT_SUPPORTED_ERROR - self.continue_button.clicked.connect(self._show_insert_encrypted_usb_message) - else: - self.continue_button.clicked.connect(self._show_generic_error_message) - - self.continue_button.setEnabled(True) - self.continue_button.setFocus() - else: - if self.error_status == ExportStatus.ERROR_UNLOCK_LUKS: - self._show_passphrase_request_message_again() - elif self.error_status == ExportStatus.NO_DEVICE_DETECTED: - self._show_insert_usb_message() - elif self.error_status == ExportStatus.INVALID_DEVICE_DETECTED: - self._show_insert_encrypted_usb_message() - else: - self._show_generic_error_message() diff --git a/client/securedrop_client/gui/conversation/export/export_wizard.py b/client/securedrop_client/gui/conversation/export/export_wizard.py new file mode 100644 index 000000000..2630b3b98 --- /dev/null +++ b/client/securedrop_client/gui/conversation/export/export_wizard.py @@ -0,0 +1,222 @@ +import logging +from gettext import gettext as _ +from typing import List + +from pkg_resources import resource_string +from PyQt5.QtCore import QSize, Qt, pyqtSlot +from PyQt5.QtGui import QIcon, QKeyEvent +from PyQt5.QtWidgets import QApplication, QWizard, QWizardPage + +from securedrop_client.export import Export +from securedrop_client.export_status import ExportStatus +from securedrop_client.gui.base import SecureQLabel +from securedrop_client.gui.conversation.export.export_wizard_constants import Pages, STATUS_MESSAGES +from securedrop_client.gui.conversation.export.export_wizard_page import ( + ErrorPage, + FinalPage, + InsertUSBPage, + PassphraseWizardPage, + PreflightPage, +) +from securedrop_client.resources import load_movie + +logger = logging.getLogger(__name__) + + +class ExportWizard(QWizard): + """ + Guide user through the steps of exporting to a USB. + """ + + PASSPHRASE_LABEL_SPACING = 0.5 + NO_MARGIN = 0 + FILENAME_WIDTH_PX = 260 + BUTTON_CSS = resource_string(__name__, "dialog_button.css").decode("utf-8") + + # If the drive is unlocked, we don't need a passphrase; if we do need one, + # it's populated later. + PASS_PLACEHOLDER_FIELD = "" + + def __init__(self, export: Export, summary_text: str, filepaths: List[str]) -> None: + parent = QApplication.activeWindow() + super().__init__(parent) + self.export = export + self.summary_text = SecureQLabel( + summary_text, wordwrap=False, max_length=self.FILENAME_WIDTH_PX + ).text() + self.filepaths = filepaths + self.current_status = None # Optional[ExportStatus] + + # Signal from qrexec command runner + self.export.export_state_changed.connect(self.on_status_received) + + # Clean up export on dialog closed signal + self.finished.connect(self.export.end_process) + + self._set_layout() + self._set_pages() + self._style_buttons() + + def keyPressEvent(self, event: QKeyEvent) -> None: + if event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return: + if self.cancel_button.hasFocus(): + self.cancel_button.click() + else: + self.next_button.click() + else: + super().keyPressEvent(event) + + def text(self) -> str: + """A text-only representation of the dialog.""" + return self.body.text() + + def _style_buttons(self) -> None: + self.next_button = self.button(QWizard.WizardButton.NextButton) + self.next_button.clicked.connect(self.request_export) + self.next_button.setStyleSheet(self.BUTTON_CSS) + self.cancel_button = self.button(QWizard.WizardButton.CancelButton) + self.cancel_button.setStyleSheet(self.BUTTON_CSS) + + # Activestate animation + self.button_animation = load_movie("activestate-wide.gif") + self.button_animation.setScaledSize(QSize(32, 32)) + self.button_animation.frameChanged.connect(self.animate_activestate) + + def animate_activestate(self) -> None: + self.next_button.setIcon(QIcon(self.button_animation.currentPixmap())) + + def start_animate_activestate(self) -> None: + self.button_animation.start() + self.next_button.setMinimumSize(QSize(142, 43)) + # Reset widget stylesheets + self.next_button.setStyleSheet("") + self.next_button.setObjectName("ModalDialog_primary_button_active") + self.next_button.setStyleSheet(self.BUTTON_CSS) + + def stop_animate_activestate(self) -> None: + self.next_button.setIcon(QIcon()) + self.button_animation.stop() + # Reset widget stylesheets + self.next_button.setStyleSheet("") + self.next_button.setObjectName("ModalDialog_primary_button") + self.next_button.setStyleSheet(self.BUTTON_CSS) + + def _set_layout(self) -> None: + self.setWindowTitle(f"Export {self.summary_text}") + self.setModal(False) + self.setOptions( + QWizard.NoBackButtonOnLastPage + | QWizard.NoCancelButtonOnLastPage + | QWizard.NoBackButtonOnStartPage + ) + + def _set_pages(self) -> None: + for id, page in [ + (Pages.PREFLIGHT, self._create_preflight()), + (Pages.ERROR, self._create_errorpage()), + (Pages.INSERT_USB, self._create_insert_usb()), + (Pages.UNLOCK_USB, self._create_passphrase_prompt()), + (Pages.EXPORT_DONE, self._create_done()), + ]: + self.setPage(id, page) + + # Nice to have, but steals the focus from the password field after 1 character is typed. + # Probably another way to have it be based on validating the status + # page.completeChanged.connect(lambda: self._set_focus(QWizard.WizardButton.NextButton)) + + @pyqtSlot(int) + def _set_focus(self, which: QWizard.WizardButton) -> None: + self.button(which).setFocus() + + def request_export(self) -> None: + logger.debug("Request export") + # Registered fields let us access the passphrase field + # of the PassphraseRequestPage from the wizard parent + passphrase_untrusted = self.field("passphrase") + if str(passphrase_untrusted) is not None: + self.export.export(self.filepaths, str(passphrase_untrusted)) + else: + self.export.export(self.filepaths, self.PASS_PLACEHOLDER_FIELD) + + def request_export_preflight(self) -> None: + logger.debug("Request preflight check") + self.export.run_export_preflight_checks() + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus) -> None: + """ + Update the wizard position based on incoming ExportStatus. + If a status is shown that represents a removed device, + rewind the wizard to the appropriate pane. + + To update the text on an individual page, the page listens + for this signal and can call `update_content` in the listener. + """ + logger.debug(f"Wizard received {status.value}. Current page is {type(self.currentPage())}") + + # Unrecoverable - end the wizard + if status in [ + ExportStatus.ERROR_MOUNT, + ExportStatus.ERROR_EXPORT, + ExportStatus.ERROR_MISSING_FILES, + ExportStatus.DEVICE_ERROR, + ExportStatus.CALLED_PROCESS_ERROR, + ExportStatus.UNEXPECTED_RETURN_STATUS, + ]: + logger.error(f"Encountered {status.value}, cannot export") + self.end_wizard_with_error(status) + return + + target = None # Optional[PageEnum] + if status in [ + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.MULTI_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ]: + target = Pages.INSERT_USB + elif status in [ExportStatus.DEVICE_LOCKED, ExportStatus.ERROR_UNLOCK_LUKS]: + target = Pages.UNLOCK_USB + + # Someone may have yanked out or unmounted a USB + if target and self.currentId() > target: + self.rewind(target) + + # Update status + self.current_status = status + + def rewind(self, target: Pages) -> None: + """ + Navigate back to target page. + """ + logger.debug(f"Wizard: rewind from {self.currentId()} to {target}") + while self.currentId() > target: + self.back() + + def end_wizard_with_error(self, error: ExportStatus) -> None: + """ + If and end state is reached, display message and let user + end the wizard. + """ + if isinstance(self.currentPage(), PreflightPage): + # Update its status so it shows error next self.currentPage() + logger.debug("On preflight page, no reordering needed") + else: + while self.currentId() > Pages.ERROR: + self.back() + page = self.currentPage() + page.update_content(error) + + def _create_preflight(self) -> QWizardPage: + return PreflightPage(self.export, self.summary_text) + + def _create_errorpage(self) -> QWizardPage: + return ErrorPage(self.export, "") + + def _create_insert_usb(self) -> QWizardPage: + return InsertUSBPage(self.export, self.summary_text) + + def _create_passphrase_prompt(self) -> QWizardPage: + return PassphraseWizardPage(self.export) + + def _create_done(self) -> QWizardPage: + return FinalPage(self.export) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py new file mode 100644 index 000000000..ce8c0f3af --- /dev/null +++ b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py @@ -0,0 +1,47 @@ +from enum import IntEnum +from gettext import gettext as _ + +from securedrop_client.export_status import ExportStatus + +""" +Export wizard page ordering, human-readable status messages +""" + + +# Sequential list of pages (the enum value matters as a ranked ordering.) +# The reason the 'error' page is second is because the other pages have +# validation logic that means they can't be bypassed by QWizard::next. +# When we need to show an error, it's easier to go 'back' to the error +# page and set it to be a FinalPage than it is to try to skip the conditional +# pages. PyQt6 introduces behaviour that may deprecate this requirement. +class Pages(IntEnum): + PREFLIGHT = 0 + ERROR = 1 + INSERT_USB = 2 + UNLOCK_USB = 3 + EXPORT_DONE = 4 + + +# Human-readable status info +STATUS_MESSAGES = { + ExportStatus.NO_DEVICE_DETECTED: _("No device detected"), + ExportStatus.MULTI_DEVICE_DETECTED: _("Too many USBs; please insert one supported device."), + ExportStatus.INVALID_DEVICE_DETECTED: _( + "Either the drive is not encrypted or there is something else wrong with it." + ), + ExportStatus.DEVICE_WRITABLE: _("The device is ready for export."), + ExportStatus.DEVICE_LOCKED: _("The device is locked."), + ExportStatus.ERROR_UNLOCK_LUKS: _("The passphrase provided did not work. Please try again."), + ExportStatus.ERROR_MOUNT: _("Error mounting drive"), + ExportStatus.ERROR_EXPORT: _("Error during export"), + ExportStatus.ERROR_EXPORT_CLEANUP: _( + "Files were exported succesfully, but the drive could not be unmounted" + ), + ExportStatus.SUCCESS_EXPORT: _("Export successful"), + ExportStatus.DEVICE_ERROR: _( + "Error encountered with this device. See your administrator for help." + ), + ExportStatus.ERROR_MISSING_FILES: _("Files were moved or missing and could not be exported."), + ExportStatus.CALLED_PROCESS_ERROR: _("Error encountered. Please contact support."), + ExportStatus.UNEXPECTED_RETURN_STATUS: _("Error encountered. Please contact support."), +} diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_page.py b/client/securedrop_client/gui/conversation/export/export_wizard_page.py new file mode 100644 index 000000000..0609bc086 --- /dev/null +++ b/client/securedrop_client/gui/conversation/export/export_wizard_page.py @@ -0,0 +1,464 @@ +import logging +from gettext import gettext as _ + +from pkg_resources import resource_string +from PyQt5.QtCore import QSize, Qt, pyqtSlot +from PyQt5.QtGui import QColor, QFont, QPixmap +from PyQt5.QtWidgets import ( + QApplication, + QGraphicsDropShadowEffect, + QHBoxLayout, + QLabel, + QLayout, + QLineEdit, + QSizePolicy, + QVBoxLayout, + QWidget, + QWizardPage, +) + +from securedrop_client.export import Export +from securedrop_client.export_status import ExportStatus +from securedrop_client.gui.base import PasswordEdit, SecureQLabel +from securedrop_client.gui.base.checkbox import SDCheckBox +from securedrop_client.gui.base.misc import SvgLabel +from securedrop_client.gui.conversation.export.export_wizard_constants import STATUS_MESSAGES, Pages +from securedrop_client.resources import load_movie + +logger = logging.getLogger(__name__) + + +class ExportWizardPage(QWizardPage): + """ + Base class for all export wizard pages. Individual pages should inherit + from this class to: + * include additional layout items + * implement dynamic ordering (i.e., if the next window varies + depending on the result of the previous action, in which case the + `nextId()` method must be overwritten) + * implement custom validation (logic that prevents a user + from skipping to the next page until conditions are met) + + Every wizard page has: + * A header (page title) + * Body (instructions) + * Optional error_instructions (Additional text that is hidden but + appears on recoverable error to help the user advance to the next stage) + * Directional buttons (continue/done, cancel) + """ + + DIALOG_CSS = resource_string(__name__, "dialog.css").decode("utf-8") + ERROR_DETAILS_CSS = resource_string(__name__, "dialog_message.css").decode("utf-8") + + MARGIN = 40 + PASSPHRASE_LABEL_SPACING = 0.5 + NO_MARGIN = 0 + FILENAME_WIDTH_PX = 260 + + def __init__(self, export: Export, header: str, body: str) -> None: + parent = QApplication.activeWindow() + super().__init__(parent) + self.export = export + self.header_text = header + self.body_text = body + self.status = None # Optional[ExportStatus] + self._is_complete = True # Won't override parent method unless explicitly set to False + + self.setLayout(self._build_layout()) + + # Listen for export updates from export + self.export.export_state_changed.connect(self.on_status_received) + + def set_complete(self, is_complete: bool) -> None: + """ + Flag a page as being incomplete. (Disables Next button) + """ + self._is_complete = is_complete + + def isComplete(self) -> bool: + return self._is_complete and super().isComplete() + + def _build_layout(self) -> QVBoxLayout: + """ + Create parent layout, draw elements, return parent layout + """ + self.setStyleSheet(self.DIALOG_CSS) + parent_layout = QVBoxLayout() + parent_layout.setContentsMargins(self.MARGIN, self.MARGIN, self.MARGIN, self.MARGIN) + + # Header for icon and task title + header_container = QWidget() + header_container_layout = QHBoxLayout() + header_container.setLayout(header_container_layout) + self.header_icon = SvgLabel("blank.svg", svg_size=QSize(64, 64)) + self.header_icon.setObjectName("ModalDialog_header_icon") + self.header_spinner = QPixmap() + self.header_spinner_label = QLabel() + self.header_spinner_label.setObjectName("ModalDialog_header_spinner") + self.header_spinner_label.setMinimumSize(64, 64) + self.header_spinner_label.setVisible(False) + self.header_spinner_label.setPixmap(self.header_spinner) + self.header = QLabel() + self.header.setObjectName("ModalDialog_header") + header_container_layout.addWidget(self.header_icon) + header_container_layout.addWidget(self.header_spinner_label) + header_container_layout.addWidget(self.header, alignment=Qt.AlignLeft) # Prev: AlignCenter + header_container_layout.addStretch() + self.header_line = QWidget() + self.header_line.setObjectName("ModalDialog_header_line") + + # Body to display instructions and forms + self.body = QLabel() + self.body.setObjectName("ModalDialog_body") + self.body.setWordWrap(True) + self.body.setScaledContents(True) + + body_container = QWidget() + self.body_layout = QVBoxLayout() + self.body_layout.setContentsMargins( + self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN + ) + body_container.setLayout(self.body_layout) + self.body_layout.addWidget(self.body) + self.body_layout.setSizeConstraint(QLayout.SetMinimumSize) + + # TODO: it's either like this, or in the parent layout elements + self.body_layout.setSizeConstraint(QLayout.SetMinimumSize) + + # Widget for displaying error messages (hidden by default) + self.error_details = QLabel() + self.error_details.setObjectName("ModalDialog_error_details") + self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) + self.error_details.setWordWrap(True) + self.error_details.hide() + + # Header animation + self.header_animation = load_movie("header_animation.gif") + self.header_animation.setScaledSize(QSize(64, 64)) + self.header_animation.frameChanged.connect(self.animate_header) + + # Populate text content + self.header.setText(self.header_text) + self.body.setText(self.body_text) + + # Add all the layout elements + parent_layout.addWidget(header_container) + parent_layout.addWidget(self.header_line) + parent_layout.addWidget(body_container) + parent_layout.addWidget(self.error_details) + # parent_layout.setSizeConstraint(QLayout.SetFixedSize) + + return parent_layout + + def animate_header(self) -> None: + self.header_spinner_label.setPixmap(self.header_animation.currentPixmap()) + + def animate_activestate(self) -> None: + pass # Animation handled in parent + + def start_animate_activestate(self) -> None: + self.error_details.setStyleSheet("") + self.error_details.setObjectName("ModalDialog_error_details_active") + self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) + + def start_animate_header(self) -> None: + self.header_icon.setVisible(False) + self.header_spinner_label.setVisible(True) + self.header_animation.start() + + def stop_animate_activestate(self) -> None: + self.error_details.setStyleSheet("") + self.error_details.setObjectName("ModalDialog_error_details") + self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) + + def stop_animate_header(self) -> None: + self.header_icon.setVisible(True) + self.header_spinner_label.setVisible(False) + self.header_animation.stop() + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus) -> None: + raise NotImplementedError("Children must implement") + + def update_content(self, status: ExportStatus, should_show_hint: bool = False) -> None: + """ + Update page's content based on new status. + Children may re-implement this method. + """ + if not status: + logger.error("Empty status value given to update_content") + status = ExportStatus.UNEXPECTED_RETURN_STATUS + + if should_show_hint: + self.error_details.setText(STATUS_MESSAGES.get(status)) + self.error_details.show() + else: + self.error_details.hide() + + +class PreflightPage(ExportWizardPage): + def __init__(self, export, summary): + self.summary = summary + header = _( + "Preparing to export:
" '{}' + ).format(summary) + body = _( + "

Understand the risks before exporting files

" + "Malware" + "
" + "This workstation lets you open files securely. If you open files on another " + "computer, any embedded malware may spread to your computer or network. If you are " + "unsure how to manage this risk, please print the file, or contact your " + "administrator." + "

" + "Anonymity" + "
" + "Files submitted by sources may contain information or hidden metadata that " + "identifies who they are. To protect your sources, please consider redacting files " + "before working with them on network-connected computers." + ) + + super().__init__(export, header=header, body=body) + self.start_animate_header() + self.export.run_export_preflight_checks() + + def nextId(self): + """ + Override builtin to allow bypassing the password page if device is unlocked. + """ + if self.status == ExportStatus.DEVICE_WRITABLE: + logger.debug("Skip password prompt") + return Pages.EXPORT_DONE + elif self.status == ExportStatus.DEVICE_LOCKED: + logger.debug("Device locked - prompt for passphrase") + return Pages.UNLOCK_USB + elif self.status in ( + ExportStatus.CALLED_PROCESS_ERROR, + ExportStatus.DEVICE_ERROR, + ExportStatus.UNEXPECTED_RETURN_STATUS, + ): + logger.debug("Error during preflight - show error page") + return Pages.ERROR + else: + return Pages.INSERT_USB + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus): + self.stop_animate_header() + if status in ( + ExportStatus.DEVICE_LOCKED, + ExportStatus.DEVICE_WRITABLE, + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.MULTI_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ): + header = _( + "Ready to export:
" '{}' + ).format(self.summary) + self.header.setText(header) + self.status = status + + +class ErrorPage(ExportWizardPage): + def __init__(self, export, summary): + header = _("Export Failed") + summary = "" # todo + + super().__init__(export, header=header, body=summary) + + def isComplete(self) -> bool: + return False + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus): + pass + + +class InsertUSBPage(ExportWizardPage): + def __init__(self, export, summary): + self.summary = summary + header = _("Ready to export:
" '{}').format( + summary + ) + body = _( + "Please insert one of the export drives provisioned specifically " + "for the SecureDrop Workstation." + ) + super().__init__(export, header=header, body=body) + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus) -> None: + logger.debug(f"InsertUSB received {status.value}") + should_show_hint = status in ( + ExportStatus.MULTI_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ) or (self.status == status == ExportStatus.NO_DEVICE_DETECTED) + self.update_content(status, should_show_hint) + self.status = status + self.completeChanged.emit() + if status in (ExportStatus.DEVICE_LOCKED, ExportStatus.DEVICE_WRITABLE): + self.wizard().next() + + def validatePage(self) -> bool: + """ + Override method to implement custom validation logic, which + shows an error-specific hint to the user. + """ + if self.status in (ExportStatus.DEVICE_WRITABLE, ExportStatus.DEVICE_LOCKED): + self.error_details.hide() + return True + else: + logger.debug(f"Status is {self.status}") + + # Show the user a hint + if self.status in ( + ExportStatus.MULTI_DEVICE_DETECTED, + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ): + self.update_content(self.status, should_show_hint=True) + return False + else: + # Status may be None here + logger.warning("InsertUSBPage encountered unexpected status") + return super().validatePage() + + def nextId(self): + """ + Override builtin to allow bypassing the password page if device unlocked + """ + if self.status == ExportStatus.DEVICE_WRITABLE: + logger.debug("Skip password prompt") + return Pages.EXPORT_DONE + elif self.status == ExportStatus.DEVICE_LOCKED: + return Pages.UNLOCK_USB + elif self.status in (ExportStatus.UNEXPECTED_RETURN_STATUS, ExportStatus.DEVICE_ERROR): + return Pages.ERROR + else: + next = super().nextId() + logger.error("Unexpected status on InsertUSBPage {status.value}, nextID is {next}") + return next + + +class FinalPage(ExportWizardPage): + def __init__(self, export: Export) -> None: + header = _("Export successful") + body = _( + "Remember to be careful when working with files outside of your Workstation machine." + ) + super().__init__(export, header, body) + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus) -> None: + logger.debug(f"Final page received status {status}") + self.update_content(status) + self.status = status + + def update_content(self, status: ExportStatus, should_show_hint: bool = False): + header = None + body = None + if status == ExportStatus.SUCCESS_EXPORT: + header = _("Export successful") + body = _( + "Remember to be careful when working with files " + "outside of your Workstation machine." + ) + elif status == ExportStatus.ERROR_EXPORT_CLEANUP: + header = header = _("Export sucessful, but drive was not locked") + body = STATUS_MESSAGES.get(ExportStatus.ERROR_EXPORT_CLEANUP) + + else: + header = _("Working...") + + self.header.setText(header) + if body: + self.body.setText(body) + + +class PassphraseWizardPage(ExportWizardPage): + """ + Wizard page that includes a passphrase prompt field + """ + + def __init__(self, export): + header = _("Enter passphrase for USB drive") + super().__init__(export, header, body=None) + + def _build_layout(self) -> QVBoxLayout: + layout = super()._build_layout() + + # Passphrase Form + self.passphrase_form = QWidget() + self.passphrase_form.setObjectName("ModalDialog_passphrase_form") + passphrase_form_layout = QVBoxLayout() + passphrase_form_layout.setContentsMargins( + self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN + ) + self.passphrase_form.setLayout(passphrase_form_layout) + passphrase_label = SecureQLabel(_("Passphrase")) + font = QFont() + font.setLetterSpacing(QFont.AbsoluteSpacing, self.PASSPHRASE_LABEL_SPACING) + passphrase_label.setFont(font) + self.passphrase_field = PasswordEdit(self) + self.passphrase_field.setEchoMode(QLineEdit.Password) + effect = QGraphicsDropShadowEffect(self) + effect.setOffset(0, -1) + effect.setBlurRadius(4) + effect.setColor(QColor("#aaa")) + self.passphrase_field.setGraphicsEffect(effect) + + # Makes the password text accessible outside of this panel + self.registerField("passphrase*", self.passphrase_field) + + check = SDCheckBox() + check.checkbox.stateChanged.connect(self.passphrase_field.on_toggle_password_Action) + + passphrase_form_layout.addWidget(passphrase_label) + passphrase_form_layout.addWidget(self.passphrase_field) + passphrase_form_layout.addWidget(check, alignment=Qt.AlignRight) + + layout.insertWidget(1, self.passphrase_form) + return layout + + @pyqtSlot(object) + def on_status_received(self, status: ExportStatus) -> None: + logger.debug(f"Passphrase page rececived {status.value}") + should_show_hint = status in ( + ExportStatus.ERROR_UNLOCK_LUKS, + ExportStatus.ERROR_UNLOCK_GENERIC, + ) + self.update_content(status, should_show_hint) + self.status = status + self.completeChanged.emit() + if status in (ExportStatus.SUCCESS_EXPORT, ExportStatus.ERROR_EXPORT_CLEANUP): + self.wizard().next() + + def validatePage(self): + # Also to add: DEVICE_BUSY for unmounting. + # This shouldn't stop us from going "back" to an error page + return self.status in ( + ExportStatus.DEVICE_WRITABLE, + ExportStatus.SUCCESS_EXPORT, + ExportStatus.ERROR_EXPORT_CLEANUP, + ) + + def nextId(self): + if self.status == ExportStatus.SUCCESS_EXPORT: + return Pages.EXPORT_DONE + elif self.status in (ExportStatus.ERROR_UNLOCK_LUKS, ExportStatus.ERROR_UNLOCK_GENERIC): + return Pages.UNLOCK_USB + elif self.status in ( + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.MULTI_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ): + return Pages.INSERT_USB + elif self.status in ( + ExportStatus.ERROR_MOUNT, + ExportStatus.ERROR_EXPORT, + ExportStatus.ERROR_EXPORT_CLEANUP, + ExportStatus.UNEXPECTED_RETURN_STATUS, + ): + return Pages.ERROR + else: + return super().nextId() diff --git a/client/securedrop_client/gui/widgets.py b/client/securedrop_client/gui/widgets.py index 38c15e063..19b2f789c 100644 --- a/client/securedrop_client/gui/widgets.py +++ b/client/securedrop_client/gui/widgets.py @@ -81,6 +81,7 @@ ) from securedrop_client.gui.base import SecureQLabel, SvgLabel, SvgPushButton, SvgToggleButton from securedrop_client.gui.conversation import DeleteConversationDialog +from securedrop_client.gui.conversation.export import ExportWizard from securedrop_client.gui.datetime_helpers import format_datetime_local from securedrop_client.gui.source import DeleteSourceDialog from securedrop_client.logic import Controller @@ -2461,10 +2462,8 @@ def _on_export_clicked(self) -> None: export_device = conversation.ExportDevice() - self.export_dialog = conversation.ExportDialog( - export_device, self.file.filename, [file_location] - ) - self.export_dialog.show() + self.export_wizard = ExportWizard(export_device, self.file.filename, [file_location]) + self.export_wizard.show() @pyqtSlot() def _on_print_clicked(self) -> None: diff --git a/client/tests/conftest.py b/client/tests/conftest.py index eea47c558..8607ce826 100644 --- a/client/tests/conftest.py +++ b/client/tests/conftest.py @@ -5,6 +5,7 @@ from configparser import ConfigParser from datetime import datetime from uuid import uuid4 +from unittest import mock import pytest from PyQt5.QtCore import Qt @@ -22,6 +23,7 @@ Source, make_session_maker, ) +from securedrop_client.export_status import ExportStatus from securedrop_client.gui import conversation from securedrop_client.gui.main import Window from securedrop_client.logic import Controller @@ -47,7 +49,7 @@ TIME_CLICK_ACTION = 1000 TIME_RENDER_SOURCE_LIST = 20000 TIME_RENDER_CONV_VIEW = 1000 -TIME_RENDER_EXPORT_DIALOG = 1000 +TIME_RENDER_EXPORT_WIZARD = 1000 TIME_FILE_DOWNLOAD = 5000 @@ -97,38 +99,38 @@ def print_transcript_dialog(mocker, homedir): @pytest.fixture(scope="function") -def export_dialog_multifile(mocker, homedir): +def export_wizard_multifile(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) export_device = mocker.MagicMock(spec=conversation.ExportDevice) - dialog = conversation.ExportDialog( + wizard = conversation.ExportWizard( export_device, "3 files", ["/some/path/file123.jpg", "/some/path/memo.txt", "/some/path/transcript.txt"], ) - yield dialog + yield wizard @pytest.fixture(scope="function") -def export_dialog(mocker, homedir): +def export_wizard(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) export_device = mocker.MagicMock(spec=conversation.ExportDevice) - dialog = conversation.ExportDialog(export_device, "file123.jpg", ["/mock/path/to/file"]) + dialog = conversation.ExportWizard(export_device, "file123.jpg", ["/mock/path/to/file"]) yield dialog @pytest.fixture(scope="function") -def export_transcript_dialog(mocker, homedir): +def export_transcript_wizard(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) export_device = mocker.MagicMock(spec=conversation.ExportDevice) - dialog = conversation.ExportDialog( + dialog = conversation.ExportWizard( export_device, "transcript.txt", ["/some/path/transcript.txt"] ) @@ -168,13 +170,105 @@ def homedir(i18n): @pytest.fixture(scope="function") -def mock_export(): +def mock_export_locked(): + """ + Represents the following scenario: + * Locked USB already inserted + * "Export" clicked, export wizard launched + * Passphrase successfully entered on first attempt (and export suceeeds) + """ device = conversation.ExportDevice() - device.run_export_preflight_checks = lambda dir: None - device.run_printer_preflight_checks = lambda dir: None + device.run_export_preflight_checks = lambda: device.export_state_changed.emit( + ExportStatus.DEVICE_LOCKED + ) + device.run_printer_preflight_checks = lambda: None device.print = lambda filepaths: None - device.export = lambda filepaths, passphrase: None + device.export = mock.MagicMock() + device.export.side_effect = [ + lambda filepaths, passphrase: device.export_state_changed.emit( + ExportStatus.DEVICE_WRITABLE + ), + lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.SUCCESS_EXPORT), + ] + + return device + + +@pytest.fixture(scope="function") +def mock_export_unlocked(): + """ + Represents the following scenario: + * USB already inserted and unlocked by the user + * Export wizard launched + * Export succeeds + """ + device = conversation.ExportDevice() + + device.run_export_preflight_checks = lambda: device.export_state_changed.emit( + ExportStatus.DEVICE_WRITABLE + ) + device.run_printer_preflight_checks = lambda: None + device.print = lambda filepaths: None + device.export = lambda filepaths, passphrase: device.export_state_changed.emit( + ExportStatus.SUCCESS_EXPORT + ) + + return device + + +@pytest.fixture(scope="function") +def mock_export_no_usb_then_bad_passphrase_then_fail(): + """ + Represents the following scenario: + * Export wizard launched + * Locked USB inserted + * Mistyped Passphrase + * Correct passphrase + * Export fails + """ + device = conversation.ExportDevice() + + device.run_export_preflight_checks = lambda: device.export_state_changed.emit( + ExportStatus.NO_DEVICE_DETECTED + ) + device.run_printer_preflight_checks = lambda: None + device.print = lambda filepaths: None + device.export = mock.MagicMock() + device.export.side_effect = [ + lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.DEVICE_LOCKED), + lambda filepaths, passphrase: device.export_state_changed.emit( + ExportStatus.ERROR_UNLOCK_LUKS + ), + lambda filepaths, passphrase: device.export_state_changed.emit( + ExportStatus.DEVICE_WRITABLE + ), + lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.ERROR_EXPORT), + ] + + return device + + +@pytest.fixture(scope="function") +def mock_export_fail_early(): + """ + Represents the following scenario: + * Locked USB inserted + * Export wizard launched + * Unrecoverable error before export happens + (eg, mount error) + """ + device = conversation.ExportDevice() + + device.run_export_preflight_checks = lambda: device.export_state_changed.emit( + ExportStatus.DEVICE_LOCKED + ) + device.run_printer_preflight_checks = lambda: None + device.print = lambda filepaths: None + device.export = mock.MagicMock() + device.export = lambda filepaths, passphrase: device.export_state_changed.emit( + ExportStatus.ERROR_MOUNT + ) return device diff --git a/client/tests/functional/cassettes/test_export_file_dialog_locked.yaml b/client/tests/functional/cassettes/test_export_wizard_device_locked.yaml similarity index 100% rename from client/tests/functional/cassettes/test_export_file_dialog_locked.yaml rename to client/tests/functional/cassettes/test_export_wizard_device_locked.yaml diff --git a/client/tests/functional/cassettes/test_export_file_dialog_device_already_unlocked.yaml b/client/tests/functional/cassettes/test_export_wizard_dialog_device_already_unlocked.yaml similarity index 100% rename from client/tests/functional/cassettes/test_export_file_dialog_device_already_unlocked.yaml rename to client/tests/functional/cassettes/test_export_wizard_dialog_device_already_unlocked.yaml diff --git a/client/tests/functional/cassettes/test_export_wizard_no_device_then_fail.yaml b/client/tests/functional/cassettes/test_export_wizard_no_device_then_fail.yaml new file mode 100644 index 000000000..d59c25ebb --- /dev/null +++ b/client/tests/functional/cassettes/test_export_wizard_no_device_then_fail.yaml @@ -0,0 +1,1518 @@ +interactions: +- request: + body: '{"username": "journalist", "passphrase": "correct horse battery staple + profanity oil chewy", "one_time_code": "123456"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '119' + User-Agent: + - python-requests/2.31.0 + method: POST + uri: http://localhost:8081/api/v1/token + response: + body: + string: '{"expiration":"2023-12-08T21:31:36.503560Z","journalist_first_name":null,"journalist_last_name":null,"journalist_uuid":"c63874d0-0723-475e-8773-a5a0eeaaa4f9","token":"IjkwQVJGa05CWDRQd3hwZVBWVTZfakI5Y3RxRy1JeWZNa3g2MkRGNmNlX2ci.ZXNvGA.4vDAGIjsM4zouaM3IhIBR3jzIrM"} + + ' + headers: + Connection: + - close + Content-Length: + - '265' + Content-Type: + - application/json + Date: + - Fri, 08 Dec 2023 19:31:36 GMT + Server: + - Werkzeug/2.2.3 Python/3.8.10 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token IjkwQVJGa05CWDRQd3hwZVBWVTZfakI5Y3RxRy1JeWZNa3g2MkRGNmNlX2ci.ZXNvGA.4vDAGIjsM4zouaM3IhIBR3jzIrM + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.31.0 + method: GET + uri: http://localhost:8081/api/v1/users + response: + body: + string: '{"users":[{"first_name":null,"last_name":null,"username":"journalist","uuid":"c63874d0-0723-475e-8773-a5a0eeaaa4f9"},{"first_name":null,"last_name":null,"username":"dellsberg","uuid":"ac647c21-82f5-4d19-8350-6657a7d32f6b"},{"first_name":null,"last_name":null,"username":"deleted","uuid":"200a587e-b40c-48eb-b18a-0d1263f8af2e"}]} + + ' + headers: + Connection: + - close + Content-Length: + - '329' + Content-Type: + - application/json + Date: + - Fri, 08 Dec 2023 19:31:36 GMT + Server: + - Werkzeug/2.2.3 Python/3.8.10 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token IjkwQVJGa05CWDRQd3hwZVBWVTZfakI5Y3RxRy1JeWZNa3g2MkRGNmNlX2ci.ZXNvGA.4vDAGIjsM4zouaM3IhIBR3jzIrM + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.31.0 + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: + string: '{"sources":[{"add_star_url":"/api/v1/sources/1924d581-a3af-45c6-a3c9-0ec2f1205bc1/add_star","interaction_count":6,"is_flagged":false,"is_starred":false,"journalist_designation":"oriental + hutch","key":{"fingerprint":"DF4DC2E19F0A6A304C8C3188AEF8C5E2BD8AE199","public":"-----BEGIN + PGP PUBLIC KEY BLOCK-----\nComment: DF4D C2E1 9F0A 6A30 4C8C 3188 AEF8 C5E2 + BD8A E199\nComment: Source Key , archive_fn='usb-test.sd-export', metadata={'device': 'usb-test'}) self.device._create_archive.assert_called_once_with( - archive_dir=_MOCK_FILEDIR, + archive_dir=self.mock_tmpdir, archive_fn=self.device._USB_TEST_FN, metadata=self.device._USB_TEST_METADATA, ) - mock_subprocess.assert_called_once() - assert _QREXEC_EXPORT_COMMAND in mock_subprocess.call_args[0] - def test_Device_run_export_preflight_checks_with_error(self, mock_sp): - mock_sp.side_effect = subprocess.CalledProcessError(1, "check_output") + def test_Device_run_export_preflight_checks_with_error(self): + spy = QSignalSpy(self.device.export_state_changed) + + with mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), mock.patch.object(self.device, "_create_archive"), mock.patch( + "securedrop_client.export.QProcess" + ) as mock_qprocess: + mock_qproc = mock_qprocess.return_value + mock_qproc.start = mock.MagicMock() + mock_qproc.start.side_effect = ( + lambda proc, args: self.device._on_export_process_complete() + ) + mock_qproc.readAllStandardError = mock.MagicMock() + mock_qproc.readAllStandardError.data.return_value = b"Houston, we have a problem\n" - with mock.patch("securedrop_client.export.logger.error") as err: self.device.run_export_preflight_checks() - assert "Export preflight failed" in err.call_args[0] + assert len(spy) == 1 and spy[0] == ExportStatus.UNEXPECTED_RETURN_STATUS - def test_Device_export_file_missing(self, mock_subprocess, mocker): + def test_Device_export_file_missing(self, mocker): device = Export() warning_logger = mocker.patch("securedrop_client.export.logger.warning") @@ -129,62 +175,67 @@ def test_Device_export_file_missing(self, mock_subprocess, mocker): "securedrop_client.export.tarfile.open", return_value=mock.MagicMock(), ), mock.patch( - "securedrop_client.export.TemporaryDirectory", + "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir, - ): + ), mock.patch( + "securedrop_client.export.QProcess" + ) as mock_qprocess: device.export(["/not/a/real/location"], "mock passphrase") + mock_qprocess.assert_not_called() + warning_logger.assert_called_once() - mock_subprocess.assert_not_called() # Todo: could get more specific about looking for the emitted failure signal - def test_Device_export(self, mock_subprocess): + def test_Device_export(self): filepath = "some/file/path" passphrase = "passphrase" + expected_metadata = self.device._DISK_METADATA.copy() + expected_metadata[self.device._DISK_ENCRYPTION_KEY_NAME] = passphrase + with mock.patch( - "securedrop_client.export.TemporaryDirectory", + "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir, - ): + ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + mock_qproc = mock_qprocess.return_value + mock_qproc.start = mock.MagicMock() self.device.export([filepath], passphrase) - expected_metadata = self.device._DISK_METADATA.copy() - expected_metadata[self.device._DISK_ENCRYPTION_KEY_NAME] = passphrase + mock_qproc.start.assert_called_once() + assert mock_qproc.start.call_args[0] == _QREXEC_EXPORT_COMMAND self.device._create_archive.assert_called_once_with( - archive_dir=_MOCK_FILEDIR, + archive_dir=self.mock_tmpdir, archive_fn=self.device._DISK_FN, metadata=expected_metadata, filepaths=[filepath], ) - mock_subprocess.assert_called_once() - assert _QREXEC_EXPORT_COMMAND in mock_subprocess.call_args[0] @pytest.mark.parametrize("status", [i.value for i in ExportStatus]) - def test__run_qrexec_success(self, mocked_subprocess, status): - mocked_subprocess.return_value = f"{status}\n".encode("utf-8") + def test__run_qrexec_success(self, status): enum = ExportStatus(status) + with mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch.object( + self.device, "_on_export_process_complete" + ) as mock_callback: + mock_qproc = mock_qprocess.return_value + mock_qproc.finished = mock.MagicMock() + mock_qproc.start = mock.MagicMock() + mock_qproc.start.side_effect = ( + lambda proc, args: self.device._on_export_process_complete() + ) + mock_qproc.readAllStandardError.return_value = f"{status}\n".encode("utf-8") - assert self.device._run_qrexec_export(_PATH_TO_PRETEND_ARCHIVE) == enum - - def test__run_qrexec_calledprocess_raises_exportstatus(self, mocked_subprocess): - mocked_subprocess.side_effect = ValueError( - "These are not the ExportStatuses you're looking for..." - ) - with pytest.raises(ExportError) as e: - self.device._run_qrexec_export(_PATH_TO_PRETEND_ARCHIVE) - - assert e.value.status == ExportStatus.UNEXPECTED_RETURN_STATUS - - def test__run_qrexec_valuerror_raises_exportstatus(self, mocked_subprocess): - mocked_subprocess.side_effect = subprocess.CalledProcessError(1, "check_output") - with pytest.raises(ExportError) as e: - self.device._run_qrexec_export(_PATH_TO_PRETEND_ARCHIVE) + self.device._run_qrexec_export( + _PATH_TO_PRETEND_ARCHIVE, + mock_callback, + self.device._on_export_process_error, + ) - assert e.value.status == ExportStatus.CALLED_PROCESS_ERROR + mock_qproc.start.assert_called_once() @mock.patch("securedrop_client.export.tarfile") - def test__add_virtual_file_to_archive(self, mock_tarfile, mock_sp): + def test__add_virtual_file_to_archive(self, mock_tarfile): mock_tarinfo = mock.MagicMock(spec=tarfile.TarInfo) mock_tarfile.TarInfo.return_value = mock_tarinfo @@ -213,7 +264,7 @@ def test__create_archive(self, mocker): assert not os.path.exists(archive_path) - def test__create_archive_with_an_export_file(self, mocker): + def test__create_archive_with_an_export_file(self): device = Export() archive_path = None with TemporaryDirectory() as temp_dir, NamedTemporaryFile() as export_file: @@ -225,7 +276,7 @@ def test__create_archive_with_an_export_file(self, mocker): assert not os.path.exists(archive_path) - def test__create_archive_with_multiple_export_files(self, mocker): + def test__create_archive_with_multiple_export_files(self): device = Export() archive_path = None with TemporaryDirectory() as tmpdir, NamedTemporaryFile() as f1, NamedTemporaryFile() as f2: @@ -242,14 +293,19 @@ def test__create_archive_with_multiple_export_files(self, mocker): assert not os.path.exists(archive_path) - def test__tmpdir_cleaned_up_on_exception(self, mock_sp): + def test__tmpdir_cleaned_up_on_exception(self): """ Sanity check. If we encounter an error after archive has been built, ensure the tmpdir directory cleanup happens. """ - with TemporaryDirectory() as tmpdir, pytest.raises(ExportError): - print(f"{tmpdir} created") - - raise ExportError("Something bad happened!") - - assert not os.path.exists(tmpdir) + with mock.patch( + "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir + ) as tmpdir, mock.patch("securedrop_client.export.QProcess") as qprocess, mock.patch.object( + self.device, "_cleanup_tmpdir" + ) as mock_cleanup: + mock_qproc = qprocess.return_value + mock_qproc.readAllStandardError.data.return_value = b"Something awful happened!\n" + mock_qproc.start = lambda proc, args: self.device._on_export_process_error() + self.device.run_printer_preflight_checks() + assert self.device.tmpdir == self.mock_tmpdir + mock_cleanup.assert_called() diff --git a/client/tests/gui/conversation/export/test_dialog.py b/client/tests/gui/conversation/export/test_dialog.py deleted file mode 100644 index 0d6903441..000000000 --- a/client/tests/gui/conversation/export/test_dialog.py +++ /dev/null @@ -1,352 +0,0 @@ -from securedrop_client.export_status import ExportError, ExportStatus -from securedrop_client.gui.conversation import ExportDialog -from tests.helper import app # noqa: F401 - - -def test_ExportDialog_init(mocker): - _show_starting_instructions_fn = mocker.patch( - "securedrop_client.gui.conversation.ExportDialog._show_starting_instructions" - ) - - export_dialog = ExportDialog( - mocker.MagicMock(), "3 files", ["mock.jpg", "memo.txt", "transcript.txt"] - ) - - _show_starting_instructions_fn.assert_called_once_with() - assert export_dialog.passphrase_form.isHidden() - - -def test_ExportDialog__show_starting_instructions(mocker, export_dialog_multifile): - export_dialog_multifile._show_starting_instructions() - - # "3 files" comes from the export_dialog fixture - assert ( - export_dialog_multifile.header.text() == "Preparing to export:" - "
" - '3 files' - ) - assert ( - export_dialog_multifile.body.text() - == "

Understand the risks before exporting files

" - "Malware" - "
" - "This workstation lets you open files securely. If you open files on another " - "computer, any embedded malware may spread to your computer or network. If you are " - "unsure how to manage this risk, please print the file, or contact your " - "administrator." - "

" - "Anonymity" - "
" - "Files submitted by sources may contain information or hidden metadata that " - "identifies who they are. To protect your sources, please consider redacting files " - "before working with them on network-connected computers." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog___show_passphrase_request_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message() - - assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" - assert not export_dialog_multifile.header.isHidden() - assert export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert export_dialog_multifile.body.isHidden() - assert not export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_passphrase_request_message_again(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message_again() - - assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" - assert ( - export_dialog_multifile.error_details.text() - == "The passphrase provided did not work. Please try again." - ) - assert export_dialog_multifile.body.isHidden() - assert not export_dialog_multifile.header.isHidden() - assert export_dialog_multifile.header_line.isHidden() - assert not export_dialog_multifile.error_details.isHidden() - assert export_dialog_multifile.body.isHidden() - assert not export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_success_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_success_message() - - assert export_dialog_multifile.header.text() == "Export successful" - assert ( - export_dialog_multifile.body.text() - == "Remember to be careful when working with files outside of your Workstation machine." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_insert_usb_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_insert_usb_message() - - assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" - assert ( - export_dialog_multifile.body.text() - == "Please insert one of the export drives provisioned specifically " - "for the SecureDrop Workstation." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_insert_encrypted_usb_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_insert_encrypted_usb_message() - - assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" - assert ( - export_dialog_multifile.error_details.text() - == "Either the drive is not encrypted or there is something else wrong with it." - ) - assert ( - export_dialog_multifile.body.text() - == "Please insert one of the export drives provisioned specifically for the SecureDrop " - "Workstation." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert not export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_generic_error_message(mocker, export_dialog_multifile): - export_dialog_multifile.error_status = "mock_error_status" - - export_dialog_multifile._show_generic_error_message() - - assert export_dialog_multifile.header.text() == "Export failed" - assert ( - export_dialog_multifile.body.text() == "mock_error_status: See your administrator for help." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__export(mocker, export_dialog_multifile): - device = mocker.MagicMock() - device.export = mocker.MagicMock() - export_dialog_multifile._device = device - export_dialog_multifile.passphrase_field.text = mocker.MagicMock(return_value="mock_passphrase") - - export_dialog_multifile._export() - - device.export.assert_called_once_with( - export_dialog_multifile.filepaths, - "mock_passphrase", - ) - - -def test_ExportDialog__on_export_preflight_check_succeeded(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - export_dialog_multifile._on_export_preflight_check_succeeded( - ExportStatus.PRINT_PREFLIGHT_SUCCESS - ) - - export_dialog_multifile._show_passphrase_request_message.assert_not_called() - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_passphrase_request_message - ) - - -def test_ExportDialog__on_export_preflight_check_succeeded_when_continue_enabled( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() - export_dialog_multifile.continue_button.setEnabled(True) - - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - - export_dialog_multifile._show_passphrase_request_message.assert_called_once_with() - - -def test_ExportDialog__on_export_preflight_check_succeeded_continue_enabled_and_device_unlocked( - mocker, export_dialog_multifile -): - export_dialog_multifile._export = mocker.MagicMock() - export_dialog_multifile.continue_button.setEnabled(True) - - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) - - export_dialog_multifile._export.assert_called_once_with() - - -def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_success( - mocker, export_dialog_multifile -): - assert not export_dialog_multifile.continue_button.isEnabled() - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - assert export_dialog_multifile.continue_button.isEnabled() - - -def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_failure( - mocker, export_dialog_multifile -): - assert not export_dialog_multifile.continue_button.isEnabled() - export_dialog_multifile._on_export_preflight_check_failed(mocker.MagicMock()) - assert export_dialog_multifile.continue_button.isEnabled() - - -def test_ExportDialog__on_export_preflight_check_failed(mocker, export_dialog_multifile): - export_dialog_multifile._update_dialog = mocker.MagicMock() - - error = ExportError("mock_error_status") - export_dialog_multifile._on_export_preflight_check_failed(error) - - export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") - - -def test_ExportDialog__on_export_succeeded(mocker, export_dialog_multifile): - export_dialog_multifile._show_success_message = mocker.MagicMock() - - export_dialog_multifile._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) - - export_dialog_multifile._show_success_message.assert_called_once_with() - - -def test_ExportDialog__on_export_failed(mocker, export_dialog_multifile): - export_dialog_multifile._update_dialog = mocker.MagicMock() - - error = ExportError("mock_error_status") - export_dialog_multifile._on_export_failed(error) - - export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") - - -def test_ExportDialog__update_dialog_when_status_is_USB_NOT_CONNECTED( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_insert_usb_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_insert_usb_message - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_dialog_multifile._show_insert_usb_message.assert_called_once_with() - - -def test_ExportDialog__update_dialog_when_status_is_BAD_PASSPHRASE(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message_again = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_passphrase_request_message_again - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) # fka BAD_PASSPHRASE - export_dialog_multifile._show_passphrase_request_message_again.assert_called_once_with() - - -def test_ExportDialog__update_dialog_when_status_DISK_ENCRYPTION_NOT_SUPPORTED_ERROR( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_insert_encrypted_usb_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog( - ExportStatus.INVALID_DEVICE_DETECTED - ) # DISK_ENCRYPTION_NOT_SUPPORTED_ERROR - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_insert_encrypted_usb_message - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_dialog_multifile._show_insert_encrypted_usb_message.assert_called_once_with() - - -def test_ExportDialog__update_dialog_when_status_is_CALLED_PROCESS_ERROR( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_generic_error_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_generic_error_message - ) - assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_dialog_multifile._show_generic_error_message.assert_called_once_with() - assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR - - -def test_ExportDialog__update_dialog_when_status_is_unknown(mocker, export_dialog_multifile): - export_dialog_multifile._show_generic_error_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog("Some Unknown Error Status") - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_generic_error_message - ) - assert export_dialog_multifile.error_status == "Some Unknown Error Status" - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog("Some Unknown Error Status") - export_dialog_multifile._show_generic_error_message.assert_called_once_with() - assert export_dialog_multifile.error_status == "Some Unknown Error Status" diff --git a/client/tests/gui/conversation/export/test_export_wizard.py b/client/tests/gui/conversation/export/test_export_wizard.py new file mode 100644 index 000000000..24124e72d --- /dev/null +++ b/client/tests/gui/conversation/export/test_export_wizard.py @@ -0,0 +1,154 @@ +from unittest import mock + +from securedrop_client.export_status import ExportStatus +from securedrop_client.gui.conversation.export import Export, ExportWizard +from securedrop_client.gui.conversation.export.export_wizard_constants import STATUS_MESSAGES, Pages +from securedrop_client.gui.conversation.export.export_wizard_page import ( + ErrorPage, + FinalPage, + InsertUSBPage, + PassphraseWizardPage, + PreflightPage, +) +from tests import factory + + +class TestExportWizard: + @classmethod + def _mock_export_preflight_success(cls) -> Export: + export = Export() + export.run_export_preflight_checks = lambda: export.export_state_changed.emit( + ExportStatus.DEVICE_LOCKED + ) + export.export = ( + mock.MagicMock() + ) # We will choose different signals and emit them during testing + return export + + @classmethod + def setup_class(cls): + cls.mock_controller = mock.MagicMock() + cls.mock_controller.data_dir = "/pretend/data-dir/" + cls.mock_source = factory.Source() + cls.mock_export = cls._mock_export_preflight_success() + cls.mock_file = factory.File(source=cls.mock_source) + cls.filepath = cls.mock_file.location(cls.mock_controller.data_dir) + + @classmethod + def setup_method(cls): + cls.wizard = ExportWizard(cls.mock_export, cls.mock_file.filename, [cls.filepath]) + + @classmethod + def teardown_method(cls): + cls.wizard.destroy() + cls.wizard = None + + def test_wizard_setup(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + assert len(self.wizard.pageIds()) == len(Pages._member_names_), self.wizard.pageIds() + assert isinstance(self.wizard.currentPage(), PreflightPage) + + def test_wizard_skips_insert_page_when_device_found_preflight(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + self.wizard.next() + + assert isinstance(self.wizard.currentPage(), PassphraseWizardPage) + + def test_wizard_exports_directly_to_unlocked_device(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + # Simulate an unlocked device + self.mock_export.export_state_changed.emit(ExportStatus.DEVICE_WRITABLE) + self.wizard.next() + + assert isinstance( + self.wizard.currentPage(), FinalPage + ), f"Actually, f{type(self.wizard.currentPage())}" + + def test_wizard_rewinds_if_device_removed(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + self.wizard.next() + assert isinstance(self.wizard.currentPage(), PassphraseWizardPage) + + self.mock_export.export_state_changed.emit(ExportStatus.NO_DEVICE_DETECTED) + self.wizard.next() + assert isinstance(self.wizard.currentPage(), InsertUSBPage) + + def test_wizard_all_steps(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + self.mock_export.export_state_changed.emit(ExportStatus.NO_DEVICE_DETECTED) + self.wizard.next() + assert isinstance(self.wizard.currentPage(), InsertUSBPage) + + self.mock_export.export_state_changed.emit(ExportStatus.MULTI_DEVICE_DETECTED) + self.wizard.next() + assert isinstance(self.wizard.currentPage(), InsertUSBPage) + assert self.wizard.currentPage().error_details.isVisible() + + self.mock_export.export_state_changed.emit(ExportStatus.DEVICE_LOCKED) + self.wizard.next() + page = self.wizard.currentPage() + assert isinstance(page, PassphraseWizardPage) + + # No password entered, we shouldn't be able to advance + self.wizard.next() + assert isinstance(page, PassphraseWizardPage) + + # Type a passphrase. According to pytest-qt's own documentation, using + # qtbot.keyClicks and other interactions can lead to flaky tests, + # so using the setText method is fine, esp for unit testing. + page.passphrase_field.setText("correct horse battery staple!") + + # How dare you try a commonly-used password like that + self.mock_export.export_state_changed.emit(ExportStatus.ERROR_UNLOCK_LUKS) + + assert isinstance(page, PassphraseWizardPage) + assert page.error_details.isVisible() + + self.wizard.next() + + # Ok + page.passphrase_field.setText("substantial improvements encrypt accordingly") + self.mock_export.export_state_changed.emit(ExportStatus.DEVICE_WRITABLE) + + self.wizard.next() + self.mock_export.export_state_changed.emit(ExportStatus.ERROR_EXPORT_CLEANUP) + + page = self.wizard.currentPage() + assert isinstance(page, FinalPage) + assert page.body.text() == STATUS_MESSAGES.get(ExportStatus.ERROR_EXPORT_CLEANUP) + + def test_wizard_hides_error_details_on_success(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + self.mock_export.export_state_changed.emit(ExportStatus.NO_DEVICE_DETECTED) + self.wizard.next() + assert isinstance(self.wizard.currentPage(), InsertUSBPage) + assert self.wizard.currentPage().error_details.isVisible() + + self.mock_export.export_state_changed.emit(ExportStatus.DEVICE_LOCKED) + self.wizard.next() + self.wizard.back() + assert not self.wizard.currentPage().error_details.isVisible() + + def test_wizard_only_shows_error_page_on_unrecoverable_error(self, qtbot): + self.wizard.show() + qtbot.addWidget(self.wizard) + + self.mock_export.export_state_changed.emit(ExportStatus.NO_DEVICE_DETECTED) + self.wizard.next() + assert isinstance(self.wizard.currentPage(), InsertUSBPage) + + self.mock_export.export_state_changed.emit(ExportStatus.UNEXPECTED_RETURN_STATUS) + self.wizard.next() + assert isinstance(self.wizard.currentPage(), ErrorPage) diff --git a/client/tests/gui/conversation/export/test_file_dialog.py b/client/tests/gui/conversation/export/test_file_dialog.py deleted file mode 100644 index a9ee020be..000000000 --- a/client/tests/gui/conversation/export/test_file_dialog.py +++ /dev/null @@ -1,405 +0,0 @@ -from securedrop_client.export_status import ExportError, ExportStatus -from securedrop_client.gui.conversation import ExportDialog -from tests.helper import app # noqa: F401 - - -def test_ExportDialog_init(mocker): - _show_starting_instructions_fn = mocker.patch( - "securedrop_client.gui.conversation.ExportDialog._show_starting_instructions" - ) - - export_file_dialog = ExportDialog(mocker.MagicMock(), "mock.jpg", ["/mock/path/to/file"]) - - _show_starting_instructions_fn.assert_called_once_with() - assert export_file_dialog.passphrase_form.isHidden() - - -def test_ExportDialog_init_sanitizes_filename(mocker): - secure_qlabel = mocker.patch( - "securedrop_client.gui.conversation.export.export_dialog.SecureQLabel" - ) - mocker.patch("securedrop_client.gui.widgets.QVBoxLayout.addWidget") - filename = '' - - ExportDialog(mocker.MagicMock(), filename, ["/mock/path/to/file"]) - - secure_qlabel.assert_any_call(filename, wordwrap=False, max_length=260) - - -def test_ExportDialog__show_starting_instructions(mocker, export_dialog_multifile): - export_dialog_multifile._show_starting_instructions() - - # file123.jpg comes from the export_file_dialog fixture - assert ( - export_dialog_multifile.header.text() == "Preparing to export:" - "
" - '3 files' - ) - assert ( - export_dialog_multifile.body.text() - == "

Understand the risks before exporting files

" - "Malware" - "
" - "This workstation lets you open files securely. If you open files on another " - "computer, any embedded malware may spread to your computer or network. If you are " - "unsure how to manage this risk, please print the file, or contact your " - "administrator." - "

" - "Anonymity" - "
" - "Files submitted by sources may contain information or hidden metadata that " - "identifies who they are. To protect your sources, please consider redacting files " - "before working with them on network-connected computers." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -# The summary text is different for a dialog with one file vs 3 files -def test_ExportDialog__show_starting_instructions_single_file(mocker, export_dialog): - export_dialog._show_starting_instructions() - - # file123.jpg comes from the export_file_dialog fixture - assert ( - export_dialog.header.text() == "Preparing to export:" - "
" - 'file123.jpg' - ) - assert ( - export_dialog.body.text() == "

Understand the risks before exporting files

" - "Malware" - "
" - "This workstation lets you open files securely. If you open files on another " - "computer, any embedded malware may spread to your computer or network. If you are " - "unsure how to manage this risk, please print the file, or contact your " - "administrator." - "

" - "Anonymity" - "
" - "Files submitted by sources may contain information or hidden metadata that " - "identifies who they are. To protect your sources, please consider redacting files " - "before working with them on network-connected computers." - ) - assert not export_dialog.header.isHidden() - assert not export_dialog.header_line.isHidden() - assert export_dialog.error_details.isHidden() - assert not export_dialog.body.isHidden() - assert export_dialog.passphrase_form.isHidden() - assert not export_dialog.continue_button.isHidden() - assert not export_dialog.cancel_button.isHidden() - - -def test_ExportDialog___show_passphrase_request_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message() - - assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" - assert not export_dialog_multifile.header.isHidden() - assert export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert export_dialog_multifile.body.isHidden() - assert not export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_passphrase_request_message_again(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message_again() - - assert export_dialog_multifile.header.text() == "Enter passphrase for USB drive" - assert ( - export_dialog_multifile.error_details.text() - == "The passphrase provided did not work. Please try again." - ) - assert export_dialog_multifile.body.isHidden() - assert not export_dialog_multifile.header.isHidden() - assert export_dialog_multifile.header_line.isHidden() - assert not export_dialog_multifile.error_details.isHidden() - assert export_dialog_multifile.body.isHidden() - assert not export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_success_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_success_message() - - assert export_dialog_multifile.header.text() == "Export successful" - assert ( - export_dialog_multifile.body.text() - == "Remember to be careful when working with files outside of your Workstation machine." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_insert_usb_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_insert_usb_message() - - assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" - assert ( - export_dialog_multifile.body.text() - == "Please insert one of the export drives provisioned specifically " - "for the SecureDrop Workstation." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_insert_encrypted_usb_message(mocker, export_dialog_multifile): - export_dialog_multifile._show_insert_encrypted_usb_message() - - assert export_dialog_multifile.header.text() == "Insert encrypted USB drive" - assert ( - export_dialog_multifile.error_details.text() - == "Either the drive is not encrypted or there is something else wrong with it." - ) - assert ( - export_dialog_multifile.body.text() - == "Please insert one of the export drives provisioned specifically for the SecureDrop " - "Workstation." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert not export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__show_generic_error_message(mocker, export_dialog_multifile): - export_dialog_multifile.error_status = "mock_error_status" - - export_dialog_multifile._show_generic_error_message() - - assert export_dialog_multifile.header.text() == "Export failed" - assert ( - export_dialog_multifile.body.text() == "mock_error_status: See your administrator for help." - ) - assert not export_dialog_multifile.header.isHidden() - assert not export_dialog_multifile.header_line.isHidden() - assert export_dialog_multifile.error_details.isHidden() - assert not export_dialog_multifile.body.isHidden() - assert export_dialog_multifile.passphrase_form.isHidden() - assert not export_dialog_multifile.continue_button.isHidden() - assert not export_dialog_multifile.cancel_button.isHidden() - - -def test_ExportDialog__export_file(mocker, export_dialog_multifile): - device = mocker.MagicMock() - device.export = mocker.MagicMock() - export_dialog_multifile._device = device - export_dialog_multifile.passphrase_field.text = mocker.MagicMock(return_value="mock_passphrase") - - export_dialog_multifile._export() - - device.export.assert_called_once_with(export_dialog_multifile.filepaths, "mock_passphrase") - - -def test_ExportDialog__on_export_preflight_check_succeeded(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - - export_dialog_multifile._show_passphrase_request_message.assert_not_called() - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_passphrase_request_message - ) - - -def test_ExportDialog__on_export_preflight_check_succeeded_device_unlocked( - mocker, export_dialog_multifile -): - export_dialog_multifile._export = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) - - export_dialog_multifile._export.assert_not_called() - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._export - ) - - -def test_ExportDialog__on_export_preflight_check_succeeded_when_continue_enabled( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_passphrase_request_message = mocker.MagicMock() - export_dialog_multifile.continue_button.setEnabled(True) - - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - - export_dialog_multifile._show_passphrase_request_message.assert_called_once_with() - - -def test_ExportDialog__on_export_preflight_check_succeeded_unlocked_device_when_continue_enabled( - mocker, export_dialog_multifile -): - export_dialog_multifile._export = mocker.MagicMock() - export_dialog_multifile.continue_button.setEnabled(True) - - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_WRITABLE) - - export_dialog_multifile._export.assert_called_once_with() - - -def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_success( - mocker, export_dialog_multifile -): - assert not export_dialog_multifile.continue_button.isEnabled() - export_dialog_multifile._on_export_preflight_check_succeeded(ExportStatus.DEVICE_LOCKED) - assert export_dialog_multifile.continue_button.isEnabled() - - -def test_ExportDialog__on_export_preflight_check_succeeded_enabled_after_preflight_failure( - mocker, export_dialog_multifile -): - assert not export_dialog_multifile.continue_button.isEnabled() - export_dialog_multifile._on_export_preflight_check_failed(mocker.MagicMock()) - assert export_dialog_multifile.continue_button.isEnabled() - - -def test_ExportDialog__on_export_preflight_check_failed(mocker, export_dialog_multifile): - export_dialog_multifile._update_dialog = mocker.MagicMock() - - error = ExportError("mock_error_status") - export_dialog_multifile._on_export_preflight_check_failed(error) - - export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") - - -def test_ExportDialog__on_export_succeeded(mocker, export_dialog_multifile): - export_dialog_multifile._show_success_message = mocker.MagicMock() - - export_dialog_multifile._on_export_succeeded(ExportStatus.SUCCESS_EXPORT) - - export_dialog_multifile._show_success_message.assert_called_once_with() - - -def test_ExportDialog__on_export_failed(mocker, export_dialog_multifile): - export_dialog_multifile._update_dialog = mocker.MagicMock() - - error = ExportError("mock_error_status") - export_dialog_multifile._on_export_failed(error) - - export_dialog_multifile._update_dialog.assert_called_with("mock_error_status") - - -def test_ExportDialog__update_dialog_when_status_is_USB_NOT_CONNECTED( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_insert_usb_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_insert_usb_message - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.NO_DEVICE_DETECTED) - export_dialog_multifile._show_insert_usb_message.assert_called_once_with() - - -def test_ExportDialog__update_dialog_when_status_is_BAD_PASSPHRASE(mocker, export_dialog_multifile): - export_dialog_multifile._show_passphrase_request_message_again = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_passphrase_request_message_again - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.ERROR_UNLOCK_LUKS) - export_dialog_multifile._show_passphrase_request_message_again.assert_called_once_with() - - -def test_ExportDialog__update_dialog_when_status_DISK_ENCRYPTION_NOT_SUPPORTED_ERROR( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_insert_encrypted_usb_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_insert_encrypted_usb_message - ) - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.INVALID_DEVICE_DETECTED) - export_dialog_multifile._show_insert_encrypted_usb_message.assert_called_once_with() - - -def test_ExportDialog__update_dialog_when_status_is_CALLED_PROCESS_ERROR( - mocker, export_dialog_multifile -): - export_dialog_multifile._show_generic_error_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_generic_error_message - ) - assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog(ExportStatus.CALLED_PROCESS_ERROR) - export_dialog_multifile._show_generic_error_message.assert_called_once_with() - assert export_dialog_multifile.error_status == ExportStatus.CALLED_PROCESS_ERROR - - -def test_ExportDialog__update_dialog_when_status_is_unknown(mocker, export_dialog_multifile): - export_dialog_multifile._show_generic_error_message = mocker.MagicMock() - export_dialog_multifile.continue_button = mocker.MagicMock() - export_dialog_multifile.continue_button.clicked = mocker.MagicMock() - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=False) - - # When the continue button is enabled, ensure clicking continue will show next instructions - export_dialog_multifile._update_dialog("Some Unknown Error Status") - export_dialog_multifile.continue_button.clicked.connect.assert_called_once_with( - export_dialog_multifile._show_generic_error_message - ) - assert export_dialog_multifile.error_status == "Some Unknown Error Status" - - # When the continue button is enabled, ensure next instructions are shown - mocker.patch.object(export_dialog_multifile.continue_button, "isEnabled", return_value=True) - export_dialog_multifile._update_dialog("Some Unknown Error Status") - export_dialog_multifile._show_generic_error_message.assert_called_once_with() - assert export_dialog_multifile.error_status == "Some Unknown Error Status" diff --git a/client/tests/gui/test_actions.py b/client/tests/gui/test_actions.py index c52a2b721..82f4a9f38 100644 --- a/client/tests/gui/test_actions.py +++ b/client/tests/gui/test_actions.py @@ -289,7 +289,7 @@ def test_trigger(self, _): class TestExportConversationTranscriptAction(unittest.TestCase): - @patch("securedrop_client.gui.actions.ExportDialog") + @patch("securedrop_client.gui.actions.ExportWizard") def test_trigger(self, _): with managed_locale(): locale.setlocale(locale.LC_ALL, ("en_US", "latin-1")) @@ -318,7 +318,7 @@ def test_trigger(self, _): class TestExportConversationAction(unittest.TestCase): - @patch("securedrop_client.gui.actions.ExportDialog") + @patch("securedrop_client.gui.actions.ExportWizard") def test_trigger(self, _): with managed_locale(): locale.setlocale(locale.LC_ALL, ("en_US", "latin-1")) diff --git a/client/tests/gui/test_widgets.py b/client/tests/gui/test_widgets.py index 4ef404f71..0c3d49b8c 100644 --- a/client/tests/gui/test_widgets.py +++ b/client/tests/gui/test_widgets.py @@ -3600,10 +3600,12 @@ def test_FileWidget__on_export_clicked(mocker, session, source): controller.run_export_preflight_checks = mocker.MagicMock() controller.downloaded_file_exists = mocker.MagicMock(return_value=True) - dialog = mocker.patch("securedrop_client.gui.conversation.ExportDialog") + wizard = mocker.patch("securedrop_client.gui.conversation.export.ExportWizard") fw._on_export_clicked() - dialog.assert_called_once_with(export_device(), file.filename, [file_location]) + wizard.assert_called_once_with( + export_device(), file.filename, [file_location] + ), f"{wizard.call_args}" def test_FileWidget__on_export_clicked_missing_file(mocker, session, source): @@ -3630,12 +3632,12 @@ def test_FileWidget__on_export_clicked_missing_file(mocker, session, source): mocker.patch("PyQt5.QtWidgets.QDialog.exec") controller.run_export_preflight_checks = mocker.MagicMock() controller.downloaded_file_exists = mocker.MagicMock(return_value=False) - dialog = mocker.patch("securedrop_client.gui.conversation.ExportDialog") + wizard = mocker.patch("securedrop_client.gui.conversation.ExportWizard") fw._on_export_clicked() controller.run_export_preflight_checks.assert_not_called() - dialog.assert_not_called() + wizard.assert_not_called() def test_FileWidget__on_print_clicked(mocker, session, source): From 8aae9b76a38af2f69772a7e46c4aa5e2b458f4ce Mon Sep 17 00:00:00 2001 From: Ro Date: Fri, 2 Feb 2024 18:15:03 -0500 Subject: [PATCH 660/751] Remove encryption_method from json metadata. --- client/securedrop_client/export.py | 2 +- export/tests/disk/test_service.py | 3 +-- export/tests/test_archive.py | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/client/securedrop_client/export.py b/client/securedrop_client/export.py index 85560fd45..68fef30b6 100644 --- a/client/securedrop_client/export.py +++ b/client/securedrop_client/export.py @@ -37,7 +37,7 @@ class Export(QObject): _PRINT_METADATA = {"device": "printer"} _DISK_FN = "archive.sd-export" - _DISK_METADATA = {"device": "disk", "encryption_method": "luks"} + _DISK_METADATA = {"device": "disk"} _DISK_ENCRYPTION_KEY_NAME = "encryption_key" _DISK_EXPORT_DIR = "export_data" diff --git a/export/tests/disk/test_service.py b/export/tests/disk/test_service.py index 13a729507..73dc0210a 100644 --- a/export/tests/disk/test_service.py +++ b/export/tests/disk/test_service.py @@ -60,8 +60,7 @@ def _setup_submission(cls) -> Archive: metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: f.write( - '{"device": "disk", "encryption_method":' - ' "luks", "encryption_key": "hunter1"}' + '{"device": "disk", "encryption_key": "hunter1"}' ) return submission.set_metadata(Metadata(temp_folder).validate()) diff --git a/export/tests/test_archive.py b/export/tests/test_archive.py index 7c09b83d6..37510f0c8 100644 --- a/export/tests/test_archive.py +++ b/export/tests/test_archive.py @@ -436,7 +436,7 @@ def test_invalid_config(capsys): temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write('{"device": "asdf", "encryption_method": "OHNO"}') + f.write('{"device": "asdf"}') with pytest.raises(ExportException) as ex: Metadata(temp_folder).validate() @@ -450,7 +450,7 @@ def test_malformed_config(capsys): temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write('{"device": "asdf", "encryption_method": {"OHNO", "MALFORMED"}') + f.write('{"device": {"OHNO", "MALFORMED"}') with pytest.raises(ExportException) as ex: Metadata(temp_folder).validate() From f77cd726776ce7a07e6ea3278e70ca9fb53fc992 Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 7 Feb 2024 13:17:57 -0500 Subject: [PATCH 661/751] Stay on same page while export or preflight check is taking place in background. Apply activestate animation during async work. Add QWizard styling. Update text fixtures. --- client/securedrop_client/export.py | 35 +++-- client/securedrop_client/gui/base/inputs.py | 4 +- .../gui/conversation/export/dialog_button.css | 29 ---- .../gui/conversation/export/export_wizard.py | 148 ++++++++++++------ .../conversation/export/export_wizard_page.py | 137 ++++++++-------- .../export/{dialog.css => wizard.css} | 23 +-- .../gui/conversation/export/wizard_button.css | 47 ++++++ ...{dialog_message.css => wizard_message.css} | 4 +- client/tests/conftest.py | 14 +- .../functional/test_export_file_wizard.py | 78 ++++++--- .../export/test_device.py => test_export.py} | 124 +++++++++++---- 11 files changed, 398 insertions(+), 245 deletions(-) delete mode 100644 client/securedrop_client/gui/conversation/export/dialog_button.css rename client/securedrop_client/gui/conversation/export/{dialog.css => wizard.css} (78%) create mode 100644 client/securedrop_client/gui/conversation/export/wizard_button.css rename client/securedrop_client/gui/conversation/export/{dialog_message.css => wizard_message.css} (76%) rename client/tests/{gui/conversation/export/test_device.py => test_export.py} (73%) diff --git a/client/securedrop_client/export.py b/client/securedrop_client/export.py index 68fef30b6..3dcc9e7ba 100644 --- a/client/securedrop_client/export.py +++ b/client/securedrop_client/export.py @@ -1,14 +1,14 @@ import json import logging import os -import tarfile import shutil +import tarfile from io import BytesIO from shlex import quote -from tempfile import TemporaryDirectory, mkdtemp +from tempfile import mkdtemp from typing import Callable, List, Optional -from PyQt5.QtCore import QProcess, QObject, pyqtSignal +from PyQt5.QtCore import QObject, QProcess, pyqtSignal from securedrop_client.export_status import ExportError, ExportStatus @@ -54,7 +54,7 @@ class Export(QObject): print_failed = pyqtSignal(object) process = None # Optional[QProcess] - tmpdir = None # Note: context-managed tmpdir goes out of scope too quickly, so we create then clean it up + tmpdir = None # mkdtemp directory must be cleaned up when QProcess completes def run_printer_preflight_checks(self) -> None: """ @@ -62,6 +62,7 @@ def run_printer_preflight_checks(self) -> None: """ logger.info("Beginning printer preflight check") self.tmpdir = mkdtemp() + os.chmod(self.tmpdir, 0o700) try: archive_path = self._create_archive( @@ -73,7 +74,7 @@ def run_printer_preflight_checks(self) -> None: archive_path, self._on_print_preflight_complete, self._on_print_prefight_error ) except ExportError as e: - logger.error("Error creating archive: {e}") + logger.error(f"Error creating archive: {e}") self._on_print_prefight_error() def run_export_preflight_checks(self) -> None: @@ -84,6 +85,7 @@ def run_export_preflight_checks(self) -> None: try: self.tmpdir = mkdtemp() + os.chmod(self.tmpdir, 0o700) archive_path = self._create_archive( archive_dir=self.tmpdir, @@ -112,6 +114,8 @@ def export(self, filepaths: List[str], passphrase: Optional[str]) -> None: metadata[self._DISK_ENCRYPTION_KEY_NAME] = passphrase self.tmpdir = mkdtemp() + os.chmod(self.tmpdir, 0o700) + archive_path = self._create_archive( archive_dir=self.tmpdir, archive_fn=self._DISK_FN, @@ -180,14 +184,14 @@ def _run_qrexec_export( self.process.start(qrexec, args) - def _cleanup_tmpdir(self): + def _cleanup_tmpdir(self) -> None: """ Should be called in all qrexec completion callbacks. """ if self.tmpdir and os.path.exists(self.tmpdir): shutil.rmtree(self.tmpdir) - def _on_export_process_complete(self): + def _on_export_process_complete(self) -> None: """ Callback, handle and emit QProcess result. As with all such callbacks, the method signature cannot change. @@ -217,7 +221,7 @@ def _on_export_process_complete(self): logger.error("Export preflight returned unexpected value") self.export_state_changed.emit(ExportStatus.UNEXPECTED_RETURN_STATUS) - def _on_export_process_error(self): + def _on_export_process_error(self) -> None: """ Callback, called if QProcess cannot complete export. As with all such, the method signature cannot change. @@ -229,7 +233,7 @@ def _on_export_process_error(self): logger.error(f"Export process error: {err}") self.export_state_changed.emit(ExportStatus.CALLED_PROCESS_ERROR) - def _on_print_preflight_complete(self): + def _on_print_preflight_complete(self) -> None: """ Print preflight completion callback. """ @@ -250,7 +254,7 @@ def _on_print_preflight_complete(self): logger.error("Print preflight check failed") self.print_preflight_check_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) - def _on_print_prefight_error(self): + def _on_print_prefight_error(self) -> None: """ Print Preflight error callback. Occurs when the QProcess itself fails. """ @@ -262,7 +266,7 @@ def _on_print_prefight_error(self): # Todo: not sure if we need to connect here, since the print dialog is managed by sd-devices. # We can probably use the export callback. - def _on_print_success(self): + def _on_print_success(self) -> None: self._cleanup_tmpdir() logger.debug("Print success") self.print_succeeded.emit(ExportStatus.PRINT_SUCCESS) @@ -280,13 +284,16 @@ def end_process(self) -> None: if self.process is not None and not self.process.waitForFinished(50): self.process.terminate() - def _on_print_error(self): + def _on_print_error(self) -> None: """ Error callback for print qrexec. """ self._cleanup_tmpdir() - err = self.process.readAllStandardError() - logger.debug(f"Print error: {err}") + if self.process: + err = self.process.readAllStandardError() + logger.debug(f"Print error: {err}") + else: + logger.error("Print error (stderr unavailable)") self.print_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) def print(self, filepaths: List[str]) -> None: diff --git a/client/securedrop_client/gui/base/inputs.py b/client/securedrop_client/gui/base/inputs.py index 2fbbc49d5..3a5473e8a 100644 --- a/client/securedrop_client/gui/base/inputs.py +++ b/client/securedrop_client/gui/base/inputs.py @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ -from PyQt5.QtWidgets import QDialog, QLineEdit +from PyQt5.QtWidgets import QLineEdit, QWidget class PasswordEdit(QLineEdit): @@ -24,7 +24,7 @@ class PasswordEdit(QLineEdit): A LineEdit with icons to show/hide password entries """ - def __init__(self, parent: QDialog) -> None: + def __init__(self, parent: QWidget) -> None: super().__init__(parent) self.setEchoMode(QLineEdit.Password) diff --git a/client/securedrop_client/gui/conversation/export/dialog_button.css b/client/securedrop_client/gui/conversation/export/dialog_button.css deleted file mode 100644 index 132952a4b..000000000 --- a/client/securedrop_client/gui/conversation/export/dialog_button.css +++ /dev/null @@ -1,29 +0,0 @@ -#ModalDialog_button_box QPushButton#ModalDialog_primary_button { - background-color: #2a319d; - color: #fff; -} - -#ModalDialog.dangerous #ModalDialog_button_box QPushButton { - border-color: #ff3366; - color: #ff3366; -} - -#ModalDialog.dangerous #ModalDialog_button_box QPushButton#ModalDialog_primary_button { - background-color: #ff3366; - border-color: #ff3366; - color: #ffffff; -} - -#ModalDialog_button_box QPushButton#ModalDialog_primary_button::disabled { - border: 2px solid #c2c4e3; - background-color: #c2c4e3; - color: #e1e2f1; -} - -#ModalDialog_button_box QPushButton#ModalDialog_primary_button_active { - background-color: #f1f1f6; - color: #fff; - border: 2px solid #f1f1f6; - margin: 0; - height: 40px; -} diff --git a/client/securedrop_client/gui/conversation/export/export_wizard.py b/client/securedrop_client/gui/conversation/export/export_wizard.py index 2630b3b98..eda3ac72c 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard.py @@ -5,14 +5,16 @@ from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt, pyqtSlot from PyQt5.QtGui import QIcon, QKeyEvent +from PyQt5.QtWidgets import QAbstractButton # noqa: F401 from PyQt5.QtWidgets import QApplication, QWizard, QWizardPage from securedrop_client.export import Export from securedrop_client.export_status import ExportStatus from securedrop_client.gui.base import SecureQLabel -from securedrop_client.gui.conversation.export.export_wizard_constants import Pages, STATUS_MESSAGES +from securedrop_client.gui.conversation.export.export_wizard_constants import Pages from securedrop_client.gui.conversation.export.export_wizard_page import ( ErrorPage, + ExportWizardPage, FinalPage, InsertUSBPage, PassphraseWizardPage, @@ -31,7 +33,9 @@ class ExportWizard(QWizard): PASSPHRASE_LABEL_SPACING = 0.5 NO_MARGIN = 0 FILENAME_WIDTH_PX = 260 - BUTTON_CSS = resource_string(__name__, "dialog_button.css").decode("utf-8") + FILE_OPTIONS_FONT_SPACING = 1.6 + BUTTON_CSS = resource_string(__name__, "wizard_button.css").decode("utf-8") + WIZARD_CSS = resource_string(__name__, "wizard.css").decode("utf-8") # If the drive is unlocked, we don't need a passphrase; if we do need one, # it's populated later. @@ -50,59 +54,85 @@ def __init__(self, export: Export, summary_text: str, filepaths: List[str]) -> N # Signal from qrexec command runner self.export.export_state_changed.connect(self.on_status_received) - # Clean up export on dialog closed signal + # Sends cleanup signal to export if wizard is closed or completed. + # (Avoid orphaned QProcess) self.finished.connect(self.export.end_process) + # Activestate animation + self.button_animation = load_movie("activestate-wide.gif") + self.button_animation.setScaledSize(QSize(32, 32)) + self.button_animation.frameChanged.connect(self._animate_activestate) + + # Buttons + self.next_button = self.button(QWizard.WizardButton.NextButton) # type: QAbstractButton + self.cancel_button = self.button(QWizard.WizardButton.CancelButton) # type: QAbstractButton + self.back_button = self.button(QWizard.WizardButton.BackButton) # type: QAbstractButton + self.finish_button = self.button(QWizard.WizardButton.FinishButton) # type: QAbstractButton + + self._style_buttons() self._set_layout() self._set_pages() - self._style_buttons() + self.adjustSize() def keyPressEvent(self, event: QKeyEvent) -> None: + """ + Allow for keyboard navigation of wizard buttons. + """ if event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return: if self.cancel_button.hasFocus(): self.cancel_button.click() + elif self.back_button.hasFocus(): + self.back_button.click() else: self.next_button.click() else: super().keyPressEvent(event) - def text(self) -> str: - """A text-only representation of the dialog.""" - return self.body.text() - def _style_buttons(self) -> None: - self.next_button = self.button(QWizard.WizardButton.NextButton) - self.next_button.clicked.connect(self.request_export) + """ + Style QWizard buttons and connect "Next" button click event to + request_export slot. + """ + self.next_button.setObjectName("QWizardButton_PrimaryButton") self.next_button.setStyleSheet(self.BUTTON_CSS) - self.cancel_button = self.button(QWizard.WizardButton.CancelButton) + self.next_button.setMinimumSize(QSize(130, 40)) + self.next_button.setMaximumHeight(40) + self.next_button.clicked.connect(self.request_export) + + self.cancel_button.setObjectName("QWizardButton_GenericButton") self.cancel_button.setStyleSheet(self.BUTTON_CSS) + self.cancel_button.setMinimumSize(QSize(130, 40)) + self.cancel_button.setMaximumHeight(40) - # Activestate animation - self.button_animation = load_movie("activestate-wide.gif") - self.button_animation.setScaledSize(QSize(32, 32)) - self.button_animation.frameChanged.connect(self.animate_activestate) + self.back_button.setObjectName("QWizardButton_GenericButton") + self.back_button.setStyleSheet(self.BUTTON_CSS) + self.back_button.setMinimumSize(QSize(130, 40)) + self.back_button.setMaximumHeight(40) + + self.finish_button.setObjectName("QWizardButton_GenericButton") + self.finish_button.setStyleSheet(self.BUTTON_CSS) + self.finish_button.setMinimumSize(QSize(130, 40)) + self.finish_button.setMaximumHeight(40) - def animate_activestate(self) -> None: + self.setButtonText(QWizard.WizardButton.NextButton, _("CONTINUE")) + self.setButtonText(QWizard.WizardButton.CancelButton, _("CANCEL")) + self.setButtonText(QWizard.WizardButton.FinishButton, _("DONE")) + self.setButtonText(QWizard.WizardButton.BackButton, _("BACK")) + + def _animate_activestate(self) -> None: self.next_button.setIcon(QIcon(self.button_animation.currentPixmap())) - def start_animate_activestate(self) -> None: + def _start_animate_activestate(self) -> None: self.button_animation.start() - self.next_button.setMinimumSize(QSize(142, 43)) - # Reset widget stylesheets - self.next_button.setStyleSheet("") - self.next_button.setObjectName("ModalDialog_primary_button_active") - self.next_button.setStyleSheet(self.BUTTON_CSS) - def stop_animate_activestate(self) -> None: + def _stop_animate_activestate(self) -> None: self.next_button.setIcon(QIcon()) self.button_animation.stop() - # Reset widget stylesheets - self.next_button.setStyleSheet("") - self.next_button.setObjectName("ModalDialog_primary_button") - self.next_button.setStyleSheet(self.BUTTON_CSS) def _set_layout(self) -> None: - self.setWindowTitle(f"Export {self.summary_text}") + self.setWindowTitle(f"Export {self.summary_text}") # TODO (il8n) + self.setObjectName("QWizard_export") + self.setStyleSheet(self.WIZARD_CSS) self.setModal(False) self.setOptions( QWizard.NoBackButtonOnLastPage @@ -119,17 +149,29 @@ def _set_pages(self) -> None: (Pages.EXPORT_DONE, self._create_done()), ]: self.setPage(id, page) + self.adjustSize() - # Nice to have, but steals the focus from the password field after 1 character is typed. - # Probably another way to have it be based on validating the status - # page.completeChanged.connect(lambda: self._set_focus(QWizard.WizardButton.NextButton)) - - @pyqtSlot(int) - def _set_focus(self, which: QWizard.WizardButton) -> None: - self.button(which).setFocus() - + @pyqtSlot() def request_export(self) -> None: + """ + Handler for "next" button clicks. Start animation and request export. + (The export proceeds only as far as it's able, which is why it's + possible to trigger the same method on every dialog page). + + The Preflight QWizardPage triggers the preflight check itself when + it is created, so there is no corresponding `request_export_preflight` + method. + """ logger.debug("Request export") + # While we're waiting for the results to come back, stay on the same page. + # This prevents the dialog from briefly flashing one page and then + # advancing to a subsequent page (for example, flashing the "Insert a USB" + # page before detecting the USB and advancing to the "Unlock USB" page) + page = self.currentPage() + if isinstance(page, ExportWizardPage): + page.set_complete(False) + self._start_animate_activestate() + # Registered fields let us access the passphrase field # of the PassphraseRequestPage from the wizard parent passphrase_untrusted = self.field("passphrase") @@ -138,22 +180,28 @@ def request_export(self) -> None: else: self.export.export(self.filepaths, self.PASS_PLACEHOLDER_FIELD) - def request_export_preflight(self) -> None: - logger.debug("Request preflight check") - self.export.run_export_preflight_checks() - @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: """ - Update the wizard position based on incoming ExportStatus. - If a status is shown that represents a removed device, - rewind the wizard to the appropriate pane. + Receive status updates from export process. The QWizard is responsible for + listening for a status that requires it to adjust its own position outside of the + normal wizard control flow, such as jumping to an error page if an unrecoverable error + status is encountered, or "rewinding" to a previous page if an unexpected status is + encountered (USB device removed after proceeding past that part of the workflow). + + Child QWizardPages also implement this listener in order to update their own UI and store + a reference to the current status. - To update the text on an individual page, the page listens - for this signal and can call `update_content` in the listener. + Advancing through the normal QWizard control flow is handled by child pages. """ logger.debug(f"Wizard received {status.value}. Current page is {type(self.currentPage())}") + # Release the page (page was held during "next" button click event) + page = self.currentPage() + if isinstance(page, ExportWizardPage): + page.set_complete(True) + self._stop_animate_activestate() + # Unrecoverable - end the wizard if status in [ ExportStatus.ERROR_MOUNT, @@ -194,23 +242,25 @@ def rewind(self, target: Pages) -> None: def end_wizard_with_error(self, error: ExportStatus) -> None: """ - If and end state is reached, display message and let user + If an end state is reached, display message and let user end the wizard. """ + logger.debug("End wizard with error") if isinstance(self.currentPage(), PreflightPage): - # Update its status so it shows error next self.currentPage() logger.debug("On preflight page, no reordering needed") else: while self.currentId() > Pages.ERROR: self.back() + logger.debug(f"Target: {Pages.ERROR}. Actual: {self.currentId()}") page = self.currentPage() - page.update_content(error) + if isinstance(page, ExportWizardPage): + page.update_content(error) def _create_preflight(self) -> QWizardPage: return PreflightPage(self.export, self.summary_text) def _create_errorpage(self) -> QWizardPage: - return ErrorPage(self.export, "") + return ErrorPage(self.export) def _create_insert_usb(self) -> QWizardPage: return InsertUSBPage(self.export, self.summary_text) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_page.py b/client/securedrop_client/gui/conversation/export/export_wizard_page.py index 0609bc086..712f2e40d 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_page.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_page.py @@ -1,5 +1,6 @@ import logging from gettext import gettext as _ +from typing import Optional from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt, pyqtSlot @@ -9,9 +10,7 @@ QGraphicsDropShadowEffect, QHBoxLayout, QLabel, - QLayout, QLineEdit, - QSizePolicy, QVBoxLayout, QWidget, QWizardPage, @@ -30,13 +29,16 @@ class ExportWizardPage(QWizardPage): """ - Base class for all export wizard pages. Individual pages should inherit + Base class for all export wizard pages. Individual pages must inherit from this class to: - * include additional layout items - * implement dynamic ordering (i.e., if the next window varies + * Implement `on_status_received`, a listener that receives export + statuses in order to update the UI and store a reference to the + current state. + * Include additional layout items + * Implement dynamic ordering (i.e., if the next window varies depending on the result of the previous action, in which case the `nextId()` method must be overwritten) - * implement custom validation (logic that prevents a user + * Implement custom validation (logic that prevents a user from skipping to the next page until conditions are met) Every wizard page has: @@ -44,18 +46,17 @@ class ExportWizardPage(QWizardPage): * Body (instructions) * Optional error_instructions (Additional text that is hidden but appears on recoverable error to help the user advance to the next stage) - * Directional buttons (continue/done, cancel) """ - DIALOG_CSS = resource_string(__name__, "dialog.css").decode("utf-8") - ERROR_DETAILS_CSS = resource_string(__name__, "dialog_message.css").decode("utf-8") + WIZARD_CSS = resource_string(__name__, "wizard.css").decode("utf-8") + ERROR_DETAILS_CSS = resource_string(__name__, "wizard_message.css").decode("utf-8") MARGIN = 40 PASSPHRASE_LABEL_SPACING = 0.5 NO_MARGIN = 0 FILENAME_WIDTH_PX = 260 - def __init__(self, export: Export, header: str, body: str) -> None: + def __init__(self, export: Export, header: str, body: Optional[str]) -> None: parent = QApplication.activeWindow() super().__init__(parent) self.export = export @@ -66,12 +67,14 @@ def __init__(self, export: Export, header: str, body: str) -> None: self.setLayout(self._build_layout()) - # Listen for export updates from export + # Listen for export updates from export. + # Pages will receive signals even if they are not the current active page. self.export.export_state_changed.connect(self.on_status_received) def set_complete(self, is_complete: bool) -> None: """ - Flag a page as being incomplete. (Disables Next button) + Flag a page as being incomplete. (Disables Next button and prevents + user from advancing to next page) """ self._is_complete = is_complete @@ -82,8 +85,8 @@ def _build_layout(self) -> QVBoxLayout: """ Create parent layout, draw elements, return parent layout """ - self.setStyleSheet(self.DIALOG_CSS) - parent_layout = QVBoxLayout() + self.setStyleSheet(self.WIZARD_CSS) + parent_layout = QVBoxLayout(self) parent_layout.setContentsMargins(self.MARGIN, self.MARGIN, self.MARGIN, self.MARGIN) # Header for icon and task title @@ -91,25 +94,25 @@ def _build_layout(self) -> QVBoxLayout: header_container_layout = QHBoxLayout() header_container.setLayout(header_container_layout) self.header_icon = SvgLabel("blank.svg", svg_size=QSize(64, 64)) - self.header_icon.setObjectName("ModalDialog_header_icon") + self.header_icon.setObjectName("QWizard_header_icon") self.header_spinner = QPixmap() self.header_spinner_label = QLabel() - self.header_spinner_label.setObjectName("ModalDialog_header_spinner") + self.header_spinner_label.setObjectName("QWizard_header_spinner") self.header_spinner_label.setMinimumSize(64, 64) self.header_spinner_label.setVisible(False) self.header_spinner_label.setPixmap(self.header_spinner) self.header = QLabel() - self.header.setObjectName("ModalDialog_header") + self.header.setObjectName("QWizard_header") + header_container_layout.addWidget(self.header, alignment=Qt.AlignCenter) header_container_layout.addWidget(self.header_icon) header_container_layout.addWidget(self.header_spinner_label) - header_container_layout.addWidget(self.header, alignment=Qt.AlignLeft) # Prev: AlignCenter header_container_layout.addStretch() self.header_line = QWidget() - self.header_line.setObjectName("ModalDialog_header_line") + self.header_line.setObjectName("QWizard_header_line") # Body to display instructions and forms self.body = QLabel() - self.body.setObjectName("ModalDialog_body") + self.body.setObjectName("QWizard_body") self.body.setWordWrap(True) self.body.setScaledContents(True) @@ -120,15 +123,14 @@ def _build_layout(self) -> QVBoxLayout: ) body_container.setLayout(self.body_layout) self.body_layout.addWidget(self.body) - self.body_layout.setSizeConstraint(QLayout.SetMinimumSize) - - # TODO: it's either like this, or in the parent layout elements - self.body_layout.setSizeConstraint(QLayout.SetMinimumSize) # Widget for displaying error messages (hidden by default) self.error_details = QLabel() - self.error_details.setObjectName("ModalDialog_error_details") + self.error_details.setObjectName("QWizard_error_details") self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) + self.error_details.setContentsMargins( + self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN + ) self.error_details.setWordWrap(True) self.error_details.hide() @@ -139,38 +141,26 @@ def _build_layout(self) -> QVBoxLayout: # Populate text content self.header.setText(self.header_text) - self.body.setText(self.body_text) + if self.body_text: + self.body.setText(self.body_text) # Add all the layout elements parent_layout.addWidget(header_container) parent_layout.addWidget(self.header_line) parent_layout.addWidget(body_container) parent_layout.addWidget(self.error_details) - # parent_layout.setSizeConstraint(QLayout.SetFixedSize) + parent_layout.addStretch() return parent_layout def animate_header(self) -> None: self.header_spinner_label.setPixmap(self.header_animation.currentPixmap()) - def animate_activestate(self) -> None: - pass # Animation handled in parent - - def start_animate_activestate(self) -> None: - self.error_details.setStyleSheet("") - self.error_details.setObjectName("ModalDialog_error_details_active") - self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) - def start_animate_header(self) -> None: self.header_icon.setVisible(False) self.header_spinner_label.setVisible(True) self.header_animation.start() - def stop_animate_activestate(self) -> None: - self.error_details.setStyleSheet("") - self.error_details.setObjectName("ModalDialog_error_details") - self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) - def stop_animate_header(self) -> None: self.header_icon.setVisible(True) self.header_spinner_label.setVisible(False) @@ -190,14 +180,16 @@ def update_content(self, status: ExportStatus, should_show_hint: bool = False) - status = ExportStatus.UNEXPECTED_RETURN_STATUS if should_show_hint: - self.error_details.setText(STATUS_MESSAGES.get(status)) - self.error_details.show() + message = STATUS_MESSAGES.get(status) + if message: + self.error_details.setText(message) + self.error_details.show() else: self.error_details.hide() class PreflightPage(ExportWizardPage): - def __init__(self, export, summary): + def __init__(self, export: Export, summary: str) -> None: self.summary = summary header = _( "Preparing to export:
" '{}' @@ -222,7 +214,7 @@ def __init__(self, export, summary): self.start_animate_header() self.export.run_export_preflight_checks() - def nextId(self): + def nextId(self) -> int: """ Override builtin to allow bypassing the password page if device is unlocked. """ @@ -243,39 +235,30 @@ def nextId(self): return Pages.INSERT_USB @pyqtSlot(object) - def on_status_received(self, status: ExportStatus): + def on_status_received(self, status: ExportStatus) -> None: self.stop_animate_header() - if status in ( - ExportStatus.DEVICE_LOCKED, - ExportStatus.DEVICE_WRITABLE, - ExportStatus.NO_DEVICE_DETECTED, - ExportStatus.MULTI_DEVICE_DETECTED, - ExportStatus.INVALID_DEVICE_DETECTED, - ): - header = _( - "Ready to export:
" '{}' - ).format(self.summary) - self.header.setText(header) + header = _("Ready to export:
" '{}').format( + self.summary + ) + self.header.setText(header) self.status = status class ErrorPage(ExportWizardPage): - def __init__(self, export, summary): + def __init__(self, export: Export): header = _("Export Failed") - summary = "" # todo - - super().__init__(export, header=header, body=summary) + super().__init__(export, header=header, body=None) def isComplete(self) -> bool: return False @pyqtSlot(object) - def on_status_received(self, status: ExportStatus): + def on_status_received(self, status: ExportStatus) -> None: pass class InsertUSBPage(ExportWizardPage): - def __init__(self, export, summary): + def __init__(self, export: Export, summary: str) -> None: self.summary = summary header = _("Ready to export:
" '{}').format( summary @@ -292,11 +275,17 @@ def on_status_received(self, status: ExportStatus) -> None: should_show_hint = status in ( ExportStatus.MULTI_DEVICE_DETECTED, ExportStatus.INVALID_DEVICE_DETECTED, - ) or (self.status == status == ExportStatus.NO_DEVICE_DETECTED) + ) or ( + self.status == status == ExportStatus.NO_DEVICE_DETECTED + and isinstance(self.wizard().currentPage, InsertUSBPage) + ) self.update_content(status, should_show_hint) self.status = status self.completeChanged.emit() - if status in (ExportStatus.DEVICE_LOCKED, ExportStatus.DEVICE_WRITABLE): + if status in (ExportStatus.DEVICE_LOCKED, ExportStatus.DEVICE_WRITABLE) and isinstance( + self.wizard().currentPage(), InsertUSBPage + ): + logger.debug("Device detected - advance the wizard") self.wizard().next() def validatePage(self) -> bool: @@ -323,7 +312,7 @@ def validatePage(self) -> bool: logger.warning("InsertUSBPage encountered unexpected status") return super().validatePage() - def nextId(self): + def nextId(self) -> int: """ Override builtin to allow bypassing the password page if device unlocked """ @@ -336,7 +325,8 @@ def nextId(self): return Pages.ERROR else: next = super().nextId() - logger.error("Unexpected status on InsertUSBPage {status.value}, nextID is {next}") + value = self.status.value if self.status else "(no status supplied)" + logger.debug(f"Unexpected status on InsertUSBPage: {value}. nextID is {next}") return next @@ -354,7 +344,7 @@ def on_status_received(self, status: ExportStatus) -> None: self.update_content(status) self.status = status - def update_content(self, status: ExportStatus, should_show_hint: bool = False): + def update_content(self, status: ExportStatus, should_show_hint: bool = False) -> None: header = None body = None if status == ExportStatus.SUCCESS_EXPORT: @@ -380,7 +370,7 @@ class PassphraseWizardPage(ExportWizardPage): Wizard page that includes a passphrase prompt field """ - def __init__(self, export): + def __init__(self, export: Export) -> None: header = _("Enter passphrase for USB drive") super().__init__(export, header, body=None) @@ -389,7 +379,7 @@ def _build_layout(self) -> QVBoxLayout: # Passphrase Form self.passphrase_form = QWidget() - self.passphrase_form.setObjectName("ModalDialog_passphrase_form") + self.passphrase_form.setObjectName("QWizard_passphrase_form") passphrase_form_layout = QVBoxLayout() passphrase_form_layout.setContentsMargins( self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN @@ -430,10 +420,13 @@ def on_status_received(self, status: ExportStatus) -> None: self.update_content(status, should_show_hint) self.status = status self.completeChanged.emit() - if status in (ExportStatus.SUCCESS_EXPORT, ExportStatus.ERROR_EXPORT_CLEANUP): + if status in ( + ExportStatus.SUCCESS_EXPORT, + ExportStatus.ERROR_EXPORT_CLEANUP, + ) and isinstance(self.wizard().currentPage(), PassphraseWizardPage): self.wizard().next() - def validatePage(self): + def validatePage(self) -> bool: # Also to add: DEVICE_BUSY for unmounting. # This shouldn't stop us from going "back" to an error page return self.status in ( @@ -442,7 +435,7 @@ def validatePage(self): ExportStatus.ERROR_EXPORT_CLEANUP, ) - def nextId(self): + def nextId(self) -> int: if self.status == ExportStatus.SUCCESS_EXPORT: return Pages.EXPORT_DONE elif self.status in (ExportStatus.ERROR_UNLOCK_LUKS, ExportStatus.ERROR_UNLOCK_GENERIC): diff --git a/client/securedrop_client/gui/conversation/export/dialog.css b/client/securedrop_client/gui/conversation/export/wizard.css similarity index 78% rename from client/securedrop_client/gui/conversation/export/dialog.css rename to client/securedrop_client/gui/conversation/export/wizard.css index 1814ed903..958cf0229 100644 --- a/client/securedrop_client/gui/conversation/export/dialog.css +++ b/client/securedrop_client/gui/conversation/export/wizard.css @@ -1,4 +1,4 @@ -#ModalDialog { +#QWizard_export { min-width: 800px; max-width: 800px; min-height: 300px; @@ -6,7 +6,7 @@ background-color: #fff; } -#ModalDialog_header_icon, #ModalDialog_header_spinner { +#QWizard_header_icon, #QWizard_header_spinner { min-width: 80px; max-width: 80px; min-height: 64px; @@ -14,7 +14,7 @@ margin: 0px 0px 0px 30px; } -#ModalDialog_header { +#QWizard_header { min-height: 68px; max-height: 68px; margin: 0; @@ -24,7 +24,7 @@ color: #2a319d; } -#ModalDialog_header_line { +#QWizard_header_line { margin: 0; min-height: 2px; max-height: 2px; @@ -32,7 +32,7 @@ border: none; } -#ModalDialog_body { +#QWizard_body { font-family: 'Montserrat'; font-size: 16px; color: #302aa3; @@ -40,7 +40,7 @@ padding: 0; } -#ModalDialogConfirmation { +#QWizardConfirmation { font-family: 'Montserrat'; font-size: 16px; font-weight: 600; @@ -48,15 +48,8 @@ margin: 0; } -#ModalDialog.dangerous #ModalDialogConfirmation { - color: #ff3366; -} - -#ModalDialog_button_box { - border: 1px solid #ff0000; -} -#ModalDialog_button_box QPushButton { +#QWizard_button_box QWizardButton { margin: 0px 0px 0px 12px; height: 40px; margin: 0; @@ -69,7 +62,7 @@ color: #2a319d; } -#ModalDialog_button_box QPushButton::disabled { +#QWizard_button_box QWizardButton::disabled { border: 2px solid rgba(42, 49, 157, 0.4); color: rgba(42, 49, 157, 0.4); } diff --git a/client/securedrop_client/gui/conversation/export/wizard_button.css b/client/securedrop_client/gui/conversation/export/wizard_button.css new file mode 100644 index 000000000..2ccf29214 --- /dev/null +++ b/client/securedrop_client/gui/conversation/export/wizard_button.css @@ -0,0 +1,47 @@ +#QWizardButton_PrimaryButton { + background-color: #2a319d; + color: #f1f1f6; + border: 2px solid #2a319d; + font-family: 'Montserrat'; + font-weight: 500; + margin: 0px; + font-size: 15px; + padding: 11px 18px; + max-height: 40px; + min-height: 40px; +} + +#QWizardButton_PrimaryButton:hover { + background-color: #05a6fe; + border: 2px solid #05a6fe; +} + +#QWizardButton_PrimaryButton:disabled { + border: 2px solid rgba(42, 49, 157, 0.4); + background-color: 2px solid rgba(42, 49, 157, 0.4); + color: #c2c4e3; +} + +#QWizardButton_GenericButton { + background-color: #f1f1f6; + color: #2a319d; + border: 2px solid #2a319d; + margin: 0; + font-family: 'Montserrat'; + font-weight: 500; + font-size: 15px; + padding: 11px 18px; + max-height: 40px; + min-height: 40px; +} + +#QWizardButton_GenericButton:hover { + color: #05a6fe; + border: 2px solid #05a6fe; +} + +#QWizardButton_GenericButton:disabled { + border: 2px solid #c2c4e3; + background-color: #c2c4e3; + color: #e1e2f1; +} diff --git a/client/securedrop_client/gui/conversation/export/dialog_message.css b/client/securedrop_client/gui/conversation/export/wizard_message.css similarity index 76% rename from client/securedrop_client/gui/conversation/export/dialog_message.css rename to client/securedrop_client/gui/conversation/export/wizard_message.css index 20415fe9b..fa0aa8d35 100644 --- a/client/securedrop_client/gui/conversation/export/dialog_message.css +++ b/client/securedrop_client/gui/conversation/export/wizard_message.css @@ -1,11 +1,11 @@ -#ModalDialog_error_details { +#QWizard_error_details { margin: 0px 40px 0px 36px; font-family: 'Montserrat'; font-size: 16px; color: #ff0064; } -#ModalDialog_error_details_active { +#QWizard_error_details_active { margin: 0px 40px 0px 36px; font-family: 'Montserrat'; font-size: 16px; diff --git a/client/tests/conftest.py b/client/tests/conftest.py index 8607ce826..b161d25fe 100644 --- a/client/tests/conftest.py +++ b/client/tests/conftest.py @@ -4,8 +4,8 @@ import tempfile from configparser import ConfigParser from datetime import datetime -from uuid import uuid4 from unittest import mock +from uuid import uuid4 import pytest from PyQt5.QtCore import Qt @@ -180,15 +180,13 @@ def mock_export_locked(): device = conversation.ExportDevice() device.run_export_preflight_checks = lambda: device.export_state_changed.emit( - ExportStatus.DEVICE_LOCKED + ExportStatus.NO_DEVICE_DETECTED ) device.run_printer_preflight_checks = lambda: None device.print = lambda filepaths: None device.export = mock.MagicMock() device.export.side_effect = [ - lambda filepaths, passphrase: device.export_state_changed.emit( - ExportStatus.DEVICE_WRITABLE - ), + lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.DEVICE_LOCKED), lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.SUCCESS_EXPORT), ] @@ -218,14 +216,14 @@ def mock_export_unlocked(): @pytest.fixture(scope="function") -def mock_export_no_usb_then_bad_passphrase_then_fail(): +def mock_export_no_usb_then_bad_passphrase(): """ Represents the following scenario: * Export wizard launched * Locked USB inserted * Mistyped Passphrase * Correct passphrase - * Export fails + * Export succeeds """ device = conversation.ExportDevice() @@ -243,7 +241,7 @@ def mock_export_no_usb_then_bad_passphrase_then_fail(): lambda filepaths, passphrase: device.export_state_changed.emit( ExportStatus.DEVICE_WRITABLE ), - lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.ERROR_EXPORT), + lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.SUCCESS_EXPORT), ] return device diff --git a/client/tests/functional/test_export_file_wizard.py b/client/tests/functional/test_export_file_wizard.py index f36d27593..75b009a85 100644 --- a/client/tests/functional/test_export_file_wizard.py +++ b/client/tests/functional/test_export_file_wizard.py @@ -7,6 +7,13 @@ import pytest from PyQt5.QtCore import Qt +from securedrop_client.gui.conversation.export.export_wizard_page import ( + ErrorPage, + FinalPage, + InsertUSBPage, + PassphraseWizardPage, + PreflightPage, +) from securedrop_client.gui.widgets import FileWidget, SourceConversationWrapper from tests.conftest import ( TIME_CLICK_ACTION, @@ -16,13 +23,6 @@ TIME_RENDER_SOURCE_LIST, ) -from securedrop_client.gui.conversation.export.export_wizard_page import ( - PreflightPage, - InsertUSBPage, - PassphraseWizardPage, - FinalPage, -) - def _setup_export(functional_test_logged_in_context, qtbot, mocker, mock_export): """ @@ -129,13 +129,13 @@ def check_password_page(): qtbot.wait(TIME_CLICK_ACTION) assert isinstance( - export_wizard.currentPage, FinalPage + export_wizard.currentPage(), FinalPage ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" @pytest.mark.vcr() def test_export_wizard_dialog_device_already_unlocked( - functional_test_logged_in_context, qtbot, mocker, mock_export_no_usb_then_locked + functional_test_logged_in_context, qtbot, mocker, mock_export_unlocked ): """ Download a file, export it, and verify that the export is complete. @@ -146,7 +146,7 @@ def test_export_wizard_dialog_device_already_unlocked( * Export success """ export_wizard = _setup_export( - functional_test_logged_in_context, qtbot, mocker, mock_export_no_usb_then_locked + functional_test_logged_in_context, qtbot, mocker, mock_export_unlocked ) assert isinstance( @@ -174,11 +174,11 @@ def check_insert_usb_page(): @pytest.mark.vcr() -def test_export_wizard_no_device_then_fail( +def test_export_wizard_no_device_then_bad_passphrase( functional_test_logged_in_context, qtbot, mocker, - mock_export_no_usb_then_bad_passphrase_then_fail, + mock_export_no_usb_then_bad_passphrase, ): """ Download a file, attempt export, encounter error that terminates the wizard early. @@ -189,14 +189,13 @@ def test_export_wizard_no_device_then_fail( * Insert USB * Enter passphrase incorrectly * Re-enter passphrase - * Export fails (eg USB is full) - * Wizard should still advance to final page, but show error state + * Export succeeds """ export_wizard = _setup_export( functional_test_logged_in_context, qtbot, mocker, - mock_export_no_usb_then_bad_passphrase_then_fail, + mock_export_no_usb_then_bad_passphrase, ) assert isinstance( @@ -250,7 +249,7 @@ def check_password_page_with_error_details(): export_wizard.currentPage().passphrase_field, "correct passwords unlock swimmingly!" ) - def error_mount_page(): + def final_page(): """ After an incorrect password, the 'error details' should be visible with a message about incorrect passphrase. @@ -258,15 +257,54 @@ def error_mount_page(): assert isinstance( export_wizard.currentPage(), FinalPage ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" - assert export_wizard.currentPage().header.text() == "Export failed" - qtbot.mouseClick(export_wizard.currentPage().passphrase_field, Qt.LeftButton) + qtbot.mouseClick(export_wizard.next_button, Qt.LeftButton) qtbot.wait(TIME_CLICK_ACTION) - qtbot.waitUntil(error_mount_page, timeout=TIME_CLICK_ACTION) + qtbot.waitUntil(final_page, timeout=TIME_CLICK_ACTION) + + assert isinstance( + export_wizard.currentPage, FinalPage + ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" + +@pytest.mark.vcr() +def test_export_wizard_error( + functional_test_logged_in_context, qtbot, mocker, mock_export_fail_early +): + """ + Represents the following scenario: + * Locked USB inserted + * Export wizard launched + * Unrecoverable error before export happens + (eg, mount error) + """ + export_wizard = _setup_export( + functional_test_logged_in_context, qtbot, mocker, mock_export_fail_early + ) + + assert isinstance( + export_wizard.currentPage(), PreflightPage + ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" + + def check_password_page(): + assert isinstance( + export_wizard.currentPage(), PassphraseWizardPage + ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" + + # Move to "insert usb" screen + qtbot.mouseClick(export_wizard.next_button, Qt.LeftButton) + qtbot.wait(TIME_CLICK_ACTION) + qtbot.waitUntil(check_password_page, timeout=TIME_CLICK_ACTION) + + def check_error_page(): + assert isinstance( + export_wizard.currentPage(), ErrorPage + ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" + + # Continue exporting the file qtbot.mouseClick(export_wizard.next_button, Qt.LeftButton) qtbot.wait(TIME_CLICK_ACTION) assert isinstance( - export_wizard.currentPage, FinalPage + export_wizard.currentPage(), ErrorPage ), f"Actual: {export_wizard.currentPage()} ({export_wizard.currentId()})" diff --git a/client/tests/gui/conversation/export/test_device.py b/client/tests/test_export.py similarity index 73% rename from client/tests/gui/conversation/export/test_device.py rename to client/tests/test_export.py index 5313630b3..0244f2bdb 100644 --- a/client/tests/gui/conversation/export/test_device.py +++ b/client/tests/test_export.py @@ -4,8 +4,8 @@ from unittest import mock import pytest - from PyQt5.QtTest import QSignalSpy + from securedrop_client.export_status import ExportError, ExportStatus from securedrop_client.gui.conversation.export import Export from tests import factory @@ -25,6 +25,19 @@ ) _MOCK_FILEDIR = "/tmp/mock_tmpdir/" +# A few different status values to be used in test paramaterization +_SAMPLE_EXPORT = [ + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.DEVICE_WRITABLE, + ExportStatus.ERROR_MOUNT, + ExportStatus.ERROR_MISSING_FILES, + ExportStatus.SUCCESS_EXPORT, +] +_SAMPLE_PRINT_PREFLIGHT_FAIL = [ + ExportStatus.ERROR_PRINTER_NOT_FOUND, + ExportStatus.ERROR_PRINTER_DRIVER_UNAVAILABLE, +] + class TestDevice: @classmethod @@ -48,20 +61,19 @@ def teardown_method(cls): cls.device._create_archive = None def test_Device_run_printer_preflight_checks(self): - device = Export() - device._create_archive = mock.MagicMock() - device._create_archive.return_value = _PATH_TO_PRETEND_ARCHIVE - with mock.patch( "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch.object( + self.device, "_create_archive" + ) as mock_archive: + mock_archive.return_value = _PATH_TO_PRETEND_ARCHIVE mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() mock_qproc.readAllStandardError.return_value = ( ExportStatus.PRINT_PREFLIGHT_SUCCESS.value.encode("utf-8") ) - device.run_printer_preflight_checks() + self.device.run_printer_preflight_checks() mock_qproc.start.assert_called_once() assert ( @@ -69,24 +81,34 @@ def test_Device_run_printer_preflight_checks(self): ), f"Actual: {mock_qproc.start.call_args[0]}" def test_Device_run_print_preflight_checks_with_error(self): - spy = QSignalSpy(self.device.export_state_changed) + spy = QSignalSpy(self.device.print_preflight_check_failed) with mock.patch( "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch.object( + self.device, "_create_archive" + ) as mock_archive, mock.patch( + "shutil.rmtree" + ) as mock_rmtree: + mock_archive.return_value = _PATH_TO_PRETEND_ARCHIVE mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() mock_qproc.start.side_effect = ( - lambda proc, args: mock_qproc.finished.emit() + lambda proc, args: self.device._on_print_preflight_complete() ) # This ain't doin it - mock_qproc.readAllStandardError.return_value = b"Not a real status\n" + mock_qproc.readAllStandardError.data.return_value = b"Not a real status\n" self.device.run_printer_preflight_checks() mock_qproc.start.assert_called_once() + mock_rmtree.assert_called_once() - # TODO - # assert len(spy) == 1 and spy[0] == ExportStatus.UNEXPECTED_RETURN_STATUS + # Note: in future can return UNEXPECTED_RETURN_STATUS instead + assert ( + len(spy) == 1 + and isinstance(spy[0][0], ExportError) + and spy[0][0].status == ExportStatus.ERROR_PRINT + ) def test_Device_print(self): with mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch( @@ -95,10 +117,11 @@ def test_Device_print(self): ): mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() + self.device.print([self.mock_file_location]) - mock_qprocess.start.assert_called_once() - assert mock_qprocess.start.call_args[0] == _QREXEC_EXPORT_COMMAND + mock_qproc.start.assert_called_once() + assert mock_qproc.start.call_args[0] == _QREXEC_EXPORT_COMMAND self.device._create_archive.assert_called_once_with( archive_dir=self.mock_tmpdir, @@ -107,9 +130,10 @@ def test_Device_print(self): filepaths=[self.mock_file_location], ) - def test_Device_print_file_file_missing(self, mocker): + @mock.patch("shutil.rmtree") + def test_Device_print_file_file_missing(self, mock_shutil): device = Export() - spy = QSignalSpy(device.export_state_changed) + spy = QSignalSpy(device.print_failed) with mock.patch( "securedrop_client.export.mkdtemp", @@ -121,8 +145,13 @@ def test_Device_print_file_file_missing(self, mocker): device.print("some-missing-file-uuid") mock_qproc.start.assert_not_called() - # TODO - # assert len(spy) == 1 and spy[0] == ExportError(ExportStatus.ERROR_MISSING_FILES) + + # Print doesn't use the new ERROR_MISSING_FILES status yet + assert ( + len(spy) == 1 + and isinstance(spy[0][0], ExportError) + and spy[0][0].status == ExportStatus.ERROR_PRINT + ) def test_Device_run_export_preflight_checks(self): with mock.patch( @@ -133,20 +162,18 @@ def test_Device_run_export_preflight_checks(self): mock_qproc.start = mock.MagicMock() self.device.run_export_preflight_checks() - # mock_qproc.start.call_args[0] - # '/usr/bin/qrexec-client-vm', ['--', 'sd-devices', 'qubes.OpenInVM', '/usr/lib/qubes/qopen-in-vm', '--view-only', '--', '/tmp/archive-pretend'] mock_qproc.start.assert_called_once() assert mock_qproc.start.call_args[0] == _QREXEC_EXPORT_COMMAND - # Call args: call(archive_dir=, archive_fn='usb-test.sd-export', metadata={'device': 'usb-test'}) self.device._create_archive.assert_called_once_with( archive_dir=self.mock_tmpdir, archive_fn=self.device._USB_TEST_FN, metadata=self.device._USB_TEST_METADATA, ) - def test_Device_run_export_preflight_checks_with_error(self): + @mock.patch("shutil.rmtree") + def test_Device_run_export_preflight_checks_with_error(self, mock_shutil): spy = QSignalSpy(self.device.export_state_changed) with mock.patch( @@ -154,7 +181,10 @@ def test_Device_run_export_preflight_checks_with_error(self): return_value=self.mock_tmpdir, ), mock.patch.object(self.device, "_create_archive"), mock.patch( "securedrop_client.export.QProcess" - ) as mock_qprocess: + ) as mock_qprocess, mock.patch.object( + self.device, "_create_archive" + ) as mock_archive: + mock_archive.return_value = _PATH_TO_PRETEND_ARCHIVE mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() mock_qproc.start.side_effect = ( @@ -165,7 +195,7 @@ def test_Device_run_export_preflight_checks_with_error(self): self.device.run_export_preflight_checks() - assert len(spy) == 1 and spy[0] == ExportStatus.UNEXPECTED_RETURN_STATUS + assert len(spy) == 1 and spy[0][0] == ExportStatus.UNEXPECTED_RETURN_STATUS def test_Device_export_file_missing(self, mocker): device = Export() @@ -212,27 +242,53 @@ def test_Device_export(self): filepaths=[filepath], ) - @pytest.mark.parametrize("status", [i.value for i in ExportStatus]) - def test__run_qrexec_success(self, status): + @pytest.mark.parametrize("status", [i.value for i in _SAMPLE_EXPORT]) + def test__run_qrexec_sends_export_signal(self, status): + spy = QSignalSpy(self.device.export_state_changed) enum = ExportStatus(status) - with mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch.object( - self.device, "_on_export_process_complete" - ) as mock_callback: + with mock.patch("securedrop_client.export.QProcess") as mock_qprocess: mock_qproc = mock_qprocess.return_value mock_qproc.finished = mock.MagicMock() mock_qproc.start = mock.MagicMock() mock_qproc.start.side_effect = ( lambda proc, args: self.device._on_export_process_complete() ) - mock_qproc.readAllStandardError.return_value = f"{status}\n".encode("utf-8") + mock_qproc.readAllStandardError.return_value.data.return_value = f"{status}\n".encode( + "utf-8" + ) self.device._run_qrexec_export( _PATH_TO_PRETEND_ARCHIVE, - mock_callback, + self.device._on_export_process_complete, self.device._on_export_process_error, ) mock_qproc.start.assert_called_once() + assert len(spy) == 1 and spy[0][0] == enum + + @pytest.mark.parametrize("status", [i.value for i in _SAMPLE_PRINT_PREFLIGHT_FAIL]) + def test__run_qrexec_sends_print_failed_signal(self, status): + spy = QSignalSpy(self.device.print_preflight_check_failed) + enum = ExportStatus(status) + with mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + mock_qproc = mock_qprocess.return_value + mock_qproc.finished = mock.MagicMock() + mock_qproc.start = mock.MagicMock() + mock_qproc.start.side_effect = ( + lambda proc, args: self.device._on_print_preflight_complete() + ) + mock_qproc.readAllStandardError.return_value.data.return_value = f"{status}\n".encode( + "utf-8" + ) + + self.device._run_qrexec_export( + _PATH_TO_PRETEND_ARCHIVE, + self.device._on_print_preflight_complete, + self.device._on_print_prefight_error, + ) + + mock_qproc.start.assert_called_once() + assert len(spy) == 1 and isinstance(spy[0][0], ExportError) and spy[0][0].status == enum @mock.patch("securedrop_client.export.tarfile") def test__add_virtual_file_to_archive(self, mock_tarfile): @@ -300,7 +356,7 @@ def test__tmpdir_cleaned_up_on_exception(self): """ with mock.patch( "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir - ) as tmpdir, mock.patch("securedrop_client.export.QProcess") as qprocess, mock.patch.object( + ), mock.patch("securedrop_client.export.QProcess") as qprocess, mock.patch.object( self.device, "_cleanup_tmpdir" ) as mock_cleanup: mock_qproc = qprocess.return_value @@ -308,4 +364,4 @@ def test__tmpdir_cleaned_up_on_exception(self): mock_qproc.start = lambda proc, args: self.device._on_export_process_error() self.device.run_printer_preflight_checks() assert self.device.tmpdir == self.mock_tmpdir - mock_cleanup.assert_called() + mock_cleanup.assert_called_once() From 73ea9d24f43164b790d10d8617a803c973fa06bb Mon Sep 17 00:00:00 2001 From: Ro Date: Fri, 9 Feb 2024 16:07:36 -0500 Subject: [PATCH 662/751] Replace cryptsetup dependency with udisks2. --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 95fb5003e..6ad809729 100644 --- a/debian/control +++ b/debian/control @@ -14,7 +14,7 @@ Description: securedrop client for qubes workstation Package: securedrop-export Architecture: all -Depends: ${python3:Depends}, ${misc:Depends}, cryptsetup, cups, printer-driver-brlaser, printer-driver-hpcups, system-config-printer, xpp, libcups2-dev, python3-dev, libtool-bin, unoconv, gnome-disk-utility +Depends: ${python3:Depends}, ${misc:Depends}, udisks2, cups, printer-driver-brlaser, printer-driver-hpcups, system-config-printer, xpp, libcups2-dev, python3-dev, libtool-bin, unoconv, gnome-disk-utility Description: Submission export scripts for SecureDrop Workstation This package provides scripts used by the SecureDrop Qubes Workstation to export submissions from the client to external storage, via the sd-export From 93cd8f408da15b706b87b405460641abdbdbe262 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 12 Feb 2024 17:08:01 -0500 Subject: [PATCH 663/751] Add dependency on types-pexpect (mypy). --- export/poetry.lock | 11 +++ export/pyproject.toml | 1 + export/securedrop_export/disk/cli.py | 114 ++++++++++++++++++--------- export/securedrop_export/main.py | 1 - export/tests/disk/test_cli.py | 17 ++-- export/tests/disk/test_service.py | 4 +- 6 files changed, 95 insertions(+), 53 deletions(-) diff --git a/export/poetry.lock b/export/poetry.lock index 2358699fa..6b1f3115e 100644 --- a/export/poetry.lock +++ b/export/poetry.lock @@ -1003,6 +1003,17 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +[[package]] +name = "types-pexpect" +version = "4.9.0.20240207" +description = "Typing stubs for pexpect" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-pexpect-4.9.0.20240207.tar.gz", hash = "sha256:910e20f0f177aeee5f2808d1b3221e3a23dfa1ca3bb02f685c2788fce6ddeb73"}, + {file = "types_pexpect-4.9.0.20240207-py3-none-any.whl", hash = "sha256:22b3fdccf253a8627bac0d3169845743fe0b1dbc87e5d33a438faaf879eb1f7a"}, +] + [[package]] name = "types-setuptools" version = "68.2.0.0" diff --git a/export/pyproject.toml b/export/pyproject.toml index be8b8d976..6d185858e 100644 --- a/export/pyproject.toml +++ b/export/pyproject.toml @@ -19,6 +19,7 @@ pytest = "^7.4.0" pytest-cov = "^4.1.0" pytest-mock = "^3.11.1" semgrep = "^1.31.2" +types-pexpect = "^4.9.0.20240207" [tool.mypy] python_version = "3.9" diff --git a/export/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py index 1148e17b6..9a4f54231 100644 --- a/export/securedrop_export/disk/cli.py +++ b/export/securedrop_export/disk/cli.py @@ -2,10 +2,10 @@ import logging import os import pexpect -import re import subprocess import time +from re import Pattern from typing import Optional, Union from securedrop_export.exceptions import ExportException @@ -22,6 +22,26 @@ "--------------------------------------------------------------------------\n" ) +# pexpect allows for a complex type to be passed to `expect` in order to match with input +# that includes regular expressions, byte or string patterns, *or* pexpect.EOF and pexpect.TIMEOUT, +# but mypy needs a little help with it, so the below alias is used as a typehint. +# See https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect +PexpectList = Union[ + Pattern[str], + Pattern[bytes], + str, + bytes, + type[pexpect.EOF], + type[pexpect.TIMEOUT], + list[ + Union[ + Pattern[str], + Pattern[bytes], + Union[str, bytes, Union[type[pexpect.EOF], type[pexpect.TIMEOUT]]], + ] + ], +] + class CLI: """ @@ -83,7 +103,9 @@ def get_volume(self) -> Union[Volume, MountedVolume]: logger.error("Unrecoverable: could not parse lsblk.") raise ExportException(sdstatus=Status.DEVICE_ERROR) - volumes = [] + # mypy complains that this is a list[str], but it is a + # list[Union[Volume, MountedVolume]] + volumes = [] # type: ignore for device in lsblk_json.get("blockdevices"): if device.get("name") in targets and device.get("ro") is False: logger.debug( @@ -94,21 +116,21 @@ def get_volume(self) -> Union[Volume, MountedVolume]: if "children" in device: for partition in device.get("children"): # /dev/sdX1, /dev/sdX2 etc - item = self._get_supported_volume(partition) + item = self._get_supported_volume(partition) # type: ignore if item: - volumes.append(item) + volumes.append(item) # type: ignore # /dev/sdX else: - item = self._get_supported_volume(device) + item = self._get_supported_volume(device) # type: ignore if item: - volumes.append(item) + volumes.append(item) # type: ignore if len(volumes) != 1: logger.error(f"Need one target, got {len(volumes)}") raise ExportException(sdstatus=Status.INVALID_DEVICE_DETECTED) else: - logger.debug(f"Export target is {volumes[0].device_name}") - return volumes[0] + logger.debug(f"Export target is {volumes[0].device_name}") # type: ignore + return volumes[0] # type: ignore except json.JSONDecodeError as err: logger.error(err) @@ -232,16 +254,24 @@ def unlock_volume(self, volume: Volume, encryption_key: str) -> MountedVolume: logger.debug("Unlocking volume {}".format(volume.device_name)) command = f"udisksctl unlock --block-device {volume.device_name}" - prompt = ["Passphrase: ", pexpect.EOF, pexpect.TIMEOUT] + + # pexpect allows for a match list that contains pexpect.EOF and pexpect.TIMEOUT + # as well as string/regex matches: + # https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect + prompt = [ + "Passphrase: ", + pexpect.EOF, + pexpect.TIMEOUT, + ] # type: PexpectList expected = [ - f"Unlocked {volume.device_name} as (.*)\.", + f"Unlocked {volume.device_name} as (.*)[^\r\n].", "GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Device " # string continues - f"{volume.device_name} is already unlocked as (.*)\.", + f"{volume.device_name} is already unlocked as (.*)[^\r\n].", "GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Error " # string continues f"unlocking {volume.device_name}: Failed to activate device: Incorrect passphrase", pexpect.EOF, pexpect.TIMEOUT, - ] + ] # type: PexpectList unlock_error = Status.ERROR_UNLOCK_GENERIC child = pexpect.spawn(command) @@ -254,8 +284,10 @@ def unlock_volume(self, volume: Volume, encryption_key: str) -> MountedVolume: child.sendline(encryption_key) index = child.expect(expected) if index == 0 or index == 1: - # We know what format the string is in - dm_name = child.match.group(1).decode("utf-8").strip() + # We know what format the string is in. + # Pexpect includes a re.Match object at `child.match`, but this freaks mypy out: + # see https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect + dm_name = child.match.group(1).decode("utf-8").strip() # type: ignore logger.debug(f"Device is unlocked as {dm_name}") child.close() @@ -294,64 +326,68 @@ def _mount_volume(self, volume: Volume, full_unlocked_name: str) -> MountedVolum info = f"udisksctl info --block-device {volume.device_name}" # \x1b[37mPreferredDevice:\x1b[0m /dev/sdaX\r\n expected_info = [ - f"*PreferredDevice:[\t+]{volume.device_name}\r\n", - "*Error looking up object for device*", + f"PreferredDevice:[\t+]{volume.device_name}", + "Error looking up object for device", pexpect.EOF, pexpect.TIMEOUT, - ] + ] # type: PexpectList max_retries = 3 - unlock = f"udisksctl mount --block-device {full_unlocked_name}" + mount = f"udisksctl mount --block-device {full_unlocked_name}" # We can't pass {full_unlocked_name} in the match statement since even if we # pass in /dev/mapper/xxx, udisks2 may refer to the disk as /dev/dm-X. - expected_unlock = [ - f"Mounted * at (.*)", - f"Error mounting *: GDBus.Error:org." # string continues - "freedesktop.UDisks2.Error.AlreadyMounted: " # string continues - "Device .* is already mounted at `(.*)'", - f"Error looking up object for device *.", + expected_mount = [ + "Mounted .* at (.*)", + "Error mounting .*: GDBus.Error:org.freedesktop.UDisks2.Error.AlreadyMounted: " + "Device (.*) is already mounted at `(.*)'.", + "Error looking up object for device", pexpect.EOF, pexpect.TIMEOUT, - ] + ] # type: PexpectList mountpoint = None - logger.debug(f"Check to make sure udisks identified {volume.device_name} " - "(unlocked as {full_unlocked_name})") + logger.debug( + f"Check to make sure udisks identified {volume.device_name} " + f"(unlocked as {full_unlocked_name})" + ) for _ in range(max_retries): child = pexpect.spawn(info) index = child.expect(expected_info) - logger.debug(f"Results from udisks info: {volume.device_name}, " - "before: {child.before}, after: {child.after}") + logger.debug( + f"Results from udisks info: {volume.device_name}, " + f"before: {child.before}, after: {child.after}" + ) child.close() if index != 0: - logger.debug(f"index {index}") - logger.warning( + logger.debug( f"udisks can't identify {volume.device_name}, retrying..." ) time.sleep(0.5) else: - print(f"udisks found {volume.device_name}") + logger.debug(f"udisks found {volume.device_name}") break logger.info(f"Mount {full_unlocked_name} using udisksctl") - child = pexpect.spawn(unlock) - index = child.expect(expected_unlock) + child = pexpect.spawn(mount) + index = child.expect(expected_mount) logger.debug( f"child: {str(child.match)}, before: {child.before}, after: {child.after}" ) if index == 0: - # As above, we know the format - mountpoint = child.match.group(1).decode("utf-8").strip() + # As above, we know the format. + # Per https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect, + # `child.match` is a re.Match object + mountpoint = child.match.group(1).decode("utf-8").strip() # type: ignore logger.debug(f"Successfully mounted device at {mountpoint}") elif index == 1: - # Mountpoint needs a bit of help. It arrives in the form `/path/to/mountpoint'. - # including the one backtick, single quote, and the period - mountpoint = child.match.group(1).decode("utf-8").strip() + # Use udisks unlocked name + full_unlocked_name = child.match.group(1).decode("utf-8").strip() # type: ignore + mountpoint = child.match.group(2).decode("utf-8").strip() # type: ignore logger.debug(f"Device already mounted at {mountpoint}") elif index == 2: diff --git a/export/securedrop_export/main.py b/export/securedrop_export/main.py index 4535a1dc7..d04787c3b 100755 --- a/export/securedrop_export/main.py +++ b/export/securedrop_export/main.py @@ -5,7 +5,6 @@ import platform import logging import sys -from typing import Optional from securedrop_export.archive import Archive, Metadata from securedrop_export.command import Command diff --git a/export/tests/disk/test_cli.py b/export/tests/disk/test_cli.py index 2723d5f36..9b6b3cb77 100644 --- a/export/tests/disk/test_cli.py +++ b/export/tests/disk/test_cli.py @@ -1,9 +1,7 @@ import pytest -from pexpect import ExceptionPexpect from unittest import mock import subprocess -import pexpect import re from securedrop_export.disk.cli import CLI @@ -410,7 +408,6 @@ def test_cleanup_error_reports_exporterror_if_flagged(self, mock_popen): self.cli.cleanup(mock_volume, submission.tmpdir, is_error=True) assert ex.value.sdstatus is Status.ERROR_EXPORT - @mock.patch("os.path.exists", return_value=False) @mock.patch("subprocess.check_call", return_value=0) def test_cleanup(self, mock_subprocess, mocked_path): @@ -444,14 +441,14 @@ def test_cleanup(self, mock_subprocess, mocked_path): def test_parse_correct_mountpoint_from_pexpect(self, mock_pexpect): child = mock_pexpect() child.expect.return_value = 1 - child.match.return_value = re.match( - r"`(\w+)'\.\r\n".encode("utf-8"), - "Error mounting /dev/dm-1: GDBus.Error:org." - "freedesktop.UDisks2.Error.AlreadyMounted: " - "Device /dev/sda1 is already mounted at `/dev/dm-0'.\r\n".encode("utf-8"), - ) + child.match = mock.MagicMock() + child.match.group.side_effect = [ + "/dev/dm-0".encode("utf-8"), + "/media/usb".encode("utf-8"), + ] mv = self.cli._mount_volume( - Volume("/dev/sda1", EncryptionScheme.VERACRYPT), "/dev/dm-1" + Volume("/dev/sda1", EncryptionScheme.VERACRYPT), "/dev/mapper/vc" ) assert mv.unlocked_name == "/dev/dm-0" + assert mv.mountpoint == "/media/usb" diff --git a/export/tests/disk/test_service.py b/export/tests/disk/test_service.py index 73dc0210a..3b52fe985 100644 --- a/export/tests/disk/test_service.py +++ b/export/tests/disk/test_service.py @@ -59,9 +59,7 @@ def _setup_submission(cls) -> Archive: temp_folder = tempfile.mkdtemp() metadata = os.path.join(temp_folder, Metadata.METADATA_FILE) with open(metadata, "w") as f: - f.write( - '{"device": "disk", "encryption_key": "hunter1"}' - ) + f.write('{"device": "disk", "encryption_key": "hunter1"}') return submission.set_metadata(Metadata(temp_folder).validate()) From dc32ba2f8cdc4412020eff3679349e11596e037a Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 13 Feb 2024 11:52:00 -0500 Subject: [PATCH 664/751] Rewrite ExportWizard integration, unit, and functional tests. Include small bugfixes in cli (export). Extract localization strings. Simplify wizard control flow. Use pexpect list mode for arguments --- client/securedrop_client/export.py | 10 +- client/securedrop_client/export_status.py | 3 +- client/securedrop_client/gui/actions.py | 11 +- .../gui/conversation/__init__.py | 3 +- .../gui/conversation/export/__init__.py | 1 - .../gui/conversation/export/export_wizard.py | 123 +- .../export/export_wizard_constants.py | 11 +- .../conversation/export/export_wizard_page.py | 280 +-- .../gui/conversation/export/print_dialog.py | 12 +- .../gui/conversation/export/wizard.css | 12 +- .../gui/conversation/export/wizard_button.css | 4 +- .../conversation/export/wizard_message.css | 2 +- client/securedrop_client/gui/widgets.py | 12 +- client/securedrop_client/locale/messages.pot | 62 +- client/tests/conftest.py | 90 +- .../cassettes/test_export_file_dialog.yaml | 1685 ----------------- ...xport_wizard_device_already_unlocked.yaml} | 0 .../cassettes/test_export_wizard_error.yaml | 1517 +++++++++++++++ ...wizard_no_device_then_bad_passphrase.yaml} | 0 ...t_file_wizard.py => test_export_wizard.py} | 137 +- .../conversation/export/test_export_wizard.py | 33 +- .../conversation/export/test_print_dialog.py | 40 +- client/tests/gui/test_actions.py | 24 - client/tests/gui/test_widgets.py | 14 +- client/tests/integration/conftest.py | 36 +- .../tests/integration/test_styles_sdclient.py | 129 +- client/tests/test_export.py | 2 +- export/securedrop_export/archive.py | 4 +- export/securedrop_export/disk/cli.py | 155 +- export/securedrop_export/disk/service.py | 5 +- export/securedrop_export/disk/status.py | 8 +- export/securedrop_export/main.py | 59 +- export/securedrop_export/print/service.py | 15 +- export/securedrop_export/print/status.py | 2 +- export/tests/disk/test_cli.py | 40 +- export/tests/disk/test_service.py | 10 +- export/tests/print/test_service.py | 19 +- export/tests/test_archive.py | 9 +- export/tests/test_directory.py | 7 +- export/tests/test_exceptions.py | 5 +- export/tests/test_main.py | 21 +- 41 files changed, 2287 insertions(+), 2325 deletions(-) delete mode 100644 client/tests/functional/cassettes/test_export_file_dialog.yaml rename client/tests/functional/cassettes/{test_export_wizard_dialog_device_already_unlocked.yaml => test_export_wizard_device_already_unlocked.yaml} (100%) create mode 100644 client/tests/functional/cassettes/test_export_wizard_error.yaml rename client/tests/functional/cassettes/{test_export_wizard_no_device_then_fail.yaml => test_export_wizard_no_device_then_bad_passphrase.yaml} (100%) rename client/tests/functional/{test_export_file_wizard.py => test_export_wizard.py} (74%) diff --git a/client/securedrop_client/export.py b/client/securedrop_client/export.py index 3dcc9e7ba..1a768bcf4 100644 --- a/client/securedrop_client/export.py +++ b/client/securedrop_client/export.py @@ -193,8 +193,9 @@ def _cleanup_tmpdir(self) -> None: def _on_export_process_complete(self) -> None: """ - Callback, handle and emit QProcess result. As with all such callbacks, - the method signature cannot change. + Callback, handle and emit results from QProcess. Information + can be read from stdout/err. This callback will be triggered + if the QProcess exits with return code 0. """ self._cleanup_tmpdir() # securedrop-export writes status to stderr @@ -270,8 +271,6 @@ def _on_print_success(self) -> None: self._cleanup_tmpdir() logger.debug("Print success") self.print_succeeded.emit(ExportStatus.PRINT_SUCCESS) - # TODO: Previously emitted [filepaths] - self.export_completed.emit([]) def end_process(self) -> None: """ @@ -305,6 +304,7 @@ def print(self, filepaths: List[str]) -> None: logger.debug("Beginning print") self.tmpdir = mkdtemp() + os.chmod(self.tmpdir, 0o700) archive_path = self._create_archive( archive_dir=self.tmpdir, archive_fn=self._PRINT_FN, @@ -327,8 +327,6 @@ def print(self, filepaths: List[str]) -> None: logger.error("Print failed while creating archive (no status supplied)") self.print_failed.emit(ExportError(ExportStatus.ERROR_PRINT)) - self.export_completed.emit(filepaths) - def _create_archive( self, archive_dir: str, archive_fn: str, metadata: dict, filepaths: List[str] = [] ) -> str: diff --git a/client/securedrop_client/export_status.py b/client/securedrop_client/export_status.py index da475c3fa..65a0c43e0 100644 --- a/client/securedrop_client/export_status.py +++ b/client/securedrop_client/export_status.py @@ -31,8 +31,9 @@ class ExportStatus(Enum): SUCCESS_EXPORT = "SUCCESS_EXPORT" ERROR_EXPORT = "ERROR_EXPORT" # Could not write to disk - # Export succeeds but drives were not properly unmounted + # Export succeeds but drives were not properly closed ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" + ERROR_UNMOUNT_VOLUME_BUSY = "ERROR_UNMOUNT_VOLUME_BUSY" DEVICE_ERROR = "DEVICE_ERROR" # Something went wrong while trying to check the device diff --git a/client/securedrop_client/gui/actions.py b/client/securedrop_client/gui/actions.py index ff189f086..1fdd66003 100644 --- a/client/securedrop_client/gui/actions.py +++ b/client/securedrop_client/gui/actions.py @@ -10,13 +10,13 @@ from typing import Callable, Optional from PyQt5.QtCore import Qt, pyqtSlot -from PyQt5.QtWidgets import QAction, QDialog, QMenu +from PyQt5.QtWidgets import QAction, QApplication, QDialog, QMenu from securedrop_client import state from securedrop_client.conversation import Transcript as ConversationTranscript from securedrop_client.db import Source +from securedrop_client.export import Export from securedrop_client.gui.base import ModalDialog -from securedrop_client.gui.conversation import ExportDevice from securedrop_client.gui.conversation import ( PrintTranscriptDialog as PrintConversationTranscriptDialog, ) @@ -184,7 +184,7 @@ def _on_triggered(self) -> None: # out of scope, any pending file removal will be performed # by the operating system. with open(file_path, "r") as f: - export = ExportDevice() + export = Export() dialog = PrintConversationTranscriptDialog( export, TRANSCRIPT_FILENAME, [str(file_path)] ) @@ -234,7 +234,7 @@ def _on_triggered(self) -> None: # out of scope, any pending file removal will be performed # by the operating system. with open(file_path, "r") as f: - export_device = ExportDevice() + export_device = Export() wizard = ExportWizard(export_device, TRANSCRIPT_FILENAME, [str(file_path)]) wizard.exec() @@ -320,7 +320,7 @@ def _prepare_to_export(self) -> None: # out of scope, any pending file removal will be performed # by the operating system. with ExitStack() as stack: - export_device = ExportDevice() + export_device = Export() files = [ stack.enter_context(open(file_location, "r")) for file_location in file_locations ] @@ -335,6 +335,7 @@ def _prepare_to_export(self) -> None: export_device, summary, [str(file_location) for file_location in file_locations], + QApplication.activeWindow(), ) wizard.exec() diff --git a/client/securedrop_client/gui/conversation/__init__.py b/client/securedrop_client/gui/conversation/__init__.py index 219c00465..c9db19eec 100644 --- a/client/securedrop_client/gui/conversation/__init__.py +++ b/client/securedrop_client/gui/conversation/__init__.py @@ -3,7 +3,6 @@ """ # Import classes here to make possible to import them from securedrop_client.gui.conversation from .delete import DeleteConversationDialog # noqa: F401 -from .export import Export as ExportDevice # noqa: F401 from .export import ExportWizard as ExportWizard # noqa: F401 -from .export import PrintDialog as PrintFileDialog # noqa: F401 +from .export import PrintDialog # noqa: F401 from .export import PrintTranscriptDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/export/__init__.py b/client/securedrop_client/gui/conversation/export/__init__.py index 328c19e43..29f7a78c2 100644 --- a/client/securedrop_client/gui/conversation/export/__init__.py +++ b/client/securedrop_client/gui/conversation/export/__init__.py @@ -1,4 +1,3 @@ -from ....export import Export # noqa: F401 from .export_wizard import ExportWizard # noqa: F401 from .print_dialog import PrintDialog # noqa: F401 from .print_transcript_dialog import PrintTranscriptDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/export/export_wizard.py b/client/securedrop_client/gui/conversation/export/export_wizard.py index eda3ac72c..2043a5bd8 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard.py @@ -1,12 +1,12 @@ import logging from gettext import gettext as _ -from typing import List +from typing import List, Optional from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt, pyqtSlot from PyQt5.QtGui import QIcon, QKeyEvent from PyQt5.QtWidgets import QAbstractButton # noqa: F401 -from PyQt5.QtWidgets import QApplication, QWizard, QWizardPage +from PyQt5.QtWidgets import QApplication, QWidget, QWizard, QWizardPage from securedrop_client.export import Export from securedrop_client.export_status import ExportStatus @@ -41,15 +41,26 @@ class ExportWizard(QWizard): # it's populated later. PASS_PLACEHOLDER_FIELD = "" - def __init__(self, export: Export, summary_text: str, filepaths: List[str]) -> None: - parent = QApplication.activeWindow() + def __init__( + self, + export: Export, + summary_text: str, + filepaths: List[str], + parent: Optional[QWidget] = None, + ) -> None: + # Normally, the active window is the right parent, but if the wizard is launched + # via another element (a modal dialog, such as the "Some files may not be exported" + # modal), the parent will be the modal dialog and the wizard layout will be affected. + # In those cases we want to be able to specify a different parent. + if not parent: + parent = QApplication.activeWindow() super().__init__(parent) self.export = export self.summary_text = SecureQLabel( summary_text, wordwrap=False, max_length=self.FILENAME_WIDTH_PX ).text() self.filepaths = filepaths - self.current_status = None # Optional[ExportStatus] + self.current_status: Optional[ExportStatus] = None # Signal from qrexec command runner self.export.export_state_changed.connect(self.on_status_received) @@ -58,17 +69,6 @@ def __init__(self, export: Export, summary_text: str, filepaths: List[str]) -> N # (Avoid orphaned QProcess) self.finished.connect(self.export.end_process) - # Activestate animation - self.button_animation = load_movie("activestate-wide.gif") - self.button_animation.setScaledSize(QSize(32, 32)) - self.button_animation.frameChanged.connect(self._animate_activestate) - - # Buttons - self.next_button = self.button(QWizard.WizardButton.NextButton) # type: QAbstractButton - self.cancel_button = self.button(QWizard.WizardButton.CancelButton) # type: QAbstractButton - self.back_button = self.button(QWizard.WizardButton.BackButton) # type: QAbstractButton - self.finish_button = self.button(QWizard.WizardButton.FinishButton) # type: QAbstractButton - self._style_buttons() self._set_layout() self._set_pages() @@ -93,26 +93,42 @@ def _style_buttons(self) -> None: Style QWizard buttons and connect "Next" button click event to request_export slot. """ + # Activestate animation + self.button_animation = load_movie("activestate-wide.gif") + self.button_animation.setScaledSize(QSize(32, 32)) + self.button_animation.frameChanged.connect(self._animate_activestate) + + # Buttons + self.next_button = self.button(QWizard.WizardButton.NextButton) # type: QAbstractButton + self.cancel_button = self.button(QWizard.WizardButton.CancelButton) # type: QAbstractButton + self.back_button = self.button(QWizard.WizardButton.BackButton) # type: QAbstractButton + self.finish_button = self.button(QWizard.WizardButton.FinishButton) # type: QAbstractButton + self.next_button.setObjectName("QWizardButton_PrimaryButton") self.next_button.setStyleSheet(self.BUTTON_CSS) - self.next_button.setMinimumSize(QSize(130, 40)) + self.next_button.setMinimumSize(QSize(142, 40)) self.next_button.setMaximumHeight(40) + self.next_button.setIconSize(QSize(21, 21)) self.next_button.clicked.connect(self.request_export) + self.next_button.setFixedSize(QSize(142, 40)) self.cancel_button.setObjectName("QWizardButton_GenericButton") self.cancel_button.setStyleSheet(self.BUTTON_CSS) - self.cancel_button.setMinimumSize(QSize(130, 40)) + self.cancel_button.setMinimumSize(QSize(142, 40)) self.cancel_button.setMaximumHeight(40) + self.cancel_button.setFixedSize(QSize(142, 40)) self.back_button.setObjectName("QWizardButton_GenericButton") self.back_button.setStyleSheet(self.BUTTON_CSS) - self.back_button.setMinimumSize(QSize(130, 40)) + self.back_button.setMinimumSize(QSize(142, 40)) self.back_button.setMaximumHeight(40) + self.back_button.setFixedSize(QSize(142, 40)) self.finish_button.setObjectName("QWizardButton_GenericButton") self.finish_button.setStyleSheet(self.BUTTON_CSS) - self.finish_button.setMinimumSize(QSize(130, 40)) + self.finish_button.setMinimumSize(QSize(142, 40)) self.finish_button.setMaximumHeight(40) + self.finish_button.setFixedSize(QSize(142, 40)) self.setButtonText(QWizard.WizardButton.NextButton, _("CONTINUE")) self.setButtonText(QWizard.WizardButton.CancelButton, _("CANCEL")) @@ -130,7 +146,8 @@ def _stop_animate_activestate(self) -> None: self.button_animation.stop() def _set_layout(self) -> None: - self.setWindowTitle(f"Export {self.summary_text}") # TODO (il8n) + title = ("Export %(summary)s") % {"summary": self.summary_text} + self.setWindowTitle(title) self.setObjectName("QWizard_export") self.setStyleSheet(self.WIZARD_CSS) self.setModal(False) @@ -183,79 +200,19 @@ def request_export(self) -> None: @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: """ - Receive status updates from export process. The QWizard is responsible for - listening for a status that requires it to adjust its own position outside of the - normal wizard control flow, such as jumping to an error page if an unrecoverable error - status is encountered, or "rewinding" to a previous page if an unexpected status is - encountered (USB device removed after proceeding past that part of the workflow). - + Receive status update from export process in order to update the animation. Child QWizardPages also implement this listener in order to update their own UI and store a reference to the current status. - Advancing through the normal QWizard control flow is handled by child pages. + Adjusting the QWizard control flow based on ExportStatus is handled by each child page. """ - logger.debug(f"Wizard received {status.value}. Current page is {type(self.currentPage())}") - # Release the page (page was held during "next" button click event) page = self.currentPage() if isinstance(page, ExportWizardPage): page.set_complete(True) self._stop_animate_activestate() - - # Unrecoverable - end the wizard - if status in [ - ExportStatus.ERROR_MOUNT, - ExportStatus.ERROR_EXPORT, - ExportStatus.ERROR_MISSING_FILES, - ExportStatus.DEVICE_ERROR, - ExportStatus.CALLED_PROCESS_ERROR, - ExportStatus.UNEXPECTED_RETURN_STATUS, - ]: - logger.error(f"Encountered {status.value}, cannot export") - self.end_wizard_with_error(status) - return - - target = None # Optional[PageEnum] - if status in [ - ExportStatus.NO_DEVICE_DETECTED, - ExportStatus.MULTI_DEVICE_DETECTED, - ExportStatus.INVALID_DEVICE_DETECTED, - ]: - target = Pages.INSERT_USB - elif status in [ExportStatus.DEVICE_LOCKED, ExportStatus.ERROR_UNLOCK_LUKS]: - target = Pages.UNLOCK_USB - - # Someone may have yanked out or unmounted a USB - if target and self.currentId() > target: - self.rewind(target) - - # Update status self.current_status = status - def rewind(self, target: Pages) -> None: - """ - Navigate back to target page. - """ - logger.debug(f"Wizard: rewind from {self.currentId()} to {target}") - while self.currentId() > target: - self.back() - - def end_wizard_with_error(self, error: ExportStatus) -> None: - """ - If an end state is reached, display message and let user - end the wizard. - """ - logger.debug("End wizard with error") - if isinstance(self.currentPage(), PreflightPage): - logger.debug("On preflight page, no reordering needed") - else: - while self.currentId() > Pages.ERROR: - self.back() - logger.debug(f"Target: {Pages.ERROR}. Actual: {self.currentId()}") - page = self.currentPage() - if isinstance(page, ExportWizardPage): - page.update_content(error) - def _create_preflight(self) -> QWizardPage: return PreflightPage(self.export, self.summary_text) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py index ce8c0f3af..546563d50 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py @@ -25,17 +25,24 @@ class Pages(IntEnum): # Human-readable status info STATUS_MESSAGES = { ExportStatus.NO_DEVICE_DETECTED: _("No device detected"), - ExportStatus.MULTI_DEVICE_DETECTED: _("Too many USBs; please insert one supported device."), + ExportStatus.MULTI_DEVICE_DETECTED: _( + "Too many USB devices detected; please insert one supported device." + ), ExportStatus.INVALID_DEVICE_DETECTED: _( "Either the drive is not encrypted or there is something else wrong with it." + "If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." ), ExportStatus.DEVICE_WRITABLE: _("The device is ready for export."), ExportStatus.DEVICE_LOCKED: _("The device is locked."), ExportStatus.ERROR_UNLOCK_LUKS: _("The passphrase provided did not work. Please try again."), ExportStatus.ERROR_MOUNT: _("Error mounting drive"), ExportStatus.ERROR_EXPORT: _("Error during export"), + ExportStatus.ERROR_UNMOUNT_VOLUME_BUSY: _( + "Files were exported succesfully, but the USB device could not be unmounted." + ), ExportStatus.ERROR_EXPORT_CLEANUP: _( - "Files were exported succesfully, but the drive could not be unmounted" + "Files were exported succesfully, but some temporary files remain on disk." + "Reboot to remove them." ), ExportStatus.SUCCESS_EXPORT: _("Export successful"), ExportStatus.DEVICE_ERROR: _( diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_page.py b/client/securedrop_client/gui/conversation/export/export_wizard_page.py index 712f2e40d..983bbd551 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_page.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_page.py @@ -6,7 +6,6 @@ from PyQt5.QtCore import QSize, Qt, pyqtSlot from PyQt5.QtGui import QColor, QFont, QPixmap from PyQt5.QtWidgets import ( - QApplication, QGraphicsDropShadowEffect, QHBoxLayout, QLabel, @@ -56,13 +55,22 @@ class ExportWizardPage(QWizardPage): NO_MARGIN = 0 FILENAME_WIDTH_PX = 260 + # All pages should show the error page if these errors are encountered + UNRECOVERABLE_ERRORS = [ + ExportStatus.ERROR_MOUNT, + ExportStatus.ERROR_EXPORT, + ExportStatus.ERROR_MISSING_FILES, + ExportStatus.DEVICE_ERROR, + ExportStatus.CALLED_PROCESS_ERROR, + ExportStatus.UNEXPECTED_RETURN_STATUS, + ] + def __init__(self, export: Export, header: str, body: Optional[str]) -> None: - parent = QApplication.activeWindow() - super().__init__(parent) + super().__init__() self.export = export self.header_text = header self.body_text = body - self.status = None # Optional[ExportStatus] + self.status: Optional[ExportStatus] = None self._is_complete = True # Won't override parent method unless explicitly set to False self.setLayout(self._build_layout()) @@ -85,6 +93,7 @@ def _build_layout(self) -> QVBoxLayout: """ Create parent layout, draw elements, return parent layout """ + self.setObjectName("QWizard_export_page") self.setStyleSheet(self.WIZARD_CSS) parent_layout = QVBoxLayout(self) parent_layout.setContentsMargins(self.MARGIN, self.MARGIN, self.MARGIN, self.MARGIN) @@ -93,7 +102,10 @@ def _build_layout(self) -> QVBoxLayout: header_container = QWidget() header_container_layout = QHBoxLayout() header_container.setLayout(header_container_layout) - self.header_icon = SvgLabel("blank.svg", svg_size=QSize(64, 64)) + header_container.setContentsMargins( + self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN + ) + self.header_icon = SvgLabel("savetodisk.svg", svg_size=QSize(64, 64)) self.header_icon.setObjectName("QWizard_header_icon") self.header_spinner = QPixmap() self.header_spinner_label = QLabel() @@ -103,9 +115,9 @@ def _build_layout(self) -> QVBoxLayout: self.header_spinner_label.setPixmap(self.header_spinner) self.header = QLabel() self.header.setObjectName("QWizard_header") - header_container_layout.addWidget(self.header, alignment=Qt.AlignCenter) header_container_layout.addWidget(self.header_icon) header_container_layout.addWidget(self.header_spinner_label) + header_container_layout.addWidget(self.header, alignment=Qt.AlignCenter) header_container_layout.addStretch() self.header_line = QWidget() self.header_line.setObjectName("QWizard_header_line") @@ -170,10 +182,38 @@ def stop_animate_header(self) -> None: def on_status_received(self, status: ExportStatus) -> None: raise NotImplementedError("Children must implement") + def nextId(self) -> int: + """ + Override builtin QWizardPage nextId() method to create custom control flow. + """ + if self.status is not None: + if self.status in ( + ExportStatus.DEVICE_WRITABLE, + ExportStatus.SUCCESS_EXPORT, + ExportStatus.ERROR_UNMOUNT_VOLUME_BUSY, + ExportStatus.ERROR_EXPORT_CLEANUP, + ): + return Pages.EXPORT_DONE + elif self.status in ( + ExportStatus.DEVICE_LOCKED, + ExportStatus.ERROR_UNLOCK_LUKS, + ExportStatus.ERROR_UNLOCK_GENERIC, + ): + return Pages.UNLOCK_USB + elif self.status in ( + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.MULTI_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ): + return Pages.INSERT_USB + elif self.status in self.UNRECOVERABLE_ERRORS: + return Pages.ERROR + + return super().nextId() + def update_content(self, status: ExportStatus, should_show_hint: bool = False) -> None: """ Update page's content based on new status. - Children may re-implement this method. """ if not status: logger.error("Empty status value given to update_content") @@ -190,6 +230,7 @@ def update_content(self, status: ExportStatus, should_show_hint: bool = False) - class PreflightPage(ExportWizardPage): def __init__(self, export: Export, summary: str) -> None: + self._should_autoskip_preflight = False self.summary = summary header = _( "Preparing to export:
" '{}' @@ -212,36 +253,57 @@ def __init__(self, export: Export, summary: str) -> None: super().__init__(export, header=header, body=body) self.start_animate_header() - self.export.run_export_preflight_checks() - def nextId(self) -> int: + # Don't need preflight check every time, just when the wizard is initialized + if self.status is None: + self.set_complete(False) + self.completeChanged.emit() + self.export.run_export_preflight_checks() + + def set_should_autoskip_preflight(self, should_autoskip: bool) -> None: """ - Override builtin to allow bypassing the password page if device is unlocked. + Provide setter for auto-advancing wizard past the Preflight page. + If True, as soon as a Status is available, the wizard will advance + to the appropriate page. """ - if self.status == ExportStatus.DEVICE_WRITABLE: - logger.debug("Skip password prompt") - return Pages.EXPORT_DONE - elif self.status == ExportStatus.DEVICE_LOCKED: - logger.debug("Device locked - prompt for passphrase") - return Pages.UNLOCK_USB - elif self.status in ( - ExportStatus.CALLED_PROCESS_ERROR, - ExportStatus.DEVICE_ERROR, - ExportStatus.UNEXPECTED_RETURN_STATUS, - ): - logger.debug("Error during preflight - show error page") - return Pages.ERROR - else: - return Pages.INSERT_USB + self._should_autoskip_preflight = should_autoskip + + def should_autoskip_preflight(self) -> bool: + """ + Return True if Preflight page should be advanced automatically as soon as + a given status is available. + + This workaround exists to let users skip past the preflight page if they are + returned to it from a later page. This is required because in PyQt5, + QWizard cannot navigate to a specific page, meaning users who insert an + unlocked drive, then start the wizard, then encounter a problem are sent + "back" to this page rather than to the InsertUSBPage, since it wasn't in + their call stack. + + The autoskip combined with custom nextId logic in ExporWizardPage allows us + to emulate the desired behaviour. + """ + return self._should_autoskip_preflight @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: + self.status = status self.stop_animate_header() header = _("Ready to export:
" '{}').format( self.summary ) self.header.setText(header) - self.status = status + self.set_complete(True) + self.completeChanged.emit() + + if self.wizard() and isinstance(self.wizard().currentPage(), PreflightPage): + # Let users skip preflight screen if they have already seen it. The first time a status + # is received, autoskip is False, and a user has to manually click "Continue"; + # after that, it's True. + if self.should_autoskip_preflight(): + self.wizard().next() + else: + self.set_should_autoskip_preflight(True) class ErrorPage(ExportWizardPage): @@ -250,15 +312,21 @@ def __init__(self, export: Export): super().__init__(export, header=header, body=None) def isComplete(self) -> bool: + """ + Override isComplete() to always return False. This disables + the 'next' button on the error page and means users can + only go back to a previous page or exit the wizard. + """ return False @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: - pass + self.status = status class InsertUSBPage(ExportWizardPage): def __init__(self, export: Export, summary: str) -> None: + self.no_device_hint = 0 self.summary = summary header = _("Ready to export:
" '{}').format( summary @@ -271,63 +339,37 @@ def __init__(self, export: Export, summary: str) -> None: @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: - logger.debug(f"InsertUSB received {status.value}") - should_show_hint = status in ( - ExportStatus.MULTI_DEVICE_DETECTED, - ExportStatus.INVALID_DEVICE_DETECTED, - ) or ( - self.status == status == ExportStatus.NO_DEVICE_DETECTED - and isinstance(self.wizard().currentPage, InsertUSBPage) - ) - self.update_content(status, should_show_hint) self.status = status - self.completeChanged.emit() - if status in (ExportStatus.DEVICE_LOCKED, ExportStatus.DEVICE_WRITABLE) and isinstance( - self.wizard().currentPage(), InsertUSBPage - ): - logger.debug("Device detected - advance the wizard") - self.wizard().next() - - def validatePage(self) -> bool: - """ - Override method to implement custom validation logic, which - shows an error-specific hint to the user. - """ - if self.status in (ExportStatus.DEVICE_WRITABLE, ExportStatus.DEVICE_LOCKED): - self.error_details.hide() - return True - else: - logger.debug(f"Status is {self.status}") - - # Show the user a hint - if self.status in ( + if self.wizard() and isinstance(self.wizard().currentPage(), InsertUSBPage): + logger.debug(f"InsertUSB received {status.value}") + if status in ( ExportStatus.MULTI_DEVICE_DETECTED, - ExportStatus.NO_DEVICE_DETECTED, ExportStatus.INVALID_DEVICE_DETECTED, + ExportStatus.DEVICE_WRITABLE, ): - self.update_content(self.status, should_show_hint=True) - return False + self.update_content(status, should_show_hint=True) + elif status == ExportStatus.NO_DEVICE_DETECTED: + if self.no_device_hint > 0: + self.update_content(status, should_show_hint=True) + self.no_device_hint += 1 else: - # Status may be None here - logger.warning("InsertUSBPage encountered unexpected status") - return super().validatePage() + # Hide the error hint, it visible, so that if the user navigates + # forward then back they don't see an unneeded hint + self.error_details.hide() + self.wizard().next() - def nextId(self) -> int: + def validatePage(self) -> bool: """ - Override builtin to allow bypassing the password page if device unlocked + Implement custom validation logic. """ - if self.status == ExportStatus.DEVICE_WRITABLE: - logger.debug("Skip password prompt") - return Pages.EXPORT_DONE - elif self.status == ExportStatus.DEVICE_LOCKED: - return Pages.UNLOCK_USB - elif self.status in (ExportStatus.UNEXPECTED_RETURN_STATUS, ExportStatus.DEVICE_ERROR): - return Pages.ERROR + if self.status is not None: + return self.status not in ( + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.INVALID_DEVICE_DETECTED, + ExportStatus.MULTI_DEVICE_DETECTED, + ) else: - next = super().nextId() - value = self.status.value if self.status else "(no status supplied)" - logger.debug(f"Unexpected status on InsertUSBPage: {value}. nextID is {next}") - return next + return super().isComplete() class FinalPage(ExportWizardPage): @@ -340,9 +382,13 @@ def __init__(self, export: Export) -> None: @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: - logger.debug(f"Final page received status {status}") - self.update_content(status) self.status = status + self.update_content(status) + + # The completeChanged signal alerts the page to recheck its completion status, + # which we need to signal since we have custom isComplete() logic + if self.wizard() and isinstance(self.wizard().currentPage(), FinalPage): + self.completeChanged.emit() def update_content(self, status: ExportStatus, should_show_hint: bool = False) -> None: header = None @@ -353,9 +399,9 @@ def update_content(self, status: ExportStatus, should_show_hint: bool = False) - "Remember to be careful when working with files " "outside of your Workstation machine." ) - elif status == ExportStatus.ERROR_EXPORT_CLEANUP: - header = header = _("Export sucessful, but drive was not locked") - body = STATUS_MESSAGES.get(ExportStatus.ERROR_EXPORT_CLEANUP) + elif status in (ExportStatus.ERROR_EXPORT_CLEANUP, ExportStatus.ERROR_UNMOUNT_VOLUME_BUSY): + header = _("Export sucessful, but drive was not locked") + body = STATUS_MESSAGES.get(status) else: header = _("Working...") @@ -364,6 +410,27 @@ def update_content(self, status: ExportStatus, should_show_hint: bool = False) - if body: self.body.setText(body) + def isComplete(self) -> bool: + """ + Override the default isComplete() implementation in order to disable the "Finish" + button while an export is taking place. (If the "Working...." header is being shown, + the export is still in progress and "Finish" should not be clickable.) + """ + if self.status: + return self.status not in ( + ExportStatus.DEVICE_WRITABLE, + ExportStatus.DEVICE_LOCKED, + ) + else: + return True + + def nextId(self) -> int: + """ + The final page should not have any custom nextId() logic. + Disable it to ensure the Finished button ("Done") is shown. + """ + return -1 + class PassphraseWizardPage(ExportWizardPage): """ @@ -390,6 +457,7 @@ def _build_layout(self) -> QVBoxLayout: font.setLetterSpacing(QFont.AbsoluteSpacing, self.PASSPHRASE_LABEL_SPACING) passphrase_label.setFont(font) self.passphrase_field = PasswordEdit(self) + self.passphrase_form.setObjectName("QWizard_passphrase_form") self.passphrase_field.setEchoMode(QLineEdit.Password) effect = QGraphicsDropShadowEffect(self) effect.setOffset(0, -1) @@ -412,46 +480,20 @@ def _build_layout(self) -> QVBoxLayout: @pyqtSlot(object) def on_status_received(self, status: ExportStatus) -> None: - logger.debug(f"Passphrase page rececived {status.value}") - should_show_hint = status in ( - ExportStatus.ERROR_UNLOCK_LUKS, - ExportStatus.ERROR_UNLOCK_GENERIC, - ) - self.update_content(status, should_show_hint) self.status = status - self.completeChanged.emit() - if status in ( - ExportStatus.SUCCESS_EXPORT, - ExportStatus.ERROR_EXPORT_CLEANUP, - ) and isinstance(self.wizard().currentPage(), PassphraseWizardPage): - self.wizard().next() + if self.wizard() and isinstance(self.wizard().currentPage(), PassphraseWizardPage): + logger.debug(f"Passphrase page received {status.value}") + if status in ( + ExportStatus.ERROR_UNLOCK_LUKS, + ExportStatus.ERROR_UNLOCK_GENERIC, + ): + self.update_content(status, should_show_hint=True) + else: + self.wizard().next() def validatePage(self) -> bool: - # Also to add: DEVICE_BUSY for unmounting. - # This shouldn't stop us from going "back" to an error page - return self.status in ( - ExportStatus.DEVICE_WRITABLE, - ExportStatus.SUCCESS_EXPORT, - ExportStatus.ERROR_EXPORT_CLEANUP, + return self.status not in ( + ExportStatus.ERROR_UNLOCK_LUKS, + ExportStatus.ERROR_UNLOCK_GENERIC, + ExportStatus.DEVICE_LOCKED, ) - - def nextId(self) -> int: - if self.status == ExportStatus.SUCCESS_EXPORT: - return Pages.EXPORT_DONE - elif self.status in (ExportStatus.ERROR_UNLOCK_LUKS, ExportStatus.ERROR_UNLOCK_GENERIC): - return Pages.UNLOCK_USB - elif self.status in ( - ExportStatus.NO_DEVICE_DETECTED, - ExportStatus.MULTI_DEVICE_DETECTED, - ExportStatus.INVALID_DEVICE_DETECTED, - ): - return Pages.INSERT_USB - elif self.status in ( - ExportStatus.ERROR_MOUNT, - ExportStatus.ERROR_EXPORT, - ExportStatus.ERROR_EXPORT_CLEANUP, - ExportStatus.UNEXPECTED_RETURN_STATUS, - ): - return Pages.ERROR - else: - return super().nextId() diff --git a/client/securedrop_client/gui/conversation/export/print_dialog.py b/client/securedrop_client/gui/conversation/export/print_dialog.py index 40eaa7c88..11ab07c53 100644 --- a/client/securedrop_client/gui/conversation/export/print_dialog.py +++ b/client/securedrop_client/gui/conversation/export/print_dialog.py @@ -29,6 +29,10 @@ def __init__(self, device: Export, file_name: str, filepaths: List[str]) -> None ) self._device.print_preflight_check_failed.connect(self._on_print_preflight_check_failed) + # For now, connect both success and error signals to close the print dialog. + self._device.print_succeeded.connect(self._on_print_complete) + self._device.print_failed.connect(self._on_print_complete) + # Connect parent signals to slots self.continue_button.setEnabled(False) self.continue_button.clicked.connect(self._run_preflight) @@ -95,9 +99,15 @@ def _run_preflight(self) -> None: @pyqtSlot() def _print_file(self) -> None: self._device.print(self.filepaths) - self.close() @pyqtSlot() + def _on_print_complete(self) -> None: + """ + Send a signal to close the print dialog. + """ + self.close() + + @pyqtSlot(object) def _on_print_preflight_check_succeeded(self, status: ExportStatus) -> None: # We don't use the ExportStatus for now for "success" status, # but in future work we will migrate towards a wizard-style dialog, where diff --git a/client/securedrop_client/gui/conversation/export/wizard.css b/client/securedrop_client/gui/conversation/export/wizard.css index 958cf0229..580ded204 100644 --- a/client/securedrop_client/gui/conversation/export/wizard.css +++ b/client/securedrop_client/gui/conversation/export/wizard.css @@ -1,9 +1,13 @@ #QWizard_export { min-width: 800px; max-width: 800px; - min-height: 300px; + min-height: 500px; max-height: 800px; - background-color: #fff; + background: #ffffff; +} + +#QWizard_export_page { + background: #ffffff; } #QWizard_header_icon, #QWizard_header_spinner { @@ -67,7 +71,7 @@ color: rgba(42, 49, 157, 0.4); } -#FileDialog_passphrase_form QLabel { +#QWizard_passphrase_form QLabel { font-family: 'Montserrat'; font-weight: 500; font-size: 12px; @@ -75,7 +79,7 @@ padding-top: 6px; } -#FileDialog_passphrase_form QLineEdit { +#QWizard_passphrase_form QLineEdit { border-radius: 0px; min-height: 30px; max-height: 30px; diff --git a/client/securedrop_client/gui/conversation/export/wizard_button.css b/client/securedrop_client/gui/conversation/export/wizard_button.css index 2ccf29214..5925e5412 100644 --- a/client/securedrop_client/gui/conversation/export/wizard_button.css +++ b/client/securedrop_client/gui/conversation/export/wizard_button.css @@ -1,6 +1,6 @@ #QWizardButton_PrimaryButton { background-color: #2a319d; - color: #f1f1f6; + color: #ffffff; border: 2px solid #2a319d; font-family: 'Montserrat'; font-weight: 500; @@ -23,7 +23,7 @@ } #QWizardButton_GenericButton { - background-color: #f1f1f6; + background-color: #ffffff; color: #2a319d; border: 2px solid #2a319d; margin: 0; diff --git a/client/securedrop_client/gui/conversation/export/wizard_message.css b/client/securedrop_client/gui/conversation/export/wizard_message.css index fa0aa8d35..e3bf33ef3 100644 --- a/client/securedrop_client/gui/conversation/export/wizard_message.css +++ b/client/securedrop_client/gui/conversation/export/wizard_message.css @@ -5,7 +5,7 @@ color: #ff0064; } -#QWizard_error_details_active { +#QWizard_error_details:active { margin: 0px 40px 0px 36px; font-family: 'Montserrat'; font-size: 16px; diff --git a/client/securedrop_client/gui/widgets.py b/client/securedrop_client/gui/widgets.py index 19b2f789c..714fef467 100644 --- a/client/securedrop_client/gui/widgets.py +++ b/client/securedrop_client/gui/widgets.py @@ -70,6 +70,7 @@ Source, User, ) +from securedrop_client.export import Export from securedrop_client.gui import conversation from securedrop_client.gui.actions import ( DeleteConversationAction, @@ -81,7 +82,6 @@ ) from securedrop_client.gui.base import SecureQLabel, SvgLabel, SvgPushButton, SvgToggleButton from securedrop_client.gui.conversation import DeleteConversationDialog -from securedrop_client.gui.conversation.export import ExportWizard from securedrop_client.gui.datetime_helpers import format_datetime_local from securedrop_client.gui.source import DeleteSourceDialog from securedrop_client.logic import Controller @@ -2460,9 +2460,11 @@ def _on_export_clicked(self) -> None: logger.debug("Clicked export but file not downloaded") return - export_device = conversation.ExportDevice() + export_device = Export() - self.export_wizard = ExportWizard(export_device, self.file.filename, [file_location]) + self.export_wizard = conversation.ExportWizard( + export_device, self.file.filename, [file_location] + ) self.export_wizard.show() @pyqtSlot() @@ -2476,9 +2478,9 @@ def _on_print_clicked(self) -> None: filepath = self.file.location(self.controller.data_dir) - export_device = conversation.ExportDevice() + export_device = Export() - dialog = conversation.PrintFileDialog(export_device, self.file.filename, [filepath]) + dialog = conversation.PrintDialog(export_device, self.file.filename, [filepath]) dialog.exec() def _on_left_click(self) -> None: diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index 2710d75bb..d7d99c378 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -270,49 +270,82 @@ msgid_plural "{message_count} messages" msgstr[0] "" msgstr[1] "" -msgid "SUBMIT" +msgid "DONE" msgstr "" -msgid "Preparing to export:
{}" +msgid "BACK" msgstr "" -msgid "Ready to export:
{}" +msgid "Export {}" msgstr "" -msgid "Insert encrypted USB drive" +msgid "No device detected" msgstr "" -msgid "Enter passphrase for USB drive" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" + +msgid "Either the drive is not encrypted or there is something else wrong with it.If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "" + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." msgstr "" msgid "Export successful" msgstr "" -msgid "Export failed" +msgid "Error encountered with this device. See your administrator for help." msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgid "Files were moved or missing and could not be exported." msgstr "" -msgid "Exporting: {}" +msgid "Error encountered. Please contact support." msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgid "Preparing to export:
{}" +msgstr "" + +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." msgstr "" -msgid "Either the drive is not encrypted or there is something else wrong with it." +msgid "Ready to export:
{}" msgstr "" -msgid "The passphrase provided did not work. Please try again." +msgid "Export Failed" msgstr "" -msgid "See your administrator for help." +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "" -msgid "DONE" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" msgstr "" msgid "Preparing to print:
{}" @@ -333,6 +366,9 @@ msgstr "" msgid "Please connect your printer to a USB port." msgstr "" +msgid "See your administrator for help." +msgstr "" + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "" diff --git a/client/tests/conftest.py b/client/tests/conftest.py index b161d25fe..40bde3b51 100644 --- a/client/tests/conftest.py +++ b/client/tests/conftest.py @@ -4,7 +4,6 @@ import tempfile from configparser import ConfigParser from datetime import datetime -from unittest import mock from uuid import uuid4 import pytest @@ -23,6 +22,7 @@ Source, make_session_maker, ) +from securedrop_client.export import Export from securedrop_client.export_status import ExportStatus from securedrop_client.gui import conversation from securedrop_client.gui.main import Window @@ -51,6 +51,7 @@ TIME_RENDER_CONV_VIEW = 1000 TIME_RENDER_EXPORT_WIZARD = 1000 TIME_FILE_DOWNLOAD = 5000 +TIME_KEYCLICK_ACTION = 5000 @pytest.fixture(scope="function") @@ -78,9 +79,9 @@ def lang(request): def print_dialog(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) - export_device = mocker.MagicMock(spec=conversation.ExportDevice) + export_device = mocker.MagicMock(spec=Export) - dialog = conversation.PrintFileDialog(export_device, "file123.jpg", ["/mock/path/to/file"]) + dialog = conversation.PrintDialog(export_device, "file123.jpg", ["/mock/path/to/file"]) yield dialog @@ -89,7 +90,7 @@ def print_dialog(mocker, homedir): def print_transcript_dialog(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) - export_device = mocker.MagicMock(spec=conversation.ExportDevice) + export_device = mocker.MagicMock(spec=Export) dialog = conversation.PrintTranscriptDialog( export_device, "transcript.txt", ["some/path/transcript.txt"] @@ -102,7 +103,7 @@ def print_transcript_dialog(mocker, homedir): def export_wizard_multifile(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) - export_device = mocker.MagicMock(spec=conversation.ExportDevice) + export_device = mocker.MagicMock(spec=Export) wizard = conversation.ExportWizard( export_device, @@ -117,7 +118,7 @@ def export_wizard_multifile(mocker, homedir): def export_wizard(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) - export_device = mocker.MagicMock(spec=conversation.ExportDevice) + export_device = mocker.MagicMock(spec=Export) dialog = conversation.ExportWizard(export_device, "file123.jpg", ["/mock/path/to/file"]) @@ -128,7 +129,7 @@ def export_wizard(mocker, homedir): def export_transcript_wizard(mocker, homedir): mocker.patch("PyQt5.QtWidgets.QApplication.activeWindow", return_value=QMainWindow()) - export_device = mocker.MagicMock(spec=conversation.ExportDevice) + export_device = mocker.MagicMock(spec=Export) dialog = conversation.ExportWizard( export_device, "transcript.txt", ["/some/path/transcript.txt"] @@ -173,22 +174,29 @@ def homedir(i18n): def mock_export_locked(): """ Represents the following scenario: - * Locked USB already inserted - * "Export" clicked, export wizard launched + * No USB + * Export wizard launched + * USB inserted * Passphrase successfully entered on first attempt (and export suceeeds) """ - device = conversation.ExportDevice() + device = Export() + status = iter( + [ + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.DEVICE_LOCKED, + ExportStatus.SUCCESS_EXPORT, + ] + ) + + def get_status() -> ExportStatus: + return next(status) device.run_export_preflight_checks = lambda: device.export_state_changed.emit( ExportStatus.NO_DEVICE_DETECTED ) device.run_printer_preflight_checks = lambda: None device.print = lambda filepaths: None - device.export = mock.MagicMock() - device.export.side_effect = [ - lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.DEVICE_LOCKED), - lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.SUCCESS_EXPORT), - ] + device.export = lambda filepaths, passphrase: device.export_state_changed.emit(get_status()) return device @@ -201,7 +209,7 @@ def mock_export_unlocked(): * Export wizard launched * Export succeeds """ - device = conversation.ExportDevice() + device = Export() device.run_export_preflight_checks = lambda: device.export_state_changed.emit( ExportStatus.DEVICE_WRITABLE @@ -220,29 +228,30 @@ def mock_export_no_usb_then_bad_passphrase(): """ Represents the following scenario: * Export wizard launched - * Locked USB inserted + * Locked USB detected * Mistyped Passphrase * Correct passphrase * Export succeeds """ - device = conversation.ExportDevice() + device = Export() + status = iter( + [ + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.DEVICE_LOCKED, + ExportStatus.ERROR_UNLOCK_LUKS, + ExportStatus.SUCCESS_EXPORT, + ] + ) + + def get_status() -> ExportStatus: + return next(status) device.run_export_preflight_checks = lambda: device.export_state_changed.emit( ExportStatus.NO_DEVICE_DETECTED ) device.run_printer_preflight_checks = lambda: None device.print = lambda filepaths: None - device.export = mock.MagicMock() - device.export.side_effect = [ - lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.DEVICE_LOCKED), - lambda filepaths, passphrase: device.export_state_changed.emit( - ExportStatus.ERROR_UNLOCK_LUKS - ), - lambda filepaths, passphrase: device.export_state_changed.emit( - ExportStatus.DEVICE_WRITABLE - ), - lambda filepaths, passphrase: device.export_state_changed.emit(ExportStatus.SUCCESS_EXPORT), - ] + device.export = lambda filepaths, passphrase: device.export_state_changed.emit(get_status()) return device @@ -251,22 +260,31 @@ def mock_export_no_usb_then_bad_passphrase(): def mock_export_fail_early(): """ Represents the following scenario: - * Locked USB inserted + * No USB inserted * Export wizard launched + * Locked USB inserted * Unrecoverable error before export happens (eg, mount error) """ - device = conversation.ExportDevice() + device = Export() + # why does it need an extra ERROR_MOUNT report? + status = iter( + [ + ExportStatus.NO_DEVICE_DETECTED, + ExportStatus.DEVICE_LOCKED, + ExportStatus.ERROR_MOUNT, + ] + ) + + def get_status() -> ExportStatus: + return next(status) device.run_export_preflight_checks = lambda: device.export_state_changed.emit( - ExportStatus.DEVICE_LOCKED + ExportStatus.NO_DEVICE_DETECTED ) device.run_printer_preflight_checks = lambda: None device.print = lambda filepaths: None - device.export = mock.MagicMock() - device.export = lambda filepaths, passphrase: device.export_state_changed.emit( - ExportStatus.ERROR_MOUNT - ) + device.export = lambda filepaths, passphrase: device.export_state_changed.emit(get_status()) return device diff --git a/client/tests/functional/cassettes/test_export_file_dialog.yaml b/client/tests/functional/cassettes/test_export_file_dialog.yaml deleted file mode 100644 index 9b62d31d1..000000000 --- a/client/tests/functional/cassettes/test_export_file_dialog.yaml +++ /dev/null @@ -1,1685 +0,0 @@ -interactions: -- request: - body: '{"username": "journalist", "passphrase": "correct horse battery staple - profanity oil chewy", "one_time_code": "123456"}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '119' - User-Agent: - - python-requests/2.26.0 - method: POST - uri: http://localhost:8081/api/v1/token - response: - body: - string: "{\n \"expiration\": \"2022-01-20T07:09:09.326384Z\", \n \"journalist_first_name\": - null, \n \"journalist_last_name\": null, \n \"journalist_uuid\": \"a9f8835b-52a6-4845-b428-61cc10561a0b\", - \n \"token\": \"eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo\"\n}\n" - headers: - Content-Length: - - '317' - Content-Type: - - application/json - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/users - response: - body: - string: "{\n \"users\": [\n {\n \"first_name\": null, \n \"last_name\": - null, \n \"username\": \"journalist\", \n \"uuid\": \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n - \ }, \n {\n \"first_name\": null, \n \"last_name\": null, \n - \ \"username\": \"dellsberg\", \n \"uuid\": \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n - \ }\n ]\n}\n" - headers: - Content-Length: - - '324' - Content-Type: - - application/json - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources - response: - body: - string: "{\n \"sources\": [\n {\n \"add_star_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/add_star\", - \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"consistent synonym\", \n \"key\": - {\n \"fingerprint\": \"04EAA26CE5C74286E78299ADA6122A68D47035C3\", - \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADL8YaMOqcq70cdpry7h52gS+aPmIYnC2PStdwCojU0ntOI0B21\\nGQvOHmxgcwMvXfSqBBEYNIC3r3IRUouQgl3oOvf7+RK5GqDgnV3lcrm9wDKBE7he\\ncqBPfZ+5AcOcqubAYXUCSznMGoMIxbCtQWaOpiqGU2ruSpwlq4jukzdVXvo4Zb/L\\nHn89r7TJc4Udg3lz36gxp3Jm7aTdGX8VKafLFiuK2LT3lakgurUO87M8DIdULn04\\nMJaujBVxYmbCJnjLg/flhjRUA4PKw9Hdc9vYp/e0k/eueJsB+Xhixc7XCnh9eaZn\\nNOrMz+IHZ5AY77Gopq23cidWPWFj2b/+g9+k6/MUsg9S3tzYOJ+kU1vncZipnsnc\\nW+wJMlu2o6wU5nSPoNUf0JFN+rI/ZTsK3jjADMyIUIN0abXMZ/GeNoH4olsfJcSb\\nM/INzmXIoSAmEd6/gZ8d1dDJsPA9Wd1zBySWiHXzfpihEvSseCdZBYuBE9iSs/x0\\nG83FiOG1x5JtEl8Bc42m74KaeM8QjgujnpYODqYdnWI2VVH66GjOgYDbb72spEe2\\nXobdk8KtABq0yEav26ZmS0/Wqd4RD67mRbp0FRpblt5Bl4qb2fFy0jZeFQ8M0Msy\\nfF4YWDDgpkPSp0wINLrSWCDR9VkWTmIKW7F70aP/KjD1RN8421PesKKggwARAQAB\\ntHVTb3VyY2UgS2V5IDxDMjVZQkdOQVIzR05FNlRDWFBUM040VkVON01HRDNZUVA2\\nRVNHM1lIUkVEM1I2VzM3VEtMQkpKSjVIVEpZVkFNU1FDVlJRRE9KWEs2R1ZVRExD\\nSDIyNkdMSFU1TjZWS08zNUFDSzdZPT6JAk4EEwEKADgWIQQE6qJs5cdChueCma2m\\nEipo1HA1wwUCUZF+gAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCmEipo\\n1HA1w7iLEAClnTccq87JEHCp9mJ0mT7BHPGakRNzzvyZj8xgW+jaIdFH3lF+x3vE\\nWoJzvUP3js+Cne/hd/+I1fWBMcEERajWPUSXC+pqEBsOdAWrJ4xi0zI32ofEuFGc\\noTVoXLhJnrzDZM1TqK58nwZZxjwL1XzuLtvkAz+utkbI7rnNXRQMzoR3LazUjz9+\\nArPFjaiDjxAsF90VELvBjKmC1tYSNrr/XEwl6yTXBagf2VchVLUE+Y/0ozTFv+Cz\\nLeiQh+EqE8xhKkuELLkNUjx6Z2oVK91MVrCTLvnxsNGyoSLyH7CWZeFodCQYF3k7\\nF/zGe9/KE6/n6uZ8EdjI50Rd/h99cYDbHt8ljDeqhu59V2xqzb+sTWpl7WliiVx3\\nbrboXxIFWuidXYJFlaXy3X342dTwqVDVE3rW+T0r77ZMO3MPMRrtbyjSL5+yqWuw\\nS/BLuhorFgNdxP/uMKIz89xAp2diQ+6USAOoEIaWkOk+f45s2bXyjS0EzmeowYRG\\n6IwgqLqopx2w8Mx8o2/3NkC0RfehkF0ideMHZpTXW2WAjApJcnXDDxDfwhr/xSwh\\nzS0dgD4dsdpRWoocv3zXnSv5L9JetZGYM0/CnxG8SjZ48zStjpsenKz8X0vDJAai\\nSlXnUn6TGzHZxuPyNegZ4hwLW4YlMkktJAZRLWZNW8BYQZGc03Z2DQ==\\n=lJ7v\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2022-01-19T23:08:49.528506Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/remove_star\", - \n \"replies_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/replies\", - \n \"submissions_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions\", - \n \"url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"uuid\": \"56d6777c-fdb6-474c-9d3b-0b7b43beabfa\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/add_star\", - \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"concrete limerick\", \n \"key\": - {\n \"fingerprint\": \"CA8A176B4D5D3666ED88B03BC5E9954B1492AE1F\", - \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEACtbh8mDuBbRxk7YGntX40e41q3r6mLgGmV5p26GZi3b/fAPoWA\\nJjo/Np5uBI+Ye/MZNZBl22aGIh3iamNXpywjrro1xCFryAhdFMj4eKuarekVbsNV\\nj0K5AWH2gomzJ27f+9+rkn+R5gtvRqeMA0tVu7pQQ7gw/n/1XIJ4X0M7oRHPWNAX\\nOvAJe/60jKTAiwNdgwE2a5aOTXrtXz20Je7bBq6TtKAWa9tdB+W2JUNH5IEmnhYA\\ntWw3/GliQHphPizpa4eE1jgF3IJtNf7hPTeJ7S50XXpolfmIaLYohWDuVi4LFVGC\\n2GGzasNefQJIoQXkK2UmYhhck0T4U5zwfl5RkuftOjGvHDa4U7bSRz3rl3MCzmGc\\nlvA028aMRrYg4nBu0ryVlVjAV93n8FTKasURjsyLVBfb+Fzxu1ebbG8rakvHbAbk\\nK25ZP+mNyu2QZ0WsM6j3C7afvAJDR0Mkj0KWBjc5JHMUtqupPwpK/8eswlecx7Yx\\ngLAwqkmYvFUiKjKAbUYbaOe4YJEUj4h/nxayXE2XhptLlL8m4oopflANRsqc00+F\\npQqcznyL0a89JKBmBaT8xPPK+GOtrs0EU9mz2IhAB4HxEKuVFuwOg7AIFLO6gRN/\\nLbqJvLz1IO3yM10O7gCb8ErPxrnByBkP417YWddnx9pPw0vPgPXy2lbo6QARAQAB\\ntHVTb3VyY2UgS2V5IDxPM1hKVUg2TkNaWEEzSlpOUlpSRlM2RlRaQURTUzNNVk5F\\nVFlNU0lRWjVZSDNUTDc2WFk3VjNQRTZSSkVINDRKMjZXM1pZMlVJNU9KMk00V0VG\\nWE1aRVdJWlBHS0NKN0VLTVRCQjJBPT6JAk4EEwEKADgWIQTKihdrTV02Zu2IsDvF\\n6ZVLFJKuHwUCUZF+gAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDF6ZVL\\nFJKuH04ID/9Xl2jbyBsu+JHS3fsMDSZE0L39HhqbRKqrUxq5U9vb3aWU3Imf3Tu3\\nez8Sp/aThXOJKuC9QeJ2gCIe9+V+OGVYvUl67P3xxKzIUmlLlk5cbosC9m/J4MMZ\\ndmSok8XBgOWYWuNbcCNiW0msfDijJH1diH6tDc9UEzcTvTbWHqbl3S27uwVced3O\\n8OAY0MGcB6Tw1yRBbv7fJ4nWKeu3kmzrepRQYh9cEMEf+pDE0RUkoORiQI5vmtzL\\nv454PfNGGuGijMQm64tYqe33fwMR0marbLyYXTSMlzEDF5AxeaKjDVI4kEe6eUT4\\n8kLsvRl2nPX1gbrBSkHSZ21/oMkhdlGhPyb4xKcqCVkzpQJpCsATmAkjtp/IHJib\\n2mu6TzhAIvANP5jqiGE128lZpPBILq3PIrhXqVDyLWpl6xTSHz7rhxVXtDHJZoIz\\n4QJM7Dl9V0s/UQ5hJdmx5L0aEP+7b46+3kvgbPvItaRiF11L7fRQwXMNoI8bm47T\\nbfW5nJK8p6O5VssHtFYqL9rKYBDdk6JYsiZ8xvTrqTRMK1xJEsuF3Tuv73JmMQtF\\n7wQq8rZg0cbINpJuOBRsvEAo6ATJBq+HOCAuqvhJ3Kx9lixLnURP4dybKJoTdWJP\\nSDgLwly7bulTF+fHQSlD9cypaLiw4cyzFubhw4OWEJYMAsYcbfBqYA==\\n=i+xf\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2022-01-19T23:08:51.571224Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/remove_star\", - \n \"replies_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/replies\", - \n \"submissions_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions\", - \n \"url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"uuid\": \"ae59153b-0871-411a-a72a-0f4c41a76ee0\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/add_star\", - \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"indecorous creamery\", \n \"key\": - {\n \"fingerprint\": \"04DD6C14755616B9F944F87311961223C70DEA58\", - \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADEMD/A2IVlAmhB3Vu3jDlG3UFli/e20GXvfeW6S0PFEuvE9Po9\\nCjI43sFdMVvRUvtaIP5PE1zU4OuN1gi6jpKp5puulnddV6jP0GXqK+hqVXjiaf58\\nhUkuvpK2CaHf/5DvGdSW2IZLB9oP/UtWYTBUm7dER2Fc+rMY13fUMEsGKyJZ9wB3\\ny4CrJpMw7TNTefVx6vrlbCVEB4nksod+A7wteLILbeGj26D1A94vH1V4iLdOObW3\\npbTX4Yra1CpxclEsHyaS7tZ+4bQOmh0OdVG7ZW4MZPYp+1BIqt+e48042Rq1jIHu\\nHVApvHynPDt2tD/KiymDM3Bt69Dy9rHrWEFlWAS+Fpgo7qBQ9QF2fHWzpHQyhcTB\\nM3zQ2LraeOrBWgzjgCRIei+sga6w9Tjk8fMZKLl7HPkjRZxOFU4GJLjkxf3Lw1Av\\nCo3kQijDzj0nN/qyebcD2/v6vz5/5D8iS85fJdgLwds7ajXXgk9/M11Bkze1RT+2\\nYCmsUW999wF+AZmeR6ZFdUfcOpJE/99zs6GIRIo+ikPWiMcs4/7jAlrierrAtuhH\\nl6luFRIz6utBFWIleZosxnx3ZqRAv1DUdig3BnIliD3Y53y0cHbFFLOX428ZGKCp\\nJ9Of22l5XfMlT6B8NCJgRcQc77beedl+1XcQP64X+FgddottileDhsiRNQARAQAB\\ntHVTb3VyY2UgS2V5IDxHSlFBVTRBVUlOQVNBRk81R1I3N0NMNUpDWFRMV0FXWjJU\\nV1BKSExDSTRJWFpNRVFKWVlIRFVUWUFNWjJOVDJLUDdPN09GSlRRSkdTSFJJT1dP\\nM05aS0VGRU01QklHTkNWVkFFT0xRPT6JAk4EEwEKADgWIQQE3WwUdVYWuflE+HMR\\nlhIjxw3qWAUCUZF+gAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRARlhIj\\nxw3qWEDyEACKKS0y7ApY7CMGuuU6BltrUyc7A5UcCe6vnCREX4662qkHgaDLmIpa\\nb5t+hvtOicEwegoFsBAnjnG+Vs+AU1DDzXREojZ0T39Hyq0PYS7HbDWJRUSfl//Z\\na566rtbdzv1GEc7hMAEi9pKplR3uEQlQAp1G6W1Yzf5WuwmdWMOactzbENJTnbc1\\nSBe/oKbH56UEMX7KLr5MODQ6IM+VCqRI/k6Px065q8scAeEQERwUFdy33BBzk+g7\\n/uYPC74NnfISP6Tj94oFEySs1HC2hIaZlUQor3ZJOzvZ3Vm8hix7JdjBVdqdHFmx\\n5+Ft211Va6v1dKCUW73GPvYkv0bt4CeAV9fhyQOSMSENTiNVVh8L2+dCXVQXhFUw\\n3Hmu/tOj+r2B8+vWWHuhbFjgeAiXFkHFDT1a3xZ98n5g5SNwoiBJDuyWjPgr0vG3\\n/+1wgTovRVbt62H1VgRsP49wMS9EBz1DV1q60GcWD40FNfkJx7W1T0RtUgpKp3hH\\nw06RJFAzeMJtXz89mFpIQfkVwBflne5HDQywIT8o0TnxAh06Q4ROqhFydDSB0HTv\\n6NJVRhiSiwGmYiZi4DVwv7exttrfv6h1TX99MjR1e3kjki/IjeI/pW42GgFUZVN5\\nWRzx2yiSIfz1rhBqnRAtZWConlmG2X3LRbUFtz1LHsbC8UqKdtlB1g==\\n=oWMO\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2022-01-19T23:08:57.846667Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/remove_star\", - \n \"replies_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/replies\", - \n \"submissions_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions\", - \n \"url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"uuid\": \"55fb95c1-cff3-430a-8c05-125c67c81a6a\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/add_star\", - \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"conjunctive lavage\", \n \"key\": - {\n \"fingerprint\": \"F71969D1705E2E3E374B95992DA6D8DCEE36946B\", - \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEADcaB1fww19PLIREowYKfNZiVoWpLYxRnw1U/Iz4JbnEJ7TuIlm\\n2Q46Hr9kR7zQVb5okjn40whN0JA3lJcfPZdjfxiCt8VYI7vacUxVZgXWJCR83vO4\\nNSD1YnZD5KXi0B6PGKIhry1Hqc+hzmMAFYGGdi4h5EKxinNmKTO+E3Zupeydm0KK\\nCBwXroROAs/5+s63oj5+nuqlPCTcEL3SGjH8zXIw+TN0mBhQhGlyqofIW/JEaviP\\n+frUL6WPa3AoUBE+TAF1rmXr30phZU271zfAYhe0B81gtrUTSg49uUYQuCf1xu92\\ngbuOmcYTQvdzgGDp8cNWL5cmQCdvoGTGH5PYodqMGcRfWqB1dl37RCsqDcCzssdv\\nJiUe8qC88n0tQl/gJOgniEhKEok5EiaGuuLz9j7waGB1aBgHLPsibDGQVyYn9ZYD\\na3E9cL0BHzsWJc9i1hFE2cmTXzmJ7rTXyvHSvidT6s2cljuih1Q6e5qNOcJPAuv9\\nY2xuZHn+rTaJSLM30X7PngrAP2jfepraz7zy2lE4Uex9dLQNPMcYhjPc9SwKjk8g\\njDkhCGW6daRCpzNUR/ydYGlfN00L6MPo0S3XG/x88f+OwqgfSpgrfSijqDTLxbo1\\nO4rTW+KSiVy2P9DfuLhZv+HcNiinY0EP3qbuuXKk7VSMeCir+HgeDce+pwARAQAB\\ntHVTb3VyY2UgS2V5IDxTV1pWS0hOTlBLQkIzVTJDRjNBMjRIUkJZRlRNNkNDU1U3\\nM05XQlhNTkw2NVFRWktEM1gzRllNTFVDVlBKRlhCRUJWRVkyQklKWVJLUUQ2NUFT\\nS1IzQTNaTVhaMkFOTkI2Sk1CVEJJPT6JAk4EEwEKADgWIQT3GWnRcF4uPjdLlZkt\\nptjc7jaUawUCUZF+gAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAtptjc\\n7jaUawViD/9O2J9EsxOmaSB3XI9q0EyLvOZPh+r9TeOGA4kqQlOH3PeMP1lxQ7v1\\n3LR7OCjM2pBNHww7rRkYNoJX4dA/UjZ1UcerIAbxa2Z4v7X69akKItw889UCW6Go\\ncUtco2XqkjaThsV/io19+6qFicrWAumpFtH2Dt8iVsHzOYWpijPK70AxJqODg+nK\\nv4k/+zqAePbLOCCCuvnhBduJCEd3dA0G7ow0H/AzgpPKOEswbYK6JJYX8Gsq9F3n\\ne+PkBJ3Op4/qUELYQYEBbF2qy+XPfhOZsJ4v/HDb+eutZNmATtpGZGNJznyLFoZX\\nbNI/U2XIlQYBDeYTOVbNPPVwoVucoXG1iGsp+2ZFvLgP4XGRxdH9oyiia9FC+id1\\nwCtS6dRWRKv1VJwVetGBncAdwmugCkQoJ/gGwcTkJLhOVyoZZruTR8aLOE+ArTUg\\nfgKBVpeT9he8ELDZFrPtAnDTpMS+RrVsF8Y1sih7O8VCxsxGRegKlQcxgPp7/MdG\\nwFOlulTqCSu+fZfkid4rvnRGcPRp1DQohwXiK/UpDIRYTPERHQTEm2fK29FzmruI\\nr4zotTaeHhztY5jrqZqzkMy6/teHE5CGq5mKQsXzQFjb5hKEYg4TwAazPRtH3WOo\\nkZ5ISlxKvOdf8jA9hWKFrREtk9t9blD0IA3ffzfO5aad+aZjnqsgyw==\\n=ccYc\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2022-01-19T23:09:00.294006Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/remove_star\", - \n \"replies_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/replies\", - \n \"submissions_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions\", - \n \"url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"uuid\": \"50c5fa95-eb69-49b6-8599-62b12cff7d7d\"\n }, \n {\n - \ \"add_star_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/add_star\", - \n \"interaction_count\": 6, \n \"is_flagged\": false, \n \"is_starred\": - false, \n \"journalist_designation\": \"sixty-nine alliance\", \n \"key\": - {\n \"fingerprint\": \"7034A99B359CA2DD3F57E251437B6C3C6984302F\", - \n \"public\": \"-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\nmQINBFGRfoABEAC8d/LgDtvyeg/SNsUcUPRY7JZGFbE3peoduYiqd29LW/BXoInn\\ntRV3Ks5H8QLH3/qS/zWwiE4x2yE8cOykWj/lPMlFCDYdWK4f55eS1LcxN+WtLiaL\\ndDQG84KICZznbqTxlvdizLwCvch9Y19dPszPuwrBJ2KbOsngPfHDARs2aU++J1d1\\n7MjIpBLJHTlYKRdutANtxEKCq+KX9/K8GnjZYLhmmecaVr6OoSp3Nq6zlvJe7qPb\\nc1IUJhA1oDyNVBAPs5ROKkM6qhDJmI9OpKoGVGWG7u3kDQ3Oo59wBoC65xTZNFy1\\nGKcQbCcegKsnxdchBO9nMK3wh8H6JUkpdXPrurysHqQ6JIAar0rXIlOvg8kD6yNU\\n7bYK6xetBzkYBGgz7vbgYq+k2ur3nQLvJmBnPVqY/7bjSGDIfbkJWOudD2LaqQUc\\nIUeBpTlOsqfVhXwfen+ynntPdSQU14ILmQAztFzZor2leNWAR6pYG6ZI3vEzAX3l\\nWPzmS7L13VC1w11IG0wdKuzhx1jHGJ32JrNyL4LoJ1O++8GWlJS0+ZC85gwIaFQC\\nLB+sGw4PruxLUGFe2ZLYWgYnN3Iw5JBPxfc+Kxrp1xhHCZNdC1B1ajtkOwvdZbIU\\nOP9Cp5MRt5AeGBZ9ujIMsAxOZrPeN574ewqnY+z431eC6rNFzdmlY1Av8wARAQAB\\ntHVTb3VyY2UgS2V5IDwzSjI1UlA3NlZUWUwzVktMV1haTENOUFI1WUZMQzJQMk9Q\\nRFRETE9IVVFQQkkzN0RZWE1CWkpORFRVSkxSWjNDUlc1RkdXVEJNSDY0UTNBN1BZ\\nTk9KTjY0T09YSFpRRE5STDNRWEVJPT6JAk4EEwEKADgWIQRwNKmbNZyi3T9X4lFD\\ne2w8aYQwLwUCUZF+gAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRBDe2w8\\naYQwL7osD/9nj9I/89AR2p+MDw+RqGjNrEMnIyCC1+IneGC5MJXLYb/9oz9JRMrb\\n/+Gk+MhPjkgHVbI9BzByIzNh0stYF1T17rJDIyehjfbejYQKFwJd1+QHCfSgLIQQ\\nNOtKKr9iX5fUdPzlLzkdaTRGMidUTqWuY77wgmZoKN1a1Q801NXjIkY3QJ5GpjSf\\ncdvgu77k7y/0juUu0eTeNpd1TXs/GBitETnfDEKcVUkk8x+OwvSFE7VrWJCNAH/x\\nOAQUeT9S7CczoUeFWCII880xFcpdynt+ogYyxVh22RV13HJ/HJlmUA+9cpQ6ntAW\\nXdhKS814mJjqfTk5j2ZzLwKekqQgUSjCB7ucbEPhaHdQHShfuNQg9EhtP2Qy+Ptg\\ntGFMF4f+s9anFobioeYnS9S3JuR73UHD6XOz4GDgGx/3kdlxwRfjOqnRWzC3oNmU\\nVmT2caEmXnjEqL3FP1wVOEcciBqOAgT0QsMB06eOHL+cJxMOE6j/Wo4Y2loF0+Bq\\nR0KMqbg0lpSyLHjTmOo15DgzohSALI44niM1SaVGGlzOawb5zOd8ownvfwcut1wG\\n0UxhwbyoiHblTySzzjhekJQGMGQOyRUIfbjbNtHKeVFVEosM5dUhXWRA+8n1uhc+\\npqdAhXSd9yEIjy8dIc7USlTTqEEOYYXetEWYJP6tolKuggSiiUB49A==\\n=9Hjj\\n-----END - PGP PUBLIC KEY BLOCK-----\\n\", \n \"type\": \"PGP\"\n }, \n \"last_updated\": - \"2022-01-19T23:09:01.659060Z\", \n \"number_of_documents\": 2, \n \"number_of_messages\": - 2, \n \"remove_star_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/remove_star\", - \n \"replies_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/replies\", - \n \"submissions_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions\", - \n \"url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"uuid\": \"92b1914a-1b1c-4674-baad-1fb662aed682\"\n }\n ]\n}\n" - headers: - Content-Length: - - '13467' - Content-Type: - - application/json - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/submissions - response: - body: - string: "{\n \"submissions\": [\n {\n \"download_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/7e2de803-ccc1-42d0-87f3-76972745d11c/download\", - \n \"filename\": \"1-consistent_synonym-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 623, \n \"source_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"submission_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/7e2de803-ccc1-42d0-87f3-76972745d11c\", - \n \"uuid\": \"7e2de803-ccc1-42d0-87f3-76972745d11c\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/7064722a-8970-4fc0-b8df-8b8c05a95d81/download\", - \n \"filename\": \"2-consistent_synonym-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 692, \n \"source_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"submission_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/7064722a-8970-4fc0-b8df-8b8c05a95d81\", - \n \"uuid\": \"7064722a-8970-4fc0-b8df-8b8c05a95d81\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/d2aa85bc-28b7-40e4-bbc2-fb7fa588965b/download\", - \n \"filename\": \"3-consistent_synonym-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"submission_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/d2aa85bc-28b7-40e4-bbc2-fb7fa588965b\", - \n \"uuid\": \"d2aa85bc-28b7-40e4-bbc2-fb7fa588965b\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/42f45442-ee20-4745-8518-c8a01bad5f46/download\", - \n \"filename\": \"4-consistent_synonym-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"submission_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/42f45442-ee20-4745-8518-c8a01bad5f46\", - \n \"uuid\": \"42f45442-ee20-4745-8518-c8a01bad5f46\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/48bcb4a3-6f23-479e-a718-e0b93fd4b9c1/download\", - \n \"filename\": \"1-concrete_limerick-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 611, \n \"source_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"submission_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/48bcb4a3-6f23-479e-a718-e0b93fd4b9c1\", - \n \"uuid\": \"48bcb4a3-6f23-479e-a718-e0b93fd4b9c1\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/d8db9ba7-4789-41c8-9f7b-3761a367816c/download\", - \n \"filename\": \"2-concrete_limerick-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 757, \n \"source_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"submission_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/d8db9ba7-4789-41c8-9f7b-3761a367816c\", - \n \"uuid\": \"d8db9ba7-4789-41c8-9f7b-3761a367816c\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/648932a9-7e82-4fde-a65a-fee812b50ec0/download\", - \n \"filename\": \"3-concrete_limerick-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"submission_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/648932a9-7e82-4fde-a65a-fee812b50ec0\", - \n \"uuid\": \"648932a9-7e82-4fde-a65a-fee812b50ec0\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/e0565187-d9ea-494b-8ea0-173befacb1f3/download\", - \n \"filename\": \"4-concrete_limerick-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"submission_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/e0565187-d9ea-494b-8ea0-173befacb1f3\", - \n \"uuid\": \"e0565187-d9ea-494b-8ea0-173befacb1f3\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/ecc07e49-be88-40d5-8e99-bfb3b3812668/download\", - \n \"filename\": \"1-indecorous_creamery-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 593, \n \"source_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"submission_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/ecc07e49-be88-40d5-8e99-bfb3b3812668\", - \n \"uuid\": \"ecc07e49-be88-40d5-8e99-bfb3b3812668\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/c60627e5-dfc6-42dc-8874-b290ef09a2d9/download\", - \n \"filename\": \"2-indecorous_creamery-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [], \n \"size\": 595, \n \"source_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"submission_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/c60627e5-dfc6-42dc-8874-b290ef09a2d9\", - \n \"uuid\": \"c60627e5-dfc6-42dc-8874-b290ef09a2d9\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/0e734035-3193-4c94-a86a-41d04332d8c0/download\", - \n \"filename\": \"3-indecorous_creamery-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"submission_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/0e734035-3193-4c94-a86a-41d04332d8c0\", - \n \"uuid\": \"0e734035-3193-4c94-a86a-41d04332d8c0\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/93d72061-a8f5-4166-9a7a-3beeea4989e2/download\", - \n \"filename\": \"4-indecorous_creamery-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"submission_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/93d72061-a8f5-4166-9a7a-3beeea4989e2\", - \n \"uuid\": \"93d72061-a8f5-4166-9a7a-3beeea4989e2\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/f2fc98d1-8acb-405f-a4c3-c93bf23febba/download\", - \n \"filename\": \"1-conjunctive_lavage-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": true, \n \"seen_by\": - [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n ], \n \"size\": - 638, \n \"source_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"submission_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/f2fc98d1-8acb-405f-a4c3-c93bf23febba\", - \n \"uuid\": \"f2fc98d1-8acb-405f-a4c3-c93bf23febba\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/4abcd4b4-3922-4ae0-ad97-9186f51e172c/download\", - \n \"filename\": \"2-conjunctive_lavage-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": - [], \n \"size\": 667, \n \"source_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"submission_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/4abcd4b4-3922-4ae0-ad97-9186f51e172c\", - \n \"uuid\": \"4abcd4b4-3922-4ae0-ad97-9186f51e172c\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/2281fccc-4cae-4228-a837-e6f3a3e1e6d2/download\", - \n \"filename\": \"3-conjunctive_lavage-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": true, \n \"seen_by\": - [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 661, \n \"source_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"submission_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/2281fccc-4cae-4228-a837-e6f3a3e1e6d2\", - \n \"uuid\": \"2281fccc-4cae-4228-a837-e6f3a3e1e6d2\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/098a7d90-0ae4-47cf-a7a2-2afc00094a3b/download\", - \n \"filename\": \"4-conjunctive_lavage-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": - [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"submission_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/098a7d90-0ae4-47cf-a7a2-2afc00094a3b\", - \n \"uuid\": \"098a7d90-0ae4-47cf-a7a2-2afc00094a3b\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/546e7e6b-ac50-4ba7-b738-82f0d261feee/download\", - \n \"filename\": \"1-sixty-nine_alliance-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": - [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"submission_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/546e7e6b-ac50-4ba7-b738-82f0d261feee\", - \n \"uuid\": \"546e7e6b-ac50-4ba7-b738-82f0d261feee\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/987ef070-4e9e-43e0-98e0-2c623607aae1/download\", - \n \"filename\": \"2-sixty-nine_alliance-msg.gpg\", \n \"is_file\": - false, \n \"is_message\": true, \n \"is_read\": false, \n \"seen_by\": - [], \n \"size\": 591, \n \"source_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"submission_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/987ef070-4e9e-43e0-98e0-2c623607aae1\", - \n \"uuid\": \"987ef070-4e9e-43e0-98e0-2c623607aae1\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/2df5a904-e89a-48f9-9e33-5b9759317f1b/download\", - \n \"filename\": \"3-sixty-nine_alliance-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": - [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"submission_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/2df5a904-e89a-48f9-9e33-5b9759317f1b\", - \n \"uuid\": \"2df5a904-e89a-48f9-9e33-5b9759317f1b\"\n }, \n {\n - \ \"download_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/03d1920d-d4d8-4580-9c42-6333c812383a/download\", - \n \"filename\": \"4-sixty-nine_alliance-doc.gz.gpg\", \n \"is_file\": - true, \n \"is_message\": false, \n \"is_read\": false, \n \"seen_by\": - [], \n \"size\": 661, \n \"source_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"submission_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/03d1920d-d4d8-4580-9c42-6333c812383a\", - \n \"uuid\": \"03d1920d-d4d8-4580-9c42-6333c812383a\"\n }\n ]\n}\n" - headers: - Content-Length: - - '12367' - Content-Type: - - application/json - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/replies - response: - body: - string: "{\n \"replies\": [\n {\n \"filename\": \"5-consistent_synonym-reply.gpg\", - \n \"is_deleted_by_source\": false, \n \"journalist_first_name\": - null, \n \"journalist_last_name\": null, \n \"journalist_username\": - \"dellsberg\", \n \"journalist_uuid\": \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", - \n \"reply_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/replies/9df9083e-1ac1-4085-883d-8c9982b6ad79\", - \n \"seen_by\": [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n - \ ], \n \"size\": 1150, \n \"source_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"uuid\": \"9df9083e-1ac1-4085-883d-8c9982b6ad79\"\n }, \n {\n - \ \"filename\": \"6-consistent_synonym-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": - null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": - \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", \n \"reply_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/replies/ba38afd6-aadf-48d1-a599-bd74601105d9\", - \n \"seen_by\": [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\", - \n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 1219, \n \"source_url\": \"/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa\", - \n \"uuid\": \"ba38afd6-aadf-48d1-a599-bd74601105d9\"\n }, \n {\n - \ \"filename\": \"5-concrete_limerick-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": - null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": - \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", \n \"reply_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/replies/9bb8030a-8561-4a03-85dc-e921bd6a891c\", - \n \"seen_by\": [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\", - \n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 1138, \n \"source_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"uuid\": \"9bb8030a-8561-4a03-85dc-e921bd6a891c\"\n }, \n {\n - \ \"filename\": \"6-concrete_limerick-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": - \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": - \"deleted\", \n \"reply_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/replies/0a82f046-581c-49ef-9b51-ce5b73e45c1a\", - \n \"seen_by\": [], \n \"size\": 1284, \n \"source_url\": \"/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0\", - \n \"uuid\": \"0a82f046-581c-49ef-9b51-ce5b73e45c1a\"\n }, \n {\n - \ \"filename\": \"5-indecorous_creamery-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": - \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": - \"deleted\", \n \"reply_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/replies/1c2ff7fa-252a-426a-83e9-5840cf657739\", - \n \"seen_by\": [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n - \ ], \n \"size\": 1120, \n \"source_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"uuid\": \"1c2ff7fa-252a-426a-83e9-5840cf657739\"\n }, \n {\n - \ \"filename\": \"6-indecorous_creamery-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": - null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": - \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", \n \"reply_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/replies/5f5707b7-ee1d-410f-94be-1ba8c1929264\", - \n \"seen_by\": [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\", - \n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 1122, \n \"source_url\": \"/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a\", - \n \"uuid\": \"5f5707b7-ee1d-410f-94be-1ba8c1929264\"\n }, \n {\n - \ \"filename\": \"5-conjunctive_lavage-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": - null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": - \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", \n \"reply_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/replies/158dfd73-3cb3-4a6e-85b3-f37ae54e0802\", - \n \"seen_by\": [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n - \ ], \n \"size\": 1165, \n \"source_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"uuid\": \"158dfd73-3cb3-4a6e-85b3-f37ae54e0802\"\n }, \n {\n - \ \"filename\": \"6-conjunctive_lavage-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": \"\", \n \"journalist_last_name\": - \"\", \n \"journalist_username\": \"deleted\", \n \"journalist_uuid\": - \"deleted\", \n \"reply_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/replies/24fbb6b4-504c-4fa7-9971-e6f2d1447a48\", - \n \"seen_by\": [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\"\n - \ ], \n \"size\": 1194, \n \"source_url\": \"/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d\", - \n \"uuid\": \"24fbb6b4-504c-4fa7-9971-e6f2d1447a48\"\n }, \n {\n - \ \"filename\": \"5-sixty-nine_alliance-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": - null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": - \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", \n \"reply_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/replies/4dad63f1-dc12-4162-9c59-065c88b2a8b4\", - \n \"seen_by\": [\n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n - \ ], \n \"size\": 1118, \n \"source_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"uuid\": \"4dad63f1-dc12-4162-9c59-065c88b2a8b4\"\n }, \n {\n - \ \"filename\": \"6-sixty-nine_alliance-reply.gpg\", \n \"is_deleted_by_source\": - false, \n \"journalist_first_name\": null, \n \"journalist_last_name\": - null, \n \"journalist_username\": \"dellsberg\", \n \"journalist_uuid\": - \"dfb1ff22-a373-42ae-9c40-28e04b08548d\", \n \"reply_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/replies/d5b658be-aabd-4d7b-89c1-51de7fa246a0\", - \n \"seen_by\": [\n \"a9f8835b-52a6-4845-b428-61cc10561a0b\", - \n \"dfb1ff22-a373-42ae-9c40-28e04b08548d\"\n ], \n \"size\": - 1118, \n \"source_url\": \"/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682\", - \n \"uuid\": \"d5b658be-aabd-4d7b-89c1-51de7fa246a0\"\n }\n ]\n}\n" - headers: - Content-Length: - - '6430' - Content-Type: - - application/json - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/546e7e6b-ac50-4ba7-b738-82f0d261feee/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqARAAmwUjOf3oGUcC5K7tSj2wxiaUdEVeNF4vF3dX1fehU6KBpQhv1Fq1RkRg - 1xM0d/QOpfw31CX3ZS2hPdA0YkFt8xCNHi2UYY2Klumo9clEx5TsyF2xQ0YKSZ5zNlqVJWKRpa1t - bhtG3nRC7KQfEsQNQyLgQM/l9EJtzrYoYJEgd6vj9m8kPYsPhNnX4xtV9I4CFam1fwKqdJvjRiHd - 2v48TXcqxYywEwUKyrPyeLUvhFaPfYX3d7QVKd94Wj9FUcccV3Sn1JNeggVKuyo2i4k4ISkGGRr5 - Dr+Z7WVOTzZ2A/Ec7X5onGDbi1XGlrK94PaOEe00ER8sSqGQKDmfTu/RgHp2vwi5hvBUtOy7171f - 5lf16EIXP9WzNq5svfBBcRSiqTAXIIZ7L1gT1XT78edb/1UTAzj8MWv7AjOCWX893AzSS0QT52qb - vtdFygfDSLjTlOLS5S5mSwXySnTMEWgxtr7MEMOiNOiYmL/DGlHHMBv+k0KwcCj7UAQ6Sxs5Ek2V - nUP12NtHqUv50LWhIx1sec4SlinNwRyUXlBz03ZKazij654snOziaTHIS5ColH1Dybymz04FjWsZ - 1g7J09SSwH2SFCX/ZC/F1+DrJf6aXvjBtS6K1jB0179vzLqtOc+g+IT4R7RGZoc5SJNcIwNzSAhR - Psvoid62jXUBMluHUGnSPgFsdF4s8vKoV+3hb12cuGou87Qthv62oGM2k5aX2KHk/AWAcQw4LeT+ - iYWJWWBwFLOt2WUfZcX+rKQUquZi - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=1-sixty-nine_alliance-msg.gpg - Content-Length: - - '591' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Etag: - - sha256:c2f54737913721bc1c2984e1d18ff6e7c21633f61d6e6cbd64d55367d4de1aee - Expires: - - Thu, 20 Jan 2022 11:09:09 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:01 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/submissions/987ef070-4e9e-43e0-98e0-2c623607aae1/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//aY9hxX2ogbaW32nmX01SSuMf0f9p/d916Nmkjcy19fl/FJYYuicgocKt - /sae44rGh/mrxSAPlujS9BA+kFAaKC1mHvIKwZNRIX95XjjOXj83ndEju5DEkWpS10j5fVQ6JsMy - HV71GP5RZpOvOd6h7MB84MtKsKwTNRiuafeRaBdYWsT+RfuAURTHnWY3PpyBFDYwqlh3UeRdJfXu - J2XSc6H/2071WCOFvJqD47fkdtD2ox+pWXjP4D4ZDjNRqx2apSYqdQWmDuPM9cxDbIMbELnoZZ8R - /e0hgHzbEq7bTwytpyZKnW5fdx0MWoE1GL5l9a6Yr8HdzzbOxYO3vYCf1+gQCDX+/4pRQePzS4+r - 7lJGkIQ8ioaX5ow/nDlllLqEXsHxybCI8du+a/DvlDJrpf7ZcfZRGpsOyU1w0+ZTizPfknMaDK9/ - xhhBt1JU4huxZKH3F1F6y9ws9tVIcfk6eVRkWRbvcVIf1W5yPb3hGPwZe8TpQmp4EgG9Ub6ExLjc - S1lyJ5IVBm+MUy12DRUIHKDU9ZEtkCcqZ9WdNj0FeUGiCUg6Q9ODrOVkuX53JVHwbOBMpOu7Az6h - Vb3CCImEt1VKsPRNNIMdJj4OiF0ycUwlIlZNtTvhP737zjX+FKx7fA8WhusxvrxN7bWj5YHaJ6ur - 89WzLagmFrEBFNvz7Y/SPgGyUwWol+H/UJhuwiMxQPzXQZFSMVaf8kNud+FEcsVwLlr+7RxltIUk - Cg8CSW0Qc7K0zX+aT1t1ybpjAxAU - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=2-sixty-nine_alliance-msg.gpg - Content-Length: - - '591' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:09 GMT - Etag: - - sha256:c8d979c2a5ddbe1442b987bf52676c27952972e9b5cfc65e8725808aa0c00ece - Expires: - - Thu, 20 Jan 2022 11:09:09 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:01 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/f2fc98d1-8acb-405f-a4c3-c93bf23febba/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//ZGSn6Joprv5rISp7I9pxfmNwnQywlsFX1PCfQd9yWWVg0BBVIgEp1oe1 - 8d5CkW840whZxhT/+2RIqDIHZ/sLXJabXXDa1NIYBLCehXbkFvZDTBeyuxWRxk0QPFLlyB8MYN6c - 3MbLOsyjppgQS4wtcYSlcDva5tuYn0wnlWz1DEUAAgC1mfuNa4AjlfEDh6pN+52tq5ysl9vE3WHA - CHAuw5Wbql3NhJgjmWBCY+5OirTUWz+UBX+XhyPVD0g1HMD9mbpbgUFhuBOZt68YNPBdrtosLKp1 - c7PdajSwRqmE4hx2s568npRbFjL9l4GpGAcLef3+hjCfK4kTb1wcIsEcZX/dptfId9Ny4opzos3S - r/v3TckuSbzWkbO4sLgjFxR48vByIvB8DgDPTLF1wFn8KjmRI9uy3+lvjjhQ4FecRceYOkZRKf8E - DOzcGlbcxQMADYTUkikD48fEeVp7GrqCcamdT5xtVK1EC5BgrU411KNV9W98rWAJKiwc/ZM5TlRg - A7EaVllksthnB/R2nt7wYXB2yhi3iFOQXWOXvgyp+TEAtmMGXZXxhOCAPasxiiGk5lssxmckhgyJ - sEZY5vkrcUgEp6rw1afkDpzrcnKYxe/B5e3nxzB4HY8/VoNLuV0qCsyn7KF4QQgeFSblbbPrXGa3 - avOREyv2eBcOX9INYBPSbQFIF34xe1cmsu9LRxvJtNw+7L2jfbAt/p+K0uWbL2iWGAzWOdIz4ER3 - ZGE7ejn1FV5LkUiusfADKIvWh/Jcf4rRSY5noaaUdBkyT0JDXWLPvbANUZPIOysB/tO36MRBBdTF - fq8mcxnERAHf5Ok= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=1-conjunctive_lavage-msg.gpg - Content-Length: - - '638' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:369cbfc86fb18c430582307d6f64110de459504027b3132883d89ab50bd50ff4 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:00 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/4abcd4b4-3922-4ae0-ad97-9186f51e172c/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//bwoOwi3Zwszz1n7ylgcD++Vx2S1yUzLOqNi8KWe4xAJSCaJw39dcbkiT - 1OqJpJDWwIjWd1yRIoeLqH21SX4+PWt2Ra2j/MqjsnQdmXa4hEqdnTgaiLHXC8DvUF3Kk4YfJ2Ro - e32INfFkpT+AuXRSZFTmVlmzFYKTEvlnAGhOGubEbZPc0/pWZt2f9FlnVbHGTYeiD7mZfxmpwVTL - ilTxm0nAZMVsv+sD/f4yLoYn0f34e3zMwWgWFJ8n5G0Avnhkxq7NmzOLeAIcmY+jA3enYAUrhCNX - SXWgI+sUfNh9Fxyp+2DkXtW3hEctclLyIpSmRbMSfhGdUbGSDlRwyrZXZXvE2GkE20xiFbilnhjw - dIsgCwGWjIHduH5S84+l49bbAQ3lHnaQUzrIBM5CAipsubdp4UJQW5MH+QcEf6u6P4YS9PhRs6c3 - oFRoCAvY9mRSXe1iqjxE5jAXQeKZkZGzB3AJdoBrzM6ZsOFXPALJy+eKk1/k1NrR4md/MUtAxsej - V3CIH96BC8GUNMXAaEzHAd7aOEN4acdT9QY0uua9cq42bJ7Em3zpzxG7x30SLL9eHvYuGSqeJr5T - K1HF10GEjdQBzpR3PBl0eFwO0qjqW5YBQyHB4+exT+vVYJ1sSeOQor5yCFDDxjplYDonYeQLJOWl - fkg3UPOpFbMvB21nCRzSigH1RFaR4mU110vETzz+BSfNqDawJdGdtsvgo/qjszTVhRstgSSMRJkP - Oi5gpNSjAKP4oHwSf1YS8EPdA0lnR1/keAlNkIMfogWicxyzegEbkFFVdvxZDw++a3rdFanSEhqn - B/y6C4BhoY0kF3V3RbHUG4xB2voOTgdqbuB34EjiXqg13epvVzH5Ng== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=2-conjunctive_lavage-msg.gpg - Content-Length: - - '667' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:d92a7cb9901368d8ce9478c1ee67a9becf3789330648c801de9070b5d1c38232 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:00 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/ecc07e49-be88-40d5-8e99-bfb3b3812668/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqARAA0bqrq1QpF62ZAMgrtbCo/7kmm8IGB/7Lddclop2NH0P4BEOO0yCFruoE - oh/JvsHnA1aOiB+OWUba0jqytICNts/SmkUCMGawCvB4f0mCFTwqnPKZolol1juhi+v0Nj0I4No7 - FL8hYgu4OQnUJoUaHnk1G27QayFc8bpA/uIqD3Wc7vy1stVmjIbwRZibEUgUThiW05jvPST7bCcf - a91lPAOpIB7n3jY43omHBfCnwXlhCmkl5ruyKJK0a6buP0UlZJv0eMNjLJ8cIZmIabOsKYJT4JGD - fXGJ/NBOa0Nv++crzLYu8tL+8iApEdyegHsKpzKDoT0t97IemCABPjLi18ZRh1YRlrOPKSre0HeE - 94d8fylTU3gP/j0oWt9tDxhMuLyqAjqfB5OvwNyO4Q44UovqnLdiCQvkTKavmXlfIoQ+mex6jlbD - AbPj5zwPU1ms+fqZ5BMNWagpuvGpW4+uDG4yQCbwKq0OWtdqMC5Ml/NC7bTXdowAUTZxcK4L1UZv - 8BliQ0bS8jKsFLC26KEdO9kHYwhoUVhJI6sS8IFTUBRpfuw7sc3ucjGC9a9Vbfc2ytTnSA4thwcn - 7kE8ElvDn1lpOx74+EeoGAksYQTw77FAf0OwYALZ0MlahyzxcZeW0WUShR4nUFkfwSghPmMYwmOW - NgiAEgyTB9G474RoPLzSQAH3kq3MXakzuGOxoH0BJyCV7pjx3DdpQxlg/PddYwURy1JO/2aQlEcd - dDew0WaSU00mRSf187RA0izsOoPJZGg= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=1-indecorous_creamery-msg.gpg - Content-Length: - - '593' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:36167d9be8bd62598eecb1b8cc4f7cd2e6571141907ab2ff46a3add6c164fb96 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:57 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/submissions/c60627e5-dfc6-42dc-8874-b290ef09a2d9/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//QX+Kk2k7xQF0Izm5HeQ5s5yL46DBQOX3HFSVih7JkpcjVGWREQyAfnOa - UgsMZ/sxJzKxLK41rRDMNAX2tWevCXoJdULFntJ1RQkUhNcqs1h9MPnavQxij9qSmaLFiEcfaSnk - jBooeYToIKaZ2jw/krVqqa57wbQlEexGMc1wTlfstEdmN3sQ70bZesNXBN7Cqv6HpVLbwjhhYXnw - 3mBjrCNwajvKVTW8kZvW0w/bufTewd4HYjycS+LlL0vtm6gNS1L+6FrMHktMjKyv0v4Fb3W2OQVu - hCVWvXccSY7Bv6cBNhiQOu9TcsR9MYrCSEBx7PTB2elznj3rcGsI5NTTcbt3mDqMlqSzAFY6JggH - riUPbNiiVwbGuMq/1QCpuHm7fSuLfxcEJCWbMhWBiYGbx/q+0YuuVnAwq4ECpo9OU/pWawUS7MqC - E2FktiBBlWJNlU7l3uKA6NpF2Reo1tsdSBsSBxg9JuU8hmein+PQtDgiUfqxb/z5OynsbKgEErs7 - 9+2uWvTzZB4N/4D49RcJQC+SY9rR6a4+bY1acVXF6lSDwvgrmdhtYRLh206Kk7GLyWWlW38EPB1v - vG51N48usjrAIUZGwyftERf7eZyqQGQeGCEqxBkjnTwACDUuEwNFuHDcEPgE7wFlM4vUzqnvbJRL - y9Xh4po9fRm/aUGQ7QjSQgFGYkMyvxrOBNoz2u8GYFhQcOZsBwx0s/pNwWHzjtqTFWu5QYG6kHmz - NOMplDrqSg18sbLUra1CifTy2uGLP7+EUQ== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=2-indecorous_creamery-msg.gpg - Content-Length: - - '595' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:49c83b1c967bf7f87885f8a9e50e375c297ffe1a0f4b4369775f87a1d761d5a2 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:57 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/48bcb4a3-6f23-479e-a718-e0b93fd4b9c1/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ/+N0q7FdEEMxFB+ckGtjSjsKZpRrDlSd9P9hQNspERIrjrUL//aTlkRuyC - Bf+MtKJwjHl5QQvwSCmK9j+6tx2r1mtVBAvjB+Cd01Hr23buxhZ2nILVbCjq4lNwdWbbxYf1B2BN - VC38P3+hzfoToDaBYqPY8o98XeHxcn9ogqg7BXF73lHcum1A3Orq331qzrdnd5Hc0uk4euCytLIj - HvLLOt1fahV0sem0GwJjKgKcw3KNYElUipL82TUvVXmM4oxUSRbx7c1qvmMHE3RAvzMmevZUV502 - 5hzDJjtjbdSjwEQbsGTvmAy8Hu8nTIKmqZnLUNQAeNMLUiS9P/jy9eXn0EuOyNL7IcAeFZx1F5M5 - VekU1FiIFWM9ialJT9+muMkDUsgZqaCXQANzNyQDOvankAfDwLJYZtiUXCXAwI5QVzK9PmGotWii - 1DLqR1Rq26WKe/trbztyI+22Vkow4IJVvKSlzFftnDML3C2GnsAbo5+vwMBqkAX4F6m8VBeeMeem - ylDCh8bq2BoibodzbopQsKPZHcbsD14Okno7moKH3OFUReGqi+a7GDMJvN/XkEIRWjTDPnwWlfIU - rXZzpkZCwwDgrflLRVQoUBvQ3gu2+4T3/xE0J7kEFMR+qjlMUVCQFIQAfoTELFIlTOaN9a4T8Xg9 - l6XTUfpvJnz0PZ7s56PSUgGngyQhpYO4x6gHOBLO4+OLJSYshdB+qNB0iTLoJwjj6Spe3u7TTs34 - XQpIPp466dFfsJclGaqGodCghkn+6OYUt3pMeTxX61meRhYjpgdceLE= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=1-concrete_limerick-msg.gpg - Content-Length: - - '611' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:2d4f3f0281c2b3da41855bafc3c90d3c1509d7f7b2cff3456c55a2b7efec5e31 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:51 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/submissions/d8db9ba7-4789-41c8-9f7b-3761a367816c/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//d0r7U80dRHjHvMi5LkGOjtP+uHC46RsTkcshCNSH6++lYRWF8Y7USW4x - 66I8tWPIuuCIs9GcooUKO4b0kLz9NJlu0znbaIJN2OPeCJQ4GsQg49aPzTh6aRtOVt54sr9Lzlgu - d75mTqLtgMriTPKg8047lTxw1430feJdKSXIIPgce2S36CPPmS/yXYQOLMnsdvnpJ0lUkjSU27hb - PnF46hXehR0MKUArrSqeKAdOGUfkXHW13Kzss8tEvcfRlClz9gHePp2lVSvN7Urq8jEwt+EAQIJ8 - EKEGMVgdu+hQenjoKoubG0kP7trTg0gWdYP9jfprQEznCFIsDi7H71U3ek1o/eZz3Se1gkrxTDf4 - 3cTIHRjdw7szTjwO3jGIWe+PslKpMvPm7xxDI7LUk/7s4NIlMIPmHPEWOek/GrwCf5yp0L9554Ti - 4FF4LQwCposVIAmN9Haus6iJdAj3Br17tbkdW+SQmuZ9goRSotlA+mCMLDTIxnPKZItn53m5zHBy - InK+vOdre0gmCs40O+z5u2TPNw4SflxvJbk7v/jmoWMcRlURt+JajxpNPko6zluuRxJyNM3Qn4t7 - gLHmYIKMwjpr9RdHrPkSwxQLzAcW+DITCl6crxRTibi+QQIEz5bSf285lwby+66xdzgqX663KH5Y - p0dV99rZgiLwlpl0PHLSwCMBS9rTj0edt0rrwikTltaCqj5aOsOdCTYH8SQeSOzU9sreZbrLLAJu - ca+7tsvRFAQDl+YvIxN9UifQI2h7Kyma5F6EGOQ+OlAdpPFgtN2lKnX/5LLIaEf3M4uU+BPX+Rem - fPHbDPy/szIORpdcLA6z7AYk/a4i6ngzmBdqEGhXaBqkeVItHR5beyCcks++evNGECfcodK4SLDA - 14pFiLtnOAIa6GzJHpI7uiK4mPUQk+2ccMP2pdhpt76XVpShKkvAgjTexaZBZ3ELKwQDVZOOYf5d - 6FmaxpeN5Tx4/hQ2aN0oYA== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=2-concrete_limerick-msg.gpg - Content-Length: - - '757' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:9253415712bbff3a68beddda5f93781c81399d5639f7f14a93b49c8fd8539ea6 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:51 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/7e2de803-ccc1-42d0-87f3-76972745d11c/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ/+LTnLpo/pLzl6tUqLxckEJCSe8zdn+H2XqP+NOQoZ5pcmzqtPjPDI31fv - ibuvBSE5IHzZfvg3X/wNkE1s1IFVRf0kjC8jcJD4MZX4bpyB2uQatoovA1X9J6OjLjoBRbEseRfW - 5ubE0nxFpdCX3XvFDT0371u6GLpi4Y0fsfC/Oom6XI3waop59NbYYqi614DF1GIcI/vXo9B4cOnl - bkuSJ/Sf5+uZnwEhDUkTuFSnfIHWfTP+ENeXCUYRqu/w6dEqnVTwVWWdwQL88Bgvpuif8wCVTA0w - SmX8LVnhudWxRCnPS7GDxhV1OiCRvvOBx80Isy+XXfoTf/UiJbP/zO0zF25FFS8jIWgHxiqzHFDd - QY1cGTwM8nPciaiW5PPj0ghlv1TDyqDIbl+QNd91dOPVqxFt0/EwT+RA74ukHmYbfFnE3BGA6ibJ - /brtdNcgwosfgeyN+9bI1rNUAPWMeMb2qnuQn3KwaYfLSv9hOxkVtE/xfocXdws6zqgiKCS84mHB - zfoeWSPKD+5pGxuR0VNNPezCWRoAuSSeZ7YUEK4PehfV1OrWo9/eAlvqzY/wDMEdGP3aaGLrGesH - cNGrfawhNQsndIlZTf/KTaFxSXIoc/BAP2l+GzwM3JyL1lTQp1d/nIdeVoq8Qfs7EWnhUiWy+03x - 2fEfBRADY8tKxtLoP8bSXgFoywsO2/jD8BHKxf3Bihb7bf8inYGjdVpG+uPyyo1gy9jg7LcNU764 - mU0m+ArM/b5cQa9jmplYDHL3fZ3xuCfUgldu2jvuErfhdkPxZ+F9qgPfYFrpjKbxsE/V7QY= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=1-consistent_synonym-msg.gpg - Content-Length: - - '623' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:1b629a42600affd777665af40e1324db3de989f51d0ec3943857461718fd7acc - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:49 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/submissions/7064722a-8970-4fc0-b8df-8b8c05a95d81/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//f06OY7TdROea0h8wAPqHBVj4vLBLKY4e435urytRmWqQI1MnPC2Du5BR - Eb3OGYIsZeuYR27gnkxXQxAMUR8R7NWCn2/6eTEQHh7YuLxIHXFs2uyPLe219sdM/9vPhlWjbET/ - qEPsn42WKW2bFZFvv/Not5ouEfn1PuxyplGaFXKJ2i96pziQ+0rBFYU0Gc/psQ2qqUYT3fG4lCGy - Poi8Fnken38RMRYh0cM/hesB1XlXiIDrDBClGYhmcN6h61Daqgo6Z1k4HQfsDO9B6PR8AQ3y385p - QXhzMN10p5kp7aCRbFCqMgd+eYWWD63NnqyB3BI421tZcULIXow0/ddkZRErg4iUnRrqY0ZJKxm2 - PNAh3B/d6LMyeO5LAC1K1xE07ZAruGNCmTpdC1xXLSoSbnwLN1ORjtc+2ZR60voFWkmp4CgUA/mk - zfFwf9WYsXFPSHTIH007M7LzTFU4xsKLqjoD62z4HBQXDtpfLdXY3Hdb8ybdV68GrCKXY4GytQpj - ZSrHlpfTzaesyBKQpPDkSYjTlrhPdfeE5c41ny50zqwMYMrI3uyrVBdcFyaoRs8LrGqgrtigiUG2 - BgVGwPEOGbpjFQ120lnLS4mvG0M/3oWPOenUJayNhRAXesB9mJa0cLC+9xvXzJXs5ZKH2ZzxB7wk - wc9+9wJoUa3fYiGV/UbSowHMr6W3J365h8lkRpclFeQWogkO8wMaoRzuqFwe3DnMdcQjUG0rmBCi - QUbynFI54RiEinJNDDIVzDp1qx1TADMskGMLc6/vxT/JB5lGBK6ueXCdvCIoQrcUdkpOlvDaFomM - kLQCAih3421QTr055Hz0tAHvXn1nqZHYSh2Njstra1FzMDBlI8yaL28HtgpMr93hShTJwq8dzarq - SI4U99qiJHw= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=2-consistent_synonym-msg.gpg - Content-Length: - - '692' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:8df755c2ad5b82e4c47c0564176df0e406d33e444386fcafcd7c524b8b558467 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:49 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/replies/4dad63f1-dc12-4162-9c59-065c88b2a8b4/download - response: - body: - string: !!binary | - hQIMA0N7bDxphDAvAQ//XuxXLagu7zv1n7lcws75pYK8tSmE5tH3eqDw9imBkXqOWtutqRX3E9YB - EKvcPoTSZwAxhU5vdHuWHtMbglo6no6eEyzVXnSUHUzr4Pdzv4uL+0prIX9q1u4b30qsZ6wmdIOt - KkGav+8P2ifFfGvleyCigFBV/ipIailap8mkDIKvxGRmAmCQqCJHiUpRNe6QkEddaBLwdcfOzubZ - 4XxsaGwYo0cYK30+NP8LCgnDtSv7la+mtd+qHVylkascHnGL1nHP9yFbGTxKZ7RvlPixo8qMc1Y3 - INLmgKyOca6iDyH5swWWEptE0AU7fPi8ghDhtXZv8jEknClZM71BHF8YkzieeNpYozvhJLayQvV+ - sDDwe6IDn/hDXJtYSNSa0XHo79hVQafknZAfiMXBSS1LTsCSRkcSHvb3KHoe1s7GqNprbx+p/49T - MFHo2HOJ8/UIcCFM0VoB0LhQlzcj7vORQSNrDpVS3AKgdZPsJ8qpsjLTeEKszU8B/GPbBNVpAuv2 - i0YwAtkNN3nzOQE2Mq8mpj+SYS/iTSgJFs5q6VKN0mwf6nu+d96BteocdQrA27aSMXo11adLbReS - NEUkBjRL9/sNl6d4qGCXesp3DZym6pA1Zf7numhJmqVdFHy+XgmfSOZaSGHBDMpt6csHtBa11mmB - 1w4S6WN5e2jKiVq+30WFAgwDw+fEwKIgGyoBD/4khdTGj/2wC01WQJ4CG53Z8e5mATqpPjBJdNKY - Y1OfJXRZLKdbNvAu9MLzVlQlHmVZkadmierHaDStK5prpxlQHZrrcuWrRjZZhRd72EujVSVwEHP0 - hEYleON7I0LQlc7Dac812iw+Qzfaqk9AEe+0GR9xrjsc13bfLdplVK5g3mc8rJMPbK21L9c/5JUu - tEwMQNN00sbdhqaQ38tAqcGCc4CiQK7t68PnGxpiD6WqGng0v0bjpr4m7l4M0RGix44QFuMh8fOg - ysNxdgikEjwcIqwYvuXYJOJKvl/B3NrLRgSjc08HBYbBS9731ic5UGrMXMb489Soey7Z1K/d8paK - fQI01En3bxq9Uu/px1+W61ckFVxnuJ8SkM7Dgb9GQiG4msoB1y3SoKqpbq9Ny7ZETfIcneG5eeJ0 - e6IvIwKXbEamUBAK91p0FPrNF0/x0bea7i+9topmiVt3N5FweHRx/l/iqWUkXI2Q3UHkd8Gelp3g - 4TEs67qGeM+BwIgIuy5PLMu0ajDjSiVjgZ2BQsPYzwWVjWW9igInW1RSaV48qe4bsgRDhreUllkV - i0qNnwZ3fj3XURBPYdU4W+dKaD9F6LGF6OqxG/M5tR2scjOlyCB5K4qnh0VS83+UyavLndBt7W0E - 8n4aqrGdVwmnSqzRC2WLqxwhlkPkwWRWvuJRvdI+AcBdl+2EImV99JPQeNxJtsoYIeBDmYSXKwQu - OJSgU9W+y7dIlve7qXljjmVYqZ+n789KN1w7J6Y1BxQfQyM= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=5-sixty-nine_alliance-reply.gpg - Content-Length: - - '1118' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:a37f717849486b9aee64abb4a643ddd68b1113b084b1877331662db5faf2d4b7 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:01 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/92b1914a-1b1c-4674-baad-1fb662aed682/replies/d5b658be-aabd-4d7b-89c1-51de7fa246a0/download - response: - body: - string: !!binary | - hQIMA0N7bDxphDAvAQ//TH6p5AOn1CrjxYM86z+RMEqJA3KAWtZRfG0DN+HrRi4U+4jqoRkNuScK - jGMANsbTgKVFe8ho6dS9Vx4YFxcAxrNSRnOAkKqCK6EzSMXQ9ndwhBGTfLQDsMM8UCQTHb05OSyn - MUxwFS90J+WcoeAXimrX++kseH2p5UQGxe1wDooQqSvDJtPuIjYCnpWaNvp72/z153ihGAZ/83Hh - vHC2huc43vtGLKNgYYH3ZualcGBoQVbCGSLxVukaouLC2sqh2gqhSinEUdf+A62p66QexT5SqYaB - AHt1FhOtUey+LKaMskLv3LZc6GVr6UEEsybveRMgMtYwLHIkrKYIB1NQde1W60nUEax9MwKA4ZqN - 1ArV78ssvbVzAFcqfvIuHlXfPXOmD7t8yuT96hTNAhe2Ih9fiYGVhHAbltP/d6lCzFEzvEve0BNj - xwH31OrmzsrGMKTD5xpjaQnJko8enAK9/V/s+SFevWJeGuzPUd7M3ymD4pGXzWAw03BGK2B0+YOZ - IpAoPKbh6Z8FlBL0tujL0PS77PM4s7kxKZ7pWAU2m/PTJv57GtBaw2t7GTpWdFNu+9zx2vygdQwe - SkJpaM7tgonvBvbwyqT2jYbzqCfRqj45AHntTzEw3UZlxLmUvHh+u/LLPvn7EDOPtl5UQANgj6Rl - XnTgw8k0znG3VRJ6vfGFAgwDw+fEwKIgGyoBD/9pw1xQzuUiV+uEuopup9unQa1XTkfL6X72Tqp5 - eCvRNOHHYmThZCp9QHnsJm2NBwHyZfrYgzl48quf86iekCoPgyW1RPTUEGDCJjK7XvtNULsMZB4m - sDzS32TgP5MKzxGmAwQWTj7o8s1QXv9gy2wr/GpVfF6mbHtWALY+fovm1TkQ8UGBv6j9LZcBjqn3 - MZfZnCqwOqa267ToB5AjxbL6X756TMaydpJ0MCHhh2JcGYEKzyp67BON2lqF3pYfaw/E5u+4N8pc - +H5N1E9T23xANWJhiydk+BE1I4moDVTR+iVn3SywDKFqO3VdblMVAEHS8ZS+sTSXi5KJw0k/+v5+ - Q9j6uKeMCSjCwGInby4AQnFhlKXL1hBaYFVAjHAaXZZhGrPZOErESOJAFCGW9WhJkedsi9HP0FUC - TuNZpJB31EDo34+LYIrfBmHXoefL1vwJKHSKR9KNROiEUT0hv6pK+psT3jXx/dCM1H3Ads6D6Rc5 - 1hcS1alsjXoWZJmgugON/U5WnMvDDWlKtgbHZQyelqEzcDvItemBqWNLqfrsDJ9wi4nQiEeih/xq - /uYB8dwYMhi1sW8R4Agn4hsQhchMtiu7sFqAm69KJR2c38x7njcZnym3mEn6KS11ttbv5Q1kBRLm - O8c7jLtVxyxdwUGIBsUfwFM+xQq3cGcZ6Dfdx9I+AbOZaVM3gHy0lp3wxwUiEVWuyRG/1/ys8jlG - Y7W8jTPskwLJRay6Z0wkCcGMYPKnvyIuMuv9gaU/FluEaAY= - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=6-sixty-nine_alliance-reply.gpg - Content-Length: - - '1118' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:506b499968c47ee42d2aa758cf2043499810091417f99d4bca76a2aa239d5b52 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:01 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/replies/158dfd73-3cb3-4a6e-85b3-f37ae54e0802/download - response: - body: - string: !!binary | - hQIMAy2m2NzuNpRrAQ/9F+gtuJpPO37A/NM6OacHAK+lBUvHM8icpiAz35EqSbr4OnnAQ8IRX0MU - v8Z0QpNB7+MCWlWY4QL59zaBuqHwIeg6GAu/szkpRxhD5eKAvRa1ukR9XrQ3pDmpNHU7k0l3x+jI - tmKqt7WtxqiZ2GjIDTitpgowd40k3Af/BeYQ7IEHqzv0xbpsVp06+RtLFc05Tg2mVlK9lt5mJmht - VcZQJJ3P+d3wcROuKuwmPqzi5FAlLQx3opOy1hbukgpH4E+lBSA1EwsYZ91/4AgnhB+VLgw1EAsh - SSCtNfhTE5AAaJ/a78zf30ukkZ1v+mIaoX+MFYCk0/eGVQpuElK2OO3MH8lrOylr9/388cP+aWC/ - iN7RpXdUDWi1iUtLLieBwyVYTNnw7yea7Mbpme9gwjk0Jg56dgs+npUWLp+BTChxWAR67nG4M6Fz - vNZbclyvwyrojcBWKDnP5zIGIxGFufNeJcAehapP1SVuxuOO5aCwaKSZLiZZeINDhn7qJ4rNNhja - 2fwQbVmMW8WMh8m0ofijC1mQEj6bh0ElUzkZlRcD1WgfExnlyHov8AWu107IidLqalAU/rAGksd1 - CxxCUZ8cixPktyV6jE+g2IMGD9iNKuXmlJy20ITvVpaq5OHT8lUPJIMyoZCcfbNJy4ys5YASATH0 - aDU5C7iLg3hWltKCUU6FAgwDw+fEwKIgGyoBEADbIZ0faKpZjWxU8Pu6ZGNEphU3jYPg6CT1j3M7 - 0Sc0kBu3WZZDbAH3wUPbMCD4xNnTWhxjBCUmqLorPXXXm2LpE7FaApUS/DXl/TjTdYlKml+MsXph - AhdQQs/P6w/WhiHI92UAOdWnAtKebjMqh23oaFVVuVdkdXEdz62aSOqkE5PLJ4EggzaAEo9hwc3H - m/zq6f5bxS2BdgnEUuL+4Q3iOiydQ80obTJZNIRDPL6cmC+XKDrDA3sXluviOA3ct8nnwtwtkSGH - /cq81wt9lNVxpVriOZfFIe74bxJ3PQvxaLGpcqFg8nT57bfVzkhfPuXYh5AlNO459RUkiaZa3vmZ - ZlltTq5iNIrlTPqX6GerzOCHYYu3CT64DgviXF9isKgukzDyZmeGJK/LKSG+uC/CuBSzF1opE6SY - F9B0sUTTqPJ7mBmJU9wpoNnQG9uGx9/qEqRJ43k5KNGLUs8LwtqBhKkBNUA9HnasfjYdDvhmNxxk - ENr+Vg3IWqwsCrSeaOI7BaYiokDpympu44q5NZ1f/akfXjdcdO3Z7fStB3lOJX/ZvVRcZyg5fkXd - wSg5jQ3Nqyq1ZxTkuUt+QHx+74VMQXJ7e/w/OLrJNoedgLM4eY+U2PqhsdNY0qXQAU10eu/yoK20 - IWQoqBEDNvKbs8T0zTELQ8Rw3527ujnro1cfoNJtAfJ5dQ7MOzrxUSNXW38Y/O2idXYllsvRNodt - kahbwINUfi3i91KBHXq7wAdQ8wODMmyLXZ5tJCbnpkHrH9wx0/Q+W8omR2zjdOgD298MjO0f0wAR - 27+cdwdzVlNEWsvI2nIr4bWhIq/iEq0ZCw== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=5-conjunctive_lavage-reply.gpg - Content-Length: - - '1165' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:10 GMT - Etag: - - sha256:6fc20abac42bbb6e36d08f16e84de997605c3caa88b1b6610cff5453f0a78bd2 - Expires: - - Thu, 20 Jan 2022 11:09:10 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:00 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/replies/24fbb6b4-504c-4fa7-9971-e6f2d1447a48/download - response: - body: - string: !!binary | - hQIMAy2m2NzuNpRrARAAv2fCgqOcLQn5BgYTSajwFM4sm++V+BFhV2RMZ0Ywc7yIGObndNc3H4v2 - 6CFo9OdMA2+uQrRzF3sNwoFn1tFLkRLZR4g2c0R8cynrB8XYgV2dR+T1/969ZEfOcCpFVOeAl8tD - Mld8VeC2HIiz7ttYMnRhO0LSuDEegI78z2idd/ugDgJa6oDCdtC1H4iFWiyES/arZQhlNBonZcJb - K9ujj6KWKysqB78+APhIUBF8DuAhRFv13raTqR+y5YZBJoGLqCt/K37Gkj9oV2Ty/juFBKKEZgiA - wEGgIYY5DmytKgErLRIZhKr/mfjeSpAgtMLFp3MLH6BXASzbGvUZoVmPcRcg0zujYARWu0cj4NFf - tfEHO2qqW0WQIUhzjEYvQEf9lbu4hZp9tNJ71hASCXJpVMJSkazq/5Xnh2ukFlSpvEaSOl1nX7jk - 7UMHQFd6ckTIssp7aIrZmBJB3kfcGxSWkCmu05fMFDr6LfxeyfJlt7kDv4PP0xHaY0A+aJ4Pce+s - WSlRkl6akI0+ZLsADxRNq1MwSVi9G9wqgoJ64CUJyjo9nMWZUyNISx7bYnZLG/0RzS57N6iXQkwf - pr9c08+zL360sJGnJOKSaAD05VCgduE+EbQ02fd/GN8sC7pJ7vc1bFoOssmIHjVtuJtCX1hxXuie - wzWk3g9HLU0Ge/P7wHiFAgwDw+fEwKIgGyoBEACzLkBPhzq0XbOkNrJ0mgsG6Te9AIHzZMmCpSJB - FBBaGUwkJP2njofVnMzUzGZEiloNlHU0JqU2h+OygDwKZWopcnAvjSf44nSXVLariWywWWtRrTUp - /qLymnpIEkK8LVrwGKwNhavEzg1xRM0FadGTGPOpHhm9WWU1cVU+zxy7JD/RJCqByXhZgwBnveK9 - 7o7/8MtANWmmEK/08zzfRKJAUDjReQFlbyTLtTzLhZ5qRapDPMHEc/5iE0FyArfUxmzgoC8abvuR - xXcE/rqj+jXpekfJGnh/b1KSa//3FU1KglcEN12aDT09hfYZLs5aNYLfhRGCsGUwI/sGhyr7fTEC - swj4DcYhbRdhcMn2LvaLLxHDzT/CYwniLzryFGN/yYFqoWH4VNK/k+fd63ovJoz2gvTOGtF85bKP - D/djVUB8ZHrwQPYhmVPAq9GgE83APidKDVpiV9o6CoGc8lNVnUNqMg1m8OQd70wxbSNQR1UscTsv - pafXWb8BGCv2Dh92nGgYDsVG4Q7kyxacH8/6b3Ej0NAxlmq7T4KEhtK4zWAxNW98fuXvU6x/xOed - GUyIJcC6LRy2nvHKpebo+x/m9c+z5kL2IkNszDrn6K+v6zRge5KjwB8ZVaQWviVOCO4XBevHyBM4 - QUTOhwvaKSO+Lfr/d6SUkFeXPW4DszXo4aPFPNKKAdRQneC2tRM/jHptBBJcUOh30yiyVZXtqyWJ - bUWisJsylbza/CcoxEe9YVWqq8LATiXuOiIovJw9Hl4PowDN/a/tzELxzkEvkSpliChiOETfCBtz - sUrPgThyINfRHpw1vW0URz4mXgArtxIVXf41HDU6Ks4Jk6dI2ZV9RIfHvP/D0pXi+cBES5kf - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=6-conjunctive_lavage-reply.gpg - Content-Length: - - '1194' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:3d7492dee4392a2c7180f236615ebd6c26d772529d502c5124258127ef40a391 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:00 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/replies/1c2ff7fa-252a-426a-83e9-5840cf657739/download - response: - body: - string: !!binary | - hQIMAxGWEiPHDepYARAAu/TMRu3Ff5fRgQqO/E5Bv/94dfp2b5I+AyQ5+ejoEVp1xxS+IiQWM+Sn - YWnrgUSCRlPRZLzlgORkyg9hV+Hke6/ycie75w4z5C2yLMp4fS2/bsIsAfUpd4diUUjc/L++RWvw - GX91oQB9aFsEJxiD6LIb5DvXf4EeU34XmTGpTUNx2st1bcTvsw3ApzsW4isLgZipHKYekOnX8qvx - vpOjVjyWEeSdNNQg+hAgB9JK+vp4Ueykhyz5Xg6EaPbWciYV/pgP4kDa0yilHImH+eSABa/SKUar - ykt0ny6BbbyfvZJXCC16sHuCzmddXBuhoEm7Z9dn4cBbP/mWVbkw0aPTYEdTNYMi5pMdVvSWlLbt - u8A2wKiOCkzUkaguZjbsJVJPc+jm0XQuccVqTdQkUiXiKZWw/pFxgc0UgqiHF6cqO57xZS9I7OQs - yx2CrR20ITwb2rRUxsF5SiUvGN39aj/2ycIZ5PGZ3dweQHDOMo5kR47aOph2Ac2BztN/s3x7fqfJ - 8KVjxCW5xlv9yhl/lIr6CPgH+4NqJvxQu5M3zXVr3hTnoTnBoLX/g7w7oxEwAi43jI0FEzm2e2bn - W03ezM3b1P0uLeNx2nmqo2HDZPJPItU7BgN03A8GBmxPsDojeR0khzZtWPBPPxIyELg2I2gPvDo+ - hQI5s2Zwu3b1jYnq012FAgwDw+fEwKIgGyoBEADHptlGI/S5RTU8LAGF5COwuVWEIGieqkNRnIEi - +aq3ln+i9lDHpbUoqjtcxAGYaoC/AkmWwu8Zb08LPOw6yGj9Vq8HkvqYoF3PVfR44gr2g8MGBGhl - Y6NqAAXAe/SxqGJUsN22Ag9TDKWcMPxM/K5+7IqQixQy6FvqNrQ4EHwAJUxTZZH/8A9q0r7SWYtv - 65OSbkaIaO7ZNxzqvCP5f+Ut05BX7xpVlJ2JMxZFGZCy+s0/0uinhtPbUsL3XqFhYVVFFGlfMpSX - KZMNIo7I4e+NzMpm90gHQpfbCoR2zafhxgADsEaHi6LNrm+1kHbL/acPKctAXbFeWFrUbjceBYH7 - kVdEVMP5B2ycHD8ER3HRXAOD/UDHb0Udn7zHNXojsNFQ30A5PD15IbdyL10eGm5LaFndkxcQRonm - 7ALRJXXV6veXtE2glXCMmbtzIBycZpxipEG6T0046uBZs9XhQ27UoQ88d5ar0MsgoZkTK4WKQlUv - Sz78qafEIhiuqxSNT6NErjBmgxFCcMvu1OP5XgCMsSBYCIVB2VmbrFVv7mpH0apqc9doMmveYsAd - L20u7ejj82IipaNxJNvTcwuXpbWt5woSIgY/icD1v8ms7ugDbPxHgUpqDOUhC6PBtTq/so2bDxEA - peMxY5zLQgFxKFJW4pOa1104hg1TdZyClxU629JAAfXer+CmTbev26iQ375glBw+rNyWA9J+iX02 - nu/JwYp6Z/VLK8FY/5WWZicqRnG/4G96w6zHwkB5zD7rF44utw== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=5-indecorous_creamery-reply.gpg - Content-Length: - - '1120' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:8ea8d0a16663cc9b7d4f2e196ecd9d675ffef7f0f9d6b51294cfbba8ec99eb33 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:57 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/55fb95c1-cff3-430a-8c05-125c67c81a6a/replies/5f5707b7-ee1d-410f-94be-1ba8c1929264/download - response: - body: - string: !!binary | - hQIMAxGWEiPHDepYAQ//XWIBkXv/uh9NDRr86nlqZ2gJGssV96HBp10HVUbyyyEVcQkZ/evEOizB - 0gFUBwqBwuYAazPNgfgEVywXbAERoFR9Pul4AjVCkHqbrPOl62BSsKpLSAQIV7YP6AlJPiO3Pm0R - VeENWPAjmotBHfpjgVwiCkQeSyF8lCAveo7707ppJT2hCpxjJQhtt1WIyOQSE7dAaAnywUWbBkoB - HldRJiKQa1O8CsNm8ELPQaczYR41LZpPHZ+h1xLR15iGnXq630ZjDagxok3+aXqI20MemxYOvIc9 - nqxQLduSWS0HykifTX7wYcCGj0PCFqSSngNUaQTAjSQPOQjUurWV4T2/aT2ixT9waPaHut8jpQ6p - Lzc0Pe/C0+yB6YBJJxINovWHzGL0N7ZWuPVmkWgPWcOCPu5Cc3pn+cv5fuqoFuJs1/G1t6eIBfqI - BMw3FPbq1sa6QUPY6RDqpRE8+48cHpVHBHKl2wc1uL9WVUtZdFKAOz2bLu7CAnD1VmZvpszgq12/ - j5m2UwINjo4N78UbjClCMgbyzji2hM9q2B7qkTf5JFZtg3YbhNKgiJxDpTcYdMG92BQS3vYjxHiR - FzxGwbDuQofyqIhIVhlK/42NZUns3W6Sm+fkl03fR72xtBdGCdC6tGJn7lrys8B8JG/Dr3LsBqnr - A+KqQNu3Xr2ERHqrie+FAgwDw+fEwKIgGyoBD/4m3ypz6E9TqX/mm4Syc+KOtfb1XXWGlrI+YtxW - cZHPI+9iCA2XamMXFdYDYueb0CGB0bP5l1THXkYsN+kvuVzcdXZ2hY1U8tMhvU/UNirdau3Is2vJ - uOQ1cqvJHTkEXEZdTzZG66Q6ZjtQjr8OMH4XugC8TKIR0gq/xmxk+49fq3FT09d+bccvFJQil5SF - +OKqJQGVhKaUd3bF/ITS20psYNcR36QK/QDrCM1dp2s85wWe8j8cnVPscuJ0lbX0qey5tMUf74Yn - cT8qNeKhh+Z/6oOjBB+UtcN/c6okMAKbX0IoQjCskE/D6ldscXkYTx4wVp3CyzZMGwyh8sjDBPp2 - ilsccaHhybJkFx+qwx/R8AoLc9za7qlfU6BYvasGeY0LmU9DCsS+fMQjL/34rkq248h4mxee1rap - v9vipuGDkd8EJMZPkR6PDL8iIHW13xqDlTEAkhuD0fsFVxGxdXgUdvNrPHb3/X+c+BDCdP1OFO7S - 0SQOO7NijD9O3NhNuKBkW3FnCYHb6sbJ5XRsD6h4LbGe6KwH97xULC4jRVSIHssTl+Nozcv1Xml1 - 4AJbGtcpna3Fc3Arjjop8UNoDntuDfXEuRulX+Hckib/IrIGTqgoEHYCEd/RMhY0ZE2hT/7iQBaT - FMuOpyvlV+Mb6zjynz3qy63WKV/cIAT3LwrWOdJCAelNp8jPH79glm+vZoeaZwjztzVucJRxKxtN - CuvLf+ziRI9v1FiL5GT5LAPpr3jtZ+qi9j9rKKAtPKfINXiS/B7M - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=6-indecorous_creamery-reply.gpg - Content-Length: - - '1122' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:1342def77aa79e3babeb0b709cf3dce39e69a8e1e04ec0c6a41c8aca6a979600 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:57 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/replies/9bb8030a-8561-4a03-85dc-e921bd6a891c/download - response: - body: - string: !!binary | - hQIMA8XplUsUkq4fAQ//dI3ZLYYvp5nURcYqnL+N6qkdzdZ8SV8zxGd6wI7Oc0pUQy6Ri/Ap4gVy - 0fQGy+gA6QI599dDmRA5IxNV2GJ7D1KGkwCw9149ZGx3s1Qk9xDLN1+2xr6wbC8WnO7aMb3XPnzK - hEOpX+GIxK+PShiwR0TedX/M1ZybM2YNxuJn14/yO3tbr9nhBSujuQkSitQ7xdccdYiO3laJNjD1 - h1/aSUPz5yz77as0ctRoSwjl1+JY9O0RhclEKF8T7lIBms+uZwZ9b5yfQIlaMHd7iGT4HdIUMPjn - QWn2JmJ51BEa5G1Gpu6wEu5xT3fl6Z3Il3T3ARY96z9Ps2sCQg5FrTJ7U+RRj7yt2Xw1PF13DNpm - Sd2y6Qhpu3lFkM8cIzI+4O5mYL9Qe+9vy6B83vCtDKUZ9jqcZuGa5HD6f4Gzcu0FW1WAbCT02MAY - YTM8p/tyAoEIKgKcQxFmEhMFbaPOQ20TRXKb+x5sJGh1i5M4CmMQsGvczZrh13Zm5QIw9cIqc4de - uh4WrMsSHlGpdR+glbzRq7kCoofi3QOSrsTGrnaIPqPp4M3VNNJnR47yipKLFSGMI4T6zqHSTelW - ClhS4svd0qSPVK+DWD+XJ5lHrUDIzBM7FyGEkWAQpbqHIaE2fAN9QloAkcTPSO3A3/MdnYKHFLPC - BT+m30B2N7D1S7HC5geFAgwDw+fEwKIgGyoBEADBNF5oX0O6LpdpJAYuZpoZkVbZ6ZK0uc9gTh5N - CaoJNS2gHZtwhzqfgFzZVu9hERuUFvELXaeebv8zxNSRohUtIr0uDOWA9ZFJ+IrzaSBEfns28jkX - b8GsGeJQ3FPnvdp0LtOGAsrUGj02e71lJOx8qCfVgo1d4ZKxHpCSdC9+CoZbCxPE6a4TRCiE3Khu - /DDi96t2C5jNRHCIsfgwbaBB7sLeibkiIMhiKYGMz994UmA82XAHPdkIgXUsgju1UwxKfxk84Kwe - F1hybOfkpjAJ7kH/E5l5Udy7eEk5kz1M9TWr2UHSpY48x/enEOWYoAcC7f3tBKWak3WrxOhCjPjk - /7y1vSMKCLnsVkdNAJ6DTMpjQsv5aKuk8UPMTqw5oEl7JuFKcwdztXOgtsVXbe8t0rYTLMJlDa7w - 5Q5erJ5PdkQexpccw68Xswa85GZSUCIwqywrW4v5T3oemN8ZdZWuACFLBPvv6/JeRg+wEN4lk7qk - 7Q9FnjbY8a2Wn6ydCh81gAm6XQn5s+HH5FEVrJBbVrshDXZgdFIfLer2yyVOBOi8HnzYylxBgOHH - IRRlW5zV3c8bcPsX4doyiHXg6Rq8xs0vJRghqVRJXLYzsp2KG9h8gUvvX4F6I1o3zTE9RRI7jUVQ - sg81ViU4toOfaLcKuwpXKfy8tZR37+FZqWQSy9JSAdJ2DdIiaFHAX636/MO3AYocVMKsfQHHMmES - zPxveAOVrYp9wctgh3dNe7tJqFJZgObxmyKWdeLTmC3LE0P9d73Py9yfqmlZ8ADishAQToTzkQ== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=5-concrete_limerick-reply.gpg - Content-Length: - - '1138' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:be7131a49df1b7a26d0610a96294198e1b27d7f13c18fc7b420132e9604e878a - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:51 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/ae59153b-0871-411a-a72a-0f4c41a76ee0/replies/0a82f046-581c-49ef-9b51-ce5b73e45c1a/download - response: - body: - string: !!binary | - hQIMA8XplUsUkq4fAQ/9HcK9M4c7Tks2GRPrAJgP7c3FGgz8Q/2HPBNoc73Fu1vsFUy19Zk2UfKX - 5LpKqFvMvo9T+HZPscKkoYpru68WahEAyIvdWRXl1OP072usBa/pOel4MdsX0l+ShrjK5H860zp3 - shnbNAhmpeEJ2TNQmDNj6UQsJWTS6hMoxAWIxBbuScqUk5T9oNEL7BSxZQnBfsMt50EPf3F4Fcn4 - aFRwWZtQZYlJjTodr1QiPykSaN88+ipqB2WatT+zxwBDVhjZTDWLZeprizvV+Ezxk4HwkGVm4C3C - lGquJCjAKt6t392zDVd1jEy83ctiu9DFZ/RBuVt6ath47JpXXKYu9Pm+hwYOZ5jOlE1C6z+B4xWd - sEDpocvIUxt+8VZx7DGACGRzHbJ5NapObt2eX6sQgxyMOwmg+bYqo7DHfbyMdPLY4SE+mytI0/Z2 - mm3/6yOOnAEOl3+5/M7aUPH3qUy/4S63iJKQ2banBSD0yDNQ6I/0MnU31AysERrRCSdxOExq/9u0 - IqHhb0In7hX+6EM3mQSg+z0AvX/xHWcn24TeSjMv/9WMFcasm85Xb305FVFrRyeMPUDcrbwepp8G - J/pj7mldMCe+5I17pxnQ8sImFt/GZG8DqoVrR6K2s5s2DCKywizUjifHg6L1sM8gY8d80y50U6mR - Tr8WNtdIdVuANcufU26FAgwDw+fEwKIgGyoBD/9+mmWhGDd48AshmcJ2SiqkgYuYUdp10ujWVZNx - IN2o5monN2AXkTyLUH6h0f/5HtJEGkoqXzQUs/DysOIRu27QqMS4BjW3fWXfqcKlBXItYHdd+BBw - czdqXrEMxdFv4MiP8q796+keQsJizPInpyApvFz4j7n9oLyshNLU2z+QoDkhKir6q+kSoDkuySug - JS0qzkdP0zp1QF/IzmmdyOLbApIZpYCY/wJMxVrqeBijl6cwHV5O+PMw0415WRxNXZ6PzEGzMeX0 - zSgputz0Jx4f7wpRjS/jgcP66VHTAl0dAKtEY7FHPUS68/0tBhsLOYGv8AJA4evAeVPCWhj4zJH9 - dpTTJd8PDOapoQH/xBEvt6AN2WKXeDH52tl0QFdtmVDPYjbqo5zh/qctHKv0QdsDjZZXmpnTCrfq - nnLRagcPeW6YKyn8yhrP44VR6Gzt9CSN3HGPmjfy72vqnyB0rEdkYoSEZZ0hxTsZ3QMT0bZ7sDPA - XK19LW9BRzjZtlKSFGONuciDN5lR4tQntGacjMcOj/xGe65PmuL484mak/900Cx9jwrw1hdq+a9e - gpKDsc4KG9suXkiJrzEHQE+18kgRBvoMZTAbumECKOuHUgZ919F1GgV3No6XjQZ+botyN4mgSwJm - VIV18ep7w0SQF8Qb+BCo8mbS64+nXd4cQfwtktLAIwHCxqT2yTvD2UXrLQXoCIvFP8xJ6T92oCgn - sSzyBciKz7C4EQ6N9dKQSo2ZXHSRO81/LuBGhreMQnhYiV90OceTFJ+U0nFWh7smggqjZSlqflg/ - W5wcqd945LAnGlQPky0AQcOYl5cFa2cHE6FZNhs/hQL5CAIir9AosMeOz7A+msaijWWsnkfc8KAF - HIrk8/qi7WDKd3ni++4dUBP9+xWijpy6jHzD3DJgP30sXFCDAjlvz+4Qopz4wXTncY03ypkcEGjP - sGsGWkGeBwyOvdxwk02XXTWyFv6aFenv6dNoJ/Mv - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=6-concrete_limerick-reply.gpg - Content-Length: - - '1284' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:df33b47b1b077cad3b8ab00a5eecef38faf353be83387ca4ddafe193a8ee81f6 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:51 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/50c5fa95-eb69-49b6-8599-62b12cff7d7d/submissions/2281fccc-4cae-4228-a837-e6f3a3e1e6d2/download - response: - body: - string: !!binary | - hQIMA8PnxMCiIBsqAQ//VfnuIjbnRUrH1WRMvSak2SMigZymPdL6hvNluiuGz4hYbNIZqKWVjuzy - 3BNnWhvWpljKFy86NsonbdF29kuOIPePWLdXVe8mL4a3Kc3IY8T5JBWsvnkSl3TEaRGrlWsG5/ag - 4NkyBH45p070Rr57RqVcUBGe/ckzVhuiIOzmj3ujImMGG+ozo2kWPY2RfovqDtocUzywbh4fxtRD - lZQ5lgercImj8uvOaR0vbGzl67zg8HN4tz9U7QMxd37M2+PEBQoNILaRx2OQwyXEAjP89zEbqQmB - +N+I8WcHfvnj5V95JQ9DJP3LjOBYDb9fcesY5mu7E3yDzrd7OJkUhAimik7ImjkeVTnJx3IkNiRp - GutO8DunsgomolaehXlZrJ5dRU/SIISKcEPZlXc4sXpls+zS0S6d0hhwF8sgOKmxv55hWWe0+2Nu - nkXNUR3rxxKYyYf4Pv2VPJVxnr9+4u0MAAV7q3ztemLJNSAS8T2eRX3pkhKo3tRfDLvovSpqCIqT - ZMTSODjs+whuLDoR8DZuW+rGllZDu9OZO2V+UnODrH8ilbZ3wxt6Ryo6MR7wZbocbrMYNewtJFML - SS7I9xVzHmLDSfRePHo+kXa2qsD2nH7TQJ2H9VIyA21SvHVtDuqTjiZPSuypsuHldnpJbnrGQtX3 - CChqw5bh+aBLR5K8t1TShAGS5bRN7WaLcnaEqZfWFHTduPGNEOtpHZtVnxWrI/Khxwlm/HDmmuRV - I+CC5eQeIv1dQ889/JZNOq8z8EuofNes2mnw+fkEWdyFfllb55HBxwrtRYphlujUDTVy82+FfY2a - ozhTgY58FyjhaY3t8Y48vMHJ8j4BfsXkTHGGXGDPuLBg+Q== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=3-conjunctive_lavage-doc.gz.gpg - Content-Length: - - '661' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:1ae2759fd28879da3d3ba964ce8dfc13280583a08219127997508118eed6b4a5 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:09:00 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/replies/9df9083e-1ac1-4085-883d-8c9982b6ad79/download - response: - body: - string: !!binary | - hQIMA6YSKmjUcDXDAQ/7BrrIWGBja8P2KDQIoAT4IclJDo5po5P93oEFQpUnbOUGwkeLnZeY1EXP - DPthD6FUmgE4p+afTgeAJHa5p7aZ3cBunjGpx7CUwXXubZTEt6nl6xcENtfrgIzUG8SZDCDJcsZS - kXd0JMqxLswy0eCiQo+zDv5BOf5TT3P/RCCWI0MYWLSchTkdjyGeWJd5+SdPlSTHB54J+PGOipQ1 - 6FWWxpYA5/vYVWg+4vwFJt3RYqUITyWGi8RI5E5aXEhMs3bShrXZ1WLpjpJg34ybfNg+ZAYq9ava - Sxv/PR0NcZRaPAFz25DRZIB2IN0pbNOsr17nKEmOszuAfi65+VCBNGpuGtb1/B6VnBKZ2D1beUEJ - oVpYaSr/VU0eEv6YcsaqUfaGcNyzpipfqQ1aLYXyhdLzXYKlj2qUQpntMVvfa9tp/p+FX6CxyG2Z - vCyzC28sGaQfizjYeVqV1xxu2/Q2Yb087pQgq9R+JWNgy3uyDss3YrooACirO4/pYc8qWUda15Hp - xIqmgnuYUJ0/albmzwc1GGR2AFqYALnhmZodifqvhmfmICytmh8LQhEVVInVn3ma6EMcFd2p6z5K - a8Y8G0bN4c79iFK75bUg3sNvP7osGB427a6JicZu3uMGzl8zH+7UFtOVeV5zoPB/USoHBJVLwxbG - 3EphCCaYHpk6ER7DRz2FAgwDw+fEwKIgGyoBD/9rgU6OldLEAOLqLwSF1gq7bgBfFzYHiiJcsSyr - +XTWr58Po+7pbGwBwIbr7eOmqga+hvJEDUZxYRkd59fgrnKU0GB882ig0H95Uu3kdzYIG5g79KVA - UOsbHAjXPSpm+8w18OLxdaz/rYM6V1M+Td2+KnPPcdETMLRliFMOJvj1gAJmKXQNhStnkJ68nJNC - I21O3GcU0suoOXFTMtLSqpFZX6g0BXaK+WN3dw5RM68zZ+eFvanqfCCZwGUx4KjJCuxAVsUP9eaH - Jga5hBbRBdXNHcUlrMGJW7Ig0YMZW3Sao2Z75rObITzLimMdMWay9Qfgh91I8TKspFiOLYe3yvxW - oRemzwTeC6vQX8RjNzzHN1zqCS/7UDiHT8kMGfhldo0mmVAwf3Uwl9DHul+T8X0Ci2551E2KFUE7 - Muj9VXBs6+3Uo83RCKwo3HIHMlYIyvpoThmP/w2QFEYJc4wQfCDl3N2DjdLe1oRVwmi82oRn5/8O - 6HlJYoSG38NMgVXdGG3UMrlK5S4yZ+gWtXtXGpqCihc3pT1VzNs5wuZvmxlGkSDDWMKkHu74TaB4 - 7dwKsPhctAPlunVxgy0tjUUJvU86gkGy/Tk/DqKfPwDMwMbMuQD4MQuYuWgcoxp86TKKxkmjhZYq - b0uxys2dUyJqjaQ3SiPjRTM7PZrA9nl2S6cmENJeAYOuj+E7SpEkg0H98JvFb71VbMIMq7BWYGp4 - 8QwhQ2ljYD2T8K3TCBJ4Z0caYoI44kIFBmDBwva6DRjYEv5I8+SU8q/cXAcJkemGFs6ncohM4uuQ - eXikZTP4UDJRUg== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=5-consistent_synonym-reply.gpg - Content-Length: - - '1150' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:0065e475a3573a3aab789202cfec080705a8b07558bf68612591af3a10166942 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:49 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: GET - uri: http://localhost:8081/api/v1/sources/56d6777c-fdb6-474c-9d3b-0b7b43beabfa/replies/ba38afd6-aadf-48d1-a599-bd74601105d9/download - response: - body: - string: !!binary | - hQIMA6YSKmjUcDXDAQ/9FNU33HR0bX5ci79Lq1YwYMPu9QUmS1qviasV5DFtV/YIFaog+Ip30R+a - DUEPVCMQuOTfJd/zuX15bFh6BbkJ+fVfo9GsGW6NrgDIDnt7GKDmbcm64CVvtAf0sa5KaU8405mk - LseOtJAuKXxBm9vNRBHjwgxdl5zZprIhjAa/biJh03jy+BihB5uEF5gGqLVVIRFIZQz4jA1MsCXQ - 4EpGjQYCsrBqPzdKWLRhmfWZ7h6GiWHzoz0LYMwqTxQcMfcOYe5kOZ7yvRO71u/MXXn5WK6u4CC9 - PA8oh45bbJVdC6I/fRxcYh8RYwIhxnDl5/EtW1CEknCkNPp/GIlEvu2jAQGO/bK/paGoOyY7wAgV - 0q3aRGHRoUs+DLG+WQ+YFt5jN2P4JAiW01Zr8HLPl+cQdkQUlprP19ODTepGQm1lwK37oPHvQwtg - PdpFpJDUWFkbg4q0hpGTVk5HCr3/DgNHUk10Hae2lQpf6Q9P40E87cOwsiJrWsPMpL+g6V4rebqU - 2BPj+CrWpMgHe/zuy0cwX2lYj0Put+kBDoXJsDQopn4/Wc8aISmnxLMfpAv4kXA6x5KhvApuGZ3L - uMU63cb/m+5NKeGqpo1kZOG0cim8lApnqzFqwXjkbaoDL6W2yGsX0VZcugjvU9IFifAAoiLCs/eU - 28r9t+HevU3+fhAT1KWFAgwDw+fEwKIgGyoBD/9etXKoKImkUN7va98DeaW4fE/pqDUw+2vU7CVm - DkcR6ay5okyHbR6zwtjdW8EHscStZR7WA04e8YxwqkVSlVecDr7Oey/WaEqT730+4HRUI2QuMJYk - 48sqf5BlGd+vz7+hv0jRB4eeVPwRZm22o1252jrrbzwgvOncNKW+F25rOQEMrGo2VrweOwzjsUQh - Bk1HZGrXfxnyikH/mFQe4qZEKNbf/zu2dYz+9z4lX+G/yIrdn/bACQMulnl6UNQKOF6curDaysPb - BX1xqFTHjeCzQ2lQ73bjX3Zhc70Sww6MR6NQuz4Z8cJ9c2LCpbAT2JCfCdhukedjrS6SpeULveP9 - a5g3vQJevdnwPITGAz59Qsx7Uw5jv/cN/pAGb7RbzvQERWPJFKg/MDz2cCIQb4gga1uDyJTXzY8j - xXZ2h+n9RXac9YvpzlstyDg+9H02cbJn5z8euQ30CGKwD/Ydls7X+Q4v6QFTdZxJrQiIw+dBjOaH - Y4c5AgqYwq7eYCDlWEromT+nBfz8xOFo7/0Ea7iU7eWzvPt1z7X3i2rUOU85+m2lmgNxm1bvr/oO - hJpttyj0k5yv1nSEnwzgjC/HNImQLawyZhAFGM1NCn66Sk005EVPFppu2zodz/rMRdjTm2JliEBa - X4VmnwUtaEE6CqdFAViOFum7s/CFNIS5xENngNKjAZlQSzKpVecUBuO3nndeVxrdmd4B8n4wLiTo - 0OqNHOhmS4r5sIFdYmnNfmeK6Ksg/yS094ri3D9MeHHEjAXwrw8FAh37cyN73kdXW0sKtkY4VGIf - TDDwwx2bS/muPCZ3VfgTLHLuZrwPX6KFpkRyJyAX8UPeZwN312yqX3mcrtB60rPlAMtibq05KKSd - rqK/U9A1vzBorijE8RNFXihbW41PvA== - headers: - Cache-Control: - - public, max-age=43200 - Content-Disposition: - - attachment; filename=6-consistent_synonym-reply.gpg - Content-Length: - - '1219' - Content-Type: - - application/pgp-encrypted - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Etag: - - sha256:3a1d257181881c338f2dae2618c62d53f72da2e93789d25b032bcd6a72cc0257 - Expires: - - Thu, 20 Jan 2022 11:09:11 GMT - Last-Modified: - - Wed, 19 Jan 2022 23:08:49 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -- request: - body: '{"files": ["2281fccc-4cae-4228-a837-e6f3a3e1e6d2", "098a7d90-0ae4-47cf-a7a2-2afc00094a3b"], - "messages": ["4abcd4b4-3922-4ae0-ad97-9186f51e172c"], "replies": ["158dfd73-3cb3-4a6e-85b3-f37ae54e0802"]}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - Authorization: - - Token eyJhbGciOiJIUzI1NiIsImlhdCI6MTY0MjYzMzc0OSwiZXhwIjoxNjQyNjYyNTQ5fQ.eyJpZCI6MX0.6NIaLTlHC5UOUsp52Tzm0KESJzyOKe46QgHLSNrhpvo - Connection: - - keep-alive - Content-Length: - - '198' - Content-Type: - - application/json - User-Agent: - - python-requests/2.26.0 - method: POST - uri: http://localhost:8081/api/v1/seen - response: - body: - string: "{\n \"message\": \"resources marked seen\"\n}\n" - headers: - Content-Length: - - '41' - Content-Type: - - application/json - Date: - - Wed, 19 Jan 2022 23:09:11 GMT - Server: - - Werkzeug/0.16.0 Python/3.8.10 - status: - code: 200 - message: OK -version: 1 diff --git a/client/tests/functional/cassettes/test_export_wizard_dialog_device_already_unlocked.yaml b/client/tests/functional/cassettes/test_export_wizard_device_already_unlocked.yaml similarity index 100% rename from client/tests/functional/cassettes/test_export_wizard_dialog_device_already_unlocked.yaml rename to client/tests/functional/cassettes/test_export_wizard_device_already_unlocked.yaml diff --git a/client/tests/functional/cassettes/test_export_wizard_error.yaml b/client/tests/functional/cassettes/test_export_wizard_error.yaml new file mode 100644 index 000000000..41f610534 --- /dev/null +++ b/client/tests/functional/cassettes/test_export_wizard_error.yaml @@ -0,0 +1,1517 @@ +interactions: +- request: + body: '{"username": "journalist", "passphrase": "correct horse battery staple + profanity oil chewy", "one_time_code": "123456"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '119' + User-Agent: + - python-requests/2.31.0 + method: POST + uri: http://localhost:8081/api/v1/token + response: + body: + string: '{"expiration":"2023-12-07T23:04:49.173748Z","journalist_first_name":null,"journalist_last_name":null,"journalist_uuid":"9d2be057-360f-42d4-8145-26b31ea57d8a","token":"ImJHeTdHZEY5SEdHTmk1NnFFMzBhb1ZaWFYxdW1qam1ERjZTZVdCRnBPV0ki.ZXIzcQ.PxFGrGsa9ZW8AN4GcDpqmmI9oBY"} + + ' + headers: + Connection: + - close + Content-Length: + - '265' + Content-Type: + - application/json + Date: + - Thu, 07 Dec 2023 21:04:49 GMT + Server: + - Werkzeug/2.2.3 Python/3.8.10 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token ImJHeTdHZEY5SEdHTmk1NnFFMzBhb1ZaWFYxdW1qam1ERjZTZVdCRnBPV0ki.ZXIzcQ.PxFGrGsa9ZW8AN4GcDpqmmI9oBY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.31.0 + method: GET + uri: http://localhost:8081/api/v1/users + response: + body: + string: '{"users":[{"first_name":null,"last_name":null,"username":"journalist","uuid":"9d2be057-360f-42d4-8145-26b31ea57d8a"},{"first_name":null,"last_name":null,"username":"dellsberg","uuid":"f3fbd8f2-7109-4beb-9387-b18b373d5409"},{"first_name":null,"last_name":null,"username":"deleted","uuid":"b32161b8-eb1f-40e3-b072-9ccc507dfd61"}]} + + ' + headers: + Connection: + - close + Content-Length: + - '329' + Content-Type: + - application/json + Date: + - Thu, 07 Dec 2023 21:04:49 GMT + Server: + - Werkzeug/2.2.3 Python/3.8.10 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Token ImJHeTdHZEY5SEdHTmk1NnFFMzBhb1ZaWFYxdW1qam1ERjZTZVdCRnBPV0ki.ZXIzcQ.PxFGrGsa9ZW8AN4GcDpqmmI9oBY + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.31.0 + method: GET + uri: http://localhost:8081/api/v1/sources + response: + body: + string: '{"sources":[{"add_star_url":"/api/v1/sources/745e22fd-1cd1-45ee-91cf-dbaada945716/add_star","interaction_count":6,"is_flagged":false,"is_starred":false,"journalist_designation":"tuberous + flutter","key":{"fingerprint":"447AC4EFBB460F5A347B2C606C6B11C41940F8C9","public":"-----BEGIN + PGP PUBLIC KEY BLOCK-----\nComment: 447A C4EF BB46 0F5A 347B 2C60 6C6B 11C4 + 1940 F8C9\nComment: Source Key Union[Volume, MountedVolume]: logger.info("No USB devices found") raise ExportException(sdstatus=Status.NO_DEVICE_DETECTED) elif len(targets) > 1: - logger.error( - "Too many possibilities! Detach a storage device before continuing." - ) + logger.error("Too many USB devices! Detach a device before continuing.") raise ExportException(sdstatus=Status.MULTI_DEVICE_DETECTED) # lsblk -o NAME,RM,RO,TYPE,MOUNTPOINT,FSTYPE --json @@ -213,8 +212,8 @@ def _get_supported_volume( def _is_it_veracrypt(self, volume: Volume) -> EncryptionScheme: """ Helper. Best-effort detection of unlocked VeraCrypt drives. - Udisks2 requires the flag file /etc/udisks2/tcrypt.conf to - enable VC detection, which we will ship with the `securedrop-export` package. + udisks2 requires the flag file /etc/udisks2/tcrypt.conf to + enable VeraCrypt drive detection, which we ship with this package. """ try: info = subprocess.check_output( @@ -222,7 +221,7 @@ def _is_it_veracrypt(self, volume: Volume) -> EncryptionScheme: "udisksctl", "info", "--block-device", - f"{volume.device_name}", + quote(volume.device_name), ] ).decode("utf-8") if "IdType: crypto_TCRYPT\n" in info: @@ -251,9 +250,10 @@ def unlock_volume(self, volume: Volume, encryption_key: str) -> MountedVolume: in the list of results to check for. (See https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect) """ - logger.debug("Unlocking volume {}".format(volume.device_name)) + logger.debug("Unlocking volume {}".format(quote(volume.device_name))) - command = f"udisksctl unlock --block-device {volume.device_name}" + command = "udisksctl" + args = ["unlock", "--block-device", quote(volume.device_name)] # pexpect allows for a match list that contains pexpect.EOF and pexpect.TIMEOUT # as well as string/regex matches: @@ -274,7 +274,7 @@ def unlock_volume(self, volume: Volume, encryption_key: str) -> MountedVolume: ] # type: PexpectList unlock_error = Status.ERROR_UNLOCK_GENERIC - child = pexpect.spawn(command) + child = pexpect.spawn(command, args) index = child.expect(prompt) if index != 0: logger.error("Did not receive disk unlock prompt") @@ -284,14 +284,14 @@ def unlock_volume(self, volume: Volume, encryption_key: str) -> MountedVolume: child.sendline(encryption_key) index = child.expect(expected) if index == 0 or index == 1: - # We know what format the string is in. # Pexpect includes a re.Match object at `child.match`, but this freaks mypy out: # see https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect + # We know what format the results are in dm_name = child.match.group(1).decode("utf-8").strip() # type: ignore logger.debug(f"Device is unlocked as {dm_name}") child.close() - if (child.exitstatus) not in (0, 1): + if child.exitstatus is not None and child.exitstatus not in (0, 1): logger.warning(f"pexpect: child exited with {child.exitstatus}") # dm_name format is /dev/dm-X @@ -323,17 +323,21 @@ def _mount_volume(self, volume: Volume, full_unlocked_name: str) -> MountedVolum https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect) """ - info = f"udisksctl info --block-device {volume.device_name}" + info_cmd = "udisksctl" + info_args = ["info", "--block-device", quote(volume.device_name)] + # The terminal output has colours and other formatting. A match is anything + # that includes our device identified as PreferredDevice on one line # \x1b[37mPreferredDevice:\x1b[0m /dev/sdaX\r\n expected_info = [ - f"PreferredDevice:[\t+]{volume.device_name}", + f"PreferredDevice:.*[^\r\n]{volume.device_name}", "Error looking up object for device", pexpect.EOF, pexpect.TIMEOUT, ] # type: PexpectList max_retries = 3 - mount = f"udisksctl mount --block-device {full_unlocked_name}" + mount_cmd = "udisksctl" + mount_args = ["mount", "--block-device", quote(full_unlocked_name)] # We can't pass {full_unlocked_name} in the match statement since even if we # pass in /dev/mapper/xxx, udisks2 may refer to the disk as /dev/dm-X. @@ -352,47 +356,39 @@ def _mount_volume(self, volume: Volume, full_unlocked_name: str) -> MountedVolum f"(unlocked as {full_unlocked_name})" ) for _ in range(max_retries): - child = pexpect.spawn(info) + child = pexpect.spawn(info_cmd, info_args) index = child.expect(expected_info) - logger.debug( - f"Results from udisks info: {volume.device_name}, " - f"before: {child.before}, after: {child.after}" - ) child.close() if index != 0: - logger.debug( - f"udisks can't identify {volume.device_name}, retrying..." - ) + logger.debug(f"udisks can't identify {volume.device_name}, retrying...") time.sleep(0.5) else: logger.debug(f"udisks found {volume.device_name}") break logger.info(f"Mount {full_unlocked_name} using udisksctl") - child = pexpect.spawn(mount) + child = pexpect.spawn(mount_cmd, mount_args) index = child.expect(expected_mount) - logger.debug( - f"child: {str(child.match)}, before: {child.before}, after: {child.after}" - ) - if index == 0: # As above, we know the format. # Per https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.expect, # `child.match` is a re.Match object mountpoint = child.match.group(1).decode("utf-8").strip() # type: ignore - logger.debug(f"Successfully mounted device at {mountpoint}") + logger.info(f"Successfully mounted device at {mountpoint}") elif index == 1: # Use udisks unlocked name + logger.debug("Already mounted, get unlocked_name and mountpoint") full_unlocked_name = child.match.group(1).decode("utf-8").strip() # type: ignore mountpoint = child.match.group(2).decode("utf-8").strip() # type: ignore - logger.debug(f"Device already mounted at {mountpoint}") + logger.info(f"Device {full_unlocked_name} already mounted at {mountpoint}") elif index == 2: logger.debug("Device is not ready") + logger.debug("Close pexpect process") child.close() if mountpoint: @@ -409,8 +405,8 @@ def _mount_volume(self, volume: Volume, full_unlocked_name: str) -> MountedVolum def write_data_to_device( self, device: MountedVolume, - submission_tmpdir: str, - submission_target_dirname: str, + archive_tmpdir: str, + archive_target_dirname: str, ): """ Move files to drive (overwrites files with same filename) and unmount drive. @@ -423,16 +419,14 @@ def write_data_to_device( # Flag to pass to cleanup method is_error = False - target_path = os.path.join(device.mountpoint, submission_target_dirname) + target_path = os.path.join(device.mountpoint, archive_target_dirname) subprocess.check_call(["mkdir", target_path]) - export_data = os.path.join(submission_tmpdir, "export_data/") - logger.debug("Copying file to {}".format(submission_target_dirname)) + export_data = os.path.join(archive_tmpdir, "export_data/") + logger.debug("Copying file to {}".format(archive_target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) - logger.info( - "File copied successfully to {}".format(submission_target_dirname) - ) + logger.info("File copied successfully to {}".format(archive_target_dirname)) except (subprocess.CalledProcessError, OSError) as ex: logger.error(ex) @@ -442,12 +436,12 @@ def write_data_to_device( raise ExportException(sdstatus=Status.ERROR_EXPORT) from ex finally: - self.cleanup(device, submission_tmpdir, is_error) + self.cleanup(device, archive_tmpdir, is_error) def cleanup( self, volume: MountedVolume, - submission_tmpdir: str, + archive_tmpdir: str, is_error: bool = False, should_close_volume: bool = True, ): @@ -465,7 +459,7 @@ def cleanup( logger.debug("Syncing filesystems") try: subprocess.check_call(["sync"]) - self._remove_temp_directory(submission_tmpdir) + self._remove_temp_directory(archive_tmpdir) # Future configurable option if should_close_volume: @@ -479,43 +473,44 @@ def _close_volume(self, mv: MountedVolume) -> Volume: """ Unmount and close volume. """ - if os.path.exists(mv.mountpoint): - logger.debug(f"Unmounting drive {mv.unlocked_name} from {mv.mountpoint}") - try: - subprocess.check_call( - [ - "udisksctl", - "unmount", - "--block-device", - f"{mv.unlocked_name}", - ] - ) - - except subprocess.CalledProcessError as ex: - logger.error(ex) - logger.error("Error unmounting device") - - raise ExportException(sdstatus=Status.ERROR_UNMOUNT_VOLUME_BUSY) from ex - else: - logger.info("Mountpoint does not exist; volume was already unmounted") - - if os.path.exists(f"{mv.unlocked_name}"): - logger.debug(f"Closing drive {mv.device_name}") - try: - subprocess.check_call( - [ - "udisksctl", - "lock", - "--block-device", - f"{mv.device_name}", - ] - ) - - except subprocess.CalledProcessError as ex: - logger.error("Error closing device") - raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex - else: - logger.info("Mapped entry does not exist; volume was already closed") + logger.debug(f"Unmounting drive {mv.unlocked_name} from {mv.mountpoint}") + try: + subprocess.check_call( + [ + "udisksctl", + "unmount", + "--block-device", + quote(mv.unlocked_name), + ], + # Redirect stderr/stdout to avoid broken pipe when subprocess terminates, + # which results in qrexec attempting to parse error lines written to stderr + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + except subprocess.CalledProcessError as ex: + logger.error(ex) + logger.error("Error unmounting device") + + raise ExportException(sdstatus=Status.ERROR_UNMOUNT_VOLUME_BUSY) from ex + + logger.debug(f"Closing drive {mv.device_name}") + try: + subprocess.check_call( + [ + "udisksctl", + "lock", + "--block-device", + quote(mv.device_name), + ], + # Redirect stderr/stdout to avoid broken pipe when subprocess terminates + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + except subprocess.CalledProcessError as ex: + logger.error("Error closing device") + raise ExportException(sdstatus=Status.ERROR_EXPORT_CLEANUP) from ex return Volume( device_name=f"{_DEV_PREFIX}{mv.device_name}", diff --git a/export/securedrop_export/disk/service.py b/export/securedrop_export/disk/service.py index 6a7b7cdfd..9a8034ee5 100644 --- a/export/securedrop_export/disk/service.py +++ b/export/securedrop_export/disk/service.py @@ -1,10 +1,11 @@ import logging +from securedrop_export.archive import Archive +from securedrop_export.exceptions import ExportException + from .cli import CLI from .status import Status from .volume import MountedVolume, Volume -from securedrop_export.archive import Archive -from securedrop_export.exceptions import ExportException logger = logging.getLogger(__name__) diff --git a/export/securedrop_export/disk/status.py b/export/securedrop_export/disk/status.py index ca04ccaef..59f868672 100644 --- a/export/securedrop_export/disk/status.py +++ b/export/securedrop_export/disk/status.py @@ -8,15 +8,17 @@ class Status(BaseStatus): "INVALID_DEVICE_DETECTED" # Not encrypted, or partitions too many/too nested ) - MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Not currently supported + MULTI_DEVICE_DETECTED = ( + "MULTI_DEVICE_DETECTED" # Multiple devices are not currently supported + ) DEVICE_LOCKED = "DEVICE_LOCKED" # One valid device detected, and it's locked DEVICE_WRITABLE = ( "DEVICE_WRITABLE" # One valid device detected, and it's unlocked (and mounted) ) - ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" # Bad passphrase (LUKS) - ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" # May not be used + ERROR_UNLOCK_LUKS = "ERROR_UNLOCK_LUKS" # Bad LUKS passphrase + ERROR_UNLOCK_GENERIC = "ERROR_UNLOCK_GENERIC" # Other error during unlocking ERROR_MOUNT = "ERROR_MOUNT" # Unlocked but not mounted SUCCESS_EXPORT = "SUCCESS_EXPORT" diff --git a/export/securedrop_export/main.py b/export/securedrop_export/main.py index d04787c3b..812203f98 100755 --- a/export/securedrop_export/main.py +++ b/export/securedrop_export/main.py @@ -1,22 +1,20 @@ import contextlib import io +import logging import os -import shutil import platform -import logging +import shutil import sys +from logging.handlers import SysLogHandler, TimedRotatingFileHandler +from securedrop_export import __version__ from securedrop_export.archive import Archive, Metadata from securedrop_export.command import Command -from securedrop_export.status import BaseStatus from securedrop_export.directory import safe_mkdir -from securedrop_export.exceptions import ExportException - from securedrop_export.disk import Service as ExportService +from securedrop_export.exceptions import ExportException from securedrop_export.print import Service as PrintService - -from logging.handlers import TimedRotatingFileHandler, SysLogHandler -from securedrop_export import __version__ +from securedrop_export.status import BaseStatus DEFAULT_HOME = os.path.join(os.path.expanduser("~"), ".securedrop_export") LOG_DIR_NAME = "logs" @@ -46,7 +44,7 @@ def entrypoint(): The program is called with the archive name as the first argument. """ - status, submission = None, None + status, archive = None, None try: _configure_logging() @@ -62,20 +60,20 @@ def entrypoint(): else: logger.debug("Extract tarball") - submission = Archive(data_path).extract_tarball() + archive = Archive(data_path).extract_tarball() logger.debug("Validate metadata") - metadata = Metadata(submission.tmpdir).validate() + metadata = Metadata(archive.tmpdir).validate() logger.info("Archive extraction and metadata validation successful") # If all we're doing is starting the vm, we're done; otherwise, # run the appropriate print or export routine if metadata.command is not Command.START_VM: - submission.set_metadata(metadata) + archive.set_metadata(metadata) logger.info(f"Start {metadata.command.value} service") - status = _start_service(submission) + status = _start_service(archive) logger.info(f"Status: {status.value}") - # Gotta catch'em all. A nonzero exit status will cause other programs + # A nonzero exit status will cause other programs # to try to handle the files, which we don't want. except Exception as ex: logger.error(ex) @@ -87,7 +85,7 @@ def entrypoint(): status = Status.ERROR_GENERIC finally: - _exit_gracefully(submission, status) + _exit_gracefully(archive, status) def _configure_logging(): @@ -130,34 +128,33 @@ def _configure_logging(): raise ExportException(sdstatus=Status.ERROR_LOGGING) from ex -def _start_service(submission: Archive) -> BaseStatus: +def _start_service(archive: Archive) -> BaseStatus: """ Start print or export service. """ # Print Routines - if submission.command is Command.PRINT: - return PrintService(submission).print() - elif submission.command is Command.PRINTER_PREFLIGHT: - return PrintService(submission).printer_preflight() - elif submission.command is Command.PRINTER_TEST: - return PrintService(submission).printer_test() + if archive.command is Command.PRINT: + return PrintService(archive).print() + elif archive.command is Command.PRINTER_PREFLIGHT: + return PrintService(archive).printer_preflight() + elif archive.command is Command.PRINTER_TEST: + return PrintService(archive).printer_test() # Export routines - elif submission.command is Command.EXPORT: - return ExportService(submission).export() + elif archive.command is Command.EXPORT: + return ExportService(archive).export() elif ( - submission.command is Command.CHECK_USBS - or submission.command is Command.CHECK_VOLUME + archive.command is Command.CHECK_USBS or archive.command is Command.CHECK_VOLUME ): - return ExportService(submission).scan_all_devices() + return ExportService(archive).scan_all_devices() # Unreachable raise ExportException( - f"unreachable: unknown submission.command value: {submission.command}" + f"unreachable: unknown submission.command value: {archive.command}" ) -def _exit_gracefully(submission: Archive, status: BaseStatus): +def _exit_gracefully(archive: Archive, status: BaseStatus): """ Write status code, ensure file cleanup, and exit with return code 0. Non-zero exit values will cause the system to try alternative @@ -165,8 +162,8 @@ def _exit_gracefully(submission: Archive, status: BaseStatus): """ try: # If the file archive was extracted, delete before returning - if submission and os.path.isdir(submission.tmpdir): - shutil.rmtree(submission.tmpdir) + if archive and os.path.isdir(archive.tmpdir): + shutil.rmtree(archive.tmpdir) # Do this after deletion to avoid giving the client two error messages in case of the # block above failing _write_status(status) diff --git a/export/securedrop_export/print/service.py b/export/securedrop_export/print/service.py index dbff034bf..0583346c1 100644 --- a/export/securedrop_export/print/service.py +++ b/export/securedrop_export/print/service.py @@ -4,7 +4,8 @@ import subprocess import time -from securedrop_export.exceptions import handler, TimeoutException, ExportException +from securedrop_export.exceptions import ExportException, TimeoutException, handler + from .status import Status logger = logging.getLogger(__name__) @@ -32,7 +33,7 @@ def __init__(self, submission, printer_timeout_seconds=PRINTER_WAIT_TIMEOUT): self.printer_name = self.PRINTER_NAME self.printer_wait_timeout = printer_timeout_seconds # Override during testing - def print(self): + def print(self) -> Status: """ Routine to print all files. Throws ExportException if an error is encountered. @@ -42,9 +43,9 @@ def print(self): self._print_all_files() # When client can accept new print statuses, we will return # a success status here - # return Status.PRINT_SUCCESS + return Status.PRINT_SUCCESS - def printer_preflight(self): + def printer_preflight(self) -> Status: """ Routine to perform preflight printer testing. @@ -54,9 +55,9 @@ def printer_preflight(self): self._check_printer_setup() # When client can accept new print statuses, we will return # a success status here - # return Status.PREFLIGHT_SUCCESS + return Status.PREFLIGHT_SUCCESS - def printer_test(self): + def printer_test(self) -> Status: """ Routine to print a test page. @@ -67,7 +68,7 @@ def printer_test(self): self._print_test_page() # When client can accept new print statuses, we will return # a success status here - # return Status.TEST_SUCCESS + return Status.PRINT_TEST_PAGE_SUCCESS def _wait_for_print(self): """ diff --git a/export/securedrop_export/print/status.py b/export/securedrop_export/print/status.py index 116316a46..e96d813be 100644 --- a/export/securedrop_export/print/status.py +++ b/export/securedrop_export/print/status.py @@ -15,7 +15,7 @@ class Status(BaseStatus): # New PREFLIGHT_SUCCESS = "PRINTER_PREFLIGHT_SUCCESS" - TEST_SUCCESS = "PRINTER_TEST_SUCCESS" + PRINT_TEST_PAGE_SUCCESS = "PRINTER_TEST_SUCCESS" PRINT_SUCCESS = "PRINTER_SUCCESS" ERROR_UNKNOWN = "ERROR_GENERIC" # Unknown printer error, backwards-compatible diff --git a/export/tests/disk/test_cli.py b/export/tests/disk/test_cli.py index 9b6b3cb77..7d0950eb4 100644 --- a/export/tests/disk/test_cli.py +++ b/export/tests/disk/test_cli.py @@ -1,34 +1,33 @@ -import pytest +import re +import subprocess from unittest import mock -import subprocess -import re +import pytest +from securedrop_export.archive import Archive from securedrop_export.disk.cli import CLI -from securedrop_export.disk.volume import EncryptionScheme, Volume, MountedVolume -from securedrop_export.exceptions import ExportException from securedrop_export.disk.status import Status - -from securedrop_export.archive import Archive +from securedrop_export.disk.volume import EncryptionScheme, MountedVolume, Volume +from securedrop_export.exceptions import ExportException # Sample lsblk and udisk inputs for testing the parsing of different device conditions from ..lsblk_sample import ( - UDISKS_STATUS_MULTI_CONNECTED, - UDISKS_STATUS_ONE_DEVICE_CONNECTED, - UDISKS_STATUS_NOTHING_CONNECTED, - ONE_DEVICE_LUKS_UNMOUNTED, - ONE_DEVICE_VC_UNLOCKED, - ERROR_ONE_DEVICE_LUKS_MOUNTED_MULTI_UNKNOWN_AVAILABLE, + ERROR_DEVICE_MULTI_ENC_PARTITION, ERROR_NO_SUPPORTED_DEVICE, + ERROR_ONE_DEVICE_LUKS_MOUNTED_MULTI_UNKNOWN_AVAILABLE, ERROR_UNENCRYPTED_DEVICE_MOUNTED, - ERROR_DEVICE_MULTI_ENC_PARTITION, + ONE_DEVICE_LUKS_UNMOUNTED, + ONE_DEVICE_VC_UNLOCKED, + SINGLE_DEVICE_ERROR_MOUNTED_PARTITION_NOT_ENCRYPTED, + SINGLE_DEVICE_ERROR_PARTITIONS_TOO_NESTED, SINGLE_DEVICE_LOCKED, - SINGLE_PART_LUKS_WRITABLE, SINGLE_PART_LUKS_UNLOCKED_UNMOUNTED, + SINGLE_PART_LUKS_WRITABLE, SINGLE_PART_UNLOCKED_VC_UNMOUNTED, - SINGLE_DEVICE_ERROR_PARTITIONS_TOO_NESTED, - SINGLE_DEVICE_ERROR_MOUNTED_PARTITION_NOT_ENCRYPTED, SINGLE_PART_VC_WRITABLE, + UDISKS_STATUS_MULTI_CONNECTED, + UDISKS_STATUS_NOTHING_CONNECTED, + UDISKS_STATUS_ONE_DEVICE_CONNECTED, ) _PRETEND_LUKS_ID = "/dev/mapper/luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094" @@ -153,7 +152,12 @@ def test_get_volume_empty_udisks_does_not_keep_checking(self, mock_sp, mock_gsv) mock_gsv.assert_not_called() @pytest.mark.parametrize("input", supported_volumes_no_mount_required) - def test__get_supported_volume_success_no_mount(self, input): + @mock.patch("subprocess.check_output") + def test__get_supported_volume_success_no_mount(self, mock_sp, input): + # mock subprocess results on the _is_it_veracrypt method + mock_sp.return_value = "IdType: crypto_TCRYPT\n".encode( + "utf-8" + ) vol = self.cli._get_supported_volume(input) assert vol diff --git a/export/tests/disk/test_service.py b/export/tests/disk/test_service.py index 3b52fe985..66943f481 100644 --- a/export/tests/disk/test_service.py +++ b/export/tests/disk/test_service.py @@ -1,13 +1,13 @@ -from unittest import mock import os import tempfile +from unittest import mock -from securedrop_export.exceptions import ExportException -from securedrop_export.disk.status import Status -from securedrop_export.disk.volume import Volume, MountedVolume, EncryptionScheme from securedrop_export.archive import Archive, Metadata -from securedrop_export.disk.service import Service from securedrop_export.disk.cli import CLI +from securedrop_export.disk.service import Service +from securedrop_export.disk.status import Status +from securedrop_export.disk.volume import EncryptionScheme, MountedVolume, Volume +from securedrop_export.exceptions import ExportException SAMPLE_OUTPUT_USB = "/dev/sda" SAMPLE_OUTPUT_USB_PARTITIONED = "/dev/sda1" diff --git a/export/tests/print/test_service.py b/export/tests/print/test_service.py index cf5c6ca1a..46bf6dc82 100644 --- a/export/tests/print/test_service.py +++ b/export/tests/print/test_service.py @@ -1,14 +1,13 @@ -import pytest - -from unittest import mock import os import subprocess from subprocess import CalledProcessError +from unittest import mock -from securedrop_export.directory import safe_mkdir +import pytest -from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive +from securedrop_export.directory import safe_mkdir +from securedrop_export.exceptions import ExportException from securedrop_export.print.service import Service from securedrop_export.print.status import Status @@ -187,7 +186,7 @@ def test_setup_printer_error(self, mocker): def test_safe_check_call(self): # This works, since `ls` is a valid comand - self.service.safe_check_call(["ls"], Status.TEST_SUCCESS) + self.service.safe_check_call(["ls"], Status.PRINT_TEST_PAGE_SUCCESS) def test_safe_check_call_invalid_call(self): with pytest.raises(ExportException) as ex: @@ -198,7 +197,7 @@ def test_safe_check_call_invalid_call(self): def test_safe_check_call_write_to_stderr_and_ignore_error(self): self.service.safe_check_call( ["python3", "-c", "import sys;sys.stderr.write('hello')"], - error_status=Status.TEST_SUCCESS, + error_status=Status.PRINT_TEST_PAGE_SUCCESS, ignore_stderr_startswith=b"hello", ) @@ -390,9 +389,11 @@ def test_safe_check_call_has_error_in_stderr(self): mock.patch("subprocess.run") with mock.patch("subprocess.run"), pytest.raises(ExportException) as ex: - self.service.safe_check_call(command="ls", error_status=Status.TEST_SUCCESS) + self.service.safe_check_call( + command="ls", error_status=Status.PRINT_TEST_PAGE_SUCCESS + ) - assert ex.value.sdstatus is Status.TEST_SUCCESS + assert ex.value.sdstatus is Status.PRINT_TEST_PAGE_SUCCESS @mock.patch("securedrop_export.print.service.time.sleep", return_value=None) @mock.patch( diff --git a/export/tests/test_archive.py b/export/tests/test_archive.py index 37510f0c8..c1ae85fb2 100644 --- a/export/tests/test_archive.py +++ b/export/tests/test_archive.py @@ -1,16 +1,15 @@ +import json import os import subprocess # noqa: F401 +import tarfile import tempfile - +from io import BytesIO from unittest import mock -import json import pytest -import tarfile -from io import BytesIO -from securedrop_export.exceptions import ExportException from securedrop_export.archive import Archive, Metadata, Status +from securedrop_export.exceptions import ExportException def test_extract_tarball(): diff --git a/export/tests/test_directory.py b/export/tests/test_directory.py index b0857f59c..bd81a66d8 100644 --- a/export/tests/test_directory.py +++ b/export/tests/test_directory.py @@ -1,9 +1,10 @@ -import pytest import os -import tempfile import shutil - +import tempfile from pathlib import Path + +import pytest + from securedrop_export import directory diff --git a/export/tests/test_exceptions.py b/export/tests/test_exceptions.py index 71af41143..272f58645 100644 --- a/export/tests/test_exceptions.py +++ b/export/tests/test_exceptions.py @@ -1,7 +1,8 @@ -import pytest import signal -from securedrop_export.exceptions import handler, TimeoutException +import pytest + +from securedrop_export.exceptions import TimeoutException, handler def test_handler(): diff --git a/export/tests/test_main.py b/export/tests/test_main.py index ebad33eff..dd1306a85 100644 --- a/export/tests/test_main.py +++ b/export/tests/test_main.py @@ -1,22 +1,23 @@ -import pytest -from unittest import mock import shutil - from pathlib import Path -from securedrop_export.archive import Archive, Metadata, Status as ArchiveStatus -from securedrop_export.status import BaseStatus +from unittest import mock + +import pytest + +from securedrop_export.archive import Archive, Metadata +from securedrop_export.archive import Status as ArchiveStatus from securedrop_export.command import Command -from securedrop_export.exceptions import ExportException from securedrop_export.disk.status import Status as ExportStatus - +from securedrop_export.exceptions import ExportException from securedrop_export.main import ( Status, - entrypoint, + _configure_logging, _exit_gracefully, - _write_status, _start_service, - _configure_logging, + _write_status, + entrypoint, ) +from securedrop_export.status import BaseStatus _PRINT_SAMPLE_ARCHIVE = "sample_print.sd-export" _EXPORT_SAMPLE_ARCHIVE = "sample_export.sd-export" From 0367a08c66ab01619be951930d7e3db0ffb9768d Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 13 Feb 2024 21:03:21 -0500 Subject: [PATCH 665/751] Update debian rules to require exact replacement of /etc/udisks2/tcrypt.conf file. Update Export README to include new status values. Include VeraCrypt unlock instructions in InsertUSBPage. Extract new dialog strings for localization. --- .../export/export_wizard_constants.py | 1 + .../conversation/export/export_wizard_page.py | 2 + client/securedrop_client/locale/messages.pot | 7 +--- debian/rules | 5 ++- export/README.md | 42 ++++++++++--------- 5 files changed, 32 insertions(+), 25 deletions(-) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py index 546563d50..2c92da9f3 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py @@ -30,6 +30,7 @@ class Pages(IntEnum): ), ExportStatus.INVALID_DEVICE_DETECTED: _( "Either the drive is not encrypted or there is something else wrong with it." + "
" "If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." ), ExportStatus.DEVICE_WRITABLE: _("The device is ready for export."), diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_page.py b/client/securedrop_client/gui/conversation/export/export_wizard_page.py index 983bbd551..e83ecb1bd 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_page.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_page.py @@ -334,6 +334,8 @@ def __init__(self, export: Export, summary: str) -> None: body = _( "Please insert one of the export drives provisioned specifically " "for the SecureDrop Workstation." + "
" + "If you're using a VeraCrypt drive, unlock it manually before proceeding." ) super().__init__(export, header=header, body=body) diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index d7d99c378..0155f5cb1 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -276,16 +276,13 @@ msgstr "" msgid "BACK" msgstr "" -msgid "Export {}" -msgstr "" - msgid "No device detected" msgstr "" msgid "Too many USB devices detected; please insert one supported device." msgstr "" -msgid "Either the drive is not encrypted or there is something else wrong with it.If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." msgstr "" msgid "The device is ready for export." @@ -333,7 +330,7 @@ msgstr "" msgid "Export Failed" msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." diff --git a/debian/rules b/debian/rules index 88d2cead3..535ba6833 100755 --- a/debian/rules +++ b/debian/rules @@ -19,7 +19,10 @@ override_dh_strip_nondeterminism: # Override debhelper's auto-generated files in `/etc/` # to force an exact replacement of the files we are modifying -# there (specifically, `/etc/apt/trusted.gpg.d/securedrop-keyring.gpg`). +# there (specifically, `/etc/apt/trusted.gpg.d/securedrop-keyring.gpg` +# for the keyring package and `/etc/udisks2/tcrypt.conf` for the +# securedrop-export package). override_dh_installdeb: dh_installdeb cat /dev/null > ${CURDIR}/debian/securedrop-keyring/DEBIAN/conffiles + cat /dev/null > ${CURDIR}/debian/securedrop-export/DEBIAN/conffiles diff --git a/export/README.md b/export/README.md index 796bcd068..7c66cc72f 100644 --- a/export/README.md +++ b/export/README.md @@ -86,34 +86,38 @@ For all device types (described in detail below), the following standard error t The supported device types for export are as follows, including the possible errors specific to that device type: -1. `disk-test` : Preflight check that probes for USB connected devices, that returns: - - `DEVICE_WRITABLE` if a supported USB device is attached and unlocked - - `DEVICE_LOCKED` if a supported drive is inserted but locked (a LUKS drive, since locked Veracrypt detection is not supported) +1. `disk-test`: Preflight check that probes for USB connected devices, that returns: - `NO_DEVICE_DETECTED`, `MULTI_DEVICE_DETECTED`: wrong number of inserted USB drives - - `INVALID_DEVICE_DETECTED`: Wrong number of partitions, unsupported encryption scheme, etc - - `UNKNOWN_DEVICE_DETECTED`: (Future use) this is what a locked drive that could be Veracrypt would return + - `INVALID_DEVICE_DETECTED`: Wrong number of partitions, unsupported encryption scheme, etc. + Note: locked VeraCrypt drives also return this status, and a hint is shown to the user that they must + manually unlock such drives before proceeding. + - `DEVICE_LOCKED` if a supported drive is inserted but locked (a LUKS drive, since locked Veracrypt detection is not supported) + - `DEVICE_WRITABLE` if a supported USB device is attached and unlocked. (Only used for Preflight check) - `DEVICE_ERROR`: A problem was encountered and device state cannot be reported. -2. `printer-test`: prints a test page that returns: - - `ERROR_PRINTER_NOT_FOUND` if no printer is connected - - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script - - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available - - `ERROR_PRINTER_INSTALL` If there is an error installing the printer - - `ERROR_PRINT` if there is an error printing - -3. `printer`: sends files to printer that returns: +2. `disk`: Attempts to send files to disk. Can return any Preflight status except `DEVICE_WRITABLE`, as well as + the following status results below, which replace `DEVICE_WRITABLE` since they attempt the export action. + Because export is a linear process, a status such as `ERROR_EXPORT_CLEANUP` indicates that the file export + succeeded and the problem occurred after that point in the process. + - `ERROR_UNLOCK_LUKS` if LUKS decryption failed due to bad passphrase + - `ERROR_UNLOCK_GENERIC` if unlocking failed due to some other reason + - `ERROR_MOUNT` if there was an error mounting the volume + - `ERROR_UNMOUT_VOLUME_BUSY` if there was an error unmounting the drive after export + - `ERROR_EXPORT_CLEANUP` if there was an error removing temporary directories after export + - `SUCCESS_EXPORT`: Entire routine, including export and cleanup, was successful + +3. `printer-preflight`, `printer-test`: test the printer and ensure it is ready. - `ERROR_PRINTER_NOT_FOUND` if no printer is connected - `ERROR_PRINTER_NOT_SUPPORTED` if the printer is not currently supported by the export script - `ERROR_PRINTER_DRIVER_UNAVAILABLE` if the printer driver is not available + - `ERROR_PRINTER_URI` if `lpinfo` fails to retrieve printer information - `ERROR_PRINTER_INSTALL` If there is an error installing the printer - `ERROR_PRINT` if there is an error printing + - `PRINT_PREFLIGHT_SUCCESS` if preflight checks were successful (Preflight only) -4. `disk`: sends files to disk that returns: - - `SUCCESS_EXPORT`: Successful - - `ERROR_CLEANUP`: Export was successful but files could not be cleaned up or drive was not properly unmounted - - `ERROR_UNLOCK_LUKS` if the luks decryption failed (likely due to bad passphrase) - - `ERROR_MOUNT` if there was an error mounting the volume (after unlocking the luks volume) - - `ERROR_WRITE` if there was an error writing to disk (e.g., no space left on device) +4. `printer`: sends files to printer that returns any of the `printer-preflight` statuses except + `PRINT_PREFLIGHT_SUCCESS`, as well as: + - `PRINT_SUCCESS` if the job is dispatched successfully ### Export Folder Structure From 785be31863260c872a48c7226cfc352579693c86 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 21 Feb 2024 13:16:54 -0500 Subject: [PATCH 666/751] Remove obsolete MANIFEST.in files These were needed back when we were creating Python source tarballs (sdist) and using those to build Debian packages, but thankfully we're not doing that anymore. --- client/MANIFEST.in | 33 --------------------------------- export/MANIFEST.in | 9 --------- log/MANIFEST.in | 9 --------- proxy/MANIFEST.in | 8 -------- 4 files changed, 59 deletions(-) delete mode 100644 client/MANIFEST.in delete mode 100644 export/MANIFEST.in delete mode 100644 log/MANIFEST.in delete mode 100644 proxy/MANIFEST.in diff --git a/client/MANIFEST.in b/client/MANIFEST.in deleted file mode 100644 index ac7c8840a..000000000 --- a/client/MANIFEST.in +++ /dev/null @@ -1,33 +0,0 @@ -include requirements/build-requirements.txt -include requirements/requirements.txt -include README.md -include LICENSE -include changelog.md -include setup.py -include files/alembic.ini -include files/client.ini -include files/securedrop-client -include files/securedrop-client.desktop -include files/sd-app-qubes-gpg-domain.sh -include files/usr.bin.securedrop-client - -recursive-include alembic * -recursive-include securedrop_client * - -recursive-exclude alembic *.pyc -recursive-exclude securedrop_client *.pyc - - -# --- LOCALIZATION --- - -# Translations may appear in the tree before we consider them supported, so -# don't include any by default. -prune securedrop_client/locale - -# Explicitly include only supported translations, one line for each $LANG, like: -# -# graft securedrop_client/locale/$LANG -# -# Please keep this list alphabetized. -graft securedrop_client/locale/pt_PT -graft securedrop_client/locale/zh_Hans diff --git a/export/MANIFEST.in b/export/MANIFEST.in deleted file mode 100644 index 14848c347..000000000 --- a/export/MANIFEST.in +++ /dev/null @@ -1,9 +0,0 @@ -include LICENSE -include README.md -include changelog.md -include build-requirements.txt -include securedrop_export/*.py -include setup.py -include files/send-to-usb.desktop -include files/application-x-sd-export.xml -include files/sd-logo.png diff --git a/log/MANIFEST.in b/log/MANIFEST.in deleted file mode 100644 index bba9999d8..000000000 --- a/log/MANIFEST.in +++ /dev/null @@ -1,9 +0,0 @@ -include LICENSE -include README.md -include changelog.md -include build-requirements.txt -include securedrop-log* -include securedrop-redis-log -include securedrop.Log -include sd-rsyslog* -include sdlog.conf diff --git a/proxy/MANIFEST.in b/proxy/MANIFEST.in deleted file mode 100644 index 4686841ae..000000000 --- a/proxy/MANIFEST.in +++ /dev/null @@ -1,8 +0,0 @@ -include LICENSE -include README.md -include changelog.md -include config-example.yaml -include qubes/securedrop.Proxy -include build-requirements.txt -include securedrop_proxy/*.py -include setup.py From 03c0d83c54370925d69ff2b3ec8b1654cdc71de9 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 22 Feb 2024 14:04:55 -0500 Subject: [PATCH 667/751] Centralize black & isort configuration Run black and isort from the root and apply it unconditionally to every file in the repository. Refs #1773. --- Makefile | 21 ++++++- client/Makefile | 26 +-------- client/poetry.lock | 89 +---------------------------- client/pyproject.toml | 14 ----- export/Makefile | 10 +--- export/poetry.lock | 72 +----------------------- export/pyproject.toml | 1 - poetry.lock | 99 +++++++++++++++++++++++++++++++- proxy/Makefile | 22 +------- proxy/poetry.lock | 127 +----------------------------------------- proxy/pyproject.toml | 8 --- pyproject.toml | 20 +++++++ 12 files changed, 146 insertions(+), 363 deletions(-) diff --git a/Makefile b/Makefile index e68664145..56c891540 100644 --- a/Makefile +++ b/Makefile @@ -11,11 +11,30 @@ lint-desktop: ## Lint .desktop files find . -name *.desktop -type f -not -path '*/\.git/*' | xargs desktop-file-validate .PHONY: lint -lint: bandit ## Run linters and formatters +lint: check-black check-isort bandit ## Run linters and formatters + +.PHONY: fix +fix: black isort ## Fix lint and formatting issues bandit: ## Run bandit security checks @poetry run bandit -c pyproject.toml -r . --severity-level medium +.PHONY: black +black: ## Update Python source code formatting with black + @poetry run black . + +.PHONY: check-black +check-black: ## Check Python source code formatting with black + @poetry run black --check --diff . + +.PHONY: isort +isort: ## Update Python import organization with isort + @poetry run isort . + +.PHONY: check-isort +check-isort: ## Check Python import organization with isort + @poetry run isort --check-only --diff . + safety: ## Run safety dependency checks on build dependencies find . -name build-requirements.txt | xargs -n1 poetry run safety check --full-report \ --ignore 51668 \ diff --git a/client/Makefile b/client/Makefile index baff5ce67..b8980fba7 100644 --- a/client/Makefile +++ b/client/Makefile @@ -28,30 +28,6 @@ semgrep-local: @echo "Running semgrep with local rules..." @poetry run semgrep $(SEMGREP_FLAGS) --config ".semgrep" -.PHONY: black -black: ## Format Python source code with black - @poetry run black \ - ./ \ - scripts/*.py - -.PHONY: check-black -check-black: ## Check Python source code formatting with black - @poetry run black --check --diff \ - ./ \ - scripts/*.py - -.PHONY: isort -isort: ## Run isort to organize Python imports - @poetry run isort --skip-glob .venv \ - ./ \ - scripts/*.py - -.PHONY: check-isort -check-isort: ## Check Python import organization with isort - @poetry run isort --skip-glob .venv --check-only --diff \ - ./ scripts \ - /*.py - .PHONY: mypy mypy: ## Run static type checker @poetry run mypy --ignore-missing-imports \ @@ -114,7 +90,7 @@ flake8: ## Run flake8 linting @poetry run flake8 securedrop_client tests .PHONY: lint -lint: check-black check-isort flake8 mypy semgrep ## Run all linters +lint: flake8 mypy semgrep ## Run all linters .PHONY: check check: clean lint test-random test-integration test-functional ## Run the full CI test suite diff --git a/client/poetry.lock b/client/poetry.lock index 6acbc0b2a..f6a661b15 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "alembic" @@ -58,48 +58,6 @@ files = [ {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] -[[package]] -name = "black" -version = "23.10.1" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, - {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, - {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, - {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, - {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, - {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, - {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, - {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, - {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, - {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, - {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, - {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "boltons" version = "21.0.0" @@ -420,23 +378,6 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - [[package]] name = "jeepney" version = "0.8.0" @@ -942,17 +883,6 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - [[package]] name = "peewee" version = "3.17.0" @@ -1048,21 +978,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa typing = ["typing-extensions"] xmp = ["defusedxml"] -[[package]] -name = "platformdirs" -version = "3.11.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, - {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - [[package]] name = "pluggy" version = "1.3.0" @@ -2303,4 +2218,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "b813db5bf3648d596c91e434efc71b72dd1a96c908637e4a739ae0a7611f495e" +content-hash = "344a2b50e82e1eee578da5ec53203317736c644af0bcefcaf17a5cf9a63a56d2" diff --git a/client/pyproject.toml b/client/pyproject.toml index 8d81b4dbd..bc317cf39 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -28,11 +28,9 @@ PyQt5-sip = [ ] PyAutoGUI = "*" babel = "^2.12.1" -black = "^23.7.0" diffoscope = "*" flake8 = "^6.0.0" flaky = "*" -isort = "*" mypy = "^1.4.1" polib = "*" pyqt5-stubs = "*" @@ -50,15 +48,3 @@ types-polib = "*" types-python-dateutil = "*" types-requests = "^2.31.0" types-setuptools = "^68.0.0" - -[tool.black] -line-length = 100 - -[tool.isort] -line_length = 100 -indent = ' ' -multi_line_output = 3 -ensure_newline_before_comments = true -include_trailing_comma = true -force_grid_wrap = 0 -use_parentheses = true diff --git a/export/Makefile b/export/Makefile index 3af40b071..9cb61e0bb 100644 --- a/export/Makefile +++ b/export/Makefile @@ -2,16 +2,12 @@ all: help .PHONY: lint -lint: check-black flake8 mypy semgrep ## Run all linters +lint: flake8 mypy semgrep ## Run all linters .PHONY: check check: lint test ## Run linter and tests -.PHONY: check-black -check-black: ## Check Python source code formatting with black - @poetry run black --check --diff ./ - TESTS ?= tests .PHONY: test test: ## Run tests @@ -26,10 +22,6 @@ flake8: ## Run flake8 linter mypy: ## Type check Python files poetry run mypy . -.PHONY: black -black: ## Format Python source code with black - @poetry run black ./ - SEMGREP_FLAGS := --exclude "tests/" --error --strict --verbose .PHONY: semgrep diff --git a/export/poetry.lock b/export/poetry.lock index 6b1f3115e..648d1aafa 100644 --- a/export/poetry.lock +++ b/export/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "attrs" @@ -18,48 +18,6 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -[[package]] -name = "black" -version = "23.10.1" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, - {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, - {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, - {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, - {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, - {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, - {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, - {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, - {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, - {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, - {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, - {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "boltons" version = "21.0.0" @@ -548,17 +506,6 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - [[package]] name = "peewee" version = "3.17.0" @@ -583,21 +530,6 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "platformdirs" -version = "3.11.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, - {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - [[package]] name = "pluggy" version = "1.3.0" @@ -1069,4 +1001,4 @@ bracex = ">=2.1.1" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "a6ea41bd444384f47314905d8d9187a11191193c667e85ae6b53c3ed095d3e73" +content-hash = "84c7baf6ee6d29d331d7ad4df286cd053a8cbf9abcdc920474d3d11220b78047" diff --git a/export/pyproject.toml b/export/pyproject.toml index 24e3313e5..f864e0982 100644 --- a/export/pyproject.toml +++ b/export/pyproject.toml @@ -11,7 +11,6 @@ python = "^3.9" pexpect = "^4.9.0" [tool.poetry.group.dev.dependencies] -black = "^23.7.0" flake8 = "^6.0.0" mypy = "^1.4.1" types-setuptools = "^68.0.0" diff --git a/poetry.lock b/poetry.lock index 268d63539..6b9779518 100644 --- a/poetry.lock +++ b/poetry.lock @@ -37,6 +37,52 @@ test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", toml = ["tomli (>=1.1.0)"] yaml = ["PyYAML"] +[[package]] +name = "black" +version = "24.2.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"}, + {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"}, + {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"}, + {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"}, + {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"}, + {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"}, + {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"}, + {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"}, + {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"}, + {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"}, + {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"}, + {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"}, + {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"}, + {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"}, + {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"}, + {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"}, + {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"}, + {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"}, + {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"}, + {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"}, + {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"}, + {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "certifi" version = "2024.2.2" @@ -322,6 +368,20 @@ files = [ {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + [[package]] name = "jinja2" version = "3.1.3" @@ -463,6 +523,17 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + [[package]] name = "packaging" version = "23.2" @@ -474,6 +545,17 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + [[package]] name = "pbr" version = "6.0.0" @@ -485,6 +567,21 @@ files = [ {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, ] +[[package]] +name = "platformdirs" +version = "4.2.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] + [[package]] name = "pycparser" version = "2.21" @@ -883,4 +980,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7e89123eb4b8aeab8c187bb9685e39a71c91a996b5ceb4229b04f0b4e89fc84c" +content-hash = "a4319256f0a3818846eddef054452e7a568f61ef60273239934f9708abe94b7e" diff --git a/proxy/Makefile b/proxy/Makefile index a55836b46..468fe6d8d 100644 --- a/proxy/Makefile +++ b/proxy/Makefile @@ -4,33 +4,13 @@ all: help .PHONY: lint -lint: check-isort check-black mypy ## Run isort, black and flake8 and mypy +lint: mypy ## Run flake8 and mypy @poetry run flake8 securedrop_proxy tests .PHONY: mypy mypy: ## Run mypy static type checker @poetry run mypy --ignore-missing-imports securedrop_proxy -.PHONY: black -black: ## Run black for file formatting - @echo "Running black (may result in changes in your working directory)…" - @poetry run black securedrop_proxy tests - -.PHONY: check-black -check-black: ## Check Python source code formatting with black - @echo "Running black formatting check…" - @poetry run black --check --diff securedrop_proxy tests - -.PHONY: isort -isort: ## Run isort for file formatting - @echo "Running isort (may result in changes in your working directory)…" - @poetry run isort securedrop_proxy/*.py tests/*.py - -.PHONY: check-isort -check-isort: ## Check isort for file formatting - @echo "Running isort module ordering check…" - @poetry run isort --check-only --diff securedrop_proxy/*.py tests/*.py - .PHONY: test test: clean .coverage ## Runs tests with coverage diff --git a/proxy/poetry.lock b/proxy/poetry.lock index 56d15c7bd..46e4e4d49 100644 --- a/proxy/poetry.lock +++ b/proxy/poetry.lock @@ -1,51 +1,5 @@ # This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. -[[package]] -name = "black" -version = "23.7.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "certifi" version = "2023.7.22" @@ -71,31 +25,6 @@ files = [ [package.extras] unicode-backport = ["unicodedata2"] -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - [[package]] name = "coverage" version = "7.3.0" @@ -187,23 +116,6 @@ files = [ {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, ] -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - [[package]] name = "mccabe" version = "0.7.0" @@ -355,43 +267,6 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "packaging" -version = "23.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, -] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - [[package]] name = "pycodestyle" version = "2.11.0" @@ -738,4 +613,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "3bad1cdfd1fe51eb00a9b6bb3d93b71537b4d710fb9cf821ae6921ec7de9e886" +content-hash = "56d28407f6665099eeac3fa2b7ef901426d2f4b1e00829036a50e0ff19c1d824" diff --git a/proxy/pyproject.toml b/proxy/pyproject.toml index e88d28861..22b8961f4 100644 --- a/proxy/pyproject.toml +++ b/proxy/pyproject.toml @@ -1,9 +1,3 @@ -[tool.black] -line-length = 100 - -[tool.isort] -line_length = 100 - [tool.poetry] name = "securedrop-proxy" version = "0.1.0" @@ -18,10 +12,8 @@ pyyaml = "^5.4.1" requests = "^2.31.0" [tool.poetry.group.dev.dependencies] -black = "^23.7.0" coverage = "^7.3.0" flake8 = "^6.1.0" -isort = "^5.12.0" mypy = "^1.5.1" types-PyYAML = "^6.0.12.11" types-requests = "^2.31.0.2" diff --git a/pyproject.toml b/pyproject.toml index a881d888b..b1d69a2b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,27 @@ python = "^3.9" [tool.poetry.group.dev.dependencies] bandit = "*" +black = "*" +isort = "*" safety = "*" [tool.bandit] exclude_dirs = ["client/tests", "export/tests", "log/tests", "proxy/tests"] + +[tool.black] +line-length = 100 +# lowest Python version we need to support +target-version = ["py39"] + +[tool.isort] +line_length = 100 +profile = "black" +# because we're running from the root, isort doesn't know that these +# are our packages, so tell it explicitly. +known_first_party = [ + "securedrop_client", + "securedrop_export", + "securedrop_log", + "securedrop_proxy", + "tests", +] From 4eef11cdf26305b7c5b441e340f8b19611c22ab4 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 22 Feb 2024 14:06:51 -0500 Subject: [PATCH 668/751] Apply updated black and isort formatting --- client/alembic/env.py | 3 +- ...3_draftreply_add_column_for_sending_pid.py | 2 +- .../alembic/versions/d7c8af95bc8e_initial.py | 2 +- client/securedrop_client/api_jobs/base.py | 1 - client/securedrop_client/app.py | 1 + client/securedrop_client/crypto.py | 16 ++- client/securedrop_client/gui/actions.py | 1 + client/securedrop_client/gui/auth/__init__.py | 1 + client/securedrop_client/gui/auth/dialog.py | 1 + .../gui/auth/sign_in/__init__.py | 1 + .../gui/auth/sign_in/button.py | 1 + .../gui/auth/sign_in/error_bar.py | 1 + .../gui/auth/use_offline/__init__.py | 1 + client/securedrop_client/gui/base/__init__.py | 1 + client/securedrop_client/gui/base/buttons.py | 1 + client/securedrop_client/gui/base/checkbox.py | 1 + client/securedrop_client/gui/base/dialogs.py | 1 + client/securedrop_client/gui/base/inputs.py | 1 + client/securedrop_client/gui/base/misc.py | 1 + .../gui/conversation/__init__.py | 1 + .../gui/conversation/delete/__init__.py | 1 + .../gui/conversation/delete/dialog.py | 1 + .../securedrop_client/gui/datetime_helpers.py | 1 + .../securedrop_client/gui/source/__init__.py | 1 + .../gui/source/delete/__init__.py | 1 + .../gui/source/delete/dialog.py | 1 + client/securedrop_client/gui/widgets.py | 1 + client/securedrop_client/logic.py | 1 + .../securedrop_client/resources/__init__.py | 1 + client/securedrop_client/storage.py | 1 + client/securedrop_client/utils.py | 7 +- client/tests/conftest.py | 2 +- client/tests/factory.py | 1 + client/tests/functional/test_delete_source.py | 1 + client/tests/functional/test_download_file.py | 1 + client/tests/functional/test_export_wizard.py | 1 + client/tests/functional/test_login.py | 1 + client/tests/functional/test_logout.py | 1 + .../functional/test_offline_delete_source.py | 1 + client/tests/functional/test_offline_login.py | 1 + .../test_offline_read_conversation.py | 1 + .../functional/test_offline_send_reply.py | 1 + .../functional/test_offline_star_source.py | 1 + .../tests/functional/test_receive_message.py | 1 + client/tests/functional/test_seen.py | 1 + client/tests/functional/test_send_reply.py | 1 + client/tests/functional/test_star_source.py | 1 + .../functional/test_user_profile_menu.py | 1 + client/tests/gui/base/test_misc.py | 1 + client/tests/gui/test_main.py | 1 + client/tests/gui/test_widgets.py | 1 + client/tests/test_alembic.py | 4 +- client/tests/test_app.py | 1 + client/tests/test_export.py | 120 ++++++++++-------- client/tests/test_logic.py | 1 + client/tests/test_queue.py | 1 + client/tests/test_resources.py | 1 + client/tests/test_storage.py | 1 + export/securedrop_export/archive.py | 4 +- export/securedrop_export/directory.py | 13 +- export/securedrop_export/disk/cli.py | 8 +- export/securedrop_export/disk/status.py | 8 +- export/securedrop_export/main.py | 17 +-- export/securedrop_export/print/service.py | 12 +- export/setup.py | 4 +- export/tests/disk/test_cli.py | 8 +- export/tests/disk/test_service.py | 8 +- export/tests/print/test_service.py | 42 +++--- export/tests/test_archive.py | 21 +-- export/tests/test_main.py | 67 +++++----- log/example.py | 5 +- log/journal-example.py | 6 +- log/sd-rsyslog | 8 +- log/securedrop-log | 6 +- log/securedrop-log-saver | 3 +- log/securedrop-redis-log | 9 +- log/securedrop_log/__init__.py | 4 +- log/tests/test_logger.py | 12 +- proxy/securedrop_proxy/json.py | 1 + proxy/setup.py | 1 + proxy/tests/test_entrypoint.py | 53 ++++---- 81 files changed, 271 insertions(+), 255 deletions(-) diff --git a/client/alembic/env.py b/client/alembic/env.py index 141bc8d34..2ead7cd47 100644 --- a/client/alembic/env.py +++ b/client/alembic/env.py @@ -4,9 +4,8 @@ from logging.config import fileConfig from os import path -from sqlalchemy import engine_from_config, pool - from alembic import context +from sqlalchemy import engine_from_config, pool # this is the Alembic Config object, which provides # access to the values within the .ini file in use. diff --git a/client/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py b/client/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py index d4d3d0ca5..306f2704f 100644 --- a/client/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py +++ b/client/alembic/versions/414627c04463_draftreply_add_column_for_sending_pid.py @@ -5,8 +5,8 @@ Create Date: 2022-05-24 20:48:28.581857 """ -import sqlalchemy as sa +import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. diff --git a/client/alembic/versions/d7c8af95bc8e_initial.py b/client/alembic/versions/d7c8af95bc8e_initial.py index 3b39bcc20..5041b9f0d 100644 --- a/client/alembic/versions/d7c8af95bc8e_initial.py +++ b/client/alembic/versions/d7c8af95bc8e_initial.py @@ -5,8 +5,8 @@ Create Date: 2022-06-09 16:41:11.913336 """ -import sqlalchemy as sa +import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. diff --git a/client/securedrop_client/api_jobs/base.py b/client/securedrop_client/api_jobs/base.py index 0922adc6d..e0af464b3 100644 --- a/client/securedrop_client/api_jobs/base.py +++ b/client/securedrop_client/api_jobs/base.py @@ -53,7 +53,6 @@ def __init__(self) -> None: class ApiJob(QueueJob): - """ Signal that is emitted after an job finishes successfully. """ diff --git a/client/securedrop_client/app.py b/client/securedrop_client/app.py index 8a6a990c4..74ecce28e 100644 --- a/client/securedrop_client/app.py +++ b/client/securedrop_client/app.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + import gettext import locale import logging diff --git a/client/securedrop_client/crypto.py b/client/securedrop_client/crypto.py index cdf9fb048..c6e6c2b5e 100644 --- a/client/securedrop_client/crypto.py +++ b/client/securedrop_client/crypto.py @@ -163,9 +163,11 @@ def import_key(self, source: Source) -> None: def _import(self, key_data: str) -> None: """Imports a key to the client GnuPG keyring.""" - with tempfile.NamedTemporaryFile("w+") as temp_key, tempfile.NamedTemporaryFile( - "w+" - ) as stdout, tempfile.NamedTemporaryFile("w+") as stderr: + with ( + tempfile.NamedTemporaryFile("w+") as temp_key, + tempfile.NamedTemporaryFile("w+") as stdout, + tempfile.NamedTemporaryFile("w+") as stderr, + ): temp_key.write(key_data) temp_key.seek(0) if self.is_qubes: # pragma: no cover @@ -204,9 +206,11 @@ def encrypt_to_source(self, source_uuid: str, data: str) -> str: cmd = self._gpg_cmd_base() - with tempfile.NamedTemporaryFile("w+") as content, tempfile.NamedTemporaryFile( - "w+" - ) as stdout, tempfile.NamedTemporaryFile("w+") as stderr: + with ( + tempfile.NamedTemporaryFile("w+") as content, + tempfile.NamedTemporaryFile("w+") as stdout, + tempfile.NamedTemporaryFile("w+") as stderr, + ): content.write(data) content.seek(0) diff --git a/client/securedrop_client/gui/actions.py b/client/securedrop_client/gui/actions.py index 1fdd66003..a75580a5c 100644 --- a/client/securedrop_client/gui/actions.py +++ b/client/securedrop_client/gui/actions.py @@ -4,6 +4,7 @@ Over time, this module could become the interface between the GUI and the controller. """ + from contextlib import ExitStack from gettext import gettext as _ from pathlib import Path diff --git a/client/securedrop_client/gui/auth/__init__.py b/client/securedrop_client/gui/auth/__init__.py index f21fc20d7..4479d3621 100644 --- a/client/securedrop_client/gui/auth/__init__.py +++ b/client/securedrop_client/gui/auth/__init__.py @@ -16,5 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.auth from securedrop_client.gui.auth.dialog import LoginDialog # noqa: F401 diff --git a/client/securedrop_client/gui/auth/dialog.py b/client/securedrop_client/gui/auth/dialog.py index 9b6c14cd9..af3ee6f3f 100644 --- a/client/securedrop_client/gui/auth/dialog.py +++ b/client/securedrop_client/gui/auth/dialog.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + import logging from gettext import gettext as _ diff --git a/client/securedrop_client/gui/auth/sign_in/__init__.py b/client/securedrop_client/gui/auth/sign_in/__init__.py index 65c3f8c27..bdda414c5 100644 --- a/client/securedrop_client/gui/auth/sign_in/__init__.py +++ b/client/securedrop_client/gui/auth/sign_in/__init__.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.auth.sign_in from securedrop_client.gui.auth.sign_in.button import SignInButton # noqa: F401 from securedrop_client.gui.auth.sign_in.error_bar import LoginErrorBar # noqa: F401 diff --git a/client/securedrop_client/gui/auth/sign_in/button.py b/client/securedrop_client/gui/auth/sign_in/button.py index 2d14753a0..c27476dd1 100644 --- a/client/securedrop_client/gui/auth/sign_in/button.py +++ b/client/securedrop_client/gui/auth/sign_in/button.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from gettext import gettext as _ from pkg_resources import resource_string diff --git a/client/securedrop_client/gui/auth/sign_in/error_bar.py b/client/securedrop_client/gui/auth/sign_in/error_bar.py index 6302b00d2..03531d1aa 100644 --- a/client/securedrop_client/gui/auth/sign_in/error_bar.py +++ b/client/securedrop_client/gui/auth/sign_in/error_bar.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from pkg_resources import resource_string from PyQt5.QtCore import QSize from PyQt5.QtWidgets import QHBoxLayout, QWidget diff --git a/client/securedrop_client/gui/auth/use_offline/__init__.py b/client/securedrop_client/gui/auth/use_offline/__init__.py index da48a0af8..014e32f72 100644 --- a/client/securedrop_client/gui/auth/use_offline/__init__.py +++ b/client/securedrop_client/gui/auth/use_offline/__init__.py @@ -16,5 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.auth.use_offline from securedrop_client.gui.auth.use_offline.button import LoginOfflineLink # noqa: F401 diff --git a/client/securedrop_client/gui/base/__init__.py b/client/securedrop_client/gui/base/__init__.py index dcfb265bd..52c844183 100644 --- a/client/securedrop_client/gui/base/__init__.py +++ b/client/securedrop_client/gui/base/__init__.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.base from securedrop_client.gui.base.buttons import SDPushButton # noqa: F401 from securedrop_client.gui.base.dialogs import ModalDialog # noqa: F401 diff --git a/client/securedrop_client/gui/base/buttons.py b/client/securedrop_client/gui/base/buttons.py index 3a98cd0e2..16d2493da 100644 --- a/client/securedrop_client/gui/base/buttons.py +++ b/client/securedrop_client/gui/base/buttons.py @@ -26,6 +26,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from typing import NewType, Optional from PyQt5.QtWidgets import QPushButton, QWidget diff --git a/client/securedrop_client/gui/base/checkbox.py b/client/securedrop_client/gui/base/checkbox.py index 73e397348..151890799 100644 --- a/client/securedrop_client/gui/base/checkbox.py +++ b/client/securedrop_client/gui/base/checkbox.py @@ -5,6 +5,7 @@ Consists of a QCheckBox and a QLabel positioned horizontally within a QFrame. Present in the Sign-in and Export Dialog. """ + from gettext import gettext as _ from pkg_resources import resource_string diff --git a/client/securedrop_client/gui/base/dialogs.py b/client/securedrop_client/gui/base/dialogs.py index d5cc5feb7..740cce00f 100644 --- a/client/securedrop_client/gui/base/dialogs.py +++ b/client/securedrop_client/gui/base/dialogs.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from gettext import gettext as _ from pkg_resources import resource_string diff --git a/client/securedrop_client/gui/base/inputs.py b/client/securedrop_client/gui/base/inputs.py index 3a5473e8a..b014a1d89 100644 --- a/client/securedrop_client/gui/base/inputs.py +++ b/client/securedrop_client/gui/base/inputs.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from PyQt5.QtWidgets import QLineEdit, QWidget diff --git a/client/securedrop_client/gui/base/misc.py b/client/securedrop_client/gui/base/misc.py index 46bedb450..8cd1de2c3 100644 --- a/client/securedrop_client/gui/base/misc.py +++ b/client/securedrop_client/gui/base/misc.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from typing import Optional, Union from PyQt5.QtCore import QSize, Qt diff --git a/client/securedrop_client/gui/conversation/__init__.py b/client/securedrop_client/gui/conversation/__init__.py index c9db19eec..86852b5e4 100644 --- a/client/securedrop_client/gui/conversation/__init__.py +++ b/client/securedrop_client/gui/conversation/__init__.py @@ -1,6 +1,7 @@ """ A conversation between a source and one or more journalists. """ + # Import classes here to make possible to import them from securedrop_client.gui.conversation from .delete import DeleteConversationDialog # noqa: F401 from .export import ExportWizard as ExportWizard # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/delete/__init__.py b/client/securedrop_client/gui/conversation/delete/__init__.py index 8d1cb730a..c45776f7e 100644 --- a/client/securedrop_client/gui/conversation/delete/__init__.py +++ b/client/securedrop_client/gui/conversation/delete/__init__.py @@ -16,5 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.conversation.delete from securedrop_client.gui.conversation.delete.dialog import DeleteConversationDialog # noqa: F401 diff --git a/client/securedrop_client/gui/conversation/delete/dialog.py b/client/securedrop_client/gui/conversation/delete/dialog.py index fd2a80be4..e8e262344 100644 --- a/client/securedrop_client/gui/conversation/delete/dialog.py +++ b/client/securedrop_client/gui/conversation/delete/dialog.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from gettext import gettext as _ from gettext import ngettext diff --git a/client/securedrop_client/gui/datetime_helpers.py b/client/securedrop_client/gui/datetime_helpers.py index f24c88ab2..86e6bb531 100644 --- a/client/securedrop_client/gui/datetime_helpers.py +++ b/client/securedrop_client/gui/datetime_helpers.py @@ -2,6 +2,7 @@ Helper functions for formatting information in the UI """ + import datetime import arrow diff --git a/client/securedrop_client/gui/source/__init__.py b/client/securedrop_client/gui/source/__init__.py index ac92bbc95..977005248 100644 --- a/client/securedrop_client/gui/source/__init__.py +++ b/client/securedrop_client/gui/source/__init__.py @@ -16,5 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.source from securedrop_client.gui.source.delete import DeleteSourceDialog # noqa: F401 diff --git a/client/securedrop_client/gui/source/delete/__init__.py b/client/securedrop_client/gui/source/delete/__init__.py index 0424d9d2f..b21f77162 100644 --- a/client/securedrop_client/gui/source/delete/__init__.py +++ b/client/securedrop_client/gui/source/delete/__init__.py @@ -16,5 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + # Import classes here to make possible to import them from securedrop_client.gui.source.delete from securedrop_client.gui.source.delete.dialog import DeleteSourceDialog # noqa: F401 diff --git a/client/securedrop_client/gui/source/delete/dialog.py b/client/securedrop_client/gui/source/delete/dialog.py index 533118bef..b439bf96d 100644 --- a/client/securedrop_client/gui/source/delete/dialog.py +++ b/client/securedrop_client/gui/source/delete/dialog.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from gettext import gettext as _ from securedrop_client.db import Source diff --git a/client/securedrop_client/gui/widgets.py b/client/securedrop_client/gui/widgets.py index 714fef467..b6647389c 100644 --- a/client/securedrop_client/gui/widgets.py +++ b/client/securedrop_client/gui/widgets.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + from __future__ import annotations import html diff --git a/client/securedrop_client/logic.py b/client/securedrop_client/logic.py index fd61024b9..e864aa06e 100644 --- a/client/securedrop_client/logic.py +++ b/client/securedrop_client/logic.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + import functools import inspect import logging diff --git a/client/securedrop_client/resources/__init__.py b/client/securedrop_client/resources/__init__.py index 539b39b59..c55389307 100644 --- a/client/securedrop_client/resources/__init__.py +++ b/client/securedrop_client/resources/__init__.py @@ -17,6 +17,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + import os from typing import Optional diff --git a/client/securedrop_client/storage.py b/client/securedrop_client/storage.py index 2ac1c1e06..c7c463bd3 100644 --- a/client/securedrop_client/storage.py +++ b/client/securedrop_client/storage.py @@ -19,6 +19,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ + import logging import os import re diff --git a/client/securedrop_client/utils.py b/client/securedrop_client/utils.py index b496387ea..5462d683d 100644 --- a/client/securedrop_client/utils.py +++ b/client/securedrop_client/utils.py @@ -68,9 +68,10 @@ def safe_gzip_extract( safe_mkdir(base_path, str(dest_dir)) dest_path_with_original_filename = dest_dir.joinpath(original_filename) - with gzip.open(gzip_file_path, "rb") as src_file, open( - dest_path_with_original_filename, "wb" - ) as dest_file: + with ( + gzip.open(gzip_file_path, "rb") as src_file, + open(dest_path_with_original_filename, "wb") as dest_file, + ): safe_copyfileobj(src_file, dest_file, base_path) diff --git a/client/tests/conftest.py b/client/tests/conftest.py index 40bde3b51..b6dbad4e6 100644 --- a/client/tests/conftest.py +++ b/client/tests/conftest.py @@ -435,7 +435,7 @@ def source(session) -> dict: is_starred=False, last_updated=datetime.now(), document_count=0, - **args + **args, ) args["fingerprint"] = source.fingerprint = "B2FF7FB28EED8CABEBC5FB6C6179D97BCFA52E5F" session.add(source) diff --git a/client/tests/factory.py b/client/tests/factory.py index d26fa5bab..3576004fd 100644 --- a/client/tests/factory.py +++ b/client/tests/factory.py @@ -1,6 +1,7 @@ """Create models with a set of default valid properties, to avoid changes forcing an update of all test code. """ + import os import uuid from datetime import datetime diff --git a/client/tests/functional/test_delete_source.py b/client/tests/functional/test_delete_source.py index 9437ac63e..03e5549c8 100644 --- a/client/tests/functional/test_delete_source.py +++ b/client/tests/functional/test_delete_source.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_download_file.py b/client/tests/functional/test_download_file.py index 71d84924b..82c3ba2c6 100644 --- a/client/tests/functional/test_download_file.py +++ b/client/tests/functional/test_download_file.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_export_wizard.py b/client/tests/functional/test_export_wizard.py index e2ac82af4..3896c29b1 100644 --- a/client/tests/functional/test_export_wizard.py +++ b/client/tests/functional/test_export_wizard.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_login.py b/client/tests/functional/test_login.py index 615db89b6..ad7f845f0 100644 --- a/client/tests/functional/test_login.py +++ b/client/tests/functional/test_login.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_logout.py b/client/tests/functional/test_logout.py index bc7ea428a..d5a2b0d86 100644 --- a/client/tests/functional/test_logout.py +++ b/client/tests/functional/test_logout.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky diff --git a/client/tests/functional/test_offline_delete_source.py b/client/tests/functional/test_offline_delete_source.py index 073a0163f..d597d1628 100644 --- a/client/tests/functional/test_offline_delete_source.py +++ b/client/tests/functional/test_offline_delete_source.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_offline_login.py b/client/tests/functional/test_offline_login.py index cc6d155e6..c43c19cd5 100644 --- a/client/tests/functional/test_offline_login.py +++ b/client/tests/functional/test_offline_login.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_offline_read_conversation.py b/client/tests/functional/test_offline_read_conversation.py index 0faccc7ed..f78c2b454 100644 --- a/client/tests/functional/test_offline_read_conversation.py +++ b/client/tests/functional/test_offline_read_conversation.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_offline_send_reply.py b/client/tests/functional/test_offline_send_reply.py index b213a3dd9..12b74b846 100644 --- a/client/tests/functional/test_offline_send_reply.py +++ b/client/tests/functional/test_offline_send_reply.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_offline_star_source.py b/client/tests/functional/test_offline_star_source.py index 22f603cac..d9809b205 100644 --- a/client/tests/functional/test_offline_star_source.py +++ b/client/tests/functional/test_offline_star_source.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_receive_message.py b/client/tests/functional/test_receive_message.py index 240b67ec1..05f022ffa 100644 --- a/client/tests/functional/test_receive_message.py +++ b/client/tests/functional/test_receive_message.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_seen.py b/client/tests/functional/test_seen.py index 464444a1a..e5a18a421 100644 --- a/client/tests/functional/test_seen.py +++ b/client/tests/functional/test_seen.py @@ -1,6 +1,7 @@ """ Functional tests for testing seen/unseen feature in the SecureDrop client. """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_send_reply.py b/client/tests/functional/test_send_reply.py index 257532d86..9c97224d8 100644 --- a/client/tests/functional/test_send_reply.py +++ b/client/tests/functional/test_send_reply.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_star_source.py b/client/tests/functional/test_star_source.py index d13b07ef6..ea82d7359 100644 --- a/client/tests/functional/test_star_source.py +++ b/client/tests/functional/test_star_source.py @@ -4,6 +4,7 @@ The tests are based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pytest from flaky import flaky from PyQt5.QtCore import Qt diff --git a/client/tests/functional/test_user_profile_menu.py b/client/tests/functional/test_user_profile_menu.py index 55fdd170c..4b42fb9ec 100644 --- a/client/tests/functional/test_user_profile_menu.py +++ b/client/tests/functional/test_user_profile_menu.py @@ -4,6 +4,7 @@ The test is based upon the client testing descriptions here: https://github.com/freedomofpress/securedrop-client/wiki/Test-plan#basic-client-testing """ + import pyautogui import pytest from flaky import flaky diff --git a/client/tests/gui/base/test_misc.py b/client/tests/gui/base/test_misc.py index 58b32a955..7e2de3979 100644 --- a/client/tests/gui/base/test_misc.py +++ b/client/tests/gui/base/test_misc.py @@ -1,6 +1,7 @@ """ Tests for the gui helper functions in __init__.py """ + from PyQt5.QtCore import QSize, Qt from securedrop_client.gui.base import SecureQLabel, SvgLabel, SvgPushButton, SvgToggleButton diff --git a/client/tests/gui/test_main.py b/client/tests/gui/test_main.py index 54b4922ba..a5d89df4d 100644 --- a/client/tests/gui/test_main.py +++ b/client/tests/gui/test_main.py @@ -1,6 +1,7 @@ """ Check the core Window UI class works as expected. """ + import unittest from PyQt5.QtWidgets import QHBoxLayout diff --git a/client/tests/gui/test_widgets.py b/client/tests/gui/test_widgets.py index 508b89e86..e5b9e9fb8 100644 --- a/client/tests/gui/test_widgets.py +++ b/client/tests/gui/test_widgets.py @@ -1,6 +1,7 @@ """ Make sure the UI widgets are configured correctly and work as expected. """ + import math import random from datetime import datetime diff --git a/client/tests/test_alembic.py b/client/tests/test_alembic.py index 6701247ce..b57664c77 100644 --- a/client/tests/test_alembic.py +++ b/client/tests/test_alembic.py @@ -6,11 +6,11 @@ from os import path import pytest +from alembic.config import Config as AlembicConfig +from alembic.script import ScriptDirectory from sqlalchemy import create_engine, text from sqlalchemy.orm import scoped_session, sessionmaker -from alembic.config import Config as AlembicConfig -from alembic.script import ScriptDirectory from securedrop_client.db import Base, convention from . import conftest diff --git a/client/tests/test_app.py b/client/tests/test_app.py index 17bdf42e4..ce1f772d3 100644 --- a/client/tests/test_app.py +++ b/client/tests/test_app.py @@ -1,6 +1,7 @@ """ Tests for the app module, which sets things up and runs the application. """ + import os import platform import sys diff --git a/client/tests/test_export.py b/client/tests/test_export.py index b3f7c7fa5..60ac0ee22 100644 --- a/client/tests/test_export.py +++ b/client/tests/test_export.py @@ -61,12 +61,14 @@ def teardown_method(cls): cls.device._create_archive = None def test_Device_run_printer_preflight_checks(self): - with mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch.object( - self.device, "_create_archive" - ) as mock_archive: + with ( + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + mock.patch.object(self.device, "_create_archive") as mock_archive, + ): mock_archive.return_value = _PATH_TO_PRETEND_ARCHIVE mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() @@ -82,14 +84,15 @@ def test_Device_run_printer_preflight_checks(self): def test_Device_run_print_preflight_checks_with_error(self): spy = QSignalSpy(self.device.print_preflight_check_failed) - with mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch.object( - self.device, "_create_archive" - ) as mock_archive, mock.patch( - "shutil.rmtree" - ) as mock_rmtree: + with ( + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + mock.patch.object(self.device, "_create_archive") as mock_archive, + mock.patch("shutil.rmtree") as mock_rmtree, + ): mock_archive.return_value = _PATH_TO_PRETEND_ARCHIVE mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() @@ -111,9 +114,12 @@ def test_Device_run_print_preflight_checks_with_error(self): ) def test_Device_print(self): - with mock.patch("securedrop_client.export.QProcess") as mock_qprocess, mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, + with ( + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), ): mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() @@ -135,10 +141,13 @@ def test_Device_print_file_file_missing(self, mock_shutil): device = Export() spy = QSignalSpy(device.print_failed) - with mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + with ( + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + ): mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() @@ -154,10 +163,13 @@ def test_Device_print_file_file_missing(self, mock_shutil): ) def test_Device_run_export_preflight_checks(self): - with mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + with ( + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + ): mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() @@ -176,14 +188,15 @@ def test_Device_run_export_preflight_checks(self): def test_Device_run_export_preflight_checks_with_error(self, mock_shutil): spy = QSignalSpy(self.device.export_state_changed) - with mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch.object(self.device, "_create_archive"), mock.patch( - "securedrop_client.export.QProcess" - ) as mock_qprocess, mock.patch.object( - self.device, "_create_archive" - ) as mock_archive: + with ( + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch.object(self.device, "_create_archive"), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + mock.patch.object(self.device, "_create_archive") as mock_archive, + ): mock_archive.return_value = _PATH_TO_PRETEND_ARCHIVE mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() @@ -201,15 +214,17 @@ def test_Device_export_file_missing(self, mocker): device = Export() warning_logger = mocker.patch("securedrop_client.export.logger.warning") - with mock.patch( - "securedrop_client.export.tarfile.open", - return_value=mock.MagicMock(), - ), mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch( - "securedrop_client.export.QProcess" - ) as mock_qprocess: + with ( + mock.patch( + "securedrop_client.export.tarfile.open", + return_value=mock.MagicMock(), + ), + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + ): device.export(["/not/a/real/location"], "mock passphrase") mock_qprocess.assert_not_called() @@ -224,10 +239,13 @@ def test_Device_export(self): expected_metadata = self.device._DISK_METADATA.copy() expected_metadata[self.device._DISK_ENCRYPTION_KEY_NAME] = passphrase - with mock.patch( - "securedrop_client.export.mkdtemp", - return_value=self.mock_tmpdir, - ), mock.patch("securedrop_client.export.QProcess") as mock_qprocess: + with ( + mock.patch( + "securedrop_client.export.mkdtemp", + return_value=self.mock_tmpdir, + ), + mock.patch("securedrop_client.export.QProcess") as mock_qprocess, + ): mock_qproc = mock_qprocess.return_value mock_qproc.start = mock.MagicMock() self.device.export([filepath], passphrase) @@ -354,11 +372,11 @@ def test__tmpdir_cleaned_up_on_exception(self): Sanity check. If we encounter an error after archive has been built, ensure the tmpdir directory cleanup happens. """ - with mock.patch( - "securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir - ), mock.patch("securedrop_client.export.QProcess") as qprocess, mock.patch.object( - self.device, "_cleanup_tmpdir" - ) as mock_cleanup: + with ( + mock.patch("securedrop_client.export.mkdtemp", return_value=self.mock_tmpdir), + mock.patch("securedrop_client.export.QProcess") as qprocess, + mock.patch.object(self.device, "_cleanup_tmpdir") as mock_cleanup, + ): mock_qproc = qprocess.return_value mock_qproc.readAllStandardError.data.return_value = b"Something awful happened!\n" mock_qproc.start = lambda proc, args: self.device._on_export_process_error() diff --git a/client/tests/test_logic.py b/client/tests/test_logic.py index a3800abc7..6c8452e38 100644 --- a/client/tests/test_logic.py +++ b/client/tests/test_logic.py @@ -2,6 +2,7 @@ Make sure the Controller object, containing the application logic, behaves as expected. """ + import datetime import logging import os diff --git a/client/tests/test_queue.py b/client/tests/test_queue.py index d0dd3feb0..1a454fb94 100644 --- a/client/tests/test_queue.py +++ b/client/tests/test_queue.py @@ -1,6 +1,7 @@ """ Testing for the ApiJobQueue and related classes. """ + from queue import Queue import pytest diff --git a/client/tests/test_resources.py b/client/tests/test_resources.py index 99843cd27..e4279248c 100644 --- a/client/tests/test_resources.py +++ b/client/tests/test_resources.py @@ -1,6 +1,7 @@ """ Tests for the resources sub-module. """ + from PyQt5.QtGui import QIcon, QMovie, QPixmap from PyQt5.QtSvg import QSvgWidget diff --git a/client/tests/test_storage.py b/client/tests/test_storage.py index beffe4b04..170ed0cc6 100644 --- a/client/tests/test_storage.py +++ b/client/tests/test_storage.py @@ -1,6 +1,7 @@ """ Tests for storage sync logic. """ + import datetime import os import time diff --git a/export/securedrop_export/archive.py b/export/securedrop_export/archive.py index 56edf4ddb..3f7b10234 100755 --- a/export/securedrop_export/archive.py +++ b/export/securedrop_export/archive.py @@ -69,9 +69,7 @@ def extract_tarball(self) -> "Archive": Extract tarball, checking for path traversal, and return Archive object. """ try: - logger.info( - "Extracting tarball {} into {}".format(self.archive, self.tmpdir) - ) + logger.info("Extracting tarball {} into {}".format(self.archive, self.tmpdir)) safe_extractall(self.archive, self.tmpdir) return self except Exception as ex: diff --git a/export/securedrop_export/directory.py b/export/securedrop_export/directory.py index ac269dd93..0df6b6764 100644 --- a/export/securedrop_export/directory.py +++ b/export/securedrop_export/directory.py @@ -101,9 +101,7 @@ def _check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: if filename_or_filepath.is_absolute(): base_path = filename_or_filepath else: - base_path = ( - Path.cwd() - ) # use cwd so we can next ensure relative path does not traverse up + base_path = Path.cwd() # use cwd so we can next ensure relative path does not traverse up try: relative_path = relative_filepath(filename_or_filepath, base_path) @@ -112,10 +110,7 @@ def _check_path_traversal(filename_or_filepath: Union[str, Path]) -> None: # base, but can still have harmful side effects to the application. If this kind of # traversal is needed, then call relative_filepath instead in order to check that the # desired traversal does not go past a safe base directory. - if ( - relative_path != filename_or_filepath - and not filename_or_filepath.is_absolute() - ): + if relative_path != filename_or_filepath and not filename_or_filepath.is_absolute(): raise ValueError except ValueError: raise ValueError(f"Unsafe file or directory name: '{filename_or_filepath}'") @@ -148,6 +143,4 @@ def _check_dir_permissions(dir_path: Union[str, Path]) -> None: stat_res = os.stat(dir_path).st_mode masked = stat_res & 0o777 if masked & 0o077: - raise RuntimeError( - "Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path) - ) + raise RuntimeError("Unsafe permissions ({}) on {}".format(oct(stat_res), dir_path)) diff --git a/export/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py index 906918992..f7d6234a8 100644 --- a/export/securedrop_export/disk/cli.py +++ b/export/securedrop_export/disk/cli.py @@ -138,9 +138,7 @@ def get_volume(self) -> Union[Volume, MountedVolume]: except subprocess.CalledProcessError as ex: raise ExportException(sdstatus=Status.DEVICE_ERROR) from ex - def _get_supported_volume( - self, device: dict - ) -> Optional[Union[Volume, MountedVolume]]: + def _get_supported_volume(self, device: dict) -> Optional[Union[Volume, MountedVolume]]: """ Given JSON-formatted lsblk output for one device, determine if it is suitably partitioned and return it to be used for export, @@ -196,9 +194,7 @@ def _get_supported_volume( EncryptionScheme.LUKS, EncryptionScheme.VERACRYPT, ): - logger.debug( - f"{device_name} is unlocked but unmounted; attempting mount" - ) + logger.debug(f"{device_name} is unlocked but unmounted; attempting mount") return self._mount_volume(vol, mapped_name) # Locked VeraCrypt drives are rejected here (EncryptionScheme.UNKNOWN) diff --git a/export/securedrop_export/disk/status.py b/export/securedrop_export/disk/status.py index 59f868672..7f8dc0a2c 100644 --- a/export/securedrop_export/disk/status.py +++ b/export/securedrop_export/disk/status.py @@ -8,9 +8,7 @@ class Status(BaseStatus): "INVALID_DEVICE_DETECTED" # Not encrypted, or partitions too many/too nested ) - MULTI_DEVICE_DETECTED = ( - "MULTI_DEVICE_DETECTED" # Multiple devices are not currently supported - ) + MULTI_DEVICE_DETECTED = "MULTI_DEVICE_DETECTED" # Multiple devices are not currently supported DEVICE_LOCKED = "DEVICE_LOCKED" # One valid device detected, and it's locked DEVICE_WRITABLE = ( @@ -31,6 +29,4 @@ class Status(BaseStatus): # Export succeeds but drives were not properly unmounted (generic) ERROR_EXPORT_CLEANUP = "ERROR_EXPORT_CLEANUP" - DEVICE_ERROR = ( - "DEVICE_ERROR" # Something went wrong while trying to check the device - ) + DEVICE_ERROR = "DEVICE_ERROR" # Something went wrong while trying to check the device diff --git a/export/securedrop_export/main.py b/export/securedrop_export/main.py index 812203f98..68b29177a 100755 --- a/export/securedrop_export/main.py +++ b/export/securedrop_export/main.py @@ -99,10 +99,7 @@ def _configure_logging(): log_file = os.path.join(DEFAULT_HOME, LOG_DIR_NAME, EXPORT_LOG_FILENAME) # set logging format - log_fmt = ( - "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " - "%(levelname)s: %(message)s" - ) + log_fmt = "%(asctime)s - %(name)s:%(lineno)d(%(funcName)s) " "%(levelname)s: %(message)s" formatter = logging.Formatter(log_fmt) handler = TimedRotatingFileHandler(log_file) @@ -143,15 +140,11 @@ def _start_service(archive: Archive) -> BaseStatus: # Export routines elif archive.command is Command.EXPORT: return ExportService(archive).export() - elif ( - archive.command is Command.CHECK_USBS or archive.command is Command.CHECK_VOLUME - ): + elif archive.command is Command.CHECK_USBS or archive.command is Command.CHECK_VOLUME: return ExportService(archive).scan_all_devices() # Unreachable - raise ExportException( - f"unreachable: unknown submission.command value: {archive.command}" - ) + raise ExportException(f"unreachable: unknown submission.command value: {archive.command}") def _exit_gracefully(archive: Archive, status: BaseStatus): @@ -185,9 +178,7 @@ def _write_status(status: BaseStatus): # First we will log errors from stderr elsewhere tmp_stderr = io.StringIO() tmp_stdout = io.StringIO() - with contextlib.redirect_stderr(tmp_stderr), contextlib.redirect_stdout( - tmp_stdout - ): + with contextlib.redirect_stderr(tmp_stderr), contextlib.redirect_stdout(tmp_stdout): sys.stderr.flush() sys.stdout.flush() if len(tmp_stderr.getvalue()) > 0: diff --git a/export/securedrop_export/print/service.py b/export/securedrop_export/print/service.py index 0583346c1..59b390e6d 100644 --- a/export/securedrop_export/print/service.py +++ b/export/securedrop_export/print/service.py @@ -81,9 +81,7 @@ def _wait_for_print(self): printer_idle_string = "printer {} is idle".format(self.printer_name) while True: try: - logger.info( - "Running lpstat waiting for printer {}".format(self.printer_name) - ) + logger.info("Running lpstat waiting for printer {}".format(self.printer_name)) output = subprocess.check_output(["lpstat", "-p", self.printer_name]) if printer_idle_string in output.decode("utf-8"): logger.info("Print completed") @@ -162,9 +160,7 @@ def _get_printer_uri(self) -> str: def _install_printer_ppd(self, uri): if not any(x in uri for x in self.SUPPORTED_PRINTERS): - logger.error( - "Cannot install printer ppd for unsupported printer: {}".format(uri) - ) + logger.error("Cannot install printer ppd for unsupported printer: {}".format(uri)) raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED) if self.BROTHER in uri: @@ -269,9 +265,7 @@ def _print_file(self, file_to_print): # will see an error message. self._wait_for_print() - def safe_check_call( - self, command: str, error_status: Status, ignore_stderr_startswith=None - ): + def safe_check_call(self, command: str, error_status: Status, ignore_stderr_startswith=None): """ Wrap subprocess.check_output to ensure we wrap CalledProcessError and return our own exception, and log the error messages. diff --git a/export/setup.py b/export/setup.py index c2e5cbebd..523dfe09a 100644 --- a/export/setup.py +++ b/export/setup.py @@ -24,7 +24,5 @@ "Intended Audience :: Developers", "Operating System :: OS Independent", ], - entry_points={ - "console_scripts": ["send-to-usb = securedrop_export.main:entrypoint"] - }, + entry_points={"console_scripts": ["send-to-usb = securedrop_export.main:entrypoint"]}, ) diff --git a/export/tests/disk/test_cli.py b/export/tests/disk/test_cli.py index 7d0950eb4..26366934b 100644 --- a/export/tests/disk/test_cli.py +++ b/export/tests/disk/test_cli.py @@ -155,9 +155,7 @@ def test_get_volume_empty_udisks_does_not_keep_checking(self, mock_sp, mock_gsv) @mock.patch("subprocess.check_output") def test__get_supported_volume_success_no_mount(self, mock_sp, input): # mock subprocess results on the _is_it_veracrypt method - mock_sp.return_value = "IdType: crypto_TCRYPT\n".encode( - "utf-8" - ) + mock_sp.return_value = "IdType: crypto_TCRYPT\n".encode("utf-8") vol = self.cli._get_supported_volume(input) assert vol @@ -381,9 +379,7 @@ def test_write_to_disk_error_still_does_cleanup(self, mock_call): submission = Archive("testfile") with pytest.raises(ExportException): - self.cli.write_data_to_device( - vol, submission.tmpdir, submission.target_dirname - ) + self.cli.write_data_to_device(vol, submission.tmpdir, submission.target_dirname) self.cli.cleanup.assert_called_once() patch.stop() diff --git a/export/tests/disk/test_service.py b/export/tests/disk/test_service.py index 66943f481..45b95b09d 100644 --- a/export/tests/disk/test_service.py +++ b/export/tests/disk/test_service.py @@ -76,9 +76,7 @@ def test_scan_all_device_is_locked(self): assert status == Status.DEVICE_LOCKED def test_scan_all_no_devices_connected(self): - self.mock_cli.get_volume.side_effect = ExportException( - sdstatus=Status.NO_DEVICE_DETECTED - ) + self.mock_cli.get_volume.side_effect = ExportException(sdstatus=Status.NO_DEVICE_DETECTED) assert self.service.scan_all_devices() == Status.NO_DEVICE_DETECTED @@ -121,9 +119,7 @@ def test_export_write_error(self): def test_export_unlock_error(self): self.mock_cli.get_volume.return_value = self.mock_luks_volume_unmounted - self.mock_cli.unlock_volume.side_effect = ExportException( - sdstatus=Status.ERROR_UNLOCK_LUKS - ) + self.mock_cli.unlock_volume.side_effect = ExportException(sdstatus=Status.ERROR_UNLOCK_LUKS) assert self.service.export() == Status.ERROR_UNLOCK_LUKS diff --git a/export/tests/print/test_service.py b/export/tests/print/test_service.py index 46bf6dc82..a2805813c 100644 --- a/export/tests/print/test_service.py +++ b/export/tests/print/test_service.py @@ -167,9 +167,7 @@ def test_install_printer_ppd_error_not_supported(self, mocker): mocker.patch("subprocess.run", side_effect=CalledProcessError(1, "run")) with pytest.raises(ExportException) as ex: - self.service._install_printer_ppd( - "usb://Not/Supported?serial=A00000A000000" - ) + self.service._install_printer_ppd("usb://Not/Supported?serial=A00000A000000") assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED @@ -234,9 +232,7 @@ def test__wait_for_print_print_exception(self, mock_time, mock_subprocess): assert ex.value.sdstatus is Status.ERROR_PRINT - @mock.patch( - "subprocess.check_output", return_value=b"printer sdw-printer is busy\n" - ) + @mock.patch("subprocess.check_output", return_value=b"printer sdw-printer is busy\n") def test__wait_for_print_timeout_exception(self, mock_output): self.service.printer_wait_timeout = 1 @@ -270,18 +266,14 @@ def test__check_printer_setup_error_no_printer(self, mock_output): @mock.patch( "subprocess.check_output", - return_value=SAMPLE_OUTPUT_BROTHER_PRINTER - + b"\n" - + SAMPLE_OUTPUT_LASERJET_PRINTER, + return_value=SAMPLE_OUTPUT_BROTHER_PRINTER + b"\n" + SAMPLE_OUTPUT_LASERJET_PRINTER, ) def test__check_printer_setup_error_too_many_printers(self, mock_output): with pytest.raises(ExportException) as ex: self.service._check_printer_setup() assert ex.value.sdstatus is Status.ERROR_MULTIPLE_PRINTERS_FOUND - @mock.patch( - "subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER - ) + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER) def test__check_printer_setup_error_unsupported_printer(self, mock_output): with pytest.raises(ExportException) as ex: self.service._check_printer_setup() @@ -305,9 +297,7 @@ def test__get_printer_uri_error(self, mocked_subprocess): self.service._get_printer_uri() assert ex.value.sdstatus is Status.ERROR_PRINTER_URI - @mock.patch( - "subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER - ) + @mock.patch("subprocess.check_output", return_value=SAMPLE_OUTPUT_UNSUPPORTED_PRINTER) def test__get_printer_uri_error_unsupported(self, mocked_subprocess): with pytest.raises(ExportException) as ex: self.service._get_printer_uri() @@ -315,9 +305,7 @@ def test__get_printer_uri_error_unsupported(self, mocked_subprocess): def test__install_printer_ppd_error_unsupported_uri(self): with pytest.raises(ExportException) as ex: - self.service._install_printer_ppd( - "usb://YOURE_NOT_MY_REAL_PRINTER/A00000A000000" - ) + self.service._install_printer_ppd("usb://YOURE_NOT_MY_REAL_PRINTER/A00000A000000") assert ex.value.sdstatus is Status.ERROR_PRINTER_NOT_SUPPORTED @mock.patch("securedrop_export.print.service.Service._wait_for_print") @@ -349,9 +337,10 @@ def test__print_all_files(self, mock_wait): def test_open_office_file_convert_to_pdf(self, mock_wait): file = "/tmp/definitely-an-office-file.odt" - with mock.patch.object(self.service, "safe_check_call") as scc, mock.patch( - "securedrop_export.print.service.logger.info" - ) as log: + with ( + mock.patch.object(self.service, "safe_check_call") as scc, + mock.patch("securedrop_export.print.service.logger.info") as log, + ): self.service._print_file(file) assert scc.call_count == 2 @@ -389,9 +378,7 @@ def test_safe_check_call_has_error_in_stderr(self): mock.patch("subprocess.run") with mock.patch("subprocess.run"), pytest.raises(ExportException) as ex: - self.service.safe_check_call( - command="ls", error_status=Status.PRINT_TEST_PAGE_SUCCESS - ) + self.service.safe_check_call(command="ls", error_status=Status.PRINT_TEST_PAGE_SUCCESS) assert ex.value.sdstatus is Status.PRINT_TEST_PAGE_SUCCESS @@ -406,9 +393,10 @@ def test_safe_check_call_has_error_in_stderr(self): def test__wait_for_print_waits_correctly(self, mock_subprocess, mock_time): file = "/tmp/happy-to-print-you.pdf" - with mock.patch.object(self.service, "safe_check_call") as scc, mock.patch( - "securedrop_export.print.service.logger.info" - ) as log: + with ( + mock.patch.object(self.service, "safe_check_call") as scc, + mock.patch("securedrop_export.print.service.logger.info") as log, + ): self.service._print_file(file) assert scc.call_count == 1 diff --git a/export/tests/test_archive.py b/export/tests/test_archive.py index c1ae85fb2..a3c1db597 100644 --- a/export/tests/test_archive.py +++ b/export/tests/test_archive.py @@ -44,22 +44,15 @@ def test_extract_tarball(): submission = Archive(archive_path).extract_tarball() assert oct(os.stat(submission.tmpdir).st_mode) == "0o40700" - extracted_file_path = os.path.join( - submission.tmpdir, "some", "dirs", "file.txt" - ) + extracted_file_path = os.path.join(submission.tmpdir, "some", "dirs", "file.txt") assert os.path.exists(extracted_file_path) assert oct(os.stat(extracted_file_path).st_mode) == "0o100600" # Subdirectories that are added as members are extracted with 700 permissions - assert ( - oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" - ) + assert oct(os.stat(os.path.join(submission.tmpdir, "some")).st_mode) == "0o40700" # Subdirectories that are not added as members are extracted with 700 permissions # because os.umask(0o077) is set in the Archive constructor. - assert ( - oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) - == "0o40700" - ) + assert oct(os.stat(os.path.join(submission.tmpdir, "some", "dirs")).st_mode) == "0o40700" def test_extract_tarball_with_symlink(): @@ -113,9 +106,7 @@ def test_extract_tarball_raises_if_doing_path_traversal(): metadata_file_info.size = len(metadata_str) archive.addfile(metadata_file_info, metadata_bytes) content = b"test" - traversed_file_info = tarfile.TarInfo( - "../../../../../../../../../tmp/traversed" - ) + traversed_file_info = tarfile.TarInfo("../../../../../../../../../tmp/traversed") traversed_file_info.size = len(content) archive.addfile(traversed_file_info, BytesIO(content)) archive.close() @@ -288,9 +279,7 @@ def test_extract_tarball_raises_if_name_has_unsafe_absolute_path_with_symlink(): archive_path = os.path.join(temp_dir, "archive.sd-export") symlink_path = os.path.join(temp_dir, "symlink") - os.system( - f"ln -s {tmp}/unsafe {symlink_path}" - ) # create symlink to "/tmp/unsafe" + os.system(f"ln -s {tmp}/unsafe {symlink_path}") # create symlink to "/tmp/unsafe" with tarfile.open(archive_path, "w:gz") as archive: metadata = { diff --git a/export/tests/test_main.py b/export/tests/test_main.py index dd1306a85..bcee28aa5 100644 --- a/export/tests/test_main.py +++ b/export/tests/test_main.py @@ -69,27 +69,27 @@ def test__exit_gracefully_no_exception(self, capsys): side_effect=FileNotFoundError("oh no", 0), ) def test__exit_gracefully_even_with_cleanup_exception(self, mock_rm, capsys): - with mock.patch( - "sys.argv", ["qvm-send-to-usb", self.export_archive_path] - ), mock.patch( - "securedrop_export.main._start_service", - return_value=ExportStatus.SUCCESS_EXPORT, - ), pytest.raises( - SystemExit - ) as sysexit: + with ( + mock.patch("sys.argv", ["qvm-send-to-usb", self.export_archive_path]), + mock.patch( + "securedrop_export.main._start_service", + return_value=ExportStatus.SUCCESS_EXPORT, + ), + pytest.raises(SystemExit) as sysexit, + ): entrypoint() assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) def test_entrypoint_success(self, capsys): - with mock.patch( - "sys.argv", ["qvm-send-to-usb", self.export_archive_path] - ), mock.patch( - "securedrop_export.main._start_service", - return_value=ExportStatus.SUCCESS_EXPORT, - ), pytest.raises( - SystemExit - ) as sysexit: + with ( + mock.patch("sys.argv", ["qvm-send-to-usb", self.export_archive_path]), + mock.patch( + "securedrop_export.main._start_service", + return_value=ExportStatus.SUCCESS_EXPORT, + ), + pytest.raises(SystemExit) as sysexit, + ): entrypoint() assert self._did_exit_gracefully(sysexit, capsys, ExportStatus.SUCCESS_EXPORT) @@ -110,12 +110,10 @@ def test__write_status_will_not_write_bad_value(self, invalid_status, capsys): assert captured.out == "" def test_entrypoint_success_start_service(self): - with mock.patch( - "sys.argv", ["qvm-send-to-usb", self.export_archive_path] - ), mock.patch( - "securedrop_export.main._start_service" - ) as mock_service, pytest.raises( - SystemExit + with ( + mock.patch("sys.argv", ["qvm-send-to-usb", self.export_archive_path]), + mock.patch("securedrop_export.main._start_service") as mock_service, + pytest.raises(SystemExit), ): entrypoint() @@ -134,14 +132,13 @@ def test_validate_metadata(self): side_effect=ValueError("A tarball problem!"), ) def test_entrypoint_failure_extraction(self, mock_extract, capsys): - with mock.patch( - "sys.argv", ["qvm-send-to-usb", self.export_archive_path] - ), pytest.raises(SystemExit) as sysexit: + with ( + mock.patch("sys.argv", ["qvm-send-to-usb", self.export_archive_path]), + pytest.raises(SystemExit) as sysexit, + ): entrypoint() - assert self._did_exit_gracefully( - sysexit, capsys, ArchiveStatus.ERROR_EXTRACTION - ) + assert self._did_exit_gracefully(sysexit, capsys, ArchiveStatus.ERROR_EXTRACTION) @mock.patch( "securedrop_export.main._configure_logging", @@ -167,9 +164,10 @@ def test_entrypoint_fails_unexpected(self, mock_mkdir, capsys): assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_GENERIC) def test_entrypoint_archive_path_fails(self, capsys): - with mock.patch( - "sys.argv", ["qvm-send-to-usb", "THIS_FILE_DOES_NOT_EXIST.sd-export"] - ), pytest.raises(SystemExit) as sysexit: + with ( + mock.patch("sys.argv", ["qvm-send-to-usb", "THIS_FILE_DOES_NOT_EXIST.sd-export"]), + pytest.raises(SystemExit) as sysexit, + ): entrypoint() assert self._did_exit_gracefully(sysexit, capsys, Status.ERROR_FILE_NOT_FOUND) @@ -192,9 +190,10 @@ def test__start_service_calls_correct_services(self, command): mock_submission = Archive("mock_submission.sd-export") mock_submission.command = command - with mock.patch("securedrop_export.main.PrintService") as ps, mock.patch( - "securedrop_export.main.ExportService" - ) as es: + with ( + mock.patch("securedrop_export.main.PrintService") as ps, + mock.patch("securedrop_export.main.ExportService") as es, + ): _start_service(mock_submission) if command in [Command.PRINT, Command.PRINTER_TEST, Command.PRINTER_PREFLIGHT]: diff --git a/log/example.py b/log/example.py index 6b7a82876..b1a1f2792 100644 --- a/log/example.py +++ b/log/example.py @@ -1,8 +1,9 @@ import logging -from securedrop_log import SecureDropLog -import ex2 import ex1 +import ex2 + +from securedrop_log import SecureDropLog def main(): diff --git a/log/journal-example.py b/log/journal-example.py index 3d53f4eba..11b200ce9 100644 --- a/log/journal-example.py +++ b/log/journal-example.py @@ -1,8 +1,10 @@ import logging -from securedrop_log import SecureDropLog -from systemd import journal # type: ignore[import] import select +from systemd import journal # type: ignore[import] + +from securedrop_log import SecureDropLog + def main(): handler = SecureDropLog("workvm", "logging") diff --git a/log/sd-rsyslog b/log/sd-rsyslog index e79e86005..545f7a9e9 100644 --- a/log/sd-rsyslog +++ b/log/sd-rsyslog @@ -25,11 +25,11 @@ See the License for the specific language governing permissions and limitations under the License. """ -import sys -import os -import logging import configparser -from subprocess import Popen, PIPE +import logging +import os +import sys +from subprocess import PIPE, Popen # Global definitions specific to your plugin process = None diff --git a/log/securedrop-log b/log/securedrop-log index 5fd3a23e4..8f4ab344e 100755 --- a/log/securedrop-log +++ b/log/securedrop-log @@ -2,13 +2,13 @@ from __future__ import print_function -import tempfile +import errno import io -import sys import os -import errno import shutil import subprocess +import sys +import tempfile from datetime import datetime diff --git a/log/securedrop-log-saver b/log/securedrop-log-saver index 3de1c7638..9d13ab75f 100755 --- a/log/securedrop-log-saver +++ b/log/securedrop-log-saver @@ -1,9 +1,10 @@ #!/opt/venvs/securedrop-log/bin/python3 +import errno import os import sys + import redis -import errno def main(): diff --git a/log/securedrop-redis-log b/log/securedrop-redis-log index 740c2f810..8d331580c 100755 --- a/log/securedrop-redis-log +++ b/log/securedrop-redis-log @@ -2,16 +2,17 @@ from __future__ import print_function -import tempfile +import errno import io -import sys import os -import errno import shutil import subprocess -import redis +import sys +import tempfile from datetime import datetime +import redis + def sanitize_line(untrusted_line): line = bytearray(untrusted_line) diff --git a/log/securedrop_log/__init__.py b/log/securedrop_log/__init__.py index 4d67d5a8d..32d24e5de 100644 --- a/log/securedrop_log/__init__.py +++ b/log/securedrop_log/__init__.py @@ -1,6 +1,6 @@ -from logging import StreamHandler -from subprocess import Popen, PIPE import threading +from logging import StreamHandler +from subprocess import PIPE, Popen from typing import Dict diff --git a/log/tests/test_logger.py b/log/tests/test_logger.py index b7bed2966..59153e665 100644 --- a/log/tests/test_logger.py +++ b/log/tests/test_logger.py @@ -1,19 +1,19 @@ -from unittest import mock, TestCase +from unittest import TestCase, mock import securedrop_log -@mock.patch('securedrop_log.Popen') +@mock.patch("securedrop_log.Popen") class TestLogger(TestCase): def test_singleton_there_can_be_only_one(self, mock_popen): - logger1 = securedrop_log.SecureDropLog('name', 'logvmname') - logger2 = securedrop_log.SecureDropLog('name', 'logvmname') + logger1 = securedrop_log.SecureDropLog("name", "logvmname") + logger2 = securedrop_log.SecureDropLog("name", "logvmname") self.assertEqual(logger1.qubes_log, logger2.qubes_log) def test_singleton_raises_exception_for_dev(self, mock_popen): # No exception raised - securedrop_log.SecureDropLog('name', 'logvmname') + securedrop_log.SecureDropLog("name", "logvmname") with self.assertRaises(Exception): - securedrop_log.SecureDropLog('name2', 'logvmname2') + securedrop_log.SecureDropLog("name2", "logvmname2") diff --git a/proxy/securedrop_proxy/json.py b/proxy/securedrop_proxy/json.py index aa8f1c411..24babe912 100644 --- a/proxy/securedrop_proxy/json.py +++ b/proxy/securedrop_proxy/json.py @@ -3,6 +3,7 @@ This was informational finding TOB-SDW-014 in the 2020 audit. """ + import json dumps = json.dumps diff --git a/proxy/setup.py b/proxy/setup.py index c4ffc1db1..1bbabd8fb 100644 --- a/proxy/setup.py +++ b/proxy/setup.py @@ -1,4 +1,5 @@ import pkgutil + import setuptools with open("README.md", "r") as fh: diff --git a/proxy/tests/test_entrypoint.py b/proxy/tests/test_entrypoint.py index 0e5af9b92..488bce67d 100644 --- a/proxy/tests/test_entrypoint.py +++ b/proxy/tests/test_entrypoint.py @@ -33,11 +33,12 @@ def test_missing_config(self): self.assertFalse(os.path.exists(config_path)) output = None - with patch( - "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv, patch( # noqa: F841 - "sys.stdout", new_callable=io.StringIO - ) as mock_stdout: + with ( + patch( + "sys.argv", new_callable=lambda: ["sd-proxy", config_path] + ) as mock_argv, # noqa: F841 + patch("sys.stdout", new_callable=io.StringIO) as mock_stdout, + ): with self.assertRaises(SystemExit), sdhome(): entrypoint.start() output = mock_stdout.getvalue() @@ -85,11 +86,10 @@ def test_unwritable_log_folder(self): def test_wrong_number_of_arguments(self): with sdhome() as home: # noqa: F841 - with patch( - "sys.argv", new_callable=lambda: ["sd-proxy"] - ) as mock_argv, patch( # noqa: F841 - "sys.stdout", new_callable=io.StringIO - ) as mock_stdout: + with ( + patch("sys.argv", new_callable=lambda: ["sd-proxy"]) as mock_argv, # noqa: F841 + patch("sys.stdout", new_callable=io.StringIO) as mock_stdout, + ): with self.assertRaises(SystemExit): entrypoint.start() output = mock_stdout.getvalue() @@ -106,13 +106,15 @@ def test_empty_input(self): self.assertTrue(os.path.exists(config_path)) with sdhome() as home: # noqa: F841 - with patch( - "sys.stdin", new_callable=lambda: io.StringIO("") - ) as mock_stdin, patch( # noqa: F841 - "sys.stdout", new_callable=io.StringIO - ) as mock_stdout, patch( - "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv: # noqa: F841 + with ( + patch( + "sys.stdin", new_callable=lambda: io.StringIO("") + ) as mock_stdin, # noqa: F841 + patch("sys.stdout", new_callable=io.StringIO) as mock_stdout, + patch( + "sys.argv", new_callable=lambda: ["sd-proxy", config_path] + ) as mock_argv, # noqa: F841 + ): entrypoint.start() output = mock_stdout.getvalue() @@ -132,13 +134,16 @@ def test_json_response(self): } output = None - with sdhome() as home, patch( # noqa: F841 - "sys.stdin", new_callable=lambda: io.StringIO(json.dumps(test_input)) - ) as mock_stding, patch( # noqa: F841 - "sys.stdout", new_callable=io.StringIO - ) as mock_stdout, patch( - "sys.argv", new_callable=lambda: ["sd-proxy", config_path] - ) as mock_argv: # noqa: F841 + with ( + sdhome() as home, # noqa: F841 + patch( + "sys.stdin", new_callable=lambda: io.StringIO(json.dumps(test_input)) + ) as mock_stding, # noqa: F841 + patch("sys.stdout", new_callable=io.StringIO) as mock_stdout, + patch( + "sys.argv", new_callable=lambda: ["sd-proxy", config_path] + ) as mock_argv, # noqa: F841 + ): entrypoint.start() output = mock_stdout.getvalue() From 66f4118acd8f819fdd38c0b7dec8c84cdc0b00e2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 16 Feb 2024 12:35:36 -0500 Subject: [PATCH 669/751] Add shellcheck Copy the `shellcheck.sh` script from the SecureDrop server repository and add it to the central `make lint` target. I added SC2164 as a global exclusion since we don't really care about `cd` potentially failing. The following fixes are being made: * client/.githooks/pre-commit: Use $() instead of backticks. * debian/setup-venv.sh: Ignore quoting words, all the variables are a single word only. * proxy/entrypoint.sh: Adjust shebang since we use bashisms. * scripts/build-debs.sh: Set variable and then export it * scripts/fixup-changelog.sh: Quote our variables, don't use `! -z`. Fixes #814. --- .github/workflows/ci.yml | 2 +- Makefile | 6 +++++- client/.githooks/pre-commit | 2 +- debian/securedrop-keyring.preinst | 3 +-- debian/setup-venv.sh | 1 + poetry.lock | 15 +++++++++++++- proxy/entrypoint.sh | 2 +- pyproject.toml | 1 + scripts/build-debs.sh | 3 ++- scripts/fixup-changelog.sh | 4 ++-- scripts/shellcheck.sh | 34 +++++++++++++++++++++++++++++++ update_version.sh | 2 +- 12 files changed, 64 insertions(+), 11 deletions(-) create mode 100755 scripts/shellcheck.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf2368cb9..31157df22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: container: debian:${{ matrix.debian_version }} steps: - run: | - apt-get update && apt-get install --yes git make + apt-get update && apt-get install --yes git make file - uses: actions/checkout@v4 - name: Install dependencies run: | diff --git a/Makefile b/Makefile index 56c891540..88c61eaa7 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ lint-desktop: ## Lint .desktop files find . -name *.desktop -type f -not -path '*/\.git/*' | xargs desktop-file-validate .PHONY: lint -lint: check-black check-isort bandit ## Run linters and formatters +lint: check-black check-isort bandit shellcheck ## Run linters and formatters .PHONY: fix fix: black isort ## Fix lint and formatting issues @@ -43,6 +43,10 @@ safety: ## Run safety dependency checks on build dependencies --ignore 62044 \ -r +.PHONY: shellcheck +shellcheck: ## Lint shell scripts + @poetry run ./scripts/shellcheck.sh + .PHONY: rust-lint rust-lint: ## Lint Rust code cargo fmt --check diff --git a/client/.githooks/pre-commit b/client/.githooks/pre-commit index 9c37df77b..5af313767 100755 --- a/client/.githooks/pre-commit +++ b/client/.githooks/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh -TOP=`git rev-parse --show-toplevel` +TOP=$(git rev-parse --show-toplevel) make -C "$TOP" check-strings diff --git a/debian/securedrop-keyring.preinst b/debian/securedrop-keyring.preinst index 2e0848099..e0362949b 100644 --- a/debian/securedrop-keyring.preinst +++ b/debian/securedrop-keyring.preinst @@ -1,5 +1,5 @@ #!/bin/bash - +# shellcheck disable=SC2064 set -e # Solution adapted from DKG's work on `deb.torproject.org-keyring` and @@ -31,4 +31,3 @@ if [ -e /etc/apt/trusted.gpg ] && which gpg >/dev/null; then fi #DEBHELPER# - diff --git a/debian/setup-venv.sh b/debian/setup-venv.sh index b5acb6dd0..7a818aaf1 100644 --- a/debian/setup-venv.sh +++ b/debian/setup-venv.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2086 set -euxo pipefail NAME=$1 diff --git a/poetry.lock b/poetry.lock index 6b9779518..86c5b3708 100644 --- a/poetry.lock +++ b/poetry.lock @@ -903,6 +903,19 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "shellcheck-py" +version = "0.9.0.6" +description = "Python wrapper around invoking shellcheck (https://www.shellcheck.net/)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "shellcheck_py-0.9.0.6-py2.py3-none-macosx_11_0_x86_64.whl", hash = "sha256:38d48a4e2279f5deac374574e7625cd53b7f615301f36b1b1fffd22105dc066d"}, + {file = "shellcheck_py-0.9.0.6-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:730235c4f92657884f8b343d5426e4dc28e9a6ba9ad54d469cd038e340ea5be0"}, + {file = "shellcheck_py-0.9.0.6-py2.py3-none-win_amd64.whl", hash = "sha256:d1d0c285e2c094813659e0920559a2892da598c1176da59cb4eb9e2f505e5ee8"}, + {file = "shellcheck_py-0.9.0.6.tar.gz", hash = "sha256:f83a0ee1e9762f787ab52e8a906e553b9583586c44e3f9730b6e635f296a69e8"}, +] + [[package]] name = "stevedore" version = "5.1.0" @@ -980,4 +993,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "a4319256f0a3818846eddef054452e7a568f61ef60273239934f9708abe94b7e" +content-hash = "cf9ebf9eb3a2f8942a0dbfcf47f699439e19b0f7e9aceb990e609eae35720e13" diff --git a/proxy/entrypoint.sh b/proxy/entrypoint.sh index 7ff5723d5..04b34fd33 100755 --- a/proxy/entrypoint.sh +++ b/proxy/entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash cd /home/user/projects/securedrop-proxy virtualenv .venv diff --git a/pyproject.toml b/pyproject.toml index b1d69a2b4..ac81d9c9b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ bandit = "*" black = "*" isort = "*" safety = "*" +shellcheck-py = "*" [tool.bandit] exclude_dirs = ["client/tests", "export/tests", "log/tests", "proxy/tests"] diff --git a/scripts/build-debs.sh b/scripts/build-debs.sh index a8e6e01f8..77f1bc0ec 100755 --- a/scripts/build-debs.sh +++ b/scripts/build-debs.sh @@ -29,13 +29,14 @@ if test -t 0; then fi # Look for the builder repo with our local wheels -export BUILDER=$(realpath "${BUILDER:-../securedrop-builder}") +BUILDER=$(realpath "${BUILDER:-../securedrop-builder}") if [[ ! -d $BUILDER ]]; then echo "Cannot find securedrop-builder repository, please check it out \ to ${BUILDER} or set the BUILDER variable" exit 1 fi +export BUILDER export DEBIAN_VERSION="${DEBIAN_VERSION:-bullseye}" export OCI_RUN_ARGUMENTS export OCI_BIN diff --git a/scripts/fixup-changelog.sh b/scripts/fixup-changelog.sh index df7c182be..88a79daa3 100755 --- a/scripts/fixup-changelog.sh +++ b/scripts/fixup-changelog.sh @@ -7,13 +7,13 @@ source /etc/os-release if [[ "$VERSION_CODENAME" == "" ]]; then # PRETTY_NAME="Debian GNU/Linux bookworm/sid" # Use awk to split on spaces and / - VERSION_CODENAME=$(echo $PRETTY_NAME | awk '{split($0, a, "[ /]"); print a[4]}') + VERSION_CODENAME=$(echo "$PRETTY_NAME" | awk '{split($0, a, "[ /]"); print a[4]}') fi VERSION=$(dpkg-parsechangelog -S Version) NIGHTLY="${NIGHTLY:-}" -if [[ ! -z $NIGHTLY ]]; then +if [[ -n $NIGHTLY ]]; then NEW_VERSION="${VERSION}.dev$(date +%Y%m%d%H%M%S)" else NEW_VERSION=$VERSION diff --git a/scripts/shellcheck.sh b/scripts/shellcheck.sh new file mode 100755 index 000000000..13b1c1f22 --- /dev/null +++ b/scripts/shellcheck.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +EXCLUDE_RULES="SC1091,SC2001,SC2164" + +# Omitting: +# - the `.git/` directory since its hooks won't pass # validation, and +# we don't maintain those scripts. +# - Python, JavaScript, YAML, HTML, SASS, PNG files because they're not shell scripts. +# - Cache directories +# - test results +FILES=$(find "." \ + \( \ + -path '*.mo' \ + -o -path '*.po' \ + -o -path '*.py' \ + -o -path '*.yml' \ + -o -path '*/.mypy_cache/*' \ + -o -path './.git' \ + -o -path './build/*' \ + -o -path './target' \ + \) -prune \ + -o -type f \ + -exec file --mime {} + \ + | awk '$2 ~ /x-shellscript/ { print $1 }' \ + | sed 's/://') +# Turn the multiline find output into a single space-separated line +FILES=$(echo "$FILES" | tr '\n' ' ') + +shellcheck --version +# $FILES intentionally unquoted so each file is passed as its own argument +# shellcheck disable=SC2086 +shellcheck -x --exclude="$EXCLUDE_RULES" $FILES diff --git a/update_version.sh b/update_version.sh index 53248f398..7416e201e 100755 --- a/update_version.sh +++ b/update_version.sh @@ -18,7 +18,7 @@ sed -i'' -r -e "s/^__version__ = \"(.*?)\"/__version__ = \"${NEW_VERSION}\"/" cl sed -i'' -r -e "s/^__version__ = \"(.*?)\"/__version__ = \"${NEW_VERSION}\"/" export/securedrop_export/__init__.py # Normalize version, convert any - to ~, e.g. 0.9.0-rc1 to 0.9.0~rc1 -DEB_VERSION=$(echo $NEW_VERSION | sed 's/-/~/g') +DEB_VERSION=$(echo "$NEW_VERSION" | sed 's/-/~/g') export DEBEMAIL="securedrop@freedom.press" export DEBFULLNAME="SecureDrop Team" From 06595652a33657631cead4949fc96768fb6fc87e Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 13 Nov 2023 18:12:57 -0500 Subject: [PATCH 670/751] Stop using pkg_resources pkg_resources is deprecated and we're supposed to use importlib.resources instead. Unfortunately it's very awkward to use because it wants to support being able to read from possibly compressed archives or other Python package distribution formats. Since our distribution mechanism is Debian packages, we can avoid all of this entirely and just read the files off disk like any other file. A new `load_relative_css` helper finds CSS files next to the file invoking the function. Take the opportunity to simplify font loading: instead of hardcoding each font, just load every TTF in the fonts/ directory by using a recursive glob. And then drop some tests that don't test anything useful Fixes #1672. Fixes #1836. --- client/securedrop_client/gui/auth/dialog.py | 6 ++-- .../gui/auth/sign_in/button.py | 6 ++-- .../gui/auth/sign_in/error_bar.py | 5 ++- client/securedrop_client/gui/base/checkbox.py | 6 ++-- client/securedrop_client/gui/base/dialogs.py | 9 +++--- .../gui/conversation/export/export_wizard.py | 16 ++++------ .../conversation/export/export_wizard_page.py | 11 +++---- client/securedrop_client/gui/main.py | 5 ++- .../securedrop_client/resources/__init__.py | 32 ++++++++++++------- client/tests/test_resources.py | 20 ------------ 10 files changed, 47 insertions(+), 69 deletions(-) diff --git a/client/securedrop_client/gui/auth/dialog.py b/client/securedrop_client/gui/auth/dialog.py index af3ee6f3f..290dc26ef 100644 --- a/client/securedrop_client/gui/auth/dialog.py +++ b/client/securedrop_client/gui/auth/dialog.py @@ -20,7 +20,6 @@ import logging from gettext import gettext as _ -from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt from PyQt5.QtGui import QBrush, QPalette from PyQt5.QtWidgets import ( @@ -40,7 +39,7 @@ from securedrop_client.gui.base import PasswordEdit from securedrop_client.gui.base.checkbox import SDCheckBox from securedrop_client.logic import Controller -from securedrop_client.resources import load_image +from securedrop_client.resources import load_image, load_relative_css logger = logging.getLogger(__name__) @@ -83,8 +82,7 @@ def __init__(self, parent: QWidget) -> None: form = QWidget() form.setObjectName("LoginDialog_form") - styles = resource_string(__name__, "dialog.css").decode("utf-8") - self.setStyleSheet(styles) + self.setStyleSheet(load_relative_css(__file__, "dialog.css")) form_layout = QVBoxLayout() form.setLayout(form_layout) diff --git a/client/securedrop_client/gui/auth/sign_in/button.py b/client/securedrop_client/gui/auth/sign_in/button.py index c27476dd1..8d219bc5a 100644 --- a/client/securedrop_client/gui/auth/sign_in/button.py +++ b/client/securedrop_client/gui/auth/sign_in/button.py @@ -19,11 +19,12 @@ from gettext import gettext as _ -from pkg_resources import resource_string from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor, QCursor from PyQt5.QtWidgets import QGraphicsDropShadowEffect, QPushButton +from securedrop_client.resources import load_relative_css + class SignInButton(QPushButton): """ @@ -36,8 +37,7 @@ def __init__(self) -> None: # Set css id self.setObjectName("SignInButton") - styles = resource_string(__name__, "button.css").decode("utf-8") - self.setStyleSheet(styles) + self.setStyleSheet(load_relative_css(__file__, "button.css")) self.setFixedHeight(40) self.setFixedWidth(140) diff --git a/client/securedrop_client/gui/auth/sign_in/error_bar.py b/client/securedrop_client/gui/auth/sign_in/error_bar.py index 03531d1aa..69eb71dc0 100644 --- a/client/securedrop_client/gui/auth/sign_in/error_bar.py +++ b/client/securedrop_client/gui/auth/sign_in/error_bar.py @@ -17,11 +17,11 @@ along with this program. If not, see . """ -from pkg_resources import resource_string from PyQt5.QtCore import QSize from PyQt5.QtWidgets import QHBoxLayout, QWidget from securedrop_client.gui.base import SecureQLabel, SvgLabel +from securedrop_client.resources import load_relative_css class LoginErrorBar(QWidget): @@ -33,8 +33,7 @@ def __init__(self) -> None: super().__init__() self.setObjectName("LoginErrorBar") - styles = resource_string(__name__, "error_bar.css").decode("utf-8") - self.setStyleSheet(styles) + self.setStyleSheet(load_relative_css(__file__, "error_bar.css")) # Set layout layout = QHBoxLayout(self) diff --git a/client/securedrop_client/gui/base/checkbox.py b/client/securedrop_client/gui/base/checkbox.py index 151890799..59d4e17ee 100644 --- a/client/securedrop_client/gui/base/checkbox.py +++ b/client/securedrop_client/gui/base/checkbox.py @@ -8,21 +8,21 @@ from gettext import gettext as _ -from pkg_resources import resource_string from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QCursor, QFont, QMouseEvent from PyQt5.QtWidgets import QCheckBox, QFrame, QHBoxLayout, QLabel, QWidget +from securedrop_client.resources import load_relative_css + class SDCheckBox(QWidget): clicked = pyqtSignal() - CHECKBOX_CSS = resource_string(__name__, "checkbox.css").decode("utf-8") PASSPHRASE_LABEL_SPACING = 1 def __init__(self) -> None: super().__init__() self.setObjectName("ShowPassphrase_widget") - self.setStyleSheet(self.CHECKBOX_CSS) + self.setStyleSheet(load_relative_css(__file__, "checkbox.css")) font = QFont() font.setLetterSpacing(QFont.AbsoluteSpacing, self.PASSPHRASE_LABEL_SPACING) diff --git a/client/securedrop_client/gui/base/dialogs.py b/client/securedrop_client/gui/base/dialogs.py index 740cce00f..af166b7b9 100644 --- a/client/securedrop_client/gui/base/dialogs.py +++ b/client/securedrop_client/gui/base/dialogs.py @@ -19,7 +19,6 @@ from gettext import gettext as _ -from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt from PyQt5.QtGui import QIcon, QKeyEvent, QPixmap from PyQt5.QtWidgets import ( @@ -34,13 +33,13 @@ ) from securedrop_client.gui.base.misc import SvgLabel -from securedrop_client.resources import load_movie +from securedrop_client.resources import load_movie, load_relative_css class ModalDialog(QDialog): - DIALOG_CSS = resource_string(__name__, "dialogs.css").decode("utf-8") - BUTTON_CSS = resource_string(__name__, "dialog_button.css").decode("utf-8") - ERROR_DETAILS_CSS = resource_string(__name__, "dialog_message.css").decode("utf-8") + DIALOG_CSS = load_relative_css(__file__, "dialogs.css") + BUTTON_CSS = load_relative_css(__file__, "dialog_button.css") + ERROR_DETAILS_CSS = load_relative_css(__file__, "dialog_message.css") MARGIN = 40 NO_MARGIN = 0 diff --git a/client/securedrop_client/gui/conversation/export/export_wizard.py b/client/securedrop_client/gui/conversation/export/export_wizard.py index 2043a5bd8..6750770bb 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard.py @@ -2,7 +2,6 @@ from gettext import gettext as _ from typing import List, Optional -from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt, pyqtSlot from PyQt5.QtGui import QIcon, QKeyEvent from PyQt5.QtWidgets import QAbstractButton # noqa: F401 @@ -20,7 +19,7 @@ PassphraseWizardPage, PreflightPage, ) -from securedrop_client.resources import load_movie +from securedrop_client.resources import load_movie, load_relative_css logger = logging.getLogger(__name__) @@ -34,8 +33,6 @@ class ExportWizard(QWizard): NO_MARGIN = 0 FILENAME_WIDTH_PX = 260 FILE_OPTIONS_FONT_SPACING = 1.6 - BUTTON_CSS = resource_string(__name__, "wizard_button.css").decode("utf-8") - WIZARD_CSS = resource_string(__name__, "wizard.css").decode("utf-8") # If the drive is unlocked, we don't need a passphrase; if we do need one, # it's populated later. @@ -97,6 +94,7 @@ def _style_buttons(self) -> None: self.button_animation = load_movie("activestate-wide.gif") self.button_animation.setScaledSize(QSize(32, 32)) self.button_animation.frameChanged.connect(self._animate_activestate) + button_stylesheet = load_relative_css(__file__, "wizard_button.css") # Buttons self.next_button = self.button(QWizard.WizardButton.NextButton) # type: QAbstractButton @@ -105,7 +103,7 @@ def _style_buttons(self) -> None: self.finish_button = self.button(QWizard.WizardButton.FinishButton) # type: QAbstractButton self.next_button.setObjectName("QWizardButton_PrimaryButton") - self.next_button.setStyleSheet(self.BUTTON_CSS) + self.next_button.setStyleSheet(button_stylesheet) self.next_button.setMinimumSize(QSize(142, 40)) self.next_button.setMaximumHeight(40) self.next_button.setIconSize(QSize(21, 21)) @@ -113,19 +111,19 @@ def _style_buttons(self) -> None: self.next_button.setFixedSize(QSize(142, 40)) self.cancel_button.setObjectName("QWizardButton_GenericButton") - self.cancel_button.setStyleSheet(self.BUTTON_CSS) + self.cancel_button.setStyleSheet(button_stylesheet) self.cancel_button.setMinimumSize(QSize(142, 40)) self.cancel_button.setMaximumHeight(40) self.cancel_button.setFixedSize(QSize(142, 40)) self.back_button.setObjectName("QWizardButton_GenericButton") - self.back_button.setStyleSheet(self.BUTTON_CSS) + self.back_button.setStyleSheet(button_stylesheet) self.back_button.setMinimumSize(QSize(142, 40)) self.back_button.setMaximumHeight(40) self.back_button.setFixedSize(QSize(142, 40)) self.finish_button.setObjectName("QWizardButton_GenericButton") - self.finish_button.setStyleSheet(self.BUTTON_CSS) + self.finish_button.setStyleSheet(button_stylesheet) self.finish_button.setMinimumSize(QSize(142, 40)) self.finish_button.setMaximumHeight(40) self.finish_button.setFixedSize(QSize(142, 40)) @@ -149,7 +147,7 @@ def _set_layout(self) -> None: title = ("Export %(summary)s") % {"summary": self.summary_text} self.setWindowTitle(title) self.setObjectName("QWizard_export") - self.setStyleSheet(self.WIZARD_CSS) + self.setStyleSheet(load_relative_css(__file__, "wizard.css")) self.setModal(False) self.setOptions( QWizard.NoBackButtonOnLastPage diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_page.py b/client/securedrop_client/gui/conversation/export/export_wizard_page.py index e83ecb1bd..e85b7c57c 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_page.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_page.py @@ -2,7 +2,6 @@ from gettext import gettext as _ from typing import Optional -from pkg_resources import resource_string from PyQt5.QtCore import QSize, Qt, pyqtSlot from PyQt5.QtGui import QColor, QFont, QPixmap from PyQt5.QtWidgets import ( @@ -21,7 +20,7 @@ from securedrop_client.gui.base.checkbox import SDCheckBox from securedrop_client.gui.base.misc import SvgLabel from securedrop_client.gui.conversation.export.export_wizard_constants import STATUS_MESSAGES, Pages -from securedrop_client.resources import load_movie +from securedrop_client.resources import load_movie, load_relative_css logger = logging.getLogger(__name__) @@ -47,9 +46,6 @@ class ExportWizardPage(QWizardPage): appears on recoverable error to help the user advance to the next stage) """ - WIZARD_CSS = resource_string(__name__, "wizard.css").decode("utf-8") - ERROR_DETAILS_CSS = resource_string(__name__, "wizard_message.css").decode("utf-8") - MARGIN = 40 PASSPHRASE_LABEL_SPACING = 0.5 NO_MARGIN = 0 @@ -94,7 +90,8 @@ def _build_layout(self) -> QVBoxLayout: Create parent layout, draw elements, return parent layout """ self.setObjectName("QWizard_export_page") - self.setStyleSheet(self.WIZARD_CSS) + self.setStyleSheet(load_relative_css(__file__, "wizard.css")) + parent_layout = QVBoxLayout(self) parent_layout.setContentsMargins(self.MARGIN, self.MARGIN, self.MARGIN, self.MARGIN) @@ -139,7 +136,7 @@ def _build_layout(self) -> QVBoxLayout: # Widget for displaying error messages (hidden by default) self.error_details = QLabel() self.error_details.setObjectName("QWizard_error_details") - self.error_details.setStyleSheet(self.ERROR_DETAILS_CSS) + self.error_details.setStyleSheet(load_relative_css(__file__, "wizard_message.css")) self.error_details.setContentsMargins( self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN, self.NO_MARGIN ) diff --git a/client/securedrop_client/gui/main.py b/client/securedrop_client/gui/main.py index 351e47bc3..237838af1 100644 --- a/client/securedrop_client/gui/main.py +++ b/client/securedrop_client/gui/main.py @@ -32,7 +32,7 @@ from securedrop_client.gui.auth import LoginDialog from securedrop_client.gui.widgets import LeftPane, MainView, TopPane from securedrop_client.logic import Controller -from securedrop_client.resources import load_css, load_font, load_icon +from securedrop_client.resources import load_all_fonts, load_css, load_icon logger = logging.getLogger(__name__) @@ -59,8 +59,7 @@ def __init__( place for details / message contents / forms. """ super().__init__() - load_font("Montserrat") - load_font("Source_Sans_Pro") + load_all_fonts() self.setStyleSheet(load_css("sdclient.css")) self.setWindowTitle(_("SecureDrop Client {}").format(__version__)) self.setWindowIcon(load_icon(self.icon)) diff --git a/client/securedrop_client/resources/__init__.py b/client/securedrop_client/resources/__init__.py index c55389307..ad19da4ec 100644 --- a/client/securedrop_client/resources/__init__.py +++ b/client/securedrop_client/resources/__init__.py @@ -18,33 +18,33 @@ along with this program. If not, see . """ -import os +from pathlib import Path from typing import Optional -from pkg_resources import resource_filename, resource_string from PyQt5.QtCore import QDir from PyQt5.QtGui import QFontDatabase, QIcon, QMovie, QPixmap from PyQt5.QtSvg import QSvgWidget +RESOURCES_DIR = Path(__file__).parent + # Add resource directories to the search path. -QDir.addSearchPath("images", resource_filename(__name__, "images")) -QDir.addSearchPath("css", resource_filename(__name__, "css")) +QDir.addSearchPath("images", str(RESOURCES_DIR / "images")) +QDir.addSearchPath("css", str(RESOURCES_DIR / "css")) -def path(name: str, resource_dir: str = "images/") -> str: +def path(name: str) -> str: """ Return the filename for the referenced image. Qt uses unix path conventions. """ - return resource_filename(__name__, resource_dir + name) + return str(RESOURCES_DIR / "images" / name) -def load_font(font_folder_name: str) -> None: - directory = resource_filename(__name__, "fonts/") + font_folder_name - for filename in os.listdir(directory): - if filename.endswith(".ttf"): - QFontDatabase.addApplicationFont(directory + "/" + filename) +def load_all_fonts() -> None: + """Load all the fonts in the fonts/ directory""" + for font in (RESOURCES_DIR / "fonts").glob("**/*.ttf"): + QFontDatabase.addApplicationFont(str(font.absolute())) def load_icon( @@ -134,7 +134,15 @@ def load_css(name: str) -> str: """ Return the contents of the referenced CSS file in the resources. """ - return resource_string(__name__, "css/" + name).decode("utf-8") + return (RESOURCES_DIR / "css" / name).read_text() + + +def load_relative_css(file: str, name: str) -> str: + """ + Load CSS that's in the same directory as the file calling this. + The first argument should be __name__ and the second is the name of the CSS + """ + return (Path(file).parent / name).read_text() def load_movie(name: str) -> QMovie: diff --git a/client/tests/test_resources.py b/client/tests/test_resources.py index e4279248c..496e3c460 100644 --- a/client/tests/test_resources.py +++ b/client/tests/test_resources.py @@ -9,16 +9,6 @@ from tests.helper import app # noqa: F401 -def test_path(mocker): - """ - Ensure the resource_filename function is called with the expected args and - the path function under test returns its result. - """ - r = mocker.patch("securedrop_client.resources.resource_filename", return_value="bar") - assert securedrop_client.resources.path("foo") == "bar" - r.assert_called_once_with(securedrop_client.resources.__name__, "images/foo") - - def test_load_icon(): """ Check the load_icon function returns the expected QIcon object. @@ -52,16 +42,6 @@ def test_load_image(): assert isinstance(result, QPixmap) -def test_load_css(mocker): - """ - Ensure the resource_string function is called with the expected args and - the load_css function returns its result. - """ - rs = mocker.patch("securedrop_client.resources.resource_string", return_value=b"foo") - assert "foo" == securedrop_client.resources.load_css("foo") - rs.assert_called_once_with(securedrop_client.resources.__name__, "css/foo") - - def test_load_movie(): """ Check the load_movie function returns the expected QMovie object. From d0a47987a1a5774608d91b73c197de482eab3d79 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 16 Feb 2024 12:19:51 -0500 Subject: [PATCH 671/751] Remove gvfs-bin dependency This was deprecated in bullseye and removed in bookworm. It provided the `gvfs-copy` and `gvfs-rename` commands, which I couldn't find any usage of in our code. Fixes #1787. --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 6ad809729..a6676de17 100644 --- a/debian/control +++ b/debian/control @@ -40,7 +40,7 @@ Description: This is securedrop Qubes proxy service Package: securedrop-workstation-config Architecture: all -Depends: nautilus, gvfs-bin, securedrop-keyring +Depends: nautilus, securedrop-keyring Description: This is the SecureDrop workstation template configuration package. This package provides dependencies and configuration for the Qubes SecureDrop workstation VM Templates. From d7b54f0d7bce0e07fde9805f8510c4d76a0e8d39 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 7 Feb 2024 15:16:11 -0500 Subject: [PATCH 672/751] Have CI run piuparts piuparts tests package installation, upgrade and removal. We don't care that much about the last one so it's just a warning for now. For each package, piuparts will install the package CI just built and ensure that goes smoothly, making sure all the dependencies are present and the postinst works. Issues that were found are being fixed in the next commit. At a later stage, once the released packages are passing piuparts too, we can have it automatically grab the latest package from apt.freedom.press, install that, and then test the upgrade path to the new CI-built packages. This CI setup relies on running docker-in-docker, which is hacky but seems to work. Unfortunately it doesn't work for the client (starts apparmor), workstation-config (starts systemd) and workstation-viewer (pulls in grsec kernel). In the future we can look at switching into a chrooted setup that might fix the last two. Getting this to work in GitHub Actions was inspired by but I didn't really copy any code. Refs #1785. --- .github/workflows/build.yml | 38 +++++++++++++++++++++- .github/workflows/piuparts/Dockerfile | 9 +++++ .github/workflows/piuparts/run-piuparts.sh | 19 +++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/piuparts/Dockerfile create mode 100644 .github/workflows/piuparts/run-piuparts.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 781e85df1..e9a01498c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,7 +36,7 @@ jobs: PKG_DIR=../proxy make -C securedrop-builder requirements git config --global --add safe.directory "$GITHUB_WORKSPACE" git diff --ignore-matching-lines=# --exit-code - + build-debs: strategy: @@ -119,3 +119,39 @@ jobs: echo "Diffoscoping $deb" diffoscope build-${{ matrix.debian_version }}/$deb build2-${{ matrix.debian_version }}/$deb done; + + piuparts: + strategy: + fail-fast: false + matrix: + # TODO: client sets up apparmor, which doesn't work in our CI setup + # TODO: workstation-config pulls in systemd, which doesn't work + # TODO: workstation-viewer pulls in grsec and qubes packages + package: + - export + - keyring + - log + - proxy + debian_version: + - bullseye + - bookworm + runs-on: ubuntu-latest + needs: + - build-debs + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + pattern: "build-${{ matrix.debian_version }}" + - name: Run piuparts + run: | + # We need to run it as docker-in-docker + docker run \ + -v "/var/lib/docker:/var/lib/docker" \ + -v "/var/run/docker.sock:/var/run/docker.sock" \ + -v "/$(pwd)/keyring:/keyring" \ + -v "/$(pwd)/build-${{ matrix.debian_version }}:/build" \ + -v "/$(pwd)/.github/workflows/piuparts:/piuparts" \ + -e DISTRO=${{ matrix.debian_version }} \ + -e PACKAGE=${{ matrix.package }} \ + debian:${{ matrix.debian_version }} bash /piuparts/run-piuparts.sh diff --git a/.github/workflows/piuparts/Dockerfile b/.github/workflows/piuparts/Dockerfile new file mode 100644 index 000000000..127245f58 --- /dev/null +++ b/.github/workflows/piuparts/Dockerfile @@ -0,0 +1,9 @@ +ARG DISTRO=bullseye +FROM debian:$DISTRO + +RUN apt-get update && apt-get upgrade --yes && apt-get install -y ca-certificates +# FIXME: Do this to fool piuparts into thinking we didn't remove /opt during +# the package purge. Why does purging our packages not work properly? +RUN rm -rf /opt +# CI manifest will copy keyring into the build directory +COPY securedrop-keyring.gpg /usr/share/keyrings diff --git a/.github/workflows/piuparts/run-piuparts.sh b/.github/workflows/piuparts/run-piuparts.sh new file mode 100644 index 000000000..0f659b3e1 --- /dev/null +++ b/.github/workflows/piuparts/run-piuparts.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -euxo pipefail +# Runs inside the container +apt-get update && apt-get install --yes piuparts docker.io + +cd /piuparts + +cp /keyring/securedrop-keyring.gpg . +docker build . --build-arg DISTRO=$DISTRO -t ourimage + +# TODO: Our currently released packages don't install with piuparts, so we pass +# --no-upgrade-test to avoid installing them and testing the upgrade path. Once +# they do we can remove that line. +piuparts --docker-image ourimage \ + --distribution $DISTRO \ + --extra-repo 'deb [signed-by=/usr/share/keyrings/securedrop-keyring.gpg] https://apt.freedom.press bullseye main' \ + --warn-on-leftovers-after-purge \ + --no-upgrade-test \ + /build/securedrop-${PACKAGE}*.deb From a56b8663568e83a121ec22b975fa9e09b2475494 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 7 Feb 2024 16:55:09 -0500 Subject: [PATCH 673/751] Fix issues caught by piuparts Both -client and -export were missing dependencies on desktop-file-utils, which is needed for the `update-desktop-database` call in the postinst. -export also needed shared-mime-info. As far as I can tell, the -dev and libtool-bin dependencies in -export are unnecessary; we aren't compiling any C/C++ code at runtime that should need them. Finally, make the postrm commands optional per , which states that "There is no guarantee that package dependencies will be available when postrm is run". --- debian/control | 5 +++-- debian/securedrop-export.postrm | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/debian/control b/debian/control index a6676de17..bab91e23e 100644 --- a/debian/control +++ b/debian/control @@ -9,12 +9,13 @@ X-Python3-Version: >= 3.5 Package: securedrop-client Architecture: all -Depends: ${python3:Depends},${misc:Depends}, python3-pyqt5, python3-pyqt5.qtsvg, apparmor-utils +Depends: ${python3:Depends},${misc:Depends}, python3-pyqt5, python3-pyqt5.qtsvg, apparmor-utils, desktop-file-utils Description: securedrop client for qubes workstation Package: securedrop-export Architecture: all -Depends: ${python3:Depends}, ${misc:Depends}, udisks2, cups, printer-driver-brlaser, printer-driver-hpcups, system-config-printer, xpp, libcups2-dev, python3-dev, libtool-bin, unoconv, gnome-disk-utility +Depends: ${python3:Depends}, ${misc:Depends}, udisks2, cups, printer-driver-brlaser, printer-driver-hpcups, system-config-printer, xpp, libcups2, unoconv, gnome-disk-utility, + desktop-file-utils, shared-mime-info Description: Submission export scripts for SecureDrop Workstation This package provides scripts used by the SecureDrop Qubes Workstation to export submissions from the client to external storage, via the sd-export diff --git a/debian/securedrop-export.postrm b/debian/securedrop-export.postrm index 0753737d1..4f3c377d3 100644 --- a/debian/securedrop-export.postrm +++ b/debian/securedrop-export.postrm @@ -22,8 +22,14 @@ set -e case "$1" in purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) - update-desktop-database /usr/share/applications - update-mime-database /usr/share/mime + # There is no guarantees dependencies are available in postrm, so + # conditionally issue these updates. + if [[ -x "/usr/bin/update-desktop-database" ]]; then + update-desktop-database /usr/share/applications + fi + if [[ -x "/usr/bin/update-mime-database" ]]; then + update-mime-database /usr/share/mime + fi ;; *) From 484c1e5bf5afb9539ddf65574bd1bbdf0d682265 Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 22 Feb 2024 19:25:10 -0500 Subject: [PATCH 674/751] Satisfy shellcheck in run-piuparts.sh. Suppress warning in securedrop-export.postrm. --- .github/workflows/piuparts/run-piuparts.sh | 6 +++--- debian/securedrop-export.postrm | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/piuparts/run-piuparts.sh b/.github/workflows/piuparts/run-piuparts.sh index 0f659b3e1..1cf0370fc 100644 --- a/.github/workflows/piuparts/run-piuparts.sh +++ b/.github/workflows/piuparts/run-piuparts.sh @@ -6,14 +6,14 @@ apt-get update && apt-get install --yes piuparts docker.io cd /piuparts cp /keyring/securedrop-keyring.gpg . -docker build . --build-arg DISTRO=$DISTRO -t ourimage +docker build . --build-arg DISTRO="$DISTRO" -t ourimage # TODO: Our currently released packages don't install with piuparts, so we pass # --no-upgrade-test to avoid installing them and testing the upgrade path. Once # they do we can remove that line. piuparts --docker-image ourimage \ - --distribution $DISTRO \ + --distribution "$DISTRO" \ --extra-repo 'deb [signed-by=/usr/share/keyrings/securedrop-keyring.gpg] https://apt.freedom.press bullseye main' \ --warn-on-leftovers-after-purge \ --no-upgrade-test \ - /build/securedrop-${PACKAGE}*.deb + /build/securedrop-"${PACKAGE}"*.deb diff --git a/debian/securedrop-export.postrm b/debian/securedrop-export.postrm index 4f3c377d3..2a22244b1 100644 --- a/debian/securedrop-export.postrm +++ b/debian/securedrop-export.postrm @@ -2,6 +2,7 @@ # postrm script for securedrop-export # # see: dh_installdeb(1) +# shellcheck disable=SC3010 set -e From 7f75dde346a12eefbc902135185e177cffca7734 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 21 Feb 2024 13:30:55 -0500 Subject: [PATCH 675/751] Use dh_apparmor for installing profile dh_apparmor generates the appropriate postinst and postrm snippets for (re)loading apparmor profiles in a way that seems more robust than our current usage of `aa-enforce`. If apparmor isn't enabled, then it gracefully skips instead of aborting the installation. This allows for installing the client package in contexts where apparmor isn't available, like containers. Notably we can now enable piuparts testing for the client. Fixes #1853. --- .github/workflows/build.yml | 2 +- debian/control | 4 ++-- debian/rules | 1 + debian/securedrop-client.postinst | 1 - 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e9a01498c..a70a16e44 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -124,10 +124,10 @@ jobs: strategy: fail-fast: false matrix: - # TODO: client sets up apparmor, which doesn't work in our CI setup # TODO: workstation-config pulls in systemd, which doesn't work # TODO: workstation-viewer pulls in grsec and qubes packages package: + - client - export - keyring - log diff --git a/debian/control b/debian/control index bab91e23e..b0c1df713 100644 --- a/debian/control +++ b/debian/control @@ -2,14 +2,14 @@ Source: securedrop-client Section: unknown Priority: optional Maintainer: SecureDrop Team -Build-Depends: debhelper-compat (= 11), python3-virtualenv +Build-Depends: debhelper-compat (= 11), dh-apparmor, python3-virtualenv Standards-Version: 3.9.8 Homepage: https://github.com/freedomofpress/securedrop-client X-Python3-Version: >= 3.5 Package: securedrop-client Architecture: all -Depends: ${python3:Depends},${misc:Depends}, python3-pyqt5, python3-pyqt5.qtsvg, apparmor-utils, desktop-file-utils +Depends: ${python3:Depends},${misc:Depends}, python3-pyqt5, python3-pyqt5.qtsvg, desktop-file-utils Description: securedrop client for qubes workstation Package: securedrop-export diff --git a/debian/rules b/debian/rules index 535ba6833..c990004ab 100755 --- a/debian/rules +++ b/debian/rules @@ -9,6 +9,7 @@ override_dh_auto_install: bash ./debian/setup-venv.sh log bash ./debian/setup-venv.sh proxy dh_auto_install + dh_apparmor --profile-name=usr.bin.securedrop-client -psecuredrop-client override_dh_strip_nondeterminism: find ./debian/ -type f -name '*.pyc' -delete diff --git a/debian/securedrop-client.postinst b/debian/securedrop-client.postinst index f04f9bc89..3e6396807 100644 --- a/debian/securedrop-client.postinst +++ b/debian/securedrop-client.postinst @@ -22,7 +22,6 @@ case "$1" in configure) update-desktop-database /usr/share/applications - aa-enforce /usr/bin/securedrop-client ;; abort-upgrade|abort-remove|abort-deconfigure) From 19bdcb2a73b7a360f2eef8adee5e0c798a9dc65a Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 28 Feb 2024 10:01:53 -0800 Subject: [PATCH 676/751] Revert "Remove obsolete MANIFEST.in files" These are in fact used, when the package is installed into the virtualenv. (Contrast with SecureDrop server, which installs an empty package into the virtualenv, just copies our file tree over and relies on sys.path modifications to import things.) This reverts commit 785be31863260c872a48c7226cfc352579693c86. Fixes #1874. --- client/MANIFEST.in | 33 +++++++++++++++++++++++++++++++++ export/MANIFEST.in | 9 +++++++++ log/MANIFEST.in | 9 +++++++++ proxy/MANIFEST.in | 8 ++++++++ 4 files changed, 59 insertions(+) create mode 100644 client/MANIFEST.in create mode 100644 export/MANIFEST.in create mode 100644 log/MANIFEST.in create mode 100644 proxy/MANIFEST.in diff --git a/client/MANIFEST.in b/client/MANIFEST.in new file mode 100644 index 000000000..ac7c8840a --- /dev/null +++ b/client/MANIFEST.in @@ -0,0 +1,33 @@ +include requirements/build-requirements.txt +include requirements/requirements.txt +include README.md +include LICENSE +include changelog.md +include setup.py +include files/alembic.ini +include files/client.ini +include files/securedrop-client +include files/securedrop-client.desktop +include files/sd-app-qubes-gpg-domain.sh +include files/usr.bin.securedrop-client + +recursive-include alembic * +recursive-include securedrop_client * + +recursive-exclude alembic *.pyc +recursive-exclude securedrop_client *.pyc + + +# --- LOCALIZATION --- + +# Translations may appear in the tree before we consider them supported, so +# don't include any by default. +prune securedrop_client/locale + +# Explicitly include only supported translations, one line for each $LANG, like: +# +# graft securedrop_client/locale/$LANG +# +# Please keep this list alphabetized. +graft securedrop_client/locale/pt_PT +graft securedrop_client/locale/zh_Hans diff --git a/export/MANIFEST.in b/export/MANIFEST.in new file mode 100644 index 000000000..14848c347 --- /dev/null +++ b/export/MANIFEST.in @@ -0,0 +1,9 @@ +include LICENSE +include README.md +include changelog.md +include build-requirements.txt +include securedrop_export/*.py +include setup.py +include files/send-to-usb.desktop +include files/application-x-sd-export.xml +include files/sd-logo.png diff --git a/log/MANIFEST.in b/log/MANIFEST.in new file mode 100644 index 000000000..bba9999d8 --- /dev/null +++ b/log/MANIFEST.in @@ -0,0 +1,9 @@ +include LICENSE +include README.md +include changelog.md +include build-requirements.txt +include securedrop-log* +include securedrop-redis-log +include securedrop.Log +include sd-rsyslog* +include sdlog.conf diff --git a/proxy/MANIFEST.in b/proxy/MANIFEST.in new file mode 100644 index 000000000..4686841ae --- /dev/null +++ b/proxy/MANIFEST.in @@ -0,0 +1,8 @@ +include LICENSE +include README.md +include changelog.md +include config-example.yaml +include qubes/securedrop.Proxy +include build-requirements.txt +include securedrop_proxy/*.py +include setup.py From 90abaf38632b64d647f5d6c8ae153bea02e42dce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 18:05:42 +0000 Subject: [PATCH 677/751] Bump diffoscope from 251 to 256 in /client Bumps [diffoscope](https://diffoscope.org/) from 251 to 256. --- updated-dependencies: - dependency-name: diffoscope dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- client/poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/poetry.lock b/client/poetry.lock index f6a661b15..dfb713ab2 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "alembic" @@ -229,12 +229,12 @@ files = [ [[package]] name = "diffoscope" -version = "251" +version = "258" description = "in-depth comparison of files, archives, and directories" optional = false python-versions = ">=3.7" files = [ - {file = "diffoscope-251.tar.gz", hash = "sha256:c9ba2fc24379b2ba4457dc7be6970884cc2ee94c20d44f3889c2a4741e6178d3"}, + {file = "diffoscope-258.tar.gz", hash = "sha256:392788664f470924c70429283deb7e5d91ff270df055477534747216dd62ed59"}, ] [package.dependencies] From 3aec23ad56d34e66922c1449288c689b2a7894f5 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 28 Feb 2024 17:04:23 -0800 Subject: [PATCH 678/751] Install PyQt5 5.15.9 in bookworm That's the specific minor version that landed in the release, per . --- client/poetry.lock | 14 +++++++------- client/pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/poetry.lock b/client/poetry.lock index f6a661b15..c3866f6c0 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1178,16 +1178,16 @@ PyQt5-sip = ">=12.8,<13" [[package]] name = "pyqt5" -version = "5.15.8" +version = "5.15.9" description = "Python bindings for the Qt cross platform application toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "PyQt5-5.15.8-cp37-abi3-macosx_10_13_x86_64.whl", hash = "sha256:c6ee352bef5ef6392039db2d09a376908ca6ed34d1892bfe8be08e28e1992a89"}, - {file = "PyQt5-5.15.8-cp37-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:85f72addcf430b958e156fe90b975aec5c2dfe0a53f5b13c69e072de989000f7"}, - {file = "PyQt5-5.15.8-cp37-abi3-win32.whl", hash = "sha256:7daa668d2c36b62da8fb3b68670b70455dba659fe5006400222280d6153dc035"}, - {file = "PyQt5-5.15.8-cp37-abi3-win_amd64.whl", hash = "sha256:e812ff1f9b994f592392f764246372d29dd3e8d800087064cab47109d9aad1f7"}, - {file = "PyQt5-5.15.8.tar.gz", hash = "sha256:bc85e3efb9135c56c8b88157c8825005fb7cd0f14babd93976778aae82eda360"}, + {file = "PyQt5-5.15.9-cp37-abi3-macosx_10_13_x86_64.whl", hash = "sha256:883ba5c8a348be78c8be6a3d3ba014c798e679503bce00d76c666c2dc6afe828"}, + {file = "PyQt5-5.15.9-cp37-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:dd5ce10e79fbf1df29507d2daf99270f2057cdd25e4de6fbf2052b46c652e3a5"}, + {file = "PyQt5-5.15.9-cp37-abi3-win32.whl", hash = "sha256:e45c5cc15d4fd26ab5cb0e5cdba60691a3e9086411f8e3662db07a5a4222a696"}, + {file = "PyQt5-5.15.9-cp37-abi3-win_amd64.whl", hash = "sha256:e030d795df4cbbfcf4f38b18e2e119bcc9e177ef658a5094b87bb16cac0ce4c5"}, + {file = "PyQt5-5.15.9.tar.gz", hash = "sha256:dc41e8401a90dc3e2b692b411bd5492ab559ae27a27424eed4bd3915564ec4c0"}, ] [package.dependencies] @@ -2218,4 +2218,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "344a2b50e82e1eee578da5ec53203317736c644af0bcefcaf17a5cf9a63a56d2" +content-hash = "362d5031e5815e0115adfebdd42ab888cce3e760241f27484634ab47a0c67f35" diff --git a/client/pyproject.toml b/client/pyproject.toml index bc317cf39..8ff5884e6 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -19,7 +19,7 @@ requests = "^2.31.0" # In production these two are installed using a system package # so match those versions exactly PyQt5 = [ - {version = "=5.15.8", python = ">=3.10"}, # bookworm + {version = "=5.15.9", python = ">=3.10"}, # bookworm {version = "=5.15.2", python = "< 3.10"}, # bullseye ] PyQt5-sip = [ From 8f6659976644cf342a6e91f67db1ed45fed2fa4c Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 26 Feb 2024 19:35:46 -0500 Subject: [PATCH 679/751] Use find_packages in setup.py. Use bash for export postrm. --- client/setup.py | 2 +- debian/securedrop-export.postrm | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/client/setup.py b/client/setup.py index f484b4164..de19a39c8 100644 --- a/client/setup.py +++ b/client/setup.py @@ -24,7 +24,7 @@ install_requires=["SQLAlchemy", "alembic", "securedrop-sdk", "python-dateutil", "arrow"], python_requires=">=3.5", url="https://github.com/freedomofpress/securedrop-client", - packages=["securedrop_client", "securedrop_client.gui", "securedrop_client.resources"], + packages=setuptools.find_packages(include=["securedrop_client", "securedrop_client.*"]), include_package_data=True, classifiers=[ "Development Status :: 3 - Alpha", diff --git a/debian/securedrop-export.postrm b/debian/securedrop-export.postrm index 2a22244b1..192ee4d1d 100644 --- a/debian/securedrop-export.postrm +++ b/debian/securedrop-export.postrm @@ -1,8 +1,7 @@ -#!/bin/sh +#!/bin/bash # postrm script for securedrop-export # # see: dh_installdeb(1) -# shellcheck disable=SC3010 set -e From 9165b5e3bf0e8d8036de2068c87b0416eeaf782d Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 26 Feb 2024 11:08:28 -0500 Subject: [PATCH 680/751] Set umask 0o22 before writing to USB (#1726) --- export/securedrop_export/disk/cli.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/export/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py index f7d6234a8..1045a17ff 100644 --- a/export/securedrop_export/disk/cli.py +++ b/export/securedrop_export/disk/cli.py @@ -416,7 +416,7 @@ def write_data_to_device( is_error = False target_path = os.path.join(device.mountpoint, archive_target_dirname) - subprocess.check_call(["mkdir", target_path]) + subprocess.check_call(["mkdir", target_path], preexec_fn=self._set_umask_usb) export_data = os.path.join(archive_tmpdir, "export_data/") logger.debug("Copying file to {}".format(archive_target_dirname)) @@ -434,6 +434,14 @@ def write_data_to_device( finally: self.cleanup(device, archive_tmpdir, is_error) + def _set_umask_usb(self) -> None: + """ + Set umask to 0o22 before writing to USB, to facilitate reading exported + files on other computers. + """ + os.setpgrp() + os.umask(0o22) + def cleanup( self, volume: MountedVolume, From 0a3fb2707a1ac66bff9bb412e5a89feb462e6bc2 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 26 Feb 2024 11:29:03 -0500 Subject: [PATCH 681/751] Update final page on error --- .../gui/conversation/export/export_wizard_page.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_page.py b/client/securedrop_client/gui/conversation/export/export_wizard_page.py index e85b7c57c..f8a5db589 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_page.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_page.py @@ -402,6 +402,10 @@ def update_content(self, status: ExportStatus, should_show_hint: bool = False) - header = _("Export sucessful, but drive was not locked") body = STATUS_MESSAGES.get(status) + elif status in self.UNRECOVERABLE_ERRORS: + header = _("Export Failed") + body = STATUS_MESSAGES.get(status) + else: header = _("Working...") @@ -411,9 +415,9 @@ def update_content(self, status: ExportStatus, should_show_hint: bool = False) - def isComplete(self) -> bool: """ - Override the default isComplete() implementation in order to disable the "Finish" + Override the default isComplete() implementation in order to disable the "Done" button while an export is taking place. (If the "Working...." header is being shown, - the export is still in progress and "Finish" should not be clickable.) + the export is still in progress and "Done" should not be clickable.) """ if self.status: return self.status not in ( From ef7f6b31812bd68bc56098f35ecc67b45f733678 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 26 Feb 2024 17:28:25 -0500 Subject: [PATCH 682/751] Remove encryption_method from archive.py --- export/securedrop_export/archive.py | 1 - 1 file changed, 1 deletion(-) diff --git a/export/securedrop_export/archive.py b/export/securedrop_export/archive.py index 3f7b10234..0b4ce0bdf 100755 --- a/export/securedrop_export/archive.py +++ b/export/securedrop_export/archive.py @@ -38,7 +38,6 @@ def validate(self) -> "Metadata": json_config = json.loads(f.read()) self.export_method = json_config.get("device", None) self.encryption_key = json_config.get("encryption_key", None) - self.encryption_method = json_config.get("encryption_method", None) logger.info("Command: {}".format(self.export_method)) except Exception as ex: From f9ddf7168ec461788961354c69824bc0fc5e5cb1 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 22 Feb 2024 17:02:02 -0500 Subject: [PATCH 683/751] Cancel old GHA builds if new commits are pushed If the branch is not main and not a release branch, then cancel old in-progress jobs. Reduces the queue size when refactoring or quickly pushing new things. This is roughly the same behavior CircleCI had. Inspired by . Fixes #1858. --- .github/workflows/build.yml | 6 +++++- .github/workflows/cargo-vet.yml | 4 ++++ .github/workflows/ci.yml | 4 ++++ .github/workflows/sdk.yml | 4 ++++ .github/workflows/test.yml | 4 ++++ 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 781e85df1..f70507e2e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,9 @@ name: Package builds on: [push, pull_request] +# Only build for latest push/PR unless it's main or release/ +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith( github.ref, 'refs/heads/release/' ) }} defaults: run: @@ -36,7 +40,7 @@ jobs: PKG_DIR=../proxy make -C securedrop-builder requirements git config --global --add safe.directory "$GITHUB_WORKSPACE" git diff --ignore-matching-lines=# --exit-code - + build-debs: strategy: diff --git a/.github/workflows/cargo-vet.yml b/.github/workflows/cargo-vet.yml index e7f102b06..d18018363 100644 --- a/.github/workflows/cargo-vet.yml +++ b/.github/workflows/cargo-vet.yml @@ -3,6 +3,10 @@ name: cargo vet on: [push, pull_request] +# Only build for latest push/PR unless it's main or release/ +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith( github.ref, 'refs/heads/release/' ) }} jobs: cargo-vet: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31157df22..fc316b376 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,9 @@ name: CI on: [push, pull_request] +# Only build for latest push/PR unless it's main or release/ +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith( github.ref, 'refs/heads/release/' ) }} defaults: run: diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 812ec087d..55249286b 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -1,5 +1,9 @@ name: SDK on: [push, pull_request] +# Only build for latest push/PR unless it's main or release/ +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith( github.ref, 'refs/heads/release/' ) }} defaults: run: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 55a673c06..d29e7c61f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,9 @@ name: Tests on: [push, pull_request] +# Only build for latest push/PR unless it's main or release/ +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith( github.ref, 'refs/heads/release/' ) }} defaults: run: From 08bdd241262330ea5d803245bbd8753b05b30205 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 29 Feb 2024 20:30:40 -0800 Subject: [PATCH 684/751] Parameterize sender_is_current_user in test instead of randomization Instead of randomizing whether we're testing sender_is_current_user or not, just parameterize the test to properly test both cases, which increases coverage and reduces variance. I noticed this because of ruff in a roundabout way, as it flagged the use of insecure randomization. --- client/tests/gui/test_widgets.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client/tests/gui/test_widgets.py b/client/tests/gui/test_widgets.py index e5b9e9fb8..97cc51326 100644 --- a/client/tests/gui/test_widgets.py +++ b/client/tests/gui/test_widgets.py @@ -3,11 +3,11 @@ """ import math -import random from datetime import datetime from gettext import gettext as _ from unittest.mock import Mock, PropertyMock +import pytest import sqlalchemy import sqlalchemy.orm.exc from PyQt5.QtCore import QEvent, QPointF, QSize, Qt @@ -2863,12 +2863,14 @@ def test_ReplyBoxWidget__on_authentication_changed_updates_badge_when_switched_t reply_widget._update_styles.assert_called_once_with() -def test_ReplyBoxWidget__on_authentication_changed_does_nothing_when_authenticated(mocker): +@pytest.mark.parametrize("sender_is_current_user", [True, False]) +def test_ReplyBoxWidget__on_authentication_changed_does_nothing_when_authenticated( + mocker, sender_is_current_user +): authenticated_user = factory.User() controller = mocker.MagicMock(authenticated_user=authenticated_user) sender = factory.User() - sender_is_current_user = random.choice([True, False]) reply_widget = ReplyWidget( controller=controller, message_uuid="mock_uuid", From 1b44601ed41c1679d7241bbe5e6758ae6f4a8687 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 26 Feb 2024 17:27:34 -0500 Subject: [PATCH 685/751] Update export README to include VeraCrypt instructions --- export/README.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/export/README.md b/export/README.md index 7c66cc72f..f45a2b978 100644 --- a/export/README.md +++ b/export/README.md @@ -9,13 +9,25 @@ Code for exporting and printing files from the SecureDrop Qubes Workstation. ## Supported Printers -TBD +Printer support is currently limited to a subset of Brother and HP printers that offer USB +(non-wireless) connectivity, such as: + +- HP LaserJet Pro 4001dn +- Brother HL-L2320D ## Supported Export Devices -We support luks-encrypted drives that are either MBR/DOS partitioned or GPT partitioned. If you use `Disks` in Linux to partition your drive, you can [follow these instructions](https://docs.securedrop.org/en/stable/set_up_transfer_and_export_device.html#create-usb-transfer-device) to create a new export device. You can also use [cryptsetup](https://linux.die.net/man/8/cryptsetup) to create a luks-encrypted device with full-disk encryption, for example: +Export to LUKS-encrypted or VeraCrypt-encrypted USB devices is supported. + +### LUKS +Partition a drive (either the MBR/DOS or the GPT partition scheme is fine) +and encrypt exactly one partition with LUKS. On Linux, you can +[follow these instructions](https://docs.securedrop.org/en/stable/set_up_transfer_and_export_device.html#create-usb-transfer-device) +to use GNOME Disks to set up your drive. You can also use +[cryptsetup](https://linux.die.net/man/8/cryptsetup): -1. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 DEVICE` where `DEVICE` is the name of your removable drive, which you can find via `lsblk -p`. +1. `sudo cryptsetup luksFormat --hash=sha512 --key-size=512 DEVICE` where `DEVICE` + is the name of your removable drive, which you can find via `lsblk -p`. Make sure `DEVICE` is correct because you will be overwriting its data irrevocably. @@ -25,7 +37,17 @@ We support luks-encrypted drives that are either MBR/DOS partitioned or GPT part 4. `sudo cryptsetup luksClose /dev/mapper/encrypted_device` -We do not yet support drives that use full-disk encryption with VeraCrypt. +### VeraCrypt +[Download and verify](https://www.veracrypt.fr/) VeraCrypt or VeraCrypt CLI and follow the +documentation to provision a USB drive. When provisioning VeraCrypt drives, ensure that the +filesystem is Linux-compatible. (FAT32 is suggested for cross-platform compatibility). + +VeraCrypt devices must be manually unlocked in order to be detected for export. Users +will be prompted during the export workflow. + +Unlock a VeraCrypt device using the commandline in `sd-devices` by typing +`udisksctl unlock -b /dev/sdXX`, where `/dev/sdXX` is the device as identified in +the Devices widget (for example, `/dev/sda1`) or as identified by `lsblk -p`. ## Export Archive Format From d98678fe9f4f98536e9f4739a9f8445a9d33fdf6 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Mon, 19 Feb 2024 16:28:14 -0500 Subject: [PATCH 686/751] Run lintian on Debian packages lintian is the Debian package linter and catches a number of things we can improve in our packages. For now I've suppressed everything and annotated them with TODO/FIXME for others to take on or address incrementally. lintian is run at the end of `make build-debs` unless the "FAST" environment variable is set. Any warning or error causes the build to fail, but it can be suppressed in the corresponding lintian-overrides file. A number of file and directories that may exist in the tree are excluded from the package build process through d/source/options to prevent lintian from seeing them. Internally there's a bit of work so we can identify the *.changes file that we just built, so we first build into a temporary directory, copy the files into our repository's build, then run lintian in the temporary directory. Refs #1785. --- .github/workflows/build.yml | 9 ++--- debian/securedrop-client.lintian-overrides | 32 +++++++++++++++++ debian/securedrop-export.lintian-overrides | 29 +++++++++++++++ debian/securedrop-keyring.lintian-overrides | 20 +++++++++++ debian/securedrop-log.lintian-overrides | 33 +++++++++++++++++ debian/securedrop-proxy.lintian-overrides | 35 +++++++++++++++++++ ...edrop-workstation-config.lintian-overrides | 11 ++++++ ...edrop-workstation-viewer.lintian-overrides | 11 ++++++ debian/source/lintian-overrides | 5 +++ debian/source/options | 6 ++++ scripts/build-debs-real.sh | 5 ++- scripts/build-debs.sh | 26 ++++++++++++++ scripts/lintian/Dockerfile | 3 ++ 13 files changed, 218 insertions(+), 7 deletions(-) create mode 100644 debian/securedrop-client.lintian-overrides create mode 100644 debian/securedrop-export.lintian-overrides create mode 100644 debian/securedrop-keyring.lintian-overrides create mode 100644 debian/securedrop-log.lintian-overrides create mode 100644 debian/securedrop-proxy.lintian-overrides create mode 100644 debian/securedrop-workstation-config.lintian-overrides create mode 100644 debian/securedrop-workstation-viewer.lintian-overrides create mode 100644 debian/source/lintian-overrides create mode 100644 scripts/lintian/Dockerfile diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81125317e..ff016f739 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,7 @@ jobs: lfs: true - name: Build packages run: | - DEBIAN_VERSION=${{ matrix.debian_version }} BUILDER=securedrop-builder ./scripts/build-debs.sh + DEBIAN_VERSION=${{ matrix.debian_version }} BUILDER=securedrop-builder FAST=1 ./scripts/build-debs.sh - uses: actions/upload-artifact@v4 id: upload with: @@ -68,8 +68,9 @@ jobs: path: build if-no-files-found: error - # Second round of builds (in parallel) for diffoscoping - build-debs2: + # Another set of builds for lintian checks and also so we can diffoscope + # for reproducibility issues with the first set + lintian: strategy: matrix: debian_version: @@ -105,7 +106,7 @@ jobs: container: debian:bookworm needs: - build-debs - - build-debs2 + - lintian steps: - name: Install dependencies run: | diff --git a/debian/securedrop-client.lintian-overrides b/debian/securedrop-client.lintian-overrides new file mode 100644 index 000000000..27a6eee8d --- /dev/null +++ b/debian/securedrop-client.lintian-overrides @@ -0,0 +1,32 @@ +securedrop-client: arch-independent-package-contains-binary-or-object + +# This is intentional +securedrop-client: dir-or-file-in-opt + +# FIXME +securedrop-client: extended-description-is-empty + +# FIXME: fix by switching to arch: any +securedrop-client: missing-dependency-on-libc + +# FIXME: remove __pycache__ directories +securedrop-client: package-installs-python-pycache-dir + +# FIXME: section shouldn't be "unknown" +securedrop-client: section-is-dh_make-template + +# FIXME: fix by switching to arch: any +securedrop-client: unstripped-binary-or-object [opt/venvs/securedrop-client/lib/python3.*/site-packages/markupsafe/*] +securedrop-client: unstripped-binary-or-object [opt/venvs/securedrop-client/lib/python3.*/site-packages/sqlalchemy/*] + +# We don't care +securedrop-client: no-manual-page + +# FIXME +securedrop-client: package-contains-vcs-control-file [opt/venvs/securedrop-client/.gitignore] + +# We don't care about these +securedrop-client: script-not-executable + +# This is our virtualenv's interpreter +securedrop-client: unusual-interpreter diff --git a/debian/securedrop-export.lintian-overrides b/debian/securedrop-export.lintian-overrides new file mode 100644 index 000000000..c4b9fece7 --- /dev/null +++ b/debian/securedrop-export.lintian-overrides @@ -0,0 +1,29 @@ +# Yes, we ship stuff in /opt +securedrop-export: dir-or-file-in-opt [opt/venvs/*] + +# FIXME: don't install __pycache__ +securedrop-export: package-installs-python-pycache-dir + +# FIXME: section shouldn't be "unknown" +securedrop-export: section-is-dh_make-template + +# TODO: "does not provide a code like %f, %F, %u or %U in the Exec key." +securedrop-export: desktop-mime-but-no-exec-code [usr/share/applications/send-to-usb.desktop] + +# We don't care about man pages +securedrop-export: no-manual-page + +# FIXME: don't ship gitignore +securedrop-export: package-contains-vcs-control-file [opt/venvs/securedrop-export/.gitignore] + +# Doesn't matter +securedrop-export: script-not-executable + +# This is our virtualenv's interpreter +securedrop-export: unusual-interpreter + +# This is intentional +securedrop-export: file-in-etc-not-marked-as-conffile [etc/udisks2/tcrypt.conf] + +# This is intentional +securedrop-export: control-file-is-empty [conffiles] diff --git a/debian/securedrop-keyring.lintian-overrides b/debian/securedrop-keyring.lintian-overrides new file mode 100644 index 000000000..5f23d3aa8 --- /dev/null +++ b/debian/securedrop-keyring.lintian-overrides @@ -0,0 +1,20 @@ +# FIXME +securedrop-keyring: extended-description-is-empty + +# This is intentional +securedrop-keyring: file-in-etc-not-marked-as-conffile [etc/apt/trusted.gpg.d/securedrop-keyring.gpg] + +# This is intentional +securedrop-keyring: package-installs-apt-keyring [etc/apt/trusted.gpg.d/securedrop-keyring.gpg] + +# FIXME: section shouldn't be "unknown" +securedrop-keyring: section-is-dh_make-template + +# This is intentional +securedrop-keyring: control-file-is-empty [conffiles] + +# FIXME: abbreviate +securedrop-keyring: synopsis-too-long + +# TODO: this probably isn't an issue, double check our kernels have fs.protected_hardlinks=1. +securedrop-keyring: recursive-privilege-change diff --git a/debian/securedrop-log.lintian-overrides b/debian/securedrop-log.lintian-overrides new file mode 100644 index 000000000..f352af9b3 --- /dev/null +++ b/debian/securedrop-log.lintian-overrides @@ -0,0 +1,33 @@ +# This is intentional +securedrop-log: dir-or-file-in-opt + +# FIXME: remove __pycache__ directories +securedrop-log: package-installs-python-pycache-dir + +# FIXME: missing a python3 dependency +securedrop-log: python3-script-but-no-python3-dep + +# FIXME: section shouldn't be "unknown" +securedrop-log: section-is-dh_make-template + +# TODO: we should ship this in /lib instead +securedrop-log: systemd-service-in-odd-location [etc/systemd/system/securedrop-log.service] + +# This is fine +securedrop-log: executable-not-elf-or-script [etc/qubes-rpc/*] + +# FIXME: abbreviate +securedrop-log: extended-description-line-too-long + +# We don't care +securedrop-log: no-manual-page + +# FIXME +securedrop-log: package-contains-vcs-control-file [opt/venvs/securedrop-log/.gitignore] + +# We don't care about these +securedrop-log: script-not-executable + +# This is our virtualenv's interpreter +securedrop-log: unusual-interpreter +securedrop-log: wrong-path-for-interpreter diff --git a/debian/securedrop-proxy.lintian-overrides b/debian/securedrop-proxy.lintian-overrides new file mode 100644 index 000000000..6d8ae773d --- /dev/null +++ b/debian/securedrop-proxy.lintian-overrides @@ -0,0 +1,35 @@ +# FIXME: fix by switching to arch: any +securedrop-proxy: arch-independent-package-contains-binary-or-object + +# This is intentional +securedrop-proxy: dir-or-file-in-opt + +# FIXME: fix by switching to arch: any +securedrop-proxy: missing-dependency-on-libc + +# FIXME: remove __pycache__ directories +securedrop-proxy: package-installs-python-pycache-dir + +# FIXME: section shouldn't be "unknown" +securedrop-proxy: section-is-dh_make-template + +# FIXME: fix by switching to arch: any +securedrop-proxy: unstripped-binary-or-object [opt/venvs/securedrop-proxy/lib/python3.*/site-packages/yaml/*] + +# This is fine +securedrop-proxy: executable-not-elf-or-script [etc/qubes-rpc/*] + +# FIXME: abbreviate +securedrop-proxy: extended-description-line-too-long + +# We don't care +securedrop-proxy: no-manual-page + +# FIXME +securedrop-proxy: package-contains-vcs-control-file [opt/venvs/securedrop-proxy/.gitignore] + +# We don't care about these +securedrop-proxy: script-not-executable + +# This is our virtualenv's interpreter +securedrop-proxy: unusual-interpreter diff --git a/debian/securedrop-workstation-config.lintian-overrides b/debian/securedrop-workstation-config.lintian-overrides new file mode 100644 index 000000000..7018d0b75 --- /dev/null +++ b/debian/securedrop-workstation-config.lintian-overrides @@ -0,0 +1,11 @@ +# This is intentional +securedrop-workstation-config: dir-or-file-in-opt + +# FIXME: section shouldn't be "unknown" +securedrop-workstation-config: section-is-dh_make-template + +# FIXME: abbreviate +securedrop-workstation-config: extended-description-line-too-long + +# We're just restarting paxctld, it's fine +securedrop-workstation-config: maintainer-script-calls-systemctl [postinst:28] diff --git a/debian/securedrop-workstation-viewer.lintian-overrides b/debian/securedrop-workstation-viewer.lintian-overrides new file mode 100644 index 000000000..a68a4e5f9 --- /dev/null +++ b/debian/securedrop-workstation-viewer.lintian-overrides @@ -0,0 +1,11 @@ +# FIXME +securedrop-workstation-viewer: extended-description-is-empty + +# FIXME: section shouldn't be "unknown" +securedrop-workstation-viewer: section-is-dh_make-template + +# FIXME: Needs "metapackage" in the description +securedrop-workstation-viewer: empty-binary-package + +# FIXME: abbreviate +securedrop-workstation-viewer: synopsis-too-long diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides new file mode 100644 index 000000000..edc8462a5 --- /dev/null +++ b/debian/source/lintian-overrides @@ -0,0 +1,5 @@ +securedrop-client source: python3-depends-but-no-python3-helper +securedrop-client source: ancient-python-version-field +securedrop-client source: custom-compression-in-debian-source-options +securedrop-client source: debhelper-but-no-misc-depends +securedrop-client source: missing-license-paragraph-in-dep5-copyright diff --git a/debian/source/options b/debian/source/options index 5218c5aca..69c0a323a 100644 --- a/debian/source/options +++ b/debian/source/options @@ -2,3 +2,9 @@ compression = "gzip" # ignore the build/ directory, that contains our artifacts tar-ignore = "build" +# ignore all dotfiles + hidden directories +tar-ignore = ".*" +# and some more generated directories +tar-ignore = "__pycache__" +tar-ignore = "htmlcov" +tar-ignore = "target" diff --git a/scripts/build-debs-real.sh b/scripts/build-debs-real.sh index f1251bc8a..6065fc274 100755 --- a/scripts/build-debs-real.sh +++ b/scripts/build-debs-real.sh @@ -22,7 +22,6 @@ apt-get build-dep . --yes dpkg-buildpackage --no-sign ls ../ # Copy the built artifacts back and print checksums -mkdir -p /src/build/ -mv -v ../*.{buildinfo,changes,deb,dsc,tar.gz} /src/build/ -cd /src/build/ +mv -v ../*.{buildinfo,changes,deb,dsc,tar.gz} /build/ +cd /build/ sha256sum ./* diff --git a/scripts/build-debs.sh b/scripts/build-debs.sh index 77f1bc0ec..3fd9be573 100755 --- a/scripts/build-debs.sh +++ b/scripts/build-debs.sh @@ -44,8 +44,34 @@ export CONTAINER="fpf.local/sd-client-builder-${DEBIAN_VERSION}" . ./scripts/image_prep.sh +# We're going to store artifacts in a temp directory +BUILD_DEST=$(mktemp -d) + $OCI_BIN run --rm $OCI_RUN_ARGUMENTS \ -v "${BUILDER}:/builder:Z" \ + -v "${BUILD_DEST}:/build:Z" \ --env NIGHTLY="${NIGHTLY:-}" \ --entrypoint "/src/scripts/build-debs-real.sh" \ $CONTAINER + +ls "$BUILD_DEST" +# Copy the build artifacts to our project's /build +mkdir -p build +cp ${BUILD_DEST}/* build/ + +FAST="${FAST:-}" +if [[ -z $FAST ]]; then + CONTAINER2="fpf.local/sd-client-lintian" + $OCI_BIN build scripts/lintian -t $CONTAINER2 + # Display verbose info, and fail on warnings and errors. + $OCI_BIN run --rm $OCI_RUN_ARGUMENTS -v "${BUILD_DEST}:/build:Z" $CONTAINER2 \ + bash -c \ + "lintian --version && lintian \ + --info --tag-display-limit 0 \ + --fail-on warning --fail-on error \ + /build/*.changes \ + && echo OK" +fi + +# Clean up temp stuff now that lintian is done (or skipped) +rm -rf "${BUILD_DEST}" diff --git a/scripts/lintian/Dockerfile b/scripts/lintian/Dockerfile new file mode 100644 index 000000000..a097d32c2 --- /dev/null +++ b/scripts/lintian/Dockerfile @@ -0,0 +1,3 @@ +FROM debian:bookworm + +RUN apt-get update && apt-get --yes upgrade && apt-get install --yes lintian From 093ce8945f265e0897501333051331492ecf42eb Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 28 Feb 2024 22:11:32 -0800 Subject: [PATCH 687/751] Stop running client tests in parallel with xdist These tests are pretty quick that they don't really benefit from xdist. Plus not all of our tests are threadsafe (e.g. the ones that call locale.setlocale()), so if there's no real need for parallelization, let's skip it. Refs #1880. --- client/Makefile | 6 +++--- client/poetry.lock | 38 ++------------------------------------ client/pyproject.toml | 1 - 3 files changed, 5 insertions(+), 40 deletions(-) diff --git a/client/Makefile b/client/Makefile index b8980fba7..346277f12 100644 --- a/client/Makefile +++ b/client/Makefile @@ -56,8 +56,8 @@ TESTOPTS ?= -v --cov-config .coveragerc --cov-report html --cov-report term-miss RANDOM_SEED ?= $(shell bash -c 'echo $$RANDOM') .PHONY: test -test: ## Run the application tests in parallel (for rapid development) - @TEST_CMD="poetry run pytest -v -n 4 --ignore=$(FTESTS) --ignore=$(ITESTS) $(TESTOPTS) $(TESTS)" ; \ +test: ## Run the application tests (for rapid development) + @TEST_CMD="poetry run pytest -v --ignore=$(FTESTS) --ignore=$(ITESTS) $(TESTOPTS) $(TESTS)" ; \ source scripts/setup-tmp-directories.sh; \ if command -v xvfb-run > /dev/null; then \ xvfb-run -a $$TEST_CMD ; else \ @@ -72,7 +72,7 @@ test-random: ## Run the application tests in random order .PHONY: test-integration test-integration: ## Run the integration tests - @TEST_CMD="poetry run pytest -v -n 4 $(ITESTS)" ; \ + @TEST_CMD="poetry run pytest -v $(ITESTS)" ; \ if command -v xvfb-run > /dev/null; then \ xvfb-run -a $$TEST_CMD ; else \ $$TEST_CMD ; fi diff --git a/client/poetry.lock b/client/poetry.lock index b7c299688..cb9995373 100644 --- a/client/poetry.lock +++ b/client/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "alembic" @@ -282,20 +282,6 @@ files = [ [package.extras] test = ["pytest (>=6)"] -[[package]] -name = "execnet" -version = "2.0.2" -description = "execnet: rapid multi-Python deployment" -optional = false -python-versions = ">=3.7" -files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, -] - -[package.extras] -testing = ["hatch", "pre-commit", "pytest", "tox"] - [[package]] name = "face" version = "22.0.0" @@ -1429,26 +1415,6 @@ files = [ pytest = ">=3.6.0" vcrpy = "*" -[[package]] -name = "pytest-xdist" -version = "3.3.1" -description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, - {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, -] - -[package.dependencies] -execnet = ">=1.1" -pytest = ">=6.2.0" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - [[package]] name = "python-dateutil" version = "2.7.5" @@ -2218,4 +2184,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "362d5031e5815e0115adfebdd42ab888cce3e760241f27484634ab47a0c67f35" +content-hash = "3f1aa5fc1f7b2b0d72b56a6e5a505ab68294a1b4d82562ecb8e12fe67dabe2e5" diff --git a/client/pyproject.toml b/client/pyproject.toml index 8ff5884e6..75908eff0 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -41,7 +41,6 @@ pytest-mock = "*" pytest-qt = "^4.2.0" pytest-random-order = "*" pytest-vcr = "*" -pytest-xdist = "^3.0.2" semgrep = "*" translate-toolkit = "*" types-polib = "*" From 56d91c6940b09bb12fb3f2598e561998b6c19761 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 7 Mar 2024 11:24:51 -0500 Subject: [PATCH 688/751] Fix lintian errors on nightlies Because of the date-based version, we end up triggering the "package-has-long-file-name" check, which is only an issue for distributing them via CDs, so we can suppress them. While we're at it, set fail-fast: false, so even if one distro fails we can still see if the other would have succeeded or has other errors. --- .github/workflows/nightlies.yml | 1 + debian/securedrop-workstation-config.lintian-overrides | 3 +++ debian/securedrop-workstation-viewer.lintian-overrides | 3 +++ 3 files changed, 7 insertions(+) diff --git a/.github/workflows/nightlies.yml b/.github/workflows/nightlies.yml index a9d2fba86..94bca1c06 100644 --- a/.github/workflows/nightlies.yml +++ b/.github/workflows/nightlies.yml @@ -10,6 +10,7 @@ defaults: jobs: build-debs: strategy: + fail-fast: false matrix: debian_version: - bullseye diff --git a/debian/securedrop-workstation-config.lintian-overrides b/debian/securedrop-workstation-config.lintian-overrides index 7018d0b75..37b810d17 100644 --- a/debian/securedrop-workstation-config.lintian-overrides +++ b/debian/securedrop-workstation-config.lintian-overrides @@ -9,3 +9,6 @@ securedrop-workstation-config: extended-description-line-too-long # We're just restarting paxctld, it's fine securedrop-workstation-config: maintainer-script-calls-systemctl [postinst:28] + +# We're not shipping CDs, so this is fine +securedrop-workstation-config: package-has-long-file-name diff --git a/debian/securedrop-workstation-viewer.lintian-overrides b/debian/securedrop-workstation-viewer.lintian-overrides index a68a4e5f9..591ef51e8 100644 --- a/debian/securedrop-workstation-viewer.lintian-overrides +++ b/debian/securedrop-workstation-viewer.lintian-overrides @@ -9,3 +9,6 @@ securedrop-workstation-viewer: empty-binary-package # FIXME: abbreviate securedrop-workstation-viewer: synopsis-too-long + +# We're not shipping CDs, so this is fine +securedrop-workstation-viewer: package-has-long-file-name From a6ee938a3615968116263dd3c24b2cae52d3cf2d Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 689/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/bn/LC_MESSAGES/messages.po | 59 +++++++++++++++---- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po b/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po index 3a686abf2..62e163768 100644 --- a/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po @@ -272,49 +272,79 @@ msgid_plural "{message_count} messages" msgstr[0] "" msgstr[1] "" -msgid "SUBMIT" +msgid "DONE" msgstr "" -msgid "Preparing to export:
{}" +msgid "BACK" msgstr "" -msgid "Ready to export:
{}" +msgid "No device detected" msgstr "" -msgid "Insert encrypted USB drive" +msgid "Too many USB devices detected; please insert one supported device." msgstr "" -msgid "Enter passphrase for USB drive" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "" + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." msgstr "" msgid "Export successful" msgstr "" -msgid "Export failed" +msgid "Error encountered with this device. See your administrator for help." msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgid "Files were moved or missing and could not be exported." msgstr "" -msgid "Exporting: {}" +msgid "Error encountered. Please contact support." msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgid "Preparing to export:
{}" msgstr "" -msgid "Either the drive is not encrypted or there is something else wrong with it." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." msgstr "" -msgid "The passphrase provided did not work. Please try again." +msgid "Ready to export:
{}" msgstr "" -msgid "See your administrator for help." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "" -msgid "DONE" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" msgstr "" msgid "Preparing to print:
{}" @@ -335,6 +365,9 @@ msgstr "" msgid "Please connect your printer to a USB port." msgstr "" +msgid "See your administrator for help." +msgstr "" + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "" From 416e7e76386dde4fb85fc85343ae67419f923b10 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 690/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/ca/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po index 587f725fd..afdce098f 100644 --- a/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "un missatge" msgstr[1] "{message_count} missatges" -msgid "SUBMIT" -msgstr "ENVIA" +msgid "DONE" +msgstr "FET" -msgid "Preparing to export:
{}" -msgstr "S'està preparant per a exportar:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Preparat per a exportar:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Inseriu la unitat USB xifrada" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Introduïu la contrasenya de la unitat USB" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "La contrasenya que he inserit no és vàlida. Torneu a provar." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "S'ha exportat correctament" -msgid "Export failed" -msgstr "Ha fallat l'exportació" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entenent els riscos abans d'exportar fitxers

Fitxers perjudicials
Aquesta estació de treball us permet obrir fitxers de forma segura. Si obriu fitxers des d'altre ordinador, qualsevol fitxer perillós o perjudicial podria afectar el vostre equip o cap altre de la xarxa. Si no sabeu com manegar aquest risc, imprimiu el fitxer o bé contacteu amb el vostre administrador.

Anonimat
Els fitxers enviats per determinades fonts poden contenir informació amagada o metadades que us poden identificar. Per a protegir les vostres fonts, considereu la possibilitat de censurar parts sensibles del fitxer original abans de posar el fitxer resultant a l'abast d'ordinadors en xarxa." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "S'està exportant: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Inseriu una de les unitats d'exportació proveïdes específicament per a la màquina del SecureDrop." +msgid "Preparing to export:
{}" +msgstr "S'està preparant per a exportar:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "La unitat no està xifrada o bé s'ha produït un error." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entenent els riscos abans d'exportar fitxers

Fitxers perjudicials
Aquesta estació de treball us permet obrir fitxers de forma segura. Si obriu fitxers des d'altre ordinador, qualsevol fitxer perillós o perjudicial podria afectar el vostre equip o cap altre de la xarxa. Si no sabeu com manegar aquest risc, imprimiu el fitxer o bé contacteu amb el vostre administrador.

Anonimat
Els fitxers enviats per determinades fonts poden contenir informació amagada o metadades que us poden identificar. Per a protegir les vostres fonts, considereu la possibilitat de censurar parts sensibles del fitxer original abans de posar el fitxer resultant a l'abast d'ordinadors en xarxa." -msgid "The passphrase provided did not work. Please try again." -msgstr "La contrasenya que he inserit no és vàlida. Torneu a provar." +msgid "Ready to export:
{}" +msgstr "Preparat per a exportar:
{}" -msgid "See your administrator for help." -msgstr "Contacteu amb l'administrador si us cal ajuda." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Recordeu tenir cura quan treballeu amb informació fora del vostre equip." -msgid "DONE" -msgstr "FET" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Introduïu la contrasenya de la unitat USB" msgid "Preparing to print:
{}" msgstr "S'està preparant per a imprimir:
{}" @@ -347,6 +377,9 @@ msgstr "

Gestió dels riscos d'impressió

Codis QR i adreces web Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 691/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/de/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/de/LC_MESSAGES/messages.po b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po index c4a4f91bb..25535fa88 100644 --- a/client/securedrop_client/locale/de/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "Eine Nachricht" msgstr[1] "{message_count} Nachrichten" -msgid "SUBMIT" -msgstr "EINREICHEN" +msgid "DONE" +msgstr "FERTIG" -msgid "Preparing to export:
{}" -msgstr "Vorbereitung für den Export:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Bereit zum Exportieren:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Verschlüsseltes USB-Laufwerk einstecken" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Passphrase für USB-Laufwerk eingeben" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Die angegebene Passphrase hat nicht funktioniert. Bitte versuchen Sie es erneut." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Export erfolgreich" -msgid "Export failed" -msgstr "Export fehlgeschlagen" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Kennen Sie die Risiken, bevor Sie Dateien exportieren

Malware
Mit dieser Workstation können Sie Dateien sicher öffnen. Wenn Sie Dateien auf einem anderen Computer öffnen, kann sich eingebettete Malware auf Ihren Computer oder Ihr Netzwerk ausbreiten. Wenn Sie sich nicht sicher sind, wie Sie mit diesen Risiken umgehen sollen, drucken Sie die Datei bitte aus oder wenden Sie sich an Ihren Administrator.

Anonymität
Die von den Quellen eingereichten Dateien können Informationen oder versteckte Metadaten enthalten, die ihre Identität erkennen lassen. Um Ihre Quellen zu schützen, sollten Sie in Erwägung ziehen, die Dateien zu redigieren, bevor Sie sie auf Computern mit Netzwerkanschluss bearbeiten." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Exportieren läuft: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Bitte legen Sie eines der speziell für die SecureDrop Workstation bereitgestellten Exportlaufwerke ein." +msgid "Preparing to export:
{}" +msgstr "Vorbereitung für den Export:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Entweder ist das Laufwerk nicht verschlüsselt, oder es stimmt etwas anderes nicht mit ihm." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Kennen Sie die Risiken, bevor Sie Dateien exportieren

Malware
Mit dieser Workstation können Sie Dateien sicher öffnen. Wenn Sie Dateien auf einem anderen Computer öffnen, kann sich eingebettete Malware auf Ihren Computer oder Ihr Netzwerk ausbreiten. Wenn Sie sich nicht sicher sind, wie Sie mit diesen Risiken umgehen sollen, drucken Sie die Datei bitte aus oder wenden Sie sich an Ihren Administrator.

Anonymität
Die von den Quellen eingereichten Dateien können Informationen oder versteckte Metadaten enthalten, die ihre Identität erkennen lassen. Um Ihre Quellen zu schützen, sollten Sie in Erwägung ziehen, die Dateien zu redigieren, bevor Sie sie auf Computern mit Netzwerkanschluss bearbeiten." -msgid "The passphrase provided did not work. Please try again." -msgstr "Die angegebene Passphrase hat nicht funktioniert. Bitte versuchen Sie es erneut." +msgid "Ready to export:
{}" +msgstr "Bereit zum Exportieren:
{}" -msgid "See your administrator for help." -msgstr "Wenden Sie sich an Ihren Administrator, um Hilfe zu erhalten." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Seien Sie vorsichtig, wenn Sie mit Dateien außerhalb Ihres Workstation-Rechners arbeiten." -msgid "DONE" -msgstr "FERTIG" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Passphrase für USB-Laufwerk eingeben" msgid "Preparing to print:
{}" msgstr "Druckvorbereitung:
{}" @@ -347,6 +377,9 @@ msgstr "

Risiken beim Ausdrucken handhaben

QR-Codes und Webadressen Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 692/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Greek) Currently translated at 84.6% (88 of 104 strings) Co-authored-by: Dimitris Maroulidis Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/el/ Translation: SecureDrop/SecureDrop Client --- .../locale/el/LC_MESSAGES/messages.po | 113 +++++++++++++----- 1 file changed, 82 insertions(+), 31 deletions(-) diff --git a/client/securedrop_client/locale/el/LC_MESSAGES/messages.po b/client/securedrop_client/locale/el/LC_MESSAGES/messages.po index 9f54b50d8..d60dc17b5 100644 --- a/client/securedrop_client/locale/el/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/el/LC_MESSAGES/messages.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.8.1\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-03-15 23:17+0000\n" -"Last-Translator: Cory Francis Myers \n" +"PO-Revision-Date: 2023-12-29 18:30+0000\n" +"Last-Translator: Dimitris Maroulidis \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 5.2.1\n" "Generated-By: Babel 2.10.3\n" msgid "{application_name} is already running" @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "ένα μήνυμα" msgstr[1] "{message_count} μηνύματα" -msgid "SUBMIT" -msgstr "ΥΠΟΒΟΛΗ" +msgid "DONE" +msgstr "ΤΕΛΟΣ" -msgid "Preparing to export:
{}" -msgstr "Προετοιμασία εξαγωγής:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Έτοιμο για εξαγωγή:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Εισάγετε το κρυπτογραφημένο στικάκι USB" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Εισάγετε τη κωδική φράση για το στικάκι USB" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Η κωδική φράση που εισάγατε δεν λειτούργησε. Παρακαλούμε προσπαθήστε ξανά." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Επιτυχής εξαγωγή" -msgid "Export failed" -msgstr "Αποτυχία εξαγωγής" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Έχετε επίγνωση των κινδύνων πριν εξάγετε τα αρχεία

Malware
Αυτός ο σταθμός εργασίας σας επιτρέπει να ανοίξετε τα αρχεία με ασφάλεια. Αν ανοίξετε τα αρχεία σε άλλο υπολογιστή, οποιοδήποτε κακόβουλο λογισμικό (malware) που τυχόν υπάρχει εκεί μπορεί να μεταδοθεί στον υπολογιστή σας ή στο δίκτυο. Αν δεν είστε σίγουροι πως να αντιμετωπίσετε αυτό το ρίσκο, παρακαλούμε εκτυπώστε το αρχείο, ή επικοινωνήστε με τον διαχειριστή σας.

Ανωνυμία
Τα αρχεία που υποβάλλονται από τις πηγές σας μπορεί να περιέχουν πληροφορίες ή κρυμμένα μεταδεδομένα που να τους ταυτοποιούν. Για να προστατέψετε τις πηγές σας, σκεφτείτε να επεξεργαστείτε τα αρχεία και να σβήσετε ευαίσθητες πληροφορίες, πριν τα χρησιμοποιήσετε σε υπολογιστές που είναι συνδεδεμένοι στο δίκτυο." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Εξάγεται: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Παρακαλούμε εισάγετε ένα από τα μέσα εξαγωγής που προορίζονται συγκεκριμένα για τον σταθμό εργασίας SecureDrop Workstation." +msgid "Preparing to export:
{}" +msgstr "Προετοιμασία εξαγωγής:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Είτε το συγκεκριμένο μέσο δεν είναι κρυπτογραφημένο, είτε κάτι άλλο πάει στραβά με αυτό." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Έχετε επίγνωση των κινδύνων πριν εξάγετε τα αρχεία

Malware
Αυτός ο σταθμός εργασίας σας επιτρέπει να ανοίξετε τα αρχεία με ασφάλεια. Αν ανοίξετε τα αρχεία σε άλλο υπολογιστή, οποιοδήποτε κακόβουλο λογισμικό (malware) που τυχόν υπάρχει εκεί μπορεί να μεταδοθεί στον υπολογιστή σας ή στο δίκτυο. Αν δεν είστε σίγουροι πως να αντιμετωπίσετε αυτό το ρίσκο, παρακαλούμε εκτυπώστε το αρχείο, ή επικοινωνήστε με τον διαχειριστή σας.

Ανωνυμία
Τα αρχεία που υποβάλλονται από τις πηγές σας μπορεί να περιέχουν πληροφορίες ή κρυμμένα μεταδεδομένα που να τους ταυτοποιούν. Για να προστατέψετε τις πηγές σας, σκεφτείτε να επεξεργαστείτε τα αρχεία και να σβήσετε ευαίσθητες πληροφορίες, πριν τα χρησιμοποιήσετε σε υπολογιστές που είναι συνδεδεμένοι στο δίκτυο." -msgid "The passphrase provided did not work. Please try again." -msgstr "Η κωδική φράση που εισάγατε δεν λειτούργησε. Παρακαλούμε προσπαθήστε ξανά." +msgid "Ready to export:
{}" +msgstr "Έτοιμο για εξαγωγή:
{}" -msgid "See your administrator for help." -msgstr "Μιλήστε με τον διαχειριστή σας για βοήθεια." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Θυμηθείτε να είστε προσεκτικοί όταν χρησιμοποιείτε τα αρχεία εκτός του σταθμού εργασίας σας." -msgid "DONE" -msgstr "ΤΕΛΟΣ" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Εισάγετε τη κωδική φράση για το στικάκι USB" msgid "Preparing to print:
{}" msgstr "Προετοιμασία για εκτύπωση:
{}" @@ -347,11 +377,14 @@ msgstr "

Διαχείριση κινδύνων εκτύπωσης

Κώ msgid "Please connect your printer to a USB port." msgstr "Παρακαλούμε συνδέστε τον εκτυπωτή σας μέσω μιας θύρας USB." +msgid "See your administrator for help." +msgstr "Μιλήστε με τον διαχειριστή σας για βοήθεια." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "ΝΑΙ, ΔΙΑΓΡΑΦΗ ΟΛΟΚΛΗΡΟΥ ΤΟΥ ΛΟΓΑΡΙΑΣΜΟΥ ΠΗΓΗΣ" msgid "Are you sure this is what you want?" -msgstr "Σίγουρα θέλετε να κάνετε αυτή την ενέργεια;" +msgstr "Είστε σίγουρος/η πως επιθυμείτε να γίνουν αυτές οι ενέργειες;" msgid "When the entire account for a source is deleted:" msgstr "Όταν διαγράφεται ολόκληρος ο λογαριασμός μιας πηγής:" @@ -363,7 +396,25 @@ msgid "Your organization will not be able to send them replies." msgstr "Ο οργανισμός σας δεν θα μπορεί να του/της στείλει απαντήσεις." msgid "All files and messages from that source will also be destroyed." -msgstr "Επίσης, όλα τα αρχεία και τα μηνύματα αυτής της πηγής θα καταστραφούν." +msgstr "Όλα τα αρχεία και τα μηνύματα από αυτήν την πηγή θα καταστραφούν." + +#~ msgid "SUBMIT" +#~ msgstr "ΥΠΟΒΟΛΗ" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Εισάγετε το κρυπτογραφημένο στικάκι USB" + +#~ msgid "Export failed" +#~ msgstr "Αποτυχία εξαγωγής" + +#~ msgid "Exporting: {}" +#~ msgstr "Εξάγεται: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Παρακαλούμε εισάγετε ένα από τα μέσα εξαγωγής που προορίζονται συγκεκριμένα για τον σταθμό εργασίας SecureDrop Workstation." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Είτε το συγκεκριμένο μέσο δεν είναι κρυπτογραφημένο, είτε κάτι άλλο πάει στραβά με αυτό." #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Θέλετε να διαγράψετε τα {files_to_delete}, {replies_to_delete}, {messages_to_delete} από το λογαριασμό πηγής του/της {source}?" From 60e65cd0294ee06c7ecb08a388ea0631a8331798 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 693/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/en_XA/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po b/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po index 5b2e4900c..2d4375bb1 100644 --- a/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "[!one message!]" msgstr[1] "[!!{message_count} messages!!]" -msgid "SUBMIT" -msgstr "[SUBMIT]" +msgid "DONE" +msgstr "[DONE]" -msgid "Preparing to export:
{}" -msgstr "[!!!!!!Preparing to export:
{}!!!!!!]" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "[!!!!!!Ready to export:
{}!!!!!!]" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "[!!Insert encrypted USB drive!!]" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "[!!!Enter passphrase for USB drive!!!]" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "[!!!!!The passphrase provided did not work. Please try again.!!!!!]" + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "[!Export successful!]" -msgid "Export failed" -msgstr "[!Export failed!]" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "[!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]" +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "[!Exporting: {}!]" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "[!!!!!!!!!Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.!!!!!!!!!]" +msgid "Preparing to export:
{}" +msgstr "[!!!!!!Preparing to export:
{}!!!!!!]" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "[!!!!!!!Either the drive is not encrypted or there is something else wrong with it.!!!!!!!]" +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "[!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]" -msgid "The passphrase provided did not work. Please try again." -msgstr "[!!!!!The passphrase provided did not work. Please try again.!!!!!]" +msgid "Ready to export:
{}" +msgstr "[!!!!!!Ready to export:
{}!!!!!!]" -msgid "See your administrator for help." -msgstr "[!!!See your administrator for help.!!!]" +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "[!!!!!!!!Remember to be careful when working with files outside of your Workstation machine.!!!!!!!!]" -msgid "DONE" -msgstr "[DONE]" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "[!!!Enter passphrase for USB drive!!!]" msgid "Preparing to print:
{}" msgstr "[!!!!!!Preparing to print:
{}!!!!!!]" @@ -347,6 +377,9 @@ msgstr "[!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Managing printout msgid "Please connect your printer to a USB port." msgstr "[!!!!Please connect your printer to a USB port.!!!!]" +msgid "See your administrator for help." +msgstr "[!!!See your administrator for help.!!!]" + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "[!!!YES, DELETE ENTIRE SOURCE ACCOUNT!!!]" @@ -365,6 +398,24 @@ msgstr "[!!!!!Your organization will not be able to send them replies.!!!!!]" msgid "All files and messages from that source will also be destroyed." msgstr "[!!!!!!All files and messages from that source will also be destroyed.!!!!!!]" +#~ msgid "SUBMIT" +#~ msgstr "[SUBMIT]" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "[!!Insert encrypted USB drive!!]" + +#~ msgid "Export failed" +#~ msgstr "[!Export failed!]" + +#~ msgid "Exporting: {}" +#~ msgstr "[!Exporting: {}!]" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "[!!!!!!!!!Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.!!!!!!!!!]" + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "[!!!!!!!Either the drive is not encrypted or there is something else wrong with it.!!!!!!!]" + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "[!!!!!!!!!!!!You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?!!!!!!!!!!!!]" From 3de9dfd2434bae63e793b5f152f23fc50f6b8a31 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 694/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Spanish) Currently translated at 100.0% (104 of 104 strings) Co-authored-by: Weblate Co-authored-by: clarailr Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/es/ Translation: SecureDrop/SecureDrop Client --- .../locale/es/LC_MESSAGES/messages.po | 141 ++++++++++++------ 1 file changed, 96 insertions(+), 45 deletions(-) diff --git a/client/securedrop_client/locale/es/LC_MESSAGES/messages.po b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po index abc28fd01..cc6c98752 100644 --- a/client/securedrop_client/locale/es/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.5.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-11-22 19:12+0000\n" -"Last-Translator: Cory Francis Myers \n" +"PO-Revision-Date: 2024-01-12 20:30+0000\n" +"Last-Translator: clarailr \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.1.1\n" +"X-Generator: Weblate 5.3.1\n" "Generated-By: Babel 2.9.1\n" msgid "{application_name} is already running" @@ -23,8 +23,8 @@ msgstr "{application_name} ya se está ejecutando" msgid "Retrieving 1 message" msgid_plural "Retrieving {message_count} messages" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Recuperando 1 mensaje" +msgstr[1] "Recuperando {message_count} mensajes" msgid "The SecureDrop server cannot be reached. Trying to reconnect..." msgstr "El servidor SecureDrop no puede ser alcanzado. Intentando reconectar..." @@ -72,18 +72,18 @@ msgstr "No hay mensajes." #, python-format msgid "%(sender)s wrote:" -msgstr "" +msgstr "%(sender)s ha escrito:" #, python-format msgid "%(sender)s sent:" -msgstr "" +msgstr "%(sender)s ha enviado:" #, python-format msgid "File: %(filename)s" -msgstr "" +msgstr "Archivo: %(filename)s" msgid "Download All" -msgstr "" +msgstr "Descargar todo" msgid "Delete Source Account" msgstr "Eliminar Cuenta de Fuente" @@ -92,19 +92,19 @@ msgid "Delete All Files and Messages" msgstr "Borrar todos los archivos y mensajes" msgid "Print Transcript" -msgstr "" +msgstr "Imprimir la transcripción" msgid "Export Transcript" -msgstr "" +msgstr "Exportar la transcripción" msgid "Export All" -msgstr "" +msgstr "Exportar todo" msgid "

Some files will not be exported

Some files from this source have not yet been downloaded, and will not be exported.

To export the currently downloaded files, click \"Continue.\"" -msgstr "" +msgstr "

No se exportarán algunos archivos

No se han descargado algunos archivos de esta fuente, por lo que no se exportarán.

Para exportar los archivos que has descargado, haz clic en «Continuar»." msgid "all files and transcript" -msgstr "" +msgstr "Todos los archivos y la transcripción" msgid "SecureDrop Client {}" msgstr "Cliente SecureDrop {}" @@ -149,10 +149,10 @@ msgid "Send a response" msgstr "Enviar una respuesta" msgid "Deleting files and messages…" -msgstr "" +msgstr "Borrando ficheros y mensajes…" msgid "Deleting source account…" -msgstr "" +msgstr "Borrando cuenta de origen…" msgid "— All files and messages deleted for this source —" msgstr "— Todos los archivos y mensajes borrados para esta fuente —" @@ -204,10 +204,10 @@ msgid " to compose or send a reply" msgstr " para componer o enviar una respuesta" msgid "FILES AND MESSAGES" -msgstr "" +msgstr "ARCHIVOS Y MENSAJES" msgid "SOURCE ACCOUNT" -msgstr "" +msgstr "CUENTA DE ORIGEN" msgid "Username" msgstr "Nombre de Usuario" @@ -264,7 +264,7 @@ msgid "YES, DELETE FILES AND MESSAGES" msgstr "SÍ, BORRAR ARCHIVOS Y MENSAJES" msgid "Would you like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" -msgstr "" +msgstr "¿Desear borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de origen {source}?" msgid "Preserving the account will retain its metadata, and the ability for {source} to log in to your SecureDrop again." msgstr "Preservar la cuenta retendrá sus metadatos, y la habilidad de {source} de iniciar sesión en tu SecureDrop de nuevo." @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "un mensaje" msgstr[1] "{message_count} mensajes" -msgid "SUBMIT" -msgstr "ENVIAR" +msgid "DONE" +msgstr "HECHO" -msgid "Preparing to export:
{}" -msgstr "Preparando para exportar:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Listo para exportar:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Insertar unidad USB cifrada" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Ingresar frase de contraseña para unidad USB" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "La frase de contraseña ingresada no funcionó. Por favor inténtalo de nuevo." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Exportación exitosa" -msgid "Export failed" -msgstr "Fallo de exportación" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entiende los riesgos antes de exportar archivos

Malware
Esta estación de trabajo te permite abrir archivos en forma segura. Si abres archivos en otra computadora, cualquier malware incorporado podría diseminarse a tu computadora o red. Si no estás seguro de cómo gestionar este riesgo, por favor imprime el archivo, o contacta a tu administrador.

Anonimato
Los archivos enviados por fuentes podrían contener información o metadatos ocultos que identifican quiénes son. Para proteger a tus fuentes, por favor considera redactar los archivos antes de trabajar con ellos en computadoras conectadas en red." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Exportando: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Por favor inserta una de las unidades de exportación provistas específicamente para la estación de trabajo SecureDrop." +msgid "Preparing to export:
{}" +msgstr "Preparando para exportar:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "La unidad no está cifrada o bien hay algo más que no está correcto con ella." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entiende los riesgos antes de exportar archivos

Malware
Esta estación de trabajo te permite abrir archivos en forma segura. Si abres archivos en otra computadora, cualquier malware incorporado podría diseminarse a tu computadora o red. Si no estás seguro de cómo gestionar este riesgo, por favor imprime el archivo, o contacta a tu administrador.

Anonimato
Los archivos enviados por fuentes podrían contener información o metadatos ocultos que identifican quiénes son. Para proteger a tus fuentes, por favor considera redactar los archivos antes de trabajar con ellos en computadoras conectadas en red." -msgid "The passphrase provided did not work. Please try again." -msgstr "La frase de contraseña ingresada no funcionó. Por favor inténtalo de nuevo." +msgid "Ready to export:
{}" +msgstr "Listo para exportar:
{}" -msgid "See your administrator for help." -msgstr "Vé a tu administrador por ayuda." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Recuerda ser cuidadoso cuando trabajes con archivos fuera de tu estación de trabajo." -msgid "DONE" -msgstr "HECHO" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Ingresar frase de contraseña para unidad USB" msgid "Preparing to print:
{}" msgstr "Preparando para imprimir:
{}" @@ -347,6 +377,9 @@ msgstr "

Gestionando los riesgos con impresiones

códigos QR y direcci msgid "Please connect your printer to a USB port." msgstr "Por favor conecta tu impresora a un puerto USB." +msgid "See your administrator for help." +msgstr "Vé a tu administrador por ayuda." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "SÍ, BORRAR POR COMPLETO LA CUENTA DE LA FUENTE" @@ -365,6 +398,24 @@ msgstr "Tu organización no será capaz de enviarle respuestas." msgid "All files and messages from that source will also be destroyed." msgstr "Todos los archivos y mensajes de esa fuente también serán destruidos." +#~ msgid "SUBMIT" +#~ msgstr "ENVIAR" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Insertar unidad USB cifrada" + +#~ msgid "Export failed" +#~ msgstr "Fallo de exportación" + +#~ msgid "Exporting: {}" +#~ msgstr "Exportando: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Por favor inserta una de las unidades de exportación provistas específicamente para la estación de trabajo SecureDrop." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "La unidad no está cifrada o bien hay algo más que no está correcto con ella." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "¿Desearías borrar {files_to_delete}, {replies_to_delete}, {messages_to_delete} de la cuenta de la fuente para {source}?" From 500c5d426053281f23045ae02d5b86cd6b32bb15 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 695/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/fi/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po b/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po index bd6baf0d1..aa1bbade8 100644 --- a/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "yksi viesti" msgstr[1] "{message_count} viestiä" -msgid "SUBMIT" -msgstr "LÄHETÄ" +msgid "DONE" +msgstr "VALMIS" -msgid "Preparing to export:
{}" -msgstr "Valmistellaan vientiä:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Valmis vientiin:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Liitä salattu USB-asema" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Kirjoita USB-aseman tunnuslause" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Annettu tunnuslause ei kelpaa. Yritä uudelleen." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Vienti onnistui" -msgid "Export failed" -msgstr "Vienti epäonnistui" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Ymmärrä riskit ennen kuin viet tiedostoja

Haittaohjelmat
Tämä työasema mahdollistaa tiedostojen avaamisen turvallisesti. Jos avaat tiedostoja jollain muulla tietokoneella, mikä tahansa upotettu haittaohjelma voi levitä tietokoneellesi tai verkkoon. Jos olet epävarma, miten hallita tätä riskiä, tulosta tiedosto tai ole yhteydessä ylläpitoon.

Anonymiteetti
Lähteiden toimittamat tiedostot saattavat sisältää piilotettua metatietoa, jonka pohjalta on mahdollista tunnistaa lähde. Suojaa lähteitä sensuroimalla, muokkaamalla ja rajaamalla tiedostoja, jos olet aikeissa käyttää näitä tiedostoja verkkoon yhdistetyillä tietokoneilla." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Viedään: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Liitä yksi SecureDrop Workstation -tietokoneelle tarkoitetusta viemiseen pyhitetyistä levyistä." +msgid "Preparing to export:
{}" +msgstr "Valmistellaan vientiä:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Asema ei ole salattu tai siinä on jotain muuta vialla." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Ymmärrä riskit ennen kuin viet tiedostoja

Haittaohjelmat
Tämä työasema mahdollistaa tiedostojen avaamisen turvallisesti. Jos avaat tiedostoja jollain muulla tietokoneella, mikä tahansa upotettu haittaohjelma voi levitä tietokoneellesi tai verkkoon. Jos olet epävarma, miten hallita tätä riskiä, tulosta tiedosto tai ole yhteydessä ylläpitoon.

Anonymiteetti
Lähteiden toimittamat tiedostot saattavat sisältää piilotettua metatietoa, jonka pohjalta on mahdollista tunnistaa lähde. Suojaa lähteitä sensuroimalla, muokkaamalla ja rajaamalla tiedostoja, jos olet aikeissa käyttää näitä tiedostoja verkkoon yhdistetyillä tietokoneilla." -msgid "The passphrase provided did not work. Please try again." -msgstr "Annettu tunnuslause ei kelpaa. Yritä uudelleen." +msgid "Ready to export:
{}" +msgstr "Valmis vientiin:
{}" -msgid "See your administrator for help." -msgstr "Pyydä tukea ylläpitäjältä." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Käsittele tiedostoja varoen Workstation-tietokoneen ulkopuolella." -msgid "DONE" -msgstr "VALMIS" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Kirjoita USB-aseman tunnuslause" msgid "Preparing to print:
{}" msgstr "Valmistellaan tulostusta:
{}" @@ -347,6 +377,9 @@ msgstr "

Tulostukseen liittyvien riskien hallinta

QR-koodit ja verkko- msgid "Please connect your printer to a USB port." msgstr "Yhdistä tulostin USB-porttiin." +msgid "See your administrator for help." +msgstr "Pyydä tukea ylläpitäjältä." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "KYLLÄ, POISTA KOKO LÄHDETILI" @@ -365,6 +398,24 @@ msgstr "Organisaatiosi ei voi lähettää lähteelle vastauksia." msgid "All files and messages from that source will also be destroyed." msgstr "Kaikki lähteeltä vastaanotetut tiedostot ja viestit tuhotaan." +#~ msgid "SUBMIT" +#~ msgstr "LÄHETÄ" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Liitä salattu USB-asema" + +#~ msgid "Export failed" +#~ msgstr "Vienti epäonnistui" + +#~ msgid "Exporting: {}" +#~ msgstr "Viedään: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Liitä yksi SecureDrop Workstation -tietokoneelle tarkoitetusta viemiseen pyhitetyistä levyistä." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Asema ei ole salattu tai siinä on jotain muuta vialla." + #~ msgid "Deleting files and messages..." #~ msgstr "Poistetaan tiedostoja ja viestejä..." From daf02097835b0f568c2e03319dec6936812ec422 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 696/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (French) Currently translated at 100.0% (104 of 104 strings) Co-authored-by: AO Localization Lab Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/fr/ Translation: SecureDrop/SecureDrop Client --- .../locale/fr/LC_MESSAGES/messages.po | 107 +++++++++++++----- 1 file changed, 79 insertions(+), 28 deletions(-) diff --git a/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po index 390f9ef3a..8bfccc45e 100644 --- a/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.8.1\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-15 19:30+0000\n" +"PO-Revision-Date: 2024-01-13 23:30+0000\n" "Last-Translator: AO Localization Lab \n" "Language-Team: French \n" "Language: fr\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.18.2\n" +"X-Generator: Weblate 5.3.1\n" "Generated-By: Babel 2.10.3\n" msgid "{application_name} is already running" @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "un message" msgstr[1] "{message_count} messages" -msgid "SUBMIT" -msgstr "ENVOYER" +msgid "DONE" +msgstr "TERMINÉ" -msgid "Preparing to export:
{}" -msgstr "Préparation à l’exportation :
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Prêt à exporter :
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Insérer la clé USB chiffrée" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Saisir la phrase de passe de la clé USB" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "La phrase de passe est erronée. Veuillez recommencer." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "L’exportation est réussie" -msgid "Export failed" -msgstr "Échec d’exportation" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Comprenez les risques avant d’exporter des fichiers

Logiciels malveillants
Ce poste de travail vous permet d’ouvrir des fichiers en toute sécurité. Si vous ouvrez les fichiers sur un autre ordinateur, tout logiciel malveillant qu’ils comporteraient pourrait se propager sur votre ordinateur ou votre réseau. Si vous ne savez pas comment gérer ce risque, veuillez imprimer ce fichier ou contacter votre administrateur.

Anonymat
Les fichiers envoyés par les sources peuvent contenir de l’information ou des métadonnées cachées qui identifient ces sources. Pour les protéger, veuillez envisager de caviarder les fichiers avant de les traiter sur des ordinateurs connectés à un réseau." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Exportation : {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Veuillez insérer une des clés d’exportation réservées au poste de travail SecureDrop." +msgid "Preparing to export:
{}" +msgstr "Préparation à l’exportation :
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Soit la clé n’est pas chiffrée soit elle présente un autre problème." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Comprenez les risques avant d’exporter des fichiers

Logiciels malveillants
Ce poste de travail vous permet d’ouvrir des fichiers en toute sécurité. Si vous ouvrez les fichiers sur un autre ordinateur, tout logiciel malveillant qu’ils comporteraient pourrait se propager sur votre ordinateur ou votre réseau. Si vous ne savez pas comment gérer ce risque, veuillez imprimer ce fichier ou contacter votre administrateur.

Anonymat
Les fichiers envoyés par les sources peuvent contenir de l’information ou des métadonnées cachées qui identifient ces sources. Pour les protéger, veuillez envisager de caviarder les fichiers avant de les traiter sur des ordinateurs connectés à un réseau." -msgid "The passphrase provided did not work. Please try again." -msgstr "La phrase de passe est erronée. Veuillez recommencer." +msgid "Ready to export:
{}" +msgstr "Prêt à exporter :
{}" -msgid "See your administrator for help." -msgstr "Consultez votre administrateur pour obtenir de l’aide." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Veuillez faire preuve de prudence en traitant les fichiers sur un ordinateur autre que votre poste de travail." -msgid "DONE" -msgstr "TERMINÉ" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Saisir la phrase de passe de la clé USB" msgid "Preparing to print:
{}" msgstr "Préparation à l’impression :
{}" @@ -347,6 +377,9 @@ msgstr "

Gérer les risques d’impression

Codes QR et adresses Web Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 697/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/hr/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po index 8f3aeb66b..a5d07b499 100644 --- a/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po @@ -288,50 +288,80 @@ msgstr[0] "jedna poruka" msgstr[1] "{message_count} poruke" msgstr[2] "{message_count} poruka" -msgid "SUBMIT" -msgstr "POŠALJI" +msgid "DONE" +msgstr "Gotovo" -msgid "Preparing to export:
{}" -msgstr "Priprema za izvoz:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Spremno za izvoz:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Umetnite enkriptirani USB pogon" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Unesite lozinku za USB pogon" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Dana lozinka ne radi. Molimo pokušajte opet." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Izvoz je uspio" -msgid "Export failed" -msgstr "Izvoz nije uspio" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Razumijte rizike prije izvoza datoteka

Malware
Ova radna stanica Vam omogućuje sigurno otvaranje datoteka. Ako otvorite datoteke na drugom računalu, svaki će se usađeni malware moći proširiti na Vaše računalo ili mrežu. Ako niste sigurni kako upravljati ovim rizikom, molimo Vas da ispišete datoteku ili kontaktirate svog administratora.

Anonimnost
Datoteke koje je predao izvor mogu sadržavati informacije ili skrivene metapodatke koji identificiraju taj izvor. Kako bi zaštitili svoje izvore, razmotrite uređivanje datoteka prije nego radite s njima na računalima spojenim na mrežu." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Izvoz:{}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Umetnite jedan od pogona za izvoz predviđenih specifično za SecureDrop radnu stanicu." +msgid "Preparing to export:
{}" +msgstr "Priprema za izvoz:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Ili pogon nije enkriptiran ili je nešto drugo pogrešno s njim." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Razumijte rizike prije izvoza datoteka

Malware
Ova radna stanica Vam omogućuje sigurno otvaranje datoteka. Ako otvorite datoteke na drugom računalu, svaki će se usađeni malware moći proširiti na Vaše računalo ili mrežu. Ako niste sigurni kako upravljati ovim rizikom, molimo Vas da ispišete datoteku ili kontaktirate svog administratora.

Anonimnost
Datoteke koje je predao izvor mogu sadržavati informacije ili skrivene metapodatke koji identificiraju taj izvor. Kako bi zaštitili svoje izvore, razmotrite uređivanje datoteka prije nego radite s njima na računalima spojenim na mrežu." -msgid "The passphrase provided did not work. Please try again." -msgstr "Dana lozinka ne radi. Molimo pokušajte opet." +msgid "Ready to export:
{}" +msgstr "Spremno za izvoz:
{}" -msgid "See your administrator for help." -msgstr "Obratite se administratoru za pomoć." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Zapamtite - budite oprezni kad radite s datotekama izvan svoje radne stanice." -msgid "DONE" -msgstr "Gotovo" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Unesite lozinku za USB pogon" msgid "Preparing to print:
{}" msgstr "Pripremanje za ispis:
{}" @@ -351,6 +381,9 @@ msgstr "

Upravljanje rizicima ispisa

QR kodovi i web adrese
N msgid "Please connect your printer to a USB port." msgstr "Molimo spojite pisač sa USB portom." +msgid "See your administrator for help." +msgstr "Obratite se administratoru za pomoć." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "Da, obriši cijeli račun izvora" @@ -369,6 +402,24 @@ msgstr "Vaša organizacija mu neće moći slati odgovore." msgid "All files and messages from that source will also be destroyed." msgstr "Sve datoteke i poruke tog izvora će također biti uništene." +#~ msgid "SUBMIT" +#~ msgstr "POŠALJI" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Umetnite enkriptirani USB pogon" + +#~ msgid "Export failed" +#~ msgstr "Izvoz nije uspio" + +#~ msgid "Exporting: {}" +#~ msgstr "Izvoz:{}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Umetnite jedan od pogona za izvoz predviđenih specifično za SecureDrop radnu stanicu." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Ili pogon nije enkriptiran ili je nešto drugo pogrešno s njim." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Želite obrisati {files_to_delete}, {replies_to_delete}, {messages_to_delete} od izvora {source}?" From d0db65a2fcbf0d22d879909536e16a3203f87d41 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 698/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/is/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/is/LC_MESSAGES/messages.po b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po index ef21c86e3..d6deda06e 100644 --- a/client/securedrop_client/locale/is/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "ein skilaboð" msgstr[1] "{message_count} skilaboð" -msgid "SUBMIT" -msgstr "SENDA INN" +msgid "DONE" +msgstr "LOKIÐ" -msgid "Preparing to export:
{}" -msgstr "Undirbý útflutning:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Tilbúið að flytja út:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Settu inn dulritað USB-drif" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Settu inn lykilorð fyrir USB-drifið" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Uppgefið lykilorð virkaði ekki. Reyndu aftur." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Útflutningur tókst" -msgid "Export failed" -msgstr "Útflutningur mistókst" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Skilningur á áhættu við að flytja út skrár

Spilliforrit
Þessi vinnutölva gerir kleift að opna skrár á öruggan máta. Ef þú opnar skrár á annarri tölvu, áttu á hættu að ígrædd spilliforrit smiti þá tölvu eða breiðist út á netkerfinu. Ef þú ert ekki viss um hvernig best sé að gæta öryggis svið þessar aðstæður, ættirðu að prenta skrána eða hafa samband við kerfisstjórann þinn.

Nafnleysi
Skrár sem heimildarmenn senda inn geta innihaldið upplýsingar eða falin lýsigögn sem gætu varpað ljósi á hverjir þeir eru. Til að vernda heimildarmenn þína ættirðu að yfirfara skrárnar og breyta þeim áður en þú ferð að vinna með skrárnar á nettengdum tölvum." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Flyt út: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Settu inn eitt af útflutningsdrifunum sem útbúin hafa verið sérstaklega fyrir SecureDrop-vinnutölvuna." +msgid "Preparing to export:
{}" +msgstr "Undirbý útflutning:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Annað hvort er drifið ekki dulritað eða að það er eitthvað annað að því." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Skilningur á áhættu við að flytja út skrár

Spilliforrit
Þessi vinnutölva gerir kleift að opna skrár á öruggan máta. Ef þú opnar skrár á annarri tölvu, áttu á hættu að ígrædd spilliforrit smiti þá tölvu eða breiðist út á netkerfinu. Ef þú ert ekki viss um hvernig best sé að gæta öryggis svið þessar aðstæður, ættirðu að prenta skrána eða hafa samband við kerfisstjórann þinn.

Nafnleysi
Skrár sem heimildarmenn senda inn geta innihaldið upplýsingar eða falin lýsigögn sem gætu varpað ljósi á hverjir þeir eru. Til að vernda heimildarmenn þína ættirðu að yfirfara skrárnar og breyta þeim áður en þú ferð að vinna með skrárnar á nettengdum tölvum." -msgid "The passphrase provided did not work. Please try again." -msgstr "Uppgefið lykilorð virkaði ekki. Reyndu aftur." +msgid "Ready to export:
{}" +msgstr "Tilbúið að flytja út:
{}" -msgid "See your administrator for help." -msgstr "Hafðu samband við kerfisstjórann þinn til að fá frekari aðstoð." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Mundu eftir að fara varlega þegar þú ert að vinna með skrár utan vinnutölvunnar þinnar." -msgid "DONE" -msgstr "LOKIÐ" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Settu inn lykilorð fyrir USB-drifið" msgid "Preparing to print:
{}" msgstr "Undirbý prentun:
{}" @@ -347,6 +377,9 @@ msgstr "

Áhættumat við útprentun

QR-kóðar og vefslóðir
Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 699/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/it/LC_MESSAGES/messages.po | 74 +++++++++++++++---- 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/client/securedrop_client/locale/it/LC_MESSAGES/messages.po b/client/securedrop_client/locale/it/LC_MESSAGES/messages.po index 836d4bbaa..a0cbd3631 100644 --- a/client/securedrop_client/locale/it/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/it/LC_MESSAGES/messages.po @@ -284,49 +284,79 @@ msgid_plural "{message_count} messages" msgstr[0] "un messaggio" msgstr[1] "{message_count} messaggi" -msgid "SUBMIT" -msgstr "INVIA" +msgid "DONE" +msgstr "" -msgid "Preparing to export:
{}" +msgid "BACK" msgstr "" -msgid "Ready to export:
{}" +msgid "No device detected" msgstr "" -msgid "Insert encrypted USB drive" +msgid "Too many USB devices detected; please insert one supported device." msgstr "" -msgid "Enter passphrase for USB drive" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "" + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." msgstr "" msgid "Export successful" msgstr "Esportazione avvenuta con successo" -msgid "Export failed" -msgstr "Esportazione non riuscita" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" + +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgid "Error encountered. Please contact support." msgstr "" -msgid "Exporting: {}" -msgstr "Esportazione: {}" +msgid "Preparing to export:
{}" +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." msgstr "" -msgid "Either the drive is not encrypted or there is something else wrong with it." +msgid "Ready to export:
{}" msgstr "" -msgid "The passphrase provided did not work. Please try again." +msgid "Export Failed" msgstr "" -msgid "See your administrator for help." +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "" -msgid "DONE" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" msgstr "" msgid "Preparing to print:
{}" @@ -347,6 +377,9 @@ msgstr "" msgid "Please connect your printer to a USB port." msgstr "" +msgid "See your administrator for help." +msgstr "" + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "" @@ -365,6 +398,15 @@ msgstr "" msgid "All files and messages from that source will also be destroyed." msgstr "Anche tutti i file e i messaggi inviati da quella fonte verranno distrutti." +#~ msgid "SUBMIT" +#~ msgstr "INVIA" + +#~ msgid "Export failed" +#~ msgstr "Esportazione non riuscita" + +#~ msgid "Exporting: {}" +#~ msgstr "Esportazione: {}" + #~ msgid "Deleting files and messages..." #~ msgstr "Eliminare file e messaggi..." From 9fa7bc2ceb702f71cec96edd4725cd6b6dafb3f1 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 700/751] Translated using Weblate (Polish) Currently translated at 100.0% (115 of 115 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Adam Rak Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/pl/ Translation: SecureDrop/SecureDrop Client --- .../locale/pl/LC_MESSAGES/messages.po | 107 +++++++++++++----- 1 file changed, 79 insertions(+), 28 deletions(-) diff --git a/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po index c722b700c..219eb8c8d 100644 --- a/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.8.1\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-04-22 20:13+0000\n" +"PO-Revision-Date: 2024-03-05 09:30+0000\n" "Last-Translator: Adam Rak \n" "Language-Team: Polish \n" "Language: pl\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 5.3.1\n" "Generated-By: Babel 2.10.3\n" msgid "{application_name} is already running" @@ -288,50 +288,80 @@ msgstr[0] "jedna wiadomość" msgstr[1] "{message_count} wiadomości" msgstr[2] "{message_count} wiadomości" -msgid "SUBMIT" -msgstr "PRZEŚLIJ" +msgid "DONE" +msgstr "GOTOWE" -msgid "Preparing to export:
{}" -msgstr "Przygotowanie do eksportu:
{}" +msgid "BACK" +msgstr "WSTECZ" -msgid "Ready to export:
{}" -msgstr "Gotowość do eksportu:
{}" +msgid "No device detected" +msgstr "Nie wykryto żadnego urządzenia" -msgid "Insert encrypted USB drive" -msgstr "Włóż zaszyfrowany dysk USB" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "Wykryto zbyt wiele urządzeń USB; włóż jedno obsługiwane urządzenie." -msgid "Enter passphrase for USB drive" -msgstr "Wprowadź hasło do dysku USB" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "Albo dysk nie jest zaszyfrowany, albo jest z nim coś nie tak.
Jeśli jest to dysk VeraCrypt, odblokuj go z poziomu `sd-devices` i spróbuj ponownie." + +msgid "The device is ready for export." +msgstr "Urządzenie jest gotowe do eksportu." + +msgid "The device is locked." +msgstr "Urządzenie jest zablokowane." + +msgid "The passphrase provided did not work. Please try again." +msgstr "Podane hasło nie zadziałało. Spróbuj ponownie." + +msgid "Error mounting drive" +msgstr "Błąd podczas montowania napędu" + +msgid "Error during export" +msgstr "Błąd podczas eksportu" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "Pliki zostały wyeksportowane pomyślnie, ale nie można odmontować urządzenia USB." + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "Pliki zostały wyeksportowane pomyślnie, ale na dysku pozostały niektóre pliki tymczasowe. Uruchom ponownie system, aby je usunąć." msgid "Export successful" msgstr "Eksport udany" -msgid "Export failed" -msgstr "Eksport nie powiódł się" +msgid "Error encountered with this device. See your administrator for help." +msgstr "Wystąpił błąd w tym urządzeniu. Skontaktuj się z administratorem, aby uzyskać pomoc." -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Zrozum zagrożenia przed wyeksportowaniem plików

Złośliwe oprogramowanie
Ta stacja robocza umożliwia bezpieczne otwieranie plików. Jeśli otworzysz pliki na innym komputerze, każde osadzone złośliwe oprogramowanie może rozprzestrzenić się na Twój komputer lub sieć. Jeśli nie masz pewności, jak zarządzać tym ryzykiem, wydrukuj plik lub skontaktuj się z administratorem.

Anonimowość
Pliki przesłane przez źródła mogą zawierać informacje lub ukryte metadane, które identyfikują, kim są. Aby chronić swoje źródła, rozważ redagowanie plików przed rozpoczęciem pracy z nimi na komputerach podłączonych do sieci." +msgid "Files were moved or missing and could not be exported." +msgstr "Pliki zostały przeniesione lub ich brak i nie można ich wyeksportować." -msgid "Exporting: {}" -msgstr "Eksportowanie: {}" +msgid "Error encountered. Please contact support." +msgstr "Wystąpił błąd. Skontaktuj się z pomocą techniczną." -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Włóż jeden z dysków eksportu, który jest przeznaczony specjalnie dla stacji roboczej SecureDrop." +msgid "Preparing to export:
{}" +msgstr "Przygotowanie do eksportu:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Albo dysk nie jest zaszyfrowany, albo jest z nim coś nie tak." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Zrozum zagrożenia przed wyeksportowaniem plików

Złośliwe oprogramowanie
Ta stacja robocza umożliwia bezpieczne otwieranie plików. Jeśli otworzysz pliki na innym komputerze, każde osadzone złośliwe oprogramowanie może rozprzestrzenić się na Twój komputer lub sieć. Jeśli nie masz pewności, jak zarządzać tym ryzykiem, wydrukuj plik lub skontaktuj się z administratorem.

Anonimowość
Pliki przesłane przez źródła mogą zawierać informacje lub ukryte metadane, które identyfikują, kim są. Aby chronić swoje źródła, rozważ redagowanie plików przed rozpoczęciem pracy z nimi na komputerach podłączonych do sieci." -msgid "The passphrase provided did not work. Please try again." -msgstr "Podane hasło nie zadziałało. Spróbuj ponownie." +msgid "Ready to export:
{}" +msgstr "Gotowość do eksportu:
{}" -msgid "See your administrator for help." -msgstr "Skontaktuj się z administratorem, aby uzyskać pomoc." +msgid "Export Failed" +msgstr "Eksport nie powiódł się" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "Włóż jeden z dysków eksportowych dostarczonych specjalnie dla stacji roboczej SecureDrop.
Jeśli używasz dysku VeraCrypt, odblokuj go ręcznie przed kontynuowaniem." msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Pamiętaj, aby zachować ostrożność podczas pracy z plikami poza maszyną stacji roboczej." -msgid "DONE" -msgstr "GOTOWE" +msgid "Export sucessful, but drive was not locked" +msgstr "Eksport powiódł się, ale dysk nie został zablokowany" + +msgid "Working..." +msgstr "Pracuję..." + +msgid "Enter passphrase for USB drive" +msgstr "Wprowadź hasło do dysku USB" msgid "Preparing to print:
{}" msgstr "Przygotowanie do druku:
{}" @@ -351,6 +381,9 @@ msgstr "

Zarządzanie ryzykiem związanym z wydrukami

Kody QR i adresy msgid "Please connect your printer to a USB port." msgstr "Podłącz drukarkę do portu USB." +msgid "See your administrator for help." +msgstr "Skontaktuj się z administratorem, aby uzyskać pomoc." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "TAK, USUŃ CAŁE KONTO ŹRÓDŁA" @@ -369,6 +402,24 @@ msgstr "Twoja organizacja nie będzie mogła wysyłać im odpowiedzi." msgid "All files and messages from that source will also be destroyed." msgstr "Wszystkie pliki i wiadomośc od tego źródła również zostaną zniszczone." +#~ msgid "SUBMIT" +#~ msgstr "PRZEŚLIJ" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Włóż zaszyfrowany dysk USB" + +#~ msgid "Export failed" +#~ msgstr "Eksport nie powiódł się" + +#~ msgid "Exporting: {}" +#~ msgstr "Eksportowanie: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Włóż jeden z dysków eksportu, który jest przeznaczony specjalnie dla stacji roboczej SecureDrop." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Albo dysk nie jest zaszyfrowany, albo jest z nim coś nie tak." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Chcesz usunąć {files_to_delete}, {replies_to_delete}, {messages_to_delete} z konta źródła {source}?" From 69770414612e0da7a4a4b89194ad18f05047391d Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 701/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/pt_BR/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po index 58c52201a..2cda0dc04 100644 --- a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po @@ -285,50 +285,80 @@ msgid_plural "{message_count} messages" msgstr[0] "uma mensagem" msgstr[1] "{message_count} mensagens" -msgid "SUBMIT" -msgstr "ENVIAR" +msgid "DONE" +msgstr "FEITO" -msgid "Preparing to export:
{}" -msgstr "Preparando para exportar:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Pronto para exportar:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Insira um USB drive encriptado" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Insira frase-passe para o USB drive" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "A frase-passe fornecida não funcionou. Por favor, tenta novamente." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Exportação bem sucedida" -msgid "Export failed" -msgstr "Exportação falhou" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entenda os riscos antes de exportar arquivos

Malware
Esta estação de trabalho permite abrir arquivos com segurança. Se você abrir arquivos em outro computador, qualquer malware incorporado pode se espalhar para seu computador ou rede. Se você não tiver certeza de como gerenciar esse risco, imprima o arquivo ou entre em contato com seu administrador.

Anonimato
Os arquivos enviados por fontes podem conter informações ou metadados ocultos que identifica quem são. Para proteger suas fontes, considere redigir arquivos antes de trabalhar com eles em computadores conectados à rede." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Exportando: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Por favor, insira um dos drivers de exportação provisionados especificamente para o SecureDrop Workstation." +msgid "Preparing to export:
{}" +msgstr "Preparando para exportar:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Ou o drive não está encriptado ou há algum outro problema com ele." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entenda os riscos antes de exportar arquivos

Malware
Esta estação de trabalho permite abrir arquivos com segurança. Se você abrir arquivos em outro computador, qualquer malware incorporado pode se espalhar para seu computador ou rede. Se você não tiver certeza de como gerenciar esse risco, imprima o arquivo ou entre em contato com seu administrador.

Anonimato
Os arquivos enviados por fontes podem conter informações ou metadados ocultos que identifica quem são. Para proteger suas fontes, considere redigir arquivos antes de trabalhar com eles em computadores conectados à rede." -msgid "The passphrase provided did not work. Please try again." -msgstr "A frase-passe fornecida não funcionou. Por favor, tenta novamente." +msgid "Ready to export:
{}" +msgstr "Pronto para exportar:
{}" -msgid "See your administrator for help." -msgstr "Consulte seu administrador para ajuda." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Lembre-se de ter cuidado ao trabalhar com arquivos fora de sua estação de trabalho." -msgid "DONE" -msgstr "FEITO" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Insira frase-passe para o USB drive" msgid "Preparing to print:
{}" msgstr "Preparando para imprimir:
{}" @@ -348,6 +378,9 @@ msgstr "

Gerenciando riscos de impressão

Códigos QR e endereços web msgid "Please connect your printer to a USB port." msgstr "Por favor, conecte sua impressora a uma porta USB." +msgid "See your administrator for help." +msgstr "Consulte seu administrador para ajuda." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "SIM, EXCLUIR TODA A CONTA DE FONTE" @@ -366,6 +399,24 @@ msgstr "Sua organização não poderá enviar respostas a eles." msgid "All files and messages from that source will also be destroyed." msgstr "Todos or arquivos e mensagens dessa fonte também serão destruídos." +#~ msgid "SUBMIT" +#~ msgstr "ENVIAR" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Insira um USB drive encriptado" + +#~ msgid "Export failed" +#~ msgstr "Exportação falhou" + +#~ msgid "Exporting: {}" +#~ msgstr "Exportando: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Por favor, insira um dos drivers de exportação provisionados especificamente para o SecureDrop Workstation." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Ou o drive não está encriptado ou há algum outro problema com ele." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Você gostaria de excluir {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta de origem de {source}?" From 26f944ccd0cf36082572f5510c8afca1570367fb Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 702/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/pt_PT/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po index e4028c0e4..2bf5b1c0a 100644 --- a/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "uma mensagem" msgstr[1] "{message_count} mensagens" -msgid "SUBMIT" -msgstr "SUBMETER" +msgid "DONE" +msgstr "FEITO" -msgid "Preparing to export:
{}" -msgstr "A preparar para exportar:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Pronto para exportar:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Insira uma unidade de armazenamento USB encriptado" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Digite a frase-chave para a unidade de armazenamento USB" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "A frase-chave inserida não funcionou. Por favor, tente novamente." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Exportado com sucesso" -msgid "Export failed" -msgstr "Não foi possível exportar" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Entenda os riscos antes de exportar ficheiros

Malware
Esta estação de trabalho permite-lhe abrir ficheiros de forma segura. Se abrir ficheiros noutro computador, qualquer malware incorporado pode alastrar-se para o seu computador ou rede. Se não tiver a certeza de como gerir este risco, por favor, imprima o ficheiro ou contacte o administrador do sistema.

Anonimato
Os ficheiros submetidos por fontes podem conter informações ou metadados ocultos que as identificam. Para proteger as suas fontes, considere censurar partes sensíveis dos ficheiros antes de trabalhar com eles em computadores ligados à rede." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "A exportar: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Por favor insira uma unidade de armazenamento de exportação previstas especificamente para a Estação de Trabalho SecureDrop." +msgid "Preparing to export:
{}" +msgstr "A preparar para exportar:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Ou a unidade de armazenamento não está encriptada ou há algo de errado com ela." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Entenda os riscos antes de exportar ficheiros

Malware
Esta estação de trabalho permite-lhe abrir ficheiros de forma segura. Se abrir ficheiros noutro computador, qualquer malware incorporado pode alastrar-se para o seu computador ou rede. Se não tiver a certeza de como gerir este risco, por favor, imprima o ficheiro ou contacte o administrador do sistema.

Anonimato
Os ficheiros submetidos por fontes podem conter informações ou metadados ocultos que as identificam. Para proteger as suas fontes, considere censurar partes sensíveis dos ficheiros antes de trabalhar com eles em computadores ligados à rede." -msgid "The passphrase provided did not work. Please try again." -msgstr "A frase-chave inserida não funcionou. Por favor, tente novamente." +msgid "Ready to export:
{}" +msgstr "Pronto para exportar:
{}" -msgid "See your administrator for help." -msgstr "Consulte o administrador do sistema para obter ajuda." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Lembre-se de ter cuidado quando trabalha com ficheiros fora da Estação de Trabalho SecureDrop." -msgid "DONE" -msgstr "FEITO" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Digite a frase-chave para a unidade de armazenamento USB" msgid "Preparing to print:
{}" msgstr "A preparar impressão:
{}" @@ -347,6 +377,9 @@ msgstr "

Gerir os riscos de imprimir

Códigos QR e endereços web< msgid "Please connect your printer to a USB port." msgstr "Por favor, ligue a sua impressora a uma porta USB." +msgid "See your administrator for help." +msgstr "Consulte o administrador do sistema para obter ajuda." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "SIM, ELIMINAR COMPLETAMENTE A CONTA DA FONTE" @@ -365,6 +398,24 @@ msgstr "A sua organização não lhes conseguirá enviar respostas." msgid "All files and messages from that source will also be destroyed." msgstr "Todos os ficheiros e mensagens da fonte serão também destruídos." +#~ msgid "SUBMIT" +#~ msgstr "SUBMETER" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Insira uma unidade de armazenamento USB encriptado" + +#~ msgid "Export failed" +#~ msgstr "Não foi possível exportar" + +#~ msgid "Exporting: {}" +#~ msgstr "A exportar: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Por favor insira uma unidade de armazenamento de exportação previstas especificamente para a Estação de Trabalho SecureDrop." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Ou a unidade de armazenamento não está encriptada ou há algo de errado com ela." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Gostaria de eliminar {files_to_delete}, {replies_to_delete}, {messages_to_delete} da conta da fonte {source}?" From e4fce56f0c0ee3d319f610a07637593252141607 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 703/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/ru/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po index 93436b2fd..6600ac649 100644 --- a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po @@ -288,50 +288,80 @@ msgstr[0] "{message_count} сообщение" msgstr[1] "{message_count} сообщения" msgstr[2] "{message_count} сообщений" -msgid "SUBMIT" -msgstr "ОТПРАВИТЬ" +msgid "DONE" +msgstr "ГОТОВО" -msgid "Preparing to export:
{}" -msgstr "Подготовка к экспорту:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Готовность к экспорту:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Вставьте зашифрованный USB-накопитель" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Введите пароль для USB-накопителя" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Введенный пароль не сработал. Пожалуйста, попробуйте еще раз." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Экспорт выполнен успешно" -msgid "Export failed" -msgstr "Не удалось экспортировать" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Поймите риски перед экспортом файлов

Вредоносное ПО
Эта рабочая станция позволяет безопасно открывать файлы. Если вы открываете файлы на другом компьютере, любое встроенное вредоносное ПО может распространиться на ваш компьютер или сеть. Если вы не знаете, как управлять этим риском, распечатайте файл или обратитесь к вашему администратору.

Анонимность
Файлы, предоставленные источниками, могут содержать информацию или скрытые метаданные, позволяющие определить, чьи это источники. Для защиты источников просим вас отредактировать файлы перед работой с ними на компьютерах, подключенных к сети." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Экспорт: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Вставьте один из дисков для экспорта, специально предназначенных для рабочей станции SecureDrop." +msgid "Preparing to export:
{}" +msgstr "Подготовка к экспорту:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Либо диск не зашифрован, либо с ним что-то не так." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Поймите риски перед экспортом файлов

Вредоносное ПО
Эта рабочая станция позволяет безопасно открывать файлы. Если вы открываете файлы на другом компьютере, любое встроенное вредоносное ПО может распространиться на ваш компьютер или сеть. Если вы не знаете, как управлять этим риском, распечатайте файл или обратитесь к вашему администратору.

Анонимность
Файлы, предоставленные источниками, могут содержать информацию или скрытые метаданные, позволяющие определить, чьи это источники. Для защиты источников просим вас отредактировать файлы перед работой с ними на компьютерах, подключенных к сети." -msgid "The passphrase provided did not work. Please try again." -msgstr "Введенный пароль не сработал. Пожалуйста, попробуйте еще раз." +msgid "Ready to export:
{}" +msgstr "Готовность к экспорту:
{}" -msgid "See your administrator for help." -msgstr "Обратитесь за помощью к вашему администратору." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Помните, что нужно проявлять осторожность при работе с файлами за пределами вашей рабочей станции." -msgid "DONE" -msgstr "ГОТОВО" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Введите пароль для USB-накопителя" msgid "Preparing to print:
{}" msgstr "Подготовка к печати:
{}" @@ -351,6 +381,9 @@ msgstr "

Управление рисками распечатки

QR- msgid "Please connect your printer to a USB port." msgstr "Пожалуйста, подключите принтер к порту USB." +msgid "See your administrator for help." +msgstr "Обратитесь за помощью к вашему администратору." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "ДА, УДАЛИТЬ ВЕСЬ ИСХОДНЫЙ АККАУНТ" @@ -369,6 +402,24 @@ msgstr "Ваша организация не сможет отправлять msgid "All files and messages from that source will also be destroyed." msgstr "Все файлы и сообщения источника будут очищены." +#~ msgid "SUBMIT" +#~ msgstr "ОТПРАВИТЬ" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Вставьте зашифрованный USB-накопитель" + +#~ msgid "Export failed" +#~ msgstr "Не удалось экспортировать" + +#~ msgid "Exporting: {}" +#~ msgstr "Экспорт: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Вставьте один из дисков для экспорта, специально предназначенных для рабочей станции SecureDrop." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Либо диск не зашифрован, либо с ним что-то не так." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Вы хотите удалить {files_to_delete}, {replies_to_delete}, {messages_to_delete} из учетной записи источника для {source}?" From b540e2287453e727467aa4cfce2f07279eddaf4c Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 704/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/sk/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po index 132362d3d..adbd9ec4d 100644 --- a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po @@ -288,50 +288,80 @@ msgstr[0] "jedna správa" msgstr[1] "{message_count} správy" msgstr[2] "{message_count} správy" -msgid "SUBMIT" -msgstr "POTVRDIŤ" +msgid "DONE" +msgstr "HOTOVO" -msgid "Preparing to export:
{}" -msgstr "Príprava na export:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Pripravené na export:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Vložte šifrovaný USB kľúč" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Zadajte prístupovú frázu na USB kľúč" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Zadaná prístupová fráza nefunguje. Prosíme skúste znova." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Export sa podaril" -msgid "Export failed" -msgstr "Export zlyhal" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Pochopte riziká pred exportom súborov

Malvér
Táto pracovná stanica vám umožňuje bezpečne otvárať súbory. Ak otvoríte súbory na inom počítači, všetok zabudovaný škodlivý softvér sa môže rozšíriť do vášho počítača alebo siete. Ak si nie ste istí, ako zvládnuť toto riziko, vytlačte si tento súbor alebo sa obráťte na svojho správcu.

Anonymita
Súbory odoslané zdrojmi môžu obsahovať informácie alebo skryté metadáta, ktoré ich identifikujú. V záujme ochrany vašich zdrojov zvážte pred prácou s týmito súbormi na počítačoch pripojených k sieti." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Exportovanie: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Prosíme vložte jednu z exportovacích pamätí získanú špeciálne len pre SecureDrop Workstation." +msgid "Preparing to export:
{}" +msgstr "Príprava na export:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Buď pamäť nie je šifrovaná, alebo má inú chybu." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Pochopte riziká pred exportom súborov

Malvér
Táto pracovná stanica vám umožňuje bezpečne otvárať súbory. Ak otvoríte súbory na inom počítači, všetok zabudovaný škodlivý softvér sa môže rozšíriť do vášho počítača alebo siete. Ak si nie ste istí, ako zvládnuť toto riziko, vytlačte si tento súbor alebo sa obráťte na svojho správcu.

Anonymita
Súbory odoslané zdrojmi môžu obsahovať informácie alebo skryté metadáta, ktoré ich identifikujú. V záujme ochrany vašich zdrojov zvážte pred prácou s týmito súbormi na počítačoch pripojených k sieti." -msgid "The passphrase provided did not work. Please try again." -msgstr "Zadaná prístupová fráza nefunguje. Prosíme skúste znova." +msgid "Ready to export:
{}" +msgstr "Pripravené na export:
{}" -msgid "See your administrator for help." -msgstr "Požiadajte vášho správcu o pomoc." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Nezabudnite na opatrnosť pri práci so súbormi mimo vašej Workstation." -msgid "DONE" -msgstr "HOTOVO" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Zadajte prístupovú frázu na USB kľúč" msgid "Preparing to print:
{}" msgstr "Tlač sa pripravuje:
{}" @@ -351,6 +381,9 @@ msgstr "

Správa rizík tlače

QR kódy a webové adresy
Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 705/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/sv/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po index 17eb1972b..8e4dc2ee8 100644 --- a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "ett meddelande" msgstr[1] "{message_count} meddelanden" -msgid "SUBMIT" -msgstr "SKICKA IN" +msgid "DONE" +msgstr "KLAR" -msgid "Preparing to export:
{}" -msgstr "Förbereder export:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Redo att exportera:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Koppla in krypterat USB-minne" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "Skriv in lösenordsfras för USB-minne" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Lösenordsfrasen som angavs fungerade inte. Vänligen försök igen." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Export lyckades" -msgid "Export failed" -msgstr "Export misslyckades" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Förstå risken med att exportera filer

Malware
Den här arbetsstationen låter dig öppna filer säkert. Om du öppnar filerna på en annan dator, kan eventuella malware-program spridas till din dator eller ditt nätverk. Om du är osäker på hur du ska hantera riskerna, vänligen skriv ut filer, eller kontakta din administratör.

Anonymitet
Filerna som lämnats av dina källor kan innehålla information eller dold metadata som kan identifiera vilka de är. För att skydda dina källor, vänligen fundera på att redigera filerna innan du arbetar med dem på en nätverksansluten dator." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Exporterar: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Vänligen stoppa in en av de export-enheterna som är provisionerade speciellt för den här SecureDrop-arbetsstationen." +msgid "Preparing to export:
{}" +msgstr "Förbereder export:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Antingen är enheten inte krypterad eller så är det något annat fel på den." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Förstå risken med att exportera filer

Malware
Den här arbetsstationen låter dig öppna filer säkert. Om du öppnar filerna på en annan dator, kan eventuella malware-program spridas till din dator eller ditt nätverk. Om du är osäker på hur du ska hantera riskerna, vänligen skriv ut filer, eller kontakta din administratör.

Anonymitet
Filerna som lämnats av dina källor kan innehålla information eller dold metadata som kan identifiera vilka de är. För att skydda dina källor, vänligen fundera på att redigera filerna innan du arbetar med dem på en nätverksansluten dator." -msgid "The passphrase provided did not work. Please try again." -msgstr "Lösenordsfrasen som angavs fungerade inte. Vänligen försök igen." +msgid "Ready to export:
{}" +msgstr "Redo att exportera:
{}" -msgid "See your administrator for help." -msgstr "Kontakta din administratör för hjälp." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "Kom ihåg att vara försiktig när du arbetar med filer utanför den här arbetsstationen." -msgid "DONE" -msgstr "KLAR" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "Skriv in lösenordsfras för USB-minne" msgid "Preparing to print:
{}" msgstr "Förbereder utskrift:
{}" @@ -347,6 +377,9 @@ msgstr "

Hantera utskiftsrisker

QR-koder och websidor
Skriv a msgid "Please connect your printer to a USB port." msgstr "Vänligen anslut din skrivare till en USB-port." +msgid "See your administrator for help." +msgstr "Kontakta din administratör för hjälp." + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "JA, RADERA HELA KÄLLANS KONTO" @@ -365,6 +398,24 @@ msgstr "Din organisation kommer inte att kunna skicka svar till källan." msgid "All files and messages from that source will also be destroyed." msgstr "Alla filer och meddelanden från den källan kommer också att raderas." +#~ msgid "SUBMIT" +#~ msgstr "SKICKA IN" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "Koppla in krypterat USB-minne" + +#~ msgid "Export failed" +#~ msgstr "Export misslyckades" + +#~ msgid "Exporting: {}" +#~ msgstr "Exporterar: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "Vänligen stoppa in en av de export-enheterna som är provisionerade speciellt för den här SecureDrop-arbetsstationen." + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "Antingen är enheten inte krypterad eller så är det något annat fel på den." + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "Du vill radera {files_to_delete},{replies_to_delete},{messages_to_delete} från källan {source}?" From f5c0f3643b525d2d74affb725d6c5f8d81afd2b8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 706/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/tr/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po index d0d09edfc..6c3a1dcfc 100644 --- a/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po @@ -284,50 +284,80 @@ msgid_plural "{message_count} messages" msgstr[0] "bir ileti" msgstr[1] "{message_count} ileti" -msgid "SUBMIT" -msgstr "GÖNDER" +msgid "DONE" +msgstr "TAMAM" -msgid "Preparing to export:
{}" -msgstr "Dışa aktarmaya hazırlanılıyor:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "Dışa aktarmaya hazır:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "Şifrelenmiş bir USB sürücüsü takın" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "USB sürücüsünün parolasını yazın" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "Belirtilen parola işe yaramadı. Lütfen yeniden deneyin." + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "Dışa aktarıldı" -msgid "Export failed" -msgstr "Dışa aktarılamadı" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

Dosyaları dışa aktarmadan önce riskleri anlayın

Kötü amaçlı yazılım
Bu iş istasyonu, dosyaları güvenli bir şekilde açmanızı sağlar. Dosyaları başka bir bilgisayarda açarsanız, gömülü kötü amaçlı yazılımlar bilgisayarınıza veya ağınıza yayılabilir. Bu riski nasıl yöneteceğinizden emin değilseniz, lütfen dosyayı yazdırın veya yöneticinizle görüşün.

Anonimlik
Kaynaklarınız tarafından gönderilen dosyalarda gerçekte kim olduğunuzu belirleyebilecek bilgiler veya gizli üst veriler bulunabilir. Kaynaklarınızı korumak için, ağa bağlı bilgisayarlarda çalışmaya başlamadan önce dosyaları yeniden düzenlemeyi değerlendirin." +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "Dışa aktarılıyor: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "Lütfen SecureDrop iş istasyonu için özel olarak hazırlanmış dışa aktarma sürücülerinden birini takın." +msgid "Preparing to export:
{}" +msgstr "Dışa aktarmaya hazırlanılıyor:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "Sürücü şifrelenmemiş ya da başka bir sorun var." +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

Dosyaları dışa aktarmadan önce riskleri anlayın

Kötü amaçlı yazılım
Bu iş istasyonu, dosyaları güvenli bir şekilde açmanızı sağlar. Dosyaları başka bir bilgisayarda açarsanız, gömülü kötü amaçlı yazılımlar bilgisayarınıza veya ağınıza yayılabilir. Bu riski nasıl yöneteceğinizden emin değilseniz, lütfen dosyayı yazdırın veya yöneticinizle görüşün.

Anonimlik
Kaynaklarınız tarafından gönderilen dosyalarda gerçekte kim olduğunuzu belirleyebilecek bilgiler veya gizli üst veriler bulunabilir. Kaynaklarınızı korumak için, ağa bağlı bilgisayarlarda çalışmaya başlamadan önce dosyaları yeniden düzenlemeyi değerlendirin." -msgid "The passphrase provided did not work. Please try again." -msgstr "Belirtilen parola işe yaramadı. Lütfen yeniden deneyin." +msgid "Ready to export:
{}" +msgstr "Dışa aktarmaya hazır:
{}" -msgid "See your administrator for help." -msgstr "Yardım almak için yöneticinizle görüşün." +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "İş İstasyonu bilgisayarınızın dışındaki dosyalarla çalışırken dikkatli olmayı unutmayın." -msgid "DONE" -msgstr "TAMAM" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "USB sürücüsünün parolasını yazın" msgid "Preparing to print:
{}" msgstr "Yazdırmaya hazırlanılıyor:
{}" @@ -347,6 +377,9 @@ msgstr "

Yazdırma risklerini yönetme

QR kodları ve web adresleri Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 707/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client --- .../locale/zh_Hans/LC_MESSAGES/messages.po | 103 +++++++++++++----- 1 file changed, 77 insertions(+), 26 deletions(-) diff --git a/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po index a2f1d8074..1c53c8f46 100644 --- a/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po @@ -280,50 +280,80 @@ msgid "one message" msgid_plural "{message_count} messages" msgstr[0] "{message_count} 条消息" -msgid "SUBMIT" -msgstr "提交" +msgid "DONE" +msgstr "完成" -msgid "Preparing to export:
{}" -msgstr "正准备导出:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "已准备好导出:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "插入加密的 USB 驱动器" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "输入 USB 驱动器的密码" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "密码无效,请重试。" + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "导出成功" -msgid "Export failed" -msgstr "导出失败" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

在导出文件之前,请先了解风险

恶意软件
此工作站允许您安全地打开文件。如果您在另一台计算机上打开文件,任何嵌入的恶意软件都可能会传播到您的计算机或网络。如果您不确定如何预防此风险,请打印文件,或与管理员联系

匿名性
来源提交的文件可能包含识别其身份的信息或隐藏元数据。为了保护您的资源,请考虑在与网络连接的计算机上工作之前对其进行匿名化。" +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "正在导出:{}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "请插入一个为 SecureDrop 工作站导出用的专用驱动器。" +msgid "Preparing to export:
{}" +msgstr "正准备导出:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "驱动器未加密,或者出现了别的问题。" +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

在导出文件之前,请先了解风险

恶意软件
此工作站允许您安全地打开文件。如果您在另一台计算机上打开文件,任何嵌入的恶意软件都可能会传播到您的计算机或网络。如果您不确定如何预防此风险,请打印文件,或与管理员联系

匿名性
来源提交的文件可能包含识别其身份的信息或隐藏元数据。为了保护您的资源,请考虑在与网络连接的计算机上工作之前对其进行匿名化。" -msgid "The passphrase provided did not work. Please try again." -msgstr "密码无效,请重试。" +msgid "Ready to export:
{}" +msgstr "已准备好导出:
{}" -msgid "See your administrator for help." -msgstr "请寻求管理员的帮助。" +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "在工作机在外的地方处理文件时请小心。" -msgid "DONE" -msgstr "完成" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "输入 USB 驱动器的密码" msgid "Preparing to print:
{}" msgstr "正准备打印:
{}" @@ -343,6 +373,9 @@ msgstr "

管理打印输出风险

二维码和网址
在未采 msgid "Please connect your printer to a USB port." msgstr "请将打印机连接到 USB 接口。" +msgid "See your administrator for help." +msgstr "请寻求管理员的帮助。" + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "是的,我想删除整个线人账号" @@ -361,6 +394,24 @@ msgstr "你的组织无法再向他们发送回复。" msgid "All files and messages from that source will also be destroyed." msgstr "此线人的所有文件和消息都将被删除。" +#~ msgid "SUBMIT" +#~ msgstr "提交" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "插入加密的 USB 驱动器" + +#~ msgid "Export failed" +#~ msgstr "导出失败" + +#~ msgid "Exporting: {}" +#~ msgstr "正在导出:{}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "请插入一个为 SecureDrop 工作站导出用的专用驱动器。" + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "驱动器未加密,或者出现了别的问题。" + #~ msgid "You would like to delete {files_to_delete}, {replies_to_delete}, {messages_to_delete} from the source account for {source}?" #~ msgstr "你想为 {source} 的线人账号删除 {files_to_delete}、{replies_to_delete}、{messages_to_delete}吗?" From 4095b5957d998886f83ad95c7d9027fd7a56eb30 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 708/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (104 of 104 strings) Co-authored-by: Meng Pang Wang Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/zh_Hant/ Translation: SecureDrop/SecureDrop Client --- .../locale/zh_Hant/LC_MESSAGES/messages.po | 117 +++++++++++++----- 1 file changed, 84 insertions(+), 33 deletions(-) diff --git a/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po b/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po index c7f4541ee..150fd0d45 100644 --- a/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.9.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-10-26 02:30+0000\n" -"Last-Translator: Chi-Hsun Tsai \n" +"PO-Revision-Date: 2023-12-19 08:33+0000\n" +"Last-Translator: Meng Pang Wang \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_Hant\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.18.2\n" +"X-Generator: Weblate 5.2.1\n" "Generated-By: Babel 2.12.1\n" msgid "{application_name} is already running" @@ -71,15 +71,15 @@ msgstr "無訊息。" #, python-format msgid "%(sender)s wrote:" -msgstr "%(sender) 寫道:" +msgstr "%(sender)s 寫道:" #, python-format msgid "%(sender)s sent:" -msgstr "%(發訊者) 送出:" +msgstr "%(sender)s 送出:" #, python-format msgid "File: %(filename)s" -msgstr "檔案: %%(filename)" +msgstr "檔案:%(filename)s" msgid "Download All" msgstr "全部下載" @@ -280,50 +280,80 @@ msgid "one message" msgid_plural "{message_count} messages" msgstr[0] "{message_count}訊息" -msgid "SUBMIT" -msgstr "提交" +msgid "DONE" +msgstr "完成" -msgid "Preparing to export:
{}" -msgstr "準備滙出:
{}" +msgid "BACK" +msgstr "" -msgid "Ready to export:
{}" -msgstr "已滙出:
{}" +msgid "No device detected" +msgstr "" -msgid "Insert encrypted USB drive" -msgstr "插入加密的 USB 隨身碟" +msgid "Too many USB devices detected; please insert one supported device." +msgstr "" -msgid "Enter passphrase for USB drive" -msgstr "輸入 USB 隨身碟 的密語" +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgstr "" + +msgid "The device is ready for export." +msgstr "" + +msgid "The device is locked." +msgstr "" + +msgid "The passphrase provided did not work. Please try again." +msgstr "所提供的密語無效,請重試。" + +msgid "Error mounting drive" +msgstr "" + +msgid "Error during export" +msgstr "" + +msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgstr "" + +msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgstr "" msgid "Export successful" msgstr "成功滙出" -msgid "Export failed" -msgstr "滙出失敗" +msgid "Error encountered with this device. See your administrator for help." +msgstr "" -msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." -msgstr "

匯出檔案前了解相關風險

惡意軟體
此工作站可讓您安全地開啟檔案。 如果在另一台電腦上打開檔案,任何嵌入的惡意軟體都可能傳播到電腦或網路。 如果不確定如何管理此風險,請列印該文件,或聯絡管理員。

匿名性
線人提交的檔案可能有足以識別出他們是誰的資訊或隱藏元數據。 為了保護消息來源,請考慮在連網的電腦上使用檔案之前先對其進行編輯。" +msgid "Files were moved or missing and could not be exported." +msgstr "" -msgid "Exporting: {}" -msgstr "滙出中: {}" +msgid "Error encountered. Please contact support." +msgstr "" -msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." -msgstr "請接上專為 SecureDrop 工作站配置的匯出磁碟。" +msgid "Preparing to export:
{}" +msgstr "準備滙出:
{}" -msgid "Either the drive is not encrypted or there is something else wrong with it." -msgstr "該磁碟可能未加密,或存在其他問題。" +msgid "

Understand the risks before exporting files

Malware
This workstation lets you open files securely. If you open files on another computer, any embedded malware may spread to your computer or network. If you are unsure how to manage this risk, please print the file, or contact your administrator.

Anonymity
Files submitted by sources may contain information or hidden metadata that identifies who they are. To protect your sources, please consider redacting files before working with them on network-connected computers." +msgstr "

匯出檔案前了解相關風險

惡意軟體
此工作站可讓您安全地開啟檔案。 如果在另一台電腦上打開檔案,任何嵌入的惡意軟體都可能傳播到電腦或網路。 如果不確定如何管理此風險,請列印該文件,或聯絡管理員。

匿名性
線人提交的檔案可能有足以識別出他們是誰的資訊或隱藏元數據。 為了保護消息來源,請考慮在連網的電腦上使用檔案之前先對其進行編輯。" -msgid "The passphrase provided did not work. Please try again." -msgstr "所提供的密語無效,請重試。" +msgid "Ready to export:
{}" +msgstr "已滙出:
{}" -msgid "See your administrator for help." -msgstr "聯絡求助管理員。" +msgid "Export Failed" +msgstr "" + +msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation.
If you're using a VeraCrypt drive, unlock it manually before proceeding." +msgstr "" msgid "Remember to be careful when working with files outside of your Workstation machine." msgstr "記住在工作站以外的電腦上處理檔案時要小心。" -msgid "DONE" -msgstr "完成" +msgid "Export sucessful, but drive was not locked" +msgstr "" + +msgid "Working..." +msgstr "" + +msgid "Enter passphrase for USB drive" +msgstr "輸入 USB 隨身碟 的密語" msgid "Preparing to print:
{}" msgstr "準備列印:
{}" @@ -343,6 +373,9 @@ msgstr "

管理列印輸出風險

二維碼和網址
在未 msgid "Please connect your printer to a USB port." msgstr "請將印表機接入 USB 端口。" +msgid "See your administrator for help." +msgstr "聯絡求助管理員。" + msgid "YES, DELETE ENTIRE SOURCE ACCOUNT" msgstr "確認刪除全部的線人帳戶" @@ -360,3 +393,21 @@ msgstr "您的組織將無法向他們發送回覆。" msgid "All files and messages from that source will also be destroyed." msgstr "即將刪除此線人全部的檔案與訊息。" + +#~ msgid "SUBMIT" +#~ msgstr "提交" + +#~ msgid "Insert encrypted USB drive" +#~ msgstr "插入加密的 USB 隨身碟" + +#~ msgid "Export failed" +#~ msgstr "滙出失敗" + +#~ msgid "Exporting: {}" +#~ msgstr "滙出中: {}" + +#~ msgid "Please insert one of the export drives provisioned specifically for the SecureDrop Workstation." +#~ msgstr "請接上專為 SecureDrop 工作站配置的匯出磁碟。" + +#~ msgid "Either the drive is not encrypted or there is something else wrong with it." +#~ msgstr "該磁碟可能未加密,或存在其他問題。" From c705c1b54103988cdcd89e324999f804c86356d2 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 5 Mar 2024 09:30:38 +0000 Subject: [PATCH 709/751] Update translation files Updated by "Squash Git commits" hook in Weblate. Translation: SecureDrop/SecureDrop Client Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ --- .../locale/el/LC_MESSAGES/messages.mo | Bin 16400 -> 15875 bytes .../locale/es/LC_MESSAGES/messages.mo | Bin 11672 -> 13275 bytes .../locale/fr/LC_MESSAGES/messages.mo | Bin 13671 -> 13670 bytes .../locale/pl/LC_MESSAGES/messages.mo | Bin 13254 -> 15026 bytes .../locale/zh_Hant/LC_MESSAGES/messages.mo | Bin 11727 -> 11730 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/client/securedrop_client/locale/el/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/el/LC_MESSAGES/messages.mo index 3f0a73bcfa712451db7b687b4a25cb9978e80063..39006058ebc321593d89372262a9e686d5336315 100644 GIT binary patch delta 2161 zcmYk+X>3$g7{>8;3ba65s--K^GA*=9tt_Q%4tB3lpb8eS2-;w)F`}tDE-`>px`fa) zMN?bif{NmXU2G<$Oa+NwOw@SC;s>K2P@^_PO-vMHuoC@0cLvj&Irn$&oqO&%=RNPa z&$f8l_6IH`PwzF3os{{MA7jh{*gu04$2)Omv+!L^#2{wlM|d56hktv_{=p*J{>8(k z+%HHlTZj*0I(B0$zJ)V!0OzW!Q;~{&icS1+0jFanz3IUXn1x$06`L^wJ5Vot1=Z1; zxCuW&4KQ_1WWdFEE!P#%>uq>F*Y{$MrrJq`pY?M}!w;|;&*P1lkz_UxtB?^}173rE z)Ii!%!8(Ss@eM4%L0p4hV*@7Bs0ts$N*u*U73xVUJYx?tOwIfNs-spc!#-3gt_<)s=q53P$iMx^ujEx#XQu={kR$Xu^caB z1^Rfa2J{RnLLcI4{29wIm)_N`5%0$LQT@yzyz!Wg8hAk(@mI)Ka9V~NF$edd*6J!Ny$h@HIKGAoWyRu1WR9R_I*dfy#&H);V4a>LJlYL?xE9Co zRlI~v_&n>i9xvlf7$`4{Y=>sNnHxt@Gdhn%&3?cKa1vj{CR&Z-zo>zZFEQJLg-iK% zU^i+2{$*wfcogZ|PM`)D#_hOpx!HT#|4&oV%=3tcW>kzMrq!VC??&>+_M-kjh__=O zR^tQ`Wh-1k!8+7)EqD@p@d+#|W^i~4U%={>L__=kTPj`Lc$`dWK+kHk!?*_@!e8(u ztS1An;3d?IekZ=_IE%0;QdP(*+HO=t+Ho6BU^)7Hk%1h*X0HFh9rSOF>mqA0h78Uw zB5f?|7Ip^Kqq4aR{dfdDm_s4@?v^aUjg+Ye$?hiE4kV}DZ^}$0SKaM?CkE;`DU1Zc z-D2R*Dg~=3Oy2IG)Kjh=JFiwSi?WEK2rw@9Q>*olrRdOvbdYJnWTTu(E zY)OvZOO48Ia6fsvTpRp6?&6H#Z;6ewf=>GBm}x7Q6a_oyWyJR!FI|(}67KRk!{Lr_ zyEEvV^}?uVfuJ+kkNBoFhqq$yg1s`fLfe$LNw#A0p1p*7UCtXK69Q^J6x} delta 2523 zcmbu=drVek9Ki7(gaUGti-?$dydbFb5?)e6#S3EIvV<;*$p{X}LSE&C>4xsb3)41M zZm%{knfE^`)X^&`A+k1CEA5=Qv~r79%goKD*}OEXt?%!gSIhNhXZ+sJ^FHUi&*k?# z&tcQLZB1eR?~)>R2-h;=apKQ#5kG$0iw~}EB1NL{GREPLI2do?K`iD^{pr9RAgF_6K@UmuR$~>FCTS;9Q)BV{t3a!%m!yy+^tC7oc|V7B0mjcmQ?!n&N|~ z8M}!(^F-EzRgqjQ!9py;gQx@Y-=#2_LV7kw3yZM=Z{r+X@`MO~a)1v8EjB)l_fTgz z*5jVaqf(^V-nxrMXf)L>@PVNy8i>}(%ePOU?J{&AJ7gCg!R?qokssqlEXA@(BCq4eScCIP;~qSPe_=6c(g`ijb30y->{B_6n#t2x zM*nh!LNOLjagWs=)PeM1D;7-^@uExh&0 z&U&X{0WqCeK=_G=S2`taa0$U?cV0SCsH2S}mJ&LEIRr^?ItAxQreYz%^iien|S=7aeAz}%Rf%Ap|=h7|v;ChyVZj5ILHl=XZoh=W}PEvKj zb(iUt7u*|pt=HrNv&O8iuB|dEt7}Z3QC3@FtTcVTvMST(@p$CnZJ)QHuG}=r%FDeC zwe{QzZjP&n_8V)w4K)=;P4#Q0QSUV>v^CRcbQ&wI_m;X9>$8oO>yep0R6{hiMmqw+x&S-S&*5}I-#$$Mc*HhcWBgT7j#|IA$NQ;TzVK-UF?M>E6 zdt&FavsSo;EPImzL6OW?xP;W17t?w#QE z%;*&V&i}N1!s_6+LAq|Ww}yJv=Kf!%tTwyJZZT-6+h8)?%&(0u0$n+g8Cu_DouulR Wz0rBZZqDIJGV@OsgTLh^hW`!F+_QiH diff --git a/client/securedrop_client/locale/es/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/es/LC_MESSAGES/messages.mo index 58951b67c7a1f48e26189e74abcf002dbc0b6afa..72581df08eb4b5fd34170dd6f680dc4f4f03c7b6 100644 GIT binary patch delta 3658 zcmbuAZERat8OKjvnx;vUrYUWj(r%~e(xz*cb}bzx33VOE&9c0>v(s&%u~P3Z+iMMb>V;QhO_v+P_+<0PAFk6!eAHsF; z?>=kS5ESdpuo^xJ<+&%|7I+4(hu?=1*m<}KUWWKo*WgB2N0j1c8yOP#oM#U01@Vp_KfaPy#s%CDWInl=OATpZYNuURA$^ z8om$PU@hg40CxH8fpYH92I@b;B*um~d;t!__h1n2Kp}n5h7#Z_P)hg_{50H1nGV4t zP~Q6n`~tiL#bIwNf`!9S5_kY|w6fqHc&e59pJwth8`8se8Y5a5fE{oO9)M?{l>V2H zv(;57>R-*}HrN4gg(I*X&Ok)33h*xYEc|u_8h}#4G|Cli&F7hjh@OP<;%iVM{DaSr z;4x0BBC6l9KcVR_>wQE!!1`xMSpusi3Sv_Gpkz7<`2yAb5TD9|a_$1m!DpaoD_@6K zd9Vqxr#3-~p#o4c8i(?`Fb}2Y&q6uyJ5U_`97?5r1tah(yaR@|mol7#5?CH02lYG@ zjhus=msh`FB5M3S?1Udc&QR+qi}bJuQUo;wAAmNLgBGDUdKXGSHAI0dR2vir-B8pY zfs(*Ouof;rx&H**E#LoHCN>*y!+E%Wr&5FPHJ|^2QnCkpum_OGxX zu0Wx}d*D%c26n^0KuJiGrBrf{5dSK`L?Ru9HE;sTfm2X2U4SCa0whNDI+P49LCNeY zTn(EjM*?nvLHHOv1~0$~sJqYud;|`_cVYgZ+}MqCIN|eEcpvL)@M$>4w?YxrpP)Ei zb!X`p@)jsx!yYJ~;~<=Yk3wEme}kf-TlXr(R0W_sH|MWk-b?*yx4OuNhL!tDzs=jA z><>V3oQCo_JqH8uEUbVsq(Y*XBeGz821{b{8OvCMNf09HAuNK8V2zmQ&ntThxWW7?O7W4GU>yr{0$N9G$tZl8d9BVY!d%!%-_8W?)T>c z$z1yBi3y@F6~|U$(r+13ei^h3*@kwlW`cW{jS)QzoNN+NqRIJ6Szxv^h2F zxLK3v-JRTfuFV7FdnW^eF~|4E$wtR>u1mnF`LdHr5q9c$%8nn`Z6PO}wbMD%)mE&jJ5zPI-=qv1 z(|#i2b;e{e*0jl7e&i)}{k9*o6^}c)bk@7&2djgrRN?N~V3GiGN-9WK1p&|2(UGg4V!{{B;I z|D&TO>)Pgogn8#uc&co(@U@oK!k3%3G(?U@Ltz~Zg(62s$BHjD|D!5@zmrQP^t_YP zDf_t5Sw|-%Wus4ft((X?6QzxXPJP-nvnktTmTxZAqik3E%`{8B^y{Lh99N$%)oLN2 z#>w>ThPO9bsG}qlsc-graf+tp!ODt#g$u36?^-6gBH~7rQoD zmHANzefs^k-19G_wUwIArJann+<4MH;bc4wmL5x5=!^F)cbbF$=Sl8yde+iYITU0% zH6qq2N6+O%qaX8A(qIG;iUyBZE|GbSx8$80?!C8@R;J8xC$j&NCq{DAi{JD0Xt|4T z7N6SOQ9ab>xYUOTr|fvrxSTdm%hMU_izP)~zaN)CEs5K4?P-%P$+eWAOP>=?;hcV_ zqohazlO1255~g*d4{`f^Fur}S zHx16ry7r8HlcS1r?adW!Q4`P2no=&JS}z4udtqvBP zAUs+;w|(1+{NhjhO~w%Gq?80*{Xc@GOr-qrnw4oacK)lKx-Sxq2BZ2&B&tJ&E4wak SAERiQhb zXiN9VGTgME*49?hvrL@LTI<(Ln@MiOYT0b_4>Gr0&DLh`&vWnHIOBU?=Xto#bI$pm z@43_44#X3`%nObhZ4@I(e5v|}N&Y@EQk_yv~WSzL%$@L!)zMG)uNoJQ47Xt^ z9zgBoaje2A)P($0lv3M@D#C~H7Tk$9<2zW6U!x!Yz(%}+uTiX(?3Xh2O(FTGUhG_9 zvM4T~9?WLL<2+f1dvG^LqnrB$yj=rtLDj@=)B=v6PRR$T2~8k#wIA_GoI%yb)@bs3 z+ffr9PS9aYdj<92IO>I`Q7b-=y?7m$U@vJQi}oy%ZF5k?`!3evC#VHnM5Q{XEO~m0 zFvfK=>OK2V<0VegAuBeGdf{J4Jz5rLO1}q%s0lTq{@;dm*pH9k^Y}Dg#x=N|Wyz0F zEB_BE8yjX;%D@Y#%#oF(v zjDjr0=h7aTX6_?;3}NNxXyn*PYrTo81Kg)up6syHM>*yaXpTwQ~}(_buW(K z5#(Q1&k@kTapZ*B<4B#^PHe)1sLY*1%E1EcS3Tp~VmkW5fNtPR7{!xFR_#}0aTa9b zG*AutaRA#ehCWmlG{9;?_tz4$nrQudSyEh3XpyDf>g1#}bMZ*hC-rqYs4+?%>iQ$pts;vVAm z^iAAA%q4V!R4aEAvs(@qWZP>b(W`h}=r=}fk@i2`I_Rt;0tA)mH5HnQQv0prw2_Ds z+Af`cHMZY7F&rFk`<7xW!LE2GL0dJ42oq|(NxaYX?Xxa=QhgQQ3W7Q`exkjmN>^J> zs0P$phz#diR@{9m`?}9v86F8ZIk`ujpL466g1ia$V%|f3C$`|4GZHDz80hF()9;*( z%y-X3rUOoS(HS?qaI@c6?>t)km>VeB;&+=$%Yx3^<=;7D6)n!CiVMz%4H5Th<(GbU YvO3S_L~ED2gSBND&Y$%&j=y2*e}Q(|OaK4? diff --git a/client/securedrop_client/locale/fr/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.mo index 4720bafe1e5a4782c942f59fe818ddce55ebb75f..b12a6ce3bf5bc02d4a554ff8b01344fc4bbf6f4c 100644 GIT binary patch delta 867 zcmXZaOGs2v9LMornll#pt`W(xYvwbZv}s21Q4qDz#6`N1d}{<(Xq6HY+*K4ka8(r1 zN)n~O7l=?u(6(SU1G$Jc;b=%8;VOi_f9AsFeE$Cf_kYg$pObR8-Q|f)@9h!k+i59R z(qvdF#2Ku?=U9d7Sd2d~ga)C zSyE1=Je3l(Gck?*n2ia{!7Z%D6grs4Zq8#Pp1}dM4L|VnS+xI`uoXA33;&`W=rYBu z?j0<_scJ8MqFE+vBlB2*U+^R*u^E436P~3?KK3CsbsLBA8Cr+-&^mCmR-!q&hBQUv zNYnHXt&zc)!OVz6sCKk@7wv96w7PF_ z2p8}w1}{h>*o7R>(|dwJCPIzU4ZMeZ`pgi=eQd)T`rnTecpo>BW~ljMdZS~$(`Z-o z1nmv1;1uqmb#{z_+tf>p+lre6cE<@v)ps9x^a{nKZY)__ S415e_#Ujy2)0!JTEdCErwrH#X delta 868 zcmXZaOGwmF6vy#jS~FARJ7=hT%wT3(PL7$5i3);?ObB``Ow`a(YKnGaVZ`5+6g_ZN zB;v*>1`^a+NJL1`*2QcDT|}G83JFBqh~W1yfB17h=Un)od+)jTSNwN;K9=pw9FSH{ zO1YBmmr8~B7|-A}G#@`a$ZK|U9f+R0y^%G6m!KK)_vVs52$ z1pUa83RTKc2|+6pqj(E_n8qAj$12>wAm+21vlzj0>_gk|6E~kk`+puU;V10EZL|Zm zQ_Sk#!Q(hu0~X*nJcg^-g#R#t6;#Q`n@CNK-~hfv>(C}z2M$$BG)J9C zQxrp*rU|r8zjO1HL*Qc~jd{3^7w|8}v8+bw#b^pT*Ci9j8bm_R;#WoX1LY{6>!--E;W2$zv&C|aM{=#c9} zw5xfJ_68O)ftzTZ9b(`%^#&Vl#bpA!;~nHvxIyB*X%K_>6e}=^_L^5*w~$A#z(uJW WPo$Eb&wfusI1&xlr|y>S1@-}J#%W6c diff --git a/client/securedrop_client/locale/pl/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.mo index d8c00f830c3d22f95dc0976356905787b5c7b610..920dc72f526d90f3dc49b6209f279dbf20e07e92 100644 GIT binary patch delta 4361 zcmb7_d5{!W8NlBz_kAok0UpZ@yTcW3E7LDXS#>(X@=QE$7}^D zt1JVKmLUNw%UBgFMiV9#VihU{yGE>1A(V6CjJpMg$F79ecinr;SbAK^Y!ob z>(}4?dVbJyCMf=9c+W2>Mh75tLV{CApk(A2l*muVd3y`1s3zr#CluiaS;b6EKj>5ib zVp0#YP+oW)&ViTUq!VB-xEPAVE1@{H z5iW%uEWXU-B_{{5=!{J17)cR~D4i2T&Ynhil;Hq15)Lun`Wyx)?}7 zX`_=+O7#L1M_z`Kfj7pGe{8EaS-^SqHq`L1uo_m4jSMf2xdDp8U2q$G3@(M=gj?Ya zxE3y;@O3Z;#j&$c?A(Nt;2=6zGF&^psMHcBO)RW|$Dt^C3+{uHI1-}hlTb2n9u9z) zp+s~Yk|cEl&V#q0L|98lJ^`0PsrhSAdh6$KCj0=3;}eUlN=s?6+v<5Z6`qCS z@pU*2-h!2|n#IL%8oXA)afRa0BCJUdtb)_wmY5!-I_gBsS79rPikF!Djt2{{_6iGC zSdr9r(z0Yz4aZ##YoHvPZ83L1X|6p`GGIV4a2R&LV^H>2&5BAk4$8T&hEj?R5Yt7q zmx)CDDJaeM93(sHCD;#Mf{Wl)_#EsI|oFISL{5~n1!E( zZ$K$Q-TcU46BK=UD1m(%%Kk4xIp){lJ~(*+`EO=YWHJ!G6Z3DdANOiu)b;(L)NCA- zV>%B?^VLK8PCW^S!;^3j{5BMQ--S)^M{ot4`d}2$ez<}AQxB5=PcZo-3tQoX6k1aD z6qN4&3S0s^AwH>Fa0i@=_3iL!_yqg~l*}};xeA_!L*N-Gj$MG#V?Tq_;rnm^9J7@C zrCRZh)?PY{21&_XVt*bdSl#D4f;5pG2!x)F%<#WrLXLVtyWAXFQ&Ho6Uag3>BKz84Hb`o#BU%rJxT zTp+zLFuE^>e>fa~@Us}LMOUetfjopr_e$N@ATp$ed}-AIB!ftbCnHjlUC1be5{E zh=)j{%cwi;YpBl+Jrog$XFjCyh?}5cocaUkuxu!UIz02~9bzUKx)23%1vTAfTZ5h6$ z11IgK+O(b1&7Pald7D=pz27%$P3w@Ivi$uuXt5lf^9tH%F>I&w?9l4vp67bn3_ROu z(bnOt>*Z8^xMn#iH*j*6XPKe0$c0E(LN{7g>0tk=(uX4l6z|)g&<&AKDc8vvshswM ztY}WesxzWk42BV?`p~Rin@)F6HyC!>GQ00~c!uMrJUfeP(N;f55s=>;$Qv_7H74Sf z8l4Q{+~~aFYsbxL$&6)|dkpJWQQUxPU+0M{j+gi%eW*(pqSt*lW9gigLA61;n!|TI zD?`?_>uA&V+Y;NYq>JvHt9jraVt=cZNvQv!KNT5Zuin{Mr=xsoQk^zKSCdl7FhQ1i zk1{b~YKoPyeP5DiIOe_YMdjnQ()8i8hQyjpD`%y0mRZ^|{NIn&8{q69XYK0labYx^J4R~ zY?SuL-Z?n;f%J5dBHx;x!=e2a>^j@8{*Bqr2c zS~k|}>$Qn^;{@R2G`t;u2xTAjEqvh{S{d>ipC=Z*huIJOXK4AG_ z70rU*b|(`x+BK7Dw=FoJTU_0)vu?ZXW`cVTl(w~>^)8l^Y|6Thn|Exh^y+lIs;;Y} z^N7isnQEs6tu|kJG*G(>ey;OK*6!-i$!JSn=L#7ec5h!J~FVQX@JGs&r-ki1L;h z6Dx`hX}itt-c!)|LL9g3qjB6!fqbJTQtB9?-hcn}xc_jU>>`TM50> z3sS9o*t!#~eUfQqP?juELmd?Tfap7q(wG0ABLtRlyUyW|YsR_iJbG763~9&vv}Qf2 zm*v~ihv^`xXW6M%o%9U8!C|suow9m&DsZs$nVHM=LzvAM+PnfEkgjuv=~(pHoklQ9 z-=BH0%FP#e-ITO@sdm@lu5@bFoQ8WEIOsZ8;7ivY=kxX-#Jw%-b)KL-Fe;9lS~{uV z1YuuTnev;nZdR6mSkqFucIWM0w4$SNr`T3P-S@P`rMGAi_jZ?;Yv&%X*t9zitvy-D z@&94bM%}@6JuL}cq4QlG7t3Aeuwpu{c9VWrN6=!2&C7{~FqV^=o7bue}V&)8st;b1V>+?2~;;%?jqG7!YNc3T~Gv)g1HY8AOe zq7rD-1QQYy5KI6sC;Wi{L||MJOmrp^{euvkqJhLeKupvnet&0OV&a=V=kuP^_Pp`7GW+CToV~xqfqd3u+u(?J@V+~>=-oZ4yA2o3tlj1xFWASy==XT*F z+=~mqojW>oQm_}3vn^75V!|)9*WD!zaey@}v_d=GzcQ3I%n z9HDZx)SrgwOrvuq>LBuPCYf2tJZ$4mm3Wi$Ll$4+d?&M2=H@dxb2mGXx6DD*l6;A( zolB@EzJ|KrPq-cbMtv^)D$~_k>_lygw^3{P87d=}kx851P{kC-Y?-4;N4B^r#d){@ z7hreveH*Du^DS!NK_qGBAJndzSm5lku$f9n)mVlzu?~x|7nSNG$jhALpc?oUb>l+T z=Mk(#O~@a0H)^26$WAloP!BSIiFhC5amcyO`o~VEP`EG+eb|h(como7cozOm+=xo$ zFQ@^BP&dq`BJ}|IsLz+oiDgf8G&)Dm1lZKoTk zBD#kvvKc(KGEj?3p=f}%7j`fvDxVj9~Qwg|2bERwa%Idwdgbz*hpJNN0T2Fz0icMgfcbKNUZZy z{2b#uDc2iXV{N68M*TVed@80|f_gK}L;|7pR?`kqV=0{_Q znov~g0@4!hm)Egt_CpEvS}J2Sx_Xsxie zy<*>WC%Lj}0$sjfx8(~o2Sc6RKCiX5vC8rW{V(|<*T+wfq)qtKZc6WriCtUOP-FLJ z%#X24vKw5HuW|x*#iaYAVoQrlO6`)|oCJGK;XT)6v#vAPvDM@4|H5kXboFoVu)MrN zUF|)(ab#ancI0wVX5@HLR)*E%^#nquy1lEjBiPNC0)C$}ugNp#x+bmb-+saFKW+7S zy81#bx@REd+{n34Z*fKByW;cNJu|KL?hAG>WIgZe>b5$AeZIbcr@5~q5Q-d~Rb=PS leh`zia`lGl{sZ+jwRYy*wix^3yuGf-!LmL(zx zxK^r^bla1va2VI&L#)RMT#2*J1)OGF*?K8YerAId2}yko(pKV&jnWz%!4>!(!#L~w zj?0Nljq?8${zc*liRw*3$5YO;$Q-(WR%jTl@KaocMXbiJ$R6|qZK6#!2IKe>t$-H`7SfD1K_}XR&LfX*^5T$Ga86?# z@gmyzaFbMvwLT47aom|kHla4OqdbH=@jC9pNoNJC=_c+(JDEIM;ZY3ZxQmO}PW%aN z{L+NffqT)e*dL%_10Fe_IbWa^eB`XS9D-6VTSN#Px7k(rF delta 928 zcmXZaT}abW7{~G7CTuf$e_1c4E!}F%8o7dO7!`zF6i8j9AYKG63TjDF6cp2olB6IM zp@laQg!XE!i;{{IyGvt56d`m`l7qU6y0!1q|G?PiJm-I&=e)jeeb+kNUX~m4NfQ-P zP}22EDTFt0HQvIN_zIWeXIzB8ut?r44iFdDNacPh8<92>pR1Nu;1DjxF$~~G=M-9< zZ`I2EFZ_p&Hah0icmt0*Phu7QXVD7vqZJ;+WjKm+@e{HKeMg%}QE4p%aSJBU>a?Ma zzkmzyN;KznfJpvN}(O)A#A{I+=1gxKdWgW-i3BDd9=d!F@Voq{2J556KMIN zxU>@+(XKdmnT93YcHVV9Ml1Nt#c$9O-r{mBpJIgX&cjdA3*^aVR` z7Oif_M(?fkVpRL2hcq_v;RD(LAA#+x25o`{w1Q1&ca}jOyw0N^^O(Yc!cgFAIIuNY zSD#GvU8~$5{gHn$GuSiJc_|Sob#_g6kE9igpU!04Gp7=f=|}fUU47{%RTqQv(~(## Te&pEkO!n}JOrmf#))@K+lbL$w From cd13f574af2f8bc421e91bd0537522ec6fbd3d8f Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 7 Mar 2024 13:57:28 -0500 Subject: [PATCH 710/751] Fix typos in export_wizard_constants.py Also add a space in between the period next sentence for ERROR_EXPORT_CLEANUP. --- .../gui/conversation/export/export_wizard_constants.py | 4 ++-- client/securedrop_client/locale/messages.pot | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py index 2c92da9f3..058f260f2 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py @@ -39,10 +39,10 @@ class Pages(IntEnum): ExportStatus.ERROR_MOUNT: _("Error mounting drive"), ExportStatus.ERROR_EXPORT: _("Error during export"), ExportStatus.ERROR_UNMOUNT_VOLUME_BUSY: _( - "Files were exported succesfully, but the USB device could not be unmounted." + "Files were exported successfully, but the USB device could not be unmounted." ), ExportStatus.ERROR_EXPORT_CLEANUP: _( - "Files were exported succesfully, but some temporary files remain on disk." + "Files were exported successfully, but some temporary files remain on disk. " "Reboot to remove them." ), ExportStatus.SUCCESS_EXPORT: _("Export successful"), diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index 0155f5cb1..e5a70f802 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -300,10 +300,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 9458b772963225e39e3223adf80ef17c205e9831 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 7 Mar 2024 15:58:21 -0500 Subject: [PATCH 711/751] Add 0.10.0-rc1 changelog --- changelog.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 changelog.md diff --git a/changelog.md b/changelog.md new file mode 100644 index 000000000..fe721fe11 --- /dev/null +++ b/changelog.md @@ -0,0 +1,54 @@ +# Changelog + +## 0.10.0-rc1 + +This is the first release from the merged securedrop-client repository, which now +contains the securedrop-export, securedrop-log, securedrop-proxy and securedrop-sdk +codebases. See our [blog post](https://securedrop.org/news/consolidating-securedrop-workstations-git-repositories-to-make-development-easier/) for more details. +All components now use the same version number, previous changelogs can be found in each component's +subfolder. + +* VeraCrypt-encrypted USB drives are now supported for export. (#1777) +* Don't ask for a passphrase if the device is already unlocked ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105), #1777) +* Ensure all print jobs have been fully enqueued ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105)) +* Cleanup `metadata.json` from sd-devices after exporting ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105)) +* Add status code and error for multiple attached devices ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105)) +* Improve detail in error messages when exporting fails and log them (#1777) +* Add spinner and active state in "Insert Encrypted Drive" dialog (#1019, #1777) +* Consistently transition to "Ready to export" state (#990, #1777) +* Fix typos in messages (#1651) +* Fix homepage URL in setup.py (#1662) +* Remove obsolete gvfs-bin dependency from securedrop-workstation-viewer (#1842) +* Set umask 0o22 before writing to USBs (#1872) +* Update translations from Weblate (#1548, #1747) +* Add `.rtf` printing support ([securedrop-export#109](https://github.com/freedomofpress/securedrop-export/pull/109)) + +* Dependencies: + * Update requests to 2.31.0 + * Update certifi to 2023.7.22 + * Update jinja2 to 3.1.3 + +* Internal and development: + * Fix syntax of mypy comments (#1646) + * Pull out string "transcript.txt" into a constant (#1658) + * Restore workaround for segmentation faults in tests (#1656) + * Auto-detect Wayland in run.sh developer environment (#1653) + * Verify gettext machine objects (`.mo`s) are reproducible (#1666) + * Migrate dependency management to poetry (#1671) + * Enable dependabot for Python and GitHub Actions (#1768, #1782, #1824, #1830) + * Move and refactor debian/ packaging files from securedrop-builder (#1741) + * Use `--require-hashes` when installing dependencies during package build (#1792) + * Lint `.desktop` files in CI (#1783) + * Apply bandit and safety linting to all components in one place (#1814) + * Add initial configuration for Rust components (#1817, #1818) + * Standardize `make lint` in all components (#1841) + * Move remaining CircleCI jobs over to GitHub Actions (#1841) + * Apply black and isort formatting to all components in one place (#1860) + * Add shellcheck linting (#1843) + * Stop using deprecated pkg_resources (#1851) + * Have CI run piuparts (#1844) + * Use dh_apparmor for installing the profile (#1856) + * Use setuptools.find_packages() in setup.py (#1873) + * Parameterize sender_is_current_user in test instead of randomization (#1884) + * Stop running client tests in parallel with pytest-xdist (#1881) + * Run lintian on Debian packages (#1845) From 9a02688a518cfdf6f1efd0631e1094efc0f918c6 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 7 Mar 2024 14:25:45 -0500 Subject: [PATCH 712/751] Update version to 0.10.0-rc1 --- client/securedrop_client/__init__.py | 2 +- client/securedrop_client/locale/messages.pot | 2 +- debian/changelog | 6 ++++++ export/securedrop_export/__init__.py | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index 3e2f46a3a..94b406848 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.9.0" +__version__ = "0.10.0-rc1" diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index e5a70f802..803c659ff 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -6,7 +6,7 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: SecureDrop Client 0.9.0\n" +"Project-Id-Version: SecureDrop Client 0.10.0-rc1\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" diff --git a/debian/changelog b/debian/changelog index a68a1e883..aba8080c9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +securedrop-client (0.10.0~rc1) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Thu, 07 Mar 2024 14:25:21 -0500 + securedrop-client (0.9.0) unstable; urgency=medium * see changelog.md diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 3e2f46a3a..94b406848 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.9.0" +__version__ = "0.10.0-rc1" From ced574456bd45011d649b1510def32b3d66ae6ac Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 12 Mar 2024 14:24:29 -0400 Subject: [PATCH 713/751] Refer to sd-devices VM instead of `sd-devices` in error instructions (cherry picked from commit 021458ac350ee0df4b4c0527f5b32c0ce6d92945) --- .../gui/conversation/export/export_wizard_constants.py | 3 ++- client/securedrop_client/locale/messages.pot | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py index 058f260f2..54ae0d4d7 100644 --- a/client/securedrop_client/gui/conversation/export/export_wizard_constants.py +++ b/client/securedrop_client/gui/conversation/export/export_wizard_constants.py @@ -31,7 +31,8 @@ class Pages(IntEnum): ExportStatus.INVALID_DEVICE_DETECTED: _( "Either the drive is not encrypted or there is something else wrong with it." "
" - "If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." + "If this is a VeraCrypt drive, please unlock it from within " + "the sd-devices VM, then try again." ), ExportStatus.DEVICE_WRITABLE: _("The device is ready for export."), ExportStatus.DEVICE_LOCKED: _("The device is locked."), diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index 803c659ff..32042f631 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -282,7 +282,7 @@ msgstr "" msgid "Too many USB devices detected; please insert one supported device." msgstr "" -msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." +msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within the sd-devices VM, then try again." msgstr "" msgid "The device is ready for export." From 39a20fc526edc061b375ba2804233330c8dbdb18 Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 13 Mar 2024 13:47:25 -0400 Subject: [PATCH 714/751] Support unlocked unpartitioned encrypted devices (cherry picked from commit 71381340c46b592d2edf8e96ebdbcea74adf85b0) --- export/securedrop_export/disk/cli.py | 50 ++++++++++++++++------------ export/tests/disk/test_cli.py | 2 ++ export/tests/lsblk_sample.py | 19 +++++++++++ 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/export/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py index 1045a17ff..e8275e627 100644 --- a/export/securedrop_export/disk/cli.py +++ b/export/securedrop_export/disk/cli.py @@ -113,12 +113,20 @@ def get_volume(self) -> Union[Volume, MountedVolume]: # Inspect partitions or whole volume. # For sanity, we will only support encrypted partitions one level deep. if "children" in device: - for partition in device.get("children"): - # /dev/sdX1, /dev/sdX2 etc - item = self._get_supported_volume(partition) # type: ignore - if item: - volumes.append(item) # type: ignore - # /dev/sdX + for child in device.get("children"): + # Whole block device is encrypted (and unlocked) + if child.get("type") == "crypt" and device.get("type") == "disk": + logger.debug("Checking device {device}") + item = self._get_supported_volume(device) # type: ignore + if item: + volumes.append(item) + else: + # /dev/sdX1, /dev/sdX2 + logger.debug("Checking partition {child}") + item = self._get_supported_volume(child) # type: ignore + if item: + volumes.append(item) # type: ignore + # /dev/sdX and it's locked else: item = self._get_supported_volume(device) # type: ignore if item: @@ -178,22 +186,21 @@ def _get_supported_volume(self, device: dict) -> Optional[Union[Volume, MountedV if vol.encryption == EncryptionScheme.UNKNOWN: vol.encryption = self._is_it_veracrypt(vol) - if children[0].get("mountpoint"): - logger.debug(f"{vol.device_name} is mounted") + # To opportunistically mount any unlocked encrypted partition + # (i.e. third-party devices such as IronKeys), remove this condition. + if vol.encryption in (EncryptionScheme.LUKS, EncryptionScheme.VERACRYPT): + logger.debug(f"{vol.device_name} encryption scheme is supported") - return MountedVolume( - device_name=vol.device_name, - unlocked_name=mapped_name, - encryption=vol.encryption, - mountpoint=children[0].get("mountpoint"), - ) - else: - # To opportunistically mount any unlocked encrypted partition - # (i.e. third-party devices such as IronKeys), remove this condition. - if vol.encryption in ( - EncryptionScheme.LUKS, - EncryptionScheme.VERACRYPT, - ): + if children[0].get("mountpoint"): + logger.debug(f"{vol.device_name} is mounted") + + return MountedVolume( + device_name=vol.device_name, + unlocked_name=mapped_name, + encryption=vol.encryption, + mountpoint=children[0].get("mountpoint"), + ) + else: logger.debug(f"{device_name} is unlocked but unmounted; attempting mount") return self._mount_volume(vol, mapped_name) @@ -212,6 +219,7 @@ def _is_it_veracrypt(self, volume: Volume) -> EncryptionScheme: enable VeraCrypt drive detection, which we ship with this package. """ try: + logger.debug(f"Check if {volume.device_name} is an unlocked VeraCrypt device") info = subprocess.check_output( [ "udisksctl", diff --git a/export/tests/disk/test_cli.py b/export/tests/disk/test_cli.py index 26366934b..c046a1f95 100644 --- a/export/tests/disk/test_cli.py +++ b/export/tests/disk/test_cli.py @@ -28,6 +28,7 @@ UDISKS_STATUS_MULTI_CONNECTED, UDISKS_STATUS_NOTHING_CONNECTED, UDISKS_STATUS_ONE_DEVICE_CONNECTED, + WHOLE_DEVICE_VC_WRITABLE, ) _PRETEND_LUKS_ID = "/dev/mapper/luks-dbfb85f2-77c4-4b1f-99a9-2dd3c6789094" @@ -41,6 +42,7 @@ SINGLE_DEVICE_LOCKED, SINGLE_PART_LUKS_WRITABLE, SINGLE_PART_VC_WRITABLE, + WHOLE_DEVICE_VC_WRITABLE, ] # Volume, expected device name, expected mapped device name diff --git a/export/tests/lsblk_sample.py b/export/tests/lsblk_sample.py index 9e45b4c77..9bb73236f 100644 --- a/export/tests/lsblk_sample.py +++ b/export/tests/lsblk_sample.py @@ -84,6 +84,25 @@ ], } +WHOLE_DEVICE_VC_WRITABLE = { + "name": "sda", + "rm": True, + "ro": False, + "type": "disk", + "mountpoint": None, + "fstype": None, + "children": [ + { + "name": "tcrypt-2049", + "rm": False, + "ro": False, + "type": "crypt", + "mountpoint": "/media/usb/tcrypt-1234", + "fstype": "vfat", + } + ], +} + SINGLE_PART_LUKS_UNLOCKED_UNMOUNTED = { "name": "sda1", "type": "part", From 410c676014b2c8430fb034e781cbd5b532b3027a Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 13 Mar 2024 14:20:23 -0400 Subject: [PATCH 715/751] Remove __pycache__ folders from packages We already delete the individual .pyc files because they're not reproducible, but leave behind empty `__pycache__` folders. This can be annoying if people are doing builds out of a development checkout that has these folders that won't be present on a pristine build. So remove the empty folders right after deleting the .pyc files. Fixes #1907. (cherry picked from commit 06ae37ea8bf6aa8e4f0af282ab626b0892f49957) --- debian/rules | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/rules b/debian/rules index c990004ab..2729f5bcd 100755 --- a/debian/rules +++ b/debian/rules @@ -13,6 +13,7 @@ override_dh_auto_install: override_dh_strip_nondeterminism: find ./debian/ -type f -name '*.pyc' -delete + find ./debian/ -type d -name '__pycache__' -delete find ./debian/ -type f -name 'pip-selfcheck.json' -delete find ./debian/ -type f -name 'direct_url.json' -delete find ./debian/ -type f -name 'RECORD' -delete From 42ccdb3653015342f2b24d3364f95df680489bb7 Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 14 Mar 2024 14:40:01 -0400 Subject: [PATCH 716/751] [0.10.0] backport Exclude client version string from Project-Id-Version of .pot files --- client/Makefile | 2 -- client/securedrop_client/locale/messages.pot | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/client/Makefile b/client/Makefile index 346277f12..e5b4f8085 100644 --- a/client/Makefile +++ b/client/Makefile @@ -130,7 +130,6 @@ docs: ## Generate browsable documentation and call/caller graphs (requires Doxy LOCALE_DIR=securedrop_client/locale POT=${LOCALE_DIR}/messages.pot -VERSION=$(shell poetry run python -c "import securedrop_client; print(securedrop_client.__version__)") .PHONY: check-strings check-strings: ## Check that the translation catalog is up to date with source code @@ -150,7 +149,6 @@ $(POT): securedrop_client --charset=utf-8 \ --output=${POT} \ --project="SecureDrop Client" \ - --version=${VERSION} \ --msgid-bugs-address=securedrop@freedom.press \ --copyright-holder="Freedom of the Press Foundation" \ --add-comments="Translators:" \ diff --git a/client/securedrop_client/locale/messages.pot b/client/securedrop_client/locale/messages.pot index 32042f631..5fc3153aa 100644 --- a/client/securedrop_client/locale/messages.pot +++ b/client/securedrop_client/locale/messages.pot @@ -6,7 +6,7 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: SecureDrop Client 0.10.0-rc1\n" +"Project-Id-Version: SecureDrop Client VERSION\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" From 928d71ca32e2d2a065ef599d7daee8edcdb4fcc2 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 14 Mar 2024 14:08:44 -0400 Subject: [PATCH 717/751] Bump version to 0.10.0-rc2 --- changelog.md | 7 +++++++ client/securedrop_client/__init__.py | 2 +- debian/changelog | 6 ++++++ export/securedrop_export/__init__.py | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index fe721fe11..7bbda3684 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 0.10.0-rc2 + +* Support unpartitioned VeraCrypt drives. (#1908) +* Adjust wording referring to "sd-devices" VM. (#1908) +* Remove __pycache__ folders from packages. (#1909) +* Remove specific version from .pot files. (#1915) + ## 0.10.0-rc1 This is the first release from the merged securedrop-client repository, which now diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index 94b406848..dcdba4f44 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0-rc1" +__version__ = "0.10.0-rc2" diff --git a/debian/changelog b/debian/changelog index aba8080c9..c7f8c3fca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +securedrop-client (0.10.0~rc2) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Thu, 14 Mar 2024 14:08:36 -0400 + securedrop-client (0.10.0~rc1) unstable; urgency=medium * see changelog.md diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 94b406848..dcdba4f44 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0-rc1" +__version__ = "0.10.0-rc2" From e9c70052cf0e919f980f3e0a7ebbfb075e155a71 Mon Sep 17 00:00:00 2001 From: Ro Date: Thu, 14 Mar 2024 20:19:20 -0400 Subject: [PATCH 718/751] Ensure files on USB have read permissions, not just enclosing directory. (cherry picked from commit 5856f6712ba2c44ec3d3af0a7ff64b70d8b61392) --- export/securedrop_export/disk/cli.py | 15 ++++------ export/tests/disk/test_cli.py | 43 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/export/securedrop_export/disk/cli.py b/export/securedrop_export/disk/cli.py index e8275e627..23c9db140 100644 --- a/export/securedrop_export/disk/cli.py +++ b/export/securedrop_export/disk/cli.py @@ -424,13 +424,16 @@ def write_data_to_device( is_error = False target_path = os.path.join(device.mountpoint, archive_target_dirname) - subprocess.check_call(["mkdir", target_path], preexec_fn=self._set_umask_usb) + subprocess.check_call(["mkdir", target_path]) export_data = os.path.join(archive_tmpdir, "export_data/") logger.debug("Copying file to {}".format(archive_target_dirname)) subprocess.check_call(["cp", "-r", export_data, target_path]) - logger.info("File copied successfully to {}".format(archive_target_dirname)) + logger.info("File copied successfully to {}".format(target_path)) + + subprocess.check_call(["chmod", "-R", "ugo+r", target_path]) + logger.info("Read permissions granted on {}".format(target_path)) except (subprocess.CalledProcessError, OSError) as ex: logger.error(ex) @@ -442,14 +445,6 @@ def write_data_to_device( finally: self.cleanup(device, archive_tmpdir, is_error) - def _set_umask_usb(self) -> None: - """ - Set umask to 0o22 before writing to USB, to facilitate reading exported - files on other computers. - """ - os.setpgrp() - os.umask(0o22) - def cleanup( self, volume: MountedVolume, diff --git a/export/tests/disk/test_cli.py b/export/tests/disk/test_cli.py index c046a1f95..3d47c442d 100644 --- a/export/tests/disk/test_cli.py +++ b/export/tests/disk/test_cli.py @@ -1,10 +1,14 @@ +import os import re +import stat import subprocess +from tempfile import TemporaryDirectory from unittest import mock import pytest from securedrop_export.archive import Archive +from securedrop_export.directory import safe_mkdir from securedrop_export.disk.cli import CLI from securedrop_export.disk.status import Status from securedrop_export.disk.volume import EncryptionScheme, MountedVolume, Volume @@ -454,3 +458,42 @@ def test_parse_correct_mountpoint_from_pexpect(self, mock_pexpect): ) assert mv.unlocked_name == "/dev/dm-0" assert mv.mountpoint == "/media/usb" + + def test__write_data_correct_permissions(self): + # This is the permission set when extracting the archive + old_umask = os.umask(0o77) + + try: + with ( + mock.patch.object(self.cli, "cleanup"), + TemporaryDirectory() as archive_dir, + TemporaryDirectory() as mock_mountpoint, + ): + safe_mkdir(archive_dir, "export_data") + export_dir = os.path.join(archive_dir, "export_data") + export_filepath = os.path.join(export_dir, "export_file.txt") + export_file = open(export_filepath, "w+") + export_file.write("Export me!") + export_file.close() + + # Sanity + stat_result = oct(stat.S_IMODE(os.stat(export_filepath).st_mode)) + assert stat_result == "0o600" + + fake_volume = MountedVolume( + "fake", "fake", EncryptionScheme.LUKS, mountpoint=mock_mountpoint + ) + self.cli.write_data_to_device(fake_volume, archive_dir, "sd-export") + + export_dir = os.path.join(mock_mountpoint, "sd-export") + export_datadir = os.path.join(export_dir, "export_data") + export_file = os.path.join(export_datadir, "export_file.txt") + + assert os.path.exists(export_dir) + assert os.path.exists(export_file) + + stat_result = oct(stat.S_IMODE(os.stat(export_file).st_mode)) + assert stat_result == "0o644" + + finally: + os.umask(old_umask) From df2c1d93e6dccfd6bd551b4d93ba41553dededc0 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Mar 2024 11:48:01 -0400 Subject: [PATCH 719/751] Run tests as not-root Better mimics the Qubes VM environment. I didn't set up passwordless-sudo (like Qubes) since it isn't needed right now. (cherry picked from commit d7fb78dd2f0a495a8b9ac43b7790f26e998fe7c8) --- .github/workflows/test.yml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d29e7c61f..2388a9cc4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,8 +32,12 @@ jobs: container: debian:${{ matrix.debian_version }} steps: - run: | - apt-get update && apt-get install --yes git make gnupg + apt-get update && apt-get install --yes git make gnupg sudo - uses: actions/checkout@v4 + - name: Setup user + run: | + # We want to run tests as a regular user, similar to Qubes VMs + useradd --create-home --shell /bin/bash user - name: Install dependencies run: | source /etc/os-release @@ -48,10 +52,11 @@ jobs: echo "Unsupported Debian version: $VERSION_CODENAME" exit 1 fi - poetry -C ${{ matrix.component }} install + sudo -u user poetry -C ${{ matrix.component }} install - name: Run test run: | - make -C ${{ matrix.component }} test + sudo chown -R user:user . + sudo -u user make -C ${{ matrix.component }} test # Run the various `make test-...` commands for the client. # TODO: these should be consolidated into one when feasible @@ -70,8 +75,12 @@ jobs: container: debian:${{ matrix.debian_version }} steps: - run: | - apt-get update && apt-get install --yes git make gnupg + apt-get update && apt-get install --yes git make gnupg sudo - uses: actions/checkout@v4 + - name: Setup user + run: | + # We want to run tests as a regular user, similar to Qubes VMs + useradd --create-home --shell /bin/bash user - name: Install dependencies run: | source /etc/os-release @@ -86,11 +95,12 @@ jobs: echo "Unsupported Debian version: $VERSION_CODENAME" exit 1 fi - poetry -C client install make -C client ci-install-deps + sudo -u user poetry -C client install - name: Run test run: | - make -C client ${{ matrix.command }} + sudo chown -R user:user . + sudo -u user make -C client ${{ matrix.command }} # Run the client i18n/l10n checks. internationalization: From 584f25c665677d200cc14e984ace9d8a3651c977 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 15 Mar 2024 13:15:48 -0400 Subject: [PATCH 720/751] SecureDrop Client 0.10.0-rc3 --- changelog.md | 5 +++++ client/securedrop_client/__init__.py | 2 +- debian/changelog | 6 ++++++ export/securedrop_export/__init__.py | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 7bbda3684..deb2497eb 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 0.10.0-rc3 + +* Ensure files on USB have read permissions, not just enclosing directory. (#1917) +* Run CI as a non-root user. (#1919) + ## 0.10.0-rc2 * Support unpartitioned VeraCrypt drives. (#1908) diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index dcdba4f44..7a3a936ae 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0-rc2" +__version__ = "0.10.0-rc3" diff --git a/debian/changelog b/debian/changelog index c7f8c3fca..ab4dfa053 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +securedrop-client (0.10.0~rc3) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Fri, 15 Mar 2024 13:15:31 -0400 + securedrop-client (0.10.0~rc2) unstable; urgency=medium * see changelog.md diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index dcdba4f44..7a3a936ae 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0-rc2" +__version__ = "0.10.0-rc3" From 0366c386affcdf4adccde4b77cd102f8188e66ee Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:37 +0000 Subject: [PATCH 721/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit a86a4244512250fdd1d2701395aa7b13e99fcaae) --- client/securedrop_client/locale/bn/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po b/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po index 62e163768..9eb30cd6b 100644 --- a/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/bn/LC_MESSAGES/messages.po @@ -302,10 +302,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From e1a1da9ed1fae11d529af706e559c6ed3c0de9c5 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 722/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 9012b4dbff3fb394f6eb0927b5aec94239bbc1fd) --- client/securedrop_client/locale/ca/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po index afdce098f..aa2bc78d4 100644 --- a/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/ca/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 87bbf21f8fb0fa2775f72fb2acc8e6ea48af3932 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 723/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 4fe07dec018e39dc96a8e0796154d151e16633ed) --- client/securedrop_client/locale/de/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/de/LC_MESSAGES/messages.po b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po index 25535fa88..b0690d4a1 100644 --- a/client/securedrop_client/locale/de/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/de/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From cd17cd1a4fe0be4e75d6f4c197b9ecf3a76c46a6 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 724/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 525917dfd1a8bd9cc264c4ba17c535ceff35fb79) --- client/securedrop_client/locale/el/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/el/LC_MESSAGES/messages.po b/client/securedrop_client/locale/el/LC_MESSAGES/messages.po index d60dc17b5..106e3d05c 100644 --- a/client/securedrop_client/locale/el/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/el/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From eb596f5a7b153e7c3a02eeb1eb9014fa8602b8fb Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 725/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit a99454b3cfae7def295ee85119e9da87d12c1ee1) --- client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po b/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po index 2d4375bb1..342cd4c20 100644 --- a/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/en_XA/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 5940aff9f0296be3b90177167bfeab83245d9e3a Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 726/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 0366ca7a42dd0676959a0d9e8361f05693e04390) --- client/securedrop_client/locale/es/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/es/LC_MESSAGES/messages.po b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po index cc6c98752..23d0ec71f 100644 --- a/client/securedrop_client/locale/es/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/es/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 49ab53283f6d152e74b1c482a37ee82745d05cbf Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 727/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 508fc5fc984418854acdae7134e775b8465f88d1) --- client/securedrop_client/locale/fi/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po b/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po index aa1bbade8..b985583f1 100644 --- a/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/fi/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 41aaeb4ff373f7c6bc0c4bca0e92dbe794012b32 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 728/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit a98bf4ff3e6832e3186719b9f2f931fa9ce217f6) --- client/securedrop_client/locale/fr/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po index 8bfccc45e..0ba727205 100644 --- a/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/fr/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 9f8e691cbf72a661b9009ff71c3d95f8bd542628 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 729/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit f40bb42cb2e3b932161e337ff223ab0aac965a77) --- client/securedrop_client/locale/hr/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po index a5d07b499..6a44d056a 100644 --- a/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/hr/LC_MESSAGES/messages.po @@ -318,10 +318,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From a9187b2332279a1d7889941257806ade6e49d19f Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 730/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 6e90defc606df98ac0da66eb55dacf289c373706) --- client/securedrop_client/locale/is/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/is/LC_MESSAGES/messages.po b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po index d6deda06e..b14637ca8 100644 --- a/client/securedrop_client/locale/is/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/is/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From bb272f260b2e6f13cb067303f08dc30251cd5dc2 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 731/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 7bb6f2ef01755733482736f74965b37ce68f7261) --- client/securedrop_client/locale/it/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/it/LC_MESSAGES/messages.po b/client/securedrop_client/locale/it/LC_MESSAGES/messages.po index a0cbd3631..9ee5d8c19 100644 --- a/client/securedrop_client/locale/it/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/it/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 3ffa7bc9781683c16e86180afb1f15007bca9479 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 732/751] Translated using Weblate (Polish) Currently translated at 100.0% (115 of 115 strings) Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Adam Rak Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/pl/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 72e0d8f38fceeb335d82faa354e70dfd46518bf4) --- .../locale/pl/LC_MESSAGES/messages.po | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po index 219eb8c8d..455dd8a1d 100644 --- a/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.8.1\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2024-03-05 09:30+0000\n" +"PO-Revision-Date: 2024-03-09 07:30+0000\n" "Last-Translator: Adam Rak \n" "Language-Team: Polish \n" "Language: pl\n" @@ -318,11 +318,11 @@ msgstr "Błąd podczas montowania napędu" msgid "Error during export" msgstr "Błąd podczas eksportu" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "Pliki zostały wyeksportowane pomyślnie, ale nie można odmontować urządzenia USB." -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." -msgstr "Pliki zostały wyeksportowane pomyślnie, ale na dysku pozostały niektóre pliki tymczasowe. Uruchom ponownie system, aby je usunąć." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." +msgstr "Pliki zostały wyeksportowane pomyślnie, ale niektóre pliki tymczasowe pozostają na dysku. Uruchom ponownie system, aby je usunąć." msgid "Export successful" msgstr "Eksport udany" @@ -402,6 +402,12 @@ msgstr "Twoja organizacja nie będzie mogła wysyłać im odpowiedzi." msgid "All files and messages from that source will also be destroyed." msgstr "Wszystkie pliki i wiadomośc od tego źródła również zostaną zniszczone." +#~ msgid "Files were exported succesfully, but the USB device could not be unmounted." +#~ msgstr "Pliki zostały wyeksportowane pomyślnie, ale nie można odmontować urządzenia USB." + +#~ msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +#~ msgstr "Pliki zostały wyeksportowane pomyślnie, ale na dysku pozostały niektóre pliki tymczasowe. Uruchom ponownie system, aby je usunąć." + #~ msgid "SUBMIT" #~ msgstr "PRZEŚLIJ" From 7b3cf16b629019fa64517b589156799f513bf28a Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 733/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 0d729ffafd6811c7f0da6d3f78140f3794d72460) --- client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po index 2cda0dc04..782359fc4 100644 --- a/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pt_BR/LC_MESSAGES/messages.po @@ -315,10 +315,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 163f3ea01f9ed245c38a0cd6826870502d3a12f0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 734/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit d726a9e6d6b4e2009bde953a931d0ca7791e22b2) --- client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po index 2bf5b1c0a..5f86b77dc 100644 --- a/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/pt_PT/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 129fb68337514d2fb0157a810309efe67d6df2ca Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 735/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 6be72a3bc966781f1e7ebe096e7465b8904c3243) --- client/securedrop_client/locale/ru/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po index 6600ac649..0d824afe1 100644 --- a/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/ru/LC_MESSAGES/messages.po @@ -318,10 +318,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 7a7c1d41c1901bd57686fb6ea17f15d568b803ea Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 736/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit e355047a7b016a69480b8c3415edec6581e9ee17) --- client/securedrop_client/locale/sk/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po index adbd9ec4d..c59114d1c 100644 --- a/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/sk/LC_MESSAGES/messages.po @@ -318,10 +318,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 24afb960b7ec78f8815e5871c9a7eed6c1f592d5 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 737/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 678dc6d1536385978e777bc06482ab6322b44803) --- client/securedrop_client/locale/sv/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po index 8e4dc2ee8..c1cdddc4f 100644 --- a/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/sv/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 11d0ee53b3d1a68d29b268633ed24a229b8132fa Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 738/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 7f20c1c06aef5a6fc029690b4e707d0dfd6678b0) --- client/securedrop_client/locale/tr/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po index 6c3a1dcfc..5ec65a5e3 100644 --- a/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/tr/LC_MESSAGES/messages.po @@ -314,10 +314,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From fe70cca8bf241aa4dd1d2a01633fd10cdc31671e Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 739/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 70321e4492ac76478514143fb0599355ddd2fb70) --- .../securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po index 1c53c8f46..950c9f0f5 100644 --- a/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/zh_Hans/LC_MESSAGES/messages.po @@ -310,10 +310,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 57444bb9429219bbb9ec70ae443bd929039afc93 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 740/751] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translated using Weblate (Chinese (Traditional)) Currently translated at 88.6% (102 of 115 strings) Co-authored-by: Meng Pang Wang Co-authored-by: Weblate Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/zh_Hant/ Translation: SecureDrop/SecureDrop Client (cherry picked from commit 31c7227716496d65925953d926c9d248ee24e0ef) --- .../locale/zh_Hant/LC_MESSAGES/messages.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po b/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po index 150fd0d45..eb2c08c8b 100644 --- a/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po +++ b/client/securedrop_client/locale/zh_Hant/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SecureDrop Client 0.9.0\n" "Report-Msgid-Bugs-To: securedrop@freedom.press\n" -"PO-Revision-Date: 2023-12-19 08:33+0000\n" +"PO-Revision-Date: 2024-03-08 20:30+0000\n" "Last-Translator: Meng Pang Wang \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_Hant\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.2.1\n" +"X-Generator: Weblate 5.3.1\n" "Generated-By: Babel 2.12.1\n" msgid "{application_name} is already running" @@ -284,13 +284,13 @@ msgid "DONE" msgstr "完成" msgid "BACK" -msgstr "" +msgstr "返回" msgid "No device detected" -msgstr "" +msgstr "未偵測到裝置" msgid "Too many USB devices detected; please insert one supported device." -msgstr "" +msgstr "偵測到太多 USB 裝置;請僅插入一項裝置。" msgid "Either the drive is not encrypted or there is something else wrong with it.
If this is a VeraCrypt drive, please unlock it from within `sd-devices`, then try again." msgstr "" @@ -299,10 +299,10 @@ msgid "The device is ready for export." msgstr "" msgid "The device is locked." -msgstr "" +msgstr "裝置已鎖定。" msgid "The passphrase provided did not work. Please try again." -msgstr "所提供的密語無效,請重試。" +msgstr "您輸入的助記詞無效,請再試一次。" msgid "Error mounting drive" msgstr "" @@ -310,10 +310,10 @@ msgstr "" msgid "Error during export" msgstr "" -msgid "Files were exported succesfully, but the USB device could not be unmounted." +msgid "Files were exported successfully, but the USB device could not be unmounted." msgstr "" -msgid "Files were exported succesfully, but some temporary files remain on disk.Reboot to remove them." +msgid "Files were exported successfully, but some temporary files remain on disk. Reboot to remove them." msgstr "" msgid "Export successful" From 7103615354f1bf2d3858797d6b24914e33b85698 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 9 Mar 2024 07:30:38 +0000 Subject: [PATCH 741/751] Update translation files Updated by "Squash Git commits" hook in Weblate. Translation: SecureDrop/SecureDrop Client Translate-URL: https://weblate.securedrop.org/projects/securedrop/securedrop-client/ (cherry picked from commit a7d0baab06998afa4db320186462ae0402afb5d2) --- .../locale/pl/LC_MESSAGES/messages.mo | Bin 15026 -> 15029 bytes .../locale/zh_Hant/LC_MESSAGES/messages.mo | Bin 11730 -> 11463 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/client/securedrop_client/locale/pl/LC_MESSAGES/messages.mo b/client/securedrop_client/locale/pl/LC_MESSAGES/messages.mo index 920dc72f526d90f3dc49b6209f279dbf20e07e92..f6e24314a32e26dd5c634e10114e7c95e180956d 100644 GIT binary patch delta 1622 zcmXZbUrfzm7{Kx8Aa(jfb?Q*Wuk??K(>YT4mqe-gH&Tnz&MK2AoDM2>{GGYvXg2eI zwwRUXXf|$GXp9@tB33shS8gzKlkel4?bPS}y?ggQ&-=X3`@r4j?!992I7Q@_MPxlz z#)vGz+sKrRU?l#)Xp~ryaIoM^G%yJBF%%1M0hVDNy0II3a1B;lMT+ny9>A|w@%#@^ zIYVSR6T5K=9zjju7_P$eSb*YYut}sAHK9DBX%7@)DsBwuMs7#01bm3Q+2{?9 zF`q-UUcRja(aH{_iBL?B#FDPT#3G!En*&y&HrGzn3e=+p=)jZcMO|;5@4vDHoX2+x z>Q$5?v85LE#3xXj`6^Nz=|MB`cSt9%-m49ck9Jk?T zEJZuJXrf0^6S#~9_F)tbp(Z+xAsD*IUoi{nd^~!VGg!``2ivd=)9JJlbm2LCf_epO zv;6_9Q8#QyJ=rPL^_NiJ`6$+4vYjW2Covqq2mFm@z9&1V|8xcs4*#7cpuSTFYV)l_ z`c6C;jn^>(AE0jd6szzpF2l6N90u#K7;oSv{D$i>mwVQVoks2cTRGG}m%#uNBqbAA zj&`DN!L!(bpHM4P!D0*EL`}R8HL(|{O*V|F_!Gl$77ef$)6l?+$ODr;Bqw=a&R_)t zGo6)*C8!HpQ4{i_-t|jdjgd?J71@fsCUN0PJcK6H)9&y#1Q(gacQ@E#3gSRw_dW}` zWXkqdnKPnl`PLHX{Z#QM-cGZ_RN;GNE)Mlhi?Nvu@5-2LUvo@!TvlU4Q)|EPV1u!L pZ(~!V(b~4JuHETsIm|>$dyA{px##&AquFWHx4D|!zV57`h<~yv#s~la delta 1597 zcmXZcTS(J!6u|MbNaw8O+?IJsU8Y@K-g0W0nUzr*-Lx2LCS3>$T-qwNT1pVTl(s@D zD}sWeo6VwLf-XkbOE)SDgNW>@mkQ~{pzrZN!F_)F@#lBW@0|1BeSgT`+hYpUi^zyW zqynp*A|AYqY{?+n@F&{wA5KKuWRZAG#t8IaG#29=T!DqygtzbpE<^yVKWYN4Sc)fbF}}hL7(;XouocbNgHd<|HIZ952_GV{C{I6Dx5Tmtbz9NEz-$P3!?`pud=k)+CX+=*9x{Vkvf^ zp7R##Ff}mMIOq^+1s>xBe2sdeA*5O|jM+GfdP8@zNE;U7G`xo?_yK3(2x{UfY-&q3 zA(xg8B(|K#bPPOTp&1Wh29Dx5Ok-1LAp-|ZBDJUqAKj+#7JBnwhDE)YEUcCfEwTcc3>y!^N!g@%Mx)q z-_uZAQI5oxTGSgKMjhsJNO9x_T8J+LEb`fShv(2jz4U=Ar~#j14SvQV^w3y6*oXR7 zoI=_zS5cpTj8+^(ZNU%JVNT8Dl9@gZsp z%5sc=Uep8kqu%TY>hq^j-}51?!)du9J1~F~@kiJ{XyLo$QU4f>&NF(Ji29ypqYmG4 zWbWi3+OY?%cn9^sN9e_uxDeCl^CN^?upBSo8vKrxIG;Xi#oAG)|585nFJRHn21&^% zR$&&=*W*!a!;h$y*}%gNyoj232sN>%s6+N1XW%cKfbk5#ZcIlPb|EjAgpi!%O%;np zEFzh#Ok9Tgz#i0uI#GN549n2Ez^KStUd!BAE;v>K?T?rL`rsK$o~fp9z)~I^v^learOuqbCTDDdy}`AurFoa%QA=SQEyDbS&JM2t1CD;VFC^zr()h!&nUArEVCH_ie_cU_0f+C}Tzh z8RNxF%DrQZNy53<%NUngLnee9wWv1hkUGsC?2b*AZCFJ466*cYT?6lp!~T>fVLUEI zb?`0hgP&kDHe+u*jcVr?Orm}B2N``3%rGJ`5jB#bmYEnwc_yY{5k84ENMFnm?1^nS z8Gk~(--k+u;84^+@{vboIqLaZjHZ3Fm5h3}8$|^jjwZX1+Kso zsESi)g|V0n)C^5QH9Uh$78anEU?1k;HFT-s(LIdmf@P?wUybU(I@Aa^qo%eV`7_73 z*zp@o#12%$5xgW5Q1uPQ88{r(jti$_3r@t)p3HwXnOx>iJ*!5Zne(Wr`xD1tG&>~= zC!s2+#07X6_5CoWPYpYfeP%YI2C@aI!tB6dcog5kKT%6KKY{tz+OJJ8W)SYe3_OdP z`u~u3O)5J{yFCY!aUni|n{WU&Vi2Ck(fB={v9Sz%q?tI&(Nc#lqE6XWE>vyqxX5Tq zW7xtn2`}+s2JWOBNh=Z5{5fg_$LY2@bPctM9-ww}Ok%)z%YMjqF-fR;(@`@v)p~x= z(sh)KX5dRyg;!7w_)tq>R=FAVemm+E z-3UB)nP}!y4JP179D!%#k|F_7f!kmGD3g@6ID74DU@EOXhQ57^}CjO0D%V7*B3};x*vYdzN;9}H! zWypRtHK+kM>OSq8HZpqgSIbURg?Df~K0y9V20JtZ7vXTM!>8~9s)P4Y14$nonCdC0 zkuSrs*kF~f;LDW5*x~;3pHD^~ZbNlsKSp3PYAITg*)^B39Pgsm@^#Lr_Cz)6`2ie? z7f{ddp+?#_El~d`RDHRqC0mfj{Ijvm3T_19Rvdw~XhW^Lc5gPZh{z)r60ZIS*R0AVXARnAn(6U<;r$oV+79U^Y|K}6iF~}V<+^VkRxt_ z3ATa%1ZZs+5Lxas;oV&Y7e}I9yZ?`t+gN>CPTeeXn-`w0&8F=KW8!|TNe`B?J$p8QV delta 2874 zcmZA2d2AGA7{~E}$`5N{aJmJa{XY9q}$q$2)NZrr}KNgf{-;F=h##V7q?&s{0udduTV3-=w7$D*MDMX?kDn4 zCicL4a4a%rQ;6NM0w>{G)broqAp8k6z*KH_p?{M}g*MG-)QIy?Bc6*%=tm7~DQ4jt zI06sgLX6==%wgFkU^Onnv#55nyBfnHm;%%a7NJ(S6f4J3SwTg6(~Jdp1J%KF*7X*w zLM{0Q)IhePX1WWtq=%6|bAk_EHRsX781}(rmO}#=3nqBrN8kCNKwS+7#mbxHO&hUrwcw z8`{HuY>aXt2M1sYj=&n!(w{-vHou{=Kb4QZH~{a)eC&rWB1vyTI2RA1OYM?jksexpnI+%bO&=Ta&tmlJ8GGW(q zs6D=pdcS@Dc(!*z4LH+v2xjQ~52K=Fn2Teu3LnAKu1Sn$4%ZViv!+&{)hxZSk9^=Xbg8m-KHwp`r$lyI-6^z3?rP=;j(~1ri6w@ApPMKgu-+ z)$mNz1m+`SFq?1$et{3*-#7#Zk;xk9Jgn4`*HY07M{p$mh+2_!&e{x|jGFoTsE!X} z3O1v*;xw{b<_E06gnQ##89?PqE$aJ2I2bRw-zN@c{WY`x+*Jo-Q4P*O=NAe|c(Vc% zupWovHsnw^MbER0 zjDx3dx}Hlthj^6Gs;Oud+sbq**+e_{hH~dQLMzc$?xT`OJWKy(rh8XE6vN!QV7r|E zd=qgp!LFDh;ua#6P|@nCXkWEeS|ycd2%Y!G2^DhLJVq!_lvB!wG(!EGS;RboA2p}2 zy3YTBhwv%lRw9{bD;?a57j^Vh_&IQnrxL5J=osb_NkmE8O;nPOk6%}s(Kmgeq+38} zkLMHQlPM&W8!9%TqcwrZBPJ32pgG43oSadj{l9eN207;x4wIQm=ww*Ve+Md05-H)v zH&9}Ya$@KMeiH zvdaRtwZ!kEx`ZYyZ!qLZo7BIg&|78~n@LM6eEy&nSX@+O2LdIF%iKG>Im%l8N_bjY ziYGm{JYe(Ce?84A$aV%1n%yZY^j@dU3(D+5dhy1e^Of6{uf!Rt9dF(laKNhY`(E+} zynJ751uEoCnk^0?{)t|N;-x#T_xzbP_vNOi_KfXD#_E==cp=fQLiLQGmQnfAW+%j=m zj_%hYgbro=+B;gaA+maByv^8_RhE|E%9h=&$M(`^sG;xh&@X*gjcncfR`l(iEk~;& z2iL`3KX&tkB1d+%G}p)WZoaa5eXRKaZA7Y@=srH`@bmqW652;=-f20uBV3+&+7o(w uU`EE9uj$U`TlH|$n$|rZ#8x##Yu7O+I=ZrUeQV>cP~E_j;SE{C68;6(G0H>$ From ba7d5ccfa32a959101d1652939c53d0a960be644 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Tue, 19 Mar 2024 14:15:16 -0400 Subject: [PATCH 742/751] SecureDrop Client 0.10.0 --- changelog.md | 25 ++++++++----------------- client/securedrop_client/__init__.py | 2 +- debian/changelog | 6 ++++++ export/securedrop_export/__init__.py | 2 +- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/changelog.md b/changelog.md index deb2497eb..f815f0664 100644 --- a/changelog.md +++ b/changelog.md @@ -1,26 +1,14 @@ # Changelog -## 0.10.0-rc3 - -* Ensure files on USB have read permissions, not just enclosing directory. (#1917) -* Run CI as a non-root user. (#1919) - -## 0.10.0-rc2 - -* Support unpartitioned VeraCrypt drives. (#1908) -* Adjust wording referring to "sd-devices" VM. (#1908) -* Remove __pycache__ folders from packages. (#1909) -* Remove specific version from .pot files. (#1915) - -## 0.10.0-rc1 +## 0.10.0 This is the first release from the merged securedrop-client repository, which now contains the securedrop-export, securedrop-log, securedrop-proxy and securedrop-sdk codebases. See our [blog post](https://securedrop.org/news/consolidating-securedrop-workstations-git-repositories-to-make-development-easier/) for more details. -All components now use the same version number, previous changelogs can be found in each component's -subfolder. +All components now use the same version number, previous changelogs can be found in each +component's subfolder. -* VeraCrypt-encrypted USB drives are now supported for export. (#1777) +* VeraCrypt-encrypted USB drives are now supported for export. (#1777, #1908) * Don't ask for a passphrase if the device is already unlocked ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105), #1777) * Ensure all print jobs have been fully enqueued ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105)) * Cleanup `metadata.json` from sd-devices after exporting ([securedrop-export#105](https://github.com/freedomofpress/securedrop-export/pull/105)) @@ -31,7 +19,7 @@ subfolder. * Fix typos in messages (#1651) * Fix homepage URL in setup.py (#1662) * Remove obsolete gvfs-bin dependency from securedrop-workstation-viewer (#1842) -* Set umask 0o22 before writing to USBs (#1872) +* Make files exported to USBs world readable (#1872, #1917) * Update translations from Weblate (#1548, #1747) * Add `.rtf` printing support ([securedrop-export#109](https://github.com/freedomofpress/securedrop-export/pull/109)) @@ -64,3 +52,6 @@ subfolder. * Parameterize sender_is_current_user in test instead of randomization (#1884) * Stop running client tests in parallel with pytest-xdist (#1881) * Run lintian on Debian packages (#1845) + * Run CI as a non-root user. (#1919) + * Remove __pycache__ folders from packages. (#1909) + * Remove specific version from .pot files. (#1915) diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index 7a3a936ae..61fb31cae 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0-rc3" +__version__ = "0.10.0" diff --git a/debian/changelog b/debian/changelog index ab4dfa053..0c5f6efc7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +securedrop-client (0.10.0) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Tue, 19 Mar 2024 14:07:49 -0400 + securedrop-client (0.10.0~rc3) unstable; urgency=medium * see changelog.md diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 7a3a936ae..61fb31cae 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0-rc3" +__version__ = "0.10.0" From 33acc247bebf8dc5e15c9ba94e3565d27975f655 Mon Sep 17 00:00:00 2001 From: Ro Date: Wed, 20 Mar 2024 13:15:18 -0400 Subject: [PATCH 743/751] Let parent handle dialog close via pyqtSignal on PrintTranscriptDialog. (cherry picked from commit b31da3e0f04146da3873e1e30bb774f1afe1c279) --- .../gui/conversation/export/print_transcript_dialog.py | 2 -- .../gui/conversation/export/test_print_transcript_dialog.py | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py b/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py index b6508fa06..423ea0699 100644 --- a/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py +++ b/client/securedrop_client/gui/conversation/export/print_transcript_dialog.py @@ -24,7 +24,6 @@ def __init__(self, device: Export, file_name: str, filepath: List[str]) -> None: def _print_transcript(self) -> None: self._device.print(self.transcript_location) - self.close() @pyqtSlot() def _on_print_preflight_check_succeeded(self) -> None: @@ -35,7 +34,6 @@ def _on_print_preflight_check_succeeded(self) -> None: if not self.continue_button.isEnabled(): self.continue_button.clicked.disconnect() self.continue_button.clicked.connect(self._print_transcript) - self.continue_button.setEnabled(True) self.continue_button.setFocus() return diff --git a/client/tests/gui/conversation/export/test_print_transcript_dialog.py b/client/tests/gui/conversation/export/test_print_transcript_dialog.py index af8679784..0349d531a 100644 --- a/client/tests/gui/conversation/export/test_print_transcript_dialog.py +++ b/client/tests/gui/conversation/export/test_print_transcript_dialog.py @@ -90,7 +90,9 @@ def test_PrintTranscriptDialog__print_transcript(mocker, print_transcript_dialog print_transcript_dialog._print_transcript() - print_transcript_dialog.close.assert_called_once_with() + # Dialog.close() should not be called directly; it is closed only + # after receiving the completed signal from the QProcess + print_transcript_dialog.close.assert_not_called() def test_PrintTranscriptDialog__on_print_preflight_check_succeeded(mocker, print_transcript_dialog): From e38772d051d0ca4e8c6198de77640ef84f5bc1de Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 20 Mar 2024 14:00:44 -0400 Subject: [PATCH 744/751] SecureDrop Client 0.10.1 --- changelog.md | 3 +++ client/securedrop_client/__init__.py | 2 +- debian/changelog | 6 ++++++ export/securedrop_export/__init__.py | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index f815f0664..f4c410e91 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 0.10.1 +* Fix printing of transcripts. (#1936) + ## 0.10.0 This is the first release from the merged securedrop-client repository, which now diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index 61fb31cae..1f4c4d43b 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0" +__version__ = "0.10.1" diff --git a/debian/changelog b/debian/changelog index 0c5f6efc7..d980c2e1a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +securedrop-client (0.10.1) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Wed, 20 Mar 2024 14:00:03 -0400 + securedrop-client (0.10.0) unstable; urgency=medium * see changelog.md diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 61fb31cae..1f4c4d43b 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.10.0" +__version__ = "0.10.1" From 0a97a8d3e7c1e0ab65a2560f349e455a78b37b4d Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Sun, 2 Jun 2024 12:06:43 -0400 Subject: [PATCH 745/751] Prepare 0.10.2 hotfix release - update version to 0.10.2 - add updated signing key --- changelog.md | 3 +++ client/securedrop_client/__init__.py | 2 +- debian/changelog | 6 ++++++ export/securedrop_export/__init__.py | 2 +- keyring/securedrop-keyring.gpg | Bin 3540 -> 5828 bytes 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index f4c410e91..ac724919d 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 0.10.2-rc1 +* Update signing key expiry date (#2049) + ## 0.10.1 * Fix printing of transcripts. (#1936) diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index 1f4c4d43b..11d578f6f 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.10.1" +__version__ = "0.10.2-rc1" diff --git a/debian/changelog b/debian/changelog index d980c2e1a..081ba0bdb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +securedrop-client (0.10.2~rc1) unstable; urgency=medium + + * see changelog.md + + -- SecureDrop Team Sun, 02 Jun 2024 11:56:33 -0400 + securedrop-client (0.10.1) unstable; urgency=medium * see changelog.md diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 1f4c4d43b..11d578f6f 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.10.1" +__version__ = "0.10.2-rc1" diff --git a/keyring/securedrop-keyring.gpg b/keyring/securedrop-keyring.gpg index 51b1fd78832ef0f7234446debb9b35c479e05219..aa3e360588216303558dcafc34643a3548780d3f 100644 GIT binary patch delta 2272 zcmV<62p{*<8^kTJ5CW4P0!#^s0#pPO0SW*e_)wrtpXbZ1qlKvwg3eS2?z%R z1r-Vj2nz)k0s{d60v-VZ7k~f?2@n{L-8*|C=A**n5C3t-of4CQ65Yk(|MJqf6Kyy* z<+pV9A%X2|6t{zFO)p&slg}8lQ~gJaU#c$umqwDai19Rn@~3mm6NLCl_-}WFKq@2g zEa6flf0s7FfBa!B;W^_8I<~C-!!9m@inKPgQ!G?hPh^(^_oqu1hu5d%|B~D^T@~;o z@1dcm=1bvZB#$R7J9?wp8Zq{#9Jk)dEvB&mjNaN_;s?WWB1CzsstS?{nCIrP1YGUd zyUHx89$9r%3!ZCGii-f?g-tl5NmJR=4ssQCf9Emz62{yd_d)*unq)%w&EcqJfwD<7 zb8myT%4|0#Vbo8&AdTu&YK6eSXuTpd!1eba;<#DAb$31gpTHq=V|%0)H}3)U7};wlyW`<>D*M`#pG-h&JMGfay;cBKCUbE$3v}O6IZ)EC0;hF zfBJZes%bY(Wuu8U*-qx^n8!tsYXXz+XS1C3x*VAo<;U($KSu!^5eUC8gORfoeed|)nsuHxEn4gLd-G4v-H9=+!I-&jxD6ZT^PHB1|Xyf!cAC1Wxac^kwXsIWe0+M+|A(2MDgGPAP90!YKA;$h`Ao&n7f@ zH%`ikOZ}xlZ7(@j-CG9)RIcA?CB<#rHdL9_;=i+a0#^c)cmh4M6a^XrlXwC>e`ZjV z+XV>=TF0&c3JDMxj@>(ZBIcvK!4Lm(2KH{pRdKlqUeBY8(=`DB=`0Vxe8=o`?yN<6 z>1&u5&HMykedC7i-vCKq{m#P{)f{6+Ye45N>!r{V| z8Sj0%25sSO6=XBj5Q8k)2tFy{e_S4!)H-*?PAH8WA=Qr!TXMpv7NMDqvs{BvZe~$M zuKJy#6)M)%Uevda^Fzr_I#fZQGVleCpWd?CV+W{wW!H`*I9WY!MjNV~6-=dvtz|hC z%GFYr-!3BCs^mMB&t}1@*33j7>iXY}-er0T9;K3a7oOlwTvoy$Vq_cC3RxA!^J_F3bn>Uhe%?Dc;9v`01o)xppR{}F$ ztKvcS$|%kMKgJrvSzA?=V^u4&HU}93lbiw>e_)wrtpXbi1qlKvwg3PM2@n{L-8*|C z=A%F+5CF0|%E*>A1I>6qk2WSvL2{PZMw$W($DE&>r_3(W;T(kGBLIvNrl)+wYv1*Bnc?0J8;(8}e3 z6Uz2HzDj^GpKHdSS#-JL^xGgEt`Z9t|JL7P$2gRC2EiXor5urW4{@*QP7$@p@{90` zz{Z01l6yV!5l(&T>;0#8(Rd5L9vloV-CCkN_k zL5|ItzF*0@ZT7$|FTQU;fPO`lEYyHWcVsI^ZsmGN5K&xfYMj#iV5reUG?2ZPf4IoU z-a*DHrSe0ehFU28W%KT~W%l;h1?wqfBPg(0TDC&^hH+-w!U%86&cJHUxjHe(l@M@0 zF6t!wl9h#zkpZfR-_=nXVCo=Me9oqM?wfL~CB*%6<~ zyLFR|3njB_2^s>kjSD{llZ^`{e`ZjWLInv6TF4au3JDMxj@>(ZBIcuHnh*fBl+D~J z2CeuN14-K&QZpE~?rb(_Y>~-5GpWC-xOX(d7669b6IoC#T3BzqJ$z_kiM_htSPdxN zR@mpGr<0AUe@(>Io->k~Gt4+SZ#p;?Ga2xS2`g9_l$!}sHgXqh8ce*sf8@*5d|W|* zpdGF%WT&E)&k?umG+`Edqd`EN zQu!-g72AY)1Rye{;M~D$f61Xv(5KBO+hTN?J{LpNj^!Ofxlm6rWnrebP8DWmOsQrj zK^hh=R+1^10Om{~o}S!w#_X!3G64UEWQ}@#D+*m+JPusS;qy?njtgKpbZIoDS=;8t zx9vVZK;nwC{uLyRiBLebxaR!FL5tN3AjU%ztEX2se8MJw%ws8we+z2A+jwB?2-*P~ zvvN+wF76)!5dmj(I68HXp}$PJLE^fYP*`ys7^F%-@@08>Z@1dK^W(wv3CU9gObxAt zBEM)Q(LC5#gZrAkm(5my(y=keE?M%4wSNQwq5x1bc{QcQLTbbjVogE^= c4Aji9c?Y*7(`EqyGbBaq0;-#{g^&~h0KW+tr~m)} From 9f43a7e8fe127ec8d7ae06729bd870dee5d31725 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Sun, 2 Jun 2024 12:48:44 -0400 Subject: [PATCH 746/751] Pin builder version for builds at pre-rust-proxy ref --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ff016f739..6786d5770 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,6 +26,7 @@ jobs: with: repository: "freedomofpress/securedrop-builder" path: "securedrop-builder" + ref: "3ae85f538e9b37dff5be0033f58370a982b099ff" lfs: true - name: Install dependencies run: | @@ -57,6 +58,7 @@ jobs: with: repository: "freedomofpress/securedrop-builder" path: "securedrop-builder" + ref: "3ae85f538e9b37dff5be0033f58370a982b099ff" lfs: true - name: Build packages run: | @@ -85,6 +87,7 @@ jobs: with: repository: "freedomofpress/securedrop-builder" path: "securedrop-builder" + ref: "3ae85f538e9b37dff5be0033f58370a982b099ff" lfs: true - name: Build packages run: | From a17d4538e5607fca63cb599fe234c11f9fb22e6d Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Mon, 24 Jun 2024 14:13:05 -0400 Subject: [PATCH 747/751] Updated to reference a tagged version of ssecuredrop-builder --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6786d5770..94f286bf4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: with: repository: "freedomofpress/securedrop-builder" path: "securedrop-builder" - ref: "3ae85f538e9b37dff5be0033f58370a982b099ff" + ref: "securedrop-client-0.10.2" lfs: true - name: Install dependencies run: | @@ -58,7 +58,7 @@ jobs: with: repository: "freedomofpress/securedrop-builder" path: "securedrop-builder" - ref: "3ae85f538e9b37dff5be0033f58370a982b099ff" + ref: "securedrop-client-0.10.2" lfs: true - name: Build packages run: | @@ -87,7 +87,7 @@ jobs: with: repository: "freedomofpress/securedrop-builder" path: "securedrop-builder" - ref: "3ae85f538e9b37dff5be0033f58370a982b099ff" + ref: "securedrop-client-0.10.2" lfs: true - name: Build packages run: | From dd0f9c4a34582820a361418da74544dfdbe6dde2 Mon Sep 17 00:00:00 2001 From: Kevin O'Gorman Date: Mon, 24 Jun 2024 14:54:16 -0400 Subject: [PATCH 748/751] Ignore reviewed safety alerts 71064, 67895 --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 88c61eaa7..1371445b3 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,8 @@ safety: ## Run safety dependency checks on build dependencies --ignore 61601 \ --ignore 61893 \ --ignore 62044 \ + --ignore 67895 \ + --ignore 71064 \ -r .PHONY: shellcheck From 4b108e15845e8bc4aa95d081cc69f20c6830461b Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 1 Jul 2024 16:23:38 -0400 Subject: [PATCH 749/751] Ignore safety 70612 (https://data.safetycli.com/v/70612/97c). We do not use untrusted templates and do not use the from_string function. --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1371445b3..5ae7c148b 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,8 @@ safety: ## Run safety dependency checks on build dependencies --ignore 62044 \ --ignore 67895 \ --ignore 71064 \ - -r + --ignore 70612 \ + -r .PHONY: shellcheck shellcheck: ## Lint shell scripts From 460481e4cb650461ed31c1b2540e8b9f701f95c5 Mon Sep 17 00:00:00 2001 From: Ro Date: Mon, 1 Jul 2024 16:50:53 -0400 Subject: [PATCH 750/751] release-0.10.2-rc1: update changelog --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index ac724919d..aab23a03a 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ ## 0.10.2-rc1 * Update signing key expiry date (#2049) +* Build dependencies from signed tag in securedrop-builder repo (#2050) ## 0.10.1 * Fix printing of transcripts. (#1936) From 43b57cb371b06e2482075d128dc6dd3a5b072937 Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 2 Jul 2024 11:48:02 -0400 Subject: [PATCH 751/751] Update changelog and version to 0.10.2 --- changelog.md | 2 +- client/securedrop_client/__init__.py | 2 +- debian/changelog | 4 ++-- export/securedrop_export/__init__.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/changelog.md b/changelog.md index aab23a03a..656606f8b 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,6 @@ # Changelog -## 0.10.2-rc1 +## 0.10.2 * Update signing key expiry date (#2049) * Build dependencies from signed tag in securedrop-builder repo (#2050) diff --git a/client/securedrop_client/__init__.py b/client/securedrop_client/__init__.py index 11d578f6f..17c1a6260 100644 --- a/client/securedrop_client/__init__.py +++ b/client/securedrop_client/__init__.py @@ -1 +1 @@ -__version__ = "0.10.2-rc1" +__version__ = "0.10.2" diff --git a/debian/changelog b/debian/changelog index 081ba0bdb..6ea5a9997 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -securedrop-client (0.10.2~rc1) unstable; urgency=medium +securedrop-client (0.10.2) unstable; urgency=medium * see changelog.md - -- SecureDrop Team Sun, 02 Jun 2024 11:56:33 -0400 + -- SecureDrop Team Tue, 02 Jul 2024 11:45:31 -0400 securedrop-client (0.10.1) unstable; urgency=medium diff --git a/export/securedrop_export/__init__.py b/export/securedrop_export/__init__.py index 11d578f6f..17c1a6260 100644 --- a/export/securedrop_export/__init__.py +++ b/export/securedrop_export/__init__.py @@ -1 +1 @@ -__version__ = "0.10.2-rc1" +__version__ = "0.10.2"